[U-Boot] [PATCH 08/16] usb: hub: Support 'set hub depth' request for USB 3.0 hubs

Simon Glass sjg at chromium.org
Thu Jul 6 04:49:47 UTC 2017


On 23 June 2017 at 03:54, Bin Meng <bmeng.cn at gmail.com> wrote:
> USB 3.0 hub uses a hub depth value multiplied by four as an offset
> into the 'route string' to locate the bits it uses to determine the
> downstream port number. We shall set the hub depth value of a USB
> 3.0 hub after it is configured.
>
> Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
> ---
>
>  common/usb_hub.c   | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  include/usb.h      |  1 +
>  include/usb_defs.h |  3 +++
>  3 files changed, 56 insertions(+)

Reviewed-by: Simon Glass <sjg at chromium.org>

nit below

>
> diff --git a/common/usb_hub.c b/common/usb_hub.c
> index 835fac9..63358cd 100644
> --- a/common/usb_hub.c
> +++ b/common/usb_hub.c
> @@ -82,6 +82,16 @@ bool usb_hub_is_root_hub(struct udevice *hub)
>
>         return false;
>  }
> +
> +static int usb_set_hub_depth(struct usb_device *dev, int depth)
> +{
> +       if (depth < 0 || depth > 4)
> +               return -EINVAL;
> +
> +       return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
> +               USB_REQ_SET_HUB_DEPTH, USB_DIR_OUT | USB_RT_HUB,
> +               depth, 0, NULL, 0, USB_CNTL_TIMEOUT);
> +}
>  #endif
>
>  static int usb_get_hub_descriptor(struct usb_device *dev, void *data, int size)
> @@ -719,6 +729,48 @@ static int usb_hub_configure(struct usb_device *dev)
>         debug("%sover-current condition exists\n",
>               (le16_to_cpu(hubsts->wHubStatus) & HUB_STATUS_OVERCURRENT) ? \
>               "" : "no ");
> +
> +#ifdef CONFIG_DM_USB
> +       /*
> +        * A maximum of seven tiers are allowed in a USB topology, and the
> +        * root hub occupies the first tier. The last tier ends with a normal
> +        * USB device. USB 3.0 hubs use a 20-bit field called 'route string'
> +        * to route packet to the designated downstream port. The hub uses a

should this be 'packets'?

[..]


More information about the U-Boot mailing list