]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: 8852a: update supported firmware format to 1
authorZong-Zhe Yang <kevin_yang@realtek.com>
Fri, 13 Feb 2026 06:15:46 +0000 (14:15 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 3 Mar 2026 02:34:57 +0000 (10:34 +0800)
More data will be included in Firmware file and loaded via FW elements.
Unlike other chips, for RF radio, RTL8852A uses rtw89_phy_config_rf_reg
instead of v1, so update loading handling of corresponding FW element.
And then, increase RTL8852A FW format to 1 to prevent old driver from
misusing the data in FW elements.

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

index 130ebe33cef0aaed5e2f4ec7212dcb03e2ae3b2d..52f7e65fe6a5ac5129f266a24da325ec790bcdca 100644 (file)
@@ -1073,6 +1073,7 @@ int rtw89_build_phy_tbl_from_elm(struct rtw89_dev *rtwdev,
                                 const union rtw89_fw_element_arg arg)
 {
        struct rtw89_fw_elm_info *elm_info = &rtwdev->fw.elm_info;
+       const struct rtw89_chip_info *chip = rtwdev->chip;
        struct rtw89_hal *hal = &rtwdev->hal;
        struct rtw89_phy_table *tbl, **pp;
        struct rtw89_reg2_def *regs;
@@ -1129,7 +1130,9 @@ int rtw89_build_phy_tbl_from_elm(struct rtw89_dev *rtwdev,
 
        if (radio) {
                tbl->rf_path = arg.rf_path;
-               tbl->config = rtw89_phy_config_rf_reg_v1;
+               tbl->config = chip->chip_id == RTL8852A ?
+                             rtw89_phy_config_rf_reg :
+                             rtw89_phy_config_rf_reg_v1;
        }
 
        *pp = tbl;
index ee6ab2136b9a74d953cbcb18f05b00b9b04a5c25..74f5d5562848594ada6d34602e85abdbe4f53d74 100644 (file)
@@ -1659,10 +1659,10 @@ static void rtw89_phy_config_rf_reg_noio(struct rtw89_dev *rtwdev,
                                     (struct rtw89_fw_h2c_rf_reg_info *)extra_data);
 }
 
-static void rtw89_phy_config_rf_reg(struct rtw89_dev *rtwdev,
-                                   const struct rtw89_reg2_def *reg,
-                                   enum rtw89_rf_path rf_path,
-                                   void *extra_data)
+void rtw89_phy_config_rf_reg(struct rtw89_dev *rtwdev,
+                            const struct rtw89_reg2_def *reg,
+                            enum rtw89_rf_path rf_path,
+                            void *extra_data)
 {
        if (reg->addr == 0xfe) {
                mdelay(50);
index ab263738d2120938adb3d3ab3fdee06cb7f30ad7..094c7e45f2541507fbbc41d3fc6d81a6cf7686bf 100644 (file)
@@ -852,6 +852,10 @@ bool rtw89_phy_write_rf_v3(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path,
 void rtw89_phy_init_bb_reg(struct rtw89_dev *rtwdev);
 void rtw89_phy_init_bb_afe(struct rtw89_dev *rtwdev);
 void rtw89_phy_init_rf_reg(struct rtw89_dev *rtwdev, bool noio);
+void rtw89_phy_config_rf_reg(struct rtw89_dev *rtwdev,
+                            const struct rtw89_reg2_def *reg,
+                            enum rtw89_rf_path rf_path,
+                            void *extra_data);
 void rtw89_phy_config_rf_reg_v1(struct rtw89_dev *rtwdev,
                                const struct rtw89_reg2_def *reg,
                                enum rtw89_rf_path rf_path,
index 6089cf9e1d5408e3db18bbc569640684145ff07b..898c534a57621dd0dd8a88f7aff4e413327c9872 100644 (file)
@@ -12,7 +12,7 @@
 #include "rtw8852a_table.h"
 #include "txrx.h"
 
-#define RTW8852A_FW_FORMAT_MAX 0
+#define RTW8852A_FW_FORMAT_MAX 1
 #define RTW8852A_FW_BASENAME "rtw89/rtw8852a_fw"
 #define RTW8852A_MODULE_FIRMWARE \
        RTW89_GEN_MODULE_FWNAME(RTW8852A_FW_BASENAME, RTW8852A_FW_FORMAT_MAX)