]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: mt76: mt7915: fix mcs value in ht mode
authorHoward Hsu <howard-yh.hsu@mediatek.com>
Mon, 15 Aug 2022 03:29:31 +0000 (11:29 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Oct 2022 07:57:10 +0000 (09:57 +0200)
[ Upstream commit c6d3e16ad4362502e804a6ca01e955612f3b8222 ]

Fix the error that mcs will be reduced to a range of 0 to 7 in ht mode.

Fixes: 70fd1333cd32 ("mt76: mt7915: rework .set_bitrate_mask() to support more options")
Signed-off-by: Howard Hsu <howard-yh.hsu@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c

index 17fa2acc0d0706d6edad88fad320fdd43b352a6d..ec8a5083466f748fe7d82c56d4d772837d8ea71f 100644 (file)
@@ -1460,7 +1460,7 @@ mt7915_mcu_add_rate_ctrl_fixed(struct mt7915_dev *dev,
        struct sta_phy phy = {};
        int ret, nrates = 0;
 
-#define __sta_phy_bitrate_mask_check(_mcs, _gi, _he)                           \
+#define __sta_phy_bitrate_mask_check(_mcs, _gi, _ht, _he)                      \
        do {                                                                    \
                u8 i, gi = mask->control[band]._gi;                             \
                gi = (_he) ? gi : gi == NL80211_TXRATE_FORCE_SGI;               \
@@ -1473,15 +1473,17 @@ mt7915_mcu_add_rate_ctrl_fixed(struct mt7915_dev *dev,
                                continue;                                       \
                        nrates += hweight16(mask->control[band]._mcs[i]);       \
                        phy.mcs = ffs(mask->control[band]._mcs[i]) - 1;         \
+                       if (_ht)                                                \
+                               phy.mcs += 8 * i;                               \
                }                                                               \
        } while (0)
 
        if (sta->deflink.he_cap.has_he) {
-               __sta_phy_bitrate_mask_check(he_mcs, he_gi, 1);
+               __sta_phy_bitrate_mask_check(he_mcs, he_gi, 0, 1);
        } else if (sta->deflink.vht_cap.vht_supported) {
-               __sta_phy_bitrate_mask_check(vht_mcs, gi, 0);
+               __sta_phy_bitrate_mask_check(vht_mcs, gi, 0, 0);
        } else if (sta->deflink.ht_cap.ht_supported) {
-               __sta_phy_bitrate_mask_check(ht_mcs, gi, 0);
+               __sta_phy_bitrate_mask_check(ht_mcs, gi, 1, 0);
        } else {
                nrates = hweight32(mask->control[band].legacy);
                phy.mcs = ffs(mask->control[band].legacy) - 1;