mem=XXXM ioremap DMA

Eric Nuckols jrocnuck at
Sat Jan 27 19:48:30 EST 2007

I've seen a couple posts out there about issuing a kernel boot parameter of 
mem=XXXM, say for example mem=504M on a 512 MiB system followed by issuing 
an ioremap function call from a module/driver such as: ioremap( 0x1F800000, 
0x800000 ) where an attempt is made to remap the unclaimed (by the kernel) 
physical memory from 504MiB up to 512MiB.

I've tried this route which looks to make great logical sense and I've tried 
to actually use the remapped range for DMA with no luck.  I've seen posts 
from all the way back in 2003 where folks are doing the same thing and have 
the same bad results... and no replies to the posts.

Can this ram really be used for DMA?

I'm afraid that since I'm using a PCI device (PLX) with device specific 
hardware address decoding on the LOCAL bus side of the PLX, that by taking 
this approach, the kernel comes back with virtual addresses that, after 
being mapped back to bus addresses still won't allow for DMA to work 
properly.   Can anyone give some insight into this?

I'm basically trying the following:
  boot kernel (2.4.xx) with mem=504M

in my driver, I'm calling
my_virt_address =   ioremap( 0x1F800000, 0x800000  );
my_bus_address = virt_to_bus( my_virt_address );

Then, I'm telling my FPGA bus master device (across a PLX chip) that it's 
starting DMA address is my_bus_address.

I get interrupts, but no data in my_virt_address.  I've seen several posts 
exactly like this and have yet to see any answers to these posts...

I've tried an alternative approach of calling one of the alloc_bootmem_xxx 
functions early in start_kernel and have had positivie results ONLY on the 
montavista 3.1 pro kernel with preemption enabled.  On the Denx 2.4.25 
Kernel from ELDK 3.1 I just get a locked up/frozen kernel when I trie to use 
the alloc_bootmem_xx approach and when I use the mem=504M / ioremap 
approach, I don't get any DMA data from either kernel...

Please help!!

FREE online classifieds from Windows Live Expo – buy and sell with people 
you know

More information about the Linuxppc-embedded mailing list