* [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; 9+ 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] 9+ 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
0 siblings, 1 reply; 9+ 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] 9+ 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
0 siblings, 1 reply; 9+ 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] 9+ 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; 9+ 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] 9+ 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; 9+ 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] 9+ 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; 9+ 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] 9+ 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; 9+ 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] 9+ 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; 9+ 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] 9+ 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
0 siblings, 0 replies; 9+ 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] 9+ messages in thread
end of thread, other threads:[~2026-10-07 18:32 UTC | newest]
Thread overview: 9+ 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
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®