This guide documents the suspend/resume Wi-Fi failure observed on a Lenovo IdeaPad running Ubuntu 25.10 desktop and walks through the exact remediation steps that were validated on October 27, 2025. Use it after a fresh OS install or kernel update if the problem reappears.
- Hardware: Lenovo IdeaPad Pro 5-14IAH10 with Intel BE200 (Wi-Fi 7) controller at PCI address
0000:01:00.0(device id8086:272b). - Kernel Symptom: After resuming from suspend (
s2idle), the wireless adapter stays in PCI power state D3cold and never returns, leavingwlp1s0f0unavailable. Logs show:Unable to change power state from D3cold to D0, device inaccessibletimeout waiting for FW reset ACKfollowed by repeated firmware crashes.
- User Experience: NetworkManager lists the device as unavailable; Wi-Fi toggle remains disabled until reboot.
- Root Cause: Intel iwlwifi firmware/driver combo for BE200 mishandles D3cold entry, especially on s2idle platforms. Preventing the device from entering D3cold avoids the failure.
nmcli device statusshowswlp1s0f0as unavailable after resume.journalctl -b | grep -i iwlwificontains D3cold errors./sys/bus/pci/devices/0000:01:00.0/d3cold_allowedreads1.
If all three conditions match, proceed with the fix below.
Create a oneshot systemd service that forces the Wi-Fi device out of D3cold during boot:
cat <<'EOF' > /etc/systemd/system/disable-wifi-d3cold.service
[Unit]
Description=Disable D3cold for Intel BE200 Wi-Fi
After=systemd-udevd.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo 0 > /sys/bus/pci/devices/0000:01:00.0/d3cold_allowed'
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now disable-wifi-d3cold.serviceInstall a system sleep hook that re-disables D3cold immediately after every suspend cycle:
cat <<'EOF' > /usr/lib/systemd/system-sleep/disable-wifi-d3cold.sh
#!/bin/sh
sysfs_path=/sys/bus/pci/devices/0000:01:00.0/d3cold_allowed
if [ "$1" = "post" ] && [ -w "$sysfs_path" ]; then
echo 0 > "$sysfs_path"
fi
exit 0
EOF
chmod 755 /usr/lib/systemd/system-sleep/disable-wifi-d3cold.shEnsure hotplug events keep the flag cleared (covers PCI rescans):
cat <<'EOF' > /etc/udev/rules.d/80-disable-wifi-d3cold.rules
# Disable D3cold for Intel BE200 Wi-Fi to prevent resume issues
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x8086", ATTR{device}=="0x272b", ATTR{d3cold_allowed}="0"
EOF
udevadm control --reload
udevadm trigger -v -p add /sys/bus/pci/devices/0000:01:00.0- Confirm the sysfs flag sticks:
Expected output:
cat /sys/bus/pci/devices/0000:01:00.0/d3cold_allowed
0. - Run a suspend/resume cycle (10-second rtcwake shown):
rtcwake -m mem -s 10
- After wake, check that Wi-Fi remains connected:
Device
nmcli device status
wlp1s0f0should stay connected. - Inspect recent logs for regressions:
There should be no new D3cold errors.
journalctl -b --since "$(date --iso-8601=minutes -d '-5 minutes')" | grep -i iwlwifi
- If
/usr/lib/systemd/system-sleepdoes not exist, create it before writing the hook (mkdir -p /usr/lib/systemd/system-sleep). - Reboot once after installing the service to verify everything happens automatically during boot.
- If the Wi-Fi device disappears from
lspciafter manual tinkering, runrebootinstead of attempting PCI rescans. - Adjust the PCI address in the scripts if hardware changes; confirm with
lspci -nn.
To undo the workaround:
systemctl disable --now disable-wifi-d3cold.service
rm -f /etc/systemd/system/disable-wifi-d3cold.service
rm -f /usr/lib/systemd/system-sleep/disable-wifi-d3cold.sh
rm -f /etc/udev/rules.d/80-disable-wifi-d3cold.rules
systemctl daemon-reload
udevadm control --reloadReboot afterwards to restore default power-management behavior (which will likely reintroduce the resume failure).
- Intel community reports on BE200 D3cold resume failures under Linux kernels 6.6–6.18 as of October 2025.
- Ubuntu 25.10 testing performed on October 27, 2025.
Keep this document with your backup scripts so you can reapply the fix quickly after OS reinstalls or kernel upgrades.
Thought I'd come back and give you an update... I messed around with my laptop so much yesterday, I decided to blow it away and re-install. After reinstallation, the same Wi-Fi issue persisted, but I tried another approach after my learnings yesterday.
For me, I managed to fix it with just this one command:
The other steps weren't required for me. I will let you know if anything changes.
Thanks again.