From: Marek Vasut Date: Wed, 27 Apr 2016 01:32:56 +0000 (+0200) Subject: usb: Assure Get Descriptor request is in separate microframe X-Git-Tag: v2016.05~8^2~4 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=ef71290be9b70d8cfa63b506c7d93c5069f63c42;p=oweals%2Fu-boot.git usb: Assure Get Descriptor request is in separate microframe The Kingston DT Ultimate USB 3.0 stick is sensitive to this first Get Descriptor request and if the request is not in a separate microframe, the stick refuses to operate. Add slight delay, which is enough for one microframe to pass on any USB spec revision. Signed-off-by: Marek Vasut Cc: Chin Liang See Cc: Dinh Nguyen Cc: Hans de Goede Cc: Stefan Roese Cc: Stephen Warren --- diff --git a/common/usb.c b/common/usb.c index 205041b6a6..8d9efe516b 100644 --- a/common/usb.c +++ b/common/usb.c @@ -1077,6 +1077,14 @@ int usb_select_config(struct usb_device *dev) le16_to_cpus(&dev->descriptor.idProduct); le16_to_cpus(&dev->descriptor.bcdDevice); + /* + * Kingston DT Ultimate 32GB USB 3.0 seems to be extremely sensitive + * about this first Get Descriptor request. If there are any other + * requests in the first microframe, the stick crashes. Wait about + * one microframe duration here (1mS for USB 1.x , 125uS for USB 2.0). + */ + mdelay(1); + /* only support for one config for now */ err = usb_get_configuration_len(dev, 0); if (err >= 0) {