To DMA or not to DMA

Swarthout Edward L-SWARTHOU ed.swarthout at freescale.com
Sat Mar 3 06:28:09 EST 2007


It could be a lot of other things, but I see two things wrong:

> From: Charles Krinke
... 
> origPotar = readl(POTAR2) //save outbound address translation 
> writel(0x00040000, SATR0) //source attribute for normal read/write
> writel(0x00040000, DATR0) //dest attribute for normal read/write
> writel(destHigh32bits >> 8, POTAR2) //put address into window conside
> writel(destLow32bits, DAR0) //setup the destination address register
> writel(sourceLow32bits, SAR0) //setup the source address register
> writel(size, BCR0) //setup the number of words to transfer

Add a sync here to ensure the previous stores are out of the cpu.

> writel(1, MRx[CS]) //trigger the DMA to go
> writel(origPotar, POTAR2) //restor outbound address translation

Don't destroy the outbound window brefore the dma is complete!

> And I would expect the DMA to work, but it doesn't. Can someone help
me
> get my mind around how the DMA in the 8541 is supposed to work?

-EdS



More information about the Linuxppc-embedded mailing list