]> www.infradead.org Git - linux.git/commitdiff
wifi: rtw89: 8922a: use right chanctx whenever possible in RFK flow
authorZong-Zhe Yang <kevin_yang@realtek.com>
Mon, 19 Aug 2024 09:17:22 +0000 (17:17 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 27 Aug 2024 02:55:34 +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 RTL8922A
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-7-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/fw.c
drivers/net/wireless/realtek/rtw89/fw.h
drivers/net/wireless/realtek/rtw89/phy.c
drivers/net/wireless/realtek/rtw89/phy.h
drivers/net/wireless/realtek/rtw89/rtw8922a.c

index 06b263550ef092b353993bd4a93206235ee6b363..023dd34567835a10ec9add30103fee219f99a542 100644 (file)
@@ -5314,10 +5314,8 @@ fail:
 }
 
 int rtw89_fw_h2c_rf_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
-                        enum rtw89_tssi_mode tssi_mode)
+                        const struct rtw89_chan *chan, enum rtw89_tssi_mode tssi_mode)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev,
-                                                      RTW89_CHANCTX_0);
        struct rtw89_hal *hal = &rtwdev->hal;
        struct rtw89_h2c_rf_tssi *h2c;
        u32 len = sizeof(*h2c);
@@ -5361,7 +5359,8 @@ fail:
        return ret;
 }
 
-int rtw89_fw_h2c_rf_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
+int rtw89_fw_h2c_rf_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                       const struct rtw89_chan *chan)
 {
        struct rtw89_h2c_rf_iqk *h2c;
        u32 len = sizeof(*h2c);
@@ -5396,10 +5395,9 @@ fail:
        return ret;
 }
 
-int rtw89_fw_h2c_rf_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
+int rtw89_fw_h2c_rf_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                       const struct rtw89_chan *chan)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev,
-                                                      RTW89_CHANCTX_0);
        struct rtw89_h2c_rf_dpk *h2c;
        u32 len = sizeof(*h2c);
        struct sk_buff *skb;
@@ -5439,10 +5437,9 @@ fail:
        return ret;
 }
 
-int rtw89_fw_h2c_rf_txgapk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
+int rtw89_fw_h2c_rf_txgapk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                          const struct rtw89_chan *chan)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev,
-                                                      RTW89_CHANCTX_0);
        struct rtw89_hal *hal = &rtwdev->hal;
        struct rtw89_h2c_rf_txgapk *h2c;
        u32 len = sizeof(*h2c);
@@ -5483,7 +5480,8 @@ fail:
        return ret;
 }
 
-int rtw89_fw_h2c_rf_dack(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
+int rtw89_fw_h2c_rf_dack(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                        const struct rtw89_chan *chan)
 {
        struct rtw89_h2c_rf_dack *h2c;
        u32 len = sizeof(*h2c);
@@ -5519,10 +5517,9 @@ fail:
        return ret;
 }
 
-int rtw89_fw_h2c_rf_rxdck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
+int rtw89_fw_h2c_rf_rxdck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                         const struct rtw89_chan *chan)
 {
-       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev,
-                                                      RTW89_CHANCTX_0);
        struct rtw89_h2c_rf_rxdck *h2c;
        u32 len = sizeof(*h2c);
        struct sk_buff *skb;
index cb0ecb9b4c11e4caf397ae4dd36e24db5936c50f..6e43cbc9559c88d069cb75caf0c397741e8340eb 100644 (file)
@@ -4478,12 +4478,17 @@ int rtw89_fw_h2c_rf_ntfy_mcc(struct rtw89_dev *rtwdev);
 int rtw89_fw_h2c_rf_pre_ntfy(struct rtw89_dev *rtwdev,
                             enum rtw89_phy_idx phy_idx);
 int rtw89_fw_h2c_rf_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
-                        enum rtw89_tssi_mode tssi_mode);
-int rtw89_fw_h2c_rf_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
-int rtw89_fw_h2c_rf_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
-int rtw89_fw_h2c_rf_txgapk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
-int rtw89_fw_h2c_rf_dack(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
-int rtw89_fw_h2c_rf_rxdck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
+                        const struct rtw89_chan *chan, enum rtw89_tssi_mode tssi_mode);
+int rtw89_fw_h2c_rf_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                       const struct rtw89_chan *chan);
+int rtw89_fw_h2c_rf_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                       const struct rtw89_chan *chan);
+int rtw89_fw_h2c_rf_txgapk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                          const struct rtw89_chan *chan);
+int rtw89_fw_h2c_rf_dack(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                        const struct rtw89_chan *chan);
+int rtw89_fw_h2c_rf_rxdck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx,
+                         const struct rtw89_chan *chan);
 int rtw89_fw_h2c_raw_with_hdr(struct rtw89_dev *rtwdev,
                              u8 h2c_class, u8 h2c_func, u8 *buf, u16 len,
                              bool rack, bool dack);
index 7306fb679e9551edcce3438407e11dd01820027a..59b98aa876dd798f10d5447a619b4efbb8d9e430 100644 (file)
@@ -3084,6 +3084,7 @@ EXPORT_SYMBOL(rtw89_phy_rfk_pre_ntfy_and_wait);
 
 int rtw89_phy_rfk_tssi_and_wait(struct rtw89_dev *rtwdev,
                                enum rtw89_phy_idx phy_idx,
+                               const struct rtw89_chan *chan,
                                enum rtw89_tssi_mode tssi_mode,
                                unsigned int ms)
 {
@@ -3091,7 +3092,7 @@ int rtw89_phy_rfk_tssi_and_wait(struct rtw89_dev *rtwdev,
 
        rtw89_phy_rfk_report_prep(rtwdev);
 
-       ret = rtw89_fw_h2c_rf_tssi(rtwdev, phy_idx, tssi_mode);
+       ret = rtw89_fw_h2c_rf_tssi(rtwdev, phy_idx, chan, tssi_mode);
        if (ret)
                return ret;
 
@@ -3101,13 +3102,14 @@ EXPORT_SYMBOL(rtw89_phy_rfk_tssi_and_wait);
 
 int rtw89_phy_rfk_iqk_and_wait(struct rtw89_dev *rtwdev,
                               enum rtw89_phy_idx phy_idx,
+                              const struct rtw89_chan *chan,
                               unsigned int ms)
 {
        int ret;
 
        rtw89_phy_rfk_report_prep(rtwdev);
 
-       ret = rtw89_fw_h2c_rf_iqk(rtwdev, phy_idx);
+       ret = rtw89_fw_h2c_rf_iqk(rtwdev, phy_idx, chan);
        if (ret)
                return ret;
 
@@ -3117,13 +3119,14 @@ EXPORT_SYMBOL(rtw89_phy_rfk_iqk_and_wait);
 
 int rtw89_phy_rfk_dpk_and_wait(struct rtw89_dev *rtwdev,
                               enum rtw89_phy_idx phy_idx,
+                              const struct rtw89_chan *chan,
                               unsigned int ms)
 {
        int ret;
 
        rtw89_phy_rfk_report_prep(rtwdev);
 
-       ret = rtw89_fw_h2c_rf_dpk(rtwdev, phy_idx);
+       ret = rtw89_fw_h2c_rf_dpk(rtwdev, phy_idx, chan);
        if (ret)
                return ret;
 
@@ -3133,13 +3136,14 @@ EXPORT_SYMBOL(rtw89_phy_rfk_dpk_and_wait);
 
 int rtw89_phy_rfk_txgapk_and_wait(struct rtw89_dev *rtwdev,
                                  enum rtw89_phy_idx phy_idx,
+                                 const struct rtw89_chan *chan,
                                  unsigned int ms)
 {
        int ret;
 
        rtw89_phy_rfk_report_prep(rtwdev);
 
-       ret = rtw89_fw_h2c_rf_txgapk(rtwdev, phy_idx);
+       ret = rtw89_fw_h2c_rf_txgapk(rtwdev, phy_idx, chan);
        if (ret)
                return ret;
 
@@ -3149,13 +3153,14 @@ EXPORT_SYMBOL(rtw89_phy_rfk_txgapk_and_wait);
 
 int rtw89_phy_rfk_dack_and_wait(struct rtw89_dev *rtwdev,
                                enum rtw89_phy_idx phy_idx,
+                               const struct rtw89_chan *chan,
                                unsigned int ms)
 {
        int ret;
 
        rtw89_phy_rfk_report_prep(rtwdev);
 
-       ret = rtw89_fw_h2c_rf_dack(rtwdev, phy_idx);
+       ret = rtw89_fw_h2c_rf_dack(rtwdev, phy_idx, chan);
        if (ret)
                return ret;
 
@@ -3165,13 +3170,14 @@ EXPORT_SYMBOL(rtw89_phy_rfk_dack_and_wait);
 
 int rtw89_phy_rfk_rxdck_and_wait(struct rtw89_dev *rtwdev,
                                 enum rtw89_phy_idx phy_idx,
+                                const struct rtw89_chan *chan,
                                 unsigned int ms)
 {
        int ret;
 
        rtw89_phy_rfk_report_prep(rtwdev);
 
-       ret = rtw89_fw_h2c_rf_rxdck(rtwdev, phy_idx);
+       ret = rtw89_fw_h2c_rf_rxdck(rtwdev, phy_idx, chan);
        if (ret)
                return ret;
 
index 512f17d808fe4a5dfb9237639884e3bd17e19745..6dd8ec46939acd41503b2d3b9444061a77665d67 100644 (file)
@@ -907,22 +907,28 @@ int rtw89_phy_rfk_pre_ntfy_and_wait(struct rtw89_dev *rtwdev,
                                    unsigned int ms);
 int rtw89_phy_rfk_tssi_and_wait(struct rtw89_dev *rtwdev,
                                enum rtw89_phy_idx phy_idx,
+                               const struct rtw89_chan *chan,
                                enum rtw89_tssi_mode tssi_mode,
                                unsigned int ms);
 int rtw89_phy_rfk_iqk_and_wait(struct rtw89_dev *rtwdev,
                               enum rtw89_phy_idx phy_idx,
+                              const struct rtw89_chan *chan,
                               unsigned int ms);
 int rtw89_phy_rfk_dpk_and_wait(struct rtw89_dev *rtwdev,
                               enum rtw89_phy_idx phy_idx,
+                              const struct rtw89_chan *chan,
                               unsigned int ms);
 int rtw89_phy_rfk_txgapk_and_wait(struct rtw89_dev *rtwdev,
                                  enum rtw89_phy_idx phy_idx,
+                                 const struct rtw89_chan *chan,
                                  unsigned int ms);
 int rtw89_phy_rfk_dack_and_wait(struct rtw89_dev *rtwdev,
                                enum rtw89_phy_idx phy_idx,
+                               const struct rtw89_chan *chan,
                                unsigned int ms);
 int rtw89_phy_rfk_rxdck_and_wait(struct rtw89_dev *rtwdev,
                                 enum rtw89_phy_idx phy_idx,
+                                const struct rtw89_chan *chan,
                                 unsigned int ms);
 void rtw89_phy_rfk_tssi_fill_fwcmd_efuse_to_de(struct rtw89_dev *rtwdev,
                                               enum rtw89_phy_idx phy,
index d67bbbffb94eb245c499d4a5a2c4de08bdfd2d82..85bdeeda95de449e2480099d2887365e1676d6e7 100644 (file)
@@ -1993,10 +1993,12 @@ static void rtw8922a_rfk_init(struct rtw89_dev *rtwdev)
 
 static void rtw8922a_rfk_init_late(struct rtw89_dev *rtwdev)
 {
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, RTW89_CHANCTX_0);
+
        rtw89_phy_rfk_pre_ntfy_and_wait(rtwdev, RTW89_PHY_0, 5);
 
-       rtw89_phy_rfk_dack_and_wait(rtwdev, RTW89_PHY_0, 58);
-       rtw89_phy_rfk_rxdck_and_wait(rtwdev, RTW89_PHY_0, 32);
+       rtw89_phy_rfk_dack_and_wait(rtwdev, RTW89_PHY_0, chan, 58);
+       rtw89_phy_rfk_rxdck_and_wait(rtwdev, RTW89_PHY_0, chan, 32);
 }
 
 static void _wait_rx_mode(struct rtw89_dev *rtwdev, u8 kpath)
@@ -2020,8 +2022,10 @@ static void _wait_rx_mode(struct rtw89_dev *rtwdev, u8 kpath)
 
 static void rtw8922a_rfk_channel(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
 {
+       enum rtw89_chanctx_idx chanctx_idx = rtwvif->chanctx_idx;
+       const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, chanctx_idx);
        enum rtw89_phy_idx phy_idx = rtwvif->phy_idx;
-       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);
        u32 tx_en;
 
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_CHLK, BTC_WRFK_START);
@@ -2029,11 +2033,11 @@ static void rtw8922a_rfk_channel(struct rtw89_dev *rtwdev, struct rtw89_vif *rtw
        _wait_rx_mode(rtwdev, RF_AB);
 
        rtw89_phy_rfk_pre_ntfy_and_wait(rtwdev, phy_idx, 5);
-       rtw89_phy_rfk_txgapk_and_wait(rtwdev, phy_idx, 54);
-       rtw89_phy_rfk_iqk_and_wait(rtwdev, phy_idx, 84);
-       rtw89_phy_rfk_tssi_and_wait(rtwdev, phy_idx, RTW89_TSSI_NORMAL, 6);
-       rtw89_phy_rfk_dpk_and_wait(rtwdev, phy_idx, 34);
-       rtw89_phy_rfk_rxdck_and_wait(rtwdev, RTW89_PHY_0, 32);
+       rtw89_phy_rfk_txgapk_and_wait(rtwdev, phy_idx, chan, 54);
+       rtw89_phy_rfk_iqk_and_wait(rtwdev, phy_idx, chan, 84);
+       rtw89_phy_rfk_tssi_and_wait(rtwdev, phy_idx, chan, RTW89_TSSI_NORMAL, 6);
+       rtw89_phy_rfk_dpk_and_wait(rtwdev, phy_idx, chan, 34);
+       rtw89_phy_rfk_rxdck_and_wait(rtwdev, RTW89_PHY_0, chan, 32);
 
        rtw89_chip_resume_sch_tx(rtwdev, phy_idx, tx_en);
        rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_CHLK, BTC_WRFK_STOP);
@@ -2043,7 +2047,7 @@ static void rtw8922a_rfk_band_changed(struct rtw89_dev *rtwdev,
                                      enum rtw89_phy_idx phy_idx,
                                      const struct rtw89_chan *chan)
 {
-       rtw89_phy_rfk_tssi_and_wait(rtwdev, phy_idx, RTW89_TSSI_SCAN, 6);
+       rtw89_phy_rfk_tssi_and_wait(rtwdev, phy_idx, chan, RTW89_TSSI_SCAN, 6);
 }
 
 static void rtw8922a_rfk_scan(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,