]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: fw: change WITH_RFK_PRE_NOTIFY to be a FW feature group
authorZong-Zhe Yang <kevin_yang@realtek.com>
Wed, 31 Dec 2025 09:06:44 +0000 (17:06 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Wed, 7 Jan 2026 07:49:51 +0000 (15:49 +0800)
Actually, WITH_RFK_PRE_NOTIFY means supporting one of RFK_PRE_NOTIFY_Vx.
So, change it to be a FW feature group which contains RFK_PRE_NOTIFY_Vx.
Then, because WITH_RFK_PRE_NOTIFY is abandoned after some FW versions by
chip, disable WITH_RFK_PRE_NOTIFY correspondingly in FW feature table.

Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20251231090647.56407-9-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/core.c
drivers/net/wireless/realtek/rtw89/core.h
drivers/net/wireless/realtek/rtw89/fw.c
drivers/net/wireless/realtek/rtw89/mac80211.c
drivers/net/wireless/realtek/rtw89/phy.c

index 96fb2839379f5de2518cd8821ba98f823d19a407..191caafbd0fb42b9a41ebc57694f5a613dadab5e 100644 (file)
@@ -478,7 +478,7 @@ void rtw89_chip_rfk_channel(struct rtw89_dev *rtwdev,
        bool prehdl_link = false;
 
        if (chip->chip_gen != RTW89_CHIP_AX &&
-           !RTW89_CHK_FW_FEATURE(WITH_RFK_PRE_NOTIFY, &rtwdev->fw) &&
+           !RTW89_CHK_FW_FEATURE_GROUP(WITH_RFK_PRE_NOTIFY, &rtwdev->fw) &&
            !mon && !rtw89_entity_check_hw(rtwdev, rtwvif_link->phy_idx))
                prehdl_link = true;
 
@@ -6244,7 +6244,7 @@ int rtw89_core_mlsr_switch(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
                goto wake_queue;
        }
 
-       if (RTW89_CHK_FW_FEATURE(WITH_RFK_PRE_NOTIFY, &rtwdev->fw))
+       if (RTW89_CHK_FW_FEATURE_GROUP(WITH_RFK_PRE_NOTIFY, &rtwdev->fw))
                rtw89_chip_rfk_channel(rtwdev, target);
 
        rtwvif->mlo_mode = RTW89_MLO_MODE_MLSR;
index 8010ee070108c4ddf8e56bfe14cc4db07402b08f..38a64b0bfb5c2f7a9909555b6ffbf1580ebce1b2 100644 (file)
@@ -4682,10 +4682,12 @@ enum rtw89_fw_feature {
        RTW89_FW_FEATURE_MACID_PAUSE_SLEEP,
        RTW89_FW_FEATURE_SCAN_OFFLOAD_BE_V0,
        RTW89_FW_FEATURE_WOW_REASON_V1,
-       RTW89_FW_FEATURE_RFK_PRE_NOTIFY_V0,
-       RTW89_FW_FEATURE_RFK_PRE_NOTIFY_V1,
-       RTW89_FW_FEATURE_RFK_PRE_NOTIFY_V2,
-       RTW89_FW_FEATURE_WITH_RFK_PRE_NOTIFY,
+       RTW89_FW_FEATURE_GROUP(WITH_RFK_PRE_NOTIFY,
+                              RTW89_FW_FEATURE_RFK_PRE_NOTIFY_V0,
+                              RTW89_FW_FEATURE_RFK_PRE_NOTIFY_V1,
+                              RTW89_FW_FEATURE_RFK_PRE_NOTIFY_V2,
+                              RTW89_FW_FEATURE_RFK_PRE_NOTIFY_V3,
+       ),
        RTW89_FW_FEATURE_RFK_RXDCK_V0,
        RTW89_FW_FEATURE_RFK_IQK_V0,
        RTW89_FW_FEATURE_NO_WOW_CPU_IO_RX,
index 4ba99e7078feba9ab384f04e97982df9674b3d26..fed9b3db15436820eb2b9b56f8b91019e0c921f5 100644 (file)
@@ -918,7 +918,7 @@ static const struct __fw_feat_cfg fw_feat_tbl[] = {
        __CFG_FW_FEAT(RTL8922A, ge, 0, 35, 76, 0, LPS_DACK_BY_C2H_REG),
        __CFG_FW_FEAT(RTL8922A, ge, 0, 35, 79, 0, CRASH_TRIGGER_TYPE_1),
        __CFG_FW_FEAT(RTL8922A, ge, 0, 35, 80, 0, BEACON_TRACKING),
-       __CFG_FW_FEAT(RTL8922A, le, 0, 35, 80, 0, WITH_RFK_PRE_NOTIFY),
+       __DIS_FW_FEAT(RTL8922A, ge, 0, 35, 84, 0, WITH_RFK_PRE_NOTIFY, G),
        __CFG_FW_FEAT(RTL8922A, lt, 0, 35, 84, 0, ADDR_CAM_V0),
 };
 
@@ -6414,7 +6414,8 @@ int rtw89_fw_h2c_rf_pre_ntfy(struct rtw89_dev *rtwdev,
        u32 val32;
        int ret;
 
-       if (RTW89_CHK_FW_FEATURE(RFK_PRE_NOTIFY_V2, &rtwdev->fw)) {
+       if (RTW89_CHK_FW_FEATURE(RFK_PRE_NOTIFY_V3, &rtwdev->fw)) {
+       } else if (RTW89_CHK_FW_FEATURE(RFK_PRE_NOTIFY_V2, &rtwdev->fw)) {
                len = sizeof(*h2c_v2);
                ver = 2;
        } else if (RTW89_CHK_FW_FEATURE(RFK_PRE_NOTIFY_V1, &rtwdev->fw)) {
index 96dc94c1f556b751b5ab23b80923c0b6c42ba07a..ba71709a9bc9ac07c78ecbe3af467c69222c082f 100644 (file)
@@ -720,7 +720,7 @@ static void rtw89_ops_vif_cfg_changed(struct ieee80211_hw *hw,
        if (changed & BSS_CHANGED_MLD_VALID_LINKS) {
                struct rtw89_vif_link *cur = rtw89_get_designated_link(rtwvif);
 
-               if (RTW89_CHK_FW_FEATURE(WITH_RFK_PRE_NOTIFY, &rtwdev->fw))
+               if (RTW89_CHK_FW_FEATURE_GROUP(WITH_RFK_PRE_NOTIFY, &rtwdev->fw))
                        rtw89_chip_rfk_channel(rtwdev, cur);
 
                if (hweight16(vif->active_links) == 1)
index d0e5d52964de576fef6d2c9e8d866c320a554094..f56b433a16749197a1d1fc2a41c83d9785b1a93b 100644 (file)
@@ -3808,7 +3808,7 @@ int rtw89_phy_rfk_pre_ntfy_and_wait(struct rtw89_dev *rtwdev,
 {
        int ret;
 
-       if (RTW89_CHK_FW_FEATURE(WITH_RFK_PRE_NOTIFY, &rtwdev->fw))
+       if (RTW89_CHK_FW_FEATURE_GROUP(WITH_RFK_PRE_NOTIFY, &rtwdev->fw))
                goto pre_ntfy;
 
        return rtw89_fw_h2c_rf_pre_ntfy_mcc(rtwdev, phy_idx);