wifi: rtw89: add crystal_cap check to avoid setting as overflow value
BugLink: https://bugs.launchpad.net/bugs/2114239 [ Upstream commit 7b98caea39676561f22db58752551161bb36462b ] In the original flow, the crystal_cap might be calculated as a negative value and set as an overflow value. Therefore, we added a check to limit the calculated crystal_cap value. Additionally, we shrank the crystal_cap adjustment according to specific CFO. Signed-off-by: Chih-Kang Chang <gary.chang@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20241128055433.11851-7-pkshih@realtek.com Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Noah Wager <noah.wager@canonical.com> Signed-off-by: Mehmet Basaran <mehmet.basaran@canonical.com>
This commit is contained in:
committed by
Mehmet Basaran
parent
ba08b57ad1
commit
f3be9a8abc
@@ -2808,7 +2808,6 @@ static void rtw89_phy_cfo_set_crystal_cap(struct rtw89_dev *rtwdev,
|
||||
|
||||
if (!force && cfo->crystal_cap == crystal_cap)
|
||||
return;
|
||||
crystal_cap = clamp_t(u8, crystal_cap, 0, 127);
|
||||
if (chip->chip_id == RTL8852A || chip->chip_id == RTL8851B) {
|
||||
rtw89_phy_cfo_set_xcap_reg(rtwdev, true, crystal_cap);
|
||||
rtw89_phy_cfo_set_xcap_reg(rtwdev, false, crystal_cap);
|
||||
@@ -2931,7 +2930,7 @@ static void rtw89_phy_cfo_crystal_cap_adjust(struct rtw89_dev *rtwdev,
|
||||
s32 curr_cfo)
|
||||
{
|
||||
struct rtw89_cfo_tracking_info *cfo = &rtwdev->cfo_tracking;
|
||||
s8 crystal_cap = cfo->crystal_cap;
|
||||
int crystal_cap = cfo->crystal_cap;
|
||||
s32 cfo_abs = abs(curr_cfo);
|
||||
int sign;
|
||||
|
||||
@@ -2952,15 +2951,17 @@ static void rtw89_phy_cfo_crystal_cap_adjust(struct rtw89_dev *rtwdev,
|
||||
}
|
||||
sign = curr_cfo > 0 ? 1 : -1;
|
||||
if (cfo_abs > CFO_TRK_STOP_TH_4)
|
||||
crystal_cap += 7 * sign;
|
||||
else if (cfo_abs > CFO_TRK_STOP_TH_3)
|
||||
crystal_cap += 5 * sign;
|
||||
else if (cfo_abs > CFO_TRK_STOP_TH_2)
|
||||
crystal_cap += 3 * sign;
|
||||
else if (cfo_abs > CFO_TRK_STOP_TH_3)
|
||||
crystal_cap += 3 * sign;
|
||||
else if (cfo_abs > CFO_TRK_STOP_TH_2)
|
||||
crystal_cap += 1 * sign;
|
||||
else if (cfo_abs > CFO_TRK_STOP_TH_1)
|
||||
crystal_cap += 1 * sign;
|
||||
else
|
||||
return;
|
||||
|
||||
crystal_cap = clamp(crystal_cap, 0, 127);
|
||||
rtw89_phy_cfo_set_crystal_cap(rtwdev, (u8)crystal_cap, false);
|
||||
rtw89_debug(rtwdev, RTW89_DBG_CFO,
|
||||
"X_cap{Curr,Default}={0x%x,0x%x}\n",
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
#define CFO_TRK_STOP_TH_4 (30 << 2)
|
||||
#define CFO_TRK_STOP_TH_3 (20 << 2)
|
||||
#define CFO_TRK_STOP_TH_2 (10 << 2)
|
||||
#define CFO_TRK_STOP_TH_1 (00 << 2)
|
||||
#define CFO_TRK_STOP_TH_1 (03 << 2)
|
||||
#define CFO_TRK_STOP_TH (2 << 2)
|
||||
#define CFO_SW_COMP_FINE_TUNE (2 << 2)
|
||||
#define CFO_PERIOD_CNT 15
|
||||
|
||||
Reference in New Issue
Block a user