* [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards @ 2026-10-07 14:41 Giovanni Gherdovich 2026-10-07 14:56 ` Mario Limonciello 0 siblings, 1 reply; 13+ messages in thread From: Giovanni Gherdovich @ 2026-10-07 14:41 UTC (permalink / raw) To: Huang Rui, Mario Limonciello, Perry Yuan, K Prateek Nayak Cc: Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel, Giovanni Gherdovich Some motherboard based on the TRX40 chipset has been reported to ship firmware lacking lowest and nominal frequency values in the _CPC ACPI package. That is, it supports CPPC V2 but not CPPC V3. Firmware updates aren't available. amd-pstate requires explicit knowledge of nominal frequency, so it can't load on this hardware. The driver already has a mechanism (the so-called "quirks") to accommodate for missing nominal freq in ACPI tables, so here we use it to match against CPU family, model, core count, and BIOS version. Signed-off-by: Giovanni Gherdovich <ggherdovich@suse.cz> --- drivers/cpufreq/amd-pstate.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index 8bfd46d60843..532ff16dd076 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -145,6 +145,11 @@ static struct quirk_entry quirk_amd_7k62 = { .lowest_freq = 550, }; +static struct quirk_entry quirk_amd_ryzen_threadripper_3000_24c = { + .nominal_freq = 3800, + .lowest_freq = 550, +}; + static inline u8 freq_to_perf(union perf_cached perf, u32 nominal_freq, unsigned int freq_val) { u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * perf.nominal_perf, nominal_freq); @@ -174,6 +179,22 @@ static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) return 0; } +static int __init dmi_matched_trx40_bios_bug(const struct dmi_system_id *dmi) +{ + /** + * Match the Ryzen Threadripper 3000 series, 24-core SKU, sTRX4 socket / TRX40 chipset. + */ + if (boot_cpu_data.x86 == 0x17 && + boot_cpu_data.x86_model >= 0x30 && boot_cpu_data.x86_model <= 0x3F && + topology_num_cores_per_package() == 24) { + 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, @@ -184,6 +205,16 @@ static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { }, .driver_data = &quirk_amd_7k62, }, + { + .callback = dmi_matched_trx40_bios_bug, + .ident = "AMD Ryzen Threadripper 3000", + .matches = { + DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends International"), + DMI_MATCH(DMI_BIOS_VERSION, "2.80"), + DMI_MATCH(DMI_BIOS_DATE, "05/17/2022"), + }, + .driver_data = &quirk_amd_ryzen_threadripper_3000_24c, + }, {} }; MODULE_DEVICE_TABLE(dmi, amd_pstate_quirks_table); -- 2.43.0 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards 2026-10-07 14:41 [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards Giovanni Gherdovich @ 2026-10-07 14:56 ` Mario Limonciello 2026-10-07 15:04 ` Kyle Gospodnetich 2026-10-07 19:38 ` Giovanni Gherdovich 0 siblings, 2 replies; 13+ messages in thread From: Mario Limonciello @ 2026-10-07 14:56 UTC (permalink / raw) To: Giovanni Gherdovich, Huang Rui, Perry Yuan, K Prateek Nayak, me Cc: Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel + Kyle Kyle, By chance is this the same system that you were talking to me about offline? On 10/7/26 09:41, Giovanni Gherdovich wrote: > Some motherboard based on the TRX40 chipset has been reported to ship > firmware lacking lowest and nominal frequency values in the > _CPC ACPI package. That is, it supports CPPC V2 but not CPPC V3. > Firmware updates aren't available. Can you please add more information about the vendor/model of the MB, etc? > > amd-pstate requires explicit knowledge of nominal frequency, so it > can't load on this hardware. The driver already has a mechanism (the > so-called "quirks") to accommodate for missing nominal freq in ACPI > tables, so here we use it to match against CPU family, model, core > count, and BIOS version. Yeah; it's intended for this specific case of really old hardware that the BIOS isn't going to fix it. I don't understand why core count matters though. > > Signed-off-by: Giovanni Gherdovich <ggherdovich@suse.cz> > --- > drivers/cpufreq/amd-pstate.c | 31 +++++++++++++++++++++++++++++++ > 1 file changed, 31 insertions(+) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index 8bfd46d60843..532ff16dd076 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -145,6 +145,11 @@ static struct quirk_entry quirk_amd_7k62 = { > .lowest_freq = 550, > }; > > +static struct quirk_entry quirk_amd_ryzen_threadripper_3000_24c = { > + .nominal_freq = 3800, > + .lowest_freq = 550, > +}; > + > static inline u8 freq_to_perf(union perf_cached perf, u32 nominal_freq, unsigned int freq_val) > { > u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * perf.nominal_perf, nominal_freq); > @@ -174,6 +179,22 @@ static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) > return 0; > } > > +static int __init dmi_matched_trx40_bios_bug(const struct dmi_system_id *dmi) > +{ > + /** > + * Match the Ryzen Threadripper 3000 series, 24-core SKU, sTRX4 socket / TRX40 chipset. > + */ > + if (boot_cpu_data.x86 == 0x17 && > + boot_cpu_data.x86_model >= 0x30 && boot_cpu_data.x86_model <= 0x3F && > + topology_num_cores_per_package() == 24) { Does the number of cores actually matter? Do you mean to say if you swap the CPU to another part CPPC works? > + quirks = dmi->driver_data; > + pr_info("Overriding nominal and lowest frequencies for %s\n", dmi->ident); The BIOS bug specifically is lack of values, not invalid values, right? Just want to make sure I'm following this right. > + return 1; > + } > + > + return 0; > +} > + > static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { > { > .callback = dmi_matched_7k62_bios_bug, > @@ -184,6 +205,16 @@ static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { > }, > .driver_data = &quirk_amd_7k62, > }, > + { > + .callback = dmi_matched_trx40_bios_bug, > + .ident = "AMD Ryzen Threadripper 3000", > + .matches = { > + DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends International"), > + DMI_MATCH(DMI_BIOS_VERSION, "2.80"), > + DMI_MATCH(DMI_BIOS_DATE, "05/17/2022"), > + }, > + .driver_data = &quirk_amd_ryzen_threadripper_3000_24c, > + }, > {} > }; > MODULE_DEVICE_TABLE(dmi, amd_pstate_quirks_table); ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards 2026-10-07 14:56 ` Mario Limonciello @ 2026-10-07 15:04 ` Kyle Gospodnetich 2026-10-07 15:05 ` Mario Limonciello 2026-10-07 19:38 ` Giovanni Gherdovich 1 sibling, 1 reply; 13+ messages in thread From: Kyle Gospodnetich @ 2026-10-07 15:04 UTC (permalink / raw) To: Mario Limonciello Cc: Giovanni Gherdovich, Huang Rui, Perry Yuan, K Prateek Nayak, Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel Yes this does appear to be the same problem, thank you! -------- Original Message -------- On Wednesday, 10/07/26 at 07:56 Mario Limonciello <mario.limonciello@amd.com> wrote: + Kyle Kyle, By chance is this the same system that you were talking to me about offline? On 10/7/26 09:41, Giovanni Gherdovich wrote: > Some motherboard based on the TRX40 chipset has been reported to ship > firmware lacking lowest and nominal frequency values in the > _CPC ACPI package. That is, it supports CPPC V2 but not CPPC V3. > Firmware updates aren't available. Can you please add more information about the vendor/model of the MB, etc? > > amd-pstate requires explicit knowledge of nominal frequency, so it > can't load on this hardware. The driver already has a mechanism (the > so-called "quirks") to accommodate for missing nominal freq in ACPI > tables, so here we use it to match against CPU family, model, core > count, and BIOS version. Yeah; it's intended for this specific case of really old hardware that the BIOS isn't going to fix it. I don't understand why core count matters though. > > Signed-off-by: Giovanni Gherdovich <ggherdovich@suse.cz> > --- > drivers/cpufreq/amd-pstate.c | 31 +++++++++++++++++++++++++++++++ > 1 file changed, 31 insertions(+) > > diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > index 8bfd46d60843..532ff16dd076 100644 > --- a/drivers/cpufreq/amd-pstate.c > +++ b/drivers/cpufreq/amd-pstate.c > @@ -145,6 +145,11 @@ static struct quirk_entry quirk_amd_7k62 = { > .lowest_freq = 550, > }; > > +static struct quirk_entry quirk_amd_ryzen_threadripper_3000_24c = { > + .nominal_freq = 3800, > + .lowest_freq = 550, > +}; > + > static inline u8 freq_to_perf(union perf_cached perf, u32 nominal_freq, unsigned int freq_val) > { > u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * perf.nominal_perf, nominal_freq); > @@ -174,6 +179,22 @@ static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) > return 0; > } > > +static int __init dmi_matched_trx40_bios_bug(const struct dmi_system_id *dmi) > +{ > + /** > + * Match the Ryzen Threadripper 3000 series, 24-core SKU, sTRX4 socket / TRX40 chipset. > + */ > + if (boot_cpu_data.x86 == 0x17 && > + boot_cpu_data.x86_model >= 0x30 && boot_cpu_data.x86_model <= 0x3F && > + topology_num_cores_per_package() == 24) { Does the number of cores actually matter? Do you mean to say if you swap the CPU to another part CPPC works? > + quirks = dmi->driver_data; > + pr_info("Overriding nominal and lowest frequencies for %s\n", dmi->ident); The BIOS bug specifically is lack of values, not invalid values, right? Just want to make sure I'm following this right. > + return 1; > + } > + > + return 0; > +} > + > static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { > { > .callback = dmi_matched_7k62_bios_bug, > @@ -184,6 +205,16 @@ static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { > }, > .driver_data = &quirk_amd_7k62, > }, > + { > + .callback = dmi_matched_trx40_bios_bug, > + .ident = "AMD Ryzen Threadripper 3000", > + .matches = { > + DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends International"), > + DMI_MATCH(DMI_BIOS_VERSION, "2.80"), > + DMI_MATCH(DMI_BIOS_DATE, "05/17/2022"), > + }, > + .driver_data = &quirk_amd_ryzen_threadripper_3000_24c, > + }, > {} > }; > MODULE_DEVICE_TABLE(dmi, amd_pstate_quirks_table); ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards 2026-10-07 15:04 ` Kyle Gospodnetich @ 2026-10-07 15:05 ` Mario Limonciello 2026-10-07 17:36 ` Kyle Gospodnetich 0 siblings, 1 reply; 13+ messages in thread From: Mario Limonciello @ 2026-10-07 15:05 UTC (permalink / raw) To: Kyle Gospodnetich Cc: Giovanni Gherdovich, Huang Rui, Perry Yuan, K Prateek Nayak, Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel Kyle, Can you please confirm more about your system? System Model, vendor, BIOS version, BIOS vendor, CPU model. Thanks, On 10/7/26 10:04, Kyle Gospodnetich wrote: > Yes this does appear to be the same problem, thank you! > > -------- Original Message -------- > On Wednesday, 10/07/26 at 07:56 Mario Limonciello <mario.limonciello@amd.com> wrote: > + Kyle > > Kyle, > > By chance is this the same system that you were talking to me about offline? > > > > On 10/7/26 09:41, Giovanni Gherdovich wrote: >> Some motherboard based on the TRX40 chipset has been reported to ship >> firmware lacking lowest and nominal frequency values in the >> _CPC ACPI package. That is, it supports CPPC V2 but not CPPC V3. >> Firmware updates aren't available. > > Can you please add more information about the vendor/model of the MB, etc? >> >> amd-pstate requires explicit knowledge of nominal frequency, so it >> can't load on this hardware. The driver already has a mechanism (the >> so-called "quirks") to accommodate for missing nominal freq in ACPI >> tables, so here we use it to match against CPU family, model, core >> count, and BIOS version. > > Yeah; it's intended for this specific case of really old hardware that > the BIOS isn't going to fix it. > > I don't understand why core count matters though. > >> >> Signed-off-by: Giovanni Gherdovich <ggherdovich@suse.cz> >> --- >> drivers/cpufreq/amd-pstate.c | 31 +++++++++++++++++++++++++++++++ >> 1 file changed, 31 insertions(+) >> >> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c >> index 8bfd46d60843..532ff16dd076 100644 >> --- a/drivers/cpufreq/amd-pstate.c >> +++ b/drivers/cpufreq/amd-pstate.c >> @@ -145,6 +145,11 @@ static struct quirk_entry quirk_amd_7k62 = { >> .lowest_freq = 550, >> }; >> >> +static struct quirk_entry quirk_amd_ryzen_threadripper_3000_24c = { >> + .nominal_freq = 3800, >> + .lowest_freq = 550, >> +}; >> + >> static inline u8 freq_to_perf(union perf_cached perf, u32 nominal_freq, unsigned int freq_val) >> { >> u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * perf.nominal_perf, nominal_freq); >> @@ -174,6 +179,22 @@ static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) >> return 0; >> } >> >> +static int __init dmi_matched_trx40_bios_bug(const struct dmi_system_id *dmi) >> +{ >> + /** >> + * Match the Ryzen Threadripper 3000 series, 24-core SKU, sTRX4 socket / TRX40 chipset. >> + */ >> + if (boot_cpu_data.x86 == 0x17 && >> + boot_cpu_data.x86_model >= 0x30 && boot_cpu_data.x86_model <= 0x3F && >> + topology_num_cores_per_package() == 24) { > > Does the number of cores actually matter? Do you mean to say if you > swap the CPU to another part CPPC works? > >> + quirks = dmi->driver_data; >> + pr_info("Overriding nominal and lowest frequencies for %s\n", dmi->ident); > > The BIOS bug specifically is lack of values, not invalid values, right? > Just want to make sure I'm following this right. > >> + return 1; >> + } >> + >> + return 0; >> +} >> + >> static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { >> { >> .callback = dmi_matched_7k62_bios_bug, >> @@ -184,6 +205,16 @@ static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { >> }, >> .driver_data = &quirk_amd_7k62, >> }, >> + { >> + .callback = dmi_matched_trx40_bios_bug, >> + .ident = "AMD Ryzen Threadripper 3000", >> + .matches = { >> + DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends International"), >> + DMI_MATCH(DMI_BIOS_VERSION, "2.80"), >> + DMI_MATCH(DMI_BIOS_DATE, "05/17/2022"), >> + }, >> + .driver_data = &quirk_amd_ryzen_threadripper_3000_24c, >> + }, >> {} >> }; >> MODULE_DEVICE_TABLE(dmi, amd_pstate_quirks_table); > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards 2026-10-07 15:05 ` Mario Limonciello @ 2026-10-07 17:36 ` Kyle Gospodnetich 2026-10-07 17:43 ` Kyle Gospodnetich 0 siblings, 1 reply; 13+ messages in thread From: Kyle Gospodnetich @ 2026-10-07 17:36 UTC (permalink / raw) To: Mario Limonciello Cc: Giovanni Gherdovich, Huang Rui, Perry Yuan, K Prateek Nayak, Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel AMD Ryzen Threadripper 3960X MSI TRX40-PRO-10G https://www.msi.com/Motherboard/TRX40-PRO-10G/support I am using 7C60v1A3(Beta version), I will update to the latest today -- just learning that exists. dmidecode reports that as: Vendor: American Megatrends International, LLC. Version: 1.80 I've had to disable pstate with: amd_pstate.enable=0 initcall_blacklist=amd-pstate Without that my system grinds to a hault, takes upwards of 15 minutes just to hit the desktop. Thanks, let me know if anything else is needed. -Kyle Gospodnetich On Wednesday, October 7th, 2026 at 8:06 AM, Mario Limonciello <mario.limonciello@amd.com> wrote: > Kyle, > > Can you please confirm more about your system? System Model, vendor, > BIOS version, BIOS vendor, CPU model. > > Thanks, > > On 10/7/26 10:04, Kyle Gospodnetich wrote: > > Yes this does appear to be the same problem, thank you! > > > > -------- Original Message -------- > > On Wednesday, 10/07/26 at 07:56 Mario Limonciello <mario.limonciello@amd.com> wrote: > > + Kyle > > > > Kyle, > > > > By chance is this the same system that you were talking to me about offline? > > > > > > > > On 10/7/26 09:41, Giovanni Gherdovich wrote: > >> Some motherboard based on the TRX40 chipset has been reported to ship > >> firmware lacking lowest and nominal frequency values in the > >> _CPC ACPI package. That is, it supports CPPC V2 but not CPPC V3. > >> Firmware updates aren't available. > > > > Can you please add more information about the vendor/model of the MB, etc? > >> > >> amd-pstate requires explicit knowledge of nominal frequency, so it > >> can't load on this hardware. The driver already has a mechanism (the > >> so-called "quirks") to accommodate for missing nominal freq in ACPI > >> tables, so here we use it to match against CPU family, model, core > >> count, and BIOS version. > > > > Yeah; it's intended for this specific case of really old hardware that > > the BIOS isn't going to fix it. > > > > I don't understand why core count matters though. > > > >> > >> Signed-off-by: Giovanni Gherdovich <ggherdovich@suse.cz> > >> --- > >> drivers/cpufreq/amd-pstate.c | 31 +++++++++++++++++++++++++++++++ > >> 1 file changed, 31 insertions(+) > >> > >> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > >> index 8bfd46d60843..532ff16dd076 100644 > >> --- a/drivers/cpufreq/amd-pstate.c > >> +++ b/drivers/cpufreq/amd-pstate.c > >> @@ -145,6 +145,11 @@ static struct quirk_entry quirk_amd_7k62 = { > >> .lowest_freq = 550, > >> }; > >> > >> +static struct quirk_entry quirk_amd_ryzen_threadripper_3000_24c = { > >> + .nominal_freq = 3800, > >> + .lowest_freq = 550, > >> +}; > >> + > >> static inline u8 freq_to_perf(union perf_cached perf, u32 nominal_freq, unsigned int freq_val) > >> { > >> u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * perf.nominal_perf, nominal_freq); > >> @@ -174,6 +179,22 @@ static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) > >> return 0; > >> } > >> > >> +static int __init dmi_matched_trx40_bios_bug(const struct dmi_system_id *dmi) > >> +{ > >> + /** > >> + * Match the Ryzen Threadripper 3000 series, 24-core SKU, sTRX4 socket / TRX40 chipset. > >> + */ > >> + if (boot_cpu_data.x86 == 0x17 && > >> + boot_cpu_data.x86_model >= 0x30 && boot_cpu_data.x86_model <= 0x3F && > >> + topology_num_cores_per_package() == 24) { > > > > Does the number of cores actually matter? Do you mean to say if you > > swap the CPU to another part CPPC works? > > > >> + quirks = dmi->driver_data; > >> + pr_info("Overriding nominal and lowest frequencies for %s\n", dmi->ident); > > > > The BIOS bug specifically is lack of values, not invalid values, right? > > Just want to make sure I'm following this right. > > > >> + return 1; > >> + } > >> + > >> + return 0; > >> +} > >> + > >> static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { > >> { > >> .callback = dmi_matched_7k62_bios_bug, > >> @@ -184,6 +205,16 @@ static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { > >> }, > >> .driver_data = &quirk_amd_7k62, > >> }, > >> + { > >> + .callback = dmi_matched_trx40_bios_bug, > >> + .ident = "AMD Ryzen Threadripper 3000", > >> + .matches = { > >> + DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends International"), > >> + DMI_MATCH(DMI_BIOS_VERSION, "2.80"), > >> + DMI_MATCH(DMI_BIOS_DATE, "05/17/2022"), > >> + }, > >> + .driver_data = &quirk_amd_ryzen_threadripper_3000_24c, > >> + }, > >> {} > >> }; > >> MODULE_DEVICE_TABLE(dmi, amd_pstate_quirks_table); > > > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards 2026-10-07 17:36 ` Kyle Gospodnetich @ 2026-10-07 17:43 ` Kyle Gospodnetich 2026-10-07 18:08 ` Mario Limonciello 0 siblings, 1 reply; 13+ messages in thread From: Kyle Gospodnetich @ 2026-10-07 17:43 UTC (permalink / raw) To: Mario Limonciello Cc: Giovanni Gherdovich, Huang Rui, Perry Yuan, K Prateek Nayak, Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel Missed one, Release Date: 05/17/2022 On Wednesday, October 7th, 2026 at 10:36 AM, Kyle Gospodnetich <me@kylegospodneti.ch> wrote: > AMD Ryzen Threadripper 3960X > MSI TRX40-PRO-10G > https://www.msi.com/Motherboard/TRX40-PRO-10G/support > I am using 7C60v1A3(Beta version), I will update to the latest today -- just learning that exists. > dmidecode reports that as: > Vendor: American Megatrends International, LLC. > Version: 1.80 > > I've had to disable pstate with: > amd_pstate.enable=0 initcall_blacklist=amd-pstate > > Without that my system grinds to a hault, takes upwards of 15 minutes just to hit the desktop. > > Thanks, let me know if anything else is needed. > -Kyle Gospodnetich > > > On Wednesday, October 7th, 2026 at 8:06 AM, Mario Limonciello <mario.limonciello@amd.com> wrote: > > > Kyle, > > > > Can you please confirm more about your system? System Model, vendor, > > BIOS version, BIOS vendor, CPU model. > > > > Thanks, > > > > On 10/7/26 10:04, Kyle Gospodnetich wrote: > > > Yes this does appear to be the same problem, thank you! > > > > > > -------- Original Message -------- > > > On Wednesday, 10/07/26 at 07:56 Mario Limonciello <mario.limonciello@amd.com> wrote: > > > + Kyle > > > > > > Kyle, > > > > > > By chance is this the same system that you were talking to me about offline? > > > > > > > > > > > > On 10/7/26 09:41, Giovanni Gherdovich wrote: > > >> Some motherboard based on the TRX40 chipset has been reported to ship > > >> firmware lacking lowest and nominal frequency values in the > > >> _CPC ACPI package. That is, it supports CPPC V2 but not CPPC V3. > > >> Firmware updates aren't available. > > > > > > Can you please add more information about the vendor/model of the MB, etc? > > >> > > >> amd-pstate requires explicit knowledge of nominal frequency, so it > > >> can't load on this hardware. The driver already has a mechanism (the > > >> so-called "quirks") to accommodate for missing nominal freq in ACPI > > >> tables, so here we use it to match against CPU family, model, core > > >> count, and BIOS version. > > > > > > Yeah; it's intended for this specific case of really old hardware that > > > the BIOS isn't going to fix it. > > > > > > I don't understand why core count matters though. > > > > > >> > > >> Signed-off-by: Giovanni Gherdovich <ggherdovich@suse.cz> > > >> --- > > >> drivers/cpufreq/amd-pstate.c | 31 +++++++++++++++++++++++++++++++ > > >> 1 file changed, 31 insertions(+) > > >> > > >> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > > >> index 8bfd46d60843..532ff16dd076 100644 > > >> --- a/drivers/cpufreq/amd-pstate.c > > >> +++ b/drivers/cpufreq/amd-pstate.c > > >> @@ -145,6 +145,11 @@ static struct quirk_entry quirk_amd_7k62 = { > > >> .lowest_freq = 550, > > >> }; > > >> > > >> +static struct quirk_entry quirk_amd_ryzen_threadripper_3000_24c = { > > >> + .nominal_freq = 3800, > > >> + .lowest_freq = 550, > > >> +}; > > >> + > > >> static inline u8 freq_to_perf(union perf_cached perf, u32 nominal_freq, unsigned int freq_val) > > >> { > > >> u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * perf.nominal_perf, nominal_freq); > > >> @@ -174,6 +179,22 @@ static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) > > >> return 0; > > >> } > > >> > > >> +static int __init dmi_matched_trx40_bios_bug(const struct dmi_system_id *dmi) > > >> +{ > > >> + /** > > >> + * Match the Ryzen Threadripper 3000 series, 24-core SKU, sTRX4 socket / TRX40 chipset. > > >> + */ > > >> + if (boot_cpu_data.x86 == 0x17 && > > >> + boot_cpu_data.x86_model >= 0x30 && boot_cpu_data.x86_model <= 0x3F && > > >> + topology_num_cores_per_package() == 24) { > > > > > > Does the number of cores actually matter? Do you mean to say if you > > > swap the CPU to another part CPPC works? > > > > > >> + quirks = dmi->driver_data; > > >> + pr_info("Overriding nominal and lowest frequencies for %s\n", dmi->ident); > > > > > > The BIOS bug specifically is lack of values, not invalid values, right? > > > Just want to make sure I'm following this right. > > > > > >> + return 1; > > >> + } > > >> + > > >> + return 0; > > >> +} > > >> + > > >> static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { > > >> { > > >> .callback = dmi_matched_7k62_bios_bug, > > >> @@ -184,6 +205,16 @@ static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { > > >> }, > > >> .driver_data = &quirk_amd_7k62, > > >> }, > > >> + { > > >> + .callback = dmi_matched_trx40_bios_bug, > > >> + .ident = "AMD Ryzen Threadripper 3000", > > >> + .matches = { > > >> + DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends International"), > > >> + DMI_MATCH(DMI_BIOS_VERSION, "2.80"), > > >> + DMI_MATCH(DMI_BIOS_DATE, "05/17/2022"), > > >> + }, > > >> + .driver_data = &quirk_amd_ryzen_threadripper_3000_24c, > > >> + }, > > >> {} > > >> }; > > >> MODULE_DEVICE_TABLE(dmi, amd_pstate_quirks_table); > > > > > > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards 2026-10-07 17:43 ` Kyle Gospodnetich @ 2026-10-07 18:08 ` Mario Limonciello 2026-10-07 18:30 ` Kyle Gospodnetich 0 siblings, 1 reply; 13+ messages in thread From: Mario Limonciello @ 2026-10-07 18:08 UTC (permalink / raw) To: Kyle Gospodnetich Cc: Giovanni Gherdovich, Huang Rui, Perry Yuan, K Prateek Nayak, Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel OK, let's wait and see what happens after you upgrade. New versions of FW and the behavior please. On 10/7/26 12:43, Kyle Gospodnetich wrote: > Missed one, > > Release Date: 05/17/2022 > > > On Wednesday, October 7th, 2026 at 10:36 AM, Kyle Gospodnetich <me@kylegospodneti.ch> wrote: > >> AMD Ryzen Threadripper 3960X >> MSI TRX40-PRO-10G >> https://www.msi.com/Motherboard/TRX40-PRO-10G/support >> I am using 7C60v1A3(Beta version), I will update to the latest today -- just learning that exists. >> dmidecode reports that as: >> Vendor: American Megatrends International, LLC. >> Version: 1.80 >> >> I've had to disable pstate with: >> amd_pstate.enable=0 initcall_blacklist=amd-pstate >> >> Without that my system grinds to a hault, takes upwards of 15 minutes just to hit the desktop. >> >> Thanks, let me know if anything else is needed. >> -Kyle Gospodnetich >> >> >> On Wednesday, October 7th, 2026 at 8:06 AM, Mario Limonciello <mario.limonciello@amd.com> wrote: >> >>> Kyle, >>> >>> Can you please confirm more about your system? System Model, vendor, >>> BIOS version, BIOS vendor, CPU model. >>> >>> Thanks, >>> >>> On 10/7/26 10:04, Kyle Gospodnetich wrote: >>>> Yes this does appear to be the same problem, thank you! >>>> >>>> -------- Original Message -------- >>>> On Wednesday, 10/07/26 at 07:56 Mario Limonciello <mario.limonciello@amd.com> wrote: >>>> + Kyle >>>> >>>> Kyle, >>>> >>>> By chance is this the same system that you were talking to me about offline? >>>> >>>> >>>> >>>> On 10/7/26 09:41, Giovanni Gherdovich wrote: >>>>> Some motherboard based on the TRX40 chipset has been reported to ship >>>>> firmware lacking lowest and nominal frequency values in the >>>>> _CPC ACPI package. That is, it supports CPPC V2 but not CPPC V3. >>>>> Firmware updates aren't available. >>>> >>>> Can you please add more information about the vendor/model of the MB, etc? >>>>> >>>>> amd-pstate requires explicit knowledge of nominal frequency, so it >>>>> can't load on this hardware. The driver already has a mechanism (the >>>>> so-called "quirks") to accommodate for missing nominal freq in ACPI >>>>> tables, so here we use it to match against CPU family, model, core >>>>> count, and BIOS version. >>>> >>>> Yeah; it's intended for this specific case of really old hardware that >>>> the BIOS isn't going to fix it. >>>> >>>> I don't understand why core count matters though. >>>> >>>>> >>>>> Signed-off-by: Giovanni Gherdovich <ggherdovich@suse.cz> >>>>> --- >>>>> drivers/cpufreq/amd-pstate.c | 31 +++++++++++++++++++++++++++++++ >>>>> 1 file changed, 31 insertions(+) >>>>> >>>>> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c >>>>> index 8bfd46d60843..532ff16dd076 100644 >>>>> --- a/drivers/cpufreq/amd-pstate.c >>>>> +++ b/drivers/cpufreq/amd-pstate.c >>>>> @@ -145,6 +145,11 @@ static struct quirk_entry quirk_amd_7k62 = { >>>>> .lowest_freq = 550, >>>>> }; >>>>> >>>>> +static struct quirk_entry quirk_amd_ryzen_threadripper_3000_24c = { >>>>> + .nominal_freq = 3800, >>>>> + .lowest_freq = 550, >>>>> +}; >>>>> + >>>>> static inline u8 freq_to_perf(union perf_cached perf, u32 nominal_freq, unsigned int freq_val) >>>>> { >>>>> u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * perf.nominal_perf, nominal_freq); >>>>> @@ -174,6 +179,22 @@ static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) >>>>> return 0; >>>>> } >>>>> >>>>> +static int __init dmi_matched_trx40_bios_bug(const struct dmi_system_id *dmi) >>>>> +{ >>>>> + /** >>>>> + * Match the Ryzen Threadripper 3000 series, 24-core SKU, sTRX4 socket / TRX40 chipset. >>>>> + */ >>>>> + if (boot_cpu_data.x86 == 0x17 && >>>>> + boot_cpu_data.x86_model >= 0x30 && boot_cpu_data.x86_model <= 0x3F && >>>>> + topology_num_cores_per_package() == 24) { >>>> >>>> Does the number of cores actually matter? Do you mean to say if you >>>> swap the CPU to another part CPPC works? >>>> >>>>> + quirks = dmi->driver_data; >>>>> + pr_info("Overriding nominal and lowest frequencies for %s\n", dmi->ident); >>>> >>>> The BIOS bug specifically is lack of values, not invalid values, right? >>>> Just want to make sure I'm following this right. >>>> >>>>> + return 1; >>>>> + } >>>>> + >>>>> + return 0; >>>>> +} >>>>> + >>>>> static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { >>>>> { >>>>> .callback = dmi_matched_7k62_bios_bug, >>>>> @@ -184,6 +205,16 @@ static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { >>>>> }, >>>>> .driver_data = &quirk_amd_7k62, >>>>> }, >>>>> + { >>>>> + .callback = dmi_matched_trx40_bios_bug, >>>>> + .ident = "AMD Ryzen Threadripper 3000", >>>>> + .matches = { >>>>> + DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends International"), >>>>> + DMI_MATCH(DMI_BIOS_VERSION, "2.80"), >>>>> + DMI_MATCH(DMI_BIOS_DATE, "05/17/2022"), >>>>> + }, >>>>> + .driver_data = &quirk_amd_ryzen_threadripper_3000_24c, >>>>> + }, >>>>> {} >>>>> }; >>>>> MODULE_DEVICE_TABLE(dmi, amd_pstate_quirks_table); >>>> >>> >>> ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards 2026-10-07 18:08 ` Mario Limonciello @ 2026-10-07 18:30 ` Kyle Gospodnetich 2026-10-07 18:32 ` Mario Limonciello 0 siblings, 1 reply; 13+ messages in thread From: Kyle Gospodnetich @ 2026-10-07 18:30 UTC (permalink / raw) To: Mario Limonciello Cc: Giovanni Gherdovich, Huang Rui, Perry Yuan, K Prateek Nayak, Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel Looks like it's finally fixed with that last BIOS release, it's been years! Platform Firmware Information Vendor: American Megatrends International, LLC. Version: 1.A4 Release Date: 06/15/2026 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver amd-pstate-epp And no performance issues. Thanks! On Wednesday, October 7th, 2026 at 11:08 AM, Mario Limonciello <mario.limonciello@amd.com> wrote: > OK, let's wait and see what happens after you upgrade. New versions of > FW and the behavior please. > > On 10/7/26 12:43, Kyle Gospodnetich wrote: > > Missed one, > > > > Release Date: 05/17/2022 > > > > > > On Wednesday, October 7th, 2026 at 10:36 AM, Kyle Gospodnetich <me@kylegospodneti.ch> wrote: > > > >> AMD Ryzen Threadripper 3960X > >> MSI TRX40-PRO-10G > >> https://www.msi.com/Motherboard/TRX40-PRO-10G/support > >> I am using 7C60v1A3(Beta version), I will update to the latest today -- just learning that exists. > >> dmidecode reports that as: > >> Vendor: American Megatrends International, LLC. > >> Version: 1.80 > >> > >> I've had to disable pstate with: > >> amd_pstate.enable=0 initcall_blacklist=amd-pstate > >> > >> Without that my system grinds to a hault, takes upwards of 15 minutes just to hit the desktop. > >> > >> Thanks, let me know if anything else is needed. > >> -Kyle Gospodnetich > >> > >> > >> On Wednesday, October 7th, 2026 at 8:06 AM, Mario Limonciello <mario.limonciello@amd.com> wrote: > >> > >>> Kyle, > >>> > >>> Can you please confirm more about your system? System Model, vendor, > >>> BIOS version, BIOS vendor, CPU model. > >>> > >>> Thanks, > >>> > >>> On 10/7/26 10:04, Kyle Gospodnetich wrote: > >>>> Yes this does appear to be the same problem, thank you! > >>>> > >>>> -------- Original Message -------- > >>>> On Wednesday, 10/07/26 at 07:56 Mario Limonciello <mario.limonciello@amd.com> wrote: > >>>> + Kyle > >>>> > >>>> Kyle, > >>>> > >>>> By chance is this the same system that you were talking to me about offline? > >>>> > >>>> > >>>> > >>>> On 10/7/26 09:41, Giovanni Gherdovich wrote: > >>>>> Some motherboard based on the TRX40 chipset has been reported to ship > >>>>> firmware lacking lowest and nominal frequency values in the > >>>>> _CPC ACPI package. That is, it supports CPPC V2 but not CPPC V3. > >>>>> Firmware updates aren't available. > >>>> > >>>> Can you please add more information about the vendor/model of the MB, etc? > >>>>> > >>>>> amd-pstate requires explicit knowledge of nominal frequency, so it > >>>>> can't load on this hardware. The driver already has a mechanism (the > >>>>> so-called "quirks") to accommodate for missing nominal freq in ACPI > >>>>> tables, so here we use it to match against CPU family, model, core > >>>>> count, and BIOS version. > >>>> > >>>> Yeah; it's intended for this specific case of really old hardware that > >>>> the BIOS isn't going to fix it. > >>>> > >>>> I don't understand why core count matters though. > >>>> > >>>>> > >>>>> Signed-off-by: Giovanni Gherdovich <ggherdovich@suse.cz> > >>>>> --- > >>>>> drivers/cpufreq/amd-pstate.c | 31 +++++++++++++++++++++++++++++++ > >>>>> 1 file changed, 31 insertions(+) > >>>>> > >>>>> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c > >>>>> index 8bfd46d60843..532ff16dd076 100644 > >>>>> --- a/drivers/cpufreq/amd-pstate.c > >>>>> +++ b/drivers/cpufreq/amd-pstate.c > >>>>> @@ -145,6 +145,11 @@ static struct quirk_entry quirk_amd_7k62 = { > >>>>> .lowest_freq = 550, > >>>>> }; > >>>>> > >>>>> +static struct quirk_entry quirk_amd_ryzen_threadripper_3000_24c = { > >>>>> + .nominal_freq = 3800, > >>>>> + .lowest_freq = 550, > >>>>> +}; > >>>>> + > >>>>> static inline u8 freq_to_perf(union perf_cached perf, u32 nominal_freq, unsigned int freq_val) > >>>>> { > >>>>> u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * perf.nominal_perf, nominal_freq); > >>>>> @@ -174,6 +179,22 @@ static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) > >>>>> return 0; > >>>>> } > >>>>> > >>>>> +static int __init dmi_matched_trx40_bios_bug(const struct dmi_system_id *dmi) > >>>>> +{ > >>>>> + /** > >>>>> + * Match the Ryzen Threadripper 3000 series, 24-core SKU, sTRX4 socket / TRX40 chipset. > >>>>> + */ > >>>>> + if (boot_cpu_data.x86 == 0x17 && > >>>>> + boot_cpu_data.x86_model >= 0x30 && boot_cpu_data.x86_model <= 0x3F && > >>>>> + topology_num_cores_per_package() == 24) { > >>>> > >>>> Does the number of cores actually matter? Do you mean to say if you > >>>> swap the CPU to another part CPPC works? > >>>> > >>>>> + quirks = dmi->driver_data; > >>>>> + pr_info("Overriding nominal and lowest frequencies for %s\n", dmi->ident); > >>>> > >>>> The BIOS bug specifically is lack of values, not invalid values, right? > >>>> Just want to make sure I'm following this right. > >>>> > >>>>> + return 1; > >>>>> + } > >>>>> + > >>>>> + return 0; > >>>>> +} > >>>>> + > >>>>> static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { > >>>>> { > >>>>> .callback = dmi_matched_7k62_bios_bug, > >>>>> @@ -184,6 +205,16 @@ static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { > >>>>> }, > >>>>> .driver_data = &quirk_amd_7k62, > >>>>> }, > >>>>> + { > >>>>> + .callback = dmi_matched_trx40_bios_bug, > >>>>> + .ident = "AMD Ryzen Threadripper 3000", > >>>>> + .matches = { > >>>>> + DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends International"), > >>>>> + DMI_MATCH(DMI_BIOS_VERSION, "2.80"), > >>>>> + DMI_MATCH(DMI_BIOS_DATE, "05/17/2022"), > >>>>> + }, > >>>>> + .driver_data = &quirk_amd_ryzen_threadripper_3000_24c, > >>>>> + }, > >>>>> {} > >>>>> }; > >>>>> MODULE_DEVICE_TABLE(dmi, amd_pstate_quirks_table); > >>>> > >>> > >>> > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards 2026-10-07 18:30 ` Kyle Gospodnetich @ 2026-10-07 18:32 ` Mario Limonciello 2026-10-07 18:49 ` Giovanni Gherdovich 0 siblings, 1 reply; 13+ messages in thread From: Mario Limonciello @ 2026-10-07 18:32 UTC (permalink / raw) To: Kyle Gospodnetich Cc: Giovanni Gherdovich, Huang Rui, Perry Yuan, K Prateek Nayak, Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel Well that's great news. Giorvanni - are you sure you don't have a BIOS update available from your vendor? I would much rather not carry a quirk like this if it has been fixed in latest BIOS. On 10/7/26 13:30, Kyle Gospodnetich wrote: > Looks like it's finally fixed with that last BIOS release, it's been years! > > Platform Firmware Information > Vendor: American Megatrends International, LLC. > Version: 1.A4 > Release Date: 06/15/2026 > > cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver > amd-pstate-epp > > And no performance issues. Thanks! > > > On Wednesday, October 7th, 2026 at 11:08 AM, Mario Limonciello <mario.limonciello@amd.com> wrote: > >> OK, let's wait and see what happens after you upgrade. New versions of >> FW and the behavior please. >> >> On 10/7/26 12:43, Kyle Gospodnetich wrote: >>> Missed one, >>> >>> Release Date: 05/17/2022 >>> >>> >>> On Wednesday, October 7th, 2026 at 10:36 AM, Kyle Gospodnetich <me@kylegospodneti.ch> wrote: >>> >>>> AMD Ryzen Threadripper 3960X >>>> MSI TRX40-PRO-10G >>>> https://www.msi.com/Motherboard/TRX40-PRO-10G/support >>>> I am using 7C60v1A3(Beta version), I will update to the latest today -- just learning that exists. >>>> dmidecode reports that as: >>>> Vendor: American Megatrends International, LLC. >>>> Version: 1.80 >>>> >>>> I've had to disable pstate with: >>>> amd_pstate.enable=0 initcall_blacklist=amd-pstate >>>> >>>> Without that my system grinds to a hault, takes upwards of 15 minutes just to hit the desktop. >>>> >>>> Thanks, let me know if anything else is needed. >>>> -Kyle Gospodnetich >>>> >>>> >>>> On Wednesday, October 7th, 2026 at 8:06 AM, Mario Limonciello <mario.limonciello@amd.com> wrote: >>>> >>>>> Kyle, >>>>> >>>>> Can you please confirm more about your system? System Model, vendor, >>>>> BIOS version, BIOS vendor, CPU model. >>>>> >>>>> Thanks, >>>>> >>>>> On 10/7/26 10:04, Kyle Gospodnetich wrote: >>>>>> Yes this does appear to be the same problem, thank you! >>>>>> >>>>>> -------- Original Message -------- >>>>>> On Wednesday, 10/07/26 at 07:56 Mario Limonciello <mario.limonciello@amd.com> wrote: >>>>>> + Kyle >>>>>> >>>>>> Kyle, >>>>>> >>>>>> By chance is this the same system that you were talking to me about offline? >>>>>> >>>>>> >>>>>> >>>>>> On 10/7/26 09:41, Giovanni Gherdovich wrote: >>>>>>> Some motherboard based on the TRX40 chipset has been reported to ship >>>>>>> firmware lacking lowest and nominal frequency values in the >>>>>>> _CPC ACPI package. That is, it supports CPPC V2 but not CPPC V3. >>>>>>> Firmware updates aren't available. >>>>>> >>>>>> Can you please add more information about the vendor/model of the MB, etc? >>>>>>> >>>>>>> amd-pstate requires explicit knowledge of nominal frequency, so it >>>>>>> can't load on this hardware. The driver already has a mechanism (the >>>>>>> so-called "quirks") to accommodate for missing nominal freq in ACPI >>>>>>> tables, so here we use it to match against CPU family, model, core >>>>>>> count, and BIOS version. >>>>>> >>>>>> Yeah; it's intended for this specific case of really old hardware that >>>>>> the BIOS isn't going to fix it. >>>>>> >>>>>> I don't understand why core count matters though. >>>>>> >>>>>>> >>>>>>> Signed-off-by: Giovanni Gherdovich <ggherdovich@suse.cz> >>>>>>> --- >>>>>>> drivers/cpufreq/amd-pstate.c | 31 +++++++++++++++++++++++++++++++ >>>>>>> 1 file changed, 31 insertions(+) >>>>>>> >>>>>>> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c >>>>>>> index 8bfd46d60843..532ff16dd076 100644 >>>>>>> --- a/drivers/cpufreq/amd-pstate.c >>>>>>> +++ b/drivers/cpufreq/amd-pstate.c >>>>>>> @@ -145,6 +145,11 @@ static struct quirk_entry quirk_amd_7k62 = { >>>>>>> .lowest_freq = 550, >>>>>>> }; >>>>>>> >>>>>>> +static struct quirk_entry quirk_amd_ryzen_threadripper_3000_24c = { >>>>>>> + .nominal_freq = 3800, >>>>>>> + .lowest_freq = 550, >>>>>>> +}; >>>>>>> + >>>>>>> static inline u8 freq_to_perf(union perf_cached perf, u32 nominal_freq, unsigned int freq_val) >>>>>>> { >>>>>>> u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * perf.nominal_perf, nominal_freq); >>>>>>> @@ -174,6 +179,22 @@ static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) >>>>>>> return 0; >>>>>>> } >>>>>>> >>>>>>> +static int __init dmi_matched_trx40_bios_bug(const struct dmi_system_id *dmi) >>>>>>> +{ >>>>>>> + /** >>>>>>> + * Match the Ryzen Threadripper 3000 series, 24-core SKU, sTRX4 socket / TRX40 chipset. >>>>>>> + */ >>>>>>> + if (boot_cpu_data.x86 == 0x17 && >>>>>>> + boot_cpu_data.x86_model >= 0x30 && boot_cpu_data.x86_model <= 0x3F && >>>>>>> + topology_num_cores_per_package() == 24) { >>>>>> >>>>>> Does the number of cores actually matter? Do you mean to say if you >>>>>> swap the CPU to another part CPPC works? >>>>>> >>>>>>> + quirks = dmi->driver_data; >>>>>>> + pr_info("Overriding nominal and lowest frequencies for %s\n", dmi->ident); >>>>>> >>>>>> The BIOS bug specifically is lack of values, not invalid values, right? >>>>>> Just want to make sure I'm following this right. >>>>>> >>>>>>> + return 1; >>>>>>> + } >>>>>>> + >>>>>>> + return 0; >>>>>>> +} >>>>>>> + >>>>>>> static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { >>>>>>> { >>>>>>> .callback = dmi_matched_7k62_bios_bug, >>>>>>> @@ -184,6 +205,16 @@ static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { >>>>>>> }, >>>>>>> .driver_data = &quirk_amd_7k62, >>>>>>> }, >>>>>>> + { >>>>>>> + .callback = dmi_matched_trx40_bios_bug, >>>>>>> + .ident = "AMD Ryzen Threadripper 3000", >>>>>>> + .matches = { >>>>>>> + DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends International"), >>>>>>> + DMI_MATCH(DMI_BIOS_VERSION, "2.80"), >>>>>>> + DMI_MATCH(DMI_BIOS_DATE, "05/17/2022"), >>>>>>> + }, >>>>>>> + .driver_data = &quirk_amd_ryzen_threadripper_3000_24c, >>>>>>> + }, >>>>>>> {} >>>>>>> }; >>>>>>> MODULE_DEVICE_TABLE(dmi, amd_pstate_quirks_table); >>>>>> >>>>> >>>>> >> >> ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards 2026-10-07 18:32 ` Mario Limonciello @ 2026-10-07 18:49 ` Giovanni Gherdovich 0 siblings, 0 replies; 13+ messages in thread From: Giovanni Gherdovich @ 2026-10-07 18:49 UTC (permalink / raw) To: Mario Limonciello, Kyle Gospodnetich Cc: Huang Rui, Perry Yuan, K Prateek Nayak, Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel Hello Mario, Kyle, Kyle: thanks for checking BIOS updates, you and I have a very similar motherboard in fact; the one I'm working with is the MSI "TRX40 PRO WIFI". Mario: Yes I suppose I do have a BIOS update; sorry, it escaped my notice. After Kyle's successful test, I checked msi.com and indeed there's a BIOS release at https://www.msi.com/Motherboard/TRX40-PRO-WIFI/support from last June (version 7C60v294 from 2026-06-23). I need to ask the openSUSE user who reported this problem to test the new BIOS (I don't have direct access to this machine). I'll let you know. Thanks, Giovanni On Wed Oct 7, 2026 20:32, Mario Limonciello wrote: > Well that's great news. > > Giorvanni - are you sure you don't have a BIOS update available from your vendor? > > I would much rather not carry a quirk like this if it has been fixed in latest BIOS. > > On 10/7/26 13:30, Kyle Gospodnetich wrote: >> Looks like it's finally fixed with that last BIOS release, it's been years! >> >> Platform Firmware Information >> Vendor: American Megatrends International, LLC. >> Version: 1.A4 >> Release Date: 06/15/2026 >> >> cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver >> amd-pstate-epp >> >> And no performance issues. Thanks! >> >> >> On Wednesday, October 7th, 2026 at 11:08 AM, Mario Limonciello <mario.limonciello@amd.com> wrote: >> >>> OK, let's wait and see what happens after you upgrade. New versions of >>> FW and the behavior please. >>> >>> On 10/7/26 12:43, Kyle Gospodnetich wrote: >>>> Missed one, >>>> >>>> Release Date: 05/17/2022 >>>> >>>> >>>> On Wednesday, October 7th, 2026 at 10:36 AM, Kyle Gospodnetich <me@kylegospodneti.ch> wrote: >>>> >>>>> AMD Ryzen Threadripper 3960X >>>>> MSI TRX40-PRO-10G >>>>> https://www.msi.com/Motherboard/TRX40-PRO-10G/support >>>>> I am using 7C60v1A3(Beta version), I will update to the latest today -- just learning that exists. >>>>> dmidecode reports that as: >>>>> Vendor: American Megatrends International, LLC. >>>>> Version: 1.80 >>>>> >>>>> I've had to disable pstate with: >>>>> amd_pstate.enable=0 initcall_blacklist=amd-pstate >>>>> >>>>> Without that my system grinds to a hault, takes upwards of 15 minutes just to hit the desktop. >>>>> >>>>> Thanks, let me know if anything else is needed. >>>>> -Kyle Gospodnetich >>>>> >>>>> >>>>> On Wednesday, October 7th, 2026 at 8:06 AM, Mario Limonciello <mario.limonciello@amd.com> wrote: >>>>> >>>>>> Kyle, >>>>>> >>>>>> Can you please confirm more about your system? System Model, vendor, >>>>>> BIOS version, BIOS vendor, CPU model. >>>>>> >>>>>> Thanks, >>>>>> >>>>>> On 10/7/26 10:04, Kyle Gospodnetich wrote: >>>>>>> Yes this does appear to be the same problem, thank you! >>>>>>> >>>>>>> -------- Original Message -------- >>>>>>> On Wednesday, 10/07/26 at 07:56 Mario Limonciello <mario.limonciello@amd.com> wrote: >>>>>>> + Kyle >>>>>>> >>>>>>> Kyle, >>>>>>> >>>>>>> By chance is this the same system that you were talking to me about offline? >>>>>>> >>>>>>> >>>>>>> >>>>>>> On 10/7/26 09:41, Giovanni Gherdovich wrote: >>>>>>>> Some motherboard based on the TRX40 chipset has been reported to ship >>>>>>>> firmware lacking lowest and nominal frequency values in the >>>>>>>> _CPC ACPI package. That is, it supports CPPC V2 but not CPPC V3. >>>>>>>> Firmware updates aren't available. >>>>>>> >>>>>>> Can you please add more information about the vendor/model of the MB, etc? >>>>>>>> >>>>>>>> amd-pstate requires explicit knowledge of nominal frequency, so it >>>>>>>> can't load on this hardware. The driver already has a mechanism (the >>>>>>>> so-called "quirks") to accommodate for missing nominal freq in ACPI >>>>>>>> tables, so here we use it to match against CPU family, model, core >>>>>>>> count, and BIOS version. >>>>>>> >>>>>>> Yeah; it's intended for this specific case of really old hardware that >>>>>>> the BIOS isn't going to fix it. >>>>>>> >>>>>>> I don't understand why core count matters though. >>>>>>> >>>>>>>> >>>>>>>> Signed-off-by: Giovanni Gherdovich <ggherdovich@suse.cz> >>>>>>>> --- >>>>>>>> drivers/cpufreq/amd-pstate.c | 31 +++++++++++++++++++++++++++++++ >>>>>>>> 1 file changed, 31 insertions(+) >>>>>>>> >>>>>>>> diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c >>>>>>>> index 8bfd46d60843..532ff16dd076 100644 >>>>>>>> --- a/drivers/cpufreq/amd-pstate.c >>>>>>>> +++ b/drivers/cpufreq/amd-pstate.c >>>>>>>> @@ -145,6 +145,11 @@ static struct quirk_entry quirk_amd_7k62 = { >>>>>>>> .lowest_freq = 550, >>>>>>>> }; >>>>>>>> >>>>>>>> +static struct quirk_entry quirk_amd_ryzen_threadripper_3000_24c = { >>>>>>>> + .nominal_freq = 3800, >>>>>>>> + .lowest_freq = 550, >>>>>>>> +}; >>>>>>>> + >>>>>>>> static inline u8 freq_to_perf(union perf_cached perf, u32 nominal_freq, unsigned int freq_val) >>>>>>>> { >>>>>>>> u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * perf.nominal_perf, nominal_freq); >>>>>>>> @@ -174,6 +179,22 @@ static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) >>>>>>>> return 0; >>>>>>>> } >>>>>>>> >>>>>>>> +static int __init dmi_matched_trx40_bios_bug(const struct dmi_system_id *dmi) >>>>>>>> +{ >>>>>>>> + /** >>>>>>>> + * Match the Ryzen Threadripper 3000 series, 24-core SKU, sTRX4 socket / TRX40 chipset. >>>>>>>> + */ >>>>>>>> + if (boot_cpu_data.x86 == 0x17 && >>>>>>>> + boot_cpu_data.x86_model >= 0x30 && boot_cpu_data.x86_model <= 0x3F && >>>>>>>> + topology_num_cores_per_package() == 24) { >>>>>>> >>>>>>> Does the number of cores actually matter? Do you mean to say if you >>>>>>> swap the CPU to another part CPPC works? >>>>>>> >>>>>>>> + quirks = dmi->driver_data; >>>>>>>> + pr_info("Overriding nominal and lowest frequencies for %s\n", dmi->ident); >>>>>>> >>>>>>> The BIOS bug specifically is lack of values, not invalid values, right? >>>>>>> Just want to make sure I'm following this right. >>>>>>> >>>>>>>> + return 1; >>>>>>>> + } >>>>>>>> + >>>>>>>> + return 0; >>>>>>>> +} >>>>>>>> + >>>>>>>> static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { >>>>>>>> { >>>>>>>> .callback = dmi_matched_7k62_bios_bug, >>>>>>>> @@ -184,6 +205,16 @@ static const struct dmi_system_id amd_pstate_quirks_table[] __initconst = { >>>>>>>> }, >>>>>>>> .driver_data = &quirk_amd_7k62, >>>>>>>> }, >>>>>>>> + { >>>>>>>> + .callback = dmi_matched_trx40_bios_bug, >>>>>>>> + .ident = "AMD Ryzen Threadripper 3000", >>>>>>>> + .matches = { >>>>>>>> + DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends International"), >>>>>>>> + DMI_MATCH(DMI_BIOS_VERSION, "2.80"), >>>>>>>> + DMI_MATCH(DMI_BIOS_DATE, "05/17/2022"), >>>>>>>> + }, >>>>>>>> + .driver_data = &quirk_amd_ryzen_threadripper_3000_24c, >>>>>>>> + }, >>>>>>>> {} >>>>>>>> }; >>>>>>>> MODULE_DEVICE_TABLE(dmi, amd_pstate_quirks_table); >>>>>>> >>>>>> >>>>>> >>> >>> > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards 2026-10-07 14:56 ` Mario Limonciello 2026-10-07 15:04 ` Kyle Gospodnetich @ 2026-10-07 19:38 ` Giovanni Gherdovich 2026-10-07 19:45 ` Mario Limonciello 1 sibling, 1 reply; 13+ messages in thread From: Giovanni Gherdovich @ 2026-10-07 19:38 UTC (permalink / raw) To: Mario Limonciello, Huang Rui, Perry Yuan, K Prateek Nayak Cc: Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel Hello Mario, [moving Kyle to BCC, I hope it's OK] in my last message I forgot to reply to the rest of your questions; see below. In any event, next step for me is testing the latest bios, as there seems to be an update. On Wed Oct 7, 2026 16:56, Mario Limonciello wrote: > > Can you please add more information about the vendor/model of the MB, etc? right. Motherboard is MSI, model is TRX40 PRO WIFI, CPU is AMD Ryzen Threadripper 3960X. https://www.msi.com/Motherboard/TRX40-PRO-WIFI Practically the same system as Kyle. >> amd-pstate requires explicit knowledge of nominal frequency, so it >> can't load on this hardware. The driver already has a mechanism (the >> so-called "quirks") to accommodate for missing nominal freq in ACPI >> tables, so here we use it to match against CPU family, model, core >> count, and BIOS version. > > Yeah; it's intended for this specific case of really old hardware that the BIOS isn't going to fix it. > > I don't understand why core count matters though. My thinking was: 1. I want to make the "quirk" to match as many chips as possible, to make it more useful and worthwhile. 2. The doc I have, "Power and Thermal Data Sheet" (publication #56736 in the AMD doc library), is for family 0x17, models 0x30-0x3F processors. 3. Problem: these have different nominal frequencies, depending on the core count. Specifically: 24 cores: 3800 MHz (like the Ryzen 3090x I need) 32 cores: 3700 Mhz 64 cores: 2900 MHz 4. Thus I decided to match for family 0x17, model 0x30-0x3f, 24 cores. Without the core count constraint, I couldn't tell which of the three nominal frequencies above should apply. >> @@ -174,6 +179,22 @@ static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) >> return 0; >> } >> +static int __init dmi_matched_trx40_bios_bug(const struct dmi_system_id *dmi) >> +{ >> + /** >> + * Match the Ryzen Threadripper 3000 series, 24-core SKU, sTRX4 socket / TRX40 chipset. >> + */ >> + if (boot_cpu_data.x86 == 0x17 && >> + boot_cpu_data.x86_model >= 0x30 && boot_cpu_data.x86_model <= 0x3F && >> + topology_num_cores_per_package() == 24) { > > Does the number of cores actually matter? Do you mean to say if you swap the CPU to another part CPPC works? No no. It was either wide matching (models 0x30-0x3f) but constraint on #cores, or narrow matching for the exact CPU in my motherboard, (model 0x31). Since I'm hard-coding data into the kernel, I figured wide matching would make the quirk more applicable to potentially other affected systems, hence more useful. >> + quirks = dmi->driver_data; >> + pr_info("Overriding nominal and lowest frequencies for %s\n", dmi->ident); > > The BIOS bug specifically is lack of values, not invalid values, right? Just want to make sure I'm following this right. Correct, BIOS is lacking the values. That info message "Overriding" is taken verbatim from the other "quirk" in the source, but strictly speaking inaccurate. Values weren't there to begin with. All that said, I've asked the openSUSE user to test the newer BIOS, we'll see what that gives. Thanks, Giovanni ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards 2026-10-07 19:38 ` Giovanni Gherdovich @ 2026-10-07 19:45 ` Mario Limonciello 2026-10-07 19:59 ` Giovanni Gherdovich 0 siblings, 1 reply; 13+ messages in thread From: Mario Limonciello @ 2026-10-07 19:45 UTC (permalink / raw) To: Giovanni Gherdovich, Huang Rui, Perry Yuan, K Prateek Nayak Cc: Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel On 10/7/26 14:38, Giovanni Gherdovich wrote: > Hello Mario, > > [moving Kyle to BCC, I hope it's OK] > > in my last message I forgot to reply to the rest of your questions; > see below. In any event, next step for me is testing the latest bios, > as there seems to be an update. > > On Wed Oct 7, 2026 16:56, Mario Limonciello wrote: >> >> Can you please add more information about the vendor/model of the MB, >> etc? > > right. > > Motherboard is MSI, model is TRX40 PRO WIFI, CPU is AMD Ryzen > Threadripper 3960X. > https://www.msi.com/Motherboard/TRX40-PRO-WIFI > Practically the same system as Kyle. > >>> amd-pstate requires explicit knowledge of nominal frequency, so it >>> can't load on this hardware. The driver already has a mechanism (the >>> so-called "quirks") to accommodate for missing nominal freq in ACPI >>> tables, so here we use it to match against CPU family, model, core >>> count, and BIOS version. >> >> Yeah; it's intended for this specific case of really old hardware that >> the BIOS isn't going to fix it. >> >> I don't understand why core count matters though. > > My thinking was: > > 1. I want to make the "quirk" to match as many chips as possible, to > make it more useful and worthwhile. > 2. The doc I have, "Power and Thermal Data Sheet" (publication #56736 > in the AMD doc library), is for family 0x17, models 0x30-0x3F > processors. > 3. Problem: these have different nominal frequencies, depending on the > core count. Specifically: > 24 cores: 3800 MHz (like the Ryzen 3090x I need) > 32 cores: 3700 Mhz > 64 cores: 2900 MHz > 4. Thus I decided to match for family 0x17, model 0x30-0x3f, 24 cores. > Without the core count constraint, I couldn't tell which of the > three nominal frequencies above should apply. If there does need to be a quirk I guess I would actually say there should be 3 quirks then. One for each core count version.> >>> @@ -174,6 +179,22 @@ static int __init >>> dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi) >>> return 0; >>> } >>> +static int __init dmi_matched_trx40_bios_bug(const struct >>> dmi_system_id *dmi) >>> +{ >>> + /** >>> + * Match the Ryzen Threadripper 3000 series, 24-core SKU, sTRX4 >>> socket / TRX40 chipset. >>> + */ >>> + if (boot_cpu_data.x86 == 0x17 && >>> + boot_cpu_data.x86_model >= 0x30 && boot_cpu_data.x86_model >>> <= 0x3F && >>> + topology_num_cores_per_package() == 24) { >> >> Does the number of cores actually matter? Do you mean to say if you >> swap the CPU to another part CPPC works? > > No no. It was either wide matching (models 0x30-0x3f) but constraint > on #cores, or narrow matching for the exact CPU in my motherboard, > (model 0x31). > Since I'm hard-coding data into the kernel, I figured wide matching > would make the quirk more applicable to potentially other affected > systems, hence more useful. > >>> + quirks = dmi->driver_data; >>> + pr_info("Overriding nominal and lowest frequencies for >>> %s\n", dmi->ident); >> >> The BIOS bug specifically is lack of values, not invalid values, >> right? Just want to make sure I'm following this right. > > Correct, BIOS is lacking the values. That info message "Overriding" > is taken verbatim from the other "quirk" in the source, but strictly > speaking inaccurate. Values weren't there to begin with. > > All that said, I've asked the openSUSE user to test the newer BIOS, > we'll see what that gives. > > > Thanks, > Giovanni Thanks! Based on the findings from the BIOS update everything in this thread should be enough to either make a v2 incorporating feedback (mostly making it clearer) or to drop the patch. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards 2026-10-07 19:45 ` Mario Limonciello @ 2026-10-07 19:59 ` Giovanni Gherdovich 0 siblings, 0 replies; 13+ messages in thread From: Giovanni Gherdovich @ 2026-10-07 19:59 UTC (permalink / raw) To: Mario Limonciello, Huang Rui, Perry Yuan, K Prateek Nayak Cc: Rafael J . Wysocki, Viresh Kumar, linux-pm, linux-kernel On Wed Oct 7, 2026 21:45, Mario Limonciello wrote: > On 10/7/26 14:38, Giovanni Gherdovich wrote: >> On Wed Oct 7, 2026 16:56, Mario Limonciello wrote: >>> [...] >>> I don't understand why core count matters though. >> >> My thinking was: >> >> 1. I want to make the "quirk" to match as many chips as possible, to >> make it more useful and worthwhile. >> 2. The doc I have, "Power and Thermal Data Sheet" (publication #56736 >> in the AMD doc library), is for family 0x17, models 0x30-0x3F >> processors. >> 3. Problem: these have different nominal frequencies, depending on the >> core count. Specifically: >> 24 cores: 3800 MHz (like the Ryzen 3090x I need) >> 32 cores: 3700 Mhz >> 64 cores: 2900 MHz >> 4. Thus I decided to match for family 0x17, model 0x30-0x3f, 24 cores. >> Without the core count constraint, I couldn't tell which of the >> three nominal frequencies above should apply. > > If there does need to be a quirk I guess I would actually say there > should be 3 quirks then. One for each core count version. Makes sense. >> All that said, I've asked the openSUSE user to test the newer BIOS, >> we'll see what that gives. > > Thanks! Based on the findings from the BIOS update everything in > this thread should be enough to either make a v2 incorporating > feedback (mostly making it clearer) or to drop the patch. Yes I think so. Thanks a lot for your support so far. Giovanni ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2026-10-07 19:59 UTC | newest] Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-10-07 14:41 [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards Giovanni Gherdovich 2026-10-07 14:56 ` Mario Limonciello 2026-10-07 15:04 ` Kyle Gospodnetich 2026-10-07 15:05 ` Mario Limonciello 2026-10-07 17:36 ` Kyle Gospodnetich 2026-10-07 17:43 ` Kyle Gospodnetich 2026-10-07 18:08 ` Mario Limonciello 2026-10-07 18:30 ` Kyle Gospodnetich 2026-10-07 18:32 ` Mario Limonciello 2026-10-07 18:49 ` Giovanni Gherdovich 2026-10-07 19:38 ` Giovanni Gherdovich 2026-10-07 19:45 ` Mario Limonciello 2026-10-07 19:59 ` Giovanni Gherdovich
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®