]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: ser: enable error IMR after recovering from L1
authorZong-Zhe Yang <kevin_yang@realtek.com>
Tue, 23 Dec 2025 03:06:44 +0000 (11:06 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Fri, 26 Dec 2025 02:54:55 +0000 (10:54 +0800)
After recovering from L1, explicitly enable error IMR to ensure next
L1 SER (system error recovery) can work normally.

Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20251223030651.480633-6-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/mac.c
drivers/net/wireless/realtek/rtw89/mac.h
drivers/net/wireless/realtek/rtw89/mac_be.c
drivers/net/wireless/realtek/rtw89/ser.c

index 0cea01e322c6db3dd0a95009d5b1f7d195c77652..acd95d55ae2714ecd2773b73ea1dd833f2c6dc45 100644 (file)
@@ -7204,6 +7204,7 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_ax = {
        .check_mac_en = rtw89_mac_check_mac_en_ax,
        .sys_init = sys_init_ax,
        .trx_init = trx_init_ax,
+       .err_imr_ctrl = err_imr_ctrl_ax,
        .hci_func_en = rtw89_mac_hci_func_en_ax,
        .dmac_func_pre_en = rtw89_mac_dmac_func_pre_en_ax,
        .dle_func_en = dle_func_en_ax,
index 9ec70729e9e1c251e886d7c70b12b46a3fbd628d..9941d500bc6898c54edaca6900bb9fb754227c8f 100644 (file)
@@ -1019,6 +1019,7 @@ struct rtw89_mac_gen_def {
                            enum rtw89_mac_hwmod_sel sel);
        int (*sys_init)(struct rtw89_dev *rtwdev);
        int (*trx_init)(struct rtw89_dev *rtwdev);
+       void (*err_imr_ctrl)(struct rtw89_dev *rtwdev, bool en);
        void (*hci_func_en)(struct rtw89_dev *rtwdev);
        void (*dmac_func_pre_en)(struct rtw89_dev *rtwdev);
        void (*dle_func_en)(struct rtw89_dev *rtwdev, bool enable);
index 65c0c0de3a30ce6a434c59176c34817d86cdbe21..2bc329c134433bf1cecf57cb5f1999b472b1832d 100644 (file)
@@ -2730,6 +2730,7 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_be = {
        .check_mac_en = rtw89_mac_check_mac_en_be,
        .sys_init = sys_init_be,
        .trx_init = trx_init_be,
+       .err_imr_ctrl = err_imr_ctrl_be,
        .hci_func_en = rtw89_mac_hci_func_en_be,
        .dmac_func_pre_en = rtw89_mac_dmac_func_pre_en_be,
        .dle_func_en = dle_func_en_be,
index f99e179f7ff9fe7dd86373eee7fbef26aebdd5d1..7fdc69578da317bb5dec4cf813a050fdd719f1bc 100644 (file)
@@ -431,6 +431,14 @@ static void hal_send_m4_event(struct rtw89_ser *ser)
        rtw89_mac_set_err_status(rtwdev, MAC_AX_ERR_L1_RCVY_EN);
 }
 
+static void hal_enable_err_imr(struct rtw89_ser *ser)
+{
+       struct rtw89_dev *rtwdev = container_of(ser, struct rtw89_dev, ser);
+       const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
+
+       mac->err_imr_ctrl(rtwdev, true);
+}
+
 /* state handler */
 static void ser_idle_st_hdl(struct rtw89_ser *ser, u8 evt)
 {
@@ -552,6 +560,8 @@ static void ser_do_hci_st_hdl(struct rtw89_ser *ser, u8 evt)
                break;
 
        case SER_EV_MAC_RESET_DONE:
+               hal_enable_err_imr(ser);
+
                ser_state_goto(ser, SER_IDLE_ST);
                break;