All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avri Altman <Avri.Altman@wdc.com>
To: Scott Branden <scott.branden@broadcom.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	"Bean Huo (beanhuo)" <beanhuo@micron.com>,
	"Luca Porzio (lporzio)" <lporzio@micron.com>,
	"tedirkes@micron.com" <tedirkes@micron.com>
Cc: BCM Kernel Feedback <bcm-kernel-feedback-list@broadcom.com>,
	linux-mmc <linux-mmc@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Vladimir Olovyannikov <vladimir.olovyannikov@broadcom.com>
Subject: RE: [PATCH] mmc: add quirk to disable eMMC cache for Micron eMMC v5.0 cards
Date: Tue, 13 Apr 2021 16:51:35 +0000	[thread overview]
Message-ID: <DM6PR04MB657523A7DA3D4AD0A54E08D6FC4F9@DM6PR04MB6575.namprd04.prod.outlook.com> (raw)
In-Reply-To: <74343d16-9894-f203-1401-8fa44d19bac7@broadcom.com>

Scott hi,
Can you take a look at https://lore.kernel.org/lkml/20210322133645.4901-1-avri.altman@wdc.com/
Is there a chance that it will work for you as well?

Thanks,
Avri

> -----Original Message-----
> From: Scott Branden <scott.branden@broadcom.com>
> Sent: Tuesday, 13 April 2021 18:46
> To: Ulf Hansson <ulf.hansson@linaro.org>; Bean Huo (beanhuo)
> <beanhuo@micron.com>; Luca Porzio (lporzio) <lporzio@micron.com>;
> tedirkes@micron.com
> Cc: BCM Kernel Feedback <bcm-kernel-feedback-list@broadcom.com>; linux-
> mmc <linux-mmc@vger.kernel.org>; Linux Kernel Mailing List <linux-
> kernel@vger.kernel.org>; Vladimir Olovyannikov
> <vladimir.olovyannikov@broadcom.com>
> Subject: Re: [PATCH] mmc: add quirk to disable eMMC cache for Micron eMMC
> v5.0 cards
> 
> +Travis Dirkes (with corrected email),
> 
>  Could you provide more details on the Micron data error.
> 
> > On 2021-04-12 12:44 a.m., Ulf Hansson wrote:
> >> + Bean Huo, Luca Porzio
> >>
> >> On Thu, 8 Apr 2021 at 19:59, Scott Branden
> <scott.branden@broadcom.com> wrote:
> >>>
> >>> From: Vladimir Olovyannikov <vladimir.olovyannikov@broadcom.com>
> >>>
> >>> In certain rare combination of operations, Micron eMMC v5.0 cards
> >>> may experience data errors if internal cache is enabled.
> >>> This may lead to eMMC related data errors.
> >>> Introduce a quirk to disable cache on these eMMC cards.
> >>
> >> Can you please elaborate on this, what combinations of operations are
> >> you referring to - and what kind of data errors?
> >>
> >> I have also looped in some of the Micron guys, to let them chim in.
> >>
> >>>
> >>> Signed-off-by: Vladimir Olovyannikov
> <vladimir.olovyannikov@broadcom.com>
> >>> Signed-off-by: Scott Branden <scott.branden@broadcom.com>
> >>
> >> Kind regards
> >> Uffe
> >>
> >>> ---
> >>>  drivers/mmc/core/card.h   | 5 +++++
> >>>  drivers/mmc/core/mmc.c    | 4 ++--
> >>>  drivers/mmc/core/quirks.h | 8 ++++++++
> >>>  include/linux/mmc/card.h  | 1 +
> >>>  4 files changed, 16 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/drivers/mmc/core/card.h b/drivers/mmc/core/card.h
> >>> index 7bd392d55cfa..22cea63ac359 100644
> >>> --- a/drivers/mmc/core/card.h
> >>> +++ b/drivers/mmc/core/card.h
> >>> @@ -222,4 +222,9 @@ static inline int mmc_card_broken_hpi(const
> struct mmc_card *c)
> >>>         return c->quirks & MMC_QUIRK_BROKEN_HPI;
> >>>  }
> >>>
> >>> +static inline int mmc_card_broken_cache(const struct mmc_card *c)
> >>> +{
> >>> +       return c->quirks & MMC_QUIRK_BROKEN_CACHE;
> >>> +}
> >>> +
> >>>  #endif
> >>> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
> >>> index 8741271d3971..cd83b7f0e59c 100644
> >>> --- a/drivers/mmc/core/mmc.c
> >>> +++ b/drivers/mmc/core/mmc.c
> >>> @@ -1820,12 +1820,12 @@ static int mmc_init_card(struct mmc_host
> *host, u32 ocr,
> >>>          * sudden power failure tests. Let's extend the timeout to a minimum of
> >>>          * DEFAULT_CACHE_EN_TIMEOUT_MS and do it for all cards.
> >>>          */
> >>> -       if (card->ext_csd.cache_size > 0) {
> >>> +       if (!mmc_card_broken_cache(card) && card->ext_csd.cache_size > 0)
> {
> >>>                 unsigned int timeout_ms = MIN_CACHE_EN_TIMEOUT_MS;
> >>>
> >>>                 timeout_ms = max(card->ext_csd.generic_cmd6_time,
> timeout_ms);
> >>>                 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
> >>> -                               EXT_CSD_CACHE_CTRL, 1, timeout_ms);
> >>> +                                EXT_CSD_CACHE_CTRL, 1, timeout_ms);
> >>>                 if (err && err != -EBADMSG)
> >>>                         goto free_card;
> >>>
> >>> diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h
> >>> index d68e6e513a4f..23972d87c82a 100644
> >>> --- a/drivers/mmc/core/quirks.h
> >>> +++ b/drivers/mmc/core/quirks.h
> >>> @@ -116,6 +116,14 @@ static const struct mmc_fixup __maybe_unused
> mmc_ext_csd_fixups[] = {
> >>>         MMC_FIXUP_EXT_CSD_REV(CID_NAME_ANY,
> CID_MANFID_NUMONYX,
> >>>                               0x014e, add_quirk, MMC_QUIRK_BROKEN_HPI, 6),
> >>>
> >>> +       /*
> >>> +        * In certain rare combination of operations, Micron eMMC v5.0 cards
> >>> +        * may experience data errors if internal cache is enabled.
> >>> +        * Disabling cache for these cards eliminates the issue.
> >>> +        */
> >>> +       MMC_FIXUP_EXT_CSD_REV(CID_NAME_ANY,
> CID_MANFID_MICRON,
> >>> +                             0x014e, add_quirk, MMC_QUIRK_BROKEN_CACHE, 7),
> >>> +
> >>>         END_FIXUP
> >>>  };
> >>>
> >>> diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
> >>> index f9ad35dd6012..22f256a4e54e 100644
> >>> --- a/include/linux/mmc/card.h
> >>> +++ b/include/linux/mmc/card.h
> >>> @@ -270,6 +270,7 @@ struct mmc_card {
> >>>  #define MMC_QUIRK_BROKEN_IRQ_POLLING   (1<<11) /* Polling
> SDIO_CCCR_INTx could create a fake interrupt */
> >>>  #define MMC_QUIRK_TRIM_BROKEN  (1<<12)         /* Skip trim */
> >>>  #define MMC_QUIRK_BROKEN_HPI   (1<<13)         /* Disable broken HPI
> support */
> >>> +#define MMC_QUIRK_BROKEN_CACHE (1<<14)         /* Disable broken
> cache */
> >>>
> >>>         bool                    reenable_cmdq;  /* Re-enable Command Queue */
> >>>
> >>> --
> >>> 2.17.1
> >>>
> >


  reply	other threads:[~2021-04-13 16:51 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-08 17:59 [PATCH] mmc: add quirk to disable eMMC cache for Micron eMMC v5.0 cards Scott Branden
2021-04-12  7:44 ` Ulf Hansson
2021-04-13 15:44   ` Scott Branden
2021-04-13 15:46     ` Scott Branden
2021-04-13 16:51       ` Avri Altman [this message]
2021-04-14  9:05 ` Bean Huo

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=DM6PR04MB657523A7DA3D4AD0A54E08D6FC4F9@DM6PR04MB6575.namprd04.prod.outlook.com \
    --to=avri.altman@wdc.com \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=beanhuo@micron.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=lporzio@micron.com \
    --cc=scott.branden@broadcom.com \
    --cc=tedirkes@micron.com \
    --cc=ulf.hansson@linaro.org \
    --cc=vladimir.olovyannikov@broadcom.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.