Commit 50183ac2 authored by Ram Prakash Gupta's avatar Ram Prakash Gupta Committed by Martin K. Petersen

scsi: ufs: core: Suspend clk scaling on no request

Currently UFS clk scaling is getting suspended only when the clks are
scaled down. When high load is generated, a huge amount of latency is added
due to scaling up the clk and completing the request post that.

Suspending the scaling in its existing state when high load is generated
improves the random performance KPI by 28%. So suspending the scaling when
there are no requests. And the clk would be put in low scaled state when
the actual request load is low.

Make this change optional by having the check enabled using vops since for
some devices suspending without bringing the clk in low scaled state might
have impact on power consumption of the SoC.
Signed-off-by: default avatarRam Prakash Gupta <quic_rampraka@quicinc.com>
Link: https://lore.kernel.org/r/20240627083756.25340-2-quic_rampraka@quicinc.comReviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent de240853
...@@ -1563,7 +1563,8 @@ static int ufshcd_devfreq_target(struct device *dev, ...@@ -1563,7 +1563,8 @@ static int ufshcd_devfreq_target(struct device *dev,
ktime_to_us(ktime_sub(ktime_get(), start)), ret); ktime_to_us(ktime_sub(ktime_get(), start)), ret);
out: out:
if (sched_clk_scaling_suspend_work && !scale_up) if (sched_clk_scaling_suspend_work &&
(!scale_up || hba->clk_scaling.suspend_on_no_request))
queue_work(hba->clk_scaling.workq, queue_work(hba->clk_scaling.workq,
&hba->clk_scaling.suspend_work); &hba->clk_scaling.suspend_work);
......
...@@ -459,6 +459,7 @@ struct ufs_clk_scaling { ...@@ -459,6 +459,7 @@ struct ufs_clk_scaling {
bool is_initialized; bool is_initialized;
bool is_busy_started; bool is_busy_started;
bool is_suspended; bool is_suspended;
bool suspend_on_no_request;
}; };
#define UFS_EVENT_HIST_LENGTH 8 #define UFS_EVENT_HIST_LENGTH 8
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment