mt76: mt7915: fix the muru tlv issue
authorMeiChia Chiu <meichia.chiu@mediatek.com>
Tue, 15 Feb 2022 08:48:58 +0000 (16:48 +0800)
committerFelix Fietkau <nbd@nbd.name>
Thu, 24 Feb 2022 13:40:22 +0000 (14:40 +0100)
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>
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c

index 96f1fb0d0cee33d1ce9b3b389cd5f2f2112c596b..8c014299daa1247c86f733bf416de1ef968b68bb 100644 (file)
@@ -938,9 +938,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 = mt76_connac_mcu_add_tlv(skb, STA_REC_MURU, sizeof(*muru));
 
        muru = (struct sta_rec_muru *)tlv;
@@ -948,9 +945,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;
@@ -958,13 +958,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 =