summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cpu/x86/smm/smihandler.c1
-rw-r--r--src/cpu/x86/smm/smm_module_handler.c1
-rw-r--r--src/include/cpu/x86/smm.h1
-rw-r--r--src/soc/intel/common/block/smm/smihandler.c7
4 files changed, 10 insertions, 0 deletions
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();
}