mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
wifi: rtw89: wow: update WoWLAN reason register for different FW
Need to update WoWLAN wakeup reason register after firmware version 0.35.22.0 for RTL8922A, and 0.27.80.0 for RTL8852CE. Signed-off-by: Chih-Kang Chang <gary.chang@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20240620055825.17592-3-pkshih@realtek.com
This commit is contained in:
parent
0065199f43
commit
0e52102177
10 changed files with 45 additions and 7 deletions
|
@ -4236,7 +4236,7 @@ struct rtw89_chip_info {
|
|||
const u32 *c2h_regs;
|
||||
struct rtw89_reg_def c2h_counter_reg;
|
||||
const struct rtw89_page_regs *page_regs;
|
||||
u32 wow_reason_reg;
|
||||
const u32 *wow_reason_reg;
|
||||
bool cfo_src_fd;
|
||||
bool cfo_hw_comp;
|
||||
const struct rtw89_reg_def *dcfo_comp;
|
||||
|
@ -4346,6 +4346,7 @@ enum rtw89_fw_feature {
|
|||
RTW89_FW_FEATURE_NO_LPS_PG,
|
||||
RTW89_FW_FEATURE_BEACON_FILTER,
|
||||
RTW89_FW_FEATURE_MACID_PAUSE_SLEEP,
|
||||
RTW89_FW_FEATURE_WOW_REASON_V1,
|
||||
};
|
||||
|
||||
struct rtw89_fw_suit {
|
||||
|
|
|
@ -675,10 +675,12 @@ static const struct __fw_feat_cfg fw_feat_tbl[] = {
|
|||
__CFG_FW_FEAT(RTL8852C, ge, 0, 27, 36, 0, SCAN_OFFLOAD),
|
||||
__CFG_FW_FEAT(RTL8852C, ge, 0, 27, 40, 0, CRASH_TRIGGER),
|
||||
__CFG_FW_FEAT(RTL8852C, ge, 0, 27, 56, 10, BEACON_FILTER),
|
||||
__CFG_FW_FEAT(RTL8852C, ge, 0, 27, 80, 0, WOW_REASON_V1),
|
||||
__CFG_FW_FEAT(RTL8922A, ge, 0, 34, 30, 0, CRASH_TRIGGER),
|
||||
__CFG_FW_FEAT(RTL8922A, ge, 0, 34, 11, 0, MACID_PAUSE_SLEEP),
|
||||
__CFG_FW_FEAT(RTL8922A, ge, 0, 34, 35, 0, SCAN_OFFLOAD),
|
||||
__CFG_FW_FEAT(RTL8922A, ge, 0, 35, 12, 0, BEACON_FILTER),
|
||||
__CFG_FW_FEAT(RTL8922A, ge, 0, 35, 22, 0, WOW_REASON_V1),
|
||||
};
|
||||
|
||||
static void rtw89_fw_iterate_feature_cfg(struct rtw89_fw_info *fw,
|
||||
|
|
|
@ -4659,4 +4659,10 @@ const struct rtw89_rfe_parms *
|
|||
rtw89_load_rfe_data_from_fw(struct rtw89_dev *rtwdev,
|
||||
const struct rtw89_rfe_parms *init);
|
||||
|
||||
enum rtw89_wow_wakeup_ver {
|
||||
RTW89_WOW_REASON_V0,
|
||||
RTW89_WOW_REASON_V1,
|
||||
RTW89_WOW_REASON_NUM,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -311,6 +311,8 @@
|
|||
#define B_AX_S1_LDO2PWRCUT_F BIT(23)
|
||||
#define B_AX_S0_LDO_VSEL_F_MASK GENMASK(22, 21)
|
||||
|
||||
#define R_AX_DBG_WOW 0x0504
|
||||
|
||||
#define R_AX_SEC_CTRL 0x0C00
|
||||
#define B_AX_SEC_IDMEM_SIZE_CONFIG_MASK GENMASK(17, 16)
|
||||
|
||||
|
@ -4315,6 +4317,8 @@
|
|||
|
||||
#define R_BE_WLCPU_PORT_PC 0x03FC
|
||||
|
||||
#define R_BE_DBG_WOW 0x0504
|
||||
|
||||
#define R_BE_DCPU_PLATFORM_ENABLE 0x0888
|
||||
#define B_BE_DCPU_SYM_DPLT_MEM_MUX_EN BIT(10)
|
||||
#define B_BE_DCPU_WARM_EN BIT(9)
|
||||
|
|
|
@ -105,6 +105,10 @@ static const u32 rtw8851b_c2h_regs[RTW89_C2HREG_MAX] = {
|
|||
R_AX_C2HREG_DATA3
|
||||
};
|
||||
|
||||
static const u32 rtw8851b_wow_wakeup_regs[RTW89_WOW_REASON_NUM] = {
|
||||
R_AX_C2HREG_DATA3 + 3, R_AX_C2HREG_DATA3 + 3,
|
||||
};
|
||||
|
||||
static const struct rtw89_page_regs rtw8851b_page_regs = {
|
||||
.hci_fc_ctrl = R_AX_HCI_FC_CTRL,
|
||||
.ch_page_ctrl = R_AX_CH_PAGE_CTRL,
|
||||
|
@ -2509,7 +2513,7 @@ const struct rtw89_chip_info rtw8851b_chip_info = {
|
|||
.c2h_counter_reg = {R_AX_UDM1 + 1, B_AX_UDM1_HALMAC_C2H_ENQ_CNT_MASK >> 8},
|
||||
.c2h_regs = rtw8851b_c2h_regs,
|
||||
.page_regs = &rtw8851b_page_regs,
|
||||
.wow_reason_reg = R_AX_C2HREG_DATA3 + 3,
|
||||
.wow_reason_reg = rtw8851b_wow_wakeup_regs,
|
||||
.cfo_src_fd = true,
|
||||
.cfo_hw_comp = true,
|
||||
.dcfo_comp = &rtw8851b_dcfo_comp,
|
||||
|
|
|
@ -398,6 +398,10 @@ static const u32 rtw8852a_c2h_regs[RTW89_C2HREG_MAX] = {
|
|||
R_AX_C2HREG_DATA3
|
||||
};
|
||||
|
||||
static const u32 rtw8852a_wow_wakeup_regs[RTW89_WOW_REASON_NUM] = {
|
||||
R_AX_C2HREG_DATA3 + 3, R_AX_C2HREG_DATA3 + 3,
|
||||
};
|
||||
|
||||
static const struct rtw89_page_regs rtw8852a_page_regs = {
|
||||
.hci_fc_ctrl = R_AX_HCI_FC_CTRL,
|
||||
.ch_page_ctrl = R_AX_CH_PAGE_CTRL,
|
||||
|
@ -2225,7 +2229,7 @@ const struct rtw89_chip_info rtw8852a_chip_info = {
|
|||
.c2h_regs = rtw8852a_c2h_regs,
|
||||
.c2h_counter_reg = {R_AX_UDM1 + 1, B_AX_UDM1_HALMAC_C2H_ENQ_CNT_MASK >> 8},
|
||||
.page_regs = &rtw8852a_page_regs,
|
||||
.wow_reason_reg = R_AX_C2HREG_DATA3 + 3,
|
||||
.wow_reason_reg = rtw8852a_wow_wakeup_regs,
|
||||
.cfo_src_fd = false,
|
||||
.cfo_hw_comp = false,
|
||||
.dcfo_comp = &rtw8852a_dcfo_comp,
|
||||
|
|
|
@ -76,6 +76,10 @@ static const u32 rtw8852b_c2h_regs[RTW89_C2HREG_MAX] = {
|
|||
R_AX_C2HREG_DATA3
|
||||
};
|
||||
|
||||
static const u32 rtw8852b_wow_wakeup_regs[RTW89_WOW_REASON_NUM] = {
|
||||
R_AX_C2HREG_DATA3 + 3, R_AX_C2HREG_DATA3 + 3,
|
||||
};
|
||||
|
||||
static const struct rtw89_page_regs rtw8852b_page_regs = {
|
||||
.hci_fc_ctrl = R_AX_HCI_FC_CTRL,
|
||||
.ch_page_ctrl = R_AX_CH_PAGE_CTRL,
|
||||
|
@ -1026,7 +1030,7 @@ const struct rtw89_chip_info rtw8852b_chip_info = {
|
|||
.c2h_counter_reg = {R_AX_UDM1 + 1, B_AX_UDM1_HALMAC_C2H_ENQ_CNT_MASK >> 8},
|
||||
.c2h_regs = rtw8852b_c2h_regs,
|
||||
.page_regs = &rtw8852b_page_regs,
|
||||
.wow_reason_reg = R_AX_C2HREG_DATA3 + 3,
|
||||
.wow_reason_reg = rtw8852b_wow_wakeup_regs,
|
||||
.cfo_src_fd = true,
|
||||
.cfo_hw_comp = true,
|
||||
.dcfo_comp = &rtw8852b_dcfo_comp,
|
||||
|
|
|
@ -73,6 +73,10 @@ static const u32 rtw8852c_c2h_regs[RTW89_H2CREG_MAX] = {
|
|||
R_AX_C2HREG_DATA3_V1
|
||||
};
|
||||
|
||||
static const u32 rtw8852c_wow_wakeup_regs[RTW89_WOW_REASON_NUM] = {
|
||||
R_AX_C2HREG_DATA3_V1 + 3, R_AX_DBG_WOW,
|
||||
};
|
||||
|
||||
static const struct rtw89_page_regs rtw8852c_page_regs = {
|
||||
.hci_fc_ctrl = R_AX_HCI_FC_CTRL_V1,
|
||||
.ch_page_ctrl = R_AX_CH_PAGE_CTRL_V1,
|
||||
|
@ -3007,7 +3011,7 @@ const struct rtw89_chip_info rtw8852c_chip_info = {
|
|||
.c2h_counter_reg = {R_AX_UDM1 + 1, B_AX_UDM1_HALMAC_C2H_ENQ_CNT_MASK >> 8},
|
||||
.c2h_regs = rtw8852c_c2h_regs,
|
||||
.page_regs = &rtw8852c_page_regs,
|
||||
.wow_reason_reg = R_AX_C2HREG_DATA3_V1 + 3,
|
||||
.wow_reason_reg = rtw8852c_wow_wakeup_regs,
|
||||
.cfo_src_fd = false,
|
||||
.cfo_hw_comp = false,
|
||||
.dcfo_comp = &rtw8852c_dcfo_comp,
|
||||
|
|
|
@ -85,6 +85,10 @@ static const u32 rtw8922a_c2h_regs[RTW89_H2CREG_MAX] = {
|
|||
R_BE_C2HREG_DATA3
|
||||
};
|
||||
|
||||
static const u32 rtw8922a_wow_wakeup_regs[RTW89_WOW_REASON_NUM] = {
|
||||
R_AX_C2HREG_DATA3_V1 + 3, R_BE_DBG_WOW,
|
||||
};
|
||||
|
||||
static const struct rtw89_page_regs rtw8922a_page_regs = {
|
||||
.hci_fc_ctrl = R_BE_HCI_FC_CTRL,
|
||||
.ch_page_ctrl = R_BE_CH_PAGE_CTRL,
|
||||
|
@ -2609,7 +2613,7 @@ const struct rtw89_chip_info rtw8922a_chip_info = {
|
|||
.c2h_counter_reg = {R_BE_UDM1 + 1, B_BE_UDM1_HALMAC_C2H_ENQ_CNT_MASK >> 8},
|
||||
.c2h_regs = rtw8922a_c2h_regs,
|
||||
.page_regs = &rtw8922a_page_regs,
|
||||
.wow_reason_reg = R_AX_C2HREG_DATA3_V1 + 3,
|
||||
.wow_reason_reg = rtw8922a_wow_wakeup_regs,
|
||||
.cfo_src_fd = true,
|
||||
.cfo_hw_comp = true,
|
||||
.dcfo_comp = NULL,
|
||||
|
|
|
@ -723,13 +723,18 @@ static void rtw89_wow_show_wakeup_reason(struct rtw89_dev *rtwdev)
|
|||
{
|
||||
struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
|
||||
struct rtw89_wow_aoac_report *aoac_rpt = &rtw_wow->aoac_rpt;
|
||||
u32 wow_reason_reg = rtwdev->chip->wow_reason_reg;
|
||||
struct cfg80211_wowlan_nd_info nd_info;
|
||||
struct cfg80211_wowlan_wakeup wakeup = {
|
||||
.pattern_idx = -1,
|
||||
};
|
||||
u32 wow_reason_reg;
|
||||
u8 reason;
|
||||
|
||||
if (RTW89_CHK_FW_FEATURE(WOW_REASON_V1, &rtwdev->fw))
|
||||
wow_reason_reg = rtwdev->chip->wow_reason_reg[RTW89_WOW_REASON_V1];
|
||||
else
|
||||
wow_reason_reg = rtwdev->chip->wow_reason_reg[RTW89_WOW_REASON_V0];
|
||||
|
||||
reason = rtw89_read8(rtwdev, wow_reason_reg);
|
||||
switch (reason) {
|
||||
case RTW89_WOW_RSN_RX_DEAUTH:
|
||||
|
|
Loading…
Add table
Reference in a new issue