]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: rtw89: correct 5 MHz mask setting
authorEric Huang <echuang@realtek.com>
Thu, 6 Apr 2023 07:28:41 +0000 (15:28 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 May 2023 14:10:51 +0000 (23:10 +0900)
commit d33fc8d0368c180fe2338bfae4f5367a66a719f4 upstream.

Use primary channel index to determine which 5 MHz mask should be enable.
This mask is used to prevent noise from channel edge to effect CCA
threshold in wide bandwidth (>= 40 MHZ).

Fixes: 1b00e9236a71 ("rtw89: 8852c: add set channel of BB part")
Fixes: 6b0698984eb0 ("wifi: rtw89: 8852b: add chip_ops::set_channel")
Cc: stable@vger.kernel.org
Signed-off-by: Eric Huang <echuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20230406072841.8308-1-pkshih@realtek.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/wireless/realtek/rtw89/rtw8852b.c
drivers/net/wireless/realtek/rtw89/rtw8852c.c

index b635ac1d1ca2f5c7a2b24e27e8b3745c806c41b6..81b348631519d4625232323127924c9014495b99 100644 (file)
@@ -1284,7 +1284,7 @@ static void rtw8852b_ctrl_cck_en(struct rtw89_dev *rtwdev, bool cck_en)
 static void rtw8852b_5m_mask(struct rtw89_dev *rtwdev, const struct rtw89_chan *chan,
                             enum rtw89_phy_idx phy_idx)
 {
-       u8 pri_ch = chan->primary_channel;
+       u8 pri_ch = chan->pri_ch_idx;
        bool mask_5m_low;
        bool mask_5m_en;
 
@@ -1292,12 +1292,13 @@ static void rtw8852b_5m_mask(struct rtw89_dev *rtwdev, const struct rtw89_chan *
        case RTW89_CHANNEL_WIDTH_40:
                /* Prich=1: Mask 5M High, Prich=2: Mask 5M Low */
                mask_5m_en = true;
-               mask_5m_low = pri_ch == 2;
+               mask_5m_low = pri_ch == RTW89_SC_20_LOWER;
                break;
        case RTW89_CHANNEL_WIDTH_80:
                /* Prich=3: Mask 5M High, Prich=4: Mask 5M Low, Else: Disable */
-               mask_5m_en = pri_ch == 3 || pri_ch == 4;
-               mask_5m_low = pri_ch == 4;
+               mask_5m_en = pri_ch == RTW89_SC_20_UPMOST ||
+                            pri_ch == RTW89_SC_20_LOWEST;
+               mask_5m_low = pri_ch == RTW89_SC_20_LOWEST;
                break;
        default:
                mask_5m_en = false;
index a87482cc25f58f182151cc45f479b1250ba6b282..4f57d76ba26f7ae8501369a12ac85d97e5d753b7 100644 (file)
@@ -1445,18 +1445,19 @@ static void rtw8852c_5m_mask(struct rtw89_dev *rtwdev,
                             const struct rtw89_chan *chan,
                             enum rtw89_phy_idx phy_idx)
 {
-       u8 pri_ch = chan->primary_channel;
+       u8 pri_ch = chan->pri_ch_idx;
        bool mask_5m_low;
        bool mask_5m_en;
 
        switch (chan->band_width) {
        case RTW89_CHANNEL_WIDTH_40:
                mask_5m_en = true;
-               mask_5m_low = pri_ch == 2;
+               mask_5m_low = pri_ch == RTW89_SC_20_LOWER;
                break;
        case RTW89_CHANNEL_WIDTH_80:
-               mask_5m_en = ((pri_ch == 3) || (pri_ch == 4));
-               mask_5m_low = pri_ch == 4;
+               mask_5m_en = pri_ch == RTW89_SC_20_UPMOST ||
+                            pri_ch == RTW89_SC_20_LOWEST;
+               mask_5m_low = pri_ch == RTW89_SC_20_LOWEST;
                break;
        default:
                mask_5m_en = false;