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