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>,
	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 V5 02/15] mmc: core: Enable / disable re-tuning
Date: Fri, 17 Apr 2015 09:53:17 +0300	[thread overview]
Message-ID: <5530ADDD.1030408@intel.com> (raw)
In-Reply-To: <CAPDyKFrSQVzawd4rZZ=aidWRY8XdiWAbBr9usUP0sH8mwPmMNQ@mail.gmail.com>

On 16/04/15 16:57, Ulf Hansson wrote:
> [...]
> 
>>>>> 2) system PM (disable?)
>>>>
>>>> System pm does mmc_power_off() which calls mmc_set_initial_state()
>>>
>>> At System PM other commands will be sent to put the card into sleep
>>> state. For example CMD5. These commands are invoked prior
>>> mmc_power_off() is called.
>>
>> You can't do *any* commands after CMD5 except CMD0 or another CMD5 to wake up.
>>
>> So if you want to wake-up from sleep, then you need to hold re-tuning, but
>> that is not what is happening at the moment.
> 
> So then we need to fix this.
> 
> Also, it seems like disabling the re-tuning timer would also be the
> proper thing to do, thus we should rather do disable instead of
> hold/release.

I can add hold/release. The hold should be done before sleeping
and the release after waking up. In this case there is no wake-up, instead
there is power-off, so the release can be done then.

Disabling before CMD5 is not the right thing to do because we might want to
re-tune before issuing CMD5.

> 
>>
>>>
>>> In the SDIO case, mmc_power_off() might not even be called at all,
>>> since SDIO func drivers might have enabled MMC_PM_KEEP_POWER.
>>
>> If the card is not going to be re-initialized then disabling is not necessary.
> 
> I don't want the re-tuning timer to be running, thus it seems like we
> should do disable. Right?

Re-tuning remains enabled while the card has a transfer mode that requires
it. Re-tuning is only done before a request so it doesn't need to be
disabled during suspend i.e. no requests implies no-retuning

I can add disabling the re-tuning timer, although the host does that too.

> 
>>
>>>
>>>>
>>>>> 3) runtime PM (disable?)
>>>>
>>>> If the card powers off then mmc_set_initial_state() will called.
>>>
>>> Again that's too late, since for example the CMD5 might have been sent
>>> before this.
>>
>> CMD5 is only used by _mmc_suspend()
>>
>> Yes if it were used elsewhere then re-tuning would have to be held, which is
>> why I added a comment before mmc_sleep()
>>
>>         /* If necessary, callers must hold re-tuning */
>>         static int mmc_sleep(struct mmc_host *host)
>>
> 
> I don't follow here. Why would we like to allow a re-tuning to be done
> in this part of the system PM phase? It doesn't make sense to me.

Because it is needed.

If re-tuning is needed and can be done, it is done. It doesn't need to be
more complicated than that.

> 
>>>
>>>>
>>>> For anything else the card might be doing, the mmc_retune_hold() /
>>>> mmc_retune_release() functions are used.
>>>>
>>>>> 4) reset (?)
>>>>
>>>> Reset goes through mmc_set_initial_state()
>>>
>>> In the mmc case, CMD13 is sent prior that. Shouldn't we hold re-tune
>>> during that period?
>>
>> If reset happens, then the next command will fail, whether it is re-tuning
>> or CMD13, so no different.
> 
> That depends on how each an every host has implemented their tuning mechanism.

No it doesn't. Tuning either succeeds or fails. When there is no card, if it
fails then the CMD13 is not needed, and if it succeeds then CMD13 will fail.

> 
> CMD13 is more light weight, so I believe we should hold re-tune to
> make sure we do the CMD13 and fail quickly.

If re-tuning is needed and can be done, it is done. It doesn't need to be
more complicated than that.

> 
>>
>> If reset doesn't happen, then it is no different to normal operations.
>>


  reply	other threads:[~2015-04-17  6:55 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-14 13:12 [PATCH V5 00/15] mmc: host: Add facility to support re-tuning Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 01/15] " Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 02/15] mmc: core: Enable / disable re-tuning Adrian Hunter
2015-04-16  8:57   ` Ulf Hansson
2015-04-16  9:26     ` Adrian Hunter
2015-04-16 12:00       ` Ulf Hansson
2015-04-16 13:14         ` Adrian Hunter
2015-04-16 13:57           ` Ulf Hansson
2015-04-17  6:53             ` Adrian Hunter [this message]
2015-04-16 13:24         ` Adrian Hunter
2015-04-16 15:19           ` Ulf Hansson
2015-04-17  7:06             ` Adrian Hunter
2015-04-17  8:56               ` Ulf Hansson
2015-04-17 11:52                 ` Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 03/15] mmc: core: Add support for re-tuning before each request Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 04/15] mmc: core: Check re-tuning before retrying Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 05/15] mmc: core: Hold re-tuning during switch commands Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 06/15] mmc: core: Hold re-tuning during erase commands Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 07/15] mmc: core: Hold re-tuning while bkops ongoing Adrian Hunter
2015-04-16  9:27   ` Ulf Hansson
2015-04-16 11:54     ` [PATCH V6 " Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 08/15] mmc: mmc: Comment that callers need to hold re-tuning if the card is put to sleep Adrian Hunter
2015-04-16  9:01   ` Ulf Hansson
2015-04-16  9:30     ` Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 09/15] mmc: core: Separate out the mmc_switch status check so it can be re-used Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 10/15] mmc: core: Add support for HS400 re-tuning Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 11/15] mmc: sdhci: Change to new way of doing re-tuning Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 12/15] mmc: sdhci: Flag re-tuning is needed on CRC or End-Bit errors Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 13/15] mmc: block: Check re-tuning in the recovery path Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 14/15] mmc: block: Retry errored data requests when re-tuning is needed Adrian Hunter
2015-04-14 13:12 ` [PATCH V5 15/15] mmc: core: Don't print reset warning if reset is not supported Adrian Hunter

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=5530ADDD.1030408@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 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.