On 29 January 2014 23:38, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > In case of a read operation both MCI_CMDRESPEND and MCI_DATAEND can be > set in the status register when entering the interrupt handler. This is > due to that the card start sending data before the host has > acknowledged the command response. > > To resolve the issue for this scenario, we must start by handling the > CMD irq instead of the DATA irq. The reason is beacuse the completion > of the DATA irq will not respect the current command and then causing > it to be garbled. > > Cc: Russell King <linux@xxxxxxxxxxxxxxxx> > Cc: Johan Rudholm <jrudholm@xxxxxxxxx> > Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx> Hi Russell, Just wanted to know if you were happy with this patch. I would prefer if we could let Chris carry this patch, since there are a dependency. Are you fine with that? Kind regards Ulf Hansson > --- > drivers/mmc/host/mmci.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c > index f320579..1a4b153 100644 > --- a/drivers/mmc/host/mmci.c > +++ b/drivers/mmc/host/mmci.c > @@ -1144,16 +1144,17 @@ static irqreturn_t mmci_irq(int irq, void *dev_id) > > dev_dbg(mmc_dev(host->mmc), "irq0 (data+cmd) %08x\n", status); > > + cmd = host->cmd; > + if (status & (MCI_CMDCRCFAIL|MCI_CMDTIMEOUT|MCI_CMDSENT| > + MCI_CMDRESPEND) && cmd) > + mmci_cmd_irq(host, cmd, status); > + > data = host->data; > if (status & (MCI_DATACRCFAIL|MCI_DATATIMEOUT|MCI_STARTBITERR| > MCI_TXUNDERRUN|MCI_RXOVERRUN|MCI_DATAEND| > MCI_DATABLOCKEND) && data) > mmci_data_irq(host, data, status); > > - cmd = host->cmd; > - if (status & (MCI_CMDCRCFAIL|MCI_CMDTIMEOUT|MCI_CMDSENT|MCI_CMDRESPEND) && cmd) > - mmci_cmd_irq(host, cmd, status); > - > ret = 1; > } while (status); > > -- > 1.7.9.5 > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html