wifi: rtw89: some fixes and support of multiple adapters debugging
Ping-Ke Shih
maintainercover wifi: rtw89: some fixes and support of multiple adapters debugging
Patch 1/6 is to support fw_element for 8852C. Without this, it will use original tables built in driver.
Patch 2/6 is to improve TX EVM to yield better performance.
Patch 3-4/6 are to fix Coverity warnings.
Patch 5/6 is to improve 8852A I/O time wakeup from power save mode.
The last patch is to support multiple adapters debugging like rtw88 did.
Chin-Yen Lee (1):
wifi: rtw89: 8852a: adjust ANA clock to 12M
Kuan-Chung Chen (2):
wifi: rtw89: 8852c: support firmware with fw_element
wifi: rtw89: 8922a: add digital compensation to avoid TX EVM degrade
Ping-Ke Shih (3):
wifi: rtw89: remove unused C2H event ID
RTW89_MAC_C2H_FUNC_READ_WOW_CAM to prevent out-of-bounds reading
wifi: rtw89: correct base HT rate mask for firmware
wifi: rtw89: debugfs: support multiple adapters debugging
drivers/net/wireless/realtek/rtw89/core.c | 2 + drivers/net/wireless/realtek/rtw89/core.h | 14 ++ drivers/net/wireless/realtek/rtw89/debug.c | 156 +++++++++--------- drivers/net/wireless/realtek/rtw89/debug.h | 2 + drivers/net/wireless/realtek/rtw89/mac.h | 1 - drivers/net/wireless/realtek/rtw89/phy.c | 4 +- drivers/net/wireless/realtek/rtw89/ps.c | 7 +- drivers/net/wireless/realtek/rtw89/reg.h | 3 + drivers/net/wireless/realtek/rtw89/rtw8851b.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8852a.c | 6 + drivers/net/wireless/realtek/rtw89/rtw8852b.c | 1 + .../net/wireless/realtek/rtw89/rtw8852bt.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8852c.c | 1 + .../net/wireless/realtek/rtw89/rtw8852c_rfk.c | 100 +++++++---- drivers/net/wireless/realtek/rtw89/rtw8922a.c | 61 ++++++- 15 files changed, 238 insertions(+), 122 deletions(-)
Signature · 1 line
2.25.1
Ping-Ke Shih
maintainerPATCH 1/6 wifi: rtw89: 8852c: support firmware with fw_element
From: Kuan-Chung Chen <[email protected]>
Firmware from v1 will include fw_element so that the driver will loading parameters of BB and RF, TX power related tables from firmware. For the current flow, if fw_element is present, the driver will prioritize loading parameters and tables from firmware; otherwise, it will revert to the original loading method.
--- .../net/wireless/realtek/rtw89/rtw8852c_rfk.c | 100 ++++++++++++------ 1 file changed, 67 insertions(+), 33 deletions(-)
drivers/net/wireless/realtek/rtw89/rtw8852c_rfk.c +67 -33
@@ -5,6 +5,7 @@#include "chan.h" #include "coex.h" #include "debug.h" +#include "fw.h" #include "phy.h" #include "reg.h" #include "rtw8852c.h"
@@ -2985,8 +2986,9 @@ static void _tssi_set_tmeter_tbl(struct rtw89_dev *rtwdev, enum rtw89_phy_idx ph } \ __val; \ }) -struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;const struct rtw89_chan *chan =rtw89_chan_get (rtwdev,RTW89_CHANCTX_0 ); +struct rtw89_fw_txpwr_track_cfg *trk = rtwdev->fw.elm_info.txpwr_trk; +struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;u8 ch = chan->channel;u8 subband = chan->subband_type;const s8 *thm_up_a =NULL ;
@@ -3001,56 +3003,88 @@ static void _tssi_set_tmeter_tbl(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phswitch (subband) {default :case RTW89_CH_2G : - thm_up_a = rtw89_8852c_trk_cfg.delta_swingidx_2ga_p; - thm_down_a = rtw89_8852c_trk_cfg.delta_swingidx_2ga_n; - thm_up_b = rtw89_8852c_trk_cfg.delta_swingidx_2gb_p; - thm_down_b = rtw89_8852c_trk_cfg.delta_swingidx_2gb_n; + thm_up_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_2GA_P ][0 ] : + rtw89_8852c_trk_cfg.delta_swingidx_2ga_p; + thm_down_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_2GA_N ][0 ] : + rtw89_8852c_trk_cfg.delta_swingidx_2ga_n; + thm_up_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_2GB_P ][0 ] : + rtw89_8852c_trk_cfg.delta_swingidx_2gb_p; + thm_down_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_2GB_N ][0 ] : + rtw89_8852c_trk_cfg.delta_swingidx_2gb_n;break ;case RTW89_CH_5G_BAND_1 : - thm_up_a = rtw89_8852c_trk_cfg.delta_swingidx_5ga_p[0 ]; - thm_down_a = rtw89_8852c_trk_cfg.delta_swingidx_5ga_n[0 ]; - thm_up_b = rtw89_8852c_trk_cfg.delta_swingidx_5gb_p[0 ]; - thm_down_b = rtw89_8852c_trk_cfg.delta_swingidx_5gb_n[0 ]; + thm_up_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_5GA_P ][0 ] : + rtw89_8852c_trk_cfg.delta_swingidx_5ga_p[0 ]; + thm_down_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_5GA_N ][0 ] : + rtw89_8852c_trk_cfg.delta_swingidx_5ga_n[0 ]; + thm_up_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_5GB_P ][0 ] : + rtw89_8852c_trk_cfg.delta_swingidx_5gb_p[0 ]; + thm_down_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_5GB_N ][0 ] : + rtw89_8852c_trk_cfg.delta_swingidx_5gb_n[0 ];break ;case RTW89_CH_5G_BAND_3 : - thm_up_a = rtw89_8852c_trk_cfg.delta_swingidx_5ga_p[1 ]; - thm_down_a = rtw89_8852c_trk_cfg.delta_swingidx_5ga_n[1 ]; - thm_up_b = rtw89_8852c_trk_cfg.delta_swingidx_5gb_p[1 ]; - thm_down_b = rtw89_8852c_trk_cfg.delta_swingidx_5gb_n[1 ]; + thm_up_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_5GA_P ][1 ] : + rtw89_8852c_trk_cfg.delta_swingidx_5ga_p[1 ]; + thm_down_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_5GA_N ][1 ] : + rtw89_8852c_trk_cfg.delta_swingidx_5ga_n[1 ]; + thm_up_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_5GB_P ][1 ] : + rtw89_8852c_trk_cfg.delta_swingidx_5gb_p[1 ]; + thm_down_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_5GB_N ][1 ] : + rtw89_8852c_trk_cfg.delta_swingidx_5gb_n[1 ];break ;case RTW89_CH_5G_BAND_4 : - thm_up_a = rtw89_8852c_trk_cfg.delta_swingidx_5ga_p[2 ]; - thm_down_a = rtw89_8852c_trk_cfg.delta_swingidx_5ga_n[2 ]; - thm_up_b = rtw89_8852c_trk_cfg.delta_swingidx_5gb_p[2 ]; - thm_down_b = rtw89_8852c_trk_cfg.delta_swingidx_5gb_n[2 ]; + thm_up_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_5GA_P ][2 ] : + rtw89_8852c_trk_cfg.delta_swingidx_5ga_p[2 ]; + thm_down_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_5GA_N ][2 ] : + rtw89_8852c_trk_cfg.delta_swingidx_5ga_n[2 ]; + thm_up_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_5GB_P ][2 ] : + rtw89_8852c_trk_cfg.delta_swingidx_5gb_p[2 ]; + thm_down_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_5GB_N ][2 ] : + rtw89_8852c_trk_cfg.delta_swingidx_5gb_n[2 ];break ;case RTW89_CH_6G_BAND_IDX0 :case RTW89_CH_6G_BAND_IDX1 : - thm_up_a = rtw89_8852c_trk_cfg.delta_swingidx_6ga_p[0 ]; - thm_down_a = rtw89_8852c_trk_cfg.delta_swingidx_6ga_n[0 ]; - thm_up_b = rtw89_8852c_trk_cfg.delta_swingidx_6gb_p[0 ]; - thm_down_b = rtw89_8852c_trk_cfg.delta_swingidx_6gb_n[0 ]; + thm_up_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GA_P ][0 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6ga_p[0 ]; + thm_down_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GA_N ][0 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6ga_n[0 ]; + thm_up_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GB_P ][0 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6gb_p[0 ]; + thm_down_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GB_N ][0 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6gb_n[0 ];break ;case RTW89_CH_6G_BAND_IDX2 :case RTW89_CH_6G_BAND_IDX3 : - thm_up_a = rtw89_8852c_trk_cfg.delta_swingidx_6ga_p[1 ]; - thm_down_a = rtw89_8852c_trk_cfg.delta_swingidx_6ga_n[1 ]; - thm_up_b = rtw89_8852c_trk_cfg.delta_swingidx_6gb_p[1 ]; - thm_down_b = rtw89_8852c_trk_cfg.delta_swingidx_6gb_n[1 ]; + thm_up_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GA_P ][1 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6ga_p[1 ]; + thm_down_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GA_N ][1 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6ga_n[1 ]; + thm_up_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GB_P ][1 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6gb_p[1 ]; + thm_down_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GB_N ][1 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6gb_n[1 ];break ;case RTW89_CH_6G_BAND_IDX4 :case RTW89_CH_6G_BAND_IDX5 : - thm_up_a = rtw89_8852c_trk_cfg.delta_swingidx_6ga_p[2 ]; - thm_down_a = rtw89_8852c_trk_cfg.delta_swingidx_6ga_n[2 ]; - thm_up_b = rtw89_8852c_trk_cfg.delta_swingidx_6gb_p[2 ]; - thm_down_b = rtw89_8852c_trk_cfg.delta_swingidx_6gb_n[2 ]; + thm_up_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GA_P ][2 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6ga_p[2 ]; + thm_down_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GA_N ][2 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6ga_n[2 ]; + thm_up_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GB_P ][2 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6gb_p[2 ]; + thm_down_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GB_N ][2 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6gb_n[2 ];break ;case RTW89_CH_6G_BAND_IDX6 :case RTW89_CH_6G_BAND_IDX7 : - thm_up_a = rtw89_8852c_trk_cfg.delta_swingidx_6ga_p[3 ]; - thm_down_a = rtw89_8852c_trk_cfg.delta_swingidx_6ga_n[3 ]; - thm_up_b = rtw89_8852c_trk_cfg.delta_swingidx_6gb_p[3 ]; - thm_down_b = rtw89_8852c_trk_cfg.delta_swingidx_6gb_n[3 ]; + thm_up_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GA_P ][3 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6ga_p[3 ]; + thm_down_a = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GA_N ][3 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6ga_n[3 ]; + thm_up_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GB_P ][3 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6gb_p[3 ]; + thm_down_b = trk ? trk->delta[RTW89_FW_TXPWR_TRK_TYPE_6GB_N ][3 ] : + rtw89_8852c_trk_cfg.delta_swingidx_6gb_n[3 ];break ; }
Signature · 1 line
2.25.1
Ping-Ke Shih
maintainerRe: [PATCH 1/6] wifi: rtw89: 8852c: support firmware with fw_element
Quoted 10 lines · Ping-Ke Shih
From: Kuan-Chung Chen <[email protected]>
Firmware from v1 will include
fw_elementso that the driver will loading parameters of BB and RF, TX power related tables from firmware. For the current flow, iffw_elementis present, the driver will prioritize loading parameters and tables from firmware; otherwise, it will revert to the original loading method.Signed-off-by Kuan-Chung Chen <[email protected]>Signed-off-by Ping-Ke Shih <[email protected]>
5 patch(es) applied to rtw-next branch of rtw.git, thanks.
526929a326d1 wifi: rtw89: 8852c: support firmware with fw_element82baae10d822 wifi: rtw89: 8922a: add digital compensation to avoid TX EVM degrade56310ddb50b1 wifi: rtw89: remove unused C2H event ID RTW89_MAC_C2H_FUNC_READ_WOW_CAM to prevent out-of-bounds reading 45742881f9ee wifi: rtw89: correct base HT rate mask for firmware338c9cba8d6f wifi: rtw89: 8852a: adjust ANA clock to 12M
Ping-Ke Shih
maintainerPATCH 2/6 wifi: rtw89: 8922a: add digital compensation to avoid TX EVM degrade
In reply to Ping-Ke ShihFrom: Kuan-Chung Chen <[email protected]>
TX EVM will significantly decrease for long packets when the TX idle time increases. Introduce digital compensation based on TX idle time, to mitigate TX EVM degradation, and TX throughput improved from 1871 to 1947 Mbps.
--- drivers/net/wireless/realtek/rtw89/core.h | 11 ++++ drivers/net/wireless/realtek/rtw89/ps.c | 7 ++- drivers/net/wireless/realtek/rtw89/reg.h | 3 + drivers/net/wireless/realtek/rtw89/rtw8851b.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8852a.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8852b.c | 1 + .../net/wireless/realtek/rtw89/rtw8852bt.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8852c.c | 1 + drivers/net/wireless/realtek/rtw89/rtw8922a.c | 61 ++++++++++++++++++- 9 files changed, 82 insertions(+), 5 deletions(-)
drivers/net/wireless/realtek/rtw89/core.h +11 -0
@@ -3566,6 +3566,8 @@ struct rtw89_chip_ops {void (*cfg_txrx_path)(struct rtw89_dev *rtwdev);void (*set_txpwr_ul_tb_offset)(struct rtw89_dev *rtwdev,s8 pw_ofst,enum rtw89_mac_idx mac_idx); +void (*digital_pwr_comp)(struct rtw89_dev *rtwdev, +enum rtw89_phy_idx phy_idx);int (*pwr_on_func)(struct rtw89_dev *rtwdev);int (*pwr_off_func)(struct rtw89_dev *rtwdev); void (*query_rxdesc)(struct rtw89_dev *rtwdev,
@@ -6274,6 +6276,15 @@ void rtw89_chip_cfg_txpwr_ul_tb_offset(struct rtw89_dev *rtwdev, chip->ops->set_txpwr_ul_tb_offset (rtwdev,0 , rtwvif->mac_idx); } +static inline void rtw89_chip_digital_pwr_comp (struct rtw89_dev *rtwdev, +enum rtw89_phy_idx phy_idx) +{ +const struct rtw89_chip_info *chip = rtwdev->chip; + +if (chip->ops->digital_pwr_comp) + chip->ops->digital_pwr_comp (rtwdev, phy_idx); +} +static inline void rtw89_load_txpwr_table (struct rtw89_dev *rtwdev,const struct rtw89_txpwr_table *tbl) {
drivers/net/wireless/realtek/rtw89/ps.c +4 -3
@@ -98,10 +98,10 @@ static void __rtw89_enter_lps(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvifrtw89_fw_h2c_lps_ch_info (rtwdev, rtwvif); } -static void __rtw89_leave_lps (struct rtw89_dev *rtwdev,u8 mac_id) +static void __rtw89_leave_lps (struct rtw89_dev *rtwdev,struct rtw89_vif *rtwvif) {struct rtw89_lps_parm lps_param = { - .macid = mac_id, + .macid = rtwvif->mac_id, .psmode =RTW89_MAC_AX_PS_MODE_ACTIVE , .lastrpwm =RTW89_LAST_RPWM_ACTIVE , };
@@ -109,6 +109,7 @@ static void __rtw89_leave_lps(struct rtw89_dev *rtwdev, u8 mac_id)rtw89_fw_h2c_lps_parm (rtwdev, &lps_param);rtw89_fw_leave_lps_check (rtwdev,0 );rtw89_btc_ntfy_radio_state (rtwdev,BTC_RFCTRL_WL_ON ); +rtw89_chip_digital_pwr_comp (rtwdev, rtwvif->phy_idx); }void rtw89_leave_ps_mode (struct rtw89_dev *rtwdev)
@@ -137,7 +138,7 @@ static void rtw89_leave_lps_vif(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwv rtwvif->wifi_role != RTW89_WIFI_ROLE_P2P_CLIENT) return; -__rtw89_leave_lps (rtwdev, rtwvif->mac_id); +__rtw89_leave_lps (rtwdev, rtwvif); }void rtw89_leave_lps (struct rtw89_dev *rtwdev)
drivers/net/wireless/realtek/rtw89/reg.h +3 -0
@@ -6044,6 +6044,9 @@#define R_BE_WP_PAGE_INFO1 0xB7AC#define B_BE_WP_AVAL_PG_MASK GENMASK(28, 16) +#define R_BE_LTPC_T0_PATH0 0xBA28 +#define R_BE_LTPC_T0_PATH1 0xBB28 +#define R_BE_CMAC_SHARE_FUNC_EN 0x0E000#define B_BE_CMAC_SHARE_CRPRT BIT(31)#define B_BE_CMAC_SHARE_EN BIT(30)
drivers/net/wireless/realtek/rtw89/rtw8851b.c +1 -0
@@ -2388,6 +2388,7 @@ static const struct rtw89_chip_ops rtw8851b_chip_ops = { .ctrl_nbtg_bt_tx = rtw8851b_ctrl_nbtg_bt_tx, .cfg_txrx_path = rtw8851b_bb_cfg_txrx_path, .set_txpwr_ul_tb_offset = rtw8851b_set_txpwr_ul_tb_offset, + .digital_pwr_comp = NULL, .pwr_on_func = rtw8851b_pwr_on_func, .pwr_off_func = rtw8851b_pwr_off_func, .query_rxdesc = rtw89_core_query_rxdesc,
drivers/net/wireless/realtek/rtw89/rtw8852a.c +1 -0
@@ -2111,6 +2111,7 @@ static const struct rtw89_chip_ops rtw8852a_chip_ops = { .ctrl_nbtg_bt_tx = rtw8852a_ctrl_nbtg_bt_tx, .cfg_txrx_path = NULL, .set_txpwr_ul_tb_offset = rtw8852a_set_txpwr_ul_tb_offset, + .digital_pwr_comp = NULL, .pwr_on_func = NULL, .pwr_off_func = NULL, .query_rxdesc = rtw89_core_query_rxdesc,
drivers/net/wireless/realtek/rtw89/rtw8852b.c +1 -0
@@ -742,6 +742,7 @@ static const struct rtw89_chip_ops rtw8852b_chip_ops = { .ctrl_nbtg_bt_tx = rtw8852bx_ctrl_nbtg_bt_tx, .cfg_txrx_path = rtw8852bx_bb_cfg_txrx_path, .set_txpwr_ul_tb_offset = rtw8852bx_set_txpwr_ul_tb_offset, + .digital_pwr_comp = NULL, .pwr_on_func = rtw8852b_pwr_on_func, .pwr_off_func = rtw8852b_pwr_off_func, .query_rxdesc = rtw89_core_query_rxdesc,
drivers/net/wireless/realtek/rtw89/rtw8852bt.c +1 -0
@@ -676,6 +676,7 @@ static const struct rtw89_chip_ops rtw8852bt_chip_ops = { .ctrl_nbtg_bt_tx = rtw8852bx_ctrl_nbtg_bt_tx, .cfg_txrx_path = rtw8852bx_bb_cfg_txrx_path, .set_txpwr_ul_tb_offset = rtw8852bx_set_txpwr_ul_tb_offset, + .digital_pwr_comp = NULL, .pwr_on_func = rtw8852bt_pwr_on_func, .pwr_off_func = rtw8852bt_pwr_off_func, .query_rxdesc = rtw89_core_query_rxdesc,
drivers/net/wireless/realtek/rtw89/rtw8852c.c +1 -0
@@ -2891,6 +2891,7 @@ static const struct rtw89_chip_ops rtw8852c_chip_ops = { .ctrl_nbtg_bt_tx = rtw8852c_ctrl_nbtg_bt_tx, .cfg_txrx_path = rtw8852c_bb_cfg_txrx_path, .set_txpwr_ul_tb_offset = rtw8852c_set_txpwr_ul_tb_offset, + .digital_pwr_comp = NULL, .pwr_on_func = rtw8852c_pwr_on_func, .pwr_off_func = rtw8852c_pwr_off_func, .query_rxdesc = rtw89_core_query_rxdesc,
drivers/net/wireless/realtek/rtw89/rtw8922a.c +59 -2
89 lines not on this page · raw message
Signature · 1 line
2.25.1
Ping-Ke Shih
maintainerPATCH 3/6 wifi: rtw89: remove unused C2H event ID RTW89_MAC_C2H_FUNC_READ_WOW_CAM to prevent out-of-bounds reading
In reply to Ping-Ke ShihThe handler of firmware C2H event RTW89_MAC_C2H_FUNC_READ_WOW_CAM isn't implemented, but driver expects number of handlers is NUM_OF_RTW89_MAC_C2H_FUNC_WOW causing out-of-bounds access. Fix it by removing ID.
Addresses-Coverity-ID: 1598775 ("Out-of-bounds read")
--- drivers/net/wireless/realtek/rtw89/mac.h | 1 - 1 file changed, 1 deletion(-)
drivers/net/wireless/realtek/rtw89/mac.h +0 -1
@@ -421,7 +421,6 @@ enum rtw89_mac_c2h_mrc_func {enum rtw89_mac_c2h_wow_func {RTW89_MAC_C2H_FUNC_AOAC_REPORT , -RTW89_MAC_C2H_FUNC_READ_WOW_CAM ,NUM_OF_RTW89_MAC_C2H_FUNC_WOW , };
Signature · 1 line
2.25.1
Ping-Ke Shih
maintainerPATCH 4/6 wifi: rtw89: correct base HT rate mask for firmware
In reply to Ping-Ke ShihCoverity reported that u8 rx_mask << 24 will become signed 32 bits, which casting to unsigned 64 bits will do sign extension. For example, putting 0x80000000 (signed 32 bits) to a u64 variable will become 0xFFFFFFFF_80000000.
The real case we meet is:
rx_mask[0...3] = ff ff 00 00
ra_mask = 0xffffffff_ff0ff000
After this fix:
rx_mask[0...3] = ff ff 00 00
ra_mask = 0x00000000_ff0ff000
Fortunately driver does bitwise-AND with incorrect ra_mask and supported rates (1ss and 2ss rate only) afterward, so the final rate mask of original code is still correct.
Addresses-Coverity-ID: 1504762 ("Unintended sign extension")
--- drivers/net/wireless/realtek/rtw89/phy.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/net/wireless/realtek/rtw89/phy.c +2 -2
@@ -356,8 +356,8 @@ static void rtw89_phy_ra_sta_update(struct rtw89_dev *rtwdev, csi_mode =RTW89_RA_RPT_MODE_HT ; ra_mask |= ((u64 )sta->deflink.ht_cap.mcs.rx_mask[3 ] <<48 ) | ((u64 )sta->deflink.ht_cap.mcs.rx_mask[2 ] <<36 ) | - (sta->deflink.ht_cap.mcs.rx_mask[1 ] <<24 ) | - (sta->deflink.ht_cap.mcs.rx_mask[0 ] <<12 ); + ((u64 )sta->deflink.ht_cap.mcs.rx_mask[1 ] <<24 ) | + ((u64 )sta->deflink.ht_cap.mcs.rx_mask[0 ] <<12 ); high_rate_masks = rtw89_ra_mask_ht_rates;if (sta->deflink.ht_cap.cap &IEEE80211_HT_CAP_RX_STBC ) stbc_en =1 ;
Signature · 1 line
2.25.1
Ping-Ke Shih
maintainerPATCH 5/6 wifi: rtw89: 8852a: adjust ANA clock to 12M
In reply to Ping-Ke ShihFrom: Chin-Yen Lee <[email protected]>
To reduce the I/O time from power save mode for 8852a, adjust ANA clock from 500k to 12M.
--- drivers/net/wireless/realtek/rtw89/rtw8852a.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/net/wireless/realtek/rtw89/rtw8852a.c +5 -0
@@ -337,6 +337,11 @@ static const struct rtw89_pwr_cfg rtw8852a_pwroff[] = {PWR_INTF_MSK_PCIE ,PWR_BASE_MAC , PWR_CMD_WRITE, BIT(0), 0}, + {0x0092, +PWR_CV_MSK_ALL , +PWR_INTF_MSK_PCIE , +PWR_BASE_MAC , + PWR_CMD_WRITE, BIT(4), BIT(4)}, {0x0005,PWR_CV_MSK_ALL , PWR_INTF_MSK_PCIE,
Signature · 1 line
2.25.1
Ping-Ke Shih
maintainerPATCH 6/6 wifi: rtw89: debugfs: support multiple adapters debugging
In reply to Ping-Ke ShihThe rtw89 uses debugfs to access registers and driver states. To get a range of registers, the range value is set and stored to a variable, and get the set of register values by the stored range. However, the variable is a static global variable, which multiple adapters will be a problem, so move the variable to adapter context rtw89_dev.
--- drivers/net/wireless/realtek/rtw89/core.c | 2 + drivers/net/wireless/realtek/rtw89/core.h | 3 + drivers/net/wireless/realtek/rtw89/debug.c | 156 ++++++++++----------- drivers/net/wireless/realtek/rtw89/debug.h | 2 + 4 files changed, 82 insertions(+), 81 deletions(-)
drivers/net/wireless/realtek/rtw89/core.c +2 -0
@@ -4767,6 +4767,8 @@ EXPORT_SYMBOL(rtw89_core_register);void rtw89_core_unregister (struct rtw89_dev *rtwdev) {rtw89_core_unregister_hw (rtwdev); + +rtw89_debugfs_deinit (rtwdev); }EXPORT_SYMBOL (rtw89_core_unregister);
drivers/net/wireless/realtek/rtw89/core.h +3 -0
@@ -21,6 +21,7 @@ struct rtw89_efuse_block_cfg;struct rtw89_h2c_rf_tssi ;struct rtw89_fw_txpwr_track_cfg ;struct rtw89_phy_rfk_log_fmt ; +struct rtw89_debugfs ;extern const struct ieee80211_ops rtw89_ops;
@@ -5529,6 +5530,8 @@ struct rtw89_dev {struct napi_struct napi;int napi_budget_countdown; +struct rtw89_debugfs *debugfs; +/* HCI related data, keep last */ u8 priv[]__aligned(sizeof(void *)) ; };
drivers/net/wireless/realtek/rtw89/debug.c +75 -81
194 lines not on this page · raw message
drivers/net/wireless/realtek/rtw89/debug.h +2 -0
@@ -49,8 +49,10 @@ enum rtw89_debug_mac_reg_sel {#ifdef CONFIG_RTW89_DEBUGFS void rtw89_debugfs_init (struct rtw89_dev *rtwdev); +void rtw89_debugfs_deinit (struct rtw89_dev *rtwdev);#else static inline void rtw89_debugfs_init (struct rtw89_dev *rtwdev) {} +static inline void rtw89_debugfs_deinit (struct rtw89_dev *rtwdev) {}#endif #define rtw89_info(rtwdev, a...) dev_info((rtwdev)->dev, ##a)
Signature · 1 line
2.25.1
Ping-Ke Shih
maintainerRe: [PATCH 6/6] wifi: rtw89: debugfs: support multiple adapters debugging
Quoted 7 lines · Ping-Ke Shih
The rtw89 uses debugfs to access registers and driver states. To get a range of registers, the range value is set and stored to a variable, and get the set of register values by the stored range. However, the variable is a static global variable, which multiple adapters will be a problem, so move the variable to adapter context
rtw89_dev.Signed-off-by Ping-Ke Shih <[email protected]>
Smatch reported:
drivers/net/wireless/realtek/rtw89/debug.c:3959 rtw89_debugfs_init() parse error: turning off implications after 60 seconds
Set patchset state to Changes Requested
[6/6] wifi: rtw89: debugfs: support multiple adapters debugging