summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Rudolph <siro@das-labor.org>2017-11-08 19:52:51 +0100
committerFelix Held <felix-coreboot@felixheld.de>2018-07-19 16:49:18 +0000
commit31fb846c59be4b24fe621b67012e57de90c75ad5 (patch)
tree81523c287b8ffcfb5db634d59aeaf9f3bdd17af6
parentf281b6d175905e625f481bf8b8a2b7b10d037582 (diff)
ec/lenovo/h8/acpi: Apply state on wake
Implement ACPI S3 resume control to restore the state before entering sleep. * Store the requested state wake state for bluetooth and WWAN. * Add new methods to init the state and apply the requested state on wake. * Call the new method on all devices. Change-Id: I13c08b8c6b1bf0f3deb25a464b26880d8469c005 Signed-off-by: Patrick Rudolph <siro@das-labor.org> Reviewed-on: https://review.coreboot.org/22377 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
-rw-r--r--src/ec/lenovo/h8/acpi/thinkpad.asl48
-rw-r--r--src/mainboard/lenovo/t400/acpi/platform.asl3
-rw-r--r--src/mainboard/lenovo/t420s/acpi/platform.asl3
-rw-r--r--src/mainboard/lenovo/t430/acpi/platform.asl4
-rw-r--r--src/mainboard/lenovo/t430s/acpi/platform.asl3
-rw-r--r--src/mainboard/lenovo/t520/acpi/platform.asl3
-rw-r--r--src/mainboard/lenovo/t530/acpi/platform.asl3
-rw-r--r--src/mainboard/lenovo/t60/acpi/platform.asl3
-rw-r--r--src/mainboard/lenovo/x1_carbon_gen1/acpi/platform.asl3
-rw-r--r--src/mainboard/lenovo/x200/acpi/platform.asl3
-rw-r--r--src/mainboard/lenovo/x201/acpi/platform.asl3
-rw-r--r--src/mainboard/lenovo/x220/acpi/platform.asl3
-rw-r--r--src/mainboard/lenovo/x230/acpi/platform.asl3
-rw-r--r--src/mainboard/lenovo/x60/acpi/platform.asl3
14 files changed, 80 insertions, 8 deletions
diff --git a/src/ec/lenovo/h8/acpi/thinkpad.asl b/src/ec/lenovo/h8/acpi/thinkpad.asl
index e67bc8f65f..8fb5716531 100644
--- a/src/ec/lenovo/h8/acpi/thinkpad.asl
+++ b/src/ec/lenovo/h8/acpi/thinkpad.asl
@@ -157,6 +157,11 @@ Device (HKEY)
Return (\_SB.PCI0.LPCB.EC.GSTS)
}
+ /* Has thinkpad_acpi module loaded */
+ Name (HAST, 0)
+
+ /* State after sleep */
+ Name (WBDC, 0)
/*
* Returns the current state:
* Bit 0: BT HW present
@@ -165,14 +170,15 @@ Device (HKEY)
*/
Method (GBDC, 0)
{
+ Store (One, HAST)
+
If (HBDC) {
Store(One, Local0)
If(\_SB.PCI0.LPCB.EC.BTEB)
{
Or(Local0, 2, Local0)
}
- /* FIXME: Implement state at resume, for now Enabled */
- Or(Local0, 4, Local0)
+ Or(Local0, ShiftLeft(WBDC, 2), Local0)
Return (Local0)
} Else {
Return (0)
@@ -186,14 +192,18 @@ Device (HKEY)
*/
Method (SBDC, 1)
{
+ Store (One, HAST)
+
If (HBDC) {
ShiftRight (And(Arg0, 2), 1, Local0)
Store (Local0, \_SB.PCI0.LPCB.EC.BTEB)
-
- /* FIXME: Store state at resume */
+ ShiftRight (And(Arg0, 4), 2, Local0)
+ Store (Local0, WBDC)
}
}
+ /* State after sleep */
+ Name (WWAN, 0)
/*
* Returns the current state:
* Bit 0: WWAN HW present
@@ -202,14 +212,15 @@ Device (HKEY)
*/
Method (GWAN, 0)
{
+ Store (One, HAST)
+
If (HWAN) {
Store(One, Local0)
If(\_SB.PCI0.LPCB.EC.WWEB)
{
Or(Local0, 2, Local0)
}
- /* FIXME: Implement state at resume, for now Enabled */
- Or(Local0, 4, Local0)
+ Or(Local0, ShiftLeft(WWAN, 2), Local0)
Return (Local0)
} Else {
Return (0)
@@ -223,11 +234,12 @@ Device (HKEY)
*/
Method (SWAN, 1)
{
+ Store (One, HAST)
+
If (HWAN) {
ShiftRight (And(Arg0, 2), 1, Local0)
Store (Local0, \_SB.PCI0.LPCB.EC.WWEB)
-
- /* FIXME: Store state at resume */
+ ShiftRight (And(Arg0, 4), 2, WWAN)
}
}
@@ -291,4 +303,24 @@ Device (HKEY)
Store (Local0, \_SB.PCI0.LPCB.EC.UWBE)
}
}
+
+ /*
+ * Store initial state
+ */
+ Method (_INI, 0, NotSerialized)
+ {
+ Store (\_SB.PCI0.LPCB.EC.BTEB, WBDC)
+ Store (\_SB.PCI0.LPCB.EC.WWEB, WWAN)
+ }
+
+ /*
+ * Called from _WAK
+ */
+ Method (WAKE, 1)
+ {
+ If (HAST) {
+ Store (WBDC, \_SB.PCI0.LPCB.EC.BTEB)
+ Store (WWAN, \_SB.PCI0.LPCB.EC.WWEB)
+ }
+ }
}
diff --git a/src/mainboard/lenovo/t400/acpi/platform.asl b/src/mainboard/lenovo/t400/acpi/platform.asl
index 5c6f96861d..85357a50df 100644
--- a/src/mainboard/lenovo/t400/acpi/platform.asl
+++ b/src/mainboard/lenovo/t400/acpi/platform.asl
@@ -31,6 +31,9 @@ Method(_PTS,1)
Method(_WAK,1)
{
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
// CPU specific part
// Notify PCI Express slots in case a card
diff --git a/src/mainboard/lenovo/t420s/acpi/platform.asl b/src/mainboard/lenovo/t420s/acpi/platform.asl
index 6f26c5a56f..e4c8a24f78 100644
--- a/src/mainboard/lenovo/t420s/acpi/platform.asl
+++ b/src/mainboard/lenovo/t420s/acpi/platform.asl
@@ -32,6 +32,9 @@ Method(_WAK,1)
Store (0, \_TZ.MEB1)
Store (0, \_TZ.MEB2)
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
/* Not implemented. */
Return(Package(){0,0})
}
diff --git a/src/mainboard/lenovo/t430/acpi/platform.asl b/src/mainboard/lenovo/t430/acpi/platform.asl
index efbf0ea7ef..13ea2c1b40 100644
--- a/src/mainboard/lenovo/t430/acpi/platform.asl
+++ b/src/mainboard/lenovo/t430/acpi/platform.asl
@@ -18,6 +18,10 @@ Method(_WAK,1)
/* ME may not be up yet. */
Store (0, \_TZ.MEB1)
Store (0, \_TZ.MEB2)
+
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
Return(Package(){0,0})
}
diff --git a/src/mainboard/lenovo/t430s/acpi/platform.asl b/src/mainboard/lenovo/t430s/acpi/platform.asl
index 6f26c5a56f..e4c8a24f78 100644
--- a/src/mainboard/lenovo/t430s/acpi/platform.asl
+++ b/src/mainboard/lenovo/t430s/acpi/platform.asl
@@ -32,6 +32,9 @@ Method(_WAK,1)
Store (0, \_TZ.MEB1)
Store (0, \_TZ.MEB2)
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
/* Not implemented. */
Return(Package(){0,0})
}
diff --git a/src/mainboard/lenovo/t520/acpi/platform.asl b/src/mainboard/lenovo/t520/acpi/platform.asl
index 6f26c5a56f..e4c8a24f78 100644
--- a/src/mainboard/lenovo/t520/acpi/platform.asl
+++ b/src/mainboard/lenovo/t520/acpi/platform.asl
@@ -32,6 +32,9 @@ Method(_WAK,1)
Store (0, \_TZ.MEB1)
Store (0, \_TZ.MEB2)
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
/* Not implemented. */
Return(Package(){0,0})
}
diff --git a/src/mainboard/lenovo/t530/acpi/platform.asl b/src/mainboard/lenovo/t530/acpi/platform.asl
index 9cd327a765..bf686f444f 100644
--- a/src/mainboard/lenovo/t530/acpi/platform.asl
+++ b/src/mainboard/lenovo/t530/acpi/platform.asl
@@ -32,6 +32,9 @@ Method(_WAK,1)
Store (0, \_TZ.MEB1)
Store (0, \_TZ.MEB2)
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
/* Not implemented. */
Return(Package(){0,0})
}
diff --git a/src/mainboard/lenovo/t60/acpi/platform.asl b/src/mainboard/lenovo/t60/acpi/platform.asl
index 006b6f0ba2..f9e991b984 100644
--- a/src/mainboard/lenovo/t60/acpi/platform.asl
+++ b/src/mainboard/lenovo/t60/acpi/platform.asl
@@ -29,6 +29,9 @@ Method(_PTS,1)
Method(_WAK,1)
{
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
// CPU specific part
// Notify PCI Express slots in case a card
diff --git a/src/mainboard/lenovo/x1_carbon_gen1/acpi/platform.asl b/src/mainboard/lenovo/x1_carbon_gen1/acpi/platform.asl
index 3e9225cd34..b63c91c641 100644
--- a/src/mainboard/lenovo/x1_carbon_gen1/acpi/platform.asl
+++ b/src/mainboard/lenovo/x1_carbon_gen1/acpi/platform.asl
@@ -30,6 +30,9 @@ Method(_WAK,1)
Store (0, \_TZ.MEB1)
Store (0, \_TZ.MEB2)
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
/* Not implemented. */
Return(Package(){0,0})
}
diff --git a/src/mainboard/lenovo/x200/acpi/platform.asl b/src/mainboard/lenovo/x200/acpi/platform.asl
index 5c6f96861d..85357a50df 100644
--- a/src/mainboard/lenovo/x200/acpi/platform.asl
+++ b/src/mainboard/lenovo/x200/acpi/platform.asl
@@ -31,6 +31,9 @@ Method(_PTS,1)
Method(_WAK,1)
{
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
// CPU specific part
// Notify PCI Express slots in case a card
diff --git a/src/mainboard/lenovo/x201/acpi/platform.asl b/src/mainboard/lenovo/x201/acpi/platform.asl
index 0a6d5f3448..7d7013bcd3 100644
--- a/src/mainboard/lenovo/x201/acpi/platform.asl
+++ b/src/mainboard/lenovo/x201/acpi/platform.asl
@@ -63,6 +63,9 @@ Method(_PTS,1)
Method(_WAK,1)
{
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
/* Not implemented. */
Return(Package(){0,0})
}
diff --git a/src/mainboard/lenovo/x220/acpi/platform.asl b/src/mainboard/lenovo/x220/acpi/platform.asl
index 9cd327a765..bf686f444f 100644
--- a/src/mainboard/lenovo/x220/acpi/platform.asl
+++ b/src/mainboard/lenovo/x220/acpi/platform.asl
@@ -32,6 +32,9 @@ Method(_WAK,1)
Store (0, \_TZ.MEB1)
Store (0, \_TZ.MEB2)
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
/* Not implemented. */
Return(Package(){0,0})
}
diff --git a/src/mainboard/lenovo/x230/acpi/platform.asl b/src/mainboard/lenovo/x230/acpi/platform.asl
index 9cd327a765..bf686f444f 100644
--- a/src/mainboard/lenovo/x230/acpi/platform.asl
+++ b/src/mainboard/lenovo/x230/acpi/platform.asl
@@ -32,6 +32,9 @@ Method(_WAK,1)
Store (0, \_TZ.MEB1)
Store (0, \_TZ.MEB2)
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
/* Not implemented. */
Return(Package(){0,0})
}
diff --git a/src/mainboard/lenovo/x60/acpi/platform.asl b/src/mainboard/lenovo/x60/acpi/platform.asl
index 006b6f0ba2..f9e991b984 100644
--- a/src/mainboard/lenovo/x60/acpi/platform.asl
+++ b/src/mainboard/lenovo/x60/acpi/platform.asl
@@ -29,6 +29,9 @@ Method(_PTS,1)
Method(_WAK,1)
{
+ /* Wake the HKEY to init BT/WWAN */
+ \_SB.PCI0.LPCB.EC.HKEY.WAKE (Arg0)
+
// CPU specific part
// Notify PCI Express slots in case a card