diff options
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/intel/microcode/Kconfig | 10 | ||||
-rw-r--r-- | src/cpu/intel/microcode/microcode.c | 9 |
2 files changed, 17 insertions, 2 deletions
diff --git a/src/cpu/intel/microcode/Kconfig b/src/cpu/intel/microcode/Kconfig index c7bbecbace..6e8acdc01d 100644 --- a/src/cpu/intel/microcode/Kconfig +++ b/src/cpu/intel/microcode/Kconfig @@ -5,3 +5,13 @@ config MICROCODE_UPDATE_PRE_RAM help Select this option if you want to update the microcode during the cache as RAM setup. + +config RELOAD_MICROCODE_PATCH + bool + default n + help + Select this option if SoC recommends to re-load microcode + patch as part of CPU multiprocessor initialization process. + This feature is mostly required with Intel latest generation + processors starting with Alder Lake (with modified MCHECK init + flow). diff --git a/src/cpu/intel/microcode/microcode.c b/src/cpu/intel/microcode/microcode.c index 469bd25496..beadb489de 100644 --- a/src/cpu/intel/microcode/microcode.c +++ b/src/cpu/intel/microcode/microcode.c @@ -79,10 +79,15 @@ void intel_microcode_load_unlocked(const void *microcode_patch) current_rev = read_microcode_rev(); - /* No use loading the same revision. */ - if (current_rev == m->rev) { + /* + * No use loading the same revision unless RELOAD_MICROCODE_PATCH + * config is selected. + */ + if (!CONFIG(RELOAD_MICROCODE_PATCH) && (current_rev == m->rev)) { printk(BIOS_INFO, "microcode: Update skipped, already up-to-date\n"); return; + } else { + printk(BIOS_INFO, "microcode: Re-load microcode patch\n"); } #if ENV_RAMSTAGE |