Re: [PATCH] mmc: core: add a power cycle when CMD11 fails

From: Ulf Hansson
Date: Tue Mar 02 2021 - 06:30:04 EST


On Wed, 10 Feb 2021 at 06:12, DooHyun Hwang <dh0421.hwang@xxxxxxxxxxx> wrote:
>
> A power cycle is required if CMD11 fails.
> CMD11 failure should be handled as no response.
>
> If there is a timeout error that means no response to the CMD11,
> do not send the CMD11 again and the power cycle is required.
> Any other errors for CMD11 are the same because CMD11 failed.
>
> On some bad SD Card, CMD11 may fail but the card may have already
> invoked the voltage switch sequence.
> In this case, it is necessary to retry without voltage switching
> after power cycle.
>
> Signed-off-by: DooHyun Hwang <dh0421.hwang@xxxxxxxxxxx>

Applied for next, thanks!

I took the liberty of updating the commit message a bit, to try to
clarify things. Moreover, I have tagged this for stable kernels.

BTW, did you try to force the error to -EAGAIN, to keep retrying for a
couple of times? If so, did it end up with the same kind of errors?

> ---
> drivers/mmc/core/core.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
> index 1136b859ddd8..a6674df2a7bb 100644
> --- a/drivers/mmc/core/core.c
> +++ b/drivers/mmc/core/core.c
> @@ -1207,7 +1207,7 @@ int mmc_set_uhs_voltage(struct mmc_host *host, u32 ocr)
>
> err = mmc_wait_for_cmd(host, &cmd, 0);
> if (err)
> - return err;
> + goto power_cycle;
>
> if (!mmc_host_is_spi(host) && (cmd.resp[0] & R1_ERROR))
> return -EIO;
> --
> 2.29.0
>

Kind regards
Uffe