scsi: ufs: disable ah8 during suspend and enable it on resume
Auto hibern8 is useful during active requests for efficient power savings. Since we are anyway in suspend path, disable auto hibern8 until a successful resume. This prevents unnecessary hibern8 enter/exit during the suspend/resume path. Change-Id: Ie5a76dddd662e67ae8ce6e6f37f437ff4665b066 Signed-off-by: Venkat Gopalakrishnan <venkatg@codeaurora.org>
This commit is contained in:
parent
e94b446eac
commit
33ee9fb701
1 changed files with 18 additions and 0 deletions
|
@ -7977,6 +7977,13 @@ static int ufshcd_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
|
|||
hba->clk_gating.is_suspended = true;
|
||||
hba->hibern8_on_idle.is_suspended = true;
|
||||
|
||||
/*
|
||||
* Disable auto hibern8 to prevent unnecessary hibern8 enter/exit
|
||||
* during suspend path
|
||||
*/
|
||||
if (ufshcd_is_auto_hibern8_supported(hba))
|
||||
ufshcd_set_auto_hibern8_timer(hba, 0);
|
||||
|
||||
if (hba->clk_scaling.is_allowed) {
|
||||
cancel_work_sync(&hba->clk_scaling.suspend_work);
|
||||
cancel_work_sync(&hba->clk_scaling.resume_work);
|
||||
|
@ -8084,6 +8091,10 @@ enable_gating:
|
|||
ufshcd_resume_clkscaling(hba);
|
||||
hba->hibern8_on_idle.is_suspended = false;
|
||||
hba->clk_gating.is_suspended = false;
|
||||
/* Re-enable auto hibern8 in case of suspend failure */
|
||||
if (ufshcd_is_auto_hibern8_supported(hba))
|
||||
ufshcd_set_auto_hibern8_timer(hba,
|
||||
hba->hibern8_on_idle.delay_ms);
|
||||
ufshcd_release_all(hba);
|
||||
out:
|
||||
hba->pm_op_in_progress = 0;
|
||||
|
@ -8177,6 +8188,13 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
|
|||
if (hba->clk_scaling.is_allowed)
|
||||
ufshcd_resume_clkscaling(hba);
|
||||
|
||||
/*
|
||||
* Enable auto hibern8 after successful resume to prevent
|
||||
* unnecessary hibern8 enter/exit during resume path
|
||||
*/
|
||||
if (ufshcd_is_auto_hibern8_supported(hba))
|
||||
ufshcd_set_auto_hibern8_timer(hba,
|
||||
hba->hibern8_on_idle.delay_ms);
|
||||
/* Schedule clock gating in case of no access to UFS device yet */
|
||||
ufshcd_release_all(hba);
|
||||
goto out;
|
||||
|
|
Loading…
Add table
Reference in a new issue