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 >