Hi Wolfgang,
Weird, I would have thought the usage of in_be out_be macro ensured that. But after checking, they only include a isync instruction which doesn't guarantee memory access will be done while mb() uses sync that does guarantee that. Any one can comment on that ? Wasn't the purpose of the in_be out_be to ensure that ? Sylvain Wolfgang Denk wrote: > Hello, > > the following patch is against the current 2.6 kernel.org tree > (commit f96c3bbe91117402f13119ce9e609db9087ed58f): > > As a prerequisite for a working system, the following two poatches > are needed, too: > > http://patchwork.ozlabs.org/linuxppc/patch?id=2018 > http://patchwork.ozlabs.org/linuxppc/patch?id=2017 > > > !-------------------------------------------------------------flip- > > [patch] making PCI work in the MPC5200 > Patch by Alessandro Rubini, 08 Oct 2005 > > Make PCI work in 2.6 with the IceCube 5200. > > Without the memory barriers all PCI config reads returned 0xffffffff > (actually, there may be more mb() than needed). Using wmb(); was not > enough to be able to read configuration registers. > > Signed-off by Alessandro Rubini <rubini at gnudd.com> > Signed-off by Wolfgang Denk <wd at denx.de> > > --- > commit cdd7fdf10b3cbb7eb82cacc7ba5dba3553020f49 > tree 97d045b44c87c00a4b3fe5bca57b479be87e68b6 > parent 509b5c9fcbfe7fcae7d4f98946e4dc9794d68645 > author Wolfgang Denk <wd at pollux.denx.de> Sat, 08 Oct 2005 22:41:53 +0200 > committer Wolfgang Denk <wd at pollux.denx.de> Sat, 08 Oct 2005 22:41:53 +0200 > > arch/ppc/syslib/mpc52xx_pci.c | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/arch/ppc/syslib/mpc52xx_pci.c b/arch/ppc/syslib/mpc52xx_pci.c > --- a/arch/ppc/syslib/mpc52xx_pci.c > +++ b/arch/ppc/syslib/mpc52xx_pci.c > @@ -39,6 +39,7 @@ mpc52xx_pci_read_config(struct pci_bus * > ((bus->number - hose->bus_offset) << 16) | > (devfn << 8) | > (offset & 0xfc)); > + mb(); > > value = in_le32(hose->cfg_data); > > @@ -70,6 +71,7 @@ mpc52xx_pci_write_config(struct pci_bus > ((bus->number - hose->bus_offset) << 16) | > (devfn << 8) | > (offset & 0xfc)); > + mb(); > > if (len != 4) { > value = in_le32(hose->cfg_data); > @@ -80,9 +82,11 @@ mpc52xx_pci_write_config(struct pci_bus > > value &= ~mask; > val = value | ((val << offset) & mask); > + mb(); > } > > out_le32(hose->cfg_data, val); > + mb(); > > out_be32(hose->cfg_addr, 0); > > > > > !-------------------------------------------------------------flip- > > > > Best regards, > > Wolfgang Denk >