aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/x86/smm/smihandler.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/x86/smm/smihandler.c')
-rw-r--r--src/cpu/x86/smm/smihandler.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/cpu/x86/smm/smihandler.c b/src/cpu/x86/smm/smihandler.c
index c864df21f8..bd03030c4c 100644
--- a/src/cpu/x86/smm/smihandler.c
+++ b/src/cpu/x86/smm/smihandler.c
@@ -24,6 +24,12 @@
#include <cpu/x86/cache.h>
#include <cpu/x86/smm.h>
+#if CONFIG_SPI_FLASH_SMM
+#include <spi-generic.h>
+#endif
+
+static int do_driver_init = 1;
+
#if !CONFIG_SMM_TSEG /* TSEG handler locks in assembly */
typedef enum { SMI_LOCKED, SMI_UNLOCKED } smi_semaphore;
@@ -184,6 +190,14 @@ void smi_handler(u32 smm_revision)
return;
}
+ /* Allow drivers to initialize variables in SMM context. */
+ if (do_driver_init) {
+#if CONFIG_SPI_FLASH_SMM
+ spi_init();
+#endif
+ do_driver_init = 0;
+ }
+
/* Call chipset specific SMI handlers. */
if (cpu_smi_handler)
cpu_smi_handler(node, &state_save);