From 97962443eea891a4451d40bf34f15a6c9219625f Mon Sep 17 00:00:00 2001 From: Christian Mauderer Date: Fri, 20 Oct 2023 10:52:14 +0200 Subject: [PATCH] pci_mpc85xx: Ensure access order for config-regs The CFG_ADDR has to be written before reading or writing the CFG_DATA. --- freebsd/sys/powerpc/mpc85xx/pci_mpc85xx.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/freebsd/sys/powerpc/mpc85xx/pci_mpc85xx.c b/freebsd/sys/powerpc/mpc85xx/pci_mpc85xx.c index 47879e68..b479eb33 100644 --- a/freebsd/sys/powerpc/mpc85xx/pci_mpc85xx.c +++ b/freebsd/sys/powerpc/mpc85xx/pci_mpc85xx.c @@ -80,6 +80,7 @@ __FBSDID("$FreeBSD$"); #include #ifdef __rtems__ #include +#include #endif /* __rtems__ */ #define REG_CFG_ADDR 0x0000 @@ -460,6 +461,9 @@ fsl_pcib_cfgread(struct fsl_pcib_softc *sc, u_int bus, u_int slot, u_int func, mtx_lock_spin(&sc->sc_cfg_mtx); bus_space_write_4(sc->sc_bst, sc->sc_bsh, REG_CFG_ADDR, addr); +#ifdef __rtems__ + ppc_enforce_in_order_execution_of_io(); +#endif switch (bytes) { case 1: @@ -498,6 +502,9 @@ fsl_pcib_cfgwrite(struct fsl_pcib_softc *sc, u_int bus, u_int slot, u_int func, mtx_lock_spin(&sc->sc_cfg_mtx); bus_space_write_4(sc->sc_bst, sc->sc_bsh, REG_CFG_ADDR, addr); +#ifdef __rtems__ + ppc_enforce_in_order_execution_of_io(); +#endif switch (bytes) { case 1: