mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [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®