Hi, I do have 2 USB ethernet adapters based on Realtek 8153:
TP-Link UE 300 Lenovo Thinkpad USB 3.0 Gigabit Adapter both adapters work well with 6.3-current on amd64 platform. If however I try to use them on RPi3 with 6.3-current, both lead to system freeze. As I see it now, there may be two possible ways to fix that: 1) linux way: Linux consider Realtek 8153 non conformant to CDC Ethernet specs. So it blacklists them from csc_ether driver and uses rtl815x driver for them: https://github.com/torvalds/linux/blob/master/drivers/net/usb/cdc_ether.c. I've verified that on Raspbian too. 2) netbsd way: netbsd somehow manages to run both adapters on RPi3 fine using cdce driver. I'm yet to analyze differences between OBSD's and NBSD's cdce driver, but certainly NetBSD dwc2 USB driver looks more modern than this from 6.3-current so my hypotesis is that more up to date dwc2 is responsible for working cdce using both adapters on NetBSD. I've somehow tested linux way on TP-Link adapter by using patch below and I can verify that with that TP-Link runs fine on RPi3. I've also tested adding vendor/product code for Thinkpad adapter into cdce driver, but the only result was not OS freeze (so kind of progress), but cdce0: usb error on tx: TIMEOUT cdce0: watchdog timeout messages printed from time to time to the console and network not working. Basically speaking linux way is 2 lines change to fix both adapters on RPi3. NetBSD way is quite huge patch updating dwc2 USB driver + changes required by OpenBSD on top of that. Before pursuing this path I'd like to ask if this would be preferred way, or if the linux way is preferred in this case so I'd just create a small patch for it. Thanks, Karel diff --git a/sys/dev/usb/if_cdce.c b/sys/dev/usb/if_cdce.c index c24f849c4fd..737e21ac8ba 100644 --- a/sys/dev/usb/if_cdce.c +++ b/sys/dev/usb/if_cdce.c @@ -66,7 +66,7 @@ #include <dev/usb/usbcdc.h> #include <dev/usb/if_cdcereg.h> - +#define CDCE_DEBUG 1 #ifdef CDCE_DEBUG #define DPRINTFN(n, x) do { if (cdcedebug > (n)) printf x; } while (0) int cdcedebug = 0; @@ -103,6 +103,7 @@ const struct cdce_type cdce_devs[] = { {{ USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_ETHERNETGADGET }, 0 }, {{ USB_VENDOR_COMPAQ, USB_PRODUCT_COMPAQ_IPAQLINUX }, 0 }, {{ USB_VENDOR_AMBIT, USB_PRODUCT_AMBIT_NTL_250 }, CDCE_SWAPUNION }, + {{ USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_THINKPAD_USB }, 0 } }; #define cdce_lookup(v, p) \ ((const struct cdce_type *)usb_lookup(cdce_devs, v, p)) diff --git a/sys/dev/usb/if_ure.c b/sys/dev/usb/if_ure.c index b6c6c99ef34..fa28d163859 100644 --- a/sys/dev/usb/if_ure.c +++ b/sys/dev/usb/if_ure.c @@ -72,7 +72,8 @@ int uredebug = 0; const struct usb_devno ure_devs[] = { { USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8152 }, - { USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8153 } + { USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_RTL8153 }, + { USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8153 } }; int ure_match(struct device *, void *, void *); diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs index bc977839062..ae7bcce9ee6 100644 --- a/sys/dev/usb/usbdevs +++ b/sys/dev/usb/usbdevs @@ -2510,6 +2510,7 @@ product LEADTEK 9531 0x2101 9531 GPS /* Lenovo products */ product LENOVO AX88179 0x304b AX88179 product LENOVO ETHERNET 0x7203 USB 2.0 Ethernet +product LENOVO THINKPAD_USB 0x7205 ThinkPad USB 3.0 Ethernet Adapter /* Lexar products */ product LEXAR JUMPSHOT 0x0001 jumpSHOT CompactFlash @@ -4260,6 +4261,7 @@ product TOSHIBA HSDPA 0x1302 HSDPA product TPLINK RTL8192CU 0x0100 RTL8192CU product TPLINK RTL8812AU 0x0101 RTL8812AU product TPLINK RTL8188EUS 0x010C RTL8188EUS +product TPLINK RTL8153 0x0601 RTL8153 /* Trek Technology products */ product TREK THUMBDRIVE 0x1111 ThumbDrive diff --git a/sys/dev/usb/usbdevs.h b/sys/dev/usb/usbdevs.h index 7c47e33fc74..769ddfe3083 100644 --- a/sys/dev/usb/usbdevs.h +++ b/sys/dev/usb/usbdevs.h @@ -1,4 +1,4 @@ -/* $OpenBSD: usbdevs.h,v 1.696 2018/04/11 04:18:18 bket Exp $ */ +/* $OpenBSD$ */ /* * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. @@ -2517,6 +2517,7 @@ /* Lenovo products */ #define USB_PRODUCT_LENOVO_AX88179 0x304b /* AX88179 */ #define USB_PRODUCT_LENOVO_ETHERNET 0x7203 /* USB 2.0 Ethernet */ +#define USB_PRODUCT_LENOVO_THINKPAD_USB 0x7205 /* ThinkPad USB 3.0 Ethernet Adapter */ /* Lexar products */ #define USB_PRODUCT_LEXAR_JUMPSHOT 0x0001 /* jumpSHOT CompactFlash */ @@ -4267,6 +4268,7 @@ #define USB_PRODUCT_TPLINK_RTL8192CU 0x0100 /* RTL8192CU */ #define USB_PRODUCT_TPLINK_RTL8812AU 0x0101 /* RTL8812AU */ #define USB_PRODUCT_TPLINK_RTL8188EUS 0x010C /* RTL8188EUS */ +#define USB_PRODUCT_TPLINK_RTL8153 0x0601 /* RTL8153 */ /* Trek Technology products */ #define USB_PRODUCT_TREK_THUMBDRIVE 0x1111 /* ThumbDrive */ diff --git a/sys/dev/usb/usbdevs_data.h b/sys/dev/usb/usbdevs_data.h index ea0bfdba35c..6d3409dcaaf 100644 --- a/sys/dev/usb/usbdevs_data.h +++ b/sys/dev/usb/usbdevs_data.h @@ -1,4 +1,4 @@ -/* $OpenBSD: usbdevs_data.h,v 1.690 2018/04/11 04:18:18 bket Exp $ */ +/* $OpenBSD$ */ /* * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. @@ -5517,6 +5517,10 @@ const struct usb_known_product usb_known_products[] = { USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_ETHERNET, "USB 2.0 Ethernet", }, + { + USB_VENDOR_LENOVO, USB_PRODUCT_LENOVO_THINKPAD_USB, + "ThinkPad USB 3.0 Ethernet Adapter", + }, { USB_VENDOR_LEXAR, USB_PRODUCT_LEXAR_JUMPSHOT, "jumpSHOT CompactFlash", @@ -10913,6 +10917,10 @@ const struct usb_known_product usb_known_products[] = { USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8188EUS, "RTL8188EUS", }, + { + USB_VENDOR_TPLINK, USB_PRODUCT_TPLINK_RTL8153, + "RTL8153", + }, { USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE, "ThumbDrive",