[PATCH v3 0/1] wifi: mt76: mt7921: fix txpower reporting from rate power configuration
Lucid Duck
lucid_duck at justthetip.ca
Tue Mar 17 10:30:15 PDT 2026
Sean, Felix,
Here's v3 of the txpower fix, reworked based on both of your feedback.
Felix pointed out in v1 review that the fix should determine the maximum
rate power from the loop in mt76_connac_mcu_rate_txpower_band(). Sean
confirmed this direction in v2 review and clarified that the value should
come from the same computation that configures the firmware's per-rate
power tables, not from bss_conf.txpower.
v3 does exactly that. The loop already computes the right value via
mt76_get_rate_power_limits() but discards the return. This patch
captures it and stores it to phy->txpower_cur for the current channel,
matching how mt7915 handles this in mt7915_mcu_set_txpower_sku().
Nick independently confirmed v2 produced correct values on his
MT7921AU -- v3 preserves those results while addressing the
source-of-truth concern.
Two additional issues came up during implementation:
- mt7921's chanctx callbacks don't update phy->chandef (the common
mt76_add_chanctx does, but mt7921 overrides it with a minimal
version). Fixed by syncing chandef from ctx->def and re-triggering
the rate power path in add_chanctx and change_chanctx.
- For chanctx drivers, mac80211 routes iw set txpower through
BSS_CHANGED_TXPOWER, not IEEE80211_CONF_CHANGE_POWER, and never
updates hw->conf.power_level. Added a BSS_CHANGED_TXPOWER handler
to bridge this into the rate power path.
Tested on Alfa AWUS036AXML (MT7921AU), kernel 6.17.1, Canada:
Band Auto User limit (15dBm) Stock (before)
2.4GHz 33 dBm 18 dBm 3 dBm
5GHz 26 dBm 18 dBm 3 dBm
6GHz 15 dBm 8 dBm (5dBm limit) 3 dBm
Values match regulatory limits + 3 dBm 2x2 path delta.
Test suite (973 tests, 3.5 hours):
Regulatory accuracy: correct on all 3 bands (2.4/5/6 GHz)
User txpower sweep: every 1 dBm from 1 to reg_max, all 3 bands
Band switching: 100 cycles between 2.4 and 5 GHz, 0 failures
Module reload: 50 rmmod/insmod/connect/verify cycles, 0 failures
2-hour soak: 480 samples at 15s intervals, zero drift
Band rotation soak: 30 rotations across all 3 bands over 1 hour,
240 samples, 0 failures
Regdomain switching: 10 countries (CA/US/JP/DE/GB/AU/NZ/BR/KR/TW)
mid-session without reconnecting, all correct
(JP correctly dropped to 23 dBm on 5GHz UNII-1)
Monitor mode: correct on ch1/6/11 (2.4GHz) and ch36/44/149
(5GHz), txpower set works in monitor mode
Edge cases: min power (1dBm), over-max clamping, rapid
power changes (10 in 10s), all correct
Firmware cross-check: debugfs txpower_sku confirms per-rate tables
match regulatory limits on all bands
Lucid Duck (1):
wifi: mt76: mt7921: fix txpower reporting from rate power
configuration
.../wireless/mediatek/mt76/mt76_connac_mcu.c | 12 +++++++---
.../net/wireless/mediatek/mt76/mt7921/main.c | 22 ++++++++++++++++++-
2 files changed, 30 insertions(+), 4 deletions(-)
--
2.51.0
More information about the Linux-mediatek
mailing list