Add extra busy wait and retries if transfer mode switch fails. Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> --- drivers/mmc/core/mmc_ops.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c index aa0cab190cd8..619088a94688 100644 --- a/drivers/mmc/core/mmc_ops.c +++ b/drivers/mmc/core/mmc_ops.c @@ -599,6 +599,12 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value, cmd.sanitize_busy = true; err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES); + if (err && index == EXT_CSD_HS_TIMING) { + /* Try harder for timing changes */ + __mmc_poll_for_busy(card, timeout_ms, send_status, + retry_crc_err, MMC_BUSY_CMD6); + err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES); + } if (err) goto out; -- 2.17.1