X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=common%2Fusb_hub.c;h=c416e5e0b31790e2bc7570fd113f7b52bb2a4502;hb=130aec779ad9a2e28dc9d42ca5b367b957f311d7;hp=2add4b97920fefedbad4d2cd04b888d294992841;hpb=b5b8d85e9a50c2294b6043830cd045de1002dc5d;p=oweals%2Fu-boot.git diff --git a/common/usb_hub.c b/common/usb_hub.c index 2add4b9792..c416e5e0b3 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -209,9 +209,22 @@ int hub_port_reset(struct usb_device *dev, int port, (portstatus & USB_PORT_STAT_CONNECTION) ? 1 : 0, (portstatus & USB_PORT_STAT_ENABLE) ? 1 : 0); - if ((portchange & USB_PORT_STAT_C_CONNECTION) || - !(portstatus & USB_PORT_STAT_CONNECTION)) - return -1; + /* + * Perhaps we should check for the following here: + * - C_CONNECTION hasn't been set. + * - CONNECTION is still set. + * + * Doing so would ensure that the device is still connected + * to the bus, and hasn't been unplugged or replaced while the + * USB bus reset was going on. + * + * However, if we do that, then (at least) a San Disk Ultra + * USB 3.0 16GB device fails to reset on (at least) an NVIDIA + * Tegra Jetson TK1 board. For some reason, the device appears + * to briefly drop off the bus when this second bus reset is + * executed, yet if we retry this loop, it'll eventually come + * back after another reset or two. + */ if (portstatus & USB_PORT_STAT_ENABLE) break;