mt7921e (MT7922): firmware stops transmitting after 802.11v BTM roam, scans hang, only module reload recovers

Open
#1,167 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
c, linux

Research direction

Start by tracing the mt7921e firmware and scan handling around the reported BTM roam, using the kernel logs in the issue and the related issue #1110 as clues. Reproduce with the reported MT7922, kernel and access point setup, then enable fw_debug as the reporter offers. Done means identifying and fixing the hang so scans and authentication recover after a failed roam without reloading the module.

Written by the indexing model from the issue text.

Description

Hardware / software

  • MT7922 [14c3:7922], subsystem AzureWave [1a3b:5911], driver mt7921e
  • Kernel 7.3.0-5-cachyos
  • FW: HW/SW Version: 0x8a108a10, Build Time: 20260724143257a / WM Firmware Build Time: 20260724143402
  • NetworkManager 1.58.1 + wpa_supplicant, disable_aspm=N, power save off
  • AP: FRITZ!Box 5690 mesh, 3 APs, all on 5 GHz ch 100 (5500 MHz, DFS), WPA2/CCMP

Description
While connected, the AP sent a BSS Transition Management request (WNM: Preferred List Available) and wpa_supplicant roamed to a weaker AP.
Authentication timed out there, and then it also timed out on every other AP, including the one the card had just left (94% signal).

After that, scans never complete (Reject scan trigger since one is already pending). The driver logs no MCU timeout, error or reset.

Turning the WiFi radio off and on (rfkill) and restarting NetworkManager do not help.
modprobe -r mt7921e && modprobe mt7921e recovers it immediately.

No suspend/resume was involved. The end state looks like #1110 (silent firmware hang, stuck scan, module reload fixes it), but here the trigger is a roam, and the firmware is newer.

Earlier BTM roams on previous boots succeeded, so this is intermittent. A second roam about a minute after the reload also failed on the target AP, but that time the card recovered by itself.

Logs
18:24:14.850 wpa_supplicant: wlan0: WNM: Preferred List Available
18:24:15.159 wpa_supplicant: wlan0: SME: Trying to authenticate with 02:7a:a4:9a:bd:80 (SSID='FRITZ!Box 5690 LA' freq=5500 MHz)
18:24:15.218 kernel: wlan0: disconnect from AP 02:7a:a4:74:38:41 for new auth to 02:7a:a4:9a:bd:80
18:24:16.483 kernel: wlan0: authenticate with 02:7a:a4:9a:bd:80 (local address=xyz)
18:24:16.497 kernel: wlan0: send auth to 02:7a:a4:9a:bd:80 (try 1/3)
18:24:16.711 kernel: wlan0: send auth to 02:7a:a4:9a:bd:80 (try 3/3)
18:24:16.812 kernel: wlan0: authentication with 02:7a:a4:9a:bd:80 timed out
18:24:16.894 kernel: wlan0: authenticate with 02:7a:a4:74:38:41 (local address=xyz)
18:24:16.896 kernel: wlan0: send auth to 02:7a:a4:74:38:41 (try 1/3)
18:24:17.119 kernel: wlan0: send auth to 02:7a:a4:74:38:41 (try 3/3)
18:24:17.228 kernel: wlan0: authentication with 02:7a:a4:74:38:41 timed out
18:24:17.318 kernel: wlan0: authenticate with 02:7a:a4:73:fa:71 (local address=xyz)
18:24:17.321 kernel: wlan0: send auth to 02:7a:a4:73:fa:71 (try 1/3)
18:24:21.345 kernel: wlan0: send auth to 02:7a:a4:73:fa:71 (try 3/3)
18:24:22.326 kernel: wlan0: aborting authentication with 02:7a:a4:73:fa:71 by local choice (Reason: 3=DEAUTH_LEAVING)
18:24:25.594 kernel: wlan0: authenticate with 02:7a:a4:73:fa:71 (local address=xyz)
18:24:25.609 kernel: wlan0: send auth to 02:7a:a4:73:fa:71 (try 1/3)
18:24:30.612 kernel: wlan0: aborting authentication with 02:7a:a4:73:fa:71 by local choice (Reason: 3=DEAUTH_LEAVING)
18:24:38.020 NetworkManager: device (wlan0): link timed out.
18:24:38.086 wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid=02:7a:a4:73:fa:71 reason=3 locally_generated=1
18:24:41.669 wpa_supplicant: wlan0: Reject scan trigger since one is already pending
18:25:21.893 wpa_supplicant: wlan0: Reject scan trigger since one is already pending
-- rfkill off/on (18:25:36) and NetworkManager restart (18:26:57): no change --
18:28:28.326 kernel: mt7921e 0000:02:00.0: ASIC revision: 79220010        <- modprobe -r/modprobe mt7921e
18:28:28.435 kernel: mt7921e 0000:02:00.0: WM Firmware Version: ____000000, Build Time: 20260724143402
18:28:33.606 kernel: wlan0: authenticated
18:28:33.658 kernel: wlan0: associated

Full journal available on request. I can test patches or enable fw_debug if that helps.

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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from openwrt/mt76

All issues in openwrt/mt76

Similar issues

More C issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.