From: Adrian Hunter <adrian.hunter@intel.com>
To: Ulf Hansson <ulf.hansson@linaro.org>
Cc: linux-mmc <linux-mmc@vger.kernel.org>,
Aaron Lu <aaron.lu@intel.com>, Philip Rakity <prakity@nvidia.com>,
Al Cooper <alcooperx@gmail.com>,
Arend van Spriel <arend@broadcom.com>
Subject: Re: [PATCH V4 01/15] mmc: host: Add facility to support re-tuning
Date: Thu, 02 Apr 2015 19:18:18 +0300 [thread overview]
Message-ID: <551D6BCA.7040708@intel.com> (raw)
In-Reply-To: <CAPDyKFrve0VmhvPk-=V64Cab8AcqvMkGxOM1Aju8gV+u3vFxyg@mail.gmail.com>
On 2/04/2015 4:05 p.m., Ulf Hansson wrote:
> [...]
>
>>>
>>>> - ability to enable / disable re-tuning
>>>
>>> Handled internally by the mmc core.
>>
>> The host controller driver enables re-tuning based on whether the host
>> controller requires it for that transfer mode. For example, only the SDHCI
>> host controller knows if tuning is required for SDR50 mode according to the
>> SDHCI capability register bit 45.
>
> That seems a bit silly.
>
> All hosts wants the re-tuning to be "enabled" if the current used
> speed mode requires it. It's not a host driver thing to deal with,
> just the core.
No it is up to the host controller. That is how it is in the
SD Host Controller Specification. Both whether to tune SDR50 and
whether to run a re-tuning timer.
Tuning is inherently a host controller problem. The card can always
receive correctly from the host, but the host has to adjust its
"sampling point" to receive from the card. Only the host knows its
capabilities in this regard.
>
> What's needed for the SDHCI case (in runtime PM suspend), is to be
> able to disable the re-tune timer and to flag that a re-tune is
> needed.
Yes that is how it works.
> Both of these things can be dealt with from the
> mmc_retune_needed() API, since I believe there should never be a case
> when we want the re-tune timer to continue to run, when someone have
> set the need_retune flag.
The approach implemented is to update the timer when tuning takes place.
That allows mmc_retune_needed() simply to set a flag, so it can be called
from any context.
>
> [...]
>
>>>> - ability to hold off re-tuning if the card is busy
>>>
>>> What do you mean by "card is busy"?
>>
>> I guess, more accurately, any time the card is in a state that is incapable
>> of supporting re-tuning. For example:
>> - DAT0 busy
>> - between dependent commands like erase start, end, etc
>> - card is asleep
>> Also SDIO cards can have a custom sleep state where tuning won't work.
>>
>>> Is this requirement due to that the re-tune timer may complete at any
>>> point, which then flags that a re-tune is needed?
>>
>> Primarily. But control is also needed when handling recovery. Or in the SDIO
>> custom sleep case.
>>
>> There is also SDHCI re-tuning modes 2 and 3 (presently not supported) where
>> the host controller itself indicates that re-tuning is needed via the
>> present state and interrupt status registers.
>
> To me, I assume mmc_retune_needed() API should be enough to cover
> SDHCI mode 2 and 3, right?
Yes.
>
> Potentially mmc_retune_needed() may then be called from IRQ context so
> we just have to be sure the API also copes with that (thinking that
> cancelling the timer must not "sleep").
According to the SDHC spec, if the host controller will itself request
re-tuning, then no timer is to be used. So the having the mmc_retune_needed()
API simply set a flag, as it does now, makes sense.
>
> [...]
>
>>>
>>>> - ability to run a re-tuning timer
>>>
>>> As we discussed earlier, it's not obvious when it make sense to run this timer.
>>>
>>> For the SDIO case, we should likely run it all the time, since we want
>>> to prevent I/O errors as long as possible.
>>>
>>> For MMC/SD, I would rather see that we perform re-tune as a part of an
>>> "idle operation" and not from a timer (yes I know about the SDHCI
>>> spec, but it doesn't make sense). We can do this because we are able
>>> to re-cover from I/O errors (re-trying when getting CRC errors for
>>> example).
>>
>> It makes sense to attempt to re-tune before CRC errors occur. If the
>> hardware vendor has gone to the trouble to determine when that might be,
>> then it makes sense to use that timeout. It is surely an approximation
>> (SDHCI only has values in powers-of-2 with units of seconds) but it seems
>> unreasonable to use a completely different value.
>
> I agree in cases where the hardware itself can measure heat and thus
> anticipate+signal when a re-tuning is needed. SDHCI mode 1 doesn't
> work like that, it's just a guess - as good as any. Therefore I would
> only use a timer in the SDIO case and rely on the recover sequence for
> the SD/MMC case.
>
> Now, I am not going to argue about this any more. Let's follow your
> suggestion and to make it possible to use a timer for _all_ cases.
Thank you! :-)
>
>>
>> Doing it in the idle operation would not work because we would then runtime
>> suspend and just have to do it again after resuming.
>
> That's correct, it will be completely useless for SDHCI. That's isn't
> the case for other hosts.
>
> Anyway, let's leave the "idle operation" scenarios out of this
> discussion. If considered, later it needs to be a configurable option.
>
> Kind regards
> Uffe
>
next prev parent reply other threads:[~2015-04-02 16:18 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-27 20:57 [PATCH V4 00/15] mmc: host: Add facility to support re-tuning Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 01/15] " Adrian Hunter
2015-04-01 9:50 ` Ulf Hansson
2015-04-01 11:47 ` Adrian Hunter
2015-04-01 15:10 ` Arend van Spriel
2015-04-02 8:43 ` Ulf Hansson
2015-04-02 10:30 ` Arend van Spriel
2015-04-02 12:10 ` Ulf Hansson
2015-04-02 12:18 ` Adrian Hunter
2015-04-02 12:25 ` Ulf Hansson
2015-04-02 12:27 ` Arend van Spriel
2015-04-02 12:43 ` Adrian Hunter
2015-04-02 14:00 ` Ulf Hansson
2015-04-03 2:59 ` NeilBrown
2015-04-08 7:42 ` Adrian Hunter
2015-04-13 12:07 ` Ulf Hansson
2015-04-14 13:38 ` Adrian Hunter
2015-04-14 16:52 ` Arend van Spriel
2015-04-16 7:24 ` Ulf Hansson
2015-04-16 8:59 ` Adrian Hunter
2015-04-16 11:28 ` Ulf Hansson
2015-04-02 13:05 ` Ulf Hansson
2015-04-02 16:18 ` Adrian Hunter [this message]
2015-04-13 12:30 ` Ulf Hansson
2015-04-14 13:13 ` Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 02/15] mmc: core: Disable re-tuning when card is no longer initialized Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 03/15] mmc: core: Add support for re-tuning before each request Adrian Hunter
2015-04-01 10:13 ` Ulf Hansson
2015-04-01 12:08 ` Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 04/15] mmc: core: Check re-tuning before retrying Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 05/15] mmc: core: Hold re-tuning during switch commands Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 06/15] mmc: core: Hold re-tuning during erase commands Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 07/15] mmc: core: Hold re-tuning while bkops ongoing Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 08/15] mmc: mmc: Comment that callers need to hold re-tuning if the card is put to sleep Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 09/15] mmc: core: Separate out the mmc_switch status check so it can be re-used Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 10/15] mmc: core: Add support for HS400 re-tuning Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 11/15] mmc: sdhci: Change to new way of doing re-tuning Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 12/15] mmc: sdhci: Flag re-tuning is needed on CRC or End-Bit errors Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 13/15] mmc: block: Check re-tuning in the recovery path Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 14/15] mmc: block: Retry errored data requests when re-tuning is needed Adrian Hunter
2015-03-27 20:57 ` [PATCH V4 15/15] mmc: core: Don't print reset warning if reset is not supported Adrian Hunter
2015-04-01 6:21 ` [PATCH V4 00/15] mmc: host: Add facility to support re-tuning Adrian Hunter
2015-04-10 10:39 ` Adrian Hunter
2015-04-10 10:52 ` 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=551D6BCA.7040708@intel.com \
--to=adrian.hunter@intel.com \
--cc=aaron.lu@intel.com \
--cc=alcooperx@gmail.com \
--cc=arend@broadcom.com \
--cc=linux-mmc@vger.kernel.org \
--cc=prakity@nvidia.com \
--cc=ulf.hansson@linaro.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).