diff options
author | Tom Rini <trini@konsulko.com> | 2016-05-06 22:12:15 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2016-05-06 22:12:15 -0400 |
commit | 7b4f17bf3653ffff0d5d7b76bb8c2d8c293db4ce (patch) | |
tree | 95181e37559b4236c8af1d4d47f2fdb9f818755d /common | |
parent | ad7af5d7e4caf49581c7403d5a8edc0f11a5f652 (diff) | |
parent | 12ff19dbfd93abdb62b7b326fee3f5bfa659a75e (diff) | |
download | talos-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.c | 18 | ||||
-rw-r--r-- | common/usb_hub.c | 1 |
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); |