If you run modern Ubuntu or Linux on a Dell Inspiron 15 Gaming (7567) or a similar 7th-gen Intel laptop paired with an NVIDIA GeForce GTX 1050 / 1050 Ti (Pascal architecture), you may have encountered an infuriating problem: putting the laptop to sleep causes an abrupt reboot, either about 14 seconds into sleep or the moment you open the lid to wake it up.
For months, the standard advice across Linux forums has been to "switch to hibernate," "disable sleep entirely," or "turn off the NVIDIA card." None of those are real fixes. Instead of giving up on proper S3 sleep, I paired with Google Antigravity—an agentic AI assistant capable of running system diagnostics and kernel-level debugging—to investigate the root cause down to the ACPI firmware bytecode. Here is what was actually causing the failure, and the permanent 4-step fix that resolved it.
The Symptoms: Unclean Reboots During Sleep
Analyzing system logs across 24 boots on Ubuntu with kernel 7.0.0-generic and the NVIDIA proprietary driver (580 series) revealed 15 boots that ended in an unclean hard reset:
- Pattern A (14-second watchdog reset): The laptop entered S3 deep sleep (
PM: suspend entry (deep)). Exactly 14.3 seconds later, the hardware watchdog tripped an immediate reset. The laptop would reboot and sit unattended at the GDM login screen for hours. - Pattern B (Overnight wake reset): The laptop stayed asleep in S3 through the night, but the instant the lid was opened or power button pressed in the morning, the machine suffered a hard reset during S3 resume.
The Culprit Found by Antigravity: Dell BIOS ACPI AML Bug
Antigravity inspected the kernel journal, PCI subsystem states, and decompiled the laptop's ACPI tables (DSDT and SSDT3 / PegSsdt). It uncovered a critical firmware bug in Dell's CBX3 BIOS when Linux transitions the PCIe Root Port (0000:00:01.0 / \_SB.PCI0.PEG0) into D3cold:
- Entering D3cold: When putting the machine to sleep, Linux places the PCIe root port into
D3cold, evaluating Dell's ACPI methodPG00._OFF(), which cuts GPU rail GPIO power and marks the power resource as off (PG00._STA = 0). - The Infinite Loop on Resume: Upon waking, Linux calls
PG00._ON()during early device resume (dpm_resume_noirq) with interrupts disabled. In Dell's bytecode,PGON(0)checks if the power rail GPIO is high. Because firmware already re-powered the rail, it returns early without re-enabling or retraining the PCIe link! - Immediately after,
PG00._ON()executes:While ((VEID != 0x10DE)) { Sleep (One) }Because the link was never retrained, readingVEID(the NVIDIA PCI Vendor ID) over MMIO returns0xFFFF. The kernel hangs forever in this infinite loop until the Linux NMI watchdog resets the system ~14 seconds later!
Why doesn't this happen in Windows? Windows does not transition the parent PCIe root port into ACPID3coldduring S3 sleep; it leaves it inD3hot, keepingPG00powered on and completely avoiding the buggy BIOS AML loop.
Additionally, Antigravity identified two secondary conflicts on modern Ubuntu:
- systemd-sleep user session freezing:
systemd-sleepfreezesuser.slicebefore suspend and keeps it frozen while NVIDIA's post-resume scripts try to switch virtual terminals (chvt 2), deadlocking againstgnome-shellunder Wayland. - Conflicting DRM framebuffers: The NVIDIA module defaulted to
nvidia_drm.fbdev=1, creating a competingfb0: nvidia-drmdrmfbalongside Intel'si915drmfbduring atomic KMS modesetting.
The 4-Step Solution
To eliminate these issues cleanly and permanently, Antigravity implemented four targeted adjustments:
1. Prevent D3cold via Persistent Udev Rule
By forcing d3cold_allowed=0 and power/control=on across the PCIe Root Port and the NVIDIA devices, Linux keeps them in D3hot during S3 suspend. ACPI power resource PG00 remains on, completely bypassing the buggy While (VEID != 0x10DE) code path.
Create /etc/udev/rules.d/80-nvidia-pm-fix.rules:
# Prevent D3cold (buggy ACPI PG00._OFF / PG00._ON infinite VEID loop in SSDT3)
# on Intel PCIe Root Port PEG0 (0000:00:01.0) and NVIDIA GTX 1050 Ti (0000:01:00.0 / 0000:01:00.1)
ACTION=="add|bind|change", SUBSYSTEM=="pci", KERNEL=="0000:00:01.0", ATTR{d3cold_allowed}="0", ATTR{power/control}="on", ATTR{power/wakeup}="disabled"
ACTION=="add|bind|change", SUBSYSTEM=="pci", KERNEL=="0000:01:00.0", ATTR{d3cold_allowed}="0", ATTR{power/control}="on"
ACTION=="add|bind|change", SUBSYSTEM=="pci", KERNEL=="0000:01:00.1", ATTR{d3cold_allowed}="0", ATTR{power/control}="on"
2. Disable Spurious PEG0 ACPI Wakeups via Systemd
Create a oneshot systemd service at /etc/systemd/system/disable-peg0-wakeup.service:
[Unit] Description=Disable ACPI wakeup on PEG0 and keep NVIDIA power states consistent After=multi-user.target [Service] Type=oneshot ExecStart=/bin/sh -c 'if grep -q "^PEG0.*\*enabled" /proc/acpi/wakeup; then echo PEG0 > /proc/acpi/wakeup; fi; for dev in 0000:00:01.0 0000:01:00.0 0000:01:00.1; do [ -d "/sys/bus/pci/devices/$dev" ] && echo 0 > "/sys/bus/pci/devices/$dev/d3cold_allowed" 2>/dev/null && echo on > "/sys/bus/pci/devices/$dev/power/control" 2>/dev/null; done' RemainAfterExit=yes [Install] WantedBy=multi-user.target
Enable and start it:
sudo systemctl daemon-reload sudo systemctl enable --now disable-peg0-wakeup.service
3. Prevent User Session Freezing Before NVIDIA Resume
Prevent systemd-sleep from deadlocking frozen user sessions during VT switches:
for svc in systemd-suspend.service systemd-hibernate.service systemd-suspend-then-hibernate.service; do
sudo mkdir -p "/etc/systemd/system/${svc}.d"
echo -e '[Service]
Environment="SYSTEMD_SLEEP_FREEZE_USER_SESSIONS=false"' | sudo tee "/etc/systemd/system/${svc}.d/override.conf"
done
4. Set nvidia_drm fbdev=0 and Update Initramfs
In /etc/modprobe.d/nvidia-graphics-drivers-kms.conf, set:
options nvidia_drm modeset=1 fbdev=0 options nvidia NVreg_PreserveVideoMemoryAllocations=1 options nvidia NVreg_TemporaryFilePath=/var
Then rebuild initramfs and reboot:
sudo update-initramfs -u -k all sudo reboot
Verification: 11+ Hours of Clean Overnight Sleep
After applying the fix and rebooting into kernel 7.0.0-34-generic, we ran multiple sleep tests. The system journal confirmed:
- Test 1 (Short sleep): Slept 35 seconds → resumed cleanly.
- Test 2 (Medium sleep): Slept 1 hour 38 minutes → resumed cleanly.
- Test 3 (Overnight test): Slept in S3 deep sleep for 11 hours and 20 minutes continuously → woke up instantly with zero crashes, zero resets, and both internal display and external HDMI functioning perfectly!
Final Thoughts on AI-Assisted Troubleshooting
Hardware power management issues on Linux often feel like impenetrable black boxes. Working with Google Antigravity showed the real power of pairing with an autonomous AI: rather than relying on generic recommendations, it analyzed the exact system journal timestamps, decompiled Dell's ACPI tables, identified the exact assembly instruction causing the hang, and generated a tailored, verified fix.
If you are struggling with unexplained sleep reboots on a Dell Inspiron 7567 or similar Pascal-era hybrid graphics laptop, give this 4-step configuration a try!