aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/soc/intel/alderlake/Kconfig7
-rw-r--r--src/soc/intel/alderlake/fsp_params.c21
2 files changed, 18 insertions, 10 deletions
diff --git a/src/soc/intel/alderlake/Kconfig b/src/soc/intel/alderlake/Kconfig
index f2b7d6ff40..c79eb08c7b 100644
--- a/src/soc/intel/alderlake/Kconfig
+++ b/src/soc/intel/alderlake/Kconfig
@@ -430,6 +430,13 @@ config USE_FSP_MP_INIT
config USE_COREBOOT_MP_INIT
bool "Use coreboot MP init"
+ # FSP assumes ownership of the APs (Application Processors)
+ # upon passing `NULL` pointer to the CpuMpPpi FSP-S UPD.
+ # Hence, select `MP_SERVICES_PPI_V2_NOOP` config to pass a valid
+ # pointer to the CpuMpPpi UPD with FSP_UNSUPPORTED type APIs.
+ # This will protect APs from getting hijacked by FSP while coreboot
+ # decides to set SkipMpInit UPD.
+ select MP_SERVICES_PPI_V2_NOOP
select RELOAD_MICROCODE_PATCH
help
Upon selection, coreboot performs MP Init.
diff --git a/src/soc/intel/alderlake/fsp_params.c b/src/soc/intel/alderlake/fsp_params.c
index 6826306c12..dd17e33d36 100644
--- a/src/soc/intel/alderlake/fsp_params.c
+++ b/src/soc/intel/alderlake/fsp_params.c
@@ -586,22 +586,23 @@ static void fill_fsps_microcode_params(FSP_S_CONFIG *s_cfg,
static void fill_fsps_cpu_params(FSP_S_CONFIG *s_cfg,
const struct soc_intel_alderlake_config *config)
{
- if (CONFIG(USE_FSP_MP_INIT)) {
+ /*
+ * FIXME: FSP assumes ownership of the APs (Application Processors)
+ * upon passing `NULL` pointer to the CpuMpPpi FSP-S UPD.
+ * Hence, pass a valid pointer to the CpuMpPpi UPD unconditionally.
+ * This would avoid APs from getting hijacked by FSP while coreboot
+ * decides to set SkipMpInit UPD.
+ */
+ s_cfg->CpuMpPpi = (uintptr_t) mp_fill_ppi_services_data();
+
+ if (CONFIG(USE_FSP_MP_INIT))
/*
* Fill `2nd microcode loading FSP UPD` if FSP is running CPU feature
* programming.
*/
fill_fsps_microcode_params(s_cfg, config);
- /*
- * Use FSP running MP PPI services to perform CPU feature programming
- * if Kconfig is enabled
- */
- s_cfg->CpuMpPpi = (uintptr_t) mp_fill_ppi_services_data();
- } else {
- /* Use coreboot native driver to perform MP init by default */
- s_cfg->CpuMpPpi = (uintptr_t)NULL;
+ else
s_cfg->SkipMpInit = !CONFIG(USE_INTEL_FSP_MP_INIT);
- }
}
static void fill_fsps_igd_params(FSP_S_CONFIG *s_cfg,