Commit 44645f87de5 ("mmc: Fix mmc_switch excessive timeout") introduced
a side effect where CMD13 SEND_STATUS is issued in case mmc_wait_dat0()
does not return -ENOSYS and $send_status is not set. This happens on all
hardware which does implement .mmc_wait_dat0 callback, e.g. i.MX8M .

This leads to lengthy timeout before booting OS in case of eMMC in one
of the HS200/HS400 modes, since the card cannot respond to CMD13 while
downgrading from HS200/HS400 to regular HS mode.

Fix this by adding the missing conditional.

Fixes: 44645f87de5 ("mmc: Fix mmc_switch excessive timeout")
Signed-off-by: Marek Vasut <ma...@denx.de>
Cc: Jaehoon Chung <jh80.ch...@samsung.com>
Cc: Kirill Kapranov <kirill.kapra...@compulab.co.il>
Cc: Marek BehĂșn <marek.be...@nic.cz>
Cc: Pantelis Antoniou <pa...@antoniou-consulting.com>
Cc: Ye Li <ye...@nxp.com>
---
 drivers/mmc/mmc.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 12d29da528a..b62baca8457 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -831,6 +831,9 @@ static int __mmc_switch(struct mmc *mmc, u8 set, u8 index, 
u8 value,
                return 0;
        }
 
+       if (!send_status)
+               return 0;
+
        /* Finally wait until the card is ready or indicates a failure
         * to switch. It doesn't hurt to use CMD13 here even if send_status
         * is false, because by now (after 'timeout_ms' ms) the bus should be
-- 
2.35.1

Reply via email to