wifi: mt76: mt7925: fix SAP no beacon issue in 5Ghz and 6Ghz band
authorrong.yan <rong.yan@mediatek.com>
Fri, 29 Dec 2023 03:09:29 +0000 (11:09 +0800)
committerFelix Fietkau <nbd@nbd.name>
Thu, 22 Feb 2024 08:55:17 +0000 (09:55 +0100)
Driver should configure basic rate and phy mode for SAP mode.

Fixes: c948b5da6bbe ("wifi: mt76: mt7925: add Mediatek Wi-Fi7 driver for mt7925 chips")
Signed-off-by: rong.yan <rong.yan@mediatek.com>
Signed-off-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
drivers/net/wireless/mediatek/mt76/mt7925/mcu.c
drivers/net/wireless/mediatek/mt76/mt7925/mcu.h

index ae6d0179727dfbb1b46ee1a25bf624f94d2cd8c6..db96ddbeb9e70ca833df0ecfb9aac2a5e4648ad6 100644 (file)
@@ -935,6 +935,9 @@ enum {
        PHY_TYPE_INDEX_NUM
 };
 
+#define HR_DSSS_ERP_BASIC_RATE                 GENMASK(3, 0)
+#define OFDM_BASIC_RATE                                (BIT(6) | BIT(8) | BIT(10))
+
 #define PHY_TYPE_BIT_HR_DSSS                   BIT(PHY_TYPE_HR_DSSS_INDEX)
 #define PHY_TYPE_BIT_ERP                       BIT(PHY_TYPE_ERP_INDEX)
 #define PHY_TYPE_BIT_OFDM                      BIT(PHY_TYPE_OFDM_INDEX)
index 1fc9ecb96bc43a82a34c7ffbcc0c0d19ab9c3f2f..9a8db9b1a4f2bfa0dd8d019819eb6e5fa58a951e 100644 (file)
@@ -2047,9 +2047,9 @@ mt7925_mcu_bss_basic_tlv(struct sk_buff *skb,
        struct cfg80211_chan_def *chandef = ctx ? &ctx->def : &phy->chandef;
        enum nl80211_band band = chandef->chan->band;
        struct mt76_connac_bss_basic_tlv *basic_req;
-       u8 idx, basic_phy;
        struct tlv *tlv;
        int conn_type;
+       u8 idx;
 
        tlv = mt76_connac_mcu_add_tlv(skb, UNI_BSS_INFO_BASIC, sizeof(*basic_req));
        basic_req = (struct mt76_connac_bss_basic_tlv *)tlv;
@@ -2060,8 +2060,10 @@ mt7925_mcu_bss_basic_tlv(struct sk_buff *skb,
 
        basic_req->phymode_ext = mt7925_get_phy_mode_ext(phy, vif, band, sta);
 
-       basic_phy = mt76_connac_get_phy_mode_v2(phy, vif, band, sta);
-       basic_req->nonht_basic_phy = cpu_to_le16(basic_phy);
+       if (band == NL80211_BAND_2GHZ)
+               basic_req->nonht_basic_phy = cpu_to_le16(PHY_TYPE_ERP_INDEX);
+       else
+               basic_req->nonht_basic_phy = cpu_to_le16(PHY_TYPE_OFDM_INDEX);
 
        memcpy(basic_req->bssid, vif->bss_conf.bssid, ETH_ALEN);
        basic_req->phymode = mt76_connac_get_phy_mode(phy, vif, band, sta);
@@ -2165,6 +2167,11 @@ mt7925_mcu_bss_bmc_tlv(struct sk_buff *skb, struct mt792x_phy *phy,
 
        bmc = (struct bss_rate_tlv *)tlv;
 
+       if (band == NL80211_BAND_2GHZ)
+               bmc->basic_rate = cpu_to_le16(HR_DSSS_ERP_BASIC_RATE);
+       else
+               bmc->basic_rate = cpu_to_le16(OFDM_BASIC_RATE);
+
        bmc->short_preamble = (band == NL80211_BAND_2GHZ);
        bmc->bc_fixed_rate = idx;
        bmc->mc_fixed_rate = idx;
index 3c41e21303b1fe6c9409949164d06bae4e3e2563..0218fd2a0eb01a9fb4263b85d154a2f909b95fb0 100644 (file)
@@ -334,7 +334,8 @@ struct bss_req_hdr {
 struct bss_rate_tlv {
        __le16 tag;
        __le16 len;
-       u8 __rsv1[4];
+       u8 __rsv1[2];
+       __le16 basic_rate;
        __le16 bc_trans;
        __le16 mc_trans;
        u8 short_preamble;