]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw88: 8822c: use fixed rate and bandwidth to reply CSI packets
authorChin-Yen Lee <timlee@realtek.com>
Mon, 27 Oct 2025 07:02:59 +0000 (15:02 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 4 Nov 2025 01:58:30 +0000 (09:58 +0800)
AP could trigger beamform and send NDPA packet with 6Mbps rate
on bandwidth 80MHz, but RTL8822C can't reply CSI packet with
the same setting. Therefore, force to use OFDM rate and
bandwidth 20MHz instead.

Signed-off-by: Chin-Yen Lee <timlee@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20251027070259.18931-1-pkshih@realtek.com
drivers/net/wireless/realtek/rtw88/bf.c
drivers/net/wireless/realtek/rtw88/bf.h

index c827c4a2814b5f793fe6bb5e24793cfc0c828816..0d0ccbc7d00ca343de776d3e11b833ee4428ca08 100644 (file)
@@ -124,8 +124,11 @@ void rtw_bf_init_bfer_entry_mu(struct rtw_dev *rtwdev,
 void rtw_bf_cfg_sounding(struct rtw_dev *rtwdev, struct rtw_vif *vif,
                         enum rtw_trx_desc_rate rate)
 {
+       u8 csi_rsc = CSI_RSC_FOLLOW_RX_PACKET_BW;
        u32 psf_ctl = 0;
-       u8 csi_rsc = 0x1;
+
+       if (rtwdev->chip->id == RTW_CHIP_TYPE_8822C)
+               csi_rsc = CSI_RSC_PRIMARY_20M_BW;
 
        psf_ctl = rtw_read32(rtwdev, REG_BBPSF_CTRL) |
                  BIT_WMAC_USE_NDPARATE |
@@ -387,6 +390,9 @@ void rtw_bf_cfg_csi_rate(struct rtw_dev *rtwdev, u8 rssi, u8 cur_rate,
        csi_cfg = rtw_read32(rtwdev, REG_BBPSF_CTRL) & ~BIT_MASK_CSI_RATE;
        cur_rrsr = rtw_read16(rtwdev, REG_RRSR);
 
+       if (rtwdev->chip->id == RTW_CHIP_TYPE_8822C)
+               csi_cfg |= BIT_CSI_FORCE_RATE;
+
        if (rssi >= 40) {
                if (cur_rate != DESC_RATE54M) {
                        cur_rrsr |= BIT(DESC_RATE54M);
index 7b40c2c0385608ab5e65a868e927d27eadaea8ac..a5d3010e6be6ef776b1c604207f68d6331721feb 100644 (file)
@@ -33,6 +33,7 @@
 #define BIT_SHIFT_R_MU_RL              12
 #define BIT_SHIFT_WMAC_TXMU_ACKPOLICY  4
 #define BIT_SHIFT_CSI_RATE             24
+#define BIT_CSI_FORCE_RATE             BIT(15)
 
 #define BIT_MASK_R_MU_RL (R_MU_RL << BIT_SHIFT_R_MU_RL)
 #define BIT_MASK_R_MU_TABLE_VALID      0x3f
 #define RTW_SND_CTRL_REMOVE    0x98
 #define RTW_SND_CTRL_SOUNDING  0x9B
 
+enum csi_rsc {
+       CSI_RSC_PRIMARY_20M_BW = 0,
+       CSI_RSC_FOLLOW_RX_PACKET_BW = 1,
+       CSI_RSC_DUPLICATE_MODE = 2,
+};
+
 enum csi_seg_len {
        HAL_CSI_SEG_4K = 0,
        HAL_CSI_SEG_8K = 1,