summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/soc/amd/common/block/include/amdblocks/smi.h1
-rw-r--r--src/soc/amd/common/block/smi/smi_util.c5
-rw-r--r--src/soc/amd/picasso/smihandler.c11
-rw-r--r--src/soc/amd/stoneyridge/smihandler.c11
4 files changed, 10 insertions, 18 deletions
diff --git a/src/soc/amd/common/block/include/amdblocks/smi.h b/src/soc/amd/common/block/include/amdblocks/smi.h
index 25a1da7f34..97edd2c9c6 100644
--- a/src/soc/amd/common/block/include/amdblocks/smi.h
+++ b/src/soc/amd/common/block/include/amdblocks/smi.h
@@ -48,5 +48,6 @@ void disable_gevent_smi(uint8_t gevent);
void gpe_configure_sci(const struct sci_source *scis, size_t num_gpes);
void soc_route_sci(uint8_t event);
void clear_all_smi_status(void);
+void clear_smi_sci_status(void);
#endif /* AMD_BLOCK_SMI_H */
diff --git a/src/soc/amd/common/block/smi/smi_util.c b/src/soc/amd/common/block/smi/smi_util.c
index aa37dabe06..b763c3ba1a 100644
--- a/src/soc/amd/common/block/smi/smi_util.c
+++ b/src/soc/amd/common/block/smi/smi_util.c
@@ -154,3 +154,8 @@ void clear_all_smi_status(void)
smi_write32(SMI_REG_SMISTS3, smi_read32(SMI_REG_SMISTS3));
smi_write32(SMI_REG_SMISTS4, smi_read32(SMI_REG_SMISTS4));
}
+
+void clear_smi_sci_status(void)
+{
+ smi_write32(SMI_SCI_STATUS, smi_read32(SMI_SCI_STATUS));
+}
diff --git a/src/soc/amd/picasso/smihandler.c b/src/soc/amd/picasso/smihandler.c
index 5134358cb7..626daad00a 100644
--- a/src/soc/amd/picasso/smihandler.c
+++ b/src/soc/amd/picasso/smihandler.c
@@ -222,14 +222,6 @@ static const struct smi_sources_t smi_sources[] = {
{ .type = SMITYPE_SLP_TYP, .handler = sb_slp_typ_handler},
};
-static void process_smi_sci(void)
-{
- const uint32_t status = smi_read32(SMI_SCI_STATUS);
-
- /* Clear events to prevent re-entering SMI if event isn't handled */
- smi_write32(SMI_SCI_STATUS, status);
-}
-
static void *get_source_handler(int source)
{
int i;
@@ -270,7 +262,8 @@ void southbridge_smi_handler(void)
const uint16_t smi_src = smi_read16(SMI_REG_POINTER);
if (smi_src & SMI_STATUS_SRC_SCI)
- process_smi_sci();
+ /* Clear events to prevent re-entering SMI if event isn't handled */
+ clear_smi_sci_status();
if (smi_src & SMI_STATUS_SRC_0)
process_smi_sources(SMI_REG_SMISTS0);
if (smi_src & SMI_STATUS_SRC_1)
diff --git a/src/soc/amd/stoneyridge/smihandler.c b/src/soc/amd/stoneyridge/smihandler.c
index e90bdb1b8c..ffcbaea72b 100644
--- a/src/soc/amd/stoneyridge/smihandler.c
+++ b/src/soc/amd/stoneyridge/smihandler.c
@@ -217,14 +217,6 @@ static const struct smi_sources_t smi_sources[] = {
{ .type = SMITYPE_SLP_TYP, .handler = sb_slp_typ_handler},
};
-static void process_smi_sci(void)
-{
- const uint32_t status = smi_read32(SMI_SCI_STATUS);
-
- /* Clear events to prevent re-entering SMI if event isn't handled */
- smi_write32(SMI_SCI_STATUS, status);
-}
-
static void *get_source_handler(int source)
{
int i;
@@ -265,7 +257,8 @@ void southbridge_smi_handler(void)
const uint16_t smi_src = smi_read16(SMI_REG_POINTER);
if (smi_src & SMI_STATUS_SRC_SCI)
- process_smi_sci();
+ /* Clear events to prevent re-entering SMI if event isn't handled */
+ clear_smi_sci_status();
if (smi_src & SMI_STATUS_SRC_0)
process_smi_sources(SMI_REG_SMISTS0);
if (smi_src & SMI_STATUS_SRC_1)