[BUG] mt7921e: HIF_CTRL timeout after S3 resume on MT7922

Hedi Hamida hedihamida096 at gmail.com
Sat Oct 24 08:14:02 PDT 2026


Hardware:
  03:00.0 Network controller [0280]: MEDIATEK Corp. MT7922 802.11ax PCI
  Express Wireless Network Adapter [14c3:7922]
  Subsystem: AzureWave Device [1a3b:5916]
  Driver: mt7921e (mt76)

Kernel: 6.12.113+deb13-amd64 (Debian 13)

Firmware tested:
  20241106163310  (Debian firmware-misc-nonfree 20250410-2)
  20260724143402  (current linux-firmware, 2026-07-24)

Problem:
After suspend-to-RAM (S3), resume fails:

  Oct 24 09:43:17 kernel: PM: suspend entry (deep)
  Oct 24 09:46:11 kernel: mt7921e 0000:03:00.0: Message 00020007 (seq
13) timeout
  Oct 24 09:46:11 kernel: mt7921e 0000:03:00.0: PM:
dpm_run_callback(): pci_pm_resume returns -110
  Oct 24 09:46:11 kernel: mt7921e 0000:03:00.0: PM: failed to resume
async: error -110

00020007 is MCU_UNI_CMD(HIF_CTRL), sent by
mt76_connac_mcu_set_hif_suspend(mdev, false, true).

What I tested:
1. wait_resp=true: the command times out as above. The driver then
   calls mt792x_reset() and Wi-Fi recovers, but the PM core reports
   the resume as failed.
2. MT7925-style event handling: I added a handler for
   MCU_UNI_EVENT_HIF_CTRL and sent the resume command with
   wait_resp=false. No event is received at all.
3. wait_resp=false and no event wait: the card is left unusable.
   It reinitializes/reset but never reassociates:

     Oct 24 11:01:17 kernel: PM: suspend entry (deep)
     Oct 24 11:02:11 kernel: mt7921e 0000:03:00.0: HIF resume sent
without waiting
     Oct 24 11:02:11 kernel: mt7921e 0000:03:00.0: HW/SW Version: 0x8a108a10 ...
     Oct 24 11:02:11 kernel: PM: suspend exit
     Oct 24 11:02:28 kernel: wlp3s0: authentication with ... timed out
     ...

   Only a reset recovers it.

4. S4/hibernate: the same HIF handshake is not used. A .restore
   callback that skips it and resets the device works reliably.

The latest linux-firmware 20260724143402 behaves exactly like the
2024 firmware: no response, no event.

Question:
Is MT7922 firmware supposed to answer HIF_CTRL after D3, or send
MCU_UNI_EVENT_HIF_CTRL? If a different resume sequence is required,
what should the driver do instead of resetting? Is this fixable in
firmware?

Workaround under review (reset on timeout):
  https://patchwork.kernel.org/series/1192671/

I can provide full dmesg logs or test patches if useful.

Thanks,
Hedi Ben Hamida



More information about the Linux-mediatek mailing list