[coreboot-gerrit] Patch set updated for coreboot: 1a6b8f7 lynxpoint: XHCI: Don't put device in D3 in _PS0 Method

Patrick Georgi (patrick@georgi-clan.de) gerrit at coreboot.org
Sat Dec 21 23:01:10 CET 2013


Patrick Georgi (patrick at georgi-clan.de) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/4448

-gerrit

commit 1a6b8f72c85eda47829777c2665fa220385f7cb4
Author: Duncan Laurie <dlaurie at chromium.org>
Date:   Thu Aug 8 14:12:20 2013 -0700

    lynxpoint: XHCI: Don't put device in D3 in _PS0 Method
    
    The end of the _PS0 method that is supposed to transition the
    XHCI device to D0 state is instead putting it in D3 state.
    
    This triggers a PME_B0 GPE which causes a Notify to the XHCI
    ACPI Device in the kernel and that increments the wakeup counter
    and causes aborted suspends.
    
    Instead if we just leave the device in D0 where it should be
    after executing this function then the PME_B0 is not generated
    and the kernel does not see a wakeup on XHCI.
    
    Similarly I changed the _PS3 method to always put the device in
    D3 at the end of the method, rather than depending on the state
    to be D3 at the start.
    
    Before this change the kernel would see the following sequence
    when trying to suspend when the XHCI controller is in D3cold:
    
    kernel: ACPI: Execute Method [\_SB_.PCI0.XHCI._PS0] (Node ffff88017802bf28)
    kernel:   evmisc-0169 [07] ev_queue_notify_reques: Dispatching Notify on [XHCI] (Device) Value 0x02 (Device Wake) Node ffff88017802bc30
    kernel:   evmisc-0169 [07] ev_queue_notify_reques: Dispatching Notify on [EHCI] (Device) Value 0x02 (Device Wake) Node ffff88017802b8e8
    kernel:   evmisc-0169 [07] ev_queue_notify_reques: Dispatching Notify on [HDEF] (Device) Value 0x02 (Device Wake) Node ffff88017802b1b8
    kernel: xhci_hcd 0000:00:14.0: power state changed by ACPI to D0
    kernel: xhci_hcd 0000:00:14.0: PME# disabled
    kernel: xhci_hcd 0000:00:14.0: enabling bus mastering
    kernel: xhci_hcd 0000:00:14.0: setting latency timer to 64
    kernel: PM: Wakeup pending, aborting suspend
    kernel: last active wakeup source: 0000:00:14.0
    
    Now it does not get a notification (due to PME_B0) when going to D0
    on the way into suspend.  XHCI goes from D3cold to D0 (in order to
    be able to read mmio) and then back to D3hot before suspend.
    
    kernel: ACPI: Execute Method [\_SB_.PCI0.XHCI._PS0] (Node ffff88017802bf28)
    kernel: xhci_hcd 0000:00:14.0: power state changed by ACPI to D0
    kernel: xhci_hcd 0000:00:14.0: PME# disabled
    kernel: xhci_hcd 0000:00:14.0: enabling bus mastering
    kernel: xhci_hcd 0000:00:14.0: setting latency timer to 64
    kernel: ACPI: Execute Method [\_SB_.PCI0.XHCI._S3D] (Node ffff88017802c000)
    kernel: xhci_hcd 0000:00:14.0: PME# enabled
    kernel: xhci_hcd 0000:00:14.0: System wakeup enabled by ACPI
    kernel: ACPI: Execute Method [\_SB_.PCI0.XHCI._PS3] (Node ffff88017802bf50)
    kernel: xhci_hcd 0000:00:14.0: power state changed by ACPI to D3hot
    
    Change-Id: Id5cd28eede2b27d97640047feb17349ae4ab79b7
    Signed-off-by: Duncan Laurie <dlaurie at chromium.org>
    Reviewed-on: https://gerrit.chromium.org/gerrit/65236
    Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
 src/southbridge/intel/lynxpoint/acpi/usb.asl | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/src/southbridge/intel/lynxpoint/acpi/usb.asl b/src/southbridge/intel/lynxpoint/acpi/usb.asl
index 2fe6750..9c9b6b0 100644
--- a/src/southbridge/intel/lynxpoint/acpi/usb.asl
+++ b/src/southbridge/intel/lynxpoint/acpi/usb.asl
@@ -309,11 +309,6 @@ Device (XHCI)
 			Store (1, AX15)
 		}
 
-		// Put device in D3 if it was there originally
-		If (LEqual (Local0, 3)) {
-			Store (3, ^D0D3)
-		}
-
 		Return ()
 	}
 
@@ -371,9 +366,7 @@ Device (XHCI)
 		}
 
 		// Put device in D3
-		If (LEqual (Local0, 3)) {
-			Store (3, ^D0D3)
-		}
+		Store (3, ^D0D3)
 
 		Return ()
 	}



More information about the coreboot-gerrit mailing list