bcm2835: DMA Channels and interrupts

Stephen Warren swarren at wwwdotorg.org
Mon Sep 21 19:30:23 PDT 2015

On 09/14/2015 07:50 AM, Martin Sperl wrote:
> During a discussion with regards to the downstream kernel (and a bug found there)
> we came to realize that the the DMA channels 11 to 14 share a common interrupt line.
> (See https://github.com/raspberrypi/linux/commit/d0e9b20cb2bb59d573df46bf06bbf84106024fd2)

Can't the driver just loop over the status registers for those channels
that share that IRQ whenever it fires, to see which channel(s) to handle?

> On top it seems (by looking at the broadcom Graphics driver stack header-files) as if
> DMA15 does not even have a shared interrupt - I guess it only triggers with the 
> “catch all" DMA irq <1 28>.

Should "does not even have a shared interrupt" be "does not even have a
dedicated interrupt"?

> So the question is how we want to handle this situation in the upstream kernel?
> Should we just use the shared interrupt (<1 28>) and write our mini-interrupt-controller
> to get all DMA channels handled correctly?

I guess if you have to use IRQ 28 for some channels, it's going to fire
even for channels with a dedicated IRQ? If so then I guess it's simplest
to just use that shared IRQ 28 for everything, or just disable channel
15 and ignore the issue.

> Or should we use shared IRQs and ignore DMA15 (which is not in the channel-mask anyway)?

If that's an option, it sounds like it'd be most performant. Who needs
more than 14 DMA channels;-)

More information about the linux-rpi-kernel mailing list