mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-03 10:02:20 -04:00
wifi: rtw89: wow: update config mac for 802.11ax chip
The 802.11ax chip also needs rtw89_mac_cpu_io_rx(), which notifies Firmware to start or stop WoWLAN and waits until Firmware process over. Then, the driver can continue processing to avoid unexpected behavior. 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-4-pkshih@realtek.com
This commit is contained in:
committed by
Ping-Ke Shih
parent
0e52102177
commit
6a03a349be
@@ -6320,9 +6320,30 @@ int rtw89_mac_ptk_drop_by_band_and_wait(struct rtw89_dev *rtwdev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int rtw89_mac_cpu_io_rx(struct rtw89_dev *rtwdev, bool wow_enable)
|
||||
{
|
||||
struct rtw89_mac_h2c_info h2c_info = {};
|
||||
struct rtw89_mac_c2h_info c2h_info = {};
|
||||
u32 ret;
|
||||
|
||||
h2c_info.id = RTW89_FWCMD_H2CREG_FUNC_WOW_CPUIO_RX_CTRL;
|
||||
h2c_info.content_len = sizeof(h2c_info.u.hdr);
|
||||
h2c_info.u.hdr.w0 = u32_encode_bits(wow_enable, RTW89_H2CREG_WOW_CPUIO_RX_CTRL_EN);
|
||||
|
||||
ret = rtw89_fw_msg_reg(rtwdev, &h2c_info, &c2h_info);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (c2h_info.id != RTW89_FWCMD_C2HREG_FUNC_WOW_CPUIO_RX_ACK)
|
||||
ret = -EINVAL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rtw89_wow_config_mac_ax(struct rtw89_dev *rtwdev, bool enable_wow)
|
||||
{
|
||||
const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
|
||||
const struct rtw89_chip_info *chip = rtwdev->chip;
|
||||
int ret;
|
||||
|
||||
if (enable_wow) {
|
||||
@@ -6333,12 +6354,19 @@ static int rtw89_wow_config_mac_ax(struct rtw89_dev *rtwdev, bool enable_wow)
|
||||
}
|
||||
|
||||
rtw89_write32_set(rtwdev, R_AX_RX_FUNCTION_STOP, B_AX_HDR_RX_STOP);
|
||||
rtw89_mac_cpu_io_rx(rtwdev, enable_wow);
|
||||
rtw89_write32_clr(rtwdev, mac->rx_fltr, B_AX_SNIFFER_MODE);
|
||||
rtw89_mac_cfg_ppdu_status(rtwdev, RTW89_MAC_0, false);
|
||||
rtw89_write32(rtwdev, R_AX_ACTION_FWD0, 0);
|
||||
rtw89_write32(rtwdev, R_AX_ACTION_FWD1, 0);
|
||||
rtw89_write32(rtwdev, R_AX_TF_FWD, 0);
|
||||
rtw89_write32(rtwdev, R_AX_HW_RPT_FWD, 0);
|
||||
|
||||
if (chip->chip_id == RTL8852A || rtw89_is_rtl885xb(rtwdev))
|
||||
rtw89_write8(rtwdev, R_BE_DBG_WOW_READY, WOWLAN_NOT_READY);
|
||||
else
|
||||
rtw89_write32_set(rtwdev, R_AX_DBG_WOW,
|
||||
B_AX_DBG_WOW_CPU_IO_RX_EN);
|
||||
} else {
|
||||
ret = rtw89_mac_resize_ple_rx_quota(rtwdev, false);
|
||||
if (ret) {
|
||||
@@ -6346,6 +6374,7 @@ static int rtw89_wow_config_mac_ax(struct rtw89_dev *rtwdev, bool enable_wow)
|
||||
return ret;
|
||||
}
|
||||
|
||||
rtw89_mac_cpu_io_rx(rtwdev, enable_wow);
|
||||
rtw89_write32_clr(rtwdev, R_AX_RX_FUNCTION_STOP, B_AX_HDR_RX_STOP);
|
||||
rtw89_mac_cfg_ppdu_status(rtwdev, RTW89_MAC_0, true);
|
||||
rtw89_write32(rtwdev, R_AX_ACTION_FWD0, TRXCFG_MPDU_PROC_ACT_FRWD);
|
||||
|
||||
@@ -1446,5 +1446,6 @@ int rtw89_mac_dle_quota_change(struct rtw89_dev *rtwdev, enum rtw89_qta_mode mod
|
||||
int rtw89_mac_get_dle_rsvd_qt_cfg(struct rtw89_dev *rtwdev,
|
||||
enum rtw89_mac_dle_rsvd_qt_type type,
|
||||
struct rtw89_mac_dle_rsvd_qt_cfg *cfg);
|
||||
int rtw89_mac_cpu_io_rx(struct rtw89_dev *rtwdev, bool wow_enable);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2312,26 +2312,6 @@ static void rtw89_mac_dump_qta_lost_be(struct rtw89_dev *rtwdev)
|
||||
dump_err_status_dispatcher_be(rtwdev);
|
||||
}
|
||||
|
||||
static int rtw89_mac_cpu_io_rx(struct rtw89_dev *rtwdev, bool wow_enable)
|
||||
{
|
||||
struct rtw89_mac_h2c_info h2c_info = {};
|
||||
struct rtw89_mac_c2h_info c2h_info = {};
|
||||
u32 ret;
|
||||
|
||||
h2c_info.id = RTW89_FWCMD_H2CREG_FUNC_WOW_CPUIO_RX_CTRL;
|
||||
h2c_info.content_len = sizeof(h2c_info.u.hdr);
|
||||
h2c_info.u.hdr.w0 = u32_encode_bits(wow_enable, RTW89_H2CREG_WOW_CPUIO_RX_CTRL_EN);
|
||||
|
||||
ret = rtw89_fw_msg_reg(rtwdev, &h2c_info, &c2h_info);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (c2h_info.id != RTW89_FWCMD_C2HREG_FUNC_WOW_CPUIO_RX_ACK)
|
||||
ret = -EINVAL;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int rtw89_wow_config_mac_be(struct rtw89_dev *rtwdev, bool enable_wow)
|
||||
{
|
||||
if (enable_wow) {
|
||||
|
||||
@@ -312,6 +312,7 @@
|
||||
#define B_AX_S0_LDO_VSEL_F_MASK GENMASK(22, 21)
|
||||
|
||||
#define R_AX_DBG_WOW 0x0504
|
||||
#define B_AX_DBG_WOW_CPU_IO_RX_EN BIT(8)
|
||||
|
||||
#define R_AX_SEC_CTRL 0x0C00
|
||||
#define B_AX_SEC_IDMEM_SIZE_CONFIG_MASK GENMASK(17, 16)
|
||||
|
||||
Reference in New Issue
Block a user