[mt7996] BPI-R4-NIC-BE14 (MT7995AV + MT7976CN 0x79768b00): ~70 dB RF attenuation on Band 1 (5 GHz) despite clean FLASH_MODE=2 & 503ms NormalTRx
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 38/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- c, linux
- Domain
- embedded-iot, networking
Research direction
Start with mt7996_register_phy() in mt7996/init.c and trace how it chooses the Band 1 MAC when the EEPROM address is zero. The proposed fix should use the fallback MAC already held in dev->mphy.macaddr; done means the registered address is valid instead of 82:00:00:00:00:00. The RF attenuation questions remain unresolved and require hardware and driver expertise.
Written by the indexing model from the issue text.
Description
Hardware & Software Environment
- Board: Banana Pi BPI-R4 Pro 8X (
MT7988A) - Wi-Fi 7 NIC: BPI-R4-NIC-BE14 (
MT7995AV14c3:79902-3-3 +MT7976CNon ADIE 0 +MT7977IANon ADIE 2) - OpenWrt / Kernel: SNAPSHOT
r36304, kernel6.18.44(openwrt/mt76commitbe5ce7910521) - MCU Firmware:
mt7996_wm_233.bin(20260311120702),mt7996_wa_233.bin(20260311120618) - Full Register Dumps, RFSPI Maps & Reproduction Scripts: 👉 https://github.com/lacrus66/bpi-r4-pro-be14-5ghz-audit
Problem Description
On the BPI-R4-NIC-BE14 module (from the batch with uninitialized 0x00 bytes in factory eFuse 0x1300..0x1317), Band 0 (2.4 GHz, ADIE 0) and Band 2 (6 GHz EHT320, ADIE 2) operate at full power and sensitivity (-22 dBm at 0.5m).
However, Band 1 (5 GHz, ADIE 0 MT7976CN 0x0f00002c = 0x79768b00) exhibits a ~70 dB RF attenuation across all 3 spatial streams (WF0, WF1, WF2).
What We Verified & Ruled Out (Full Audit in Repo)
- Clean
FLASH_MODE = 2(EE_MODE_BUFFER) & Calibration:- Bypassed OTP overwrite table
.rodata+0x1268somt7996_mcu_set_eeprom()sends a verified 7680-byte buffer (cmp -l /sys/kernel/debug/ieee80211/phy0/mt76/eeprom= 0 bytes diff). - Tested both donor
561e3cf6EEPROM and native card eFuse + reference target power (0x1300..0x15ff = 0x2e/ 23 dBm). - Fixed the degenerate
82:00:00:00:00:00Band 1 MAC bug caused by zeroed0x0004..0x000fin561e3cf6(mt76_eeprom_override()only updatesdev->mphy.macaddrwithout writing back toeeprom + 0x0004beforemt7996_register_phy(MT_BAND1)). - Set
0x0198 = 0x00and0x01af = 0x00:NormalTRxfull runtime calibration onePhyIdx[1]executes for 503.75 ms, and thermal sensors read an accurate28.0 °C(ADC[0x41]).
- Bypassed OTP overwrite table
- ADIE 0 (
MT7976CN) RFSPI & Baseband (WF_PHY/WF_MAC):- All three 5 GHz slices in
ADIE 0(0x0f0001c8..01d4WF0,0x0f0001dc..01e8WF1,0x0f000724..0730WF2) transition from0x0120000X / 0xe314900c(OFF) to0x1266280X / 0xe3149186(ON) and switch sub-band LO bits (0xe3149186 -> 0xe3349186) between Ch 44 (5220 MHz) and Ch 149 (5745 MHz). - With
MT_WF_RFCR(0x820f5000) set to0x00000000(fcsfailenabled onmon5),WF_PHY(0x83181010 / 0x83181018) detects preambles and decodes 802.11a/ax headers on5220 MHz, passing frames totcpdump, but the measured RSSI from a+22 dBmtransmitter at 50 cm is-95 dBmon all three chains (0xe7,0xeb,0xf3).
- All three 5 GHz slices in
Questions for MediaTek / mt76 Maintainers
- In
MT7976CN(0x79768b00), RFSPI registers0x0f0003a4,0x0f0003d4,0x0f000524remain0x00000008(+0x28 = 0x00000114) on 5 GHz chains, whereas 2.4 GHz chains (0x0344,0x0374) have0x001fe088(+0x28 = 0x00000000). Furthermore, inWF_PHYper-chain windows, offset+0x73a0(0x00000d06) and+0x78d4..0x7ad0are populated in0x8313xxxx(chain 3) instead of0x8310..0x8312. Is there a specific EEPROM byte or RFSPI strap for0x79768b00required to unmute the internal 5 GHz iFEM/TRSW? - Could this batch of
BPI-R4-NIC-BE14cards (which shipped from the factory with uncalibrated0x00in0x1300..0x1317) have a hardware fault on the 5 GHz PA/LNA power rail (VDD_PA_5G) that caused the factory ATE calibration to abort after 2.4 GHz?
Bonus: Proposed fix for the 82:00:00:00:00:00 Band 1 MAC bug in mt7996_register_phy()
When MT_EE_MAC_ADDR (0x0004) and MT_EE_MAC_ADDR2 (0x000a) are both zeroed in EEPROM/DT-overlay (as in OpenWrt commit 561e3cf6), mt76_eeprom_override(&dev->mphy) populates dev->mphy.macaddr with a random/DT MAC, leaving eeprom + 0x0004 all-zeros. Subsequently, mt7996_register_phy() copies those zeros from eeprom + MT_EE_MAC_ADDR and flips bits to 82:00:00:00:00:00 before calling mt76_eeprom_override(mphy), which passes is_valid_ether_addr(). Copying the fallback MAC from dev->mphy.macaddr (instead of raw eeprom + MT_EE_MAC_ADDR) resolves this:
/* in mt7996_register_phy() (mt7996/init.c): */
if (!is_valid_ether_addr(mphy->macaddr)) {
memcpy(mphy->macaddr, dev->mphy.macaddr, ETH_ALEN);
mphy->macaddr[0] |= 2;
mphy->macaddr[0] ^= BIT(7);
}
- 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