diff options
Diffstat (limited to 'src/soc')
-rw-r--r-- | src/soc/intel/apollolake/include/soc/smm.h | 3 | ||||
-rw-r--r-- | src/soc/intel/apollolake/smihandler.c | 17 | ||||
-rw-r--r-- | src/soc/intel/common/block/include/intelblocks/smihandler.h | 18 | ||||
-rw-r--r-- | src/soc/intel/common/block/smm/smihandler.c | 23 |
4 files changed, 42 insertions, 19 deletions
diff --git a/src/soc/intel/apollolake/include/soc/smm.h b/src/soc/intel/apollolake/include/soc/smm.h index b37694e6f7..eda0bc4422 100644 --- a/src/soc/intel/apollolake/include/soc/smm.h +++ b/src/soc/intel/apollolake/include/soc/smm.h @@ -30,7 +30,4 @@ void southbridge_smm_clear_state(void); void southbridge_smm_enable_smi(void); -/* Mainboard handler for GPI SMIs*/ -void mainboard_smi_gpi_handler(const struct gpi_status *sts); - #endif diff --git a/src/soc/intel/apollolake/smihandler.c b/src/soc/intel/apollolake/smihandler.c index f834b1da70..22c793051d 100644 --- a/src/soc/intel/apollolake/smihandler.c +++ b/src/soc/intel/apollolake/smihandler.c @@ -34,26 +34,11 @@ const struct smm_save_state_ops *get_smm_save_state_ops(void) return &em64t100_smm_ops; } -void __attribute__((weak)) -mainboard_smi_gpi_handler(const struct gpi_status *sts) { } - -static void southbridge_smi_gpi( - const struct smm_save_state_ops *save_state_ops) -{ - struct gpi_status smi_sts; - - gpi_clear_get_smi_status(&smi_sts); - mainboard_smi_gpi_handler(&smi_sts); - - /* Clear again after mainboard handler */ - gpi_clear_get_smi_status(&smi_sts); -} - const smi_handler_t southbridge_smi[32] = { [SLP_SMI_STS] = smihandler_southbridge_sleep, [APM_SMI_STS] = smihandler_southbridge_apmc, [FAKE_PM1_SMI_STS] = smihandler_southbridge_pm1, - [GPIO_SMI_STS] = southbridge_smi_gpi, + [GPIO_SMI_STS] = smihandler_southbridge_gpi, [TCO_SMI_STS] = smihandler_southbridge_tco, [PERIODIC_SMI_STS] = smihandler_southbridge_periodic, }; diff --git a/src/soc/intel/common/block/include/intelblocks/smihandler.h b/src/soc/intel/common/block/include/intelblocks/smihandler.h index 4423904371..389d2415b8 100644 --- a/src/soc/intel/common/block/include/intelblocks/smihandler.h +++ b/src/soc/intel/common/block/include/intelblocks/smihandler.h @@ -109,6 +109,21 @@ void smihandler_southbridge_periodic( const struct smm_save_state_ops *save_state_ops); /* + * This function should be implemented in SOC specific code to handle + * SMI GPIO_STS event. The default functionality is provided in + * soc/intel/common/block/smm/smihandler.c + */ +void smihandler_southbridge_gpi( + const struct smm_save_state_ops *save_state_ops); + +/* + * This function should be implemented in SOC specific code to handle + * SMI ESPI_STS event. The default functionality is provided in + * soc/intel/common/block/smm/smihandler.c + */ +void smihandler_southbridge_espi( + const struct smm_save_state_ops *save_state_ops); +/* * This function returns a 1 or 0 depending on whether disable_busmaster * needs to be done for the specified device on S5 entry */ @@ -122,6 +137,9 @@ struct global_nvs_t *smm_get_gnvs(void); /* Mainboard handler for GPI SMIs */ void mainboard_smi_gpi_handler(const struct gpi_status *sts); +/* Mainboard handler for ESPI EMIs */ +void mainboard_smi_espi_handler(void); + extern const struct smm_save_state_ops em64t100_smm_ops; extern const struct smm_save_state_ops em64t101_smm_ops; diff --git a/src/soc/intel/common/block/smm/smihandler.c b/src/soc/intel/common/block/smm/smihandler.c index 7a4be47844..24327f2aa8 100644 --- a/src/soc/intel/common/block/smm/smihandler.c +++ b/src/soc/intel/common/block/smm/smihandler.c @@ -356,6 +356,29 @@ void smihandler_southbridge_periodic( printk(BIOS_DEBUG, "Periodic SMI.\n"); } +void __attribute__((weak)) +mainboard_smi_gpi_handler(const struct gpi_status *sts) { } + +void smihandler_southbridge_gpi( + const struct smm_save_state_ops *save_state_ops) +{ + struct gpi_status smi_sts; + + gpi_clear_get_smi_status(&smi_sts); + mainboard_smi_gpi_handler(&smi_sts); + + /* Clear again after mainboard handler */ + gpi_clear_get_smi_status(&smi_sts); +} + +void __attribute__((weak)) mainboard_smi_espi_handler(void) { } + +void smihandler_southbridge_espi( + const struct smm_save_state_ops *save_state_ops) +{ + mainboard_smi_espi_handler(); +} + void southbridge_smi_handler(void) { int i; |