[PATCH 3/3] cpufreq/amd-pstate: Get Highest Freq for a CPU
Mario Limonciello <[email protected]>
| Newsgroups | org.kernel.vger.linux-acpi,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pm |
|---|---|
| Message-ID | <[email protected]> |
If the highest frequency is known for a CPU, use this instead of trying to calculate by linear interpolation. Signed-off-by: Mario Limonciello <[email protected]> --- 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