From f077f4265c59f5d417aa40eaf82bb632c891b221 Mon Sep 17 00:00:00 2001 From: Perry Yuan Date: Fri, 9 Aug 2024 14:09:05 +0800 Subject: cpufreq: amd-pstate: add quirk for Ryzen 3000 series processor The Ryzen 3000 series processors have been observed lacking the nominal_freq and lowest_freq parameters in their ACPI tables. This absence causes issues with loading the amd-pstate driver on these systems. Introduces a fix to resolve the dependency issue by adding a quirk specifically for the Ryzen 3000 series. Reported-by: David Wang <00107082@163.com> Signed-off-by: Perry Yuan --- drivers/cpufreq/amd-pstate.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -136,6 +136,11 @@ static struct quirk_entry quirk_amd_7k62 .lowest_freq = 550, }; +static struct quirk_entry quirk_amd_mts = { + .nominal_freq = 3600, + .lowest_freq = 550, +}; + static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) { /** @@ -152,6 +157,21 @@ static int __init dmi_matched_7k62_bios_ return 0; } +static int __init dmi_matched_mts_bios_bug(const struct dmi_system_id *dmi) +{ + /** + * match the broken bios for ryzen 3000 series processor support CPPC V2 + * broken BIOS lack of nominal_freq and lowest_freq capabilities + * definition in ACPI tables + */ + if (cpu_feature_enabled(X86_FEATURE_ZEN2)) { + quirks = dmi->driver_data; + pr_info("Overriding nominal and lowest frequencies for %s\n", dmi->ident); + return 1; + } + + return 0; +} static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { { .callback = dmi_matched_7k62_bios_bug, @@ -162,6 +182,16 @@ static const struct dmi_system_id amd_ps }, .driver_data = &quirk_amd_7k62, }, + { + .callback = dmi_matched_mts_bios_bug, + .ident = "AMD Ryzen 3000", + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "B450M MORTAR MAX (MS-7B89)"), + DMI_MATCH(DMI_BIOS_RELEASE, "06/10/2020"), + DMI_MATCH(DMI_BIOS_VERSION, "5.14"), + }, + .driver_data = &quirk_amd_mts, + }, {} }; MODULE_DEVICE_TABLE(dmi, amd_pstate_quirks_table);