MLK-17883 mmc: add delay after CMD6 before sending CMD13
authorHaibo Chen <haibo.chen@nxp.com>
Wed, 21 Mar 2018 10:26:46 +0000 (18:26 +0800)
committerHaibo Chen <haibo.chen@nxp.com>
Thu, 12 Apr 2018 10:45:51 +0000 (18:45 +0800)
Android report data timeout issue on the Micron eMMC of i.mx8mscale
evk board. Before using CMD25 to write multi block data, driver will
use CMD6 to flush cache. But some CMD25 will get both data timeout
interrupt and transfer complete interrupt. If add delay after busy
check, and before sending CMD13, this issue gone.

We meet similar issue on Sandisk eMMC before, and already have a
commit 581925fe325a ("MLK-11685-1 mmc: add delay after CMD6 befoer
sending CMD13 for sandisk"), but when cherry-pick to 4.9 branch,
meet conflicts, put the delay in the wrong place. So meet the similar
issue again.

This patch fix this, move the dealy in the right place, right before
CMD13.

Reviewed-by: Dong Aisheng <Aisheng.dong@nxp.com>
Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
drivers/mmc/core/mmc_ops.c

index e29d28f..bd6dfd4 100644 (file)
@@ -574,12 +574,6 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
        if (!use_busy_signal)
                goto out;
 
-       /*
-        * WORKAROUND: for Sandisk eMMC cards, it might need certain delay
-        * before sending CMD13 after CMD6
-        */
-       mdelay(1);
-
        /*If SPI or used HW busy detection above, then we don't need to poll. */
        if (((host->caps & MMC_CAP_WAIT_WHILE_BUSY) && use_r1b_resp) ||
                mmc_host_is_spi(host))
@@ -595,6 +589,12 @@ out_tim:
        if (timing)
                mmc_set_timing(host, timing);
 
+       /*
+        * WORKAROUND: for Sandisk eMMC cards, it might need certain delay
+        * before sending CMD13 after CMD6
+        */
+       mdelay(1);
+
        if (send_status) {
                err = mmc_switch_status(card);
                if (err && timing)