summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/soc/amd/common/block/include/amdblocks/smi.h2
-rw-r--r--src/soc/amd/common/block/smi/smi_util.c24
-rw-r--r--src/soc/amd/stoneyridge/include/soc/smi.h3
3 files changed, 28 insertions, 1 deletions
diff --git a/src/soc/amd/common/block/include/amdblocks/smi.h b/src/soc/amd/common/block/include/amdblocks/smi.h
index b870f16cdb..6995bef0f3 100644
--- a/src/soc/amd/common/block/include/amdblocks/smi.h
+++ b/src/soc/amd/common/block/include/amdblocks/smi.h
@@ -48,5 +48,7 @@ void disable_gevent_smi(uint8_t gevent);
void gpe_configure_sci(const struct sci_source *scis, size_t num_gpes);
void clear_all_smi_status(void);
void clear_smi_sci_status(void);
+void reset_psp_smi(void);
+void configure_psp_smi(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 ac2f4b450c..8ec900f762 100644
--- a/src/soc/amd/common/block/smi/smi_util.c
+++ b/src/soc/amd/common/block/smi/smi_util.c
@@ -154,3 +154,27 @@ void clear_smi_sci_status(void)
{
smi_write32(SMI_SCI_STATUS, smi_read32(SMI_SCI_STATUS));
}
+
+static void clear_psp_smi(void)
+{
+ uint32_t reg32;
+ /* SMITYPE_PSP is 33, so it's bit 33 % 32 in the second 32 bit SMI status register */
+ reg32 = smi_read32(SMI_REG_SMISTS1);
+ reg32 |= 1 << (SMITYPE_PSP % 32);
+ smi_write32(SMI_REG_SMISTS1, reg32);
+}
+
+void reset_psp_smi(void)
+{
+ uint32_t reg32;
+ reg32 = smi_read32(SMI_REG_SMITRIG0);
+ reg32 &= ~SMITRIG0_PSP;
+ smi_write32(SMI_REG_SMITRIG0, reg32);
+}
+
+void configure_psp_smi(void)
+{
+ clear_psp_smi();
+ reset_psp_smi();
+ configure_smi(SMITYPE_PSP, SMI_MODE_SMI);
+}
diff --git a/src/soc/amd/stoneyridge/include/soc/smi.h b/src/soc/amd/stoneyridge/include/soc/smi.h
index ccdd3c5581..2a847aa104 100644
--- a/src/soc/amd/stoneyridge/include/soc/smi.h
+++ b/src/soc/amd/stoneyridge/include/soc/smi.h
@@ -71,7 +71,7 @@
#define SMITYPE_ESPI_SYS 26
#define SMITYPE_ESPI_WAKE_PME 27
/* 28-32 Reserved */
-#define SMITYPE_FCH_FAKE0 33
+#define SMITYPE_PSP 33
#define SMITYPE_FCH_FAKE1 34
#define SMITYPE_FCH_FAKE2 35
/* 36 Reserved */
@@ -163,6 +163,7 @@
#define SMI_TIMER_EN (1 << 15)
#define SMI_REG_SMITRIG0 0x98
+# define SMITRIG0_PSP BIT(25)
# define SMITRG0_EOS BIT(28)
# define SMI_TIMER_SEL BIT(29)
# define SMITRG0_SMIENB BIT(31)