<p>Patrick Rudolph has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/27774">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">sb/intel/common/pmutil: Add and use method to switch sleep state<br><br>Add pm_enter_sleepstate() to switch to a different sleep state.<br>Make use of it on google mainboards.<br><br>Change-Id: I0cc7aebd672f3c30b55cfe591a77ee1c65036d28<br>Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com><br>---<br>M src/mainboard/google/link/mainboard_smi.c<br>M src/mainboard/google/parrot/smihandler.c<br>M src/mainboard/google/stout/ec.c<br>M src/mainboard/google/stout/mainboard_smi.c<br>M src/mainboard/samsung/lumpy/smihandler.c<br>M src/southbridge/intel/common/pmutil.c<br>M src/southbridge/intel/common/pmutil.h<br>7 files changed, 48 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/74/27774/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/mainboard/google/link/mainboard_smi.c b/src/mainboard/google/link/mainboard_smi.c</span><br><span>index 0bd164e..2b1bf5c 100644</span><br><span>--- a/src/mainboard/google/link/mainboard_smi.c</span><br><span>+++ b/src/mainboard/google/link/mainboard_smi.c</span><br><span>@@ -20,7 +20,7 @@</span><br><span> #include <southbridge/intel/bd82x6x/nvs.h></span><br><span> #include <southbridge/intel/bd82x6x/pch.h></span><br><span> #include <southbridge/intel/bd82x6x/me.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <southbridge/intel/common/pmbase.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <southbridge/intel/common/pmutil.h></span><br><span> #include <northbridge/intel/sandybridge/sandybridge.h></span><br><span> #include <cpu/intel/model_206ax/model_206ax.h></span><br><span> #include <elog.h></span><br><span>@@ -44,7 +44,7 @@</span><br><span>                printk(BIOS_DEBUG, "LID CLOSED, SHUTDOWN\n");</span><br><span> </span><br><span>          /* Go to S5 */</span><br><span style="color: hsl(0, 100%, 40%);">-          write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));</span><br><span style="color: hsl(120, 100%, 40%);">+          pm_enter_sleepstate(5);</span><br><span>              break;</span><br><span>       }</span><br><span> </span><br><span>diff --git a/src/mainboard/google/parrot/smihandler.c b/src/mainboard/google/parrot/smihandler.c</span><br><span>index e30f78f..694aa7a 100644</span><br><span>--- a/src/mainboard/google/parrot/smihandler.c</span><br><span>+++ b/src/mainboard/google/parrot/smihandler.c</span><br><span>@@ -20,7 +20,6 @@</span><br><span> #include <southbridge/intel/bd82x6x/pch.h></span><br><span> #include <southbridge/intel/bd82x6x/me.h></span><br><span> #include <southbridge/intel/common/pmutil.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <southbridge/intel/common/pmbase.h></span><br><span> #include <northbridge/intel/sandybridge/sandybridge.h></span><br><span> #include <cpu/intel/model_206ax/model_206ax.h></span><br><span> #include <elog.h></span><br><span>@@ -54,7 +53,7 @@</span><br><span>                 elog_add_event_byte(ELOG_TYPE_EC_EVENT, EC_EVENT_LID_CLOSED);</span><br><span> #endif</span><br><span>              /* Go to S5 */</span><br><span style="color: hsl(0, 100%, 40%);">-          write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));</span><br><span style="color: hsl(120, 100%, 40%);">+          pm_enter_sleepstate(5);</span><br><span>              break;</span><br><span>       }</span><br><span> </span><br><span>@@ -75,7 +74,7 @@</span><br><span>            elog_add_event_byte(ELOG_TYPE_EC_EVENT, EC_EVENT_LID_CLOSED);</span><br><span> #endif</span><br><span>              /* Go to S5 */</span><br><span style="color: hsl(0, 100%, 40%);">-          write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));</span><br><span style="color: hsl(120, 100%, 40%);">+          pm_enter_sleepstate(5);</span><br><span>      }</span><br><span> }</span><br><span> </span><br><span>diff --git a/src/mainboard/google/stout/ec.c b/src/mainboard/google/stout/ec.c</span><br><span>index 229f919..eaf0870 100644</span><br><span>--- a/src/mainboard/google/stout/ec.c</span><br><span>+++ b/src/mainboard/google/stout/ec.c</span><br><span>@@ -115,7 +115,7 @@</span><br><span>            printk(BIOS_ERR, "EC critical_shutdown");</span><br><span> </span><br><span>              /* Go to S5 */</span><br><span style="color: hsl(0, 100%, 40%);">-          write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));</span><br><span style="color: hsl(120, 100%, 40%);">+          pm_enter_sleepstate(5);</span><br><span>      }</span><br><span> }</span><br><span> #endif //__SMM__</span><br><span>diff --git a/src/mainboard/google/stout/mainboard_smi.c b/src/mainboard/google/stout/mainboard_smi.c</span><br><span>index 6a51645..ce693dc 100644</span><br><span>--- a/src/mainboard/google/stout/mainboard_smi.c</span><br><span>+++ b/src/mainboard/google/stout/mainboard_smi.c</span><br><span>@@ -19,7 +19,7 @@</span><br><span> #include <southbridge/intel/bd82x6x/nvs.h></span><br><span> #include <southbridge/intel/bd82x6x/pch.h></span><br><span> #include <southbridge/intel/bd82x6x/me.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <southbridge/intel/common/pmbase.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <southbridge/intel/common/pmutil.h></span><br><span> #include <northbridge/intel/sandybridge/sandybridge.h></span><br><span> #include <cpu/intel/model_206ax/model_206ax.h></span><br><span> </span><br><span>@@ -35,7 +35,7 @@</span><br><span>         case EC_SMI_LID_CLOSED:</span><br><span>              printk(BIOS_DEBUG, "LID CLOSED, SHUTDOWN\n");</span><br><span>              /* Go to S5 */</span><br><span style="color: hsl(0, 100%, 40%);">-          write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));</span><br><span style="color: hsl(120, 100%, 40%);">+          pm_enter_sleepstate(5);</span><br><span>              break;</span><br><span>       }</span><br><span> </span><br><span>diff --git a/src/mainboard/samsung/lumpy/smihandler.c b/src/mainboard/samsung/lumpy/smihandler.c</span><br><span>index f2c2dc3..f2c8d10 100644</span><br><span>--- a/src/mainboard/samsung/lumpy/smihandler.c</span><br><span>+++ b/src/mainboard/samsung/lumpy/smihandler.c</span><br><span>@@ -19,7 +19,7 @@</span><br><span> #include <southbridge/intel/bd82x6x/nvs.h></span><br><span> #include <southbridge/intel/bd82x6x/pch.h></span><br><span> #include <southbridge/intel/bd82x6x/me.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <southbridge/intel/common/pmbase.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <southbridge/intel/common/pmutil.h></span><br><span> #include <northbridge/intel/sandybridge/sandybridge.h></span><br><span> #include <cpu/intel/model_206ax/model_206ax.h></span><br><span> #include <ec/smsc/mec1308/ec.h></span><br><span>@@ -36,7 +36,7 @@</span><br><span>                 printk(BIOS_DEBUG, "LID CLOSED, SHUTDOWN\n");</span><br><span> </span><br><span>          /* Go to S5 */</span><br><span style="color: hsl(0, 100%, 40%);">-          write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));</span><br><span style="color: hsl(120, 100%, 40%);">+          pm_enter_sleepstate(5);</span><br><span>              break;</span><br><span>       }</span><br><span> </span><br><span>diff --git a/src/southbridge/intel/common/pmutil.c b/src/southbridge/intel/common/pmutil.c</span><br><span>index ac72eba..06d0882 100644</span><br><span>--- a/src/southbridge/intel/common/pmutil.c</span><br><span>+++ b/src/southbridge/intel/common/pmutil.c</span><br><span>@@ -24,6 +24,8 @@</span><br><span> #include <pc80/mc146818rtc.h></span><br><span> #include <southbridge/intel/common/pmbase.h></span><br><span> #include <southbridge/intel/common/gpio.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <arch/acpi.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> #include "pmutil.h"</span><br><span> </span><br><span>@@ -234,3 +236,39 @@</span><br><span> </span><br><span>      return reg16;</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/**</span><br><span style="color: hsl(120, 100%, 40%);">+ * @brief Enter the requested sleep state</span><br><span style="color: hsl(120, 100%, 40%);">+ * @arg Sx_state sleep state (0 - 5)</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+void pm_enter_sleepstate(u8 Sx_state)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 reg32;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  reg32 = read_pmbase32(PM1_CNT);</span><br><span style="color: hsl(120, 100%, 40%);">+       reg32 &= ~SLP_TYP;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      switch (Sx_state) {</span><br><span style="color: hsl(120, 100%, 40%);">+   case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+               reg32 |= SLP_TYP_S0 << SLP_TYP_SHIFT;</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+               reg32 |= SLP_TYP_S1 << SLP_TYP_SHIFT;</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+               reg32 |= SLP_TYP_S3 << SLP_TYP_SHIFT;</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+               reg32 |= SLP_TYP_S4 << SLP_TYP_SHIFT;</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+               reg32 |= SLP_TYP_S5 << SLP_TYP_SHIFT;</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   reg32 |= SLP_EN;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    write_pmbase32(PM1_CNT, reg32);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/southbridge/intel/common/pmutil.h b/src/southbridge/intel/common/pmutil.h</span><br><span>index 273e0f8..983ba41 100644</span><br><span>--- a/src/southbridge/intel/common/pmutil.h</span><br><span>+++ b/src/southbridge/intel/common/pmutil.h</span><br><span>@@ -119,6 +119,7 @@</span><br><span> u16 reset_alt_gp_smi_status(void);</span><br><span> void southbridge_smm_xhci_sleep(u8 slp_type);</span><br><span> void gpi_route_interrupt(u8 gpi, u8 mode);</span><br><span style="color: hsl(120, 100%, 40%);">+void pm_enter_sleepstate(u8 Sx_state);</span><br><span> void southbridge_gate_memory_reset(void);</span><br><span> void southbridge_update_gnvs(u8 apm_cnt, int *smm_done);</span><br><span> void southbridge_finalize_all(void);</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/27774">change 27774</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/27774"/><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: I0cc7aebd672f3c30b55cfe591a77ee1c65036d28 </div>
<div style="display:none"> Gerrit-Change-Number: 27774 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Patrick Rudolph <patrick.rudolph@9elements.com> </div>