Undestanding ioread32() / readl() and friends
Arnd Bergmann
arnd at arndb.de
Wed Feb 21 20:56:27 EST 2007
On Wednesday 21 February 2007 10:50, Florian Boelstler wrote:
> I just came across include/asm-ppc/io.h, which revealed that ioread32()
> maps to readl(), which in turn maps to in_le32() (when CONFIG_APUS and
> CONFIG_8260_PCI9 are both not defined).
> in_le32() uses a asm instruction lwbrx to do byte swapping.
>
> I don't really get why ioread32() effectively returns a little-endian
> value on a big-endian PPCs.
>
> Is this a sort of general rule that ioread32() always returns
> little-endian values on all architectures?
the ioread family of functions is used for PCI devices, which
are little-endian by definition.
If you want to access on-chip devices that are not behind PCI,
you should use the in_be family of functions.
Arnd <><
More information about the Linuxppc-embedded
mailing list