From: Takeshi Saito <takeshi.saito...@renesas.com>

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...@renesas.com>
[wsa: updated comment and commit message, removed some braces]
Signed-off-by: Wolfram Sang <wsa+rene...@sang-engineering.com>
---

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

Reply via email to