igc: I226-LM loses PCIe link in igc_suspend, root port GPE storm blocks s2idle afterwards

From: Danny Heinrich <hidden>
Date: 2026-10-23 16:51:57

Hi,

On an HP ZBook Fury G1i 16 the onboard I226-LM drops off the bus during
s2idle suspend. After that the system can no longer suspend at all.

Setup:
- HP ZBook Fury G1i 16, board 8DE2, BIOS X96 01.05.01 (latest from HP)
- Core Ultra 9 285HX, s2idle is the only sleep state offered
- I226-LM (rev 04) at 0000:84:00.0, behind root port 0000:80:1d.0
- Fedora 44, kernel 7.2.11-200.fc44.x86_64
- Kernel is tainted OE by the NVIDIA out-of-tree driver for the dGPU
- No Ethernet cable connected in any of this

From boot onward igc logs this every few seconds to minutes:

  igc 0000:84:00.0 enp132s0: Timeout reading IGC_PTM_STAT register

The first problem showed up about 70 minutes after boot. From then on many
suspend attempts aborted right away with this message, without naming a
device:

  PM: Some devices failed to suspend, or early wake event detected

This happened 189 times. Each time, IGC_PTM_STAT timeouts appeared just
before. I can't prove that igc was the device that aborted.

About 3 hours later, one suspend failed like this:

  pcieport 0000:80:1d.0: Data Link Layer Link Active not set in 100 msec
  igc 0000:84:00.0 enp132s0: PCIe link lost, device now detached
  igc 0000:84:00.0: disabling already-disabled device
  WARNING: drivers/pci/pci.c:2198 at pci_disable_device+0xac/0xc0
  Call Trace:
   igc_suspend+0x19/0x20 [igc]
   pci_pm_suspend+0x99/0x1d0
   dpm_run_callback+0x62/0x170
   device_suspend+0x17e/0x4e0
   async_suspend+0x21/0x30
   async_run_entry_fn+0x34/0x150
  PM: Some devices failed to suspend, or early wake event detected
  igc 0000:84:00.0: PM: dpm_run_callback(): pci_pm_resume returns -19

From then on the device was gone from lspci. By the next day, GPEs 0x6B
and 0x6E were firing at roughly 145 interrupts/s each, and their status
bits stayed set. In this DSDT, _L6B and _L6E call GPEH on every PCIe root
port, including RP09 (80:1d.0). From then on, every suspend attempt woke
within a second:

  PM: Triggering wakeup from IRQ 9
  ACPI: PM: ACPI non-EC GPE wakeup

Over the whole boot, logind entered suspend 666 times. Disabling or
masking both GPEs through /sys/firmware/acpi/interrupts did not stop the
wakeups. The next poweroff hung after systemd-shutdown, and the machine
ran until the battery was empty. A cold boot restored the NIC.

Separately, on a fresh boot I get an RTNL assertion during runtime
resume, triggered by an lspci config read:

  RTNL: assertion failed at ./include/net/netdev_lock.h (72)
  WARNING: ./include/net/netdev_lock.h:72 at netif_queue_set_napi+0xe0/0x110
  Call Trace:
   igc_set_queue_napi+0x45/0xb0 [igc]
   __igc_open+0x2da/0x5b0 [igc]
   __igc_resume+0x13c/0x240 [igc]
   __rpm_callback+0x57/0x210
   rpm_resume+0x4fc/0x730
   pci_config_pm_runtime_get+0x3a/0x60
   pci_read_config+0x98/0x300

My current workaround is a systemd unit ordered before sleep.target that
runs "modprobe -r igc" before suspend and "modprobe igc" after resume.
Suspend has worked reliably with it so far.

I'm not sure whether the PTM timeouts and the link loss share a cause, or
whether this is a platform/firmware problem rather than igc. I can test
patches and provide full dmesg, lspci -vvv and an acpidump.

Thanks,
Danny
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help