Hi,

Mathias Nyman <mathias.ny...@linux.intel.com> writes:

> USB 3.2 specification adds Dual-lane support, doubling the maximum
> SuperSpeedPlus data rate from 10Gbps to 20Gbps.
>
> Dual-lane takes into use a second set of rx and tx wires/pins in the
> Type-C cable and connector.
>
> Add a "lanes" variable to struct usb_device to store the numer of lanes
> in use. Number of lanes can be read using the extended port status hub
> request that was introduced in USB 3.1.
>
> Extended port status rx and tx lane count are zero based, maximum
> lanes supported by usb 3.2 is 2 (dual lane).
> If extended port status is not available then default to one lane.
>
> Signed-off-by: Mathias Nyman <mathias.ny...@linux.intel.com>
> ---
>  drivers/usb/core/hub.c | 6 ++++++
>  include/linux/usb.h    | 2 ++
>  2 files changed, 8 insertions(+)
>
> diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
> index c5c1f6c..853516d 100644
> --- a/drivers/usb/core/hub.c
> +++ b/drivers/usb/core/hub.c
> @@ -2742,6 +2742,12 @@ static int hub_port_wait_reset(struct usb_hub *hub, 
> int port1,
>       if (!udev)
>               return 0;
>  
> +     if (hub_is_superspeedplus(hub->hdev))
> +             udev->lanes = ((ext_portstatus &
> +                             USB_EXT_PORT_STAT_RX_LANES) >> 8) + 1;

should this be udev->rx_lanes instead? We have macros for both TX and RX
lanes:

#define USB_EXT_PORT_STAT_RX_SPEED_ID   0x0000000f
#define USB_EXT_PORT_STAT_TX_SPEED_ID   0x000000f0
#define USB_EXT_PORT_STAT_RX_LANES      0x00000f00
#define USB_EXT_PORT_STAT_TX_LANES      0x0000f000

-- 
balbi
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to