[PATCH 3/3] cpufreq/amd-pstate: Get Highest Freq for a CPU

From: Mario Limonciello

Date: Mon Aug 31 2026 - 17:05:28 EST


If the highest frequency is known for a CPU, use this instead of
trying to calculate by linear interpolation.

Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx>
---
drivers/cpufreq/amd-pstate.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c
index 9fb1d7150c356..a71f82c93c345 100644
--- a/drivers/cpufreq/amd-pstate.c
+++ b/drivers/cpufreq/amd-pstate.c
@@ -1107,6 +1107,7 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata)
u32 min_freq, max_freq, nominal_freq, lowest_nonlinear_freq;
struct cppc_perf_caps cppc_perf;
union perf_cached perf;
+ int max_frequency;
int ret;

ret = cppc_get_perf_caps(cpudata->cpu, &cppc_perf);
@@ -1131,8 +1132,13 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpudata)

WRITE_ONCE(cpudata->nominal_freq, nominal_freq);

+ /* max freq came from BIOS or quirk */
+ max_frequency = amd_get_max_frequency(cpudata->cpu);
+ if (max_frequency > 0)
+ max_freq = max_frequency * 1000;
/* max_freq is calculated according to (nominal_freq * highest_perf)/nominal_perf */
- max_freq = perf_to_freq(perf, nominal_freq, perf.highest_perf);
+ else
+ max_freq = perf_to_freq(perf, nominal_freq, perf.highest_perf);
WRITE_ONCE(cpudata->max_freq, max_freq);

lowest_nonlinear_freq = perf_to_freq(perf, nominal_freq, perf.lowest_nonlinear_perf);
--
2.43.0