]> git.sur5r.net Git - u-boot/commitdiff
x86: Update microcode for secondary CPUs
authorSimon Glass <sjg@chromium.org>
Sat, 12 Mar 2016 05:07:11 +0000 (22:07 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Thu, 17 Mar 2016 02:27:25 +0000 (10:27 +0800)
Each CPU needs to have its microcode loaded. Add support for this so that
all CPUs will have the same version.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/cpu/cpu.c
arch/x86/cpu/intel_common/car.S
arch/x86/cpu/mp_init.c
arch/x86/include/asm/microcode.h
arch/x86/lib/fsp/fsp_car.S

index 7dfe0713baabf0ac585173084bb3cbb3426b5f6c..233a6c86958c993ed909a2ce6d5e7600606ff491 100644 (file)
@@ -27,6 +27,7 @@
 #include <asm/control_regs.h>
 #include <asm/cpu.h>
 #include <asm/lapic.h>
+#include <asm/microcode.h>
 #include <asm/mp.h>
 #include <asm/msr.h>
 #include <asm/mtrr.h>
index 81ac976ddd5bafcd7feb8e6307de7e7fdac4df5c..6e0db96c0162bcd8440efa10ed3bc5657b45e981 100644 (file)
@@ -237,5 +237,7 @@ mtrr_table_end:
        .align 4
 _dt_ucode_base_size:
        /* These next two fields are filled in by ifdtool */
+.globl ucode_base
+ucode_base:    /* Declared in microcode.h */
        .long   0                       /* microcode base */
        .long   0                       /* microcode size */
index 4cc655566c3636e85ca97297d32bcfac05962699..2604a687ab9f5d62bd3bb1634438635954e8c9c9 100644 (file)
@@ -248,8 +248,10 @@ static int load_sipi_vector(atomic_t **ap_countp, int num_cpus)
        if (!stack)
                return -ENOMEM;
        params->stack_top = (u32)(stack + size);
-
-       params->microcode_ptr = 0;
+#if !defined(CONFIG_QEMU) && !defined(CONFIG_HAVE_FSP)
+       params->microcode_ptr = ucode_base;
+       debug("Microcode at %x\n", params->microcode_ptr);
+#endif
        params->msr_table_ptr = (u32)msr_save;
        ret = save_bsp_msrs(msr_save, sizeof(msr_save));
        if (ret < 0)
index 04789353ecf6a4018afaf3c80a1104257256019a..29bf06088973fdde911e84ec9855e17616a5f422 100644 (file)
@@ -9,6 +9,9 @@
 
 #ifndef __ASSEMBLY__
 
+/* This is a declaration for ucode_base in start.S */
+extern u32 ucode_base;
+
 /**
  * microcode_update_intel() - Apply microcode updates
  *
index 15b37512a5734ed5fdda8ece19becb8c654ac711..fbe8aef540cf856e80bd012f4d7dca32cce3bf7b 100644 (file)
@@ -102,6 +102,8 @@ temp_ram_init_romstack:
 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 */
        .long   0                       /* microcode base */
        .long   0                       /* microcode size */
        .long   CONFIG_SYS_MONITOR_BASE /* code region base */