USB: show USB 3.2 Dual-lane devices as Gen Xx2 during device enumeration
authorMathias Nyman <mathias.nyman@linux.intel.com>
Thu, 19 Apr 2018 16:05:53 +0000 (19:05 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 22 Apr 2018 14:19:26 +0000 (16:19 +0200)
USB 3.2 specification adds a Gen XxY notion for USB3 devices where
X is the signaling rate on the wire. Gen 1xY is 5Gbps Superspeed
and Gen 2xY is 10Gbps SuperSpeedPlus. Y is the lane count.

For normal, non inter-chip (SSIC) devies the rx and tx lane count is
symmetric, and the maximum lane count for USB 3.2 devices is 2 (dual-lane).

SSIC devices may have asymmetric lane counts, with up to four
lanes per direction. The USB 3.2 specification doesn't point out
how to use the Gen XxY notion for these devices, so we limit the Gen Xx2
notion to symmertic Dual lane devies.
For other devices just show Gen1 or Gen2

Gen 1 5Gbps
Gen 2 10Gbps
Gen 1x2 10Gbps Dual-lane  (USB 3.2)
Gen 2x2 20Gbps Dual-lane  (USB 3.2)

Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/core/hub.c

index e21cc3be18b7e61b7b3cd2c20fa6f1fc71114a3d..92378594a86e33f7072a2cfdfb32e2db33d3460f 100644 (file)
@@ -4602,9 +4602,12 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
                        if (udev->speed >= USB_SPEED_SUPER) {
                                devnum = udev->devnum;
                                dev_info(&udev->dev,
-                                               "%s SuperSpeed%s USB device number %d using %s\n",
+                                               "%s SuperSpeed%s%s USB device number %d using %s\n",
                                                (udev->config) ? "reset" : "new",
-                                        (udev->speed == USB_SPEED_SUPER_PLUS) ? "Plus" : "",
+                                        (udev->speed == USB_SPEED_SUPER_PLUS) ?
+                                                       "Plus Gen 2" : " Gen 1",
+                                        (udev->rx_lanes == 2 && udev->tx_lanes == 2) ?
+                                                       "x2" : "",
                                         devnum, driver_name);
                        }