mt7921e (MT7921, 14c3:7961): `pci_pm_resume returns -110` ("Message 00020007 timeout") on every S3 resume, reproduced on vanilla Arch kernel (ThinkPad X13 Gen 1 AMD)
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- Over a week
- Newbie friendliness
- 18/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- c, linux
- Domain
- operating-systems
Research direction
The failing path is the mt7921e PCIe resume callback, which waits on an MCU message (0x20007) and times out; start from the mt7921 power-management and firmware-reload code in the mt76 tree and trace where the message timeout is returned. Reproducing needs a ThinkPad-class S3 suspend setup, so first confirm the timeout with dynamic debug for mt76. Done would mean the resume completes without -110 across repeated S3 cycles.
Written by the indexing model from the issue text.
Description
Summary
On every suspend-to-RAM (S3, mem_sleep = deep) the mt7921e PCIe resume callback fails with a 0x20007 MCU message timeout. The driver recovers afterwards (reloads firmware, Wi-Fi works normally), but the kernel waits for the failed async callback before restarting tasks, so after opening the lid the screen is on with a stale frame and input is dead for about 3-5 seconds.
It is 100% reproducible here, including on an unmodified Arch kernel: 18 of 18 suspend cycles without the workaround logged the failure (table below). The only resumes without it are the ones where the module was unloaded before suspend (see workaround).
Hardware / software
- Laptop: Lenovo ThinkPad X13 Gen 1 (AMD), model 20UGS2YD00, Ryzen 5 PRO 4650U, BIOS R1CET85W (1.54) 03/25/2026
- Adapter: MEDIATEK MT7921 802.11ax PCIe [14c3:7961], subsystem Lenovo e0bc, driver
mt7921e - Distribution: CachyOS (Arch-based)
- linux-firmware 20261019; loaded: patch build 20260224110909a, WM firmware ____010000 build 20260224110949, ASIC revision 79610010
- Suspend mode: S3 (
mem_sleep: s2idle [deep])
Kernels tested (resumes with the failure / total, no workaround)
| Kernel | Failed resumes |
|---|---|
7.2.14-arch1-1 (vanilla Arch linux) |
3 / 3 |
| 7.3.3-1-cachyos (CachyOS, EEVDF) | 3 / 3 |
| 7.3.3-1-cachyos-bore-lto | 1 / 1 |
| 7.3.0-2-cachyos-bore-lto | 4 / 4 |
| 7.0.11-1-cachyos-bore-lto | 6 / 6 |
Log (one resume)
mt7921e 0000:03:00.0: Message 00020007 (seq 3) timeout
mt7921e 0000:03:00.0: PM: dpm_run_callback(): pci_pm_resume returns -110
mt7921e 0000:03:00.0: PM: failed to resume async: error -110
mt7921e 0000:03:00.0: Loading firmware patch: mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin
mt7921e 0000:03:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224110909a
mt7921e 0000:03:00.0: WM Firmware Version: ____010000, Build Time: 20260224110949
wlan0: Driver requested disconnection from AP 00:00:00:00:00:00
OOM killer enabled.
Restarting tasks: Starting
Restarting tasks: Done
What I tried
options mt7921e disable_aspm=1: no effect; the log sayscan't disable ASPM; OS doesn't have ASPM control(the firmware keeps ASPM control), and the timeout still occurs on resume.- Updating the kernel from 7.3.0-2 to 7.3.3-1: no change.
Workaround that works
A systemd-sleep hook that runs modprobe -r mt7921e before suspend and modprobe mt7921e after resume. With it there is no timeout, no freeze, and Wi-Fi is back within a few seconds.
Related reports (similar message, different power state or hardware)
- #896: same
Message 00020007 timeout/-110, on hibernate restore (MT7922, Framework 13); closed, but a later comment says it still happens on 6.12 - #1110: mt7921e after s2idle resume (firmware stops silently, no timeout logged)
- #1180: MT7902 after s2idle resume
Question
Is there a debug option or a patch to try? I can build and test patches and collect extra logs (for example with dynamic debug for mt76), as this reproduces on every suspend.
- Dominant language
- C
- Stars
- 895
- Forks
- 461
- PR merge metrics
- No merged PRs in 30d
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from openwrt/mt76
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
MT76xx - WLAN leds doesn't work with the testing kernelMay be free again A pull request for this issue was closed without being merged. Open
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
-
mt7925: Netgear A8000 (0846:9072) reports hw_path without WF0_5G, so 5 GHz band is never registeredOpen
Difficulty 4/5 3-5 days Newbie friendliness 48/100
-
Difficulty 4/5 3-5 days Newbie friendliness 22/100
Similar issues
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
Maintainers usually reply within 1 day
-
SPIDevice selects an active-high device as soon as it is createdPossibly taken @mikeysklar claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 73/100
adafruit/circuitpython#11869 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 78/100
gnif/LookingGlass#1352 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100