43 lines
1.6 KiB
Diff
43 lines
1.6 KiB
Diff
From 0a417434299b27aebbb444e7545a7d668c40d288 Mon Sep 17 00:00:00 2001
|
|
From: Mario Limonciello <mario.limonciello@amd.com>
|
|
Date: Wed, 26 Feb 2025 01:49:16 -0600
|
|
Subject: cpufreq/amd-pstate: Invalidate cppc_req_cached during suspend
|
|
|
|
During resume it's possible the firmware didn't restore the CPPC request
|
|
MSR but the kernel thinks the values line up. This leads to incorrect
|
|
performance after resume from suspend.
|
|
|
|
To fix the issue invalidate the cached value at suspend. During resume use
|
|
the saved values programmed as cached limits.
|
|
|
|
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
|
|
Reviewed-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
Reported-by: Miroslav Pavleski <miroslav@pavleski.net>
|
|
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217931
|
|
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
---
|
|
drivers/cpufreq/amd-pstate.c | 5 ++++-
|
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/cpufreq/amd-pstate.c
|
|
+++ b/drivers/cpufreq/amd-pstate.c
|
|
@@ -1605,7 +1605,7 @@ static int amd_pstate_epp_reenable(struc
|
|
max_perf, policy->boost_enabled);
|
|
}
|
|
|
|
- return amd_pstate_update_perf(cpudata, 0, 0, max_perf, cpudata->epp_cached, false);
|
|
+ return amd_pstate_epp_update_limit(policy);
|
|
}
|
|
|
|
static int amd_pstate_epp_cpu_online(struct cpufreq_policy *policy)
|
|
@@ -1654,6 +1654,9 @@ static int amd_pstate_epp_suspend(struct
|
|
if (cppc_state != AMD_PSTATE_ACTIVE)
|
|
return 0;
|
|
|
|
+ /* invalidate to ensure it's rewritten during resume */
|
|
+ cpudata->cppc_req_cached = 0;
|
|
+
|
|
/* set this flag to avoid setting core offline*/
|
|
cpudata->suspended = true;
|
|
|