Skip to contentSkip to conversation

amba/pl022: DMA channel allocation always fail.

QUERY viresh kumar 2 participants 3 messages May 13, 2011 – May 16, 2011 SPI

lore
Share & tools
lore
#0 lore raw

Linus,

amba/pl022 and my dma driver dw_dmac.c, both have registered init() routines with subsys_initcall(). Now at bootup, spi boots up before DMA and so DMA channels are never available at spi probe.

What should be done to solve this issue?

One idea is allocate DMA channel as and when required, instead of allocating them at probe. But in that case too i am not sure, that this issue will be solved. As, if spi slave device is added from board file, then it will also try to transfer data as soon as spi driver is up. So that too may be called before dma_probe().

Signature · 1 line
viresh
#1 lore raw

2011/5/13 viresh kumar <[email protected]>:

Quoted 5 lines

amba/pl022 and my dma driver dw_dmac.c, both have registered init() routines with subsys_initcall(). Now at bootup, spi boots up before DMA and so DMA channels are never available at spi probe.

What should be done to solve this issue?

If you check drivers/dma/ste_dma40.c you can see that our solution was to simply move the DMA engine to arch_initcall().

Which sort of makes sense for a DMA engine.

Does this work for dw_dmac.c?

Quoted 2 lines

One idea is allocate DMA channel as and when required, instead of allocating them at probe. But in that case too i am not sure, that this issue will be solved.

For the serial port I've added a real funny tweak to queue the ports and add DMA later since these are initialized very early.

Check in drivers/tty/serial/amba-pl011.c

Hope this helps,
Linus Walleij

#2 lore raw
Quoted 6 lines · Linus Walleij

2011/5/13 viresh kumar <[email protected]>:

Quoted 4 lines

amba/pl022 and my dma driver dw_dmac.c, both have registered init() routines with subsys_initcall(). Now at bootup, spi boots up before DMA and so DMA channels are never available at spi probe.

Quoted 8 lines
Quoted 1 line

What should be done to solve this issue?

If you check drivers/dma/ste_dma40.c you can see that our solution was to simply move the DMA engine to arch_initcall().

Which sort of makes sense for a DMA engine.

Does this work for dw_dmac.c?

Yes, it worked here too..

Signature · 1 line
viresh