Skip to content

Commit 2e0048b

Browse files
author
CKI Backport Bot
committed
cdc_ether|r8152: ThinkPad Hybrid USB-C/A Dock quirk
JIRA: https://issues.redhat.com/browse/RHEL-72661 commit a07f23a Author: Philipp Hahn <phahn-oss@avm.de> Date: Mon Mar 10 11:17:35 2025 +0100 cdc_ether|r8152: ThinkPad Hybrid USB-C/A Dock quirk 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. Cc: Leon Schuermann <leon@is.currently.online> Cc: Jakub Kicinski <kuba@kernel.org> Cc: Oliver Neukum <oliver@neukum.org> (maintainer:USB CDC ETHERNET DRIVER) Cc: netdev@vger.kernel.org (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@avm.de> Reviewed-by: Kory Maincent <kory.maincent@bootlin.com> Link: https://patch.msgid.link/484336aad52d14ccf061b535bc19ef6396ef5120.1741601523.git.p.hahn@avm.de Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: CKI Backport Bot <cki-ci-bot+cki-gitlab-backport-bot@redhat.com>
1 parent 5fda7bb commit 2e0048b

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

drivers/net/usb/cdc_ether.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -783,6 +783,13 @@ static const struct usb_device_id products[] = {
783783
.driver_info = 0,
784784
},
785785

786+
/* Lenovo ThinkPad Hybrid USB-C with USB-A Dock (40af0135eu, based on Realtek RTL8153) */
787+
{
788+
USB_DEVICE_AND_INTERFACE_INFO(LENOVO_VENDOR_ID, 0xa359, USB_CLASS_COMM,
789+
USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
790+
.driver_info = 0,
791+
},
792+
786793
/* Aquantia AQtion USB to 5GbE Controller (based on AQC111U) */
787794
{
788795
USB_DEVICE_AND_INTERFACE_INFO(AQUANTIA_VENDOR_ID, 0xc101,

drivers/net/usb/r8152.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,7 @@ enum rtl8152_flags {
785785
#define DEVICE_ID_THINKPAD_USB_C_DONGLE 0x720c
786786
#define DEVICE_ID_THINKPAD_USB_C_DOCK_GEN2 0xa387
787787
#define DEVICE_ID_THINKPAD_USB_C_DOCK_GEN3 0x3062
788+
#define DEVICE_ID_THINKPAD_HYBRID_USB_C_DOCK 0xa359
788789

789790
struct tally_counter {
790791
__le64 tx_packets;
@@ -9787,6 +9788,7 @@ static bool rtl8152_supports_lenovo_macpassthru(struct usb_device *udev)
97879788
case DEVICE_ID_THINKPAD_USB_C_DOCK_GEN2:
97889789
case DEVICE_ID_THINKPAD_USB_C_DOCK_GEN3:
97899790
case DEVICE_ID_THINKPAD_USB_C_DONGLE:
9791+
case DEVICE_ID_THINKPAD_HYBRID_USB_C_DOCK:
97909792
return 1;
97919793
}
97929794
} 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[] = {
1006410066
{ USB_DEVICE(VENDOR_ID_MICROSOFT, 0x0927) },
1006510067
{ USB_DEVICE(VENDOR_ID_MICROSOFT, 0x0c5e) },
1006610068
{ USB_DEVICE(VENDOR_ID_SAMSUNG, 0xa101) },
10069+
10070+
/* Lenovo */
1006710071
{ USB_DEVICE(VENDOR_ID_LENOVO, 0x304f) },
1006810072
{ USB_DEVICE(VENDOR_ID_LENOVO, 0x3054) },
1006910073
{ USB_DEVICE(VENDOR_ID_LENOVO, 0x3062) },
@@ -10074,7 +10078,9 @@ static const struct usb_device_id rtl8152_table[] = {
1007410078
{ USB_DEVICE(VENDOR_ID_LENOVO, 0x720c) },
1007510079
{ USB_DEVICE(VENDOR_ID_LENOVO, 0x7214) },
1007610080
{ USB_DEVICE(VENDOR_ID_LENOVO, 0x721e) },
10081+
{ USB_DEVICE(VENDOR_ID_LENOVO, 0xa359) },
1007710082
{ USB_DEVICE(VENDOR_ID_LENOVO, 0xa387) },
10083+
1007810084
{ USB_DEVICE(VENDOR_ID_LINKSYS, 0x0041) },
1007910085
{ USB_DEVICE(VENDOR_ID_NVIDIA, 0x09ff) },
1008010086
{ USB_DEVICE(VENDOR_ID_TPLINK, 0x0601) },

drivers/net/usb/r8153_ecm.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,12 @@ static const struct usb_device_id products[] = {
135135
USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
136136
.driver_info = (unsigned long)&r8153_info,
137137
},
138+
/* Lenovo ThinkPad Hybrid USB-C with USB-A Dock (40af0135eu, based on Realtek RTL8153) */
139+
{
140+
USB_DEVICE_AND_INTERFACE_INFO(VENDOR_ID_LENOVO, 0xa359, USB_CLASS_COMM,
141+
USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
142+
.driver_info = (unsigned long)&r8153_info,
143+
},
138144

139145
{ }, /* END */
140146
};

0 commit comments

Comments
 (0)