Linux 4xx DMA interface broken?
Ilse Reyneke
reynekejunk at hotmail.com
Fri Dec 8 01:10:39 EST 2006
Gents/ladies,
Has anyone successfully used the 4xx DMA interface? I think I'm missing
something very obvious, or it's broken.
We are using a Linux 2.6.14 kernel on a 440EPx. Basically, it looks like the
code is written to work with the PLB4 controller but addressed to the PLB3
controller.
The problem I have is the following: ppc4xx_dma.h has the following code
section(s):
#ifdef CONFIG_44x
#define PPC4xx_DMA_64BIT
#define DMA_CR_OFFSET 1
#else
#define DMA_CR_OFFSET 0
#endif
#define SET_DMA_PW(x) (((x)&0x3)<<(26-DMA_CR_OFFSET)) /* Peripheral
Width */
And ibm44x.h has the following:
#define DCRN_DMA0_BASE 0x100
#define DCRN_DMA2P40_BASE 0x300
#define DCRN_DMACR0 (DCRN_DMA0_BASE + 0x0) /* DMA Channel Control 0 */
A typical DMA interface function as defined in ppc4xx_dma.c, looks like this
void ppc4xx_enable_dma(unsigned int dmanr)
{
...
mtdcr(DCRN_DMACR0 + (dmanr * 0x8), control);
...
}
Because of the processor type, DMA_CR_OFFSET is set to 1. Which means that
the control register is structured on the PLB4, not the PL3 as the
DCRN_DMASR address implies.
How (or can you) do you specify which DMA controller you want to use? Any
ideas/comments?
Cheers
Jan Reyneke
_________________________________________________________________
Be the first to hear what's new at MSN - sign up to our free newsletters!
http://www.msn.co.uk/newsletters
More information about the Linuxppc-embedded
mailing list