Subject: Re: mmap and ppc460gt

From: Arnd Bergmann <[email-masked]>
Date: Wed, 27 Aug 2008 10:13:18 +0200

On Wednesday 27 August 2008, Roland Dreier wrote:
>  > I don't seem to be able to port this to ppc460gt: on this architecture
>  > the PCI register space can be mapped only to 36 bit address ranges
>  > with nonzero top nibbles. But mmap()  (at least the one I have in
>  > 2.6.25)  accepts only 32 bit values for addresses, hence there is no
>  > way to map PCI space into user space.
> 
> In the past I've been able to use mmap64() on ppc440 to get at 36-bit
> addresses.  As far as I know this should still work.

Right, this is supposed to work. If it doesn't, report it as a bug.

> Also you should be able to get at the BAR of a PCI device by using
> mmap() on a resource file under /sys/devices, eg something like
> /sys/devices/pci0000:00/0000:00:04.0/0000:0b:00.0/resource0
> (where the bus numbers obviously depend on your system and the resource
> number depends on what BAR your device has registers in)

This should work as well.

The best way to do it however would be to implement a UIO device driver
for your device, see e.g. http://lwn.net/Articles/232575/.

That gives you proper control over the permissions and lets you handle
interrupts and other things as well.

	Arnd <><