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
This commit is contained in:
committed by
Ping-Ke Shih
parent
e24f825a93
commit
fbbd8cb347
@@ -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
|
||||
|
||||
@@ -720,9 +720,30 @@ static void rtw_usb_link_ps(struct rtw_dev *rtwdev, bool enter)
|
||||
/* 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 = {
|
||||
|
||||
Reference in New Issue
Block a user