On Mon, 10 Mar 2025 11:17:35 +0100 Philipp Hahn <phahn-oss@xxxxxx> wrote: > Lenovo ThinkPad Hybrid USB-C with USB-A Dock (17ef:a359) is affected by > the same problem as the Lenovo Powered USB-C Travel Hub (17ef:721e): > Both are based on the Realtek RTL8153B chip used to use the cdc_ether > driver. However, using this driver, with the system suspended the device > constantly sends pause-frames as soon as the receive buffer fills up. > This causes issues with other devices, where some Ethernet switches stop > forwarding packets altogether. > > Using the Realtek driver (r8152) fixes this issue. Pause frames are no > longer sent while the host system is suspended. Please add net-next prefix to your patch as it is not a fix. Also several net maintainers are missing in the Cc. Please use the get_maintainers scripts like the following to get list of maintainers: ./scripts/get_maintainer.pl --norolestats --nogit-fallback *.patch With these changes: Reviewed-by: Kory Maincent <kory.maincent@xxxxxxxxxxx> Thank you! > Cc: Leon Schuermann <leon@is.currently.online> > Cc: Jakub Kicinski <kuba@xxxxxxxxxx> > Cc: Oliver Neukum <oliver@xxxxxxxxxx> (maintainer:USB CDC ETHERNET DRIVER) > Cc: netdev@xxxxxxxxxxxxxxx (open list:NETWORKING DRIVERS) > Link: https://git.kernel.org/netdev/net/c/cb82a54904a9 > Link: https://git.kernel.org/netdev/net/c/2284bbd0cf39 > Link: > https://www.lenovo.com/de/de/p/accessories-and-software/docking/docking-usb-docks/40af0135eu > Signed-off-by: Philipp Hahn <phahn-oss@xxxxxx> --- > drivers/net/usb/cdc_ether.c | 7 +++++++ > drivers/net/usb/r8152.c | 6 ++++++ > drivers/net/usb/r8153_ecm.c | 6 ++++++ > 3 files changed, 19 insertions(+) > > diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c > index a6469235d904..a032c1ded406 100644 > --- a/drivers/net/usb/cdc_ether.c > +++ b/drivers/net/usb/cdc_ether.c > @@ -783,6 +783,13 @@ static const struct usb_device_id products[] = { > .driver_info = 0, > }, > > +/* Lenovo ThinkPad Hybrid USB-C with USB-A Dock (40af0135eu, based on > Realtek RTL8153) */ +{ > + USB_DEVICE_AND_INTERFACE_INFO(LENOVO_VENDOR_ID, 0xa359, > USB_CLASS_COMM, > + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), > + .driver_info = 0, > +}, > + > /* Aquantia AQtion USB to 5GbE Controller (based on AQC111U) */ > { > USB_DEVICE_AND_INTERFACE_INFO(AQUANTIA_VENDOR_ID, 0xc101, > diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c > index 468c73974046..96fa3857d8e2 100644 > --- a/drivers/net/usb/r8152.c > +++ b/drivers/net/usb/r8152.c > @@ -785,6 +785,7 @@ enum rtl8152_flags { > #define DEVICE_ID_THINKPAD_USB_C_DONGLE 0x720c > #define DEVICE_ID_THINKPAD_USB_C_DOCK_GEN2 0xa387 > #define DEVICE_ID_THINKPAD_USB_C_DOCK_GEN3 0x3062 > +#define DEVICE_ID_THINKPAD_HYBRID_USB_C_DOCK 0xa359 > > struct tally_counter { > __le64 tx_packets; > @@ -9787,6 +9788,7 @@ static bool rtl8152_supports_lenovo_macpassthru(struct > usb_device *udev) case DEVICE_ID_THINKPAD_USB_C_DOCK_GEN2: > case DEVICE_ID_THINKPAD_USB_C_DOCK_GEN3: > case DEVICE_ID_THINKPAD_USB_C_DONGLE: > + case DEVICE_ID_THINKPAD_HYBRID_USB_C_DOCK: > return 1; > } > } else if (vendor_id == VENDOR_ID_REALTEK && parent_vendor_id == > VENDOR_ID_LENOVO) { @@ -10064,6 +10066,8 @@ static const struct usb_device_id > rtl8152_table[] = { { USB_DEVICE(VENDOR_ID_MICROSOFT, 0x0927) }, > { USB_DEVICE(VENDOR_ID_MICROSOFT, 0x0c5e) }, > { USB_DEVICE(VENDOR_ID_SAMSUNG, 0xa101) }, > + > + /* Lenovo */ > { USB_DEVICE(VENDOR_ID_LENOVO, 0x304f) }, > { USB_DEVICE(VENDOR_ID_LENOVO, 0x3054) }, > { USB_DEVICE(VENDOR_ID_LENOVO, 0x3062) }, > @@ -10074,7 +10078,9 @@ static const struct usb_device_id rtl8152_table[] = { > { USB_DEVICE(VENDOR_ID_LENOVO, 0x720c) }, > { USB_DEVICE(VENDOR_ID_LENOVO, 0x7214) }, > { USB_DEVICE(VENDOR_ID_LENOVO, 0x721e) }, > + { USB_DEVICE(VENDOR_ID_LENOVO, 0xa359) }, > { USB_DEVICE(VENDOR_ID_LENOVO, 0xa387) }, > + > { USB_DEVICE(VENDOR_ID_LINKSYS, 0x0041) }, > { USB_DEVICE(VENDOR_ID_NVIDIA, 0x09ff) }, > { USB_DEVICE(VENDOR_ID_TPLINK, 0x0601) }, > diff --git a/drivers/net/usb/r8153_ecm.c b/drivers/net/usb/r8153_ecm.c > index 20b2df8d74ae..8d860dacdf49 100644 > --- a/drivers/net/usb/r8153_ecm.c > +++ b/drivers/net/usb/r8153_ecm.c > @@ -135,6 +135,12 @@ static const struct usb_device_id products[] = { > USB_CDC_SUBCLASS_ETHERNET, > USB_CDC_PROTO_NONE), .driver_info = (unsigned long)&r8153_info, > }, > +/* Lenovo ThinkPad Hybrid USB-C with USB-A Dock (40af0135eu, based on > Realtek RTL8153) */ +{ > + USB_DEVICE_AND_INTERFACE_INFO(VENDOR_ID_LENOVO, 0xa359, > USB_CLASS_COMM, > + USB_CDC_SUBCLASS_ETHERNET, > USB_CDC_PROTO_NONE), > + .driver_info = (unsigned long)&r8153_info, > +}, > > { }, /* END */ > }; -- Köry Maincent, Bootlin Embedded Linux and kernel engineering https://bootlin.com