From b4b9e87669383fd49a3be74aae15d7ab3fa8ad38 Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Sat, 24 Jan 2026 09:58:59 +0100 Subject: [PATCH] cpu/intel/model_206xx: Load microcode in pre_mp_init() Ensure that BSP has latest microcode loaded before MPinit starts. This aligns the code with other platforms ensuring that the microcode on the BSP is up to date. It likely has updated microcode before enabling NEM, so this is a nop, but it also ensures that the microcode is located in CBFS before the MTRRs are setup using x86_setup_mtrrs_with_detect() which removes caching the SPI flash MMIO area. Since intel_microcode_find() caches the microcode location get_microcode_info() will be faster since it doesn't need to access the CBFS. TEST=Lenovo X220 still boots. Change-Id: Ic4c5d1a06ce314b38b92e8a9c089ed901716ff27 Signed-off-by: Patrick Rudolph Reviewed-on: https://review.coreboot.org/c/coreboot/+/90893 Reviewed-by: Naresh Tested-by: build bot (Jenkins) --- src/cpu/intel/model_2065x/model_2065x_init.c | 3 +++ src/cpu/intel/model_206ax/model_206ax_init.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/cpu/intel/model_2065x/model_2065x_init.c b/src/cpu/intel/model_2065x/model_2065x_init.c index 70a2d1ae80..d02c70bdfa 100644 --- a/src/cpu/intel/model_2065x/model_2065x_init.c +++ b/src/cpu/intel/model_2065x/model_2065x_init.c @@ -106,6 +106,9 @@ static void model_2065x_init(struct device *cpu) /* MP initialization support. */ static void pre_mp_init(void) { + const void *microcode_patch = intel_microcode_find(); + intel_microcode_load_unlocked(microcode_patch); + /* Setup MTRRs based on physical address size. */ x86_setup_mtrrs_with_detect(); x86_mtrr_check(); diff --git a/src/cpu/intel/model_206ax/model_206ax_init.c b/src/cpu/intel/model_206ax/model_206ax_init.c index 21a13f3d11..162c674e0f 100644 --- a/src/cpu/intel/model_206ax/model_206ax_init.c +++ b/src/cpu/intel/model_206ax/model_206ax_init.c @@ -486,6 +486,9 @@ static void model_206ax_init(struct device *cpu) /* MP initialization support. */ static void pre_mp_init(void) { + const void *microcode_patch = intel_microcode_find(); + intel_microcode_load_unlocked(microcode_patch); + /* Setup MTRRs based on physical address size. */ x86_setup_mtrrs_with_detect(); x86_mtrr_check();