https://bugzilla.kernel.org/show_bug.cgi?id=215742

Daniel Drake (dr...@endlessm.com) changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dr...@endlessm.com

--- Comment #20 from Daniel Drake (dr...@endlessm.com) ---
After much testing we found that S3 suspend/resume is unreliable on this
platform after all. The system occasionally gets into a state where it cannot
wake up. In this state, the power LED is blinking (as it does throughout
suspend) but there is no response to wakeup via keyboard or power button.

Also while in this state, the battery LED gets stuck. For example, if the LED
is solid white (implying AC adapter connected & battery full), if you unplug
the AC adapter the LED remains solid white (you would expect it to turn off).
Strong evidence of a firmware crash.

That's why we're looking to get s2idle going again. I have now found the root
cause of the original issue here and suggested a workaround as below. Once
solved we can revert the quirk that selects S3 on this device.

(Sorry Mario - forgot to CC you on this)

https://lore.kernel.org/linux-pci/20240130183124.19985-1-dr...@endlessos.org/T/#u

The Asus B1400 with production shipped firmware version 304 and VMD
disabled cannot resume from suspend: the NVMe device becomes unresponsive
and inaccessible.

This is because the NVMe device and parent PCI bridge get put into D3cold
during suspend, and this PCI bridge cannot be recovered from D3cold mode:

  echo "0000:01:00.0" > /sys/bus/pci/drivers/nvme/unbind
  echo "0000:00:06.0" > /sys/bus/pci/drivers/pcieport/unbind
  setpci -s 00:06.0 CAP_PM+4.b=03 # D3hot
  acpidbg -b "execute \_SB.PC00.PEG0.PXP._OFF"
  acpidbg -b "execute \_SB.PC00.PEG0.PXP._ON"
  setpci -s 00:06.0 CAP_PM+4.b=0 # D0
  echo "0000:00:06.0" > /sys/bus/pci/drivers/pcieport/bind
  echo "0000:01:00.0" > /sys/bus/pci/drivers/nvme/bind
  # NVMe probe fails here with -ENODEV

This appears to be an untested D3cold transition by the vendor; Intel
socwatch shows that Windows leaves the NVMe device and parent bridge in D0
during suspend, even though this firmware version has StorageD3Enable=1.

Experimenting with the DSDT, the _OFF method calls DL23() which sets a L23E
bit at offset 0xe2 into the PCI configuration space for this root port.
This is the specific write that the _ON routine is unable to recover from.
This register is not documented in the public chipset datasheet.

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are the assignee for the bug.

_______________________________________________
acpi-bugzilla mailing list
acpi-bugzilla@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla

Reply via email to