Patrick Georgi has submitted this change. ( https://review.coreboot.org/c/coreboot/+/49897 )
Change subject: soc/intel/*: Get rid of custom microcode caching ......................................................................
soc/intel/*: Get rid of custom microcode caching
Get rid of custom microcode caching in MPinit and SGX code and use the caching introduced in intel_microcode_find() instead.
Change-Id: If3ccd4dcff221c88839ffeafa812f4c38cede63f Signed-off-by: Patrick Rudolph patrick.rudolph@9elements.com Reviewed-on: https://review.coreboot.org/c/coreboot/+/49897 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Arthur Heymans arthur@aheymans.xyz Reviewed-by: Angel Pons th3fanbus@gmail.com --- M src/cpu/intel/model_1067x/mp_init.c M src/cpu/intel/model_2065x/model_2065x_init.c M src/cpu/intel/model_206ax/model_206ax_init.c M src/soc/intel/common/block/cpu/mp_init.c M src/soc/intel/common/block/include/intelblocks/mp_init.h M src/soc/intel/common/block/sgx/sgx.c M src/soc/intel/xeon_sp/cpx/cpu.c 7 files changed, 13 insertions(+), 44 deletions(-)
Approvals: build bot (Jenkins): Verified Arthur Heymans: Looks good to me, approved Angel Pons: Looks good to me, approved
diff --git a/src/cpu/intel/model_1067x/mp_init.c b/src/cpu/intel/model_1067x/mp_init.c index ff6cbec..fd6a82a 100644 --- a/src/cpu/intel/model_1067x/mp_init.c +++ b/src/cpu/intel/model_1067x/mp_init.c @@ -9,11 +9,10 @@ #include <device/device.h>
/* Parallel MP initialization support. */ -static const void *microcode_patch; - static void pre_mp_init(void) { - intel_microcode_load_unlocked(microcode_patch); + const void *patch = intel_microcode_find(); + intel_microcode_load_unlocked(patch);
/* Setup MTRRs based on physical address size. */ x86_setup_mtrrs_with_detect(); @@ -32,7 +31,7 @@
static void get_microcode_info(const void **microcode, int *parallel) { - *microcode = microcode_patch; + *microcode = intel_microcode_find(); *parallel = !intel_ht_supported(); }
@@ -98,8 +97,6 @@
void mp_init_cpus(struct bus *cpu_bus) { - microcode_patch = intel_microcode_find(); - if (mp_init_with_smm(cpu_bus, &mp_ops)) printk(BIOS_ERR, "MP initialization failure.\n"); } diff --git a/src/cpu/intel/model_2065x/model_2065x_init.c b/src/cpu/intel/model_2065x/model_2065x_init.c index 44552f5..dd2aeef 100644 --- a/src/cpu/intel/model_2065x/model_2065x_init.c +++ b/src/cpu/intel/model_2065x/model_2065x_init.c @@ -123,8 +123,6 @@ }
/* MP initialization support. */ -static const void *microcode_patch; - static void pre_mp_init(void) { /* Setup MTRRs based on physical address size. */ @@ -149,8 +147,7 @@
static void get_microcode_info(const void **microcode, int *parallel) { - microcode_patch = intel_microcode_find(); - *microcode = microcode_patch; + *microcode = intel_microcode_find(); *parallel = !intel_ht_supported(); }
@@ -160,6 +157,7 @@ smm_relocate();
/* After SMM relocation a 2nd microcode load is required. */ + const void *microcode_patch = intel_microcode_find(); intel_microcode_load_unlocked(microcode_patch); }
diff --git a/src/cpu/intel/model_206ax/model_206ax_init.c b/src/cpu/intel/model_206ax/model_206ax_init.c index 31099fd..ef04d39 100644 --- a/src/cpu/intel/model_206ax/model_206ax_init.c +++ b/src/cpu/intel/model_206ax/model_206ax_init.c @@ -466,8 +466,6 @@ }
/* MP initialization support. */ -static const void *microcode_patch; - static void pre_mp_init(void) { /* Setup MTRRs based on physical address size. */ @@ -492,8 +490,7 @@
static void get_microcode_info(const void **microcode, int *parallel) { - microcode_patch = intel_microcode_find(); - *microcode = microcode_patch; + *microcode = intel_microcode_find(); *parallel = !intel_ht_supported(); }
@@ -503,6 +500,7 @@ smm_relocate();
/* After SMM relocation a 2nd microcode load is required. */ + const void *microcode_patch = intel_microcode_find(); intel_microcode_load_unlocked(microcode_patch); }
diff --git a/src/soc/intel/common/block/cpu/mp_init.c b/src/soc/intel/common/block/cpu/mp_init.c index 4fd2074..8f8cd06 100644 --- a/src/soc/intel/common/block/cpu/mp_init.c +++ b/src/soc/intel/common/block/cpu/mp_init.c @@ -15,8 +15,6 @@ #include <intelblocks/msr.h> #include <soc/cpu.h>
-static const void *microcode_patch; - /* SoC override function */ __weak void soc_core_init(struct device *dev) { @@ -31,6 +29,8 @@ static void init_one_cpu(struct device *dev) { soc_core_init(dev); + + const void *microcode_patch = intel_microcode_find(); intel_microcode_load_unlocked(microcode_patch); }
@@ -105,17 +105,6 @@ }
/* - * Function to get the microcode patch pointer. Use this function to avoid - * reading the microcode patch from the boot media. init_cpus() would - * initialize microcode_patch global variable to point to microcode patch - * in boot media and this function can be used to access the pointer. - */ -const void *intel_mp_current_microcode(void) -{ - return microcode_patch; -} - -/* * MP Init callback function(get_microcode_info) to find the Microcode at * Pre MP Init phase. This function is common among all SOCs and thus its in * Common CPU block. @@ -125,7 +114,7 @@ */ void get_microcode_info(const void **microcode, int *parallel) { - *microcode = intel_mp_current_microcode(); + *microcode = intel_microcode_find(); *parallel = 1; }
@@ -151,7 +140,7 @@ if (CONFIG(USE_INTEL_FSP_MP_INIT)) return;
- microcode_patch = intel_microcode_find(); + const void *microcode_patch = intel_microcode_find(); intel_microcode_load_unlocked(microcode_patch);
init_cpus(); diff --git a/src/soc/intel/common/block/include/intelblocks/mp_init.h b/src/soc/intel/common/block/include/intelblocks/mp_init.h index 7dc85df..9038dd5 100644 --- a/src/soc/intel/common/block/include/intelblocks/mp_init.h +++ b/src/soc/intel/common/block/include/intelblocks/mp_init.h @@ -54,14 +54,6 @@ int get_cpu_count(void);
/* - * Function to get the microcode patch pointer. Use this function to avoid - * reading the microcode patch from the boot media. init_cpus() would - * initialize microcode_patch global variable to point to microcode patch - * in boot media and this function can be used to access the pointer. - */ -const void *intel_mp_current_microcode(void); - -/* * MP Init callback function(get_microcode_info) to find the Microcode at * Pre MP Init phase. This function is common among all SOCs and thus its in * Common CPU block. diff --git a/src/soc/intel/common/block/sgx/sgx.c b/src/soc/intel/common/block/sgx/sgx.c index 336ed54..b5c8944 100644 --- a/src/soc/intel/common/block/sgx/sgx.c +++ b/src/soc/intel/common/block/sgx/sgx.c @@ -224,7 +224,7 @@ * loads and to prevent simultaneous load attempts to the same core. */ if (!intel_ht_sibling()) { - const void *microcode_patch = intel_mp_current_microcode(); + const void *microcode_patch = intel_microcode_find(); intel_microcode_load_unlocked(microcode_patch); }
diff --git a/src/soc/intel/xeon_sp/cpx/cpu.c b/src/soc/intel/xeon_sp/cpx/cpu.c index 4dea1a4..be01fc0 100644 --- a/src/soc/intel/xeon_sp/cpx/cpu.c +++ b/src/soc/intel/xeon_sp/cpx/cpu.c @@ -58,15 +58,10 @@ */ void get_microcode_info(const void **microcode, int *parallel) { - *microcode = intel_mp_current_microcode(); + *microcode = intel_microcode_find(); *parallel = 0; }
-const void *intel_mp_current_microcode(void) -{ - return microcode_patch; -} - static void each_cpu_init(struct device *cpu) { msr_t msr;