public inbox for linux-mmc@vger.kernel.org
 help / color / mirror / Atom feed
From: "DooHyun Hwang" <dh0421.hwang@samsung.com>
To: "'Ulf Hansson'" <ulf.hansson@linaro.org>
Cc: <linux-mmc@vger.kernel.org>,
	"'Linux Kernel Mailing List'" <linux-kernel@vger.kernel.org>,
	"'Eric Biggers'" <ebiggers@google.com>,
	"'Wolfram Sang'" <wsa+renesas@sang-engineering.com>,
	"'Satya Tangirala'" <satyat@google.com>,
	"'Ludovic Barre'" <ludovic.barre@st.com>,
	"'Linus Walleij'" <linus.walleij@linaro.org>,
	<grant.jung@samsung.com>, <jt77.jang@samsung.com>,
	<junwoo80.lee@samsung.com>, <jangsub.yi@samsung.com>,
	"'Seunghui Lee'" <sh043.lee@samsung.com>,
	"'Chanwoo Lee'" <cw9316.lee@samsung.com>,
	<sh8267.baek@samsung.com>, <wkon.kim@samsung.com>
Subject: RE: [PATCH] mmc: core: add a power cycle when CMD11 fails
Date: Wed, 3 Mar 2021 20:29:25 +0900	[thread overview]
Message-ID: <031201d71020$772329b0$65697d10$@samsung.com> (raw)
In-Reply-To: <CAPDyKFpVjxKziPmyF+MXG--LKNSVOYaCUuaNBHCzMGCvSzE--Q@mail.gmail.com>


On Wed, 3 Mar 2021 at 12:00, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
>On Wed, 3 Mar 2021 at 07:30, DooHyun Hwang <dh0421.hwang@samsung.com> wrote:
>>
>> On Tue, 2 Mar 2021 at 10:38, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>> >On Wed, 10 Feb 2021 at 06:12, DooHyun Hwang
>> ><dh0421.hwang@samsung.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@samsung.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?

Yes, That's right.

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

Yes, I think so.
But it looks good to retry CMD11 only for a couple of times, and if it still fails,
it would be better to remove SD_OCR_S18R and retry ACMD41 as before.

>
>[...]
>
>>
>> #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

Thanks and regards.
DooHyun Hwang.


  reply	other threads:[~2021-03-04  0:02 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20210210051209epcas1p3e55c0cbab7313731bc6e425da6189bb4@epcas1p3.samsung.com>
2021-02-10  4:59 ` [PATCH] mmc: core: add a power cycle when CMD11 fails DooHyun Hwang
2021-02-25  7:43   ` DooHyun Hwang
2021-03-02 10:38   ` Ulf Hansson
2021-03-03  6:30     ` DooHyun Hwang
2021-03-03 10:59       ` Ulf Hansson
2021-03-03 11:29         ` DooHyun Hwang [this message]
2021-03-03  6:39     ` DooHyun Hwang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='031201d71020$772329b0$65697d10$@samsung.com' \
    --to=dh0421.hwang@samsung.com \
    --cc=cw9316.lee@samsung.com \
    --cc=ebiggers@google.com \
    --cc=grant.jung@samsung.com \
    --cc=jangsub.yi@samsung.com \
    --cc=jt77.jang@samsung.com \
    --cc=junwoo80.lee@samsung.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=ludovic.barre@st.com \
    --cc=satyat@google.com \
    --cc=sh043.lee@samsung.com \
    --cc=sh8267.baek@samsung.com \
    --cc=ulf.hansson@linaro.org \
    --cc=wkon.kim@samsung.com \
    --cc=wsa+renesas@sang-engineering.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox