This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM8168 EDMA3 not sending all enabled interrupts

I'm using EDMA on DM8168 to transmit audio data to MCASP0 TX (EDMA channel 8) and HDMI (EDMA channel 53).  The EDMA PaRAM sets are for both channels are programmed to send transfer complete interrupts for their respective EDMA channels.  However, I only get transfer complete interrupts for channel 53, even though DMA is running on both channels (verified by the fact that I hear audio playing out speakers connected to both HDMI and MCASP).  I need to get interrupts for both channels so I can keep their DMA transfer buffers updated.

When I run "only" MCASP DMA, I get the corresponding channel 8 transfer complete interrupt.  When I run "only" HDMI DMA, I get the corresponding channel 53 transfer complete interrupt.  But when I run both DMAs simultaneouly, I only get channel 53 interrupt.

Can anyone explain why I get interrupts for only 1 of the channels instead of both?

  • Ron,

    Please attach the EDMA Interrupt Dispatcher source file that you are using. [When editing, click Options (above the previous reply) then click Add.] Or tell us the version of EDMA3 LLD, if that is what you are using.

    For debugging something like this, I usually put a breakpoint in the ISR and look at EDMA registers, then step out to the EDMA Interrupt Dispatcher to see how it is working. Then there might be a good place to put a breakpoint at the top of that dispatcher to watch what it sees and what it does with the EDMA registers.

    The problem could also have to do with how the callbacks are being setup, and this would show up in the dispatcher debug, too.

    Regards,
    RandyP

  • Randy,

    I've attached a zip file containing 3 source files; dma_setup_mcasp.c, dma_setup_hdmi_audio.c, & edma_intr.c.  edma_intr.c runs on the netra DSP and the other 2 are linux kernel modules running on the A8.  The kernel modules setup and start the EDMA and the DSP code receives the EDMA transfer complete interrupts.  I've removed code in the files that is not relevant to EDMA just make them smaller and easier to read.  The dma_setup code is calling on EDMA APIs in the linux kernel's arch/arm/common/edma.c.

    Thanks,

    Ron

    edma.zip