On Wed, Jan 25, 2006 at 10:26:55AM -0800, David Hawkins wrote: > 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!
use in_/out_ accessors, not pointers. Look at other 4xx drivers (i2c, emac) Also, you don't have worry about this code being non-portable, because every chip has it's own GPIO impl anyway. -- Eugene