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 e1236079a84a1ac6b6b988723ec230da5bf64ad9..532623130c417a4a712f3de5b401a630c841c938 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 72416f56a071361a386981c67b660d32defc28db..a2f6f36e697f96fd82a03c5450048bfdc2d4173a 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 0be26d5fdf7cf69fc77edd0b00ff5a91c99a7b62..756aaf886af92c591d4eee91ee27a72c00b638b0 100644 (file)
@@ -559,4 +559,3 @@ out:
 
        return 0;
 }
-EXPORT_SYMBOL(rtw89_efuse_read_fw_secure_be);
index 588e2b96bf43df8e556c5e8d4dc9d4fab5950517..7ed29bc69009d0d47bdabded3bba03b18e285e98 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 721fa3b4f82bbaea5ad675e6ad9e4825e1a336ec..4d4b505e3bc9b6a633e877cb8069a2cf969e6c86 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 30943462640f9b0e0fb27e14aa9edce12a03fb7e..e0d7cf9fd7eec32c16fcbb90e827d7d905a10914 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 27069a55e368df6675a69e51da616548b8efa548..f17cb1204f803ed85626a7fef6396884415ea8cc 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;
 }