Commit 88e6a923 authored by Ping-Ke Shih's avatar Ping-Ke Shih Committed by Kalle Valo

wifi: rtw89: mac: use mac_gen pointer to access about efuse

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: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20231117024029.113845-3-pkshih@realtek.com
parent c0a04552
...@@ -4216,17 +4216,18 @@ static void rtw89_core_setup_rfe_parms(struct rtw89_dev *rtwdev) ...@@ -4216,17 +4216,18 @@ static void rtw89_core_setup_rfe_parms(struct rtw89_dev *rtwdev)
static int rtw89_chip_efuse_info_setup(struct rtw89_dev *rtwdev) static int rtw89_chip_efuse_info_setup(struct rtw89_dev *rtwdev)
{ {
const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
int ret; int ret;
ret = rtw89_mac_partial_init(rtwdev, false); ret = rtw89_mac_partial_init(rtwdev, false);
if (ret) if (ret)
return ret; return ret;
ret = rtw89_parse_efuse_map(rtwdev); ret = mac->parse_efuse_map(rtwdev);
if (ret) if (ret)
return ret; return ret;
ret = rtw89_parse_phycap_map(rtwdev); ret = mac->parse_phycap_map(rtwdev);
if (ret) if (ret)
return ret; return ret;
......
...@@ -114,6 +114,11 @@ static int rtw89_dump_physical_efuse_map_ddv(struct rtw89_dev *rtwdev, u8 *map, ...@@ -114,6 +114,11 @@ static int rtw89_dump_physical_efuse_map_ddv(struct rtw89_dev *rtwdev, u8 *map,
return 0; 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, static int rtw89_dump_physical_efuse_map_dav(struct rtw89_dev *rtwdev, u8 *map,
u32 dump_addr, u32 dump_size) u32 dump_addr, u32 dump_size)
{ {
...@@ -231,7 +236,7 @@ static int rtw89_dump_logical_efuse_map(struct rtw89_dev *rtwdev, u8 *phy_map, ...@@ -231,7 +236,7 @@ static int rtw89_dump_logical_efuse_map(struct rtw89_dev *rtwdev, u8 *phy_map,
return 0; 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 phy_size = rtwdev->chip->physical_efuse_size;
u32 log_size = rtwdev->chip->logical_efuse_size; u32 log_size = rtwdev->chip->logical_efuse_size;
...@@ -300,7 +305,7 @@ int rtw89_parse_efuse_map(struct rtw89_dev *rtwdev) ...@@ -300,7 +305,7 @@ int rtw89_parse_efuse_map(struct rtw89_dev *rtwdev)
return ret; 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_addr = rtwdev->chip->phycap_addr;
u32 phycap_size = rtwdev->chip->phycap_size; u32 phycap_size = rtwdev->chip->phycap_size;
......
...@@ -7,8 +7,9 @@ ...@@ -7,8 +7,9 @@
#include "core.h" #include "core.h"
int rtw89_parse_efuse_map(struct rtw89_dev *rtwdev); int rtw89_parse_efuse_map_ax(struct rtw89_dev *rtwdev);
int rtw89_parse_phycap_map(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); int rtw89_read_efuse_ver(struct rtw89_dev *rtwdev, u8 *efv);
#endif #endif
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "cam.h" #include "cam.h"
#include "chan.h" #include "chan.h"
#include "debug.h" #include "debug.h"
#include "efuse.h"
#include "fw.h" #include "fw.h"
#include "mac.h" #include "mac.h"
#include "pci.h" #include "pci.h"
...@@ -2626,20 +2627,26 @@ static int cmac_init(struct rtw89_dev *rtwdev, u8 mac_idx) ...@@ -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, static int rtw89_mac_read_phycap(struct rtw89_dev *rtwdev,
struct rtw89_mac_c2h_info *c2h_info) 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}; struct rtw89_mac_h2c_info h2c_info = {0};
u32 ret; u32 ret;
mac->cnv_efuse_state(rtwdev, false);
h2c_info.id = RTW89_FWCMD_H2CREG_FUNC_GET_FEATURE; h2c_info.id = RTW89_FWCMD_H2CREG_FUNC_GET_FEATURE;
h2c_info.content_len = 0; h2c_info.content_len = 0;
ret = rtw89_fw_msg_reg(rtwdev, &h2c_info, c2h_info); ret = rtw89_fw_msg_reg(rtwdev, &h2c_info, c2h_info);
if (ret) if (ret)
return ret; goto out;
if (c2h_info->id != RTW89_FWCMD_C2HREG_FUNC_PHY_CAP) 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) int rtw89_mac_setup_phycap(struct rtw89_dev *rtwdev)
...@@ -5775,6 +5782,9 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_ax = { ...@@ -5775,6 +5782,9 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_ax = {
.fwdl_enable_wcpu = rtw89_mac_enable_cpu_ax, .fwdl_enable_wcpu = rtw89_mac_enable_cpu_ax,
.fwdl_get_status = rtw89_fw_get_rdy_ax, .fwdl_get_status = rtw89_fw_get_rdy_ax,
.fwdl_check_path_ready = rtw89_fwdl_check_path_ready_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, .get_txpwr_cr = rtw89_mac_get_txpwr_cr_ax,
}; };
......
...@@ -873,6 +873,9 @@ struct rtw89_mac_gen_def { ...@@ -873,6 +873,9 @@ struct rtw89_mac_gen_def {
bool dlfw, bool include_bb); bool dlfw, bool include_bb);
u8 (*fwdl_get_status)(struct rtw89_dev *rtwdev, enum rtw89_fwdl_check_type type); 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 (*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, bool (*get_txpwr_cr)(struct rtw89_dev *rtwdev,
enum rtw89_phy_idx phy_idx, enum rtw89_phy_idx phy_idx,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment