Re: Tearing down DMA transfer setup after DMA client has finished
From: Måns Rullgård
Date: Thu Dec 08 2016 - 07:44:52 EST
Mason <slash.tmp@xxxxxxx> writes:
> On 08/12/2016 13:20, Måns Rullgård wrote:
>> The only problem we have is that nobody envisioned hardware where the
>> dma engine indicates completion slightly too soon. I suspect there's a
>> fifo or such somewhere, and the interrupt is triggered when the last
>> byte has been placed in the fifo rather than when it has been removed
>> which would have been more correct.
> As I (tried to) explain here:
> A *read* MBUS agent raises its IRQ when it is safe for the memory
> to be overwritten (i.e. every byte has been pushed into the pipe).
> A *write* MBUS agent raises its IRQ when it is safe for another
> agent to read any one of the transferred bytes.
> The issue comes from the fact that, for a memory-to-device transfer,
> the system will receive the read agent's IRQ, but most devices
> (NFC, SATA) don't have an IRQ line to signal that their part of the
> operation is complete.
SATA does, actually. Nevertheless, it's an unusual design.