mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 19:43:40 +02:00
wifi: rtw89: mac: add coexistence helpers {cfg/get}_plt
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
This commit is contained in:
parent
81e060584f
commit
0cb01e0edf
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -6457,6 +6457,20 @@
|
|||
#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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user