Commit ef71290be9b70d8cfa63b506c7d93c5069f63c42

Authored by Marek Vasut
1 parent f647bf0ba3

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 <marex@denx.de>
Cc: Chin Liang See <clsee@altera.com>
Cc: Dinh Nguyen <dinguyen@opensource.altera.com>
Cc: Hans de Goede <hdegoede@redhat.com>
Cc: Stefan Roese <sr@denx.de>
Cc: Stephen Warren <swarren@nvidia.com>

Showing 1 changed file with 8 additions and 0 deletions Side-by-side Diff

... ... @@ -1077,6 +1077,14 @@
1077 1077 le16_to_cpus(&dev->descriptor.idProduct);
1078 1078 le16_to_cpus(&dev->descriptor.bcdDevice);
1079 1079  
  1080 + /*
  1081 + * Kingston DT Ultimate 32GB USB 3.0 seems to be extremely sensitive
  1082 + * about this first Get Descriptor request. If there are any other
  1083 + * requests in the first microframe, the stick crashes. Wait about
  1084 + * one microframe duration here (1mS for USB 1.x , 125uS for USB 2.0).
  1085 + */
  1086 + mdelay(1);
  1087 +
1080 1088 /* only support for one config for now */
1081 1089 err = usb_get_configuration_len(dev, 0);
1082 1090 if (err >= 0) {