<p>Julien Viard de Galbert has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/25427">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">soc/intel/denverton_ns: Rewrite pmutil using pmclib<br><br>Change-Id: If31e7102bf1b47c7ae94b86d981b762eda0a19e5<br>Signed-off-by: Julien Viard de Galbert <jviarddegalbert@online.net><br>---<br>M src/soc/intel/common/block/pmc/pmclib.c<br>M src/soc/intel/denverton_ns/include/soc/pm.h<br>M src/soc/intel/denverton_ns/pmutil.c<br>M src/soc/intel/denverton_ns/smihandler.c<br>M src/soc/intel/denverton_ns/smm.c<br>5 files changed, 34 insertions(+), 184 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/27/25427/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/soc/intel/common/block/pmc/pmclib.c b/src/soc/intel/common/block/pmc/pmclib.c</span><br><span>index 6492248..b9ff969 100644</span><br><span>--- a/src/soc/intel/common/block/pmc/pmclib.c</span><br><span>+++ b/src/soc/intel/common/block/pmc/pmclib.c</span><br><span>@@ -202,6 +202,7 @@</span><br><span> {</span><br><span> static const char *const pm1_sts_bits[] = {</span><br><span> [0] = "TMROF",</span><br><span style="color: hsl(120, 100%, 40%);">+ [4] = "BM",</span><br><span> [5] = "GBL",</span><br><span> [8] = "PWRBTN",</span><br><span> [10] = "RTC",</span><br><span>diff --git a/src/soc/intel/denverton_ns/include/soc/pm.h b/src/soc/intel/denverton_ns/include/soc/pm.h</span><br><span>index 5978b3a..e44d942 100644</span><br><span>--- a/src/soc/intel/denverton_ns/include/soc/pm.h</span><br><span>+++ b/src/soc/intel/denverton_ns/include/soc/pm.h</span><br><span>@@ -42,18 +42,6 @@</span><br><span> struct chipset_power_state *fill_power_state(void);</span><br><span> </span><br><span> /* Power Management Utility Functions. */</span><br><span style="color: hsl(0, 100%, 40%);">-uint32_t clear_smi_status(void);</span><br><span style="color: hsl(0, 100%, 40%);">-uint16_t clear_pm1_status(void);</span><br><span style="color: hsl(0, 100%, 40%);">-uint32_t clear_tco_status(void);</span><br><span style="color: hsl(0, 100%, 40%);">-uint32_t clear_gpe_status(void);</span><br><span> void clear_pmc_status(void);</span><br><span style="color: hsl(0, 100%, 40%);">-void enable_smi(uint32_t mask);</span><br><span style="color: hsl(0, 100%, 40%);">-void disable_smi(uint32_t mask);</span><br><span style="color: hsl(0, 100%, 40%);">-void enable_pm1(uint16_t events);</span><br><span style="color: hsl(0, 100%, 40%);">-void enable_pm1_control(uint32_t mask);</span><br><span style="color: hsl(0, 100%, 40%);">-void disable_pm1_control(uint32_t mask);</span><br><span style="color: hsl(0, 100%, 40%);">-void enable_gpe(uint32_t mask);</span><br><span style="color: hsl(0, 100%, 40%);">-void disable_gpe(uint32_t mask);</span><br><span style="color: hsl(0, 100%, 40%);">-void disable_all_gpe(void);</span><br><span> </span><br><span> #endif /* _DENVERTON_NS_PM_H_ */</span><br><span>diff --git a/src/soc/intel/denverton_ns/pmutil.c b/src/soc/intel/denverton_ns/pmutil.c</span><br><span>index 6eb7db8..0d19644 100644</span><br><span>--- a/src/soc/intel/denverton_ns/pmutil.c</span><br><span>+++ b/src/soc/intel/denverton_ns/pmutil.c</span><br><span>@@ -19,29 +19,12 @@</span><br><span> #include <arch/io.h></span><br><span> #include <console/console.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <intelblocks/pmclib.h></span><br><span> #include <soc/iomap.h></span><br><span> #include <soc/soc_util.h></span><br><span> #include <soc/pm.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void print_num_status_bits(int num_bits, uint32_t status,</span><br><span style="color: hsl(0, 100%, 40%);">- const char * const bit_names[])</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- int i;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (!status)</span><br><span style="color: hsl(0, 100%, 40%);">- return;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- for (i = num_bits - 1; i >= 0; i--) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (status & (1 << i)) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (bit_names[i])</span><br><span style="color: hsl(0, 100%, 40%);">- printk(BIOS_DEBUG, "%s ", bit_names[i]);</span><br><span style="color: hsl(0, 100%, 40%);">- else</span><br><span style="color: hsl(0, 100%, 40%);">- printk(BIOS_DEBUG, "BIT%d ", i);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static uint32_t print_smi_status(uint32_t smi_sts)</span><br><span style="color: hsl(120, 100%, 40%);">+const char *const *soc_smi_sts_array(size_t *a)</span><br><span> {</span><br><span> static const char * const smi_sts_bits[] = {</span><br><span> [2] = "BIOS",</span><br><span>@@ -67,93 +50,11 @@</span><br><span> [31] = "LEGACY_USB3",</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (!smi_sts)</span><br><span style="color: hsl(0, 100%, 40%);">- return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- printk(BIOS_DEBUG, "SMI_STS: ");</span><br><span style="color: hsl(0, 100%, 40%);">- print_num_status_bits(ARRAY_SIZE(smi_sts_bits), smi_sts, smi_sts_bits);</span><br><span style="color: hsl(0, 100%, 40%);">- printk(BIOS_DEBUG, "\n");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- return smi_sts;</span><br><span style="color: hsl(120, 100%, 40%);">+ *a = ARRAY_SIZE(smi_sts_bits);</span><br><span style="color: hsl(120, 100%, 40%);">+ return smi_sts_bits;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static uint32_t reset_smi_status(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t pmbase = get_pmbase();</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t smi_sts = inl((uint16_t)(pmbase + SMI_STS));</span><br><span style="color: hsl(0, 100%, 40%);">- outl(smi_sts, (uint16_t)(pmbase + SMI_STS));</span><br><span style="color: hsl(0, 100%, 40%);">- return smi_sts;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-uint32_t clear_smi_status(void) { return print_smi_status(reset_smi_status()); }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void enable_smi(uint32_t mask)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t pmbase = get_pmbase();</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t smi_en = inl((uint16_t)(pmbase + SMI_EN));</span><br><span style="color: hsl(0, 100%, 40%);">- smi_en |= mask;</span><br><span style="color: hsl(0, 100%, 40%);">- outl(smi_en, (uint16_t)(pmbase + SMI_EN));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void disable_smi(uint32_t mask)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t pmbase = get_pmbase();</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t smi_en = inl((uint16_t)(pmbase + SMI_EN));</span><br><span style="color: hsl(0, 100%, 40%);">- smi_en &= ~mask;</span><br><span style="color: hsl(0, 100%, 40%);">- outl(smi_en, (uint16_t)(pmbase + SMI_EN));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void enable_pm1_control(uint32_t mask)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t pmbase = get_pmbase();</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t pm1_cnt = inl((uint16_t)(pmbase + PM1_CNT));</span><br><span style="color: hsl(0, 100%, 40%);">- pm1_cnt |= mask;</span><br><span style="color: hsl(0, 100%, 40%);">- outl(pm1_cnt, (uint16_t)(pmbase + PM1_CNT));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void disable_pm1_control(uint32_t mask)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t pmbase = get_pmbase();</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t pm1_cnt = inl((uint16_t)(pmbase + PM1_CNT));</span><br><span style="color: hsl(0, 100%, 40%);">- pm1_cnt &= ~mask;</span><br><span style="color: hsl(0, 100%, 40%);">- outl(pm1_cnt, (uint16_t)(pmbase + PM1_CNT));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static uint16_t reset_pm1_status(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t pmbase = get_pmbase();</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t pm1_sts = inw((uint16_t)(pmbase + PM1_STS));</span><br><span style="color: hsl(0, 100%, 40%);">- outw(pm1_sts, (uint16_t)(pmbase + PM1_STS));</span><br><span style="color: hsl(0, 100%, 40%);">- return pm1_sts;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static uint16_t print_pm1_status(uint16_t pm1_sts)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- static const char * const pm1_sts_bits[] = {</span><br><span style="color: hsl(0, 100%, 40%);">- [0] = "TMROF", [4] = "BM", [5] = "GBL",</span><br><span style="color: hsl(0, 100%, 40%);">- [8] = "PWRBTN", [10] = "RTC", [11] = "PRBTNOR",</span><br><span style="color: hsl(0, 100%, 40%);">- [15] = "WAK",</span><br><span style="color: hsl(0, 100%, 40%);">- };</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- if (!pm1_sts)</span><br><span style="color: hsl(0, 100%, 40%);">- return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- printk(BIOS_SPEW, "PM1_STS: ");</span><br><span style="color: hsl(0, 100%, 40%);">- print_num_status_bits(ARRAY_SIZE(pm1_sts_bits), pm1_sts, pm1_sts_bits);</span><br><span style="color: hsl(0, 100%, 40%);">- printk(BIOS_SPEW, "\n");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- return pm1_sts;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-uint16_t clear_pm1_status(void) { return print_pm1_status(reset_pm1_status()); }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void enable_pm1(uint16_t events)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t pmbase = get_pmbase();</span><br><span style="color: hsl(0, 100%, 40%);">- outw(events, (uint16_t)(pmbase + PM1_EN));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static uint32_t print_tco_status(uint32_t tco_sts)</span><br><span style="color: hsl(120, 100%, 40%);">+const char *const *soc_tco_sts_array(size_t *a)</span><br><span> {</span><br><span> static const char * const tco_sts_bits[] = {</span><br><span> [0] = "NMI2SMI", [1] = "OS_TCO_SMI",</span><br><span>@@ -164,17 +65,11 @@</span><br><span> [17] = "SECOND_TO", [20] = "SMLINK_SLV_SMI",</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (!tco_sts)</span><br><span style="color: hsl(0, 100%, 40%);">- return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- printk(BIOS_DEBUG, "TCO_STS: ");</span><br><span style="color: hsl(0, 100%, 40%);">- print_num_status_bits(ARRAY_SIZE(tco_sts_bits), tco_sts, tco_sts_bits);</span><br><span style="color: hsl(0, 100%, 40%);">- printk(BIOS_DEBUG, "\n");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- return tco_sts;</span><br><span style="color: hsl(120, 100%, 40%);">+ *a = ARRAY_SIZE(tco_sts_bits);</span><br><span style="color: hsl(120, 100%, 40%);">+ return tco_sts_bits;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static uint32_t reset_tco_status(void)</span><br><span style="color: hsl(120, 100%, 40%);">+uint32_t soc_reset_tco_status(void)</span><br><span> {</span><br><span> uint16_t tcobase = get_tcobase();</span><br><span> uint32_t tco_sts = inl((uint16_t)(tcobase + TCO1_STS));</span><br><span>@@ -184,35 +79,7 @@</span><br><span> return tco_sts & tco_en;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-uint32_t clear_tco_status(void) { return print_tco_status(reset_tco_status()); }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void enable_gpe(uint32_t mask)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t pmbase = get_pmbase();</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t gpe0_en = inl((uint16_t)(pmbase + GPE0_EN(GPE_STD)));</span><br><span style="color: hsl(0, 100%, 40%);">- gpe0_en |= mask;</span><br><span style="color: hsl(0, 100%, 40%);">- outl(gpe0_en, (uint16_t)(pmbase + GPE0_EN(GPE_STD)));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void disable_gpe(uint32_t mask)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t pmbase = get_pmbase();</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t gpe0_en = inl((uint16_t)(pmbase + GPE0_EN(GPE_STD)));</span><br><span style="color: hsl(0, 100%, 40%);">- gpe0_en &= ~mask;</span><br><span style="color: hsl(0, 100%, 40%);">- outl(gpe0_en, (uint16_t)(pmbase + GPE0_EN(GPE_STD)));</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-void disable_all_gpe(void) { disable_gpe(~0); }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static uint32_t reset_gpe_status(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t pmbase = get_pmbase();</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t gpe_sts = inl((uint16_t)(pmbase + GPE0_STS(GPE_STD)));</span><br><span style="color: hsl(0, 100%, 40%);">- outl(gpe_sts, (uint16_t)(pmbase + GPE0_STS(GPE_STD)));</span><br><span style="color: hsl(0, 100%, 40%);">- return gpe_sts;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static uint32_t print_gpe_sts(uint32_t gpe_sts)</span><br><span style="color: hsl(120, 100%, 40%);">+const char *const *soc_std_gpe_sts_array(size_t *a)</span><br><span> {</span><br><span> static const char * const gpe_sts_bits[] = {</span><br><span> [0] = "GPIO_0", [1] = "GPIO_1",</span><br><span>@@ -233,16 +100,8 @@</span><br><span> [30] = "GPIO_30", [31] = "GPIO_31",</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if (!gpe_sts)</span><br><span style="color: hsl(0, 100%, 40%);">- return gpe_sts;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- printk(BIOS_DEBUG, "GPE0a_STS: ");</span><br><span style="color: hsl(0, 100%, 40%);">- print_num_status_bits(ARRAY_SIZE(gpe_sts_bits), gpe_sts, gpe_sts_bits);</span><br><span style="color: hsl(0, 100%, 40%);">- printk(BIOS_DEBUG, "\n");</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- return gpe_sts;</span><br><span style="color: hsl(120, 100%, 40%);">+ *a = ARRAY_SIZE(gpe_sts_bits);</span><br><span style="color: hsl(120, 100%, 40%);">+ return gpe_sts_bits;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-uint32_t clear_gpe_status(void) { return print_gpe_sts(reset_gpe_status()); }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> void clear_pmc_status(void) { /* TODO */ }</span><br><span>diff --git a/src/soc/intel/denverton_ns/smihandler.c b/src/soc/intel/denverton_ns/smihandler.c</span><br><span>index e434c1c..6fb3ba1 100644</span><br><span>--- a/src/soc/intel/denverton_ns/smihandler.c</span><br><span>+++ b/src/soc/intel/denverton_ns/smihandler.c</span><br><span>@@ -25,6 +25,7 @@</span><br><span> #include <device/pci_def.h></span><br><span> #include <elog.h></span><br><span> #include <intelblocks/fast_spi.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <intelblocks/pmclib.h></span><br><span> #include <spi-generic.h></span><br><span> #include <soc/iomap.h></span><br><span> #include <soc/soc_util.h></span><br><span>@@ -52,7 +53,7 @@</span><br><span> return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void southbridge_smi_set_eos(void) { enable_smi(EOS); }</span><br><span style="color: hsl(120, 100%, 40%);">+void southbridge_smi_set_eos(void) { pmc_enable_smi(EOS); }</span><br><span> </span><br><span> global_nvs_t *smm_get_gnvs(void) { return gnvs; }</span><br><span> </span><br><span>@@ -98,7 +99,7 @@</span><br><span> uint16_t pmbase = get_pmbase();</span><br><span> </span><br><span> /* First, disable further SMIs */</span><br><span style="color: hsl(0, 100%, 40%);">- disable_smi(SLP_SMI_EN);</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_disable_smi(SLP_SMI_EN);</span><br><span> </span><br><span> /* Figure out SLP_TYP */</span><br><span> reg32 = inl((uint16_t)(pmbase + PM1_CNT));</span><br><span>@@ -131,7 +132,7 @@</span><br><span> printk(BIOS_DEBUG, "SMI#: Entering S5 (Soft Power off)\n");</span><br><span> </span><br><span> /* Disable all GPE */</span><br><span style="color: hsl(0, 100%, 40%);">- disable_all_gpe();</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_disable_all_gpe();</span><br><span> </span><br><span> /* also iterates over all bridges on bus 0 */</span><br><span> busmaster_disable_on_bus(0);</span><br><span>@@ -145,7 +146,7 @@</span><br><span> * event again. We need to set BIT13 (SLP_EN) though to make the</span><br><span> * sleep happen.</span><br><span> */</span><br><span style="color: hsl(0, 100%, 40%);">- enable_pm1_control(SLP_EN);</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_enable_pm1_control(SLP_EN);</span><br><span> </span><br><span> /* Make sure to stop executing code here for S3/S4/S5 */</span><br><span> if (slp_typ > 1)</span><br><span>@@ -158,7 +159,7 @@</span><br><span> reg32 = inl((uint16_t)(pmbase + PM1_CNT));</span><br><span> if (reg32 & SCI_EN) {</span><br><span> /* The OS is not an ACPI OS, so we set the state to S0 */</span><br><span style="color: hsl(0, 100%, 40%);">- disable_pm1_control(SLP_EN | SLP_TYP);</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_disable_pm1_control(SLP_EN | SLP_TYP);</span><br><span> }</span><br><span> }</span><br><span> </span><br><span>@@ -237,11 +238,11 @@</span><br><span> printk(BIOS_DEBUG, "P-state control\n");</span><br><span> break;</span><br><span> case APM_CNT_ACPI_DISABLE:</span><br><span style="color: hsl(0, 100%, 40%);">- disable_pm1_control(SCI_EN);</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_disable_pm1_control(SCI_EN);</span><br><span> printk(BIOS_DEBUG, "SMI#: ACPI disabled.\n");</span><br><span> break;</span><br><span> case APM_CNT_ACPI_ENABLE:</span><br><span style="color: hsl(0, 100%, 40%);">- enable_pm1_control(SCI_EN);</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_enable_pm1_control(SCI_EN);</span><br><span> printk(BIOS_DEBUG, "SMI#: ACPI enabled.\n");</span><br><span> break;</span><br><span> case APM_CNT_FINALIZE:</span><br><span>@@ -268,23 +269,23 @@</span><br><span> </span><br><span> static void southbridge_smi_pm1(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- uint16_t pm1_sts = clear_pm1_status();</span><br><span style="color: hsl(120, 100%, 40%);">+ uint16_t pm1_sts = pmc_clear_pm1_status();</span><br><span> </span><br><span> /* While OSPM is not active, poweroff immediately</span><br><span> * on a power button event.</span><br><span> */</span><br><span> if (pm1_sts & PWRBTN_STS) {</span><br><span> // power button pressed</span><br><span style="color: hsl(0, 100%, 40%);">- disable_pm1_control(-1UL);</span><br><span style="color: hsl(0, 100%, 40%);">- enable_pm1_control(SLP_EN | (SLP_TYP_S5 << SLP_TYP_SHIFT));</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_disable_pm1_control(-1UL);</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_enable_pm1_control(SLP_EN | (SLP_TYP_S5 << SLP_TYP_SHIFT));</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void southbridge_smi_gpe0(void) { clear_gpe_status(); }</span><br><span style="color: hsl(120, 100%, 40%);">+static void southbridge_smi_gpe0(void) { pmc_clear_all_gpe_status(); }</span><br><span> </span><br><span> static void southbridge_smi_tco(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t tco_sts = clear_tco_status();</span><br><span style="color: hsl(120, 100%, 40%);">+ uint32_t tco_sts = pmc_clear_tco_status();</span><br><span> </span><br><span> /* Any TCO event? */</span><br><span> if (!tco_sts)</span><br><span>@@ -354,7 +355,7 @@</span><br><span> /* We need to clear the SMI status registers, or we won't see what's</span><br><span> * happening in the following calls.</span><br><span> */</span><br><span style="color: hsl(0, 100%, 40%);">- smi_sts = clear_smi_status();</span><br><span style="color: hsl(120, 100%, 40%);">+ smi_sts = pmc_clear_smi_status();</span><br><span> </span><br><span> /* Call SMI sub handler for each of the status bits */</span><br><span> for (i = 0; i < ARRAY_SIZE(southbridge_smi); i++) {</span><br><span>diff --git a/src/soc/intel/denverton_ns/smm.c b/src/soc/intel/denverton_ns/smm.c</span><br><span>index 732aed4..078ffd2 100644</span><br><span>--- a/src/soc/intel/denverton_ns/smm.c</span><br><span>+++ b/src/soc/intel/denverton_ns/smm.c</span><br><span>@@ -24,6 +24,7 @@</span><br><span> #include <cpu/x86/smm.h></span><br><span> #include <string.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <intelblocks/pmclib.h></span><br><span> #include <soc/iomap.h></span><br><span> #include <soc/soc_util.h></span><br><span> #include <soc/pm.h></span><br><span>@@ -49,10 +50,10 @@</span><br><span> }</span><br><span> </span><br><span> /* Dump and clear status registers */</span><br><span style="color: hsl(0, 100%, 40%);">- clear_smi_status();</span><br><span style="color: hsl(0, 100%, 40%);">- clear_pm1_status();</span><br><span style="color: hsl(0, 100%, 40%);">- clear_tco_status();</span><br><span style="color: hsl(0, 100%, 40%);">- clear_gpe_status();</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_clear_smi_status();</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_clear_pm1_status();</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_clear_tco_status();</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_clear_all_gpe_status();</span><br><span> clear_pmc_status();</span><br><span> }</span><br><span> </span><br><span>@@ -61,8 +62,8 @@</span><br><span> </span><br><span> printk(BIOS_DEBUG, "Enabling SMIs.\n");</span><br><span> /* Configure events Disable pcie wake. */</span><br><span style="color: hsl(0, 100%, 40%);">- enable_pm1(PWRBTN_EN | GBL_EN | PCIEXPWAK_DIS);</span><br><span style="color: hsl(0, 100%, 40%);">- disable_gpe(PME_B0_EN);</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_enable_pm1(PWRBTN_EN | GBL_EN | PCIEXPWAK_DIS);</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_disable_std_gpe(PME_B0_EN);</span><br><span> </span><br><span> /* Enable SMI generation:</span><br><span> * - on APMC writes (io 0xb2)</span><br><span>@@ -72,7 +73,7 @@</span><br><span> * - on TCO events</span><br><span> * - on microcontroller writes (io 0x62/0x66)</span><br><span> */</span><br><span style="color: hsl(0, 100%, 40%);">- enable_smi(APMC_EN | SLP_SMI_EN | GBL_SMI_EN | EOS);</span><br><span style="color: hsl(120, 100%, 40%);">+ pmc_enable_smi(APMC_EN | SLP_SMI_EN | GBL_SMI_EN | EOS);</span><br><span> }</span><br><span> </span><br><span> void smm_setup_structures(void *gnvs, void *tcg, void *smi1)</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/25427">change 25427</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/25427"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: If31e7102bf1b47c7ae94b86d981b762eda0a19e5 </div>
<div style="display:none"> Gerrit-Change-Number: 25427 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Julien Viard de Galbert <jviarddegalbert@online.net> </div>