mmap and ppc460gt
vb
vb at vsbe.com
Thu Aug 28 09:13:52 EST 2008
On Wed, Aug 27, 2008 at 1:13 AM, Arnd Bergmann <arnd at arndb.de> wrote:
> 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 <><
>
Arnd, Roland, thank you for your replies, I did manage to get it
mapped using mmap64(), but as it often happens clearing one hurdle
just brings us to the next one :-)
The problem now is that that PCI register space gets mapped with
caching enabled (by looking at the TLB contents), so I still can't
control the device. I did some search and indeed UIO device driver
came up, I'll read the article. I was wondering though if there is a
simpler way to modify cache attributes of a region. mmap() doesn't
seem to provide an interface for that, is there some other function to
call to configure 'cache inhibit' attribute for a region?
TIA,
Vadim
More information about the Linuxppc-embedded
mailing list