]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: rtw89: 8851b: rfk: update IQK to 0x14
authorPing-Ke Shih <pkshih@realtek.com>
Fri, 27 Jun 2025 03:53:38 +0000 (11:53 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Fri, 4 Jul 2025 02:29:43 +0000 (10:29 +0800)
Update IQK along with TX/RX clock to 960MHz and 1920MHz to improve
performance.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250627035338.16637-1-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/rtw8851b_rfk.c
drivers/net/wireless/realtek/rtw89/rtw8851b_rfk_table.c
drivers/net/wireless/realtek/rtw89/rtw8851b_rfk_table.h

index 907ce6d3c1b1e3aff8a7c3f6dd8bb3567d9d37aa..7a319a6c838af6719f1522a95765f3188e847f31 100644 (file)
@@ -19,7 +19,7 @@
 #define RTW8851B_RXK_GROUP_NR 4
 #define RTW8851B_RXK_GROUP_IDX_NR 2
 #define RTW8851B_TXK_GROUP_NR 1
-#define RTW8851B_IQK_VER 0x2a
+#define RTW8851B_IQK_VER 0x14
 #define RTW8851B_IQK_SS 1
 #define RTW8851B_LOK_GRAM 10
 #define RTW8851B_TSSI_PATH_NR 1
@@ -1107,10 +1107,43 @@ static void _iqk_rxclk_setting(struct rtw89_dev *rtwdev, u8 path)
 
        rtw89_write_rf(rtwdev, path, RR_RXBB2, RR_RXBB2_CKT, 0x1);
 
-       if (iqk_info->iqk_bw[path] == RTW89_CHANNEL_WIDTH_80)
+       if (iqk_info->iqk_bw[path] == RTW89_CHANNEL_WIDTH_80) {
+               rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, B_ADC_FIFO_RXK, 0x0101);
+               rtw89_phy_write32_mask(rtwdev, R_UPD_CLK, B_DPD_GDIS, 0x1);
+
+               _rxck_force(rtwdev, path, true, ADC_960M);
+
                rtw89_rfk_parser(rtwdev, &rtw8851b_iqk_rxclk_80_defs_tbl);
-       else
+       } else {
+               rtw89_phy_write32_mask(rtwdev, R_ADC_FIFO, B_ADC_FIFO_RXK, 0x0101);
+               rtw89_phy_write32_mask(rtwdev, R_UPD_CLK, B_DPD_GDIS, 0x1);
+
+               _rxck_force(rtwdev, path, true, ADC_960M);
+
                rtw89_rfk_parser(rtwdev, &rtw8851b_iqk_rxclk_others_defs_tbl);
+       }
+
+       rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, (2)before RXK IQK\n", path);
+       rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, 0x%x[07:10] = 0x%x\n", path,
+                   0xc0d4, rtw89_phy_read32_mask(rtwdev, 0xc0d4, GENMASK(10, 7)));
+       rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, 0x%x[11:14] = 0x%x\n", path,
+                   0xc0d4, rtw89_phy_read32_mask(rtwdev, 0xc0d4, GENMASK(14, 11)));
+       rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, 0x%x[26:27] = 0x%x\n", path,
+                   0xc0d4, rtw89_phy_read32_mask(rtwdev, 0xc0d4, GENMASK(27, 26)));
+       rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, 0x%x[05:08] = 0x%x\n", path,
+                   0xc0d8, rtw89_phy_read32_mask(rtwdev, 0xc0d8, GENMASK(8, 5)));
+       rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, 0x%x[17:21] = 0x%x\n", path,
+                   0xc0c4, rtw89_phy_read32_mask(rtwdev, 0xc0c4, GENMASK(21, 17)));
+       rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, 0x%x[16:31] = 0x%x\n", path,
+                   0xc0e8, rtw89_phy_read32_mask(rtwdev, 0xc0e8, GENMASK(31, 16)));
+       rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, 0x%x[04:05] = 0x%x\n", path,
+                   0xc0e4, rtw89_phy_read32_mask(rtwdev, 0xc0e4, GENMASK(5, 4)));
+       rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, 0x%x[23:31]  = 0x%x\n", path,
+                   0x12a0, rtw89_phy_read32_mask(rtwdev, 0x12a0, GENMASK(31, 23)));
+       rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, 0x%x[13:14] = 0x%x\n", path,
+                   0xc0ec, rtw89_phy_read32_mask(rtwdev, 0xc0ec, GENMASK(14, 13)));
+       rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]S%x, 0x%x[16:23] = 0x%x\n", path,
+                   0xc0ec, rtw89_phy_read32_mask(rtwdev, 0xc0ec, GENMASK(23, 16)));
 }
 
 static bool _txk_5g_group_sel(struct rtw89_dev *rtwdev,
@@ -1616,6 +1649,14 @@ static void _iqk_macbb_setting(struct rtw89_dev *rtwdev,
        rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]===>%s\n", __func__);
 
        rtw89_rfk_parser(rtwdev, &rtw8851b_iqk_macbb_defs_tbl);
+
+       _txck_force(rtwdev, path, true, DAC_960M);
+
+       rtw89_phy_write32_mask(rtwdev, R_UPD_CLK, B_DPD_GDIS, 0x1);
+
+       _rxck_force(rtwdev, path, true, ADC_1920M);
+
+       rtw89_rfk_parser(rtwdev, &rtw8851b_iqk_macbb_bh_defs_tbl);
 }
 
 static void _iqk_init(struct rtw89_dev *rtwdev)
index 38ce03331069968c50e1fdc58b22479a0451123b..c5f70c045692f5d2e36c3a488ddc64d3a57765c2 100644 (file)
@@ -63,16 +63,7 @@ static const struct rtw89_reg5_def rtw8851b_dack_manual_off_defs[] = {
 RTW89_DECLARE_RFK_TBL(rtw8851b_dack_manual_off_defs);
 
 static const struct rtw89_reg5_def rtw8851b_iqk_rxclk_80_defs[] = {
-       RTW89_DECL_RFK_WM(0x20fc, 0xffff0000, 0x0101),
-       RTW89_DECL_RFK_WM(0x5670, 0x00002000, 0x1),
-       RTW89_DECL_RFK_WM(0x12a0, 0x00080000, 0x1),
-       RTW89_DECL_RFK_WM(0x12a0, 0x00070000, 0x2),
        RTW89_DECL_RFK_WM(0x5670, 0x60000000, 0x1),
-       RTW89_DECL_RFK_WM(0xc0d4, 0x00000780, 0x8),
-       RTW89_DECL_RFK_WM(0xc0d4, 0x00007800, 0x2),
-       RTW89_DECL_RFK_WM(0xc0d4, 0x0c000000, 0x2),
-       RTW89_DECL_RFK_WM(0xc0d8, 0x000001e0, 0x5),
-       RTW89_DECL_RFK_WM(0xc0c4, 0x003e0000, 0xf),
        RTW89_DECL_RFK_WM(0xc0ec, 0x00006000, 0x0),
        RTW89_DECL_RFK_WM(0x12b8, 0x40000000, 0x1),
        RTW89_DECL_RFK_WM(0x030c, 0xff000000, 0x0f),
@@ -85,16 +76,7 @@ static const struct rtw89_reg5_def rtw8851b_iqk_rxclk_80_defs[] = {
 RTW89_DECLARE_RFK_TBL(rtw8851b_iqk_rxclk_80_defs);
 
 static const struct rtw89_reg5_def rtw8851b_iqk_rxclk_others_defs[] = {
-       RTW89_DECL_RFK_WM(0x20fc, 0xffff0000, 0x0101),
-       RTW89_DECL_RFK_WM(0x5670, 0x00002000, 0x1),
-       RTW89_DECL_RFK_WM(0x12a0, 0x00080000, 0x1),
-       RTW89_DECL_RFK_WM(0x12a0, 0x00070000, 0x2),
        RTW89_DECL_RFK_WM(0x5670, 0x60000000, 0x0),
-       RTW89_DECL_RFK_WM(0xc0d4, 0x00000780, 0x8),
-       RTW89_DECL_RFK_WM(0xc0d4, 0x00007800, 0x2),
-       RTW89_DECL_RFK_WM(0xc0d4, 0x0c000000, 0x2),
-       RTW89_DECL_RFK_WM(0xc0d8, 0x000001e0, 0x5),
-       RTW89_DECL_RFK_WM(0xc0c4, 0x003e0000, 0xf),
        RTW89_DECL_RFK_WM(0xc0ec, 0x00006000, 0x2),
        RTW89_DECL_RFK_WM(0x12b8, 0x40000000, 0x1),
        RTW89_DECL_RFK_WM(0x030c, 0xff000000, 0x0f),
@@ -157,30 +139,38 @@ static const struct rtw89_reg5_def rtw8851b_iqk_macbb_defs[] = {
        RTW89_DECL_RFK_WM(0x20fc, 0x10000000, 0x0),
        RTW89_DECL_RFK_WM(0x5670, MASKDWORD, 0xf801fffd),
        RTW89_DECL_RFK_WM(0x5670, 0x00004000, 0x1),
-       RTW89_DECL_RFK_WM(0x12a0, 0x00008000, 0x1),
        RTW89_DECL_RFK_WM(0x5670, 0x80000000, 0x1),
-       RTW89_DECL_RFK_WM(0x12a0, 0x00007000, 0x7),
-       RTW89_DECL_RFK_WM(0x5670, 0x00002000, 0x1),
-       RTW89_DECL_RFK_WM(0x12a0, 0x00080000, 0x1),
-       RTW89_DECL_RFK_WM(0x12a0, 0x00070000, 0x3),
+};
+
+RTW89_DECLARE_RFK_TBL(rtw8851b_iqk_macbb_defs);
+
+static const struct rtw89_reg5_def rtw8851b_iqk_macbb_bh_defs[] = {
        RTW89_DECL_RFK_WM(0x5670, 0x60000000, 0x2),
-       RTW89_DECL_RFK_WM(0xc0d4, 0x00000780, 0x9),
-       RTW89_DECL_RFK_WM(0xc0d4, 0x00007800, 0x1),
-       RTW89_DECL_RFK_WM(0xc0d4, 0x0c000000, 0x0),
-       RTW89_DECL_RFK_WM(0xc0d8, 0x000001e0, 0x3),
-       RTW89_DECL_RFK_WM(0xc0c4, 0x003e0000, 0xa),
-       RTW89_DECL_RFK_WM(0xc0ec, 0x00006000, 0x0),
-       RTW89_DECL_RFK_WM(0xc0e8, 0x00000040, 0x1),
        RTW89_DECL_RFK_WM(0x12b8, 0x40000000, 0x1),
+       RTW89_DECL_RFK_DELAY(2),
        RTW89_DECL_RFK_WM(0x030c, 0xff000000, 0x1f),
+       RTW89_DECL_RFK_DELAY(10),
        RTW89_DECL_RFK_WM(0x030c, 0xff000000, 0x13),
+       RTW89_DECL_RFK_DELAY(2),
        RTW89_DECL_RFK_WM(0x032c, 0xffff0000, 0x0001),
+       RTW89_DECL_RFK_DELAY(2),
        RTW89_DECL_RFK_WM(0x032c, 0xffff0000, 0x0041),
+       RTW89_DECL_RFK_DELAY(10),
+       RTW89_DECL_RFK_WM(0x12b8, 0x40000000, 0x1),
+       RTW89_DECL_RFK_DELAY(2),
+       RTW89_DECL_RFK_WM(0x030c, 0xff000000, 0x1f),
+       RTW89_DECL_RFK_DELAY(10),
+       RTW89_DECL_RFK_WM(0x030c, 0xff000000, 0x13),
+       RTW89_DECL_RFK_DELAY(2),
+       RTW89_DECL_RFK_WM(0x032c, 0xffff0000, 0x0001),
+       RTW89_DECL_RFK_DELAY(2),
+       RTW89_DECL_RFK_WM(0x032c, 0xffff0000, 0x0041),
+       RTW89_DECL_RFK_DELAY(10),
        RTW89_DECL_RFK_WM(0x20fc, 0x00100000, 0x1),
        RTW89_DECL_RFK_WM(0x20fc, 0x10000000, 0x1),
 };
 
-RTW89_DECLARE_RFK_TBL(rtw8851b_iqk_macbb_defs);
+RTW89_DECLARE_RFK_TBL(rtw8851b_iqk_macbb_bh_defs);
 
 static const struct rtw89_reg5_def rtw8851b_tssi_sys_defs[] = {
        RTW89_DECL_RFK_WM(0x12bc, 0x000ffff0, 0xb5b5),
index 4fd81456109b23bd8cbc5cd9749b16be3644896a..3f1547f57505aea72380ce064b46913b73b94d18 100644 (file)
@@ -18,6 +18,7 @@ extern const struct rtw89_rfk_tbl rtw8851b_iqk_txk_2ghz_defs_tbl;
 extern const struct rtw89_rfk_tbl rtw8851b_iqk_txk_5ghz_defs_tbl;
 extern const struct rtw89_rfk_tbl rtw8851b_iqk_afebb_restore_defs_tbl;
 extern const struct rtw89_rfk_tbl rtw8851b_iqk_macbb_defs_tbl;
+extern const struct rtw89_rfk_tbl rtw8851b_iqk_macbb_bh_defs_tbl;
 extern const struct rtw89_rfk_tbl rtw8851b_tssi_sys_defs_tbl;
 extern const struct rtw89_rfk_tbl rtw8851b_tssi_sys_a_defs_2g_tbl;
 extern const struct rtw89_rfk_tbl rtw8851b_tssi_sys_a_defs_5g_tbl;