lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 3 Mar 2021 11:59:19 +0100
From:   Ulf Hansson <ulf.hansson@...aro.org>
To:     DooHyun Hwang <dh0421.hwang@...sung.com>
Cc:     "linux-mmc@...r.kernel.org" <linux-mmc@...r.kernel.org>,
        Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
        Eric Biggers <ebiggers@...gle.com>,
        Wolfram Sang <wsa+renesas@...g-engineering.com>,
        Satya Tangirala <satyat@...gle.com>,
        Ludovic Barre <ludovic.barre@...com>,
        Linus Walleij <linus.walleij@...aro.org>,
        grant.jung@...sung.com, jt77.jang@...sung.com,
        junwoo80.lee@...sung.com, jangsub.yi@...sung.com,
        Seunghui Lee <sh043.lee@...sung.com>,
        Chanwoo Lee <cw9316.lee@...sung.com>, sh8267.baek@...sung.com,
        wkon.kim@...sung.com
Subject: Re: [PATCH] mmc: core: add a power cycle when CMD11 fails

On Wed, 3 Mar 2021 at 07:30, DooHyun Hwang <dh0421.hwang@...sung.com> wrote:
>
> On Tue, 2 Mar 2021 at 10:38, Ulf Hansson <ulf.hansson@...aro.org> wrote:
> >On Wed, 10 Feb 2021 at 06:12, DooHyun Hwang <dh0421.hwang@...sung.com>
> >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@...sung.com>
> >
> >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?
>
> Thank you for reviewing this.
>
> Yes. I tested with 2 SD cards.
> I think the power cycle is needed before retrying
> because SD card doesn't respond SD_ROCR_S18A when retrying without power cycle.

Thanks for sharing the logs and the details below!

If I understand correctly, forcing the error to -EAGAIN combined with
the power cycle when the CMD11 fails, actually makes us succeed with
the voltage switch in the second retry. Correct?

In that case, it seems like a good idea to extend $subject patch to
return -EAGAIN in case we get an error from the CMD11, right?

[...]

>
> #4. SD card responded with SD_ROCR_S18A from ACMD41 after power cycle, and change CMD11's error value to -EAGAIN
> // send ACMD41 + with SD_OCR_S18R (bit[24])
> <7>[  156.884623]  [0:    kworker/0:1:    7] mmc0: starting CMD41 arg 51040000 flags 000000e1
> // resp ACMD41 + with SD_ROCR_S18A (bit[24])
> <7>[  156.884975] I[0:    highpool[3]: 5440] mmc0: req done (CMD41): 0: c1ff8000 00000000 00000000 00000000
> // send CMD11 and error occurs
> <7>[  156.885051]  [0:    kworker/0:1:    7] mmc0: starting CMD11 arg 00000000 flags 00000015
> <7>[  156.885759] I[0:    highpool[3]: 5440] mmc0: req done (CMD11): -84: 00000000 00000000 00000000 00000000
> // retry with power cycle (tested with this patch)
> <7>[  156.885834]  [0:    kworker/0:1:    7] mmc0: Signal voltage switch failed, power cycling card
> <7>[  156.885875]  [0:    kworker/0:1:    7] mmc0: clock 0Hz busmode 2 powermode 0 cs 0 Vdd 0 width 1 timing 0
> <7>[  156.920185]  [0:    kworker/0:1:    7] mmc0: clock 400000Hz busmode 2 powermode 2 cs 0 Vdd 18 width 1 timing 0
> // change CMD11's error value to -EAGAIN
> <3>[  156.932288]  [0:    kworker/0:1:    7] mmc_sd_get_cid: rocr=0xc1ff8000, retries=10. err=-84 -> -11.
> <7>[  156.932336]  [0:    kworker/0:1:    7] mmc0: clock 400000Hz busmode 2 powermode 2 cs 1 Vdd 18 width 1 timing 0
> <7>[  156.933834]  [0:    kworker/0:1:    7] mmc0: starting CMD0 arg 00000000 flags 000000c0
> <7>[  156.934101] I[0:ung.android.mdx:10229] mmc0: req done (CMD0): 0: 00000000 00000000 00000000 00000000
> <7>[  156.935562]  [0:    kworker/0:1:    7] mmc0: clock 400000Hz busmode 2 powermode 2 cs 0 Vdd 18 width 1 timing 0
> <7>[  156.937009]  [0:    kworker/0:1:    7] mmc0: starting CMD8 arg 000001aa flags 000002f5
> <7>[  156.937372] I[0:ung.android.mdx:10229] mmc0: req done (CMD8): 0: 000001aa 00000000 00000000 00000000
> // send ACMD41 + with SD_OCR_S18R (bit[24])
> <7>[  157.044190]  [0:    kworker/0:1:    7] mmc0: starting CMD55 arg 00000000 flags 000000f5
> <7>[  157.044924] I[0:ung.android.mdx:10229] mmc0: req done (CMD55): 0: 00000120 00000000 00000000 00000000
> <7>[  157.045023]  [0:    kworker/0:1:    7] mmc0: starting CMD41 arg 51040000 flags 000000e1
> // resp ACMD41 + with SD_ROCR_S18A (bit[24])
> <7>[  157.045389] I[0:ung.android.mdx:10229] mmc0: req done (CMD41): 0: c1ff8000 00000000 00000000 00000000
> // send CMD11 and complete
> <7>[  157.045467]  [0:    kworker/0:1:    7] mmc0: starting CMD11 arg 00000000 flags 00000015
> <7>[  157.045855] I[0:   Binder:798_2:  805] mmc0: req done (CMD11): 0: 00000320 00000000 00000000 00000000
>
>
> >
> >> ---
> >>  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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ