[coreboot-gerrit] Change in coreboot[master]: sb/intel/common/pmutil: Add and use method to switch sleep state

Patrick Rudolph (Code Review) gerrit at coreboot.org
Wed Aug 1 12:53:39 CEST 2018


Patrick Rudolph has uploaded this change for review. ( https://review.coreboot.org/27774


Change subject: sb/intel/common/pmutil: Add and use method to switch sleep state
......................................................................

sb/intel/common/pmutil: Add and use method to switch sleep state

Add pm_enter_sleepstate() to switch to a different sleep state.
Make use of it on google mainboards.

Change-Id: I0cc7aebd672f3c30b55cfe591a77ee1c65036d28
Signed-off-by: Patrick Rudolph <patrick.rudolph at 9elements.com>
---
M src/mainboard/google/link/mainboard_smi.c
M src/mainboard/google/parrot/smihandler.c
M src/mainboard/google/stout/ec.c
M src/mainboard/google/stout/mainboard_smi.c
M src/mainboard/samsung/lumpy/smihandler.c
M src/southbridge/intel/common/pmutil.c
M src/southbridge/intel/common/pmutil.h
7 files changed, 48 insertions(+), 10 deletions(-)



  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/74/27774/1

diff --git a/src/mainboard/google/link/mainboard_smi.c b/src/mainboard/google/link/mainboard_smi.c
index 0bd164e..2b1bf5c 100644
--- a/src/mainboard/google/link/mainboard_smi.c
+++ b/src/mainboard/google/link/mainboard_smi.c
@@ -20,7 +20,7 @@
 #include <southbridge/intel/bd82x6x/nvs.h>
 #include <southbridge/intel/bd82x6x/pch.h>
 #include <southbridge/intel/bd82x6x/me.h>
-#include <southbridge/intel/common/pmbase.h>
+#include <southbridge/intel/common/pmutil.h>
 #include <northbridge/intel/sandybridge/sandybridge.h>
 #include <cpu/intel/model_206ax/model_206ax.h>
 #include <elog.h>
@@ -44,7 +44,7 @@
 		printk(BIOS_DEBUG, "LID CLOSED, SHUTDOWN\n");
 
 		/* Go to S5 */
-		write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));
+		pm_enter_sleepstate(5);
 		break;
 	}
 
diff --git a/src/mainboard/google/parrot/smihandler.c b/src/mainboard/google/parrot/smihandler.c
index e30f78f..694aa7a 100644
--- a/src/mainboard/google/parrot/smihandler.c
+++ b/src/mainboard/google/parrot/smihandler.c
@@ -20,7 +20,6 @@
 #include <southbridge/intel/bd82x6x/pch.h>
 #include <southbridge/intel/bd82x6x/me.h>
 #include <southbridge/intel/common/pmutil.h>
-#include <southbridge/intel/common/pmbase.h>
 #include <northbridge/intel/sandybridge/sandybridge.h>
 #include <cpu/intel/model_206ax/model_206ax.h>
 #include <elog.h>
@@ -54,7 +53,7 @@
 		elog_add_event_byte(ELOG_TYPE_EC_EVENT, EC_EVENT_LID_CLOSED);
 #endif
 		/* Go to S5 */
-		write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));
+		pm_enter_sleepstate(5);
 		break;
 	}
 
@@ -75,7 +74,7 @@
 		elog_add_event_byte(ELOG_TYPE_EC_EVENT, EC_EVENT_LID_CLOSED);
 #endif
 		/* Go to S5 */
-		write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));
+		pm_enter_sleepstate(5);
 	}
 }
 
diff --git a/src/mainboard/google/stout/ec.c b/src/mainboard/google/stout/ec.c
index 229f919..eaf0870 100644
--- a/src/mainboard/google/stout/ec.c
+++ b/src/mainboard/google/stout/ec.c
@@ -115,7 +115,7 @@
 		printk(BIOS_ERR, "EC critical_shutdown");
 
 		/* Go to S5 */
-		write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));
+		pm_enter_sleepstate(5);
 	}
 }
 #endif //__SMM__
diff --git a/src/mainboard/google/stout/mainboard_smi.c b/src/mainboard/google/stout/mainboard_smi.c
index 6a51645..ce693dc 100644
--- a/src/mainboard/google/stout/mainboard_smi.c
+++ b/src/mainboard/google/stout/mainboard_smi.c
@@ -19,7 +19,7 @@
 #include <southbridge/intel/bd82x6x/nvs.h>
 #include <southbridge/intel/bd82x6x/pch.h>
 #include <southbridge/intel/bd82x6x/me.h>
-#include <southbridge/intel/common/pmbase.h>
+#include <southbridge/intel/common/pmutil.h>
 #include <northbridge/intel/sandybridge/sandybridge.h>
 #include <cpu/intel/model_206ax/model_206ax.h>
 
@@ -35,7 +35,7 @@
 	case EC_SMI_LID_CLOSED:
 		printk(BIOS_DEBUG, "LID CLOSED, SHUTDOWN\n");
 		/* Go to S5 */
-		write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));
+		pm_enter_sleepstate(5);
 		break;
 	}
 
diff --git a/src/mainboard/samsung/lumpy/smihandler.c b/src/mainboard/samsung/lumpy/smihandler.c
index f2c2dc3..f2c8d10 100644
--- a/src/mainboard/samsung/lumpy/smihandler.c
+++ b/src/mainboard/samsung/lumpy/smihandler.c
@@ -19,7 +19,7 @@
 #include <southbridge/intel/bd82x6x/nvs.h>
 #include <southbridge/intel/bd82x6x/pch.h>
 #include <southbridge/intel/bd82x6x/me.h>
-#include <southbridge/intel/common/pmbase.h>
+#include <southbridge/intel/common/pmutil.h>
 #include <northbridge/intel/sandybridge/sandybridge.h>
 #include <cpu/intel/model_206ax/model_206ax.h>
 #include <ec/smsc/mec1308/ec.h>
@@ -36,7 +36,7 @@
 		printk(BIOS_DEBUG, "LID CLOSED, SHUTDOWN\n");
 
 		/* Go to S5 */
-		write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT) | (0xf << 10));
+		pm_enter_sleepstate(5);
 		break;
 	}
 
diff --git a/src/southbridge/intel/common/pmutil.c b/src/southbridge/intel/common/pmutil.c
index ac72eba..06d0882 100644
--- a/src/southbridge/intel/common/pmutil.c
+++ b/src/southbridge/intel/common/pmutil.c
@@ -24,6 +24,8 @@
 #include <pc80/mc146818rtc.h>
 #include <southbridge/intel/common/pmbase.h>
 #include <southbridge/intel/common/gpio.h>
+#include <arch/acpi.h>
+
 
 #include "pmutil.h"
 
@@ -234,3 +236,39 @@
 
 	return reg16;
 }
+
+/**
+ * @brief Enter the requested sleep state
+ * @arg Sx_state sleep state (0 - 5)
+ */
+void pm_enter_sleepstate(u8 Sx_state)
+{
+	u32 reg32;
+
+	reg32 = read_pmbase32(PM1_CNT);
+	reg32 &= ~SLP_TYP;
+
+	switch (Sx_state) {
+	case 0:
+		reg32 |= SLP_TYP_S0 << SLP_TYP_SHIFT;
+		break;
+	case 1:
+		reg32 |= SLP_TYP_S1 << SLP_TYP_SHIFT;
+		break;
+	case 3:
+		reg32 |= SLP_TYP_S3 << SLP_TYP_SHIFT;
+		break;
+	case 4:
+		reg32 |= SLP_TYP_S4 << SLP_TYP_SHIFT;
+		break;
+	case 5:
+		reg32 |= SLP_TYP_S5 << SLP_TYP_SHIFT;
+		break;
+	default:
+		return;
+	}
+
+	reg32 |= SLP_EN;
+
+	write_pmbase32(PM1_CNT, reg32);
+}
diff --git a/src/southbridge/intel/common/pmutil.h b/src/southbridge/intel/common/pmutil.h
index 273e0f8..983ba41 100644
--- a/src/southbridge/intel/common/pmutil.h
+++ b/src/southbridge/intel/common/pmutil.h
@@ -119,6 +119,7 @@
 u16 reset_alt_gp_smi_status(void);
 void southbridge_smm_xhci_sleep(u8 slp_type);
 void gpi_route_interrupt(u8 gpi, u8 mode);
+void pm_enter_sleepstate(u8 Sx_state);
 void southbridge_gate_memory_reset(void);
 void southbridge_update_gnvs(u8 apm_cnt, int *smm_done);
 void southbridge_finalize_all(void);

-- 
To view, visit https://review.coreboot.org/27774
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0cc7aebd672f3c30b55cfe591a77ee1c65036d28
Gerrit-Change-Number: 27774
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Rudolph <patrick.rudolph at 9elements.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180801/421c135a/attachment.html>


More information about the coreboot-gerrit mailing list