Yosemite/440EP why are readl()/ioread32() setup to read little-endian?
David Hawkins
dwh at ovro.caltech.edu
Thu Jan 26 05:26:55 EST 2006
Hi Stefan,
>>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.
Ok, I figured that was probably the case. Thanks for the confirmation.
>>Should I just be using pointers for remapped processor
>>registers, and only use readl(), ioread32(), etc, on external
>>memory?
>
> That's how I do it. Only use readl() and friends for pci spaces (or other
> little endian memory mapped areas).
I took a look at the Yosemite network and USB drivers, it looks like
the authors of those drivers chose to use in_be32() and out_be32().
Personally I like the concept of using pointers, or more usefully
pointers to structure overlays for device control. However, the
impression I have is that this is inherently more non-portable
than using the readl()/writel(), ioread32()/iowrite32(), and
now I guess I can add in_be32()/out_be32() to that list.
But if you use pointers, thats good enough for me!
Cheers
Dave
More information about the Linuxppc-embedded
mailing list