<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>