[PATCH] common: usb-hub: Reset hub port before scanning

Shantur Rathore i at shantur.com
Tue Nov 14 21:49:50 CET 2023


+Patrice +Patrick from get_maintainer script

On Mon, Nov 13, 2023 at 1:28 PM Shantur Rathore <i at shantur.com> wrote:
>
> +Simon +Trini
>
> On Fri, Nov 10, 2023 at 2:13 PM Shantur Rathore <i at shantur.com> wrote:
> >
> > Currently when a hub is turned on, all the ports are powered on.
> > This works well for hubs which have individual power control.
> >
> > For the hubs without individual power control this has no effect.
> > Mostly in these scenarios the hub port is powered before the USB
> > controller is enabled, this can lead to some devices in unexpected
> > state.
> >
> > With this patch, we explicitly reset the port while powering up hub
> > This resets the port for hubs without port power control and has
> > no effect on hubs with port power control as the port is still off.
> >
> > Before this patch AMicro AM8180 based NVME to USB adapter won't be
> > detected as a USB3.0 Mass Storage device but with this it works as
> > expected.
> >
> > Tested working after this patch:
> > 1. AMicro AM8180 based NVME to USB Adapter
> > 2. Kingston DataTraveler 3.0
> > 3. GenesysLogic USB3.0 Hub
> >
> > The drives were tested while connected directly and via the hub.
> > ---
> >  common/usb_hub.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/common/usb_hub.c b/common/usb_hub.c
> > index 85c0822d8b..06fe436add 100644
> > --- a/common/usb_hub.c
> > +++ b/common/usb_hub.c
> > @@ -174,8 +174,10 @@ static void usb_hub_power_on(struct usb_hub_device *hub)
> >
> >         debug("enabling power on all ports\n");
> >         for (i = 0; i < dev->maxchild; i++) {
> > +               usb_set_port_feature(dev, i + 1, USB_PORT_FEAT_RESET);
> > +               debug("Reset : port %d returns %lX\n", i + 1, dev->status);
> >                 usb_set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER);
> > -               debug("port %d returns %lX\n", i + 1, dev->status);
> > +               debug("PowerOn : port %d returns %lX\n", i + 1, dev->status);
> >         }
> >
> >  #ifdef CONFIG_SANDBOX
> > --
> > 2.40.1
> >


More information about the U-Boot mailing list