Re: [PATCH] cpufreq/amd-pstate: Supply nominal/lowest freq for TRX40-based motherboards

From: Giovanni Gherdovich

Date: Wed Oct 07 2026 - 14:50:15 EST


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@xxxxxxx> 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@xxxxxxxxxxxxxxxxx> 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@xxxxxxx> 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@xxxxxxx> 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@xxxxxxx>
---
     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);