mmc: mediatek: fix controller busy when plug out SD
authorChaotian Jing <chaotian.jing@mediatek.com>
Thu, 22 Aug 2019 06:47:40 +0000 (14:47 +0800)
committerUlf Hansson <ulf.hansson@linaro.org>
Wed, 11 Sep 2019 13:58:39 +0000 (15:58 +0200)
when plug out SD card, may get data CRC error, the MMC core will issue
CMD13 to get card status, then CMD13 timeout(due to card plug out) will
trigger CMD19 tuning, first CMD19 timeout has not call msdc_reset_hw()
and cause the next CMD19 gets controller busy.

Signed-off-by: Chaotian Jing <chaotian.jing@mediatek.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/mtk-sd.c

index 33f4b6387ef714b0683fb0c9ef83394fcc94ca56..5cc422e5db6953313740203fdcd95469c2e80fad 100644 (file)
@@ -1071,11 +1071,13 @@ static bool msdc_cmd_done(struct msdc_host *host, int events,
        }
 
        if (!sbc_error && !(events & MSDC_INT_CMDRDY)) {
-               if (cmd->opcode != MMC_SEND_TUNING_BLOCK &&
-                   cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200)
+               if (events & MSDC_INT_CMDTMO ||
+                   (cmd->opcode != MMC_SEND_TUNING_BLOCK &&
+                    cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200))
                        /*
                         * should not clear fifo/interrupt as the tune data
-                        * may have alreay come.
+                        * may have alreay come when cmd19/cmd21 gets response
+                        * CRC error.
                         */
                        msdc_reset_hw(host);
                if (events & MSDC_INT_RSPCRCERR) {