]> www.infradead.org Git - linux.git/commitdiff
wifi: rtw89: 8852c: use right chanctx whenever possible in RFK flow
authorZong-Zhe Yang <kevin_yang@realtek.com>
Mon, 19 Aug 2024 09:17:21 +0000 (17:17 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 27 Aug 2024 02:55:22 +0000 (10:55 +0800)
No longer access chan with hard-code RTW89_CHANCTX_X whenever possible.
Instead, obtain the right chanctx from somewhere and use it in RTL8852C
RFK (RF calibration) related code.

Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20240819091724.33730-6-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/rtw8852c.c
drivers/net/wireless/realtek/rtw89/rtw8852c_rfk.c
drivers/net/wireless/realtek/rtw89/rtw8852c_rfk.h

index 1fde8a07f73c5b4dc60d27ae54c4e2aa7e4f19bf..d4adab43f4f2ff6c37ec160ba0dc253aa7046bcb 100644 (file)
@@ -1817,7 +1817,7 @@ static void rtw8852c_set_channel_help(struct rtw89_dev *rtwdev, bool enter,
                                       RTW89_SCH_TX_SEL_ALL);
                rtw89_mac_cfg_ppdu_status(rtwdev, mac_idx, false);
                rtw8852c_dfs_en(rtwdev, false);
-               rtw8852c_tssi_cont_en_phyidx(rtwdev, false, phy_idx);
+               rtw8852c_tssi_cont_en_phyidx(rtwdev, false, phy_idx, chan);
                rtw8852c_adc_en(rtwdev, false);
                fsleep(40);
                rtw8852c_bb_reset_en(rtwdev, chan->band_type, phy_idx, false);
@@ -1825,7 +1825,7 @@ static void rtw8852c_set_channel_help(struct rtw89_dev *rtwdev, bool enter,
                rtw89_mac_cfg_ppdu_status(rtwdev, mac_idx, true);
                rtw8852c_adc_en(rtwdev, true);
                rtw8852c_dfs_en(rtwdev, true);
-               rtw8852c_tssi_cont_en_phyidx(rtwdev, true, phy_idx);
+               rtw8852c_tssi_cont_en_phyidx(rtwdev, true, phy_idx, chan);
                rtw8852c_bb_reset_en(rtwdev, chan->band_type, phy_idx, true);
                rtw89_chip_resume_sch_tx(rtwdev, mac_idx, p->tx_en);
        }
@@ -1842,19 +1842,20 @@ static void rtw8852c_rfk_init(struct rtw89_dev *rtwdev)
        rtw8852c_dpk_init(rtwdev);
 
        rtw8852c_rck(rtwdev);
-       rtw8852c_dack(rtwdev);
+       rtw8852c_dack(rtwdev, RTW89_CHANCTX_0);
        rtw8852c_rx_dck(rtwdev, RTW89_PHY_0, false);
 }
 
 static void rtw8852c_rfk_channel(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
 {
+       enum rtw89_chanctx_idx chanctx_idx = rtwvif->chanctx_idx;
        enum rtw89_phy_idx phy_idx = rtwvif->phy_idx;
 
        rtw8852c_mcc_get_ch_info(rtwdev, phy_idx);
        rtw8852c_rx_dck(rtwdev, phy_idx, false);
-       rtw8852c_iqk(rtwdev, phy_idx);
-       rtw8852c_tssi(rtwdev, phy_idx);
-       rtw8852c_dpk(rtwdev, phy_idx);
+       rtw8852c_iqk(rtwdev, phy_idx, chanctx_idx);
+       rtw8852c_tssi(rtwdev, phy_idx, chanctx_idx);
+       rtw8852c_dpk(rtwdev, phy_idx, chanctx_idx);
        rtw89_fw_h2c_rf_ntfy_mcc(rtwdev);
 }
 
@@ -1862,7 +1863,7 @@ static void rtw8852c_rfk_band_changed(struct rtw89_dev *rtwdev,
                                      enum rtw89_phy_idx phy_idx,
                                      const struct rtw89_chan *chan)
 {
-       rtw8852c_tssi_scan(rtwdev, phy_idx);
+       rtw8852c_tssi_scan(rtwdev, phy_idx, chan);
 }
 
 static void rtw8852c_rfk_scan(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
index 8fee820be258800726f130364fee836f3584b1cb..211c051c296762bf868aa4ccf9be437a7138fb2e 100644 (file)
@@ -585,11 +585,12 @@ static void _drck(struct rtw89_dev *rtwdev)
                    rtw89_phy_read32_mask(rtwdev, R_DRCK, MASKDWORD));
 }
 
-static void _dac_cal(struct rtw89_dev *rtwdev, bool force)
+static void _dac_cal(struct rtw89_dev *rtwdev, bool force,
+                    enum rtw89_chanctx_idx chanctx_idx)
 {
        struct rtw89_dack_info *dack = &rtwdev->dack;
        u32 rf0_0, rf1_0;
-       u8 phy_map = rtw89_btc_phymap(rtwdev, RTW89_PHY_0, RF_AB, RTW89_CHANCTX_0);
+       u8 phy_map = rtw89_btc_phymap(rtwdev, RTW89_PHY_0, RF_AB, chanctx_idx);
 
        dack->dack_done = false;
        rtw89_debug(rtwdev, RTW89_DBG_RFK, "[DACK]DACK b\n");
@@ -1322,9 +1323,10 @@ static void _iqk_by_path(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx, u
 }
 
 static void _iqk_get_ch_info(struct rtw89_dev *rtwdev,
-                            enum rtw89_phy_idx phy, u8 path)
+                            enum rtw89_phy_idx phy, u8 path,
+                            enum rtw89_chanctx_idx chanctx_idx)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, chanctx_idx);
        struct rtw89_iqk_info *iqk_info = &rtwdev->iqk;
 
        rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]===>%s\n", __func__);
@@ -1517,12 +1519,13 @@ static void _iqk_init(struct rtw89_dev *rtwdev)
 }
 
 static void _doiqk(struct rtw89_dev *rtwdev, bool force,
-                  enum rtw89_phy_idx phy_idx, u8 path)
+                  enum rtw89_phy_idx phy_idx, u8 path,
+                  enum rtw89_chanctx_idx chanctx_idx)
 {
        struct rtw89_iqk_info *iqk_info = &rtwdev->iqk;
        u32 backup_bb_val[BACKUP_BB_REGS_NR];
        u32 backup_rf_val[RTW8852C_IQK_SS][BACKUP_RF_REGS_NR];
-       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, RF_AB, RTW89_CHANCTX_0);
+       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, RF_AB, chanctx_idx);
 
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_IQK, BTC_WRFK_ONESHOT_START);
 
@@ -1532,7 +1535,7 @@ static void _doiqk(struct rtw89_dev *rtwdev, bool force,
        iqk_info->version = RTW8852C_IQK_VER;
 
        rtw89_debug(rtwdev, RTW89_DBG_RFK, "[IQK]Test Ver 0x%x\n", iqk_info->version);
-       _iqk_get_ch_info(rtwdev, phy_idx, path);
+       _iqk_get_ch_info(rtwdev, phy_idx, path, chanctx_idx);
        _rfk_backup_bb_reg(rtwdev, backup_bb_val);
        _rfk_backup_rf_reg(rtwdev, backup_rf_val[path], path);
        _iqk_macbb_setting(rtwdev, phy_idx, path);
@@ -1545,18 +1548,19 @@ static void _doiqk(struct rtw89_dev *rtwdev, bool force,
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_IQK, BTC_WRFK_ONESHOT_STOP);
 }
 
-static void _iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx, bool force)
+static void _iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx, bool force,
+                enum rtw89_chanctx_idx chanctx_idx)
 {
        switch (_kpath(rtwdev, phy_idx)) {
        case RF_A:
-               _doiqk(rtwdev, force, phy_idx, RF_PATH_A);
+               _doiqk(rtwdev, force, phy_idx, RF_PATH_A, chanctx_idx);
                break;
        case RF_B:
-               _doiqk(rtwdev, force, phy_idx, RF_PATH_B);
+               _doiqk(rtwdev, force, phy_idx, RF_PATH_B, chanctx_idx);
                break;
        case RF_AB:
-               _doiqk(rtwdev, force, phy_idx, RF_PATH_A);
-               _doiqk(rtwdev, force, phy_idx, RF_PATH_B);
+               _doiqk(rtwdev, force, phy_idx, RF_PATH_A, chanctx_idx);
+               _doiqk(rtwdev, force, phy_idx, RF_PATH_B, chanctx_idx);
                break;
        default:
                break;
@@ -1902,9 +1906,9 @@ static u8 _dpk_one_shot(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
 
 static void _dpk_information(struct rtw89_dev *rtwdev,
                             enum rtw89_phy_idx phy,
-                            enum rtw89_rf_path path)
+                            enum rtw89_rf_path path, enum rtw89_chanctx_idx chanctx_idx)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, chanctx_idx);
        struct rtw89_dpk_info *dpk = &rtwdev->dpk;
 
        u8 kidx = dpk->cur_idx[path];
@@ -2496,9 +2500,9 @@ static void _dpk_idl_mpa(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
 }
 
 static bool _dpk_reload_check(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                             enum rtw89_rf_path path)
+                             enum rtw89_rf_path path, enum rtw89_chanctx_idx chanctx_idx)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, chanctx_idx);
        struct rtw89_dpk_info *dpk = &rtwdev->dpk;
        bool is_reload = false;
        u8 idx, cur_band, cur_ch;
@@ -2690,7 +2694,8 @@ static void _dpk_drf_direct_cntrl(struct rtw89_dev *rtwdev, u8 path, bool is_byb
 }
 
 static void _dpk_cal_select(struct rtw89_dev *rtwdev, bool force,
-                           enum rtw89_phy_idx phy, u8 kpath)
+                           enum rtw89_phy_idx phy, u8 kpath,
+                           enum rtw89_chanctx_idx chanctx_idx)
 {
        struct rtw89_dpk_info *dpk = &rtwdev->dpk;
        static const u32 kip_reg[] = {0x813c, 0x8124, 0x8120, 0xc0c4, 0xc0e8, 0xc0d4, 0xc0d8};
@@ -2706,7 +2711,8 @@ static void _dpk_cal_select(struct rtw89_dev *rtwdev, bool force,
                        if (!(kpath & BIT(path)))
                                continue;
 
-                       reloaded[path] = _dpk_reload_check(rtwdev, phy, path);
+                       reloaded[path] = _dpk_reload_check(rtwdev, phy, path,
+                                                          chanctx_idx);
                        if (!reloaded[path] && dpk->bp[path][0].ch != 0)
                                dpk->cur_idx[path] = !dpk->cur_idx[path];
                        else
@@ -2723,7 +2729,7 @@ static void _dpk_cal_select(struct rtw89_dev *rtwdev, bool force,
                            path, dpk->cur_idx[path]);
                _dpk_bkup_kip(rtwdev, kip_reg, kip_bkup, path);
                _rfk_backup_rf_reg(rtwdev, backup_rf_val[path], path);
-               _dpk_information(rtwdev, phy, path);
+               _dpk_information(rtwdev, phy, path, chanctx_idx);
                _dpk_init(rtwdev, path);
                if (rtwdev->is_tssi_mode[path])
                        _dpk_tssi_pause(rtwdev, path, true);
@@ -2756,10 +2762,11 @@ static void _dpk_cal_select(struct rtw89_dev *rtwdev, bool force,
        _dpk_kip_pwr_clk_onoff(rtwdev, false);
 }
 
-static bool _dpk_bypass_check(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy)
+static bool _dpk_bypass_check(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
+                             enum rtw89_chanctx_idx chanctx_idx)
 {
        struct rtw89_fem_info *fem = &rtwdev->fem;
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, chanctx_idx);
        u8 band = chan->band_type;
 
        if (rtwdev->hal.cv == CHIP_CAV && band != RTW89_BAND_2G) {
@@ -2791,17 +2798,18 @@ static void _dpk_force_bypass(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy)
        }
 }
 
-static void _dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool force)
+static void _dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool force,
+                enum rtw89_chanctx_idx chanctx_idx)
 {
        rtw89_debug(rtwdev, RTW89_DBG_RFK,
                    "[DPK] ****** DPK Start (Ver: 0x%x, Cv: %d, RF_para: %d) ******\n",
                    RTW8852C_DPK_VER, rtwdev->hal.cv,
                    RTW8852C_RF_REL_VERSION);
 
-       if (_dpk_bypass_check(rtwdev, phy))
+       if (_dpk_bypass_check(rtwdev, phy, chanctx_idx))
                _dpk_force_bypass(rtwdev, phy);
        else
-               _dpk_cal_select(rtwdev, force, phy, _kpath(rtwdev, phy));
+               _dpk_cal_select(rtwdev, force, phy, _kpath(rtwdev, phy), chanctx_idx);
 
        if (rtw89_read_rf(rtwdev, RF_PATH_A, RR_DCKC, RR_DCKC_CHK) == 0x1)
                rtw8852c_rx_dck(rtwdev, phy, false);
@@ -2892,9 +2900,8 @@ static void _dpk_track(struct rtw89_dev *rtwdev)
 }
 
 static void _tssi_set_sys(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                         enum rtw89_rf_path path)
+                         enum rtw89_rf_path path, const struct rtw89_chan *chan)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        enum rtw89_bandwidth bw = chan->band_width;
        enum rtw89_band band = chan->band_type;
        u32 clk = 0x0;
@@ -2946,9 +2953,8 @@ static void _tssi_ini_txpwr_ctrl_bb_he_tb(struct rtw89_dev *rtwdev,
 }
 
 static void _tssi_set_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                         enum rtw89_rf_path path)
+                         enum rtw89_rf_path path, const struct rtw89_chan *chan)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        enum rtw89_band band = chan->band_type;
 
        if (path == RF_PATH_A) {
@@ -2973,7 +2979,7 @@ static void _tssi_set_bbgain_split(struct rtw89_dev *rtwdev, enum rtw89_phy_idx
 }
 
 static void _tssi_set_tmeter_tbl(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                                enum rtw89_rf_path path)
+                                enum rtw89_rf_path path, const struct rtw89_chan *chan)
 {
 #define RTW8852C_TSSI_GET_VAL(ptr, idx)                        \
 ({                                                     \
@@ -2986,7 +2992,6 @@ static void _tssi_set_tmeter_tbl(struct rtw89_dev *rtwdev, enum rtw89_phy_idx ph
        }                                               \
        __val;                                          \
 })
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        struct rtw89_fw_txpwr_track_cfg *trk = rtwdev->fw.elm_info.txpwr_trk;
        struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;
        u8 ch = chan->channel;
@@ -3192,9 +3197,8 @@ static void _tssi_set_tmeter_tbl(struct rtw89_dev *rtwdev, enum rtw89_phy_idx ph
 }
 
 static void _tssi_slope_cal_org(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                               enum rtw89_rf_path path)
+                               enum rtw89_rf_path path, const struct rtw89_chan *chan)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        enum rtw89_band band = chan->band_type;
 
        if (path == RF_PATH_A) {
@@ -3209,9 +3213,9 @@ static void _tssi_slope_cal_org(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy
 }
 
 static void _tssi_set_aligk_default(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                                   enum rtw89_rf_path path)
+                                   enum rtw89_rf_path path,
+                                   const struct rtw89_chan *chan)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        enum rtw89_band band = chan->band_type;
        const struct rtw89_rfk_tbl *tbl;
 
@@ -3620,10 +3624,9 @@ static u32 _tssi_get_6g_trim_group(struct rtw89_dev *rtwdev, u8 ch)
 }
 
 static s8 _tssi_get_ofdm_de(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
-                           enum rtw89_rf_path path)
+                           enum rtw89_rf_path path, const struct rtw89_chan *chan)
 {
        struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        enum rtw89_band band = chan->band_type;
        u8 ch = chan->channel;
        u32 gidx, gidx_1st, gidx_2nd;
@@ -3684,10 +3687,9 @@ static s8 _tssi_get_ofdm_de(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
 
 static s8 _tssi_get_ofdm_trim_de(struct rtw89_dev *rtwdev,
                                 enum rtw89_phy_idx phy,
-                                enum rtw89_rf_path path)
+                                enum rtw89_rf_path path, const struct rtw89_chan *chan)
 {
        struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        enum rtw89_band band = chan->band_type;
        u8 ch = chan->channel;
        u32 tgidx, tgidx_1st, tgidx_2nd;
@@ -3749,10 +3751,9 @@ static s8 _tssi_get_ofdm_trim_de(struct rtw89_dev *rtwdev,
 }
 
 static void _tssi_set_efuse_to_de(struct rtw89_dev *rtwdev,
-                                 enum rtw89_phy_idx phy)
+                                 enum rtw89_phy_idx phy, const struct rtw89_chan *chan)
 {
        struct rtw89_tssi_info *tssi_info = &rtwdev->tssi;
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
        u8 ch = chan->channel;
        u8 gidx;
        s8 ofdm_de;
@@ -3775,7 +3776,7 @@ static void _tssi_set_efuse_to_de(struct rtw89_dev *rtwdev,
 
        for (i = path; i < path_max; i++) {
                gidx = _tssi_get_cck_group(rtwdev, ch);
-               trim_de = _tssi_get_ofdm_trim_de(rtwdev, phy, i);
+               trim_de = _tssi_get_ofdm_trim_de(rtwdev, phy, i, chan);
                val = tssi_info->tssi_cck[i][gidx] + trim_de;
 
                rtw89_debug(rtwdev, RTW89_DBG_TSSI,
@@ -3791,8 +3792,8 @@ static void _tssi_set_efuse_to_de(struct rtw89_dev *rtwdev,
                            rtw89_phy_read32_mask(rtwdev, _tssi_de_cck_long[i],
                                                  _TSSI_DE_MASK));
 
-               ofdm_de = _tssi_get_ofdm_de(rtwdev, phy, i);
-               trim_de = _tssi_get_ofdm_trim_de(rtwdev, phy, i);
+               ofdm_de = _tssi_get_ofdm_de(rtwdev, phy, i, chan);
+               trim_de = _tssi_get_ofdm_trim_de(rtwdev, phy, i, chan);
                val = ofdm_de + trim_de;
 
                rtw89_debug(rtwdev, RTW89_DBG_TSSI,
@@ -3815,7 +3816,7 @@ static void _tssi_set_efuse_to_de(struct rtw89_dev *rtwdev,
 }
 
 static void rtw8852c_tssi_cont_en(struct rtw89_dev *rtwdev, bool en,
-                                 enum rtw89_rf_path path)
+                                 enum rtw89_rf_path path, const struct rtw89_chan *chan)
 {
        static const u32 tssi_trk[2] = {0x5818, 0x7818};
        static const u32 tssi_en[2] = {0x5820, 0x7820};
@@ -3824,25 +3825,26 @@ static void rtw8852c_tssi_cont_en(struct rtw89_dev *rtwdev, bool en,
                rtw89_phy_write32_mask(rtwdev, tssi_trk[path], BIT(30), 0x0);
                rtw89_phy_write32_mask(rtwdev, tssi_en[path], BIT(31), 0x0);
                if (rtwdev->dbcc_en && path == RF_PATH_B)
-                       _tssi_set_efuse_to_de(rtwdev, RTW89_PHY_1);
+                       _tssi_set_efuse_to_de(rtwdev, RTW89_PHY_1, chan);
                else
-                       _tssi_set_efuse_to_de(rtwdev, RTW89_PHY_0);
+                       _tssi_set_efuse_to_de(rtwdev, RTW89_PHY_0, chan);
        } else {
                rtw89_phy_write32_mask(rtwdev, tssi_trk[path], BIT(30), 0x1);
                rtw89_phy_write32_mask(rtwdev, tssi_en[path], BIT(31), 0x1);
        }
 }
 
-void rtw8852c_tssi_cont_en_phyidx(struct rtw89_dev *rtwdev, bool en, u8 phy_idx)
+void rtw8852c_tssi_cont_en_phyidx(struct rtw89_dev *rtwdev, bool en, u8 phy_idx,
+                                 const struct rtw89_chan *chan)
 {
        if (!rtwdev->dbcc_en) {
-               rtw8852c_tssi_cont_en(rtwdev, en, RF_PATH_A);
-               rtw8852c_tssi_cont_en(rtwdev, en, RF_PATH_B);
+               rtw8852c_tssi_cont_en(rtwdev, en, RF_PATH_A, chan);
+               rtw8852c_tssi_cont_en(rtwdev, en, RF_PATH_B, chan);
        } else {
                if (phy_idx == RTW89_PHY_0)
-                       rtw8852c_tssi_cont_en(rtwdev, en, RF_PATH_A);
+                       rtw8852c_tssi_cont_en(rtwdev, en, RF_PATH_A, chan);
                else
-                       rtw8852c_tssi_cont_en(rtwdev, en, RF_PATH_B);
+                       rtw8852c_tssi_cont_en(rtwdev, en, RF_PATH_B, chan);
        }
 }
 
@@ -4146,26 +4148,27 @@ void rtw8852c_rck(struct rtw89_dev *rtwdev)
                _rck(rtwdev, path);
 }
 
-void rtw8852c_dack(struct rtw89_dev *rtwdev)
+void rtw8852c_dack(struct rtw89_dev *rtwdev, enum rtw89_chanctx_idx chanctx_idx)
 {
-       u8 phy_map = rtw89_btc_phymap(rtwdev, RTW89_PHY_0, 0, RTW89_CHANCTX_0);
+       u8 phy_map = rtw89_btc_phymap(rtwdev, RTW89_PHY_0, 0, chanctx_idx);
 
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_DACK, BTC_WRFK_START);
-       _dac_cal(rtwdev, false);
+       _dac_cal(rtwdev, false, chanctx_idx);
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_DACK, BTC_WRFK_STOP);
 }
 
-void rtw8852c_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
+void rtw8852c_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                 enum rtw89_chanctx_idx chanctx_idx)
 {
        u32 tx_en;
-       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, 0, RTW89_CHANCTX_0);
+       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, 0, chanctx_idx);
 
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_IQK, BTC_WRFK_START);
        rtw89_chip_stop_sch_tx(rtwdev, phy_idx, &tx_en, RTW89_SCH_TX_SEL_ALL);
        _wait_rx_mode(rtwdev, _kpath(rtwdev, phy_idx));
 
        _iqk_init(rtwdev);
-       _iqk(rtwdev, phy_idx, false);
+       _iqk(rtwdev, phy_idx, false, chanctx_idx);
 
        rtw89_chip_resume_sch_tx(rtwdev, phy_idx, tx_en);
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_IQK, BTC_WRFK_STOP);
@@ -4236,10 +4239,11 @@ void rtw8852c_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool is_a
 
 void rtw8852c_rx_dck_track(struct rtw89_dev *rtwdev)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
+       enum rtw89_chanctx_idx chanctx_idx = RTW89_CHANCTX_0;
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, chanctx_idx);
        struct rtw89_rx_dck_info *rx_dck = &rtwdev->rx_dck;
        enum rtw89_phy_idx phy_idx = RTW89_PHY_0;
-       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, 0, RTW89_CHANCTX_0);
+       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, 0, chanctx_idx);
        u8 dck_channel;
        u8 cur_thermal;
        u32 tx_en;
@@ -4293,16 +4297,17 @@ void rtw8852c_dpk_init(struct rtw89_dev *rtwdev)
        dpk->is_dpk_reload_en = false;
 }
 
-void rtw8852c_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
+void rtw8852c_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                 enum rtw89_chanctx_idx chanctx_idx)
 {
        u32 tx_en;
-       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, 0, RTW89_CHANCTX_0);
+       u8 phy_map = rtw89_btc_phymap(rtwdev, phy_idx, 0, chanctx_idx);
 
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_DPK, BTC_WRFK_START);
        rtw89_chip_stop_sch_tx(rtwdev, phy_idx, &tx_en, RTW89_SCH_TX_SEL_ALL);
        _wait_rx_mode(rtwdev, _kpath(rtwdev, phy_idx));
 
-       _dpk(rtwdev, phy_idx, false);
+       _dpk(rtwdev, phy_idx, false, chanctx_idx);
 
        rtw89_chip_resume_sch_tx(rtwdev, phy_idx, tx_en);
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_DPK, BTC_WRFK_STOP);
@@ -4313,8 +4318,10 @@ void rtw8852c_dpk_track(struct rtw89_dev *rtwdev)
        _dpk_track(rtwdev);
 }
 
-void rtw8852c_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy)
+void rtw8852c_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
+                  enum rtw89_chanctx_idx chanctx_idx)
 {
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, chanctx_idx);
        u32 i, path = RF_PATH_A, path_max = RF_PATH_NUM_8852C;
 
        rtw89_debug(rtwdev, RTW89_DBG_TSSI, "[TSSI] %s: phy=%d\n", __func__, phy);
@@ -4332,23 +4339,24 @@ void rtw8852c_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy)
        _tssi_disable(rtwdev, phy);
 
        for (i = path; i < path_max; i++) {
-               _tssi_set_sys(rtwdev, phy, i);
+               _tssi_set_sys(rtwdev, phy, i, chan);
                _tssi_ini_txpwr_ctrl_bb(rtwdev, phy, i);
                _tssi_ini_txpwr_ctrl_bb_he_tb(rtwdev, phy, i);
-               _tssi_set_dck(rtwdev, phy, i);
+               _tssi_set_dck(rtwdev, phy, i, chan);
                _tssi_set_bbgain_split(rtwdev, phy, i);
-               _tssi_set_tmeter_tbl(rtwdev, phy, i);
-               _tssi_slope_cal_org(rtwdev, phy, i);
-               _tssi_set_aligk_default(rtwdev, phy, i);
+               _tssi_set_tmeter_tbl(rtwdev, phy, i, chan);
+               _tssi_slope_cal_org(rtwdev, phy, i, chan);
+               _tssi_set_aligk_default(rtwdev, phy, i, chan);
                _tssi_set_slope(rtwdev, phy, i);
                _tssi_run_slope(rtwdev, phy, i);
        }
 
        _tssi_enable(rtwdev, phy);
-       _tssi_set_efuse_to_de(rtwdev, phy);
+       _tssi_set_efuse_to_de(rtwdev, phy, chan);
 }
 
-void rtw8852c_tssi_scan(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy)
+void rtw8852c_tssi_scan(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
+                       const struct rtw89_chan *chan)
 {
        u32 i, path = RF_PATH_A, path_max = RF_PATH_NUM_8852C;
 
@@ -4373,15 +4381,15 @@ void rtw8852c_tssi_scan(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy)
        _tssi_disable(rtwdev, phy);
 
        for (i = path; i < path_max; i++) {
-               _tssi_set_sys(rtwdev, phy, i);
-               _tssi_set_dck(rtwdev, phy, i);
-               _tssi_set_tmeter_tbl(rtwdev, phy, i);
-               _tssi_slope_cal_org(rtwdev, phy, i);
-               _tssi_set_aligk_default(rtwdev, phy, i);
+               _tssi_set_sys(rtwdev, phy, i, chan);
+               _tssi_set_dck(rtwdev, phy, i, chan);
+               _tssi_set_tmeter_tbl(rtwdev, phy, i, chan);
+               _tssi_slope_cal_org(rtwdev, phy, i, chan);
+               _tssi_set_aligk_default(rtwdev, phy, i, chan);
        }
 
        _tssi_enable(rtwdev, phy);
-       _tssi_set_efuse_to_de(rtwdev, phy);
+       _tssi_set_efuse_to_de(rtwdev, phy, chan);
 }
 
 static void rtw8852c_tssi_default_txagc(struct rtw89_dev *rtwdev,
@@ -4456,7 +4464,7 @@ void rtw8852c_rfk_chanctx_cb(struct rtw89_dev *rtwdev,
                dpk->is_dpk_enable = true;
                for (path = 0; path < RTW8852C_DPK_RF_PATH; path++)
                        _dpk_onoff(rtwdev, path, false);
-               rtw8852c_dpk(rtwdev, RTW89_PHY_0);
+               rtw8852c_dpk(rtwdev, RTW89_PHY_0, RTW89_CHANCTX_0);
                break;
        default:
                break;
index 6605137e61aa43f88a44fa4ab18315ac0ed9cbf5..306dd0a0be735e635425a5a1ca00c7c53fb02860 100644 (file)
@@ -9,16 +9,21 @@
 
 void rtw8852c_mcc_get_ch_info(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy);
 void rtw8852c_rck(struct rtw89_dev *rtwdev);
-void rtw8852c_dack(struct rtw89_dev *rtwdev);
-void rtw8852c_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
+void rtw8852c_dack(struct rtw89_dev *rtwdev, enum rtw89_chanctx_idx chanctx_idx);
+void rtw8852c_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                 enum rtw89_chanctx_idx chanctx_idx);
 void rtw8852c_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx, bool is_afe);
 void rtw8852c_rx_dck_track(struct rtw89_dev *rtwdev);
 void rtw8852c_dpk_init(struct rtw89_dev *rtwdev);
-void rtw8852c_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy);
+void rtw8852c_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                 enum rtw89_chanctx_idx chanctx_idx);
 void rtw8852c_dpk_track(struct rtw89_dev *rtwdev);
-void rtw8852c_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy);
-void rtw8852c_tssi_scan(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy);
-void rtw8852c_tssi_cont_en_phyidx(struct rtw89_dev *rtwdev, bool en, u8 phy_idx);
+void rtw8852c_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
+                  enum rtw89_chanctx_idx chanctx_idx);
+void rtw8852c_tssi_scan(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy,
+                       const struct rtw89_chan *chan);
+void rtw8852c_tssi_cont_en_phyidx(struct rtw89_dev *rtwdev, bool en, u8 phy_idx,
+                                 const struct rtw89_chan *chan);
 void rtw8852c_wifi_scan_notify(struct rtw89_dev *rtwdev, bool scan_start,
                               enum rtw89_phy_idx phy_idx);
 void rtw8852c_set_channel_rf(struct rtw89_dev *rtwdev,