wifi: rtw89: efuse: move reading efuse of fw secure info to common
authorPing-Ke Shih <pkshih@realtek.com>
Wed, 30 Oct 2024 02:21:28 +0000 (10:21 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Wed, 6 Nov 2024 05:55:55 +0000 (13:55 +0800)
The secure key used by certain hardware module is programmed in efuse, so
driver should read the information from efuse before downloading firmware.

Originally only RTL8922AE can support firmware secure boot, and read efuse
during chip power on. To extend to support all chips, move the caller to
common power on flow and add separate functions to read efuse for
WiFi 6 chips.

No logic change at all.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20241030022135.11688-2-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/efuse.c
drivers/net/wireless/realtek/rtw89/efuse.h
drivers/net/wireless/realtek/rtw89/efuse_be.c
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/rtw8922a.c

index e123607..5326231 100644 (file)
@@ -354,3 +354,8 @@ int rtw89_read_efuse_ver(struct rtw89_dev *rtwdev, u8 *ecv)
        return 0;
 }
 EXPORT_SYMBOL(rtw89_read_efuse_ver);
+
+int rtw89_efuse_read_fw_secure_ax(struct rtw89_dev *rtwdev)
+{
+       return 0;
+}
index 72416f5..a2f6f36 100644 (file)
@@ -23,6 +23,7 @@ int rtw89_parse_efuse_map_be(struct rtw89_dev *rtwdev);
 int rtw89_parse_phycap_map_be(struct rtw89_dev *rtwdev);
 int rtw89_cnv_efuse_state_be(struct rtw89_dev *rtwdev, bool idle);
 int rtw89_read_efuse_ver(struct rtw89_dev *rtwdev, u8 *efv);
+int rtw89_efuse_read_fw_secure_ax(struct rtw89_dev *rtwdev);
 int rtw89_efuse_read_fw_secure_be(struct rtw89_dev *rtwdev);
 
 #endif
index 0be26d5..756aaf8 100644 (file)
@@ -559,4 +559,3 @@ out:
 
        return 0;
 }
-EXPORT_SYMBOL(rtw89_efuse_read_fw_secure_be);
index 588e2b9..7ed29bc 100644 (file)
@@ -1444,6 +1444,7 @@ void rtw89_mac_notify_wake(struct rtw89_dev *rtwdev)
 static int rtw89_mac_power_switch(struct rtw89_dev *rtwdev, bool on)
 {
 #define PWR_ACT 1
+       const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
        const struct rtw89_chip_info *chip = rtwdev->chip;
        const struct rtw89_pwr_cfg * const *cfg_seq;
        int (*cfg_func)(struct rtw89_dev *rtwdev);
@@ -1472,6 +1473,9 @@ static int rtw89_mac_power_switch(struct rtw89_dev *rtwdev, bool on)
                return ret;
 
        if (on) {
+               if (!test_bit(RTW89_FLAG_PROBE_DONE, rtwdev->flags))
+                       mac->efuse_read_fw_secure(rtwdev);
+
                set_bit(RTW89_FLAG_POWERON, rtwdev->flags);
                set_bit(RTW89_FLAG_DMAC_FUNC, rtwdev->flags);
                set_bit(RTW89_FLAG_CMAC0_FUNC, rtwdev->flags);
@@ -6673,6 +6677,7 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_ax = {
        .parse_efuse_map = rtw89_parse_efuse_map_ax,
        .parse_phycap_map = rtw89_parse_phycap_map_ax,
        .cnv_efuse_state = rtw89_cnv_efuse_state_ax,
+       .efuse_read_fw_secure = rtw89_efuse_read_fw_secure_ax,
 
        .cfg_plt = rtw89_mac_cfg_plt_ax,
        .get_plt_cnt = rtw89_mac_get_plt_cnt_ax,
index 721fa3b..4d4b505 100644 (file)
@@ -988,6 +988,7 @@ struct rtw89_mac_gen_def {
        int (*parse_efuse_map)(struct rtw89_dev *rtwdev);
        int (*parse_phycap_map)(struct rtw89_dev *rtwdev);
        int (*cnv_efuse_state)(struct rtw89_dev *rtwdev, bool idle);
+       int (*efuse_read_fw_secure)(struct rtw89_dev *rtwdev);
 
        int (*cfg_plt)(struct rtw89_dev *rtwdev, struct rtw89_mac_ax_plt *plt);
        u16 (*get_plt_cnt)(struct rtw89_dev *rtwdev, u8 band);
index 3094346..e0d7cf9 100644 (file)
@@ -2603,6 +2603,7 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_be = {
        .parse_efuse_map = rtw89_parse_efuse_map_be,
        .parse_phycap_map = rtw89_parse_phycap_map_be,
        .cnv_efuse_state = rtw89_cnv_efuse_state_be,
+       .efuse_read_fw_secure = rtw89_efuse_read_fw_secure_be,
 
        .cfg_plt = rtw89_mac_cfg_plt_be,
        .get_plt_cnt = rtw89_mac_get_plt_cnt_be,
index 27069a5..f17cb12 100644 (file)
@@ -399,9 +399,6 @@ static int rtw8922a_pwr_on_func(struct rtw89_dev *rtwdev)
        rtw89_write32_set(rtwdev, R_BE_FEN_RST_ENABLE, B_BE_FEN_BB_IP_RSTN |
                                                       B_BE_FEN_BBPLAT_RSTB);
 
-       if (!test_bit(RTW89_FLAG_PROBE_DONE, rtwdev->flags))
-               rtw89_efuse_read_fw_secure_be(rtwdev);
-
        return 0;
 }