Commit bad67a26 authored by Sean Wang's avatar Sean Wang Committed by Felix Fietkau
Browse files

mt76: mt7915: fix mgmt frame using unexpected bitrate



Fix the current driver mgmt frame is not respecting the basic rates field
provided by the AP and then unconditionally is using the lowest (1 or 6
Mbps) rate.

For example, if the AP only supported basic rate {24, 36, 48, 54} Mbps,
mt7921 cannot send mgmt frame with the rate not in the group. So,
instead, we pick up the lowest basic rate the AP can support to send.

Fixes: e57b7901 ("mt76: add mac80211 driver for MT7915 PCIe-based chipsets")
Suggested-by: default avatarRyder Lee <ryder.lee@mediatek.com>
Signed-off-by: default avatarSean Wang <sean.wang@mediatek.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 326d229f
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -1053,15 +1053,15 @@ void mt7915_mac_write_txwi(struct mt7915_dev *dev, __le32 *txwi,
		mt7915_mac_write_txwi_80211(dev, txwi, skb, key);

	if (txwi[2] & cpu_to_le32(MT_TXD2_FIX_RATE)) {
		u16 rate;
		u16 rate, mode;

		/* hardware won't add HTC for mgmt/ctrl frame */
		txwi[2] |= cpu_to_le32(MT_TXD2_HTC_VLD);

		if (mphy->chandef.chan->band == NL80211_BAND_5GHZ)
			rate = MT7915_5G_RATE_DEFAULT;
		else
			rate = MT7915_2G_RATE_DEFAULT;
		rate = mt76_default_basic_rate(mphy, vif);
		mode = rate >> 8;
		rate &= GENMASK(7, 0);
		rate |= FIELD_PREP(MT_TX_RATE_MODE, mode);

		val = MT_TXD6_FIXED_BW |
		      FIELD_PREP(MT_TXD6_TX_RATE, rate);
+0 −2
Original line number Diff line number Diff line
@@ -36,8 +36,6 @@

#define MT7915_CFEND_RATE_DEFAULT	0x49	/* OFDM 24M */
#define MT7915_CFEND_RATE_11B		0x03	/* 11B LP, 11M */
#define MT7915_5G_RATE_DEFAULT		0x4b	/* OFDM 6M */
#define MT7915_2G_RATE_DEFAULT		0x0	/* CCK 1M */

#define MT7915_THERMAL_THROTTLE_MAX	100