]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: rtw89: mac: add coexistence helpers {cfg/get}_plt
authorPing-Ke Shih <pkshih@realtek.com>
Thu, 29 Feb 2024 07:45:07 +0000 (15:45 +0800)
committerKalle Valo <kvalo@kernel.org>
Tue, 5 Mar 2024 18:54:45 +0000 (20:54 +0200)
When hardware grant BT initially but transition to grant WiFi, the PLT
(polluted) bit is set to assist coexistence mechanism to debug if
grant signal is expected.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://msgid.link/20240229074514.219276-2-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/mac.c
drivers/net/wireless/realtek/rtw89/mac.h
drivers/net/wireless/realtek/rtw89/mac_be.c
drivers/net/wireless/realtek/rtw89/reg.h

index 908245ac46bd54ec08e3fce8176a469829476a24..288383ee6d1e2d70d09db9c649cd4ed104b5356e 100644 (file)
@@ -5615,7 +5615,8 @@ int rtw89_mac_cfg_gnt_v1(struct rtw89_dev *rtwdev,
 }
 EXPORT_SYMBOL(rtw89_mac_cfg_gnt_v1);
 
-int rtw89_mac_cfg_plt(struct rtw89_dev *rtwdev, struct rtw89_mac_ax_plt *plt)
+static
+int rtw89_mac_cfg_plt_ax(struct rtw89_dev *rtwdev, struct rtw89_mac_ax_plt *plt)
 {
        u32 reg;
        u16 val;
@@ -5711,7 +5712,7 @@ bool rtw89_mac_get_ctrl_path(struct rtw89_dev *rtwdev)
        return !!val;
 }
 
-u16 rtw89_mac_get_plt_cnt(struct rtw89_dev *rtwdev, u8 band)
+static u16 rtw89_mac_get_plt_cnt_ax(struct rtw89_dev *rtwdev, u8 band)
 {
        u32 reg;
        u16 cnt;
@@ -6340,6 +6341,9 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_ax = {
        .parse_phycap_map = rtw89_parse_phycap_map_ax,
        .cnv_efuse_state = rtw89_cnv_efuse_state_ax,
 
+       .cfg_plt = rtw89_mac_cfg_plt_ax,
+       .get_plt_cnt = rtw89_mac_get_plt_cnt_ax,
+
        .get_txpwr_cr = rtw89_mac_get_txpwr_cr_ax,
 
        .write_xtal_si = rtw89_mac_write_xtal_si_ax,
index db95509fad2f3aaf6fa04389f3b124bd4e11cef9..721a5715037809b30faa51ad53fdc31ebbc1cea6 100644 (file)
@@ -958,6 +958,9 @@ struct rtw89_mac_gen_def {
        int (*parse_phycap_map)(struct rtw89_dev *rtwdev);
        int (*cnv_efuse_state)(struct rtw89_dev *rtwdev, bool idle);
 
+       int (*cfg_plt)(struct rtw89_dev *rtwdev, struct rtw89_mac_ax_plt *plt);
+       u16 (*get_plt_cnt)(struct rtw89_dev *rtwdev, u8 band);
+
        bool (*get_txpwr_cr)(struct rtw89_dev *rtwdev,
                             enum rtw89_phy_idx phy_idx,
                             u32 reg_base, u32 *cr);
@@ -1185,8 +1188,23 @@ int rtw89_mac_cfg_gnt(struct rtw89_dev *rtwdev,
                      const struct rtw89_mac_ax_coex_gnt *gnt_cfg);
 int rtw89_mac_cfg_gnt_v1(struct rtw89_dev *rtwdev,
                         const struct rtw89_mac_ax_coex_gnt *gnt_cfg);
-int rtw89_mac_cfg_plt(struct rtw89_dev *rtwdev, struct rtw89_mac_ax_plt *plt);
-u16 rtw89_mac_get_plt_cnt(struct rtw89_dev *rtwdev, u8 band);
+
+static inline
+int rtw89_mac_cfg_plt(struct rtw89_dev *rtwdev, struct rtw89_mac_ax_plt *plt)
+{
+       const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
+
+       return mac->cfg_plt(rtwdev, plt);
+}
+
+static inline
+u16 rtw89_mac_get_plt_cnt(struct rtw89_dev *rtwdev, u8 band)
+{
+       const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
+
+       return mac->get_plt_cnt(rtwdev, band);
+}
+
 void rtw89_mac_cfg_sb(struct rtw89_dev *rtwdev, u32 val);
 u32 rtw89_mac_get_sb(struct rtw89_dev *rtwdev);
 bool rtw89_mac_get_ctrl_path(struct rtw89_dev *rtwdev);
index 320e88229971e7549b7afd8fc2cbaf0743387710..c68fef0f55f1747e598edede5ebe2c7d8505cd06 100644 (file)
@@ -1797,6 +1797,44 @@ static int trx_init_be(struct rtw89_dev *rtwdev)
        return 0;
 }
 
+static
+int rtw89_mac_cfg_plt_be(struct rtw89_dev *rtwdev, struct rtw89_mac_ax_plt *plt)
+{
+       u32 reg;
+       u16 val;
+       int ret;
+
+       ret = rtw89_mac_check_mac_en(rtwdev, plt->band, RTW89_CMAC_SEL);
+       if (ret)
+               return ret;
+
+       reg = rtw89_mac_reg_by_idx(rtwdev, R_BE_BT_PLT, plt->band);
+       val = (plt->tx & RTW89_MAC_AX_PLT_LTE_RX ? B_BE_TX_PLT_GNT_LTE_RX : 0) |
+             (plt->tx & RTW89_MAC_AX_PLT_GNT_BT_TX ? B_BE_TX_PLT_GNT_BT_TX : 0) |
+             (plt->tx & RTW89_MAC_AX_PLT_GNT_BT_RX ? B_BE_TX_PLT_GNT_BT_RX : 0) |
+             (plt->tx & RTW89_MAC_AX_PLT_GNT_WL ? B_BE_TX_PLT_GNT_WL : 0) |
+             (plt->rx & RTW89_MAC_AX_PLT_LTE_RX ? B_BE_RX_PLT_GNT_LTE_RX : 0) |
+             (plt->rx & RTW89_MAC_AX_PLT_GNT_BT_TX ? B_BE_RX_PLT_GNT_BT_TX : 0) |
+             (plt->rx & RTW89_MAC_AX_PLT_GNT_BT_RX ? B_BE_RX_PLT_GNT_BT_RX : 0) |
+             (plt->rx & RTW89_MAC_AX_PLT_GNT_WL ? B_BE_RX_PLT_GNT_WL : 0) |
+             B_BE_PLT_EN;
+       rtw89_write16(rtwdev, reg, val);
+
+       return 0;
+}
+
+static u16 rtw89_mac_get_plt_cnt_be(struct rtw89_dev *rtwdev, u8 band)
+{
+       u32 reg;
+       u16 cnt;
+
+       reg = rtw89_mac_reg_by_idx(rtwdev, R_BE_BT_PLT, band);
+       cnt = rtw89_read32_mask(rtwdev, reg, B_BE_BT_PLT_PKT_CNT_MASK);
+       rtw89_write16_set(rtwdev, reg, B_BE_BT_PLT_RST);
+
+       return cnt;
+}
+
 static int rtw89_set_hw_sch_tx_en_v2(struct rtw89_dev *rtwdev, u8 mac_idx,
                                     u32 tx_en, u32 tx_en_mask)
 {
@@ -2439,6 +2477,9 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_be = {
        .parse_phycap_map = rtw89_parse_phycap_map_be,
        .cnv_efuse_state = rtw89_cnv_efuse_state_be,
 
+       .cfg_plt = rtw89_mac_cfg_plt_be,
+       .get_plt_cnt = rtw89_mac_get_plt_cnt_be,
+
        .get_txpwr_cr = rtw89_mac_get_txpwr_cr_be,
 
        .write_xtal_si = rtw89_mac_write_xtal_si_be,
index 37ccd8ffa87a5d9a13f0c3936549839e0c557275..c2751391044a3037db79379d117737a4c6131cac 100644 (file)
 #define B_BE_PORT_DROP_4_0_MASK GENMASK(20, 16)
 #define B_BE_MBSSID_DROP_15_0_MASK GENMASK(15, 0)
 
+#define R_BE_BT_PLT 0x1087C
+#define R_BE_BT_PLT_C1 0x1487C
+#define B_BE_BT_PLT_PKT_CNT_MASK GENMASK(31, 16)
+#define B_BE_BT_PLT_RST BIT(9)
+#define B_BE_PLT_EN BIT(8)
+#define B_BE_RX_PLT_GNT_LTE_RX BIT(7)
+#define B_BE_RX_PLT_GNT_BT_RX BIT(6)
+#define B_BE_RX_PLT_GNT_BT_TX BIT(5)
+#define B_BE_RX_PLT_GNT_WL BIT(4)
+#define B_BE_TX_PLT_GNT_LTE_RX BIT(3)
+#define B_BE_TX_PLT_GNT_BT_RX BIT(2)
+#define B_BE_TX_PLT_GNT_BT_TX BIT(1)
+#define B_BE_TX_PLT_GNT_WL BIT(0)
+
 #define R_BE_PTCL_BSS_COLOR_0 0x108A0
 #define R_BE_PTCL_BSS_COLOR_0_C1 0x148A0
 #define B_BE_BSS_COLOB_BE_PORT_3_MASK GENMASK(29, 24)