]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: wow: add retry for ensuring packet are processed
authorChin-Yen Lee <timlee@realtek.com>
Tue, 10 Mar 2026 08:01:42 +0000 (16:01 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Mon, 16 Mar 2026 06:18:29 +0000 (14:18 +0800)
Before entering WoWLAN mode, the driver must ensure that
all received packets have been processed to prevent packet
loss. Consequently, a retry mechanism has been implemented
to guarantee completion.

Signed-off-by: Chin-Yen Lee <timlee@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20260310080146.31113-10-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/mac.c
drivers/net/wireless/realtek/rtw89/mac.h

index a292a14394b25f77c86a18cc6df58dd9beb77535..35fd18fe6470ea02500bb6781af7502fdd28a736 100644 (file)
@@ -7183,7 +7183,7 @@ 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)
+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 = {};
@@ -7206,6 +7206,19 @@ int rtw89_mac_cpu_io_rx(struct rtw89_dev *rtwdev, bool wow_enable)
        return ret;
 }
 
+int rtw89_mac_cpu_io_rx(struct rtw89_dev *rtwdev, bool wow_enable)
+{
+       int i, ret;
+
+       for (i = 0; i < CPU_IO_RX_RETRY_CNT; i++) {
+               ret = _rtw89_mac_cpu_io_rx(rtwdev, wow_enable);
+               if (!ret)
+                       return 0;
+       }
+
+       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;
index 9c77bfaa34ee79791dc528777bf313ea725fce6b..88a877556cb3cbb3640f9a996e415761de0fcf1f 100644 (file)
@@ -17,6 +17,7 @@
 #define BSSID_CAM_ENT_SIZE 0x08
 #define HFC_PAGE_UNIT 64
 #define RPWM_TRY_CNT 3
+#define CPU_IO_RX_RETRY_CNT 3
 
 enum rtw89_mac_hwmod_sel {
        RTW89_DMAC_SEL = 0,