All of lore.kernel.org
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: Ulf Hansson <ulf.hansson@linaro.org>
Cc: linux-mmc <linux-mmc@vger.kernel.org>,
	Jaehoon Chung <jh80.chung@samsung.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Chaotian Jing <chaotian.jing@mediatek.com>,
	Stephen Boyd <sboyd@codeaurora.org>,
	Michael Walle <michael@walle.cc>,
	Yong Mao <yong.mao@mediatek.com>,
	Shawn Lin <shawn.lin@rock-chips.com>
Subject: Re: [PATCH 9/9] mmc: core: Allow CMD13 polling when switch to HS400ES mode
Date: Fri, 18 Nov 2016 16:43:54 +0200	[thread overview]
Message-ID: <166870de-f6b1-e6a1-d585-dbe38530ba98@intel.com> (raw)
In-Reply-To: <CAPDyKFrqTG_pHPL-dydJ-OdEWfU7Ftu=0XG-GNZvXPZnX8aysw@mail.gmail.com>

On 18/11/16 16:37, Ulf Hansson wrote:
> On 18 November 2016 at 14:35, Adrian Hunter <adrian.hunter@intel.com> wrote:
>> On 16/11/16 12:51, Ulf Hansson wrote:
>>> In cases when the mmc host doesn't support HW busy detection, polling for
>>> busy by using CMD13 is beneficial. The reasons have already been explained
>>> in earlier change logs.
>>>
>>> Moreover, when polling with CMD13 during bus timing changes, we should
>>> retry instead of fail when we get CRC errors.
>>>
>>> Switching to HS400ES includes several steps, where each step changes the
>>> bus speed timing. Let's improve the behaviour during these sequences, by
>>> allowing CMD13 polling for each of the step. Let's also make sure the CMD13
>>> polling becomes retried, while receiving a CRC error.
>>>
>>> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
>>> ---
>>>  drivers/mmc/core/mmc.c | 35 +++++++++++------------------------
>>>  1 file changed, 11 insertions(+), 24 deletions(-)
>>>
>>> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
>>> index 24b9e72..b6f0035 100644
>>> --- a/drivers/mmc/core/mmc.c
>>> +++ b/drivers/mmc/core/mmc.c
>>> @@ -1227,31 +1227,24 @@ static int mmc_select_hs400es(struct mmc_card *card)
>>>               goto out_err;
>>>
>>>       /* Switch card to HS mode */
>>> -     err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
>>> -                        EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS,
>>> -                        card->ext_csd.generic_cmd6_time, 0,
>>> -                        true, false, true);
>>> +     err = mmc_select_hs(card);
>>>       if (err) {
>>>               pr_err("%s: switch to hs for hs400es failed, err:%d\n",
>>>                       mmc_hostname(host), err);
>>>               goto out_err;
>>>       }
>>>
>>> -     mmc_set_timing(host, MMC_TIMING_MMC_HS);
>>> -     err = mmc_switch_status(card);
>>> -     if (err)
>>> -             goto out_err;
>>> -
>>>       mmc_set_clock(host, card->ext_csd.hs_max_dtr);
>>>
>>> -     /* Switch card to DDR with strobe bit */
>>> +     /* Switch card to HS DDR with strobe bit */
>>>       val = EXT_CSD_DDR_BUS_WIDTH_8 | EXT_CSD_BUS_WIDTH_STROBE;
>>> -     err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
>>> -                      EXT_CSD_BUS_WIDTH,
>>> -                      val,
>>> -                      card->ext_csd.generic_cmd6_time);
>>> +     err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
>>> +                        EXT_CSD_BUS_WIDTH, val,
>>> +                        card->ext_csd.generic_cmd6_time,
>>> +                        MMC_TIMING_MMC_DDR52,
>>> +                        true, true, true);
>>>       if (err) {
>>> -             pr_err("%s: switch to bus width for hs400es failed, err:%d\n",
>>> +             pr_err("%s: switch to hs ddr for hs400es failed, err:%d\n",
>>>                       mmc_hostname(host), err);
>>>               goto out_err;
>>>       }
>>> @@ -1261,26 +1254,20 @@ static int mmc_select_hs400es(struct mmc_card *card)
>>>             card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
>>>       err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
>>>                          EXT_CSD_HS_TIMING, val,
>>> -                        card->ext_csd.generic_cmd6_time, 0,
>>> -                        true, false, true);
>>> +                        card->ext_csd.generic_cmd6_time,
>>> +                        MMC_TIMING_MMC_HS400,
>>> +                        true, true, true);
>>
>> This could be a problem because the CMD13 is being sent to a card in HS400
>> enhanced strobe mode but we haven't enabled enhanced strobe on the host
>> controller yet.  Previously mmc_switch_status(card) was below
>> host->ops->hs400_enhanced_strobe().
>>
> 
> Yes, more or less the same reasons as before. We need the "tuning" (in
> this case the "strobing") to be done before validating the switch
> status.
> 
> Although, the change a little further above, when switching to HS DDR
> in the intermediate step - that should be fine, don't you think?

Yes


  reply	other threads:[~2016-11-18 14:48 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-16 10:51 [PATCH 0/9] mmc: core: Re-work CMD13 polling method for CMD6 for mmc Ulf Hansson
2016-11-16 10:51 ` [PATCH 1/9] mmc: core: Retry instead of ignore at CRC errors when polling for busy Ulf Hansson
2016-11-16 10:51 ` [PATCH 2/9] mmc: core: Remove redundant __mmc_send_status() Ulf Hansson
2016-11-16 10:51 ` [PATCH 3/9] mmc: core: Rename ignore_crc to retry_crc_err to reflect its purpose Ulf Hansson
2016-11-16 10:51 ` [PATCH 4/9] mmc: core: Enable __mmc_switch() to change bus speed timing for the host Ulf Hansson
2016-11-16 10:51 ` [PATCH 5/9] mmc: core: Allow CMD13 polling when switching to HS mode for mmc Ulf Hansson
2016-11-16 10:51 ` [PATCH 6/9] mmc: core: Update CMD13 polling policy when switch to HS DDR mode Ulf Hansson
2016-11-16 10:51 ` [PATCH 7/9] mmc: core: Allow CMD13 polling when switch to HS200 mode Ulf Hansson
2016-11-17 10:23   ` Adrian Hunter
2016-11-17 15:02     ` Ulf Hansson
2016-11-18  9:30       ` Adrian Hunter
2016-11-18 12:20         ` Ulf Hansson
2016-11-18 12:32           ` Adrian Hunter
2016-11-18 13:16             ` Ulf Hansson
2016-11-18  8:05   ` Shawn Lin
2016-11-18 11:45     ` Ulf Hansson
2016-11-23  1:24       ` Shawn Lin
2016-11-16 10:51 ` [PATCH 8/9] mmc: core: Allow CMD13 polling when switch to HS400 mode Ulf Hansson
2016-11-18 12:02   ` Adrian Hunter
2016-11-18 12:59     ` Ulf Hansson
2016-11-16 10:51 ` [PATCH 9/9] mmc: core: Allow CMD13 polling when switch to HS400ES mode Ulf Hansson
2016-11-18 13:35   ` Adrian Hunter
2016-11-18 14:37     ` Ulf Hansson
2016-11-18 14:43       ` Adrian Hunter [this message]
2016-11-17  9:06 ` [PATCH 0/9] mmc: core: Re-work CMD13 polling method for CMD6 for mmc Linus Walleij

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=166870de-f6b1-e6a1-d585-dbe38530ba98@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=chaotian.jing@mediatek.com \
    --cc=jh80.chung@samsung.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=michael@walle.cc \
    --cc=sboyd@codeaurora.org \
    --cc=shawn.lin@rock-chips.com \
    --cc=ulf.hansson@linaro.org \
    --cc=yong.mao@mediatek.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.