> >>readl() and ioread32() read the registers in little-endian format! > > > > Correct. That's how it is implemented on all platforms. Think for > > example of an pci device driver. Using these IO functions, the > > driver will become platform independent, running without > > modifications on little- and big-endian machines. > > I just stumbled across the section in Rubini 3rd Ed that mislead > me into believing that the readl()/writel() were machine endianness > dependent, i.e., LE on x86, BE on PPC.
> p453 of his book has a PCI DMA example, where he uses the > cpu_to_le32() macros inside calls writel(). > However, since these functions are internally implemented to > perform LE operations, this example appears to be incorrect. > Would you agree? No, I think it is correct. On most architectures readl() and writel() assume you are accessing MMIO on the PCI bus, which is little-endian. So these macros convert between the endian-ness of the CPU and the endian-ness of the PCI bus. Clive