On 06/23/2015 08:36 AM, Gianluca Anzolin wrote:
Hello, Yesterday I took the time to read the document about GPE / PME handling and I compared the wakeup code of my BIOS with the examples in that document. I noticed that some vital wakeup code was executed only when a variable (PMSX) was set. That variable was set by a global NPME() method and that method was called by _OSC(). And in my logs I had this message: giu 19 18:31:06 zanac kernel: acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI] giu 19 18:31:06 zanac kernel: \_SB_.PCI0:_OSC invalid UUID giu 19 18:31:06 zanac kernel: _OSC request data:1 1f 0 giu 19 18:31:06 zanac kernel: acpi PNP0A08:00: _OSC failed (AE_ERROR); disabling ASPM A googled a bit and found the following bugzilla entry, that applies to my situation perfectly: the NEXP variable isn't set anywhere, yet in Windows it is. https://bugzilla.kernel.org/show_bug.cgi?id=36932 So I disassembled the DSDT, I removed any test involving the NEXP variable in the code, I recompiled and replaced the table with GRUB. And then the _OSC() invocation completed successfully, giving me a working WOL without spontaneous wakeups!
Great work and thanks for sharing you results !
What puzzles me is that the location of the NEXP variables is marked as ACPI NVS and the kernel never touches that region of memory. What is Windows doing differently that makes it work?
Perhaps it is not Windows itself but the motherboard driver fixing a known bug ?
-- Daniel -- <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html