This appears to help some folk, please merge.
This patch relaxes reset timings.  There are some reports that it
helps make enumeration work better on some high speed devices.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
 static void hub_power_on(struct usb_hub *hub)
 {
        int port1;
+       unsigned pgood_delay = hub->descriptor->bPwrOn2PwrGood * 2;
 
        /* if hub supports power switching, enable power on each port */
        if ((hub->descriptor->wHubCharacteristics & HUB_CHAR_LPSM) < 2) {
                                        USB_PORT_FEAT_POWER);
        }
 
-       /* Wait for power to be enabled */
-       msleep(hub->descriptor->bPwrOn2PwrGood * 2);
+       /* Wait at least 100 msec for power to become stable */
+       msleep(max(pgood_delay, (unsigned) 100));
 }
 
 static void hub_quiesce(struct usb_hub *hub)
                /* return on disconnect or reset */
                switch (status) {
                case 0:
-                       /* TRSTRCY = 10 ms */
-                       msleep(10);
+                       /* TRSTRCY = 10 ms; plus some extra */
+                       msleep(10 + 40);
                        /* FALL THROUGH */
                case -ENOTCONN:
                case -ENODEV: