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.

TDA4VM: UDMA Dequeuing Ring Completion necessary?

Part Number: TDA4VM

Hi TI,

I try to understand the basic concept of using DMA to move memory within TDA4.

My knowledge up to now (from a software point of view) is like this:

1. Open UDMA driver handle and create a UDMA channel.
2. Provide some memory to the UDMA channel for 3 rings (Submit, Completion and Teardown).
3. Register a optional callback function when a request has been completed.
4. Enable the UDMA channel.

5. Put Host/TR Descriptor into the Submit Ring. When this Descriptor has been completed, the callback function gets executed.
6. Now remove the Descriptor from the Completion ring.

My questions regarding step 6 are:
Q1: What purpose has the Completion ring? Why do I have to remove the Descriptor from it?
Q2: Do I have to check the Descriptor in the Completion ring if the DMA action was successfull? So I cannot assume that, if the callback function gets executed, the DMA transfer was successfull?
Q3: What happens if I do NOT remove Descriptor from the Completion ring? Does the DMA Channel stall if the Completion ring is full?

Best regards,
Thomas