On 08/13/2013 11:30 PM, Joel Fernandes wrote:
Hi Mike,
On 07/02/2013 12:50 AM, Mike Looijmans wrote: [..]
Either way I'm sure your multi-slot approach is superior, but I don't see how you can get away with not updating the DMA addresses on every IRQ with the current davinci-pcm or EDMA controller (Unless you use a complicated mechanism like ping-pong where the address updates take care of itself). If you are using a set of chained slots, you only have so many slots so you have to continuously change addresses of the slots at some point or the other for a large transfer.
I use a chain like this:
DMA1 -> DMA2 -> DMA... -> DMA1
This meant I had to use a DMA PARAM slot for every "period". The OMAP L138 has 128 of those slots, so it's no problem to use a bunch of them. Because the chain is cyclic, there is no need to update any DMA parameter while running. All that ALSA needs to do is empty the buffer before the cycle completes and the current position gets overwritten.
[Joel] Replying to this thread after a long time but just wondering, how do you guarantee in your implementation that DMA will not empty the buffer faster than it is filled?
I guess this is also what you've called in some threads as the overrun condition.
-Joel