summaryrefslogtreecommitdiff
path: root/src/soc
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc')
-rw-r--r--src/soc/intel/common/block/include/intelblocks/pmclib.h5
-rw-r--r--src/soc/intel/common/block/pmc/pmclib.c17
2 files changed, 22 insertions, 0 deletions
diff --git a/src/soc/intel/common/block/include/intelblocks/pmclib.h b/src/soc/intel/common/block/include/intelblocks/pmclib.h
index 4093599aca..fe0a7657e3 100644
--- a/src/soc/intel/common/block/include/intelblocks/pmclib.h
+++ b/src/soc/intel/common/block/include/intelblocks/pmclib.h
@@ -42,6 +42,11 @@ uint32_t soc_get_smi_status(uint32_t generic_sts);
*/
int soc_prev_sleep_state(const struct chipset_power_state *ps,
int prev_sleep_state);
+
+/* PM1 */
+void pmc_update_pm1_enable(uint16_t events);
+uint16_t pmc_read_pm1_enable(void);
+
/*
* Function to print, clear, and return SMI status bits in SMI_STS
* register. This function internally calls pmc_reset_smi_status with
diff --git a/src/soc/intel/common/block/pmc/pmclib.c b/src/soc/intel/common/block/pmc/pmclib.c
index e741332f88..78b43e44e9 100644
--- a/src/soc/intel/common/block/pmc/pmclib.c
+++ b/src/soc/intel/common/block/pmc/pmclib.c
@@ -72,6 +72,23 @@ static uint32_t print_smi_status(uint32_t smi_sts)
return smi_sts;
}
+/*
+ * Update supplied events in PM1_EN register. This does not disable any already
+ * set events.
+ */
+void pmc_update_pm1_enable(u16 events)
+{
+ u16 pm1_en = pmc_read_pm1_enable();
+ pm1_en |= events;
+ pmc_enable_pm1(pm1_en);
+}
+
+/* Read events set in PM1_EN register. */
+uint16_t pmc_read_pm1_enable(void)
+{
+ return inw(ACPI_BASE_ADDRESS + PM1_EN);
+}
+
uint32_t pmc_clear_smi_status(void)
{
uint32_t sts = pmc_reset_smi_status();