mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
x86/microcode/AMD: Handle the case of no BIOS microcode
Machines can be shipped without any microcode in the BIOS. Which means,
the microcode patch revision is 0.
Handle that gracefully.
Fixes: 94838d230a
("x86/microcode/AMD: Use the family,model,stepping encoded in the patch ID")
Reported-by: Vítek Vávra <vit.vavra.kh@gmail.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Cc: <stable@kernel.org>
This commit is contained in:
parent
24963ae1b0
commit
fcf8239ad6
@ -171,8 +171,28 @@ static int cmp_id(const void *key, const void *elem)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static u32 cpuid_to_ucode_rev(unsigned int val)
|
||||
{
|
||||
union zen_patch_rev p = {};
|
||||
union cpuid_1_eax c;
|
||||
|
||||
c.full = val;
|
||||
|
||||
p.stepping = c.stepping;
|
||||
p.model = c.model;
|
||||
p.ext_model = c.ext_model;
|
||||
p.ext_fam = c.ext_fam;
|
||||
|
||||
return p.ucode_rev;
|
||||
}
|
||||
|
||||
static bool need_sha_check(u32 cur_rev)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
switch (cur_rev >> 8) {
|
||||
case 0x80012: return cur_rev <= 0x800126f; break;
|
||||
case 0x80082: return cur_rev <= 0x800820f; break;
|
||||
@ -749,8 +769,6 @@ static struct ucode_patch *cache_find_patch(struct ucode_cpu_info *uci, u16 equi
|
||||
n.equiv_cpu = equiv_cpu;
|
||||
n.patch_id = uci->cpu_sig.rev;
|
||||
|
||||
WARN_ON_ONCE(!n.patch_id);
|
||||
|
||||
list_for_each_entry(p, µcode_cache, plist)
|
||||
if (patch_cpus_equivalent(p, &n, false))
|
||||
return p;
|
||||
|
Loading…
Reference in New Issue
Block a user