diff --git a/src/soc/intel/meteorlake/Kconfig b/src/soc/intel/meteorlake/Kconfig index ab66211eec..919f08cbac 100644 --- a/src/soc/intel/meteorlake/Kconfig +++ b/src/soc/intel/meteorlake/Kconfig @@ -339,6 +339,13 @@ config MTL_USE_FSP_MP_INIT config MTL_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 Initialization that includes feature programming. diff --git a/src/soc/intel/meteorlake/fsp_params.c b/src/soc/intel/meteorlake/fsp_params.c index 816a704790..a624025591 100644 --- a/src/soc/intel/meteorlake/fsp_params.c +++ b/src/soc/intel/meteorlake/fsp_params.c @@ -144,21 +144,21 @@ 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_meteorlake_config *config) { - if (CONFIG(MTL_USE_FSP_MP_INIT)) { - /* - * Fill `2nd microcode loading FSP UPD` if FSP is running CPU feature - * programming. - */ + /* + * 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(); + + /* + * Fill `2nd microcode loading FSP UPD` if FSP is running CPU feature + * programming. + */ + if (CONFIG(MTL_USE_FSP_MP_INIT)) 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; - } }