On 29 January 2014 23:38, Ulf Hansson <ulf.hans...@linaro.org> 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 <li...@arm.linux.org.uk>
> Cc: Johan Rudholm <jrudh...@gmail.com>
> Signed-off-by: Ulf Hansson <ulf.hans...@linaro.org>

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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to