mmci: U300 "sync with blockend" broken for multi-block?
linus.ml.walleij at gmail.com
Sun Jan 16 17:09:44 EST 2011
...and to round off a theory of why the U300 and Ux500 is
Maybe the IP-block does not really handle the case of a block
interrupt not being ACK:ed before the next block is ready. So
it will just fire another "1" flag, which gets ACK:ed at the end
of the interrupt handler with the IRQ currently being processed.
So the interrupt handler will unknowingly consume interrupts
for other blocks.
The right way would be to either:
- Queue block ACKs so that they are ACK:ed one at the time
if the hardware reads ahead. (Which requires a quite deep
queue on large writes.)
- Hold back further block reading from the card until the IRQ
has been ACK:ed. (Which is not good for speed.)
So to avoid both it is indeed a logical thing to remove the
block interrupt altogether and just wait for the last one to
avoid trouble, it's just not documented and
HW-implemented as such.
Now I'll send that patch.
More information about the linux-arm-kernel