diff --git a/src/cpu/x86/smm/smihandler.c b/src/cpu/x86/smm/smihandler.c index 0d9131e429..0b262afaa9 100644 --- a/src/cpu/x86/smm/smihandler.c +++ b/src/cpu/x86/smm/smihandler.c @@ -208,3 +208,4 @@ void __weak southbridge_smi_handler(void) {} void __weak mainboard_smi_gpi(u32 gpi_sts) {} int __weak mainboard_smi_apmc(u8 data) { return 0; } void __weak mainboard_smi_sleep(u8 slp_typ) {} +void __weak mainboard_smi_finalize(void) {} diff --git a/src/cpu/x86/smm/smm_module_handler.c b/src/cpu/x86/smm/smm_module_handler.c index 0c0de78b21..f9ebba4e32 100644 --- a/src/cpu/x86/smm/smm_module_handler.c +++ b/src/cpu/x86/smm/smm_module_handler.c @@ -198,3 +198,4 @@ void __weak southbridge_smi_handler() {} void __weak mainboard_smi_gpi(u32 gpi_sts) {} int __weak mainboard_smi_apmc(u8 data) { return 0; } void __weak mainboard_smi_sleep(u8 slp_typ) {} +void __weak mainboard_smi_finalize(void) {} diff --git a/src/include/cpu/x86/smm.h b/src/include/cpu/x86/smm.h index 1b4de2571a..08404d0320 100644 --- a/src/include/cpu/x86/smm.h +++ b/src/include/cpu/x86/smm.h @@ -49,6 +49,7 @@ void southbridge_smi_handler(void); void mainboard_smi_gpi(u32 gpi_sts); int mainboard_smi_apmc(u8 data); void mainboard_smi_sleep(u8 slp_typ); +void mainboard_smi_finalize(void); /* This is the SMM handler. */ extern unsigned char _binary_smm_start[]; diff --git a/src/soc/intel/common/block/smm/smihandler.c b/src/soc/intel/common/block/smm/smihandler.c index ff87d71e4f..91142a51ce 100644 --- a/src/soc/intel/common/block/smm/smihandler.c +++ b/src/soc/intel/common/block/smm/smihandler.c @@ -320,6 +320,13 @@ static void finalize(void) /* Re-init SPI driver to handle locked BAR */ fast_spi_init(); + /* + * HECI is disabled in smihandler_soc_at_finalize() which also locks down the side band + * interface. Some boards may require this interface in mainboard_smi_finalize(), + * therefore, this call must precede smihandler_soc_at_finalize(). + */ + mainboard_smi_finalize(); + /* Specific SOC SMI handler during ramstage finalize phase */ smihandler_soc_at_finalize(); }