wifi: rtw89: coex: Packet traffic arbitration hardware owner monitor
authorChing-Te Ku <ku920601@realtek.com>
Fri, 6 Jan 2023 12:08:42 +0000 (20:08 +0800)
committerKalle Valo <kvalo@kernel.org>
Mon, 16 Jan 2023 13:36:58 +0000 (15:36 +0200)
Because the difference of the hardware design, RTL8852C can not get the
PTA owner by the same method with RTL8852B, RTL8852A. Modify the get owner
API and related logic.

Signed-off-by: Ching-Te Ku <ku920601@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/20230106120844.17441-6-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/coex.c
drivers/net/wireless/realtek/rtw89/mac.c

index 03872ac..ec31dd0 100644 (file)
@@ -4873,7 +4873,7 @@ void rtw89_btc_ntfy_init(struct rtw89_dev *rtwdev, u8 mode)
        _write_scbd(rtwdev,
                    BTC_WSCB_ACTIVE | BTC_WSCB_ON | BTC_WSCB_BTLOG, true);
        _update_bt_scbd(rtwdev, true);
-       if (rtw89_mac_get_ctrl_path(rtwdev) && chip->chip_id == RTL8852A) {
+       if (rtw89_mac_get_ctrl_path(rtwdev)) {
                rtw89_debug(rtwdev, RTW89_DBG_BTC,
                            "[BTC], %s(): PTA owner warning!!\n",
                            __func__);
@@ -7082,10 +7082,7 @@ static void _show_mreg(struct rtw89_dev *rtwdev, struct seq_file *m)
 
        /* To avoid I/O if WL LPS or power-off  */
        if (!wl->status.map.lps && !wl->status.map.rf_off) {
-               if (chip->chip_id == RTL8852A)
-                       btc->dm.pta_owner = rtw89_mac_get_ctrl_path(rtwdev);
-               else if (chip->chip_id == RTL8852C)
-                       btc->dm.pta_owner = 0;
+               btc->dm.pta_owner = rtw89_mac_get_ctrl_path(rtwdev);
 
                _get_gnt(rtwdev, &gnt_cfg);
                gnt = gnt_cfg.band[0];
index cf9a0a3..5ab0590 100644 (file)
@@ -4865,9 +4865,16 @@ EXPORT_SYMBOL(rtw89_mac_cfg_ctrl_path_v1);
 
 bool rtw89_mac_get_ctrl_path(struct rtw89_dev *rtwdev)
 {
-       u8 val = rtw89_read8(rtwdev, R_AX_SYS_SDIO_CTRL + 3);
+       const struct rtw89_chip_info *chip = rtwdev->chip;
+       u8 val = 0;
+
+       if (chip->chip_id == RTL8852C)
+               return false;
+       else if (chip->chip_id == RTL8852A || chip->chip_id == RTL8852B)
+               val = rtw89_read8_mask(rtwdev, R_AX_SYS_SDIO_CTRL + 3,
+                                      B_AX_LTE_MUX_CTRL_PATH >> 24);
 
-       return FIELD_GET(B_AX_LTE_MUX_CTRL_PATH >> 24, val);
+       return !!val;
 }
 
 u16 rtw89_mac_get_plt_cnt(struct rtw89_dev *rtwdev, u8 band)