wifi: rtw89: mac: use mac_gen pointer to access about efuse
authorPing-Ke Shih <pkshih@realtek.com>
Fri, 17 Nov 2023 02:40:25 +0000 (10:40 +0800)
committerKalle Valo <kvalo@kernel.org>
Wed, 22 Nov 2023 15:51:16 +0000 (17:51 +0200)
Use function pointers to abstract efuse access, and introduce an new
function to convert efuse power state that is needed by WiFi 7 chips.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20231117024029.113845-3-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/core.c
drivers/net/wireless/realtek/rtw89/efuse.c
drivers/net/wireless/realtek/rtw89/efuse.h
drivers/net/wireless/realtek/rtw89/mac.c
drivers/net/wireless/realtek/rtw89/mac.h

index b18f54b16f9afb2b64dc656343a8e7fce4f1ce13..74bf2964382396159479c83563951f2bafcc6500 100644 (file)
@@ -4216,17 +4216,18 @@ out:
 
 static int rtw89_chip_efuse_info_setup(struct rtw89_dev *rtwdev)
 {
+       const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
        int ret;
 
        ret = rtw89_mac_partial_init(rtwdev, false);
        if (ret)
                return ret;
 
-       ret = rtw89_parse_efuse_map(rtwdev);
+       ret = mac->parse_efuse_map(rtwdev);
        if (ret)
                return ret;
 
-       ret = rtw89_parse_phycap_map(rtwdev);
+       ret = mac->parse_phycap_map(rtwdev);
        if (ret)
                return ret;
 
index 2aaf4d013e464597c80b78af9cb035a8c3546eb6..b2e8c6cc12d9c82dd92829259bea1a774c46f682 100644 (file)
@@ -114,6 +114,11 @@ static int rtw89_dump_physical_efuse_map_ddv(struct rtw89_dev *rtwdev, u8 *map,
        return 0;
 }
 
+int rtw89_cnv_efuse_state_ax(struct rtw89_dev *rtwdev, bool idle)
+{
+       return 0;
+}
+
 static int rtw89_dump_physical_efuse_map_dav(struct rtw89_dev *rtwdev, u8 *map,
                                             u32 dump_addr, u32 dump_size)
 {
@@ -231,7 +236,7 @@ static int rtw89_dump_logical_efuse_map(struct rtw89_dev *rtwdev, u8 *phy_map,
        return 0;
 }
 
-int rtw89_parse_efuse_map(struct rtw89_dev *rtwdev)
+int rtw89_parse_efuse_map_ax(struct rtw89_dev *rtwdev)
 {
        u32 phy_size = rtwdev->chip->physical_efuse_size;
        u32 log_size = rtwdev->chip->logical_efuse_size;
@@ -300,7 +305,7 @@ out_free:
        return ret;
 }
 
-int rtw89_parse_phycap_map(struct rtw89_dev *rtwdev)
+int rtw89_parse_phycap_map_ax(struct rtw89_dev *rtwdev)
 {
        u32 phycap_addr = rtwdev->chip->phycap_addr;
        u32 phycap_size = rtwdev->chip->phycap_size;
index 79071aff28de3832a7888bc99176074c40504f76..24173b3dc085b2671e89635c9f164c47d78b9310 100644 (file)
@@ -7,8 +7,9 @@
 
 #include "core.h"
 
-int rtw89_parse_efuse_map(struct rtw89_dev *rtwdev);
-int rtw89_parse_phycap_map(struct rtw89_dev *rtwdev);
+int rtw89_parse_efuse_map_ax(struct rtw89_dev *rtwdev);
+int rtw89_parse_phycap_map_ax(struct rtw89_dev *rtwdev);
+int rtw89_cnv_efuse_state_ax(struct rtw89_dev *rtwdev, bool idle);
 int rtw89_read_efuse_ver(struct rtw89_dev *rtwdev, u8 *efv);
 
 #endif
index 0c5768f41d55dfcf44b14a858c8d8e129b62b3e2..9ec3070516115cdf5034b417550defdbb90f6c1d 100644 (file)
@@ -5,6 +5,7 @@
 #include "cam.h"
 #include "chan.h"
 #include "debug.h"
+#include "efuse.h"
 #include "fw.h"
 #include "mac.h"
 #include "pci.h"
@@ -2626,20 +2627,26 @@ static int cmac_init(struct rtw89_dev *rtwdev, u8 mac_idx)
 static int rtw89_mac_read_phycap(struct rtw89_dev *rtwdev,
                                 struct rtw89_mac_c2h_info *c2h_info)
 {
+       const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
        struct rtw89_mac_h2c_info h2c_info = {0};
        u32 ret;
 
+       mac->cnv_efuse_state(rtwdev, false);
+
        h2c_info.id = RTW89_FWCMD_H2CREG_FUNC_GET_FEATURE;
        h2c_info.content_len = 0;
 
        ret = rtw89_fw_msg_reg(rtwdev, &h2c_info, c2h_info);
        if (ret)
-               return ret;
+               goto out;
 
        if (c2h_info->id != RTW89_FWCMD_C2HREG_FUNC_PHY_CAP)
-               return -EINVAL;
+               ret = -EINVAL;
 
-       return 0;
+out:
+       mac->cnv_efuse_state(rtwdev, true);
+
+       return ret;
 }
 
 int rtw89_mac_setup_phycap(struct rtw89_dev *rtwdev)
@@ -5775,6 +5782,9 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_ax = {
        .fwdl_enable_wcpu = rtw89_mac_enable_cpu_ax,
        .fwdl_get_status = rtw89_fw_get_rdy_ax,
        .fwdl_check_path_ready = rtw89_fwdl_check_path_ready_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,
 
        .get_txpwr_cr = rtw89_mac_get_txpwr_cr_ax,
 };
index cd2e9b850c7214be98a8f1c42de9e760a983ac48..f47a42387a6a6c3284c4c41bf1589803cdaa8f1b 100644 (file)
@@ -873,6 +873,9 @@ struct rtw89_mac_gen_def {
                                bool dlfw, bool include_bb);
        u8 (*fwdl_get_status)(struct rtw89_dev *rtwdev, enum rtw89_fwdl_check_type type);
        int (*fwdl_check_path_ready)(struct rtw89_dev *rtwdev, bool h2c_or_fwdl);
+       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);
 
        bool (*get_txpwr_cr)(struct rtw89_dev *rtwdev,
                             enum rtw89_phy_idx phy_idx,