mbox series

[0/4] wifi: mt76: fix returned txpower for mt7921 and mt7925

Message ID 20250209011856.6726-1-razvan.grigore@vampirebyte.ro
Headers show
Series wifi: mt76: fix returned txpower for mt7921 and mt7925 | expand

Message

Razvan Grigore Feb. 9, 2025, 1:18 a.m. UTC
When reading the txpower with `iw dev wlan1` the returned value is
always 3.00 dBm, no matter what reg domain is set or if one changes the
txpower manually.

This bug was discovered by me and confirmed by many people using this
chipset on openwrt: https://github.com/openwrt/mt76/issues/783

I tracked the code for this and it seems that for those 2 chipsets
particularly, the mt76_phy->txpower_cur is never set, in contrast to
other chipsets like mt7603, mt7615, mt76x0, mt7915, etc.

Added some debug logs in the mt76_get_txpower function and I got:

[   26.816227] mt7921u 2-1:1.3: mt76_get_txpower: phy->txpower_cur = 0
[   26.816234] mt7921u 2-1:1.3: mt76_get_txpower: n_chains = 2
[   26.816236] mt7921u 2-1:1.3: mt76_get_txpower: delta = 6
[   26.816237] mt7921u 2-1:1.3: mt76_get_txpower: *dbm = 3

So the driver is correctly calculating the TX power adjustment based on
the number of antennas. However, the base TX power (phy->txpower_cur)
is not being properly initialized or set to a meaningful value.
It's starting at 0, so the final result is just the antenna
gain compensation divided by 2.

While investigating this I found commit ff94604 that adds a separate
function for _get_power_bound so decided to reuse it for all 3 chipsets,
might be needed in the future as well.

Tested-on: Alfa Network AWUS036AXML
... and it also reacts to manual txpower changes now.

Thank you in advance for looking into this!
R

Razvan Grigore (4):
  wifi: mt76: add mt76_get_power_bound helper function
  wifi: mt76: mt7921: fix returned txpower
  wifi: mt76: mt7925: fix returned txpower
  wifi: mt76: mt7915: cleanup mt7915_get_power_bound

 drivers/net/wireless/mediatek/mt76/mac80211.c       | 11 +++++++++++
 drivers/net/wireless/mediatek/mt76/mt76.h           |  2 ++
 drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c |  8 ++++----
 drivers/net/wireless/mediatek/mt76/mt7915/mcu.c     |  4 ++--
 drivers/net/wireless/mediatek/mt76/mt7915/mcu.h     | 12 ------------
 drivers/net/wireless/mediatek/mt76/mt7921/main.c    |  7 +++++++
 drivers/net/wireless/mediatek/mt76/mt7925/main.c    |  7 +++++++
 7 files changed, 33 insertions(+), 18 deletions(-)