> I have been working on a PPC platform, running Linux 2.2. This platform has > a register where you can enable different options and where you can control > several LED's. The vendor mentions that this register is mapped in memory at > FA400000. > > When I write (in a driver) > > char *p=0xFA40000; > > *p = ..; (I know I should use writeb to be more portable.) > > it seems to work; the leds can be manipulated. But as FA400000 is a physical > address, I thought that it had to be *p=__va(0xFA40000); > > Who can help me out? Where do I find a nice document about this?
actually when you refer to adress mentioned 0xFA400000 in driver this address is already virtual adress hence no need to use __va macro. this address was originally a physical adress and unaccessible from device untill earlier in code a call for ioremap would have taken place. after ioremapping it is a virtual address and can be used nicely in a driver. transaction for this address would be valid as processor has now a entry for it and would be decoded by host bridge and forwarded to LED. without ioremapping if you use you will get a kernel panic. ** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/