[U-Boot] [PATCH 1/4] mmc: Retry the switch command

Hans de Goede hdegoede at redhat.com
Sun Nov 13 19:50:53 CET 2016


Hi,

On 04-11-16 16:18, Maxime Ripard wrote:
> Some eMMC will fail at the first switch, but would succeed in a subsequent
> one.
>
> Make sure we try several times to cover those cases. The number of retries
> (and the behaviour) is currently what is being used in Linux.
>
> Signed-off-by: Maxime Ripard <maxime.ripard at free-electrons.com>

LGTM:

Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Pantelis or Tom, can you pick this up please ?

Regards,

Hans


> ---
>  drivers/mmc/mmc.c | 15 +++++++++++----
>  1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
> index 4380c7c195a6..d6b7e4f510c9 100644
> --- a/drivers/mmc/mmc.c
> +++ b/drivers/mmc/mmc.c
> @@ -494,6 +494,7 @@ int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
>  {
>  	struct mmc_cmd cmd;
>  	int timeout = 1000;
> +	int retries = 3;
>  	int ret;
>
>  	cmd.cmdidx = MMC_CMD_SWITCH;
> @@ -502,11 +503,17 @@ int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
>  				 (index << 16) |
>  				 (value << 8);
>
> -	ret = mmc_send_cmd(mmc, &cmd, NULL);
> +	while (retries > 0) {
> +		ret = mmc_send_cmd(mmc, &cmd, NULL);
>
> -	/* Waiting for the ready status */
> -	if (!ret)
> -		ret = mmc_send_status(mmc, timeout);
> +		/* Waiting for the ready status */
> +		if (!ret) {
> +			ret = mmc_send_status(mmc, timeout);
> +			return ret;
> +		}
> +
> +		retries--;
> +	}
>
>  	return ret;
>
>


More information about the U-Boot mailing list