x86: Use microcode update from device tree for all processors
PATCH v3 1/1 x86: Use microcode update from device tree for all processors
From: Ivan Gorinov <[email protected]>
Built without a ROM image with FSP (u-boot.rom), the U-Boot loader applies the microcode update data block encoded in Device Tree to the bootstrap processor but not passed to the other CPUs when multiprocessing is enabled.
If the bootstrap processor successfully performs a microcode update from Device Tree, use the same data block for the other processors.
---
Changes in v3:
- don't change arch/x86/cpu/i386/cpu.c to fix build errors on edison and qemu-x86
arch/x86/cpu/intel_common/car.S | 2 ++ arch/x86/cpu/intel_common/microcode.c | 10 +++++++--- arch/x86/include/asm/microcode.h | 1 + arch/x86/lib/fsp/fsp_car.S | 4 +++- 4 files changed, 13 insertions(+), 4 deletions(-)
arch/x86/cpu/intel_common/car.S +2 -0
@@ -239,4 +239,6 @@ _dt_ucode_base_size: .globl ucode_base ucode_base: /* Declared in microcode.h */ .long 0 /* microcode base */ +.globl ucode_size +ucode_size: /* Declared in microcode.h */ .long 0 /* microcode size */
arch/x86/cpu/intel_common/microcode.c +7 -3
@@ -43,8 +43,6 @@ static int microcode_decode_node(const void *blob, int node, update->data =fdt_getprop (blob, node,"data" , &update->size);if (!update->data)return -ENOENT ; - update->data +=UCODE_HEADER_LEN ; - update->size -=UCODE_HEADER_LEN ; update->header_version =fdtdec_get_int (blob, node,"intel,header-version" ,0 );
@@ -124,6 +122,7 @@ static void microcode_read_cpu(struct microcode_update *cpu)int microcode_update_intel (void ) {struct microcode_update cpu, update; +ulong address;const void *blob = gd->fdt_blob;int skipped;int count;
@@ -167,7 +166,8 @@ int microcode_update_intel(void) skipped++;continue ; } -wrmsr (MSR_IA32_UCODE_WRITE , (ulong )update.data,0 ); + address = (ulong )update.data +UCODE_HEADER_LEN ; +wrmsr (MSR_IA32_UCODE_WRITE , address,0 ); rev =microcode_read_rev (); debug("microcode: updated to revision 0x%x date=%04x-%02x-%02x\n", rev, update.date_code & 0xffff,
@@ -178,5 +178,9 @@ int microcode_update_intel(void)return -EFAULT ; } count++; +if (!ucode_base) { + ucode_base = (ulong )update.data; + ucode_size = update.size; + } }while (1 ); }
arch/x86/include/asm/microcode.h +1 -0
@@ -10,6 +10,7 @@/* This is a declaration for ucode_base in start.S */ extern u32 ucode_base; +extern u32 ucode_size;/** * microcode_update_intel() - Apply microcode updates
arch/x86/lib/fsp/fsp_car.S +3 -1
@@ -102,8 +102,10 @@ temp_ram_init_params: _dt_ucode_base_size: /* These next two fields are filled in by ifdtool */ .globl ucode_base -ucode_base: /* Declared in micrcode.h */ +ucode_base: /* Declared in microcode.h */ .long 0 /* microcode base */ +.globl ucode_size +ucode_size: /* Declared in microcode.h */ .long 0 /* microcode size */ .long CONFIG_SYS_MONITOR_BASE /* code region base */ .long CONFIG_SYS_MONITOR_LEN /* code region size */
Signature · 1 line
2.7.4
PATCH v3 1/1 x86: Use microcode update from device tree for all processors
Hi Ivan,
Quoted 14 lines · Bin Meng
From: Ivan Gorinov <[email protected]>
Built without a ROM image with FSP (u-boot.rom), the U-Boot loader applies the microcode update data block encoded in Device Tree to the bootstrap processor but not passed to the other CPUs when multiprocessing is enabled.
If the bootstrap processor successfully performs a microcode update from Device Tree, use the same data block for the other processors.
Signed-off-by Ivan Gorinov <[email protected]>Reviewed-by Bin Meng <[email protected]>[bmeng: fixed build errors on edison and qemu-x86]Signed-off-by Bin Meng <[email protected]>
Quoted 6 lines
---
Changes in v3:
- don't changearch/x86/cpu/i386/cpu.cto fix build errors on edison and qemu-x86
I don't think the update to arch/x86/cpu/i386/cpu.c in previous version is needed as mp_params.microcode_pointer is not needed during the MP boot. Please test this patch to see if it works on your board.
Quoted 6 lines
arch/x86/cpu/intel_common/car.S | 2 ++ arch/x86/cpu/intel_common/microcode.c | 10 +++++++--- arch/x86/include/asm/microcode.h | 1 + arch/x86/lib/fsp/fsp_car.S | 4 +++- 4 files changed, 13 insertions(+), 4 deletions(-)
Regards,
Bin
PATCH v3 1/1 x86: Use microcode update from device tree for all processors
Hi Ivan,
Quoted 19 lines · Bin Meng
Hi Ivan,
Quoted 16 lines · Bin Meng
From: Ivan Gorinov <[email protected]>
Built without a ROM image with FSP (u-boot.rom), the U-Boot loader applies the microcode update data block encoded in Device Tree to the bootstrap processor but not passed to the other CPUs when multiprocessing is enabled.
If the bootstrap processor successfully performs a microcode update from Device Tree, use the same data block for the other processors.
Signed-off-by Ivan Gorinov <[email protected]>Reviewed-by Bin Meng <[email protected]>[bmeng: fixed build errors on edison and qemu-x86]Signed-off-by Bin Meng <[email protected]>---
Quoted 14 lines
Quoted 4 lines
Changes in v3:
- don't changearch/x86/cpu/i386/cpu.cto fix build errors on edison and qemu-x86I don't think the update to
arch/x86/cpu/i386/cpu.cin previous version is needed as mp_params.microcode_pointer is not needed during the MP boot. Please test this patch to see if it works on your board.Quoted 5 lines
arch/x86/cpu/intel_common/car.S | 2 ++ arch/x86/cpu/intel_common/microcode.c | 10 +++++++--- arch/x86/include/asm/microcode.h | 1 + arch/x86/lib/fsp/fsp_car.S | 4 +++- 4 files changed, 13 insertions(+), 4 deletions(-)
Did you get a chance to test this? If no issue, I will take this patch for v2018.07.
Regards,
Bin
PATCH v3 1/1 x86: Use microcode update from device tree for all processors
Quoted 31 lines · Bin Meng
Hi Ivan,
Quoted 28 lines · Bin Meng
Hi Ivan,
Quoted 14 lines · Bin Meng
From: Ivan Gorinov <[email protected]>
Built without a ROM image with FSP (u-boot.rom), the U-Boot loader applies the microcode update data block encoded in Device Tree to the bootstrap processor but not passed to the other CPUs when multiprocessing is enabled.
If the bootstrap processor successfully performs a microcode update from Device Tree, use the same data block for the other processors.
Signed-off-by Ivan Gorinov <[email protected]>Reviewed-by Bin Meng <[email protected]>[bmeng: fixed build errors on edison and qemu-x86]Signed-off-by Bin Meng <[email protected]>Quoted 6 lines
---
Changes in v3:
- don't changearch/x86/cpu/i386/cpu.cto fix build errors on edison and qemu-x86I don't think the update to
arch/x86/cpu/i386/cpu.cin previous version is needed as mp_params.microcode_pointer is not needed during the MP boot. Please test this patch to see if it works on your board.
Quoted 8 lines
Quoted 5 lines
Quoted 5 lines
arch/x86/cpu/intel_common/car.S | 2 ++ arch/x86/cpu/intel_common/microcode.c | 10 +++++++--- arch/x86/include/asm/microcode.h | 1 + arch/x86/lib/fsp/fsp_car.S | 4 +++- 4 files changed, 13 insertions(+), 4 deletions(-)Did you get a chance to test this? If no issue, I will take this patch for v2018.07.
No issues. Thank you!
PATCH v3 1/1 x86: Use microcode update from device tree for all processors
Quoted 38 lines · Ivan Gorinov
Quoted 37 lines · Bin Meng
Hi Ivan,
Quoted 33 lines · Bin Meng
Hi Ivan,
Quoted 14 lines · Bin Meng
From: Ivan Gorinov <[email protected]>
Built without a ROM image with FSP (u-boot.rom), the U-Boot loader applies the microcode update data block encoded in Device Tree to the bootstrap processor but not passed to the other CPUs when multiprocessing is enabled.
If the bootstrap processor successfully performs a microcode update from Device Tree, use the same data block for the other processors.
Signed-off-by Ivan Gorinov <[email protected]>Reviewed-by Bin Meng <[email protected]>[bmeng: fixed build errors on edison and qemu-x86]Signed-off-by Bin Meng <[email protected]>Quoted 6 lines
---
Changes in v3:
- don't changearch/x86/cpu/i386/cpu.cto fix build errors on edison and qemu-x86I don't think the update to
arch/x86/cpu/i386/cpu.cin previous version is needed as mp_params.microcode_pointer is not needed during the MP boot. Please test this patch to see if it works on your board.Quoted 5 lines
arch/x86/cpu/intel_common/car.S | 2 ++ arch/x86/cpu/intel_common/microcode.c | 10 +++++++--- arch/x86/include/asm/microcode.h | 1 + arch/x86/lib/fsp/fsp_car.S | 4 +++- 4 files changed, 13 insertions(+), 4 deletions(-)
Quoted 5 lines
Quoted 2 lines
Did you get a chance to test this? If no issue, I will take this patch for v2018.07.
No issues. Thank you!
applied to u-boot-x86, thanks!