Backport support for RTL8812AU/RTL8821AU USB adapters Manually backported patch: 045-v6.13-wifi-rtw88-Enable-the-new-RTL8821AU-RTL8812AU-driver Patches from 046 to 051 are pending. Signed-off-by: Marty Jones <mj8263788@gmail.com> Link: https://github.com/openwrt/openwrt/pull/17079 [Move BPAUTO_WANT_DEV_COREDUMP to original patch] Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> (cherry picked from commit 36f6d6ddcd67e7e32e2281baf5814ece81fad402)
74 lines
2.4 KiB
Diff
74 lines
2.4 KiB
Diff
From fbbd8cb347e25b68d25c4f3871821afc495ee7a9 Mon Sep 17 00:00:00 2001
|
|
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|
Date: Thu, 8 Aug 2024 01:19:36 +0300
|
|
Subject: [PATCH] wifi: rtw88: usb: Init RX burst length according to USB speed
|
|
|
|
This is needed in order to make USB RX aggregation work with RTL8811CU
|
|
(and presumably RTL8822BU and RTL8822CU also).
|
|
|
|
I don't know what BIT_DMA_BURST_CNT, BIT_DMA_MODE, and BIT_DROP_DATA_EN
|
|
are doing.
|
|
|
|
Tested with RTL8822CU, RTL8811CU, and RTL8723DU.
|
|
|
|
The RX speed is unchanged in my tests.
|
|
|
|
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
|
|
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
|
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
|
Link: https://patch.msgid.link/ac569c6f-7129-4341-b523-901fe10cabff@gmail.com
|
|
---
|
|
drivers/net/wireless/realtek/rtw88/reg.h | 6 ++++++
|
|
drivers/net/wireless/realtek/rtw88/usb.c | 23 ++++++++++++++++++++++-
|
|
2 files changed, 28 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/net/wireless/realtek/rtw88/reg.h
|
|
+++ b/drivers/net/wireless/realtek/rtw88/reg.h
|
|
@@ -322,6 +322,12 @@
|
|
#define REG_RXDMA_DPR 0x028C
|
|
#define REG_RXDMA_MODE 0x0290
|
|
#define BIT_DMA_MODE BIT(1)
|
|
+#define BIT_DMA_BURST_CNT GENMASK(3, 2)
|
|
+#define BIT_DMA_BURST_SIZE GENMASK(5, 4)
|
|
+#define BIT_DMA_BURST_SIZE_64 2
|
|
+#define BIT_DMA_BURST_SIZE_512 1
|
|
+#define BIT_DMA_BURST_SIZE_1024 0
|
|
+
|
|
#define REG_RXPKTNUM 0x02B0
|
|
|
|
#define REG_INT_MIG 0x0304
|
|
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
|
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
|
@@ -720,9 +720,30 @@ static void rtw_usb_link_ps(struct rtw_d
|
|
/* empty function for rtw_hci_ops */
|
|
}
|
|
|
|
+static void rtw_usb_init_burst_pkt_len(struct rtw_dev *rtwdev)
|
|
+{
|
|
+ struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
|
|
+ enum usb_device_speed speed = rtwusb->udev->speed;
|
|
+ u8 rxdma, burst_size;
|
|
+
|
|
+ rxdma = BIT_DMA_BURST_CNT | BIT_DMA_MODE;
|
|
+
|
|
+ if (speed == USB_SPEED_SUPER)
|
|
+ burst_size = BIT_DMA_BURST_SIZE_1024;
|
|
+ else if (speed == USB_SPEED_HIGH)
|
|
+ burst_size = BIT_DMA_BURST_SIZE_512;
|
|
+ else
|
|
+ burst_size = BIT_DMA_BURST_SIZE_64;
|
|
+
|
|
+ u8p_replace_bits(&rxdma, burst_size, BIT_DMA_BURST_SIZE);
|
|
+
|
|
+ rtw_write8(rtwdev, REG_RXDMA_MODE, rxdma);
|
|
+ rtw_write16_set(rtwdev, REG_TXDMA_OFFSET_CHK, BIT_DROP_DATA_EN);
|
|
+}
|
|
+
|
|
static void rtw_usb_interface_cfg(struct rtw_dev *rtwdev)
|
|
{
|
|
- /* empty function for rtw_hci_ops */
|
|
+ rtw_usb_init_burst_pkt_len(rtwdev);
|
|
}
|
|
|
|
static struct rtw_hci_ops rtw_usb_ops = {
|