All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baolin Wang <baolin.wang@linaro.org>
To: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ulf Hansson <ulf.hansson@linaro.org>,
	Chunyan Zhang <zhang.lyra@gmail.com>,
	Orson Zhai <orsonzhai@gmail.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	linux-mmc <linux-mmc@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] mmc: host: sdhci: Fix the incorrect soft reset operation when runtime resuming
Date: Mon, 15 Jul 2019 19:37:31 +0800	[thread overview]
Message-ID: <CAMz4kuJVhNFUrDiwiRd-UJ_JnsbxQaV-dE_97m32B+5_53kteg@mail.gmail.com> (raw)
In-Reply-To: <c54077a4-3aae-c95c-8491-db5f05b0305c@intel.com>

Hi Adrian,

On Mon, 15 Jul 2019 at 19:20, Adrian Hunter <adrian.hunter@intel.com> wrote:
>
> On 15/07/19 1:58 PM, Baolin Wang wrote:
> > In sdhci_runtime_resume_host() function, we will always do software reset
> > for all, but according to the specification, we should issue reset command
> > and reinitialize the SD/eMMC card.
>
> Where does it say that?

I checked the SD host controller simplified specification Ver4.20, and
in Page 75, Software Reset For All bit, it says "if this bit is set
to1, the host driver should issue reset command and  reinitialize the
SD card". (I did not check other versions).

>
> >                                    However, we only do reinitialize the
> > SD/eMMC card when the SD/eMMC card are power down during runtime suspend.
> >
> > Thus for those platforms that do not power down the SD/eMMC card during
> > runtime suspend, we should not do software reset for all.
> >                                                           To fix this
> > issue, we can add one condition to validate the MMC_CAP_AGGRESSIVE_PM
> > to decide if we can do software reset for all or just reset command
> > and data lines.
> >
> > Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
> > ---
> >  drivers/mmc/host/sdhci.c |    2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> > index 9715834..470c5e0 100644
> > --- a/drivers/mmc/host/sdhci.c
> > +++ b/drivers/mmc/host/sdhci.c
> > @@ -3333,7 +3333,7 @@ int sdhci_runtime_resume_host(struct sdhci_host *host)
> >                       host->ops->enable_dma(host);
> >       }
> >
> > -     sdhci_init(host, 0);
> > +     sdhci_init(host, !(mmc->caps & MMC_CAP_AGGRESSIVE_PM));
>
> We have done a full reset for a long time, so it would be surprising to need
> to change it.
>
> What problem is it causing?

If we did not power down the SD card during runtime suspend, and we
reset for all when runtime resume, our SD host controller can not work
well, will meet some strange behavior, like:

[    6.525397] mmc0: Got data interrupt 0x00000002 even though no data
operation was in progress.
[    6.534189] mmc0: sdhci: ============ SDHCI REGISTER DUMP ===========
[    6.540797] mmc0: sdhci: Sys addr:  0x00000008 | Version:  0x00000004
[    6.547413] mmc0: sdhci: Blk size:  0x00000200 | Blk cnt:  0x00000000
[    6.554029] mmc0: sdhci: Argument:  0x03200101 | Trn mode: 0x00000033
[    6.560645] mmc0: sdhci: Present:   0x01f000f0 | Host ctl: 0x00000030
[    6.567262] mmc0: sdhci: Power:     0x00000000 | Blk gap:  0x00000000
[    6.573877] mmc0: sdhci: Wake-up:   0x00000000 | Clock:    0x00000007
[    6.580493] mmc0: sdhci: Timeout:   0x0000000e | Int stat: 0x00000000
[    6.587109] mmc0: sdhci: Int enab:  0x037f000b | Sig enab: 0x037f000b
[    6.593726] mmc0: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000000
[    6.600342] mmc0: sdhci: Caps:      0x1c6d0080 | Caps_1:   0x08000007
[    6.606959] mmc0: sdhci: Cmd:       0x0000061b | Max curr: 0x00ffffff
[    6.613574] mmc0: sdhci: Resp[0]:   0x00001201 | Resp[1]:  0x00000000
[    6.620190] mmc0: sdhci: Resp[2]:   0x00000000 | Resp[3]:  0x00000000
[    6.626806] mmc0: sdhci: Host ctl2: 0x00003807
[    6.631364] mmc0: sdhci: ADMA Err:  0x00000000 | ADMA Ptr: 0x00000000df062000
[    6.638697] mmc0: sdhci: ============================================
[    6.645379] mmc0: cache flush error -84

Got data interrupt but no data commands are processing now. With this
patch, then our SD host controller can work well. Did I miss anything
else? Thanks.

-- 
Baolin Wang
Best Regards

  reply	other threads:[~2019-07-15 11:37 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-15 10:58 [PATCH] mmc: host: sdhci: Fix the incorrect soft reset operation when runtime resuming Baolin Wang
2019-07-15 11:19 ` Adrian Hunter
2019-07-15 11:37   ` Baolin Wang [this message]
2019-07-15 12:37     ` Adrian Hunter
2019-07-16  5:37       ` Baolin Wang

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=CAMz4kuJVhNFUrDiwiRd-UJ_JnsbxQaV-dE_97m32B+5_53kteg@mail.gmail.com \
    --to=baolin.wang@linaro.org \
    --cc=adrian.hunter@intel.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=orsonzhai@gmail.com \
    --cc=ulf.hansson@linaro.org \
    --cc=vincent.guittot@linaro.org \
    --cc=zhang.lyra@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.