]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cpufreq/amd-pstate: Detect preferred core support before driver registration
authorK Prateek Nayak <kprateek.nayak@amd.com>
Tue, 10 Dec 2024 03:25:57 +0000 (03:25 +0000)
committerMario Limonciello <mario.limonciello@amd.com>
Tue, 10 Dec 2024 03:57:34 +0000 (21:57 -0600)
Booting with amd-pstate on 3rd Generation EPYC system incorrectly
enabled ITMT support despite the system not supporting Preferred Core
ranking. amd_pstate_init_prefcore() called during amd_pstate*_cpu_init()
requires "amd_pstate_prefcore" to be set correctly however the preferred
core support is detected only after driver registration which is too
late.

Swap the function calls around to detect preferred core support before
registring the driver via amd_pstate_register_driver(). This ensures
amd_pstate*_cpu_init() sees the correct value of "amd_pstate_prefcore"
considering the platform support.

Fixes: 279f838a61f9 ("x86/amd: Detect preferred cores in amd_get_boost_ratio_numerator()")
Fixes: ff2653ded4d9 ("cpufreq/amd-pstate: Move registration after static function call update")
Signed-off-by: K Prateek Nayak <kprateek.nayak@amd.com>
Acked-by: Mario Limonciello <mario.limonciello@amd.com>
Link: https://lore.kernel.org/r/20241210032557.754-1-kprateek.nayak@amd.com
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
drivers/cpufreq/amd-pstate.c

index d7630bab2516f0a9c39a769864f5884046d597a8..8b36450bbdf6aa7a5d63b88685893040272c2c17 100644 (file)
@@ -1869,18 +1869,18 @@ static int __init amd_pstate_init(void)
                static_call_update(amd_pstate_update_perf, shmem_update_perf);
        }
 
-       ret = amd_pstate_register_driver(cppc_state);
-       if (ret) {
-               pr_err("failed to register with return %d\n", ret);
-               return ret;
-       }
-
        if (amd_pstate_prefcore) {
                ret = amd_detect_prefcore(&amd_pstate_prefcore);
                if (ret)
                        return ret;
        }
 
+       ret = amd_pstate_register_driver(cppc_state);
+       if (ret) {
+               pr_err("failed to register with return %d\n", ret);
+               return ret;
+       }
+
        dev_root = bus_get_dev_root(&cpu_subsys);
        if (dev_root) {
                ret = sysfs_create_group(&dev_root->kobj, &amd_pstate_global_attr_group);