[PATCH] mmci: sync DATAEND irq with dma transfer done

Linus Walleij linus.walleij at linaro.org
Tue Apr 19 08:00:17 EDT 2011


On Tue, Apr 19, 2011 at 11:20 AM, Russell King - ARM Linux
<linux at arm.linux.org.uk> wrote:
> On Tue, Apr 19, 2011 at 11:02:34AM +0200, Linus Walleij wrote:
>> From: Ulf Hansson <ulf.hansson at stericsson.com>
>>
>> The end of a dma job must be synced with a DATAEND irq. This will
>> prevent the mmci driver from ending the mmc request before the
>> dma driver is completely done. By using DMA_PREP_INTERRUPT we
>> register a callback function which will is called when from the
>> dma driver when the dma transfer is completed.
>
> Why is what we currently do not sufficient?

On a high-speeded ux500 the DATAEND IRQ will assert before the
DMA data is actually finished, thus if we start hammering in the next
request we break an ongoing transfer. :-(

> This will break the detection of dead DMA controllers like on the ARM
> reference platforms, as I've said before.

Yeah ... I'm trying to think of something clever, can we put a
bool sync_dma_job in the vendor data and only activate this
for ux500 and U300 ST variants where we know DMA always
works then?

The only thing I worry about is if the plain vanilla PL180 would
exhibit the same behaviour when used with high-speed DMA, then
we're effectively deactivating a bugfix for it.

Linus



More information about the linux-arm-kernel mailing list