Search Linux Wireless

[PATCH] wifi: rtw88: Fix the RX aggregation in USB 3 mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



RTL8822CU, RTL8822BU, and RTL8821CU don't need BIT_EN_PRE_CALC.
In fact, RTL8822BU in USB 3 mode doesn't pass all the frames to the
driver, resulting in much lower download speed than normal:

$ iperf3 -c 192.168.0.1 -R
Connecting to host 192.168.0.1, port 5201
Reverse mode, remote host 192.168.0.1 is sending
[  5] local 192.168.0.50 port 43062 connected to 192.168.0.1 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  26.9 MBytes   225 Mbits/sec                  
[  5]   1.00-2.00   sec  7.50 MBytes  62.9 Mbits/sec                  
[  5]   2.00-3.00   sec  8.50 MBytes  71.3 Mbits/sec                  
[  5]   3.00-4.00   sec  8.38 MBytes  70.3 Mbits/sec                  
[  5]   4.00-5.00   sec  7.75 MBytes  65.0 Mbits/sec                  
[  5]   5.00-6.00   sec  8.00 MBytes  67.1 Mbits/sec                  
[  5]   6.00-7.00   sec  8.00 MBytes  67.1 Mbits/sec                  
[  5]   7.00-8.00   sec  7.75 MBytes  65.0 Mbits/sec                  
[  5]   8.00-9.00   sec  7.88 MBytes  66.1 Mbits/sec                  
[  5]   9.00-10.00  sec  7.88 MBytes  66.1 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.02  sec   102 MBytes  85.1 Mbits/sec  224             sender
[  5]   0.00-10.00  sec  98.6 MBytes  82.7 Mbits/sec                  receiver

Don't set BIT_EN_PRE_CALC. Then the speed is much better:

% iperf3 -c 192.168.0.1 -R    
Connecting to host 192.168.0.1, port 5201
Reverse mode, remote host 192.168.0.1 is sending
[  5] local 192.168.0.50 port 39000 connected to 192.168.0.1 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  52.8 MBytes   442 Mbits/sec                  
[  5]   1.00-2.00   sec  71.9 MBytes   603 Mbits/sec                  
[  5]   2.00-3.00   sec  74.8 MBytes   627 Mbits/sec                  
[  5]   3.00-4.00   sec  75.9 MBytes   636 Mbits/sec                  
[  5]   4.00-5.00   sec  76.0 MBytes   638 Mbits/sec                  
[  5]   5.00-6.00   sec  74.1 MBytes   622 Mbits/sec                  
[  5]   6.00-7.00   sec  74.0 MBytes   621 Mbits/sec                  
[  5]   7.00-8.00   sec  76.0 MBytes   638 Mbits/sec                  
[  5]   8.00-9.00   sec  74.4 MBytes   624 Mbits/sec                  
[  5]   9.00-10.00  sec  63.9 MBytes   536 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   717 MBytes   601 Mbits/sec   24             sender
[  5]   0.00-10.00  sec   714 MBytes   599 Mbits/sec                  receiver

Fixes: 002a5db9a52a ("wifi: rtw88: Enable USB RX aggregation for 8822c/8822b/8821c")
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx>
---
The code in the official drivers is a little broken. It sets
BIT_EN_PRE_CALC and then immediately unsets it. I didn't notice that
before.

Maybe this should go to kernel 6.12, if it's not too late. Commit 002a5db9a52a
("wifi: rtw88: Enable USB RX aggregation for 8822c/8822b/8821c") first appears
in 6.12.
---
 drivers/net/wireless/realtek/rtw88/usb.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
index 10b840d59ebd..74ee5bdbb036 100644
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -772,7 +772,6 @@ static void rtw_usb_dynamic_rx_agg_v1(struct rtw_dev *rtwdev, bool enable)
 	u8 size, timeout;
 	u16 val16;
 
-	rtw_write32_set(rtwdev, REG_RXDMA_AGG_PG_TH, BIT_EN_PRE_CALC);
 	rtw_write8_set(rtwdev, REG_TXDMA_PQ_MAP, BIT_RXDMA_AGG_EN);
 	rtw_write8_clr(rtwdev, REG_RXDMA_AGG_PG_TH + 3, BIT(7));
 
-- 
2.46.0




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux