Dear Julius Werner,

> Sorry, forgot this one yesterday. I would consider to just drop/revert
> this patch entirely. It's not wrong, but it adds complexity where it is
> not needed. You don't have to reset SuperSpeed devices, but it shouldn't
> hurt either and from what I can tell Linux does it as well.

Ok, I can drop this one.

> > As per XHCI specifications USB 3.0 protocol ports attempt
> > to advance to 'Enabled' state; however USB 2.0 protocol ports
> > require software reset to advance them to 'Enabled' state.
> > Thereby, inferring that software need to reset USB 2.0 protocol
> > ports invariably (as per EHCI spec or xHCI spec).
> > 
> > Signed-off-by: Vivek Gautam <gautam.vi...@samsung.com>
> > 
> > ---
> > This patch added in V3(current-version) of this patch-series.
> > 
> >  common/usb_hub.c |   23 +++++++++++++++++++----
> >  1 files changed, 19 insertions(+), 4 deletions(-)
> > 
> > diff --git a/common/usb_hub.c b/common/usb_hub.c
> > index 1e225e6..eedbcf2 100644
> > --- a/common/usb_hub.c
> > +++ b/common/usb_hub.c
> > @@ -233,6 +233,7 @@ void usb_hub_port_connect_change(struct usb_device
> > *dev, int port)
> > 
> >     struct usb_device *usb;
> >     ALLOC_CACHE_ALIGN_BUFFER(struct usb_port_status, portsts, 1);
> >     unsigned short portstatus;
> > 
> > +   uint32_t do_port_reset = 1;
> > 
> >     /* Check status */
> >     if (usb_get_port_status(dev, port + 1, portsts) < 0) {
> > 
> > @@ -246,6 +247,9 @@ void usb_hub_port_connect_change(struct usb_device
> > *dev, int port)
> > 
> >           le16_to_cpu(portsts->wPortChange),
> >           portspeed(portstatus));
> > 
> > +   if (portstatus & (1 << USB_PORT_FEAT_SUPERSPEED))
> > +           do_port_reset = 0;
> > +
> > 
> >     /* Clear the connection change status */
> >     usb_clear_port_feature(dev, port + 1, USB_PORT_FEAT_C_CONNECTION);
> > 
> > @@ -259,10 +263,21 @@ void usb_hub_port_connect_change(struct usb_device
> > *dev, int port)
> > 
> >     }
> >     mdelay(200);
> > 
> > -   /* Reset the port */
> > -   if (hub_port_reset(dev, port, &portstatus) < 0) {
> > -           printf("cannot reset port %i!?\n", port + 1);
> > -           return;
> > +   /*
> > +    * Reset the port:
> > +    * As per xHCI protocol, USB 3.0 devices do not require
> > +    * a port reset, however USB 2.0 device do require the same
> > +    * to let ports proceed to 'enabled' state
> > +    *
> > +    * XXX: Will this break EHCI ??
> > +    * probably not, above condition for 'do_port_reset' checks for
> > +    * speed, and for EHCI it can't reach Super speed anyways.
> > +    */
> > +   if (do_port_reset) {
> > +           if (hub_port_reset(dev, port, &portstatus) < 0) {
> > +                   printf("cannot reset port %i!?\n", port + 1);
> > +                   return;
> > +           }
> > 
> >     }
> >     
> >     mdelay(200);

Best regards,
Marek Vasut
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to