mmc: core: Add a facility to "pause" re-tuning
Re-tuning is not possible when switched to the RPMB partition. However re-tuning should not be needed if re-tuning is done immediately before switching, a small set of operations is done, and then we immediately switch back to the main partition. To ensure that re-tuning can't be done for a short while, add a facility to "pause" re-tuning. The existing facility to hold / release re-tuning is used but it also flags re-tuning as needed to cause re-tuning before the next command (which will be the switch to RPMB). We also need to "unpause" in the recovery path, which is catered for by adding it to mmc_retune_disable(). Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
此提交包含在:
@@ -68,8 +68,32 @@ void mmc_retune_enable(struct mmc_host *host)
|
||||
jiffies + host->retune_period * HZ);
|
||||
}
|
||||
|
||||
/*
|
||||
* Pause re-tuning for a small set of operations. The pause begins after the
|
||||
* next command and after first doing re-tuning.
|
||||
*/
|
||||
void mmc_retune_pause(struct mmc_host *host)
|
||||
{
|
||||
if (!host->retune_paused) {
|
||||
host->retune_paused = 1;
|
||||
mmc_retune_needed(host);
|
||||
mmc_retune_hold(host);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(mmc_retune_pause);
|
||||
|
||||
void mmc_retune_unpause(struct mmc_host *host)
|
||||
{
|
||||
if (host->retune_paused) {
|
||||
host->retune_paused = 0;
|
||||
mmc_retune_release(host);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(mmc_retune_unpause);
|
||||
|
||||
void mmc_retune_disable(struct mmc_host *host)
|
||||
{
|
||||
mmc_retune_unpause(host);
|
||||
host->can_retune = 0;
|
||||
del_timer_sync(&host->retune_timer);
|
||||
host->retune_now = 0;
|
||||
|
新增問題並參考
封鎖使用者