DMA take 4

Charles Krinke ckrinke at istor.com
Thu Mar 8 02:20:25 EST 2007


I have gotten to the point where u-boot performs dma transactions
repeatedly and reliably with the 8541 and have moved back to my Linux
driver.

When I complete the DMA transaction in the Linux driver, the SR0
registers tends to have 0x00000024 in it, meaning SR0[CH] & SR0[CB] are
both set and MR0[CS] is set.

I start out with:

Set SR0   to 0xFFFF_FFFF
Set SATR0 to 0x0005_0000
Set DATR0 to 0x0005_0000
Set MR0   to 0x0F03_C404
Set SAR0 to the physical address in local memory
Set DAR0 to the physical address of the PCI window at 0x8800_0000 which
is been previously setup with POTAR2, POWAR2 & POWBAR2.

It seems that the DMA transaction in Linux, using the same 8541 register
settings as are in u-boot is not completing.

So, this leads me to wondering about ioremap_nocache() perhaps. Although
here, I think I want physical addresses for the source and destination
of the DMA.

What other things can I look into to understand why a DMA in Linux using
the 8541 is going awry?

Charles



More information about the Linuxppc-embedded mailing list