All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ulf Hansson <ulf.hansson@linaro.org>
To: Jon Hunter <jonathanh@nvidia.com>, Faiz Abbas <faiz_abbas@ti.com>
Cc: Bitan Biswas <bbiswas@nvidia.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Naresh Kamboju <naresh.kamboju@linaro.org>,
	Jens Axboe <axboe@kernel.dk>, Alexei Starovoitov <ast@kernel.org>,
	linux-block <linux-block@vger.kernel.org>,
	lkft-triage@lists.linaro.org,
	open list <linux-kernel@vger.kernel.org>,
	"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
	Arnd Bergmann <arnd@arndb.de>,
	John Stultz <john.stultz@linaro.org>,
	Thierry Reding <treding@nvidia.com>
Subject: Re: LKFT: arm x15: mmc1: cache flush error -110
Date: Tue, 25 Feb 2020 15:26:16 +0100	[thread overview]
Message-ID: <CAPDyKFokE6x0mn+v5B9=so-SyrdTn0JBU8Mrp3Zdu6kSaCie2g@mail.gmail.com> (raw)
In-Reply-To: <f960aa98-5508-36fd-166d-7f41c7d85154@nvidia.com>

+ Faiz Abbas

On Tue, 25 Feb 2020 at 12:41, Jon Hunter <jonathanh@nvidia.com> wrote:
>
>
> On 25/02/2020 10:04, Jon Hunter wrote:
>
> ...
>
> >>>   I find that from the commit the changes in mmc_flush_cache below is
> >>> the cause.
> >>>
> >>> ##
> >>> @@ -961,7 +963,8 @@ int mmc_flush_cache(struct mmc_card *card)
> >>>                          (card->ext_csd.cache_size > 0) &&
> >>>                          (card->ext_csd.cache_ctrl & 1)) {
> >>>                  err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
> >>> -                               EXT_CSD_FLUSH_CACHE, 1, 0);
> >>> +                                EXT_CSD_FLUSH_CACHE, 1,
> >>> +                                MMC_CACHE_FLUSH_TIMEOUT_MS);
> >
> >
> > I no longer see the issue on reverting the above hunk as Bitan suggested
> > but now I see the following (which is expected) ...
> >
> >  WARNING KERN mmc1: unspecified timeout for CMD6 - use generic
>
> For Tegra, the default timeout used when no timeout is specified for CMD6
> is 100mS. So hard-coding the following also appears to workaround the
> problem on Tegra ...

Interesting.

>
> diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c
> index 868653bc1555..5155e0240fca 100644
> --- a/drivers/mmc/core/mmc_ops.c
> +++ b/drivers/mmc/core/mmc_ops.c
> @@ -992,7 +992,7 @@ int mmc_flush_cache(struct mmc_card *card)
>                         (card->ext_csd.cache_size > 0) &&
>                         (card->ext_csd.cache_ctrl & 1)) {
>                 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
> -                                EXT_CSD_FLUSH_CACHE, 1, 0);
> +                                EXT_CSD_FLUSH_CACHE, 1, 100);
>                 if (err)
>                         pr_err("%s: cache flush error %d\n",
>                                         mmc_hostname(card->host), err);
>
> So the problem appears to be causing by the timeout being too long rather
> than not long enough.
>
> Looking more at the code, I think now that we are hitting the condition
> ...
>
> diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c
> index 868653bc1555..feae82b1ff35 100644
> --- a/drivers/mmc/core/mmc_ops.c
> +++ b/drivers/mmc/core/mmc_ops.c
> @@ -579,8 +579,10 @@ int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
>          * the host to avoid HW busy detection, by converting to a R1 response
>          * instead of a R1B.
>          */
> -       if (host->max_busy_timeout && (timeout_ms > host->max_busy_timeout))
> +       if (host->max_busy_timeout && (timeout_ms > host->max_busy_timeout)) {
> +               pr_warn("%s: timeout (%d) > max busy timeout (%d)", mmc_hostname(host), timeout_ms, host->max_busy_timeout);
>                 use_r1b_resp = false;
> +       }
>
>
> With the above I see ...
>
>  WARNING KERN mmc1: timeout (1600) > max busy timeout (672)
>
> So with the longer timeout we are not using/requesting the response.

You are most likely correct.

However, from the core point of view, the response is still requested,
only that we don't want the driver to wait for the card to stop
signaling busy. Instead we want to deal with that via "polling" from
the core.

This is a rather worrying behaviour, as it seems like the host driver
doesn't really follow this expectations from the core point of view.
And mmc_flush_cache() is not the only case, as we have erase, bkops,
sanitize, etc. Are all these working or not really well tested?

Earlier, before my three patches, if the provided timeout_ms parameter
to __mmc_switch() was zero, which was the case for
mmc_mmc_flush_cache() - this lead to that __mmc_switch() simply
ignored validating host->max_busy_timeout, which was wrong. In any
case, this also meant that an R1B response was always used for
mmc_flush_cache(), as you also indicated above. Perhaps this is the
critical part where things can go wrong.

BTW, have you tried erase commands for sdhci tegra driver? If those
are working fine, do you have any special treatments for these?

I have looped in Faiz, as sdhci-omap seems to suffer from very similar
problems. One thing I noted for sdhci-omap, is that MMC_ERASE commands
is treated in a special manner in sdhci_omap_set_timeout(). This
indicates that there is something fishy going on.

Faiz, can you please comment on this?

Kind regards
Uffe

  reply	other threads:[~2020-02-25 14:26 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-13 15:42 LKFT: arm x15: mmc1: cache flush error -110 Naresh Kamboju
2020-02-14  9:09 ` Arnd Bergmann
2020-02-14 12:09   ` Mark Brown
2020-02-19 16:23 ` Ulf Hansson
2020-02-20 17:54   ` Naresh Kamboju
2020-02-21  9:48     ` Ulf Hansson
2020-02-21 19:44       ` Bitan Biswas
2020-02-24 11:16         ` Ulf Hansson
2020-02-24 12:59           ` Adrian Hunter
2020-02-25 10:04           ` Jon Hunter
2020-02-25 11:35             ` Ulf Hansson
2020-02-25 11:41             ` Jon Hunter
2020-02-25 14:26               ` Ulf Hansson [this message]
2020-02-25 16:24                 ` Jon Hunter
2020-02-26 15:21                   ` Ulf Hansson
2020-02-26 17:04                     ` Jon Hunter
2020-03-02 13:12                     ` Faiz Abbas
2020-03-02 16:50                       ` Ulf Hansson
2020-03-03 21:35                         ` Ulf Hansson
     [not found]                         ` <5e9b5646-bd48-e55b-54ee-1c2c41fc9218@nvidia.com>
2020-03-04 10:18                           ` Ulf Hansson
2020-03-04 10:32                             ` Ulf Hansson
2020-03-04 16:56                             ` Sowjanya Komatineni
2020-03-04 17:21                               ` Sowjanya Komatineni
2020-03-04 17:26                                 ` Sowjanya Komatineni
2020-03-04 17:51                                   ` Sowjanya Komatineni
2020-03-04 22:35                                     ` Sowjanya Komatineni
2020-03-05  0:20                                       ` Sowjanya Komatineni
2020-03-05  3:06                                         ` Sowjanya Komatineni
2020-03-05 13:05                                         ` Ulf Hansson
2020-03-06  2:44                                           ` Sowjanya Komatineni
2020-03-06 11:14                                             ` Ulf Hansson
2020-03-09 14:07                                               ` Faiz Abbas
2020-03-09 15:57                                                 ` Ulf Hansson
2020-03-09 17:35                                               ` Sowjanya Komatineni
2020-03-10  9:46                                                 ` Ulf Hansson
2020-03-10 16:59                                                   ` Sowjanya Komatineni
2020-03-10 17:09                                                     ` Ulf Hansson
2020-03-10 17:27                                                       ` Sowjanya Komatineni
2020-03-10 21:59                                                         ` Sowjanya Komatineni
2020-03-10 23:10                                                           ` Sowjanya Komatineni
2020-03-11  0:22                                                             ` Sowjanya Komatineni
2020-03-11  8:34                                                               ` Ulf Hansson
2020-03-19 19:12                                                                 ` Naresh Kamboju
2020-03-20  9:20                                                                   ` Ulf Hansson
2020-03-20  9:49                                                                     ` Greg Kroah-Hartman

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='CAPDyKFokE6x0mn+v5B9=so-SyrdTn0JBU8Mrp3Zdu6kSaCie2g@mail.gmail.com' \
    --to=ulf.hansson@linaro.org \
    --cc=adrian.hunter@intel.com \
    --cc=arnd@arndb.de \
    --cc=ast@kernel.org \
    --cc=axboe@kernel.dk \
    --cc=bbiswas@nvidia.com \
    --cc=faiz_abbas@ti.com \
    --cc=john.stultz@linaro.org \
    --cc=jonathanh@nvidia.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=lkft-triage@lists.linaro.org \
    --cc=naresh.kamboju@linaro.org \
    --cc=treding@nvidia.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.