]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mt76: mt7915: fix the muru tlv issue
authorMeiChia Chiu <meichia.chiu@mediatek.com>
Tue, 15 Feb 2022 08:48:58 +0000 (16:48 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Apr 2022 12:06:11 +0000 (14:06 +0200)
[ Upstream commit d98a72725bc96c98f68eac12e5a91ec349322c88 ]

The muru enable/disable are only set after the first station connection.
Without this patch, the firmware couldn't enable muru
if the first connected station is non-HE type.

Fixes: 16bff457dd33a ("mt76: mt7915: rework mt7915_mcu_sta_muru_tlv()")
Reviewed-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: MeiChia Chiu <meichia.chiu@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 21fbe7a6141fd3c100d67b3a7e64f6e64d4ad156..5ea82f05fd9168231576589a569ec05cad7c6a43 100644 (file)
@@ -1515,9 +1515,6 @@ mt7915_mcu_sta_muru_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
            vif->type != NL80211_IFTYPE_AP)
                return;
 
-       if (!sta->vht_cap.vht_supported)
-               return;
-
        tlv = mt7915_mcu_add_tlv(skb, STA_REC_MURU, sizeof(*muru));
 
        muru = (struct sta_rec_muru *)tlv;
@@ -1525,9 +1522,12 @@ mt7915_mcu_sta_muru_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
        muru->cfg.mimo_dl_en = mvif->cap.he_mu_ebfer ||
                               mvif->cap.vht_mu_ebfer ||
                               mvif->cap.vht_mu_ebfee;
+       muru->cfg.mimo_ul_en = true;
+       muru->cfg.ofdma_dl_en = true;
 
-       muru->mimo_dl.vht_mu_bfee =
-               !!(sta->vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE);
+       if (sta->vht_cap.vht_supported)
+               muru->mimo_dl.vht_mu_bfee =
+                       !!(sta->vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE);
 
        if (!sta->he_cap.has_he)
                return;
@@ -1535,13 +1535,11 @@ mt7915_mcu_sta_muru_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
        muru->mimo_dl.partial_bw_dl_mimo =
                HE_PHY(CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO, elem->phy_cap_info[6]);
 
-       muru->cfg.mimo_ul_en = true;
        muru->mimo_ul.full_ul_mimo =
                HE_PHY(CAP2_UL_MU_FULL_MU_MIMO, elem->phy_cap_info[2]);
        muru->mimo_ul.partial_ul_mimo =
                HE_PHY(CAP2_UL_MU_PARTIAL_MU_MIMO, elem->phy_cap_info[2]);
 
-       muru->cfg.ofdma_dl_en = true;
        muru->ofdma_dl.punc_pream_rx =
                HE_PHY(CAP1_PREAMBLE_PUNC_RX_MASK, elem->phy_cap_info[1]);
        muru->ofdma_dl.he_20m_in_40m_2g =