Skip to content

Commit 1df3569

Browse files
committed
ure: fix some speed checks and enable 32K RX buffers when possible
1) Adjust some USB speed tests for correct handling of USB_SPEED_LOW and USB_SPEED_SUPER_PLUS. 2) On 8153, with >= USB_SPEED_SUPER, we can use 32K RX buffers, so do it.
1 parent ead54a8 commit 1df3569

1 file changed

Lines changed: 17 additions & 10 deletions

File tree

sys/dev/usb/if_ure.c

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $NetBSD: if_ure.c,v 1.60 2024/05/12 17:17:56 christos Exp $ */
1+
/* $NetBSD: if_ure.c,v 1.61 2026/01/24 23:11:41 jmcneill Exp $ */
22
/* $OpenBSD: if_ure.c,v 1.10 2018/11/02 21:32:30 jcs Exp $ */
33

44
/*-
@@ -30,7 +30,7 @@
3030
/* RealTek RTL8152/RTL8153 10/100/Gigabit USB Ethernet device */
3131

3232
#include <sys/cdefs.h>
33-
__KERNEL_RCSID(0, "$NetBSD: if_ure.c,v 1.60 2024/05/12 17:17:56 christos Exp $");
33+
__KERNEL_RCSID(0, "$NetBSD: if_ure.c,v 1.61 2026/01/24 23:11:41 jmcneill Exp $");
3434

3535
#ifdef _KERNEL_OPT
3636
#include "opt_usb.h"
@@ -76,7 +76,9 @@ static const struct usb_devno ure_devs[] = {
7676
{ USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_UE300 },
7777
};
7878

79-
#define URE_BUFSZ (16 * 1024)
79+
#define URE_TX_BUFSZ (16 * 1024)
80+
#define URE_RX_BUFSZ_16K (16 * 1024)
81+
#define URE_RX_BUFSZ_32K (32 * 1024)
8082

8183
static void ure_reset(struct usbnet *);
8284
static uint32_t ure_txcsum(struct mbuf *);
@@ -584,7 +586,7 @@ ure_rtl8153_init(struct usbnet *un)
584586
~URE_LED_MODE_MASK);
585587

586588
if ((un->un_flags & URE_FLAG_VER_5C10) &&
587-
un->un_udev->ud_speed != USB_SPEED_SUPER)
589+
un->un_udev->ud_speed < USB_SPEED_SUPER)
588590
val = URE_LPM_TIMER_500MS;
589591
else
590592
val = URE_LPM_TIMER_500US;
@@ -765,7 +767,7 @@ ure_init_fifo(struct usbnet *un)
765767
/* Configure Rx FIFO threshold and coalescing. */
766768
ure_write_4(un, URE_PLA_RXFIFO_CTRL0, URE_MCU_TYPE_PLA,
767769
URE_RXFIFO_THR1_NORMAL);
768-
if (un->un_udev->ud_speed == USB_SPEED_FULL) {
770+
if (un->un_udev->ud_speed <= USB_SPEED_FULL) {
769771
rx_fifo1 = URE_RXFIFO_THR2_FULL;
770772
rx_fifo2 = URE_RXFIFO_THR3_FULL;
771773
} else {
@@ -810,6 +812,9 @@ ure_attach(device_t parent, device_t self, void *aux)
810812
aprint_normal_dev(self, "%s\n", devinfop);
811813
usbd_devinfo_free(devinfop);
812814

815+
if (uaa->uaa_product == USB_PRODUCT_REALTEK_RTL8152)
816+
un->un_flags |= URE_FLAG_8152;
817+
813818
un->un_dev = self;
814819
un->un_udev = dev;
815820
un->un_sc = un;
@@ -818,8 +823,13 @@ ure_attach(device_t parent, device_t self, void *aux)
818823
un->un_tx_xfer_flags = USBD_FORCE_SHORT_XFER;
819824
un->un_rx_list_cnt = URE_RX_LIST_CNT;
820825
un->un_tx_list_cnt = URE_TX_LIST_CNT;
821-
un->un_rx_bufsz = URE_BUFSZ;
822-
un->un_tx_bufsz = URE_BUFSZ;
826+
un->un_tx_bufsz = URE_TX_BUFSZ;
827+
if (un->un_udev->ud_speed < USB_SPEED_SUPER ||
828+
(un->un_flags & URE_FLAG_8152) != 0) {
829+
un->un_rx_bufsz = URE_RX_BUFSZ_16K;
830+
} else {
831+
un->un_rx_bufsz = URE_RX_BUFSZ_32K;
832+
}
823833

824834
#define URE_CONFIG_NO 1 /* XXX */
825835
error = usbd_set_config_no(dev, URE_CONFIG_NO, 1);
@@ -829,9 +839,6 @@ ure_attach(device_t parent, device_t self, void *aux)
829839
return; /* XXX */
830840
}
831841

832-
if (uaa->uaa_product == USB_PRODUCT_REALTEK_RTL8152)
833-
un->un_flags |= URE_FLAG_8152;
834-
835842
#define URE_IFACE_IDX 0 /* XXX */
836843
error = usbd_device2interface_handle(dev, URE_IFACE_IDX, &un->un_iface);
837844
if (error) {

0 commit comments

Comments
 (0)