diff mbox series

wifi: rtw88: Fix the RX aggregation in USB 3 mode

Message ID afb94a82-3d18-459e-97fc-1a217608cdf0@gmail.com
State New
Headers show
Series wifi: rtw88: Fix the RX aggregation in USB 3 mode | expand

Commit Message

Bitterblue Smith Oct. 8, 2024, 6:44 p.m. UTC
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@gmail.com>
---
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(-)

Comments

Kalle Valo Oct. 11, 2024, 11:56 a.m. UTC | #1
Ping-Ke Shih <pkshih@realtek.com> writes:

> Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote:
>> 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:
>
> Have you also tested in USB 2 mode? Just want to know this patch works on
> both modes. 
>
>> [  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:
>> 
>> [  5]   0.00-10.00  sec   714 MBytes   599 Mbits/sec                  receiver
>
> Good job. That improves ten times of RX throughput!
>
>> 
>> Fixes: 002a5db9a52a ("wifi: rtw88: Enable USB RX aggregation for 8822c/8822b/8821c")
>> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
>
> Acked-by: Ping-Ke Shih <pkshih@realtek.com>
>
>> ---
>> 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.
>
> Kalle, could you help to take this patch via wireless tree? If yes, I will
> assign this to you in patchwork. 

Yes, let's take this to wireless. And you don't need to ask me, just
mention that this should go to wireless tree and assign the patch to me :)
Kalle Valo Oct. 11, 2024, 1:44 p.m. UTC | #2
Ping-Ke Shih <pkshih@realtek.com> writes:

> Kalle Valo <kvalo@kernel.org> wrote:
>> Yes, let's take this to wireless. And you don't need to ask me, just
>> mention that this should go to wireless tree and assign the patch to me :)
>
> Understand and assigned. :)

Thanks, I'll try to catch up with patches over the weekend.
Kalle Valo Oct. 17, 2024, 2:24 p.m. UTC | #3
Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote:

> 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@gmail.com>
> Acked-by: Ping-Ke Shih <pkshih@realtek.com>

Patch applied to wireless.git, thanks.

4aefde403da7 wifi: rtw88: Fix the RX aggregation in USB 3 mode
diff mbox series

Patch

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));