soc/intel/cannonlake: Fix and clean up xhci ACPI code

During S3 cycling, system entered S3 only once and falied to
enter S3 the second time. The system gets stuck at this point
and we have to do a cold reboot to restore the system.

Since XHCI IP is able to power gate during kernel freeze/suspend,
this patch removes unnecessary device gating from ASL. This helps
in continuous cycling of S3.

BUG=b:69115421
TEST=run powerd_dbus_suspend multiple times and check if
the system enters and resumes from S3.

Change-Id: Id459631ea2d32feea4b8f658fd34fa25945f909e
Signed-off-by: Vaibhav Shankar <vaibhav.shankar@intel.com>
Reviewed-on: https://review.coreboot.org/22389
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Vaibhav Shankar 2017-11-08 14:59:47 -08:00 committed by Aaron Durbin
parent f0349023a2
commit 8f20044c77
1 changed files with 0 additions and 142 deletions

View File

@ -16,54 +16,6 @@
*/ */
#include <soc/gpe.h> #include <soc/gpe.h>
/*
* USB Port Wake Enable (UPWE) on usb attach/detach
* Arg0 - Port Number
* Arg1 - Port 1 Status and control offset
* Arg2 - xHCI Memory-mapped address
*/
Method (UPWE, 3, Serialized)
{
/* Local0 = Arg1 + ((Arg0 - 1) * 0x10) */
Add (Arg1, Multiply (Subtract (Arg0, 1), 0x10), Local0)
/* Map ((XMEM << 16) + Local0 in PSCR */
OperationRegion (PSCR, SystemMemory,
Add (ShiftLeft (Arg2, 16), Local0), 0x10)
Field (PSCR, AnyAcc, NoLock, Preserve)
{
, 25,
UPCE, 1,
UPDE, 1,
}
Store (One, UPCE)
Store (One, UPDE)
}
/*
* USB Wake Enable Setup (UWES)
* Arg0 - Port enable bitmap
* Arg1 - Port 1 Status and control offset
* Arg2 - xHCI Memory-mapped address
*/
Method (UWES, 3, Serialized)
{
Store (Arg0, Local0)
While (One) {
FindSetRightBit (Local0, Local1)
If (LEqual (Local1, Zero)) {
Break
}
UPWE (Local1, Arg1, Arg2)
/*
* Clear the lowest set bit in Local0 since it was
* processed.
* Local0 = Local0 & (Local0 - 1)
*/
And (Local0, Subtract (Local0, 1), Local0)
}
}
/* XHCI Controller 0:14.0 */ /* XHCI Controller 0:14.0 */
@ -73,112 +25,18 @@ Device (XHCI)
Name (_PRW, Package () { GPE0_PME_B0, 3 }) Name (_PRW, Package () { GPE0_PME_B0, 3 })
Method (_DSW, 3)
{
Store (Arg0, PMEE)
UWES (And (\U2WE, 0x3FF), 0x480, XMEM)
UWES (And (\U3WE, 0x3F), 0x540, XMEM)
}
Name (_S3D, 3) /* D3 supported in S3 */ Name (_S3D, 3) /* D3 supported in S3 */
Name (_S4D, 3) /* D3 supported in S4 */
Name (_S0W, 3) /* D3 can wake device in S0 */ Name (_S0W, 3) /* D3 can wake device in S0 */
Name (_S3W, 3) /* D3 can wake system from S3 */ Name (_S3W, 3) /* D3 can wake system from S3 */
Name (_S4W, 3) /* D3 can wake system from S4 */
OperationRegion (XPRT, PCI_Config, 0x00, 0x100)
Field (XPRT, AnyAcc, NoLock, Preserve)
{
Offset (0x0),
DVID, 16, /* VENDORID */
Offset (0x10),
, 16,
XMEM, 16, /* MEM_BASE */
Offset (0x50), /* XHCLKGTEN */
, 2,
STGE, 1, /* SS Link Trunk clock gating enable */
Offset (0x74),
D0D3, 2, /* POWERSTATE */
, 6,
PMEE, 1, /* PME_EN */
, 6,
PMES, 1, /* PME_STS */
Offset (0xA2),
, 2,
D3HE, 1, /* D3_hot_en */
}
OperationRegion (XREG, SystemMemory,
Add (ShiftLeft (XMEM, 16), 0x8000), 0x200)
Field (XREG, DWordAcc, Lock, Preserve)
{
Offset (0x1c4), /* USB2PMCTRL */
, 2,
UPSW, 2, /* U2PSUSPGP */
}
Method (_PSC, 0, Serialized)
{
Return (^D0D3)
}
Method (_PS0, 0, Serialized) Method (_PS0, 0, Serialized)
{ {
If (LEqual (^DVID, 0xFFFF)) {
Return
}
If (LOr (LEqual (^XMEM, 0xFFFF), LEqual (^XMEM, 0x0000))) {
Return
}
/* Disable d3hot and SS link trunk clock gating */
Store(Zero, ^D3HE)
Store(Zero, ^STGE)
/* If device is in D3, set back to D0 */
If (LEqual (^D0D3, 3)) {
Store (Zero, Local0)
Store (Local0, ^D0D3)
Store (^D0D3, Local0)
}
/* Disable USB2 PHY SUS Well Power Gating */
Store (Zero, ^UPSW)
} }
Method (_PS3, 0, Serialized) Method (_PS3, 0, Serialized)
{ {
If (LEqual (^DVID, 0xFFFF)) {
Return
}
If (LOr (LEqual (^XMEM, 0xFFFF), LEqual (^XMEM, 0x0000))) {
Return
}
/* Clear PME Status */
Store (1, ^PMES)
/* Enable PME */
Store (1, ^PMEE)
/* If device is in D3, set back to D0 */
If (LEqual (^D0D3, 3)) {
Store (Zero, Local0)
Store (Local0, ^D0D3)
Store (^D0D3, Local0)
}
/* Enable USB2 PHY SUS Well Power Gating in D0/D0i2/D0i3/D3 */
Store (3, ^UPSW)
/* Enable d3hot and SS link trunk clock gating */
Store(One, ^D3HE)
Store(One, ^STGE)
/* Now put device in D3 */
Store (3, Local0)
Store (Local0, ^D0D3)
Store (^D0D3, Local0)
} }
/* Root Hub for Cannonlake-LP PCH */ /* Root Hub for Cannonlake-LP PCH */