56 lines
1.5 KiB
Diff
56 lines
1.5 KiB
Diff
|
From: Borislav Petkov <bp@alien8.de>
|
||
|
Date: Sat, 1 Nov 2014 11:01:00 +0100
|
||
|
Subject: [PATCH] x86, microcode, AMD: Fix early ucode loading on 32-bit
|
||
|
|
||
|
Hi guys,
|
||
|
|
||
|
please queue this for the next batch to Linus.
|
||
|
|
||
|
Thanks.
|
||
|
---
|
||
|
arch/x86/kernel/cpu/microcode/amd_early.c | 9 +++++++--
|
||
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/arch/x86/kernel/cpu/microcode/amd_early.c b/arch/x86/kernel/cpu/microcode/amd_early.c
|
||
|
index 7aa1acc79789..8b75f7050129 100644
|
||
|
--- a/arch/x86/kernel/cpu/microcode/amd_early.c
|
||
|
+++ b/arch/x86/kernel/cpu/microcode/amd_early.c
|
||
|
@@ -348,6 +348,7 @@ int __init save_microcode_in_initrd_amd(void)
|
||
|
{
|
||
|
unsigned long cont;
|
||
|
enum ucode_state ret;
|
||
|
+ u8 *cont_va;
|
||
|
u32 eax;
|
||
|
|
||
|
if (!container)
|
||
|
@@ -355,13 +356,15 @@ int __init save_microcode_in_initrd_amd(void)
|
||
|
|
||
|
#ifdef CONFIG_X86_32
|
||
|
get_bsp_sig();
|
||
|
- cont = (unsigned long)container;
|
||
|
+ cont = (unsigned long)container;
|
||
|
+ cont_va = __va(container);
|
||
|
#else
|
||
|
/*
|
||
|
* We need the physical address of the container for both bitness since
|
||
|
* boot_params.hdr.ramdisk_image is a physical address.
|
||
|
*/
|
||
|
- cont = __pa(container);
|
||
|
+ cont = __pa(container);
|
||
|
+ cont_va = container;
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
@@ -372,6 +375,8 @@ int __init save_microcode_in_initrd_amd(void)
|
||
|
if (relocated_ramdisk)
|
||
|
container = (u8 *)(__va(relocated_ramdisk) +
|
||
|
(cont - boot_params.hdr.ramdisk_image));
|
||
|
+ else
|
||
|
+ container = cont_va;
|
||
|
|
||
|
if (ucode_new_rev)
|
||
|
pr_info("microcode: updated early to new patch_level=0x%08x\n",
|
||
|
--
|
||
|
1.9.3
|
||
|
|