Commit b7379148 authored by Yuan-Han Zhang's avatar Yuan-Han Zhang Committed by Kalle Valo

rtw89: modify dcfo_comp to share with chips

The dcfo_comp is digital CFO (central frequency offset) compensation.
Since the flow can be shared with all chips, add chip parameters to support
variant register address and format.
Signed-off-by: default avatarYuan-Han Zhang <yuanhan1020@realtek.com>
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/20220317055543.40514-2-pkshih@realtek.com
parent 00f1d133
...@@ -2332,6 +2332,8 @@ struct rtw89_chip_info { ...@@ -2332,6 +2332,8 @@ struct rtw89_chip_info {
u32 c2h_ctrl_reg; u32 c2h_ctrl_reg;
const u32 *c2h_regs; const u32 *c2h_regs;
const struct rtw89_page_regs *page_regs; const struct rtw89_page_regs *page_regs;
const struct rtw89_reg_def *dcfo_comp;
u8 dcfo_comp_sft;
}; };
union rtw89_bus_info { union rtw89_bus_info {
......
...@@ -1705,9 +1705,11 @@ static void rtw89_phy_cfo_reset(struct rtw89_dev *rtwdev) ...@@ -1705,9 +1705,11 @@ static void rtw89_phy_cfo_reset(struct rtw89_dev *rtwdev)
static void rtw89_dcfo_comp(struct rtw89_dev *rtwdev, s32 curr_cfo) static void rtw89_dcfo_comp(struct rtw89_dev *rtwdev, s32 curr_cfo)
{ {
const struct rtw89_reg_def *dcfo_comp = rtwdev->chip->dcfo_comp;
bool is_linked = rtwdev->total_sta_assoc > 0; bool is_linked = rtwdev->total_sta_assoc > 0;
s32 cfo_avg_312; s32 cfo_avg_312;
s32 dcfo_comp; s32 dcfo_comp_val;
u8 dcfo_comp_sft = rtwdev->chip->dcfo_comp_sft;
int sign; int sign;
if (!is_linked) { if (!is_linked) {
...@@ -1718,13 +1720,13 @@ static void rtw89_dcfo_comp(struct rtw89_dev *rtwdev, s32 curr_cfo) ...@@ -1718,13 +1720,13 @@ static void rtw89_dcfo_comp(struct rtw89_dev *rtwdev, s32 curr_cfo)
rtw89_debug(rtwdev, RTW89_DBG_CFO, "DCFO: curr_cfo=%d\n", curr_cfo); rtw89_debug(rtwdev, RTW89_DBG_CFO, "DCFO: curr_cfo=%d\n", curr_cfo);
if (curr_cfo == 0) if (curr_cfo == 0)
return; return;
dcfo_comp = rtw89_phy_read32_mask(rtwdev, R_DCFO, B_DCFO); dcfo_comp_val = rtw89_phy_read32_mask(rtwdev, R_DCFO, B_DCFO);
sign = curr_cfo > 0 ? 1 : -1; sign = curr_cfo > 0 ? 1 : -1;
cfo_avg_312 = (curr_cfo << 3) / 5 + sign * dcfo_comp; cfo_avg_312 = (curr_cfo << dcfo_comp_sft) / 5 + sign * dcfo_comp_val;
rtw89_debug(rtwdev, RTW89_DBG_CFO, "DCFO: avg_cfo=%d\n", cfo_avg_312); rtw89_debug(rtwdev, RTW89_DBG_CFO, "DCFO: avg_cfo=%d\n", cfo_avg_312);
if (rtwdev->chip->chip_id == RTL8852A && rtwdev->hal.cv == CHIP_CBV) if (rtwdev->chip->chip_id == RTL8852A && rtwdev->hal.cv == CHIP_CBV)
cfo_avg_312 = -cfo_avg_312; cfo_avg_312 = -cfo_avg_312;
rtw89_phy_set_phy_regs(rtwdev, R_DCFO_COMP_S0, B_DCFO_COMP_S0_MSK, rtw89_phy_set_phy_regs(rtwdev, dcfo_comp->addr, dcfo_comp->mask,
cfo_avg_312); cfo_avg_312);
} }
......
...@@ -2093,6 +2093,8 @@ ...@@ -2093,6 +2093,8 @@
#define R_CHBW_MOD 0x4978 #define R_CHBW_MOD 0x4978
#define B_CHBW_MOD_PRICH GENMASK(11, 8) #define B_CHBW_MOD_PRICH GENMASK(11, 8)
#define B_CHBW_MOD_SBW GENMASK(13, 12) #define B_CHBW_MOD_SBW GENMASK(13, 12)
#define R_DCFO_COMP_S0_V1 0x4A40
#define B_DCFO_COMP_S0_V1_MSK GENMASK(13, 0)
#define R_BMODE_PDTH_V1 0x4B64 #define R_BMODE_PDTH_V1 0x4B64
#define B_BMODE_PDTH_LOWER_BOUND_MSK_V1 GENMASK(31, 24) #define B_BMODE_PDTH_LOWER_BOUND_MSK_V1 GENMASK(31, 24)
#define R_BMODE_PDTH_EN_V1 0x4B74 #define R_BMODE_PDTH_EN_V1 0x4B74
......
...@@ -402,6 +402,10 @@ static const struct rtw89_page_regs rtw8852a_page_regs = { ...@@ -402,6 +402,10 @@ static const struct rtw89_page_regs rtw8852a_page_regs = {
.wp_page_info1 = R_AX_WP_PAGE_INFO1, .wp_page_info1 = R_AX_WP_PAGE_INFO1,
}; };
static const struct rtw89_reg_def rtw8852a_dcfo_comp = {
R_DCFO_COMP_S0, B_DCFO_COMP_S0_MSK
};
static void rtw8852ae_efuse_parsing(struct rtw89_efuse *efuse, static void rtw8852ae_efuse_parsing(struct rtw89_efuse *efuse,
struct rtw8852a_efuse *map) struct rtw8852a_efuse *map)
{ {
...@@ -2091,6 +2095,8 @@ const struct rtw89_chip_info rtw8852a_chip_info = { ...@@ -2091,6 +2095,8 @@ const struct rtw89_chip_info rtw8852a_chip_info = {
.c2h_ctrl_reg = R_AX_C2HREG_CTRL, .c2h_ctrl_reg = R_AX_C2HREG_CTRL,
.c2h_regs = rtw8852a_c2h_regs, .c2h_regs = rtw8852a_c2h_regs,
.page_regs = &rtw8852a_page_regs, .page_regs = &rtw8852a_page_regs,
.dcfo_comp = &rtw8852a_dcfo_comp,
.dcfo_comp_sft = 3,
}; };
EXPORT_SYMBOL(rtw8852a_chip_info); EXPORT_SYMBOL(rtw8852a_chip_info);
......
...@@ -44,6 +44,10 @@ static const struct rtw89_page_regs rtw8852c_page_regs = { ...@@ -44,6 +44,10 @@ static const struct rtw89_page_regs rtw8852c_page_regs = {
.wp_page_info1 = R_AX_WP_PAGE_INFO1_V1, .wp_page_info1 = R_AX_WP_PAGE_INFO1_V1,
}; };
static const struct rtw89_reg_def rtw8852c_dcfo_comp = {
R_DCFO_COMP_S0_V1, B_DCFO_COMP_S0_V1_MSK
};
static int rtw8852c_pwr_on_func(struct rtw89_dev *rtwdev) static int rtw8852c_pwr_on_func(struct rtw89_dev *rtwdev)
{ {
u32 val32; u32 val32;
...@@ -470,6 +474,8 @@ const struct rtw89_chip_info rtw8852c_chip_info = { ...@@ -470,6 +474,8 @@ const struct rtw89_chip_info rtw8852c_chip_info = {
.c2h_ctrl_reg = R_AX_C2HREG_CTRL_V1, .c2h_ctrl_reg = R_AX_C2HREG_CTRL_V1,
.c2h_regs = rtw8852c_c2h_regs, .c2h_regs = rtw8852c_c2h_regs,
.page_regs = &rtw8852c_page_regs, .page_regs = &rtw8852c_page_regs,
.dcfo_comp = &rtw8852c_dcfo_comp,
.dcfo_comp_sft = 5,
}; };
EXPORT_SYMBOL(rtw8852c_chip_info); EXPORT_SYMBOL(rtw8852c_chip_info);
......
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