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>,
	Chris Ball <chris@printf.net>,
	Dong Aisheng <b29396@freescale.com>,
	Stephen Warren <swarren@nvidia.com>,
	Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
Subject: Re: [PATCH 08/10] mmc: card: Use R1 response for the stop cmd at recovery path
Date: Mon, 27 Jan 2014 12:40:33 +0200	[thread overview]
Message-ID: <52E637A1.8060602@intel.com> (raw)
In-Reply-To: <CAPDyKFommygDb23S_OsN8-JZ2HoyzJeB0F-WmPGB5fOrBO3tHg@mail.gmail.com>

On 23/01/14 16:59, Ulf Hansson wrote:
> On 23 January 2014 15:29, Adrian Hunter <adrian.hunter@intel.com> wrote:
>> On 23/01/14 15:21, Ulf Hansson wrote:
>>> On 23 January 2014 11:09, Adrian Hunter <adrian.hunter@intel.com> wrote:
>>>> On 22/01/14 17:00, Ulf Hansson wrote:
>>>>> Hosts supporting MMC_CAP_WAIT_WHILE_BUSY shall not be waiting for busy
>>>>> detection completion in the recovery path, which were the case when
>>>>> using R1B response.
>>>>>
>>>>> Start using R1 as response instead to align behavior, no matter if
>>>>> MMC_CAP_WAIT_WHILE_BUSY is supported or not.
>>>>
>>>> This does not make sense to me.  If you are sending a STOP command you
>>>> should use the correct response type.  R1B should be OK here because the
>>>> card should release the busy signal in any case except failure.
>>>
>>> For those hosts not supporting MMC_CAP_WAIT_WHILE_BUSY a R1B is
>>> assumed to be treated same as an R1, which means there are no busy
>>> detection handled in the host.
>>
>> That is not entirely true.  For hosts that do not set
>> MMC_CAP_WAIT_WHILE_BUSY we don't know if they wait or not.  I imagine most
>> do because it is more efficient, but the kernel has always been programmed
>> to poll the status anyway so you can't tell from the code.
> 
> You are right, we can't know - unless we dive in into each host driver
> and check.
> 
> Surely there could be more than omap_hsmmc and sdhci that support
> this. Still I think we need to conclude on how to go forward with
> MMC_CAP_WAIT_WHILE_BUSY, since at the moment it seems a bit of a mess.
> Obviously we need to be careful to not break anything.
> 
>>
>> MMC_CAP_WAIT_WHILE_BUSY was one of my inventions I am afraid.  If I recall
>> correctly it was mainly due to the SLEEP command because you can't poll in
>> that case and you don't want to delay the system from sleeping - if you are
>> certain that the controller has waited for busy to de-assert (i.e.
>> MMC_CAP_WAIT_WHILE_BUSY) then you can exit immediately.
> 
> I think MMC_CAP_WAIT_WHILE_BUSY was a needed feature, now we only have
> to make it more mature. :-)
> 
>>
>>>
>>> mmc_blk_cmd_recovery() is the only caller of the send_stop() function.
>>> Additionally it does not care about to handle busy detection with
>>> CDM13 polling.
>>>
>>> Now, since most hosts don't support MMC_CAP_WAIT_WHILE_BUSY which
>>> means there no busy detection done, I wanted to align to this
>>> behaviour - no matter if the host can do HW busy detection or not.
>>>
>>> I am not saying this is how it must be done, just trying to provide
>>> you with some more reasons to why I wanted to change.
>>>
>>> If we instead decide keep the R1B for send_stop(), we should implement
>>> CMD 13 polling to meet the same behaviour for hosts not supporting
>>> MMC_CAP_WAIT_WHILE_BUSY. In this scenario, we need to set a select a
>>> busy timeout, do you have any suggestion of what would be a reasonable
>>> value for it?
>>
>> It is hard to tell if waiting is ever going to help more than hinder, so I
>> would not change this.
> 
> Fair enough, but certainly we should implement a CMD13 polling
> mechanism - to align behaviour.

Recovery probably isn't possible.  The block driver heroically has a go
at it.  For some people it much more important to fail fast than to
recover.  Consequently, unless you has a specific use-case, I wouldn't
add anything that would slow down that path.

> 
> Are you then also indirectly suggesting that not specficing
> "cmd.busy_timeout" should be interpreted by the host as "use whatever
> timeout you want"?

That is how it is now.  The problem with trying to so something better is
that sometimes the timeout really is undefined.

> 
> Do note, there are another scenario, which also don't specify a busy
> timeout, which is when we have used an open ended WRITE transmission
> and using CMD12 to finalize it.
> But, in this scenario we do polling with CMD13, also without a
> timeout. So at least the behaviour are aligned here, but still no
> timeout specified.

I don't think that is right.  The data timeout applies in that case too.

> 
>>
>>>
>>> Kind regards
>>> Ulf Hansson
>>>
>>>>
>>>>>
>>>>> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
>>>>> ---
>>>>>  drivers/mmc/card/block.c |    2 +-
>>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
>>>>> index 87cd2b0..74169fa 100644
>>>>> --- a/drivers/mmc/card/block.c
>>>>> +++ b/drivers/mmc/card/block.c
>>>>> @@ -728,7 +728,7 @@ static int send_stop(struct mmc_card *card, u32 *status)
>>>>>       int err;
>>>>>
>>>>>       cmd.opcode = MMC_STOP_TRANSMISSION;
>>>>> -     cmd.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC;
>>>>> +     cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC;
>>>>>       err = mmc_wait_for_cmd(card->host, &cmd, 5);
>>>>>       if (err == 0)
>>>>>               *status = cmd.resp[0];
>>>>>
>>>>
>>>
>>>
>>
> 
> 


  reply	other threads:[~2014-01-27 10:38 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-22 15:00 [PATCH 00/10] mmc: Improve busy detection for MMC_CAP_WAIT_WHILE_BUSY Ulf Hansson
2014-01-22 15:00 ` [PATCH 01/10] mmc: core: Rename max_discard_to to max_busy_timeout Ulf Hansson
2014-01-22 15:00 ` [PATCH 02/10] mmc: core: Rename cmd_timeout_ms to busy_timeout Ulf Hansson
2014-01-22 15:00 ` [PATCH 03/10] mmc: core: Add ignore_crc flag to __mmc_switch Ulf Hansson
2014-01-22 15:00 ` [PATCH 04/10] mmc: core: Fixup busy detection for mmc switch operations Ulf Hansson
2014-01-23 10:10   ` Adrian Hunter
2014-01-23 14:11     ` Ulf Hansson
2014-01-27 10:40       ` Adrian Hunter
2014-01-28 11:37         ` Ulf Hansson
2014-01-22 15:00 ` [PATCH 05/10] mmc: core: Use generic CMD6 time while switching to eMMC HS200 mode Ulf Hansson
2014-01-22 15:00 ` [PATCH 06/10] mmc: core: Respect host's max_busy_timeout when sending sleep cmd Ulf Hansson
2014-01-23 10:23   ` Adrian Hunter
2014-01-23 14:26     ` Ulf Hansson
2014-01-27 10:46       ` Adrian Hunter
2014-01-28 12:43         ` Ulf Hansson
2014-01-22 15:00 ` [PATCH 07/10] mmc: card: Use R1 responses for stop cmds for read requests Ulf Hansson
2014-01-22 15:00 ` [PATCH 08/10] mmc: card: Use R1 response for the stop cmd at recovery path Ulf Hansson
2014-01-23 10:09   ` Adrian Hunter
2014-01-23 13:21     ` Ulf Hansson
2014-01-23 14:29       ` Adrian Hunter
2014-01-23 14:59         ` Ulf Hansson
2014-01-27 10:40           ` Adrian Hunter [this message]
2014-01-28 12:39             ` Ulf Hansson
2014-01-28 14:45               ` Adrian Hunter
2014-01-28 16:11                 ` Ulf Hansson
2014-01-22 15:00 ` [PATCH 09/10] mmc: mmci: Handle CMD irq before DATA irq Ulf Hansson
2014-01-22 15:19   ` Russell King - ARM Linux
2014-01-22 15:43     ` Ulf Hansson
2014-01-22 15:00 ` [PATCH 10/10] mmc: mmci: Enable support for busy detection for ux500 variant Ulf Hansson

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=52E637A1.8060602@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=b29396@freescale.com \
    --cc=chris@printf.net \
    --cc=linux-mmc@vger.kernel.org \
    --cc=swarren@nvidia.com \
    --cc=ulf.hansson@linaro.org \
    --cc=vladimir_zapolskiy@mentor.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.