Message ID | 2f5dc55e0537b089e1f4d31914c0b5c5c12792ac.1718606975.git.perry.yuan@amd.com |
---|---|
State | Superseded |
Headers | show |
Series | AMD Pstate Driver Fixes and Improvements | expand |
On 6/17/2024 01:59, Perry Yuan wrote: > If CPPC feature is supported by the CPU however the CPUID flag bit is not > set by SBIOS, the `amd_pstate` will be failed to load while system > booting. > So adding one more debug message to inform user to check the SBIOS setting, > The change also can help maintainers to debug why amd_pstate driver failed > to be loaded at system booting if the processor support CPPC. > > Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218686 > Signed-off-by: Perry Yuan <perry.yuan@amd.com> > Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com> Acked-by: Mario Limonciello <mario.limonciello@amd.com> > --- > drivers/cpufreq/amd-pstate.c | 26 ++++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index 76419762c04f..9aa220a0e3fe 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -1749,11 +1749,37 @@ static int __init amd_pstate_set_driver(int mode_idx) > */ > static bool amd_cppc_supported(void) > { > + struct cpuinfo_x86 *c = &cpu_data(0); > + bool warn = false; > + > if ((boot_cpu_data.x86 == 0x17) && (boot_cpu_data.x86_model < 0x30)) { > pr_debug_once("CPPC feature is not supported by the processor\n"); > return false; > } > > + /* > + * If the CPPC feature is disabled in the BIOS for processors that support MSR-based CPPC, > + * the AMD Pstate driver may not function correctly. > + * Check the CPPC flag and display a warning message if the platform supports CPPC. > + * Note: below checking code will not abort the driver registeration process because of > + * the code is added for debugging purposes. > + */ > + if (!cpu_feature_enabled(X86_FEATURE_CPPC)) { > + if (cpu_feature_enabled(X86_FEATURE_ZEN1) || cpu_feature_enabled(X86_FEATURE_ZEN2)) { > + if (c->x86_model > 0x60 && c->x86_model < 0xaf) > + warn = true; > + } else if (cpu_feature_enabled(X86_FEATURE_ZEN3) || cpu_feature_enabled(X86_FEATURE_ZEN4)) { > + if ((c->x86_model > 0x10 && c->x86_model < 0x1F) || > + (c->x86_model > 0x40 && c->x86_model < 0xaf)) > + warn = true; > + } else if (cpu_feature_enabled(X86_FEATURE_ZEN5)) { > + warn = true; > + } > + } > + > + if (warn) > + pr_warn_once("The CPPC feature is supported but currently disabled by the BIOS.\n" > + "Please enable it if your BIOS has the CPPC option.\n"); > return true; > } >
diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index 76419762c04f..9aa220a0e3fe 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -1749,11 +1749,37 @@ static int __init amd_pstate_set_driver(int mode_idx) */ static bool amd_cppc_supported(void) { + struct cpuinfo_x86 *c = &cpu_data(0); + bool warn = false; + if ((boot_cpu_data.x86 == 0x17) && (boot_cpu_data.x86_model < 0x30)) { pr_debug_once("CPPC feature is not supported by the processor\n"); return false; } + /* + * If the CPPC feature is disabled in the BIOS for processors that support MSR-based CPPC, + * the AMD Pstate driver may not function correctly. + * Check the CPPC flag and display a warning message if the platform supports CPPC. + * Note: below checking code will not abort the driver registeration process because of + * the code is added for debugging purposes. + */ + if (!cpu_feature_enabled(X86_FEATURE_CPPC)) { + if (cpu_feature_enabled(X86_FEATURE_ZEN1) || cpu_feature_enabled(X86_FEATURE_ZEN2)) { + if (c->x86_model > 0x60 && c->x86_model < 0xaf) + warn = true; + } else if (cpu_feature_enabled(X86_FEATURE_ZEN3) || cpu_feature_enabled(X86_FEATURE_ZEN4)) { + if ((c->x86_model > 0x10 && c->x86_model < 0x1F) || + (c->x86_model > 0x40 && c->x86_model < 0xaf)) + warn = true; + } else if (cpu_feature_enabled(X86_FEATURE_ZEN5)) { + warn = true; + } + } + + if (warn) + pr_warn_once("The CPPC feature is supported but currently disabled by the BIOS.\n" + "Please enable it if your BIOS has the CPPC option.\n"); return true; }