Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33ee9fb7 authored by Venkat Gopalakrishnan's avatar Venkat Gopalakrishnan
Browse files

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: default avatarVenkat Gopalakrishnan <venkatg@codeaurora.org>
parent e94b446e
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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;