PPC4XX DMA polarity bug in linuxppc-2.6.9

From: Colin Wernham <hidden>
Date: 2004-12-10 09:16:46

[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=20
correctly in the DMA controller using the ppc4xx_init_dma_channel()=20
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=20
function is called twice:

    467  /* clear all polarity signals and then "or" in new signal =
levels */
    468  polarity &=3D ~GET_DMA_POLARITY(dmanr);
    469  polarity |=3D p_dma_ch->polarity;

Fix should be:
    469  polarity |=3D p_init->polarity;

Is there anyone else using the PPC4XX DMA?

Colin Wernham
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help