ppc440spe-adma: ADMA driver for PPC440SP(e) and 64-bit physical addresses
John Burr
jlburr at cadence.com
Thu Dec 11 06:42:06 EST 2008
I am confused about the capabilities of the PPC440SPe DMA hardware. I'm wondering if I can use it to transfer data between system memory and a PCI Express slave-only device. To do that, the DMA scatter-gather list entry used by the DMA hardware would need to support addresses > 32-bits as the PCI Express slave memory is mapped by Linux above the 4GB line (i.e. 440SPe hardware uses a 36-bit physical address).
The AMCC PPC440SPe User's Manual V1.27 chapter 20 on the I20/DMA core indicates (among other things):
DMA0 features include:
* Any source PLB address to any destination address
* 64-bit addressing
These items lead me to think I should be able to do this. However, section 20.5.1, "Basic Command Descriptor Block Structure" indicates:
"The DMA engine only supports the simple addressing Scatter/Gather List (SGL) format defined in I2O (v1.5). No other SGL formats are supported."
>From what I can see from the I20 V1.5 specification, only 32-bit physical addresses are supported in the SGL entry.
I looked over the recent post of the ppc440spe-adma ADMA driver and see the physical addresses used seem to be type dma_addr_t. That's 32-bits on the PPC440SPe powerpc Linux platform. So, this leads me to believe I cannot use the DMA hardware to address above the 4GB line.
I don't get why the 440SPe DMA hardware goes to such lengths to support the placement of the CDBs anywhere in memory (these do use 64-bit addresses) while then limiting the SGL addresses for the data itself to 32-bits. I believe the completely different DMA hardware on the 440GX did not have this kind of "weirdness".
Is there any way to use the 440SPe hardware to transfer data to a PCI Express slave device? If so, are there any drivers that show how to do it?
I realize that my PCI Express device should really be a master and do its own transfer. But that's not an option in the near term. I'm trying to use DMA to try to get higher-performing burst transfers on the PCI Express interface (as compared to the quite-slow CPU-based memcpy I'm using now).
Thanks for your help.
John Burr
More information about the Linuxppc-dev
mailing list