rtw89: initialize NAV control
authorPing-Ke Shih <pkshih@realtek.com>
Fri, 25 Mar 2022 06:00:53 +0000 (14:00 +0800)
committerKalle Valo <kvalo@kernel.org>
Wed, 6 Apr 2022 08:55:15 +0000 (11:55 +0300)
Configure NAV function and its parameters.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220325060055.58482-15-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/mac.c
drivers/net/wireless/realtek/rtw89/reg.h

index 16a97bc..c0e3514 100644 (file)
@@ -1883,6 +1883,16 @@ static int cca_ctrl_init(struct rtw89_dev *rtwdev, u8 mac_idx)
        return 0;
 }
 
+static int nav_ctrl_init(struct rtw89_dev *rtwdev)
+{
+       rtw89_write32_set(rtwdev, R_AX_WMAC_NAV_CTL, B_AX_WMAC_PLCP_UP_NAV_EN |
+                                                    B_AX_WMAC_TF_UP_NAV_EN |
+                                                    B_AX_WMAC_NAV_UPPER_EN);
+       rtw89_write32_mask(rtwdev, R_AX_WMAC_NAV_CTL, B_AX_WMAC_NAV_UPPER_MASK, NAV_12MS);
+
+       return 0;
+}
+
 static int spatial_reuse_init(struct rtw89_dev *rtwdev, u8 mac_idx)
 {
        u32 reg;
@@ -2098,6 +2108,13 @@ static int cmac_init(struct rtw89_dev *rtwdev, u8 mac_idx)
                return ret;
        }
 
+       ret = nav_ctrl_init(rtwdev);
+       if (ret) {
+               rtw89_err(rtwdev, "[ERR]CMAC%d NAV CTRL init %d\n", mac_idx,
+                         ret);
+               return ret;
+       }
+
        ret = spatial_reuse_init(rtwdev, mac_idx);
        if (ret) {
                rtw89_err(rtwdev, "[ERR]CMAC%d Spatial Reuse init %d\n",
index dea7d2c..aca9fc3 100644 (file)
 #define R_AX_MAC_LOOPBACK_C1 0xEC20
 #define B_AX_MACLBK_EN BIT(0)
 
+#define R_AX_WMAC_NAV_CTL 0xCC80
+#define R_AX_WMAC_NAV_CTL_C1 0xEC80
+#define B_AX_WMAC_NAV_UPPER_EN BIT(26)
+#define B_AX_WMAC_0P125US_TIMER_MASK GENMASK(25, 18)
+#define B_AX_WMAC_PLCP_UP_NAV_EN BIT(17)
+#define B_AX_WMAC_TF_UP_NAV_EN BIT(16)
+#define B_AX_WMAC_NAV_UPPER_MASK GENMASK(15, 8)
+#define NAV_12MS 0xBC
+#define B_AX_WMAC_RTS_RST_DUR_MASK GENMASK(7, 0)
+
 #define R_AX_RXTRIG_TEST_USER_2 0xCCB0
 #define R_AX_RXTRIG_TEST_USER_2_C1 0xECB0
 #define B_AX_RXTRIG_MACID_MASK GENMASK(31, 24)