PPC4XX DMA polarity bug in linuxppc-2.6.9
Colin Wernham
CWernham at Airspan.com
Fri Dec 10 20:09:39 EST 2004
[a copy of this has also been posted on linuxppc-dev]
I believe that there is a PPC4xx DMA driver bug in the following kernel,
file and function:
linuxppc-2.6.9,
/arch/ppc/syslib/ppc4xx_dma.c,
ppc4xx_init_dma_channel()
Symptoms are:
DMA does not work as the polarity bits (DMA Req, Ack, EOT) are not set
correctly in the DMA controller using the ppc4xx_init_dma_channel()
function call, but when this is called twice in succession, then it does
work.
Cause is (I believe):
/arch/ppc/syslib/ppc4xx_dma.c:
On line 469 the old polarity bits in p_dma_ch are ORed in when it should
be ORing in the new polarity bits from p_init. p_init is then saved into
p_dma_ch. This means that it only gets correctly programmed when the
function is called twice:
467 /* clear all polarity signals and then "or" in new signal levels */
468 polarity &= ~GET_DMA_POLARITY(dmanr);
469 polarity |= p_dma_ch->polarity;
Fix should be:
469 polarity |= p_init->polarity;
Is there anyone else using the PPC4XX DMA?
Colin Wernham
More information about the Linuxppc-embedded
mailing list