| From 80fc49b398a9cf7a7d9d6012682d8e43da2d1209 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 31 Aug 2020 20:02:50 -0700 |
| Subject: cpufreq: intel_pstate: Fix intel_pstate_get_hwp_max() for turbo |
| disabled |
| |
| From: Francisco Jerez <currojerez@riseup.net> |
| |
| [ Upstream commit eacc9c5a927e474c173a5d53dd7fb8e306511768 ] |
| |
| This fixes the behavior of the scaling_max_freq and scaling_min_freq |
| sysfs files in systems which had turbo disabled by the BIOS. |
| |
| Caleb noticed that the HWP is programmed to operate in the wrong |
| P-state range on his system when the CPUFREQ policy min/max frequency |
| is set via sysfs. This seems to be because in his system |
| intel_pstate_get_hwp_max() is returning the maximum turbo P-state even |
| though turbo was disabled by the BIOS, which causes intel_pstate to |
| scale kHz frequencies incorrectly e.g. setting the maximum turbo |
| frequency whenever the maximum guaranteed frequency is requested via |
| sysfs. |
| |
| Tested-by: Caleb Callaway <caleb.callaway@intel.com> |
| Signed-off-by: Francisco Jerez <currojerez@riseup.net> |
| Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> |
| [ rjw: Minor subject edits ] |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/cpufreq/intel_pstate.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c |
| index 5bad88f6ddd59..b9ca89dc75c7d 100644 |
| --- a/drivers/cpufreq/intel_pstate.c |
| +++ b/drivers/cpufreq/intel_pstate.c |
| @@ -762,7 +762,7 @@ static void intel_pstate_get_hwp_max(unsigned int cpu, int *phy_max, |
| |
| rdmsrl_on_cpu(cpu, MSR_HWP_CAPABILITIES, &cap); |
| WRITE_ONCE(all_cpu_data[cpu]->hwp_cap_cached, cap); |
| - if (global.no_turbo) |
| + if (global.no_turbo || global.turbo_disabled) |
| *current_max = HWP_GUARANTEED_PERF(cap); |
| else |
| *current_max = HWP_HIGHEST_PERF(cap); |
| -- |
| 2.25.1 |
| |