Re: [PATCH] mmc: tmio: fix SCC error handling to avoid false positive CRC error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 15 May 2019 at 20:24, Wolfram Sang
<wsa+renesas@xxxxxxxxxxxxxxxxxxxx> wrote:
>
> From: Takeshi Saito <takeshi.saito.xv@xxxxxxxxxxx>
>
> If an SCC error occurs during a read/write command execution, a false
> positive CRC error message is output.
>
> mmcblk0: response CRC error sending r/w cmd command, card status 0x900
>
> check_scc_error() checks SCC_RVSREQ.RVSERR bit. RVSERR detects a
> correction error in the next (up or down) delay tap position. However,
> since the command is successful, only retuning needs to be executed.
> This has been confirmed by HW engineers.
>
> Thus, on SCC error, set retuning flag instead of setting an error code.
>
> Fixes: b85fb0a1c8ae ("mmc: tmio: Fix SCC error detection")
> Signed-off-by: Takeshi Saito <takeshi.saito.xv@xxxxxxxxxxx>
> [wsa: updated comment and commit message, removed some braces]
> Signed-off-by: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx>

Applied for fixes and by adding a stable tag, thanks!

Kind regards
Uffe


> ---
>
> This patch was suggested by the BSP team because they were seeing CRC errors
> with a hardware I don't have access to. I tested this with my R-Car H3-ES2.0
> and M3-N (both Salvator-XS), and things were still running fine. But I suggest
> to wait for a final ack from Shimoda-san or someone from the BSP team.
>
>
>  drivers/mmc/host/tmio_mmc_core.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/host/tmio_mmc_core.c b/drivers/mmc/host/tmio_mmc_core.c
> index 595949f1f001..78cc2a928efe 100644
> --- a/drivers/mmc/host/tmio_mmc_core.c
> +++ b/drivers/mmc/host/tmio_mmc_core.c
> @@ -842,8 +842,9 @@ static void tmio_mmc_finish_request(struct tmio_mmc_host *host)
>         if (mrq->cmd->error || (mrq->data && mrq->data->error))
>                 tmio_mmc_abort_dma(host);
>
> +       /* SCC error means retune, but executed command was still successful */
>         if (host->check_scc_error && host->check_scc_error(host))
> -               mrq->cmd->error = -EILSEQ;
> +               mmc_retune_needed(host->mmc);
>
>         /* If SET_BLOCK_COUNT, continue with main command */
>         if (host->mrq && !mrq->cmd->error) {
> --
> 2.11.0
>



[Index of Archives]     [Linux Memonry Technology]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux