Sarah Sharp
2012-Mar-19 22:11 UTC
Re: xHCI not waking up from D3 after S3 Resume on Ivybridge
On Mon, Mar 19, 2012 at 05:05:47PM -0400, Tom Goetz wrote:> On Mar 19, 2012, at 12:45 PM, Tom Goetz wrote: > > On Mar 19, 2012, at 9:32 AM, Tom Goetz wrote: > > I''ve just found that if the xHCI is in D3, has a USB device plugged in, and is not waking up, it will wake up when another device in D3 wakes up. Here''s the steps I followed: > > > > 1. S3 suspend > > 2. S3 Resume > > 3. set xHCI power policy to "auto" > > 4. xHCI goes into D3 > > 5. Plug USB device into xHCI > > 6. xHCI does not wake up > > 7. set e1000e power policy to "auto" > > 8. Unplug ethernet cable > > 9. e100e goes into D3 > > 10. Plug in ethernet cable > > 11. Both e1000e and xHCI wake up. > > I think xHCI waking from D3 when e1000e wakes from D3 is because they share the same GPE (0xd). Instrumenting PME polling shows that PME is enabled, but PME status is never set on the xHCI when a USB device is plugged in. > > What can mask PME from firing when it''s enabled on the device?Intel had a issue with ACPI tables being incorrect in some Ivy Bridge systems. This led to the kernel ignoring PMEs from the xHCI host controller because it didn''t know the PME was associated with the xHCI PCI device. That ACPI table fix was supposed to make it into the Intel reference BIOS. Have you tried updating your BIOS? However, the kernel was patched to wake up all PCI devices under the PCI bridge that reported a spurious PME, so you shouldn''t even need the BIOS update. See commit 379021d5c0899fcf9410cae4ca7a59a5a94ca769 "PCI / PM: Extend PME polling to all PCI devices". I don''t know why a Linux kernel with that fix that''s hosted by Xen wouldn''t work when it worked natively. Perhaps Xen blocks the spurious PME before it reaches the kernel? Can you post the ACPI tables, both before and after suspend, on both the native Linux install and Xen? Sarah Sharp