[PATCH] mmc: Do not send status of send_status is false

Jaehoon Chung jh80.chung at samsung.com
Tue Jul 26 10:28:39 CEST 2022


On 7/15/22 08:58, Marek Vasut wrote:
> 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 <marex at denx.de>
> Cc: Jaehoon Chung <jh80.chung at samsung.com>
> Cc: Kirill Kapranov <kirill.kapranov at compulab.co.il>
> Cc: Marek Behún <marek.behun at nic.cz>
> Cc: Pantelis Antoniou <panto at antoniou-consulting.com>
> Cc: Ye Li <ye.li at nxp.com>

Reviewed-by: Jaehoon Chung <jh80.chung at samsung.com>

Best Regards,
Jaehoon Chung

> ---
>  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



More information about the U-Boot mailing list