]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
rtw88: 8723d: add cck pd seetings
authorPing-Ke Shih <pkshih@realtek.com>
Mon, 9 Nov 2020 09:01:22 +0000 (17:01 +0800)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 24 Nov 2020 09:15:22 +0000 (11:15 +0200)
CCK PD can reduce the number of false alarm of the CCK rates.
It dynamically adjusts the power threshold and CS ratio.
The values are compared to the values of the previous level, if
the level is changed, set new values of power threshold and CS
ratio.

Implement rtw_chip_ops::cck_pd_set() for 8723d.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20201109090123.9254-1-pkshih@realtek.com
drivers/net/wireless/realtek/rtw88/rtw8723d.c
drivers/net/wireless/realtek/rtw88/rtw8723d.h

index 4ed38681c97d440bf90006df660f417fd5e75ffb..0d5cfb6bbef188a38a0036ba3dc28ce4c58f9ebb 100644 (file)
@@ -192,6 +192,7 @@ static void rtw8723d_phy_set_param(struct rtw_dev *rtwdev)
        rtw_write32(rtwdev, REG_LTR_CTRL_BASIC + 4, WLAN_LTR_CTRL2);
 
        rtw_phy_init(rtwdev);
+       rtwdev->dm_info.cck_pd_default = rtw_read8(rtwdev, REG_CSRATIO) & 0x1f;
 
        rtw_write16_set(rtwdev, REG_TXDMA_OFFSET_CHK, BIT_DROP_DATA_EN);
 
@@ -1498,6 +1499,22 @@ out:
        rtw_dbg(rtwdev, RTW_DBG_RFK, "[IQK] finished\n");
 }
 
+static void rtw8723d_phy_cck_pd_set(struct rtw_dev *rtwdev, u8 new_lvl)
+{
+       struct rtw_dm_info *dm_info = &rtwdev->dm_info;
+       u8 pd[CCK_PD_LV_MAX] = {3, 7, 13, 13, 13};
+
+       if (dm_info->cck_pd_lv[RTW_CHANNEL_WIDTH_20][RF_PATH_A] == new_lvl)
+               return;
+
+       dm_info->cck_fa_avg = CCK_FA_AVG_RESET;
+
+       dm_info->cck_pd_lv[RTW_CHANNEL_WIDTH_20][RF_PATH_A] = new_lvl;
+       rtw_write32_mask(rtwdev, REG_PWRTH, 0x3f0000, pd[new_lvl]);
+       rtw_write32_mask(rtwdev, REG_PWRTH2, 0x1f0000,
+                        dm_info->cck_pd_default + new_lvl * 2);
+}
+
 /* for coex */
 static void rtw8723d_coex_cfg_init(struct rtw_dev *rtwdev)
 {
@@ -1931,6 +1948,7 @@ static struct rtw_chip_ops rtw8723d_ops = {
        .efuse_grant            = rtw8723d_efuse_grant,
        .false_alarm_statistics = rtw8723d_false_alarm_statistics,
        .phy_calibration        = rtw8723d_phy_calibration,
+       .cck_pd_set             = rtw8723d_phy_cck_pd_set,
        .pwr_track              = rtw8723d_pwr_track,
        .config_bfee            = NULL,
        .set_gid_table          = NULL,
index 7894d321cd7ec843ba4b97885a9234eeeef35ef7..41d35174a54250ae2f095d249b1151c075956a82 100644 (file)
@@ -163,6 +163,7 @@ static inline s32 iqk_mult(s32 x, s32 y, s32 *ext)
 #define REG_CCK0_SYS           0x0a00
 #define BIT_CCK_SIDE_BAND      BIT(4)
 #define REG_CCK_ANT_SEL_11N    0x0a04
+#define REG_PWRTH              0x0a08
 #define REG_CCK_FA_RST_11N     0x0a2c
 #define BIT_MASK_CCK_CNT_KEEP  BIT(12)
 #define BIT_MASK_CCK_CNT_EN    BIT(13)
@@ -175,6 +176,8 @@ static inline s32 iqk_mult(s32 x, s32 y, s32 *ext)
 #define REG_CCK_CCA_CNT_11N    0x0a60
 #define BIT_MASK_CCK_FA_MSB    GENMASK(7, 0)
 #define BIT_MASK_CCK_FA_LSB    GENMASK(15, 8)
+#define REG_PWRTH2             0x0aa8
+#define REG_CSRATIO            0x0aaa
 #define REG_OFDM_FA_HOLDC_11N  0x0c00
 #define BIT_MASK_OFDM_FA_KEEP  BIT(31)
 #define REG_BB_RX_PATH_11N     0x0c04