openwrt / openwrt/mt76

mt7921e fails to load firmware on every boot on a Gigabyte X670E AORUS MASTER

Open
#1,117 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C
Stars
888
Forks
436
PR merge metrics
No merged PRs in 30d

Description

Summary

mt7921e fails to load firmware on every boot on a Gigabyte X670E AORUS MASTER with the onboard MT7922 — Failed to start patch / Failed to release patch semaphore / hardware init failed, reproducible from a genuine cold boot (not just after a prior crash/suspend). Reproduces identically across three different kernel builds (7.1.5, 7.0.14, 7.0.0). Extensive elimination of platform-level causes (ASPM, IOMMU, interrupt delivery, PCIe link integrity, firmware version) points to the firmware handshake/protocol itself rather than any host-side configuration.

Hardware

  • Motherboard: Gigabyte X670E AORUS MASTER (rev 1.1)
  • BIOS: F41 (2026-02-06) — current/near-current; AGESA changelog has no WiFi/PCIe-endpoint-relevant entries
  • WiFi chip: MediaTek MT7922 802.11ax PCI Express Wireless Network Adapter (onboard, soldered)
  • PCI address: 0000:0f:00.0, IOMMU group 21
  • Driver: mt7921e (in-tree)

Software

Reproduced identically on three separate kernel builds:

  • 7.1.5-070105-generic (mainline-style build)

  • 7.0.14

  • 7.0.0-29-generic (stock Ubuntu-packaged kernel)

  • linux-firmware: 20260319.git217ca6e4.1ubuntu

  • Firmware files present: WIFI_MT7922_patch_mcu_1_1_hdr.bin.zst, WIFI_RAM_CODE_MT7922_1.bin.zst (dated 2026-07-13, matches the March 2026 upstream MT7922 firmware update)

  • Firmware build reported by driver: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a — this line always appears, but the driver never reaches the subsequent successful "WM Firmware Version" line on any boot. Failure is at the very first handshake step, every time.

Log output

Kernel 7.1.5: reproducible every modprobe mt7921e

[13568.352617] mt7921e 0000:0f:00.0: ASIC revision: 79220010
[13568.443742] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13571.496478] mt7921e 0000:0f:00.0: Message 00000007 (seq 8) timeout
[13571.496485] mt7921e 0000:0f:00.0: Failed to start patch
[13574.504352] mt7921e 0000:0f:00.0: Message 00000010 (seq 9) timeout
[13574.504359] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13574.593749] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13577.640211] mt7921e 0000:0f:00.0: Message 00000007 (seq 2) timeout
[13577.640218] mt7921e 0000:0f:00.0: Failed to start patch
[13580.649086] mt7921e 0000:0f:00.0: Message 00000010 (seq 3) timeout
[13580.649092] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13580.740254] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13583.783966] mt7921e 0000:0f:00.0: Message 00000007 (seq 11) timeout
[13583.783973] mt7921e 0000:0f:00.0: Failed to start patch
[13586.791832] mt7921e 0000:0f:00.0: Message 00000010 (seq 12) timeout
[13586.791839] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13586.870965] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13589.928701] mt7921e 0000:0f:00.0: Message 00000007 (seq 5) timeout
[13589.928707] mt7921e 0000:0f:00.0: Failed to start patch
[13592.936587] mt7921e 0000:0f:00.0: Message 00000010 (seq 6) timeout
[13592.936593] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13593.028042] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13596.071467] mt7921e 0000:0f:00.0: Message 00000007 (seq 14) timeout
[13596.071475] mt7921e 0000:0f:00.0: Failed to start patch
[13599.079319] mt7921e 0000:0f:00.0: Message 00000010 (seq 15) timeout
[13599.079325] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13599.170484] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13602.215536] mt7921e 0000:0f:00.0: Message 00000007 (seq 8) timeout
[13602.215543] mt7921e 0000:0f:00.0: Failed to start patch
[13605.223080] mt7921e 0000:0f:00.0: Message 00000010 (seq 9) timeout
[13605.223089] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13605.314228] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13608.358945] mt7921e 0000:0f:00.0: Message 00000007 (seq 2) timeout
[13608.358951] mt7921e 0000:0f:00.0: Failed to start patch
[13611.367808] mt7921e 0000:0f:00.0: Message 00000010 (seq 3) timeout
[13611.367815] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13611.458993] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13614.503678] mt7921e 0000:0f:00.0: Message 00000007 (seq 11) timeout
[13614.503684] mt7921e 0000:0f:00.0: Failed to start patch
[13617.510553] mt7921e 0000:0f:00.0: Message 00000010 (seq 12) timeout
[13617.510560] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13617.601718] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13620.646434] mt7921e 0000:0f:00.0: Message 00000007 (seq 5) timeout
[13620.646441] mt7921e 0000:0f:00.0: Failed to start patch
[13623.654297] mt7921e 0000:0f:00.0: Message 00000010 (seq 6) timeout
[13623.654303] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13623.745790] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13626.791168] mt7921e 0000:0f:00.0: Message 00000007 (seq 14) timeout
[13626.791174] mt7921e 0000:0f:00.0: Failed to start patch
[13629.798047] mt7921e 0000:0f:00.0: Message 00000010 (seq 15) timeout
[13629.798054] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13629.870299] mt7921e 0000:0f:00.0: hardware init failed
[13898.538896] mt7921e 0000:0f:00.0: ASIC revision: 79220010
[13898.626024] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13901.658758] mt7921e 0000:0f:00.0: Message 00000007 (seq 8) timeout
[13901.658765] mt7921e 0000:0f:00.0: Failed to start patch
[13904.666643] mt7921e 0000:0f:00.0: Message 00000010 (seq 9) timeout
[13904.666650] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13904.759110] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13907.803498] mt7921e 0000:0f:00.0: Message 00000007 (seq 2) timeout
[13907.803505] mt7921e 0000:0f:00.0: Failed to start patch
[13910.810369] mt7921e 0000:0f:00.0: Message 00000010 (seq 3) timeout
[13910.810376] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13910.901806] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13913.947250] mt7921e 0000:0f:00.0: Message 00000007 (seq 11) timeout
[13913.947257] mt7921e 0000:0f:00.0: Failed to start patch
[13916.954124] mt7921e 0000:0f:00.0: Message 00000010 (seq 12) timeout
[13916.954131] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13917.046659] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13920.089999] mt7921e 0000:0f:00.0: Message 00000007 (seq 5) timeout
[13920.090007] mt7921e 0000:0f:00.0: Failed to start patch
[13923.097884] mt7921e 0000:0f:00.0: Message 00000010 (seq 6) timeout
[13923.097891] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13923.180085] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13926.233739] mt7921e 0000:0f:00.0: Message 00000007 (seq 14) timeout
[13926.233745] mt7921e 0000:0f:00.0: Failed to start patch
[13929.241618] mt7921e 0000:0f:00.0: Message 00000010 (seq 15) timeout
[13929.241625] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13929.333043] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13932.378474] mt7921e 0000:0f:00.0: Message 00000007 (seq 8) timeout
[13932.378480] mt7921e 0000:0f:00.0: Failed to start patch
[13935.385360] mt7921e 0000:0f:00.0: Message 00000010 (seq 9) timeout
[13935.385368] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13935.476846] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13938.522219] mt7921e 0000:0f:00.0: Message 00000007 (seq 2) timeout
[13938.522225] mt7921e 0000:0f:00.0: Failed to start patch
[13941.529093] mt7921e 0000:0f:00.0: Message 00000010 (seq 3) timeout
[13941.529099] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13941.620546] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13944.664963] mt7921e 0000:0f:00.0: Message 00000007 (seq 11) timeout
[13944.664969] mt7921e 0000:0f:00.0: Failed to start patch
[13947.672848] mt7921e 0000:0f:00.0: Message 00000010 (seq 12) timeout
[13947.672855] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13947.764290] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13950.809713] mt7921e 0000:0f:00.0: Message 00000007 (seq 5) timeout
[13950.809720] mt7921e 0000:0f:00.0: Failed to start patch
[13953.816598] mt7921e 0000:0f:00.0: Message 00000010 (seq 6) timeout
[13953.816605] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13953.908050] mt7921e 0000:0f:00.0: HW/SW Version: 0x8a108a10, Build Time: 20260224103145a
[13956.952465] mt7921e 0000:0f:00.0: Message 00000007 (seq 14) timeout
[13956.952472] mt7921e 0000:0f:00.0: Failed to start patch
[13959.960329] mt7921e 0000:0f:00.0: Message 00000010 (seq 15) timeout
[13959.960336] mt7921e 0000:0f:00.0: Failed to release patch semaphore
[13960.031615] mt7921e 0000:0f:00.0: hardware init failed

Pattern repeats indefinitely on retry; device never comes up.

Diagnostics performed

Layer Test Result
PCIe ASPM (kernel global) pcie_aspm=off boot param Confirmed applied (cat /proc/cmdline, dmesg PCIe ASPM is disabled); no change
PCIe ASPM (hardware) lspci -vvv LnkCtl Confirmed ASPM Disabled at hardware level
PCIe ASPM (driver-internal) modprobe mt7921e disable_aspm=1 No change
IOMMU dmesg | grep -iE "AMD-Vi|IOMMU|IO_PAGE_FAULT" Zero fault events, only normal group enumeration
PCIe link integrity AER capability (UESta/CESta/severity regs) All flags clear, no sticky errors ever recorded
PCIe link training LnkSta Clean: Speed 5GT/s, Width x1, TrErr- Train-
Runtime power management /sys/.../power/control Already on (not auto), not a factor
Interrupt delivery /proc/interrupts before/after a forced reload Confirmed incrementing (32→80) — host is being interrupted by the device
Firmware version dmesg build date vs. installed package Current; no older firmware version available locally to bisect against
Kernel/driver source 3 kernels (2 custom-built, 1 stock Ubuntu) Identical failure on all three
Cold boot Full power-off (not warm reboot) No change
BIOS version F41, current No WiFi/PCIe-relevant changelog entries found

The interrupt-delivery result seems like the most useful data point here: the device is successfully signaling the host, but the driver isn't getting a response it can use to complete the handshake. Combined with a fully clean AER block, this points away from a link/power/routing issue on the host side and toward the firmware load protocol/sequencing itself.

lspci -vvv output

0f:00.0 Network controller: MEDIATEK Corp. MT7922 802.11ax PCI Express Wireless Network Adapter
        Subsystem: MEDIATEK Corp. MT7922 802.11ax PCI Express Wireless Network Adapter
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- 
        Capabilities: [108 v1] Latency Tolerance Reporting
                Max snoop latency: 0ns
                Max no snoop latency: 0ns
        Capabilities: [110 v1] L1 PM Substates
                L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1+ L1_PM_Substates+
                          PortCommonModeRestoreTime=3us PortTPowerOnTime=52us
                L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2- ASPM_L1.1-
                           T_CommonMode=0us LTR1.2_Threshold=284672ns
                L1SubCtl2: T_PwrOn=150us
        Capabilities: [200 v2] Advanced Error Reporting
                UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP-
                        ECRC- UnsupReq- ACSViol- UncorrIntErr- BlockedTLP- AtomicOpBlocked- TLPBlockedErr-
                        PoisonTLPBlocked- DMWrReqBlocked- IDECheck- MisIDETLP- PCRC_CHECK- TLPXlatBlocked-
                UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP-
                        ECRC- UnsupReq- ACSViol- UncorrIntErr+ BlockedTLP- AtomicOpBlocked- TLPBlockedErr-
                        PoisonTLPBlocked- DMWrReqBlocked- IDECheck- MisIDETLP- PCRC_CHECK- TLPXlatBlocked-
                UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+
                        ECRC- UnsupReq- ACSViol- UncorrIntErr+ BlockedTLP- AtomicOpBlocked- TLPBlockedErr-
                        PoisonTLPBlocked- DMWrReqBlocked- IDECheck- MisIDETLP- PCRC_CHECK- TLPXlatBlocked-
                CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr- CorrIntErr- HeaderOF-
                CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+ CorrIntErr+ HeaderOF-
                AERCap: First Error Pointer: 00, ECRCGenCap- ECRCGenEn- ECRCChkCap- ECRCChkEn-
                        MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
                HeaderLog: 00000000 00000000 00000000 00000000
        Kernel driver in use: mt7921e
        Kernel modules: mt7921e

Possibly related

this is a regression, as I remember WiFi working fine on my PC when I built it

PR #1040 — "wifi: mt76: mt792x: fix firmware reload failure after previous load crash" (zbowling, opened 2026-01-01, still open) targets the "stuck semaphore after a previous crashed load" scenario. That may share the same underlying semaphore-handling code path, but doesn't fully match what I'm seeing here — this failure reproduces on a genuine first attempt after a full cold boot, not only as leftover state from a prior failure. Flagging in case it's the same root cause, or a related-but-distinct bug in the same area.

I attempted to build the DKMS package at github.com/zbowling/mt7925 to test the above patch directly, but it fails to compile against kernel 7.1.5 headers (struct <anonymous> has no member named 'u' in mt76_connac_mac.c, around the mgmt->u.action.u.addba_req access) — the patch set appears to predate a mac80211 header restructuring, so I wasn't able to test it directly.

Happy to provide

  • Full support from my side available on request, I lost wifi on my PC and very motivated to help in any means
  • Any additional test the maintainers would find useful — I have a fully reproducible setup

Contributor guide

No contributing guide indexed for this repository

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.

Research direction

Start at the mt7921e driver’s firmware-handshake path and compare the patch-start and semaphore failures with the reported MT7922 firmware behavior. Reproduce with modprobe mt7921e and inspect dmesg; done means the device completes firmware initialization reliably after a cold boot.

Written by the indexing model from the issue text.

Assessment

Tech stack
c, linux
Domain
networking, operating-systems
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.