]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
x86/microcode/AMD: Move the no-revision fixup to get_patch_level()
authorBorislav Petkov (AMD) <bp@alien8.de>
Sat, 30 May 2026 00:27:24 +0000 (17:27 -0700)
committerBorislav Petkov (AMD) <bp@alien8.de>
Thu, 4 Jun 2026 15:55:58 +0000 (08:55 -0700)
On machines which don't have microcode applied yet, the revision is 0.
However, this doesn't work with the Zen family/model/stepping patch
arithmetic. So move the fixup to the patch level getter function and
this way make sure the patch level is always proper and thus the
arithmetic always works.

And now that it can be called on any family, make this Zen-only.

Assisted-by: claude/claude-opus-4-6
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/20260530024213.86137-1-bp@kernel.org
arch/x86/kernel/cpu/microcode/amd.c

index e533881284a12b9a0d6c5e9119703bbfbcaebafe..b90af74b8be900dced16182e17548884cec0a6a0 100644 (file)
@@ -233,11 +233,6 @@ static bool need_sha_check(u32 cur_rev)
 {
        u32 cutoff;
 
-       if (!cur_rev) {
-               cur_rev = cpuid_to_ucode_rev(bsp_cpuid_1_eax);
-               pr_info_once("No current revision, generating the lowest one: 0x%x\n", cur_rev);
-       }
-
        cutoff = get_cutoff_revision(cur_rev);
        if (cutoff)
                return cur_rev <= cutoff;
@@ -338,6 +333,13 @@ static u32 get_patch_level(void)
        }
 
        native_rdmsr(MSR_AMD64_PATCH_LEVEL, rev, dummy);
+       if (!rev) {
+               if (x86_family(bsp_cpuid_1_eax) < 0x17)
+                       return rev;
+
+               rev = cpuid_to_ucode_rev(bsp_cpuid_1_eax);
+               pr_info_once("No current revision, generating the lowest one: 0x%x\n", rev);
+       }
 
        return rev;
 }