Access physical memory via mmap() on ppc440epx.
Leonid
Leonid at a-k-a.net
Fri Apr 11 01:15:59 EST 2008
Hi, Josh:
I have double checked, mmap64 doesn't work either. This is the piece of
code which does re-mapping:
unsigned long long StartAddressL = 0x100000000ULL | StartAddress;
mmap_addr = (unsigned int) mmap64(NULL,
size,
PROT_READ | PROT_WRITE,
MAP_SHARED,
dev_mem_fd,
StartAddressL);
While in GDB I can see variables' values:
(gdb) p/x mmap_addr
$1 = 0x30028000
(gdb) p/x StartAddressL
No symbol "StartAddressL" in current context.
(gdb) p/x StartAddress
$2 = 0xfc240000
(gdb) p/x size
$3 = 0x60000
(gdb)
This call returns successfully, but when I stop the board and dump TLB
entries (I have BDI2000 connected) on BDI2000 screen, there is no entry
with this physical address.
However when I also do re-mapping (using ioremap64()) in kernel driver
(physical address is different - 0xea000000), this is the code:
if((mcfp_ebi_baseptr = ioremap64 (0x1ea000000ULL, 512)) == NULL) {
...
When I stop in debugger right after remapping, TLB entry shows up but
somewhat non-completed yet:
10 : 00 00000000 1KB -0 -> 1_ea000000 U:0000 -I-G- XWRXWR
Later, when I stop board right BEFORE actual accessing memory, the entry
is
present:
23 : 00 d1050000 4KB V0 -> 1_ea000000 U:0000 -IMG- ----WR
And kernel driver is working.
So something is definitely wrong with mmap/mmap64 call itself. Should I
use different parameters?
Thanks,
Leonid.
-----Original Message-----
From: linuxppc-embedded-bounces+leonid=a-k-a.net at ozlabs.org
[mailto:linuxppc-embedded-bounces+leonid=a-k-a.net at ozlabs.org] On Behalf
Of Leonid
Sent: Wednesday, April 02, 2008 3:51 PM
To: Josh Boyer
Cc: linuxppc-embedded at ozlabs.org
Subject: RE: Access physical memory via mmap() on ppc440epx.
Hi, Josh:
I have resolved my kernel driver problem, it was my own bug, didn't have
anything to do with memory remapping itself. Your suggestion to move to
ioremap64() did resolve problem completely.
I still need investigate mmap() crash. Apparently switch to mmap64()
didn't help, but it could be some another bug, I'll double check.
Thanks,
Leonid.
-----Original Message-----
From: linuxppc-embedded-bounces+leonid=a-k-a.net at ozlabs.org
[mailto:linuxppc-embedded-bounces+leonid=a-k-a.net at ozlabs.org] On Behalf
Of Leonid
Sent: Tuesday, April 01, 2008 9:30 PM
To: Josh Boyer
Cc: linuxppc-embedded at ozlabs.org
Subject: RE: Access physical memory via mmap() on ppc440epx.
Hi, Josh:
Thank you for your suggestion. Somehow it didn't work with mmap (may be,
my mistake, I'll double check), however it partially helped me with my
another problem.
I have kernel driver where I need read/write some HW device, connected
on address 0xea000000, chip select 4. This chip select configured
properly, here are EBC registers:
440EPx>rd ebc0_b4cr
ebc0_b4cr: 0xea01a000 -368992256
440EPx>rd ebc0_b4ap
ebc0_b4ap: 0x03037000 50556928
More information about the Linuxppc-embedded
mailing list