cpufreq: intel_pstate: Override parameters if HWP forced by BIOS

[ Upstream commit d9a7e9df731670acdc69e81748941ad338f47fab ]

If HWP has been already been enabled by BIOS, it may be
necessary to override some kernel command line parameters.
Once it has been enabled it requires a reset to be disabled.

Suggested-by: Rafael J. Wysocki <rafael@kernel.org>
Signed-off-by: Doug Smythies <dsmythies@telus.net>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Doug Smythies
2021-09-12 11:50:29 -07:00
committed by Greg Kroah-Hartman
parent 9561bb9887
commit e567d33508

View File

@@ -3035,11 +3035,15 @@ static int __init intel_pstate_init(void)
if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL) if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL)
return -ENODEV; return -ENODEV;
if (no_load)
return -ENODEV;
id = x86_match_cpu(hwp_support_ids); id = x86_match_cpu(hwp_support_ids);
if (id) { if (id) {
bool hwp_forced = intel_pstate_hwp_is_enabled();
if (hwp_forced)
pr_info("HWP enabled by BIOS\n");
else if (no_load)
return -ENODEV;
copy_cpu_funcs(&core_funcs); copy_cpu_funcs(&core_funcs);
/* /*
* Avoid enabling HWP for processors without EPP support, * Avoid enabling HWP for processors without EPP support,
@@ -3049,8 +3053,7 @@ static int __init intel_pstate_init(void)
* If HWP is enabled already, though, there is no choice but to * If HWP is enabled already, though, there is no choice but to
* deal with it. * deal with it.
*/ */
if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) || if ((!no_hwp && boot_cpu_has(X86_FEATURE_HWP_EPP)) || hwp_forced) {
intel_pstate_hwp_is_enabled()) {
hwp_active++; hwp_active++;
hwp_mode_bdw = id->driver_data; hwp_mode_bdw = id->driver_data;
intel_pstate.attr = hwp_cpufreq_attrs; intel_pstate.attr = hwp_cpufreq_attrs;
@@ -3061,7 +3064,11 @@ static int __init intel_pstate_init(void)
goto hwp_cpu_matched; goto hwp_cpu_matched;
} }
pr_info("HWP not enabled\n");
} else { } else {
if (no_load)
return -ENODEV;
id = x86_match_cpu(intel_pstate_cpu_ids); id = x86_match_cpu(intel_pstate_cpu_ids);
if (!id) { if (!id) {
pr_info("CPU model not supported\n"); pr_info("CPU model not supported\n");
@@ -3138,10 +3145,9 @@ static int __init intel_pstate_setup(char *str)
else if (!strcmp(str, "passive")) else if (!strcmp(str, "passive"))
default_driver = &intel_cpufreq; default_driver = &intel_cpufreq;
if (!strcmp(str, "no_hwp")) { if (!strcmp(str, "no_hwp"))
pr_info("HWP disabled\n");
no_hwp = 1; no_hwp = 1;
}
if (!strcmp(str, "force")) if (!strcmp(str, "force"))
force_load = 1; force_load = 1;
if (!strcmp(str, "hwp_only")) if (!strcmp(str, "hwp_only"))