summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2016-05-06 22:12:15 -0400
committerTom Rini <trini@konsulko.com>2016-05-06 22:12:15 -0400
commit7b4f17bf3653ffff0d5d7b76bb8c2d8c293db4ce (patch)
tree95181e37559b4236c8af1d4d47f2fdb9f818755d /common
parentad7af5d7e4caf49581c7403d5a8edc0f11a5f652 (diff)
parent12ff19dbfd93abdb62b7b326fee3f5bfa659a75e (diff)
downloadtalos-obmc-uboot-7b4f17bf3653ffff0d5d7b76bb8c2d8c293db4ce.tar.gz
talos-obmc-uboot-7b4f17bf3653ffff0d5d7b76bb8c2d8c293db4ce.zip
Merge branch 'master' of git://git.denx.de/u-boot-usb
Diffstat (limited to 'common')
-rw-r--r--common/usb.c18
-rw-r--r--common/usb_hub.c1
2 files changed, 18 insertions, 1 deletions
diff --git a/common/usb.c b/common/usb.c
index 4d0de4d87e..8d9efe516b 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -1064,7 +1064,7 @@ static int usb_prepare_device(struct usb_device *dev, int addr, bool do_read,
int usb_select_config(struct usb_device *dev)
{
- unsigned char *tmpbuf = 0;
+ unsigned char *tmpbuf = NULL;
int err;
err = get_descriptor_len(dev, USB_DT_DEVICE_SIZE, USB_DT_DEVICE_SIZE);
@@ -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) {
@@ -1107,6 +1115,14 @@ int usb_select_config(struct usb_device *dev)
"len %d, status %lX\n", dev->act_len, dev->status);
return err;
}
+
+ /*
+ * Wait until the Set Configuration request gets processed by the
+ * device. This is required by at least SanDisk Cruzer Pop USB 2.0
+ * and Kingston DT Ultimate 32GB USB 3.0 on DWC2 OTG controller.
+ */
+ mdelay(10);
+
debug("new device strings: Mfr=%d, Product=%d, SerialNumber=%d\n",
dev->descriptor.iManufacturer, dev->descriptor.iProduct,
dev->descriptor.iSerialNumber);
diff --git a/common/usb_hub.c b/common/usb_hub.c
index 4f59802d59..0f39c9faf7 100644
--- a/common/usb_hub.c
+++ b/common/usb_hub.c
@@ -402,6 +402,7 @@ static int usb_scan_port(struct usb_device_scan *usb_scan)
free(usb_scan);
return 0;
}
+ return 0;
}
portstatus = le16_to_cpu(portsts->wPortStatus);
OpenPOWER on IntegriCloud