The following error sometimes occurs on PNY USB sticks:
=> usb start
starting USB...
USB XHCI 1.00
WARN endpoint is halted
WARN endpoint is halted
usb_new_device: Cannot read configuration, skipping device 154b:6000
Bus usb3@500000: 1 USB Device(s) found
scanning usb for storage devices... 0 Storage Device(s) found
Note that this USB stick works correctly in Linux but not in u-boot.
Work around this quirk by adding a small delay before calling
usb_get_configuration_no, which it would fail in otherwise (with the
error code -EINVAL).
Signed-off-by: Ronan Dalton <[email protected]>
Cc: Marek Vasut <[email protected]>
Cc: Philip Oberfichtner <[email protected]>
---
common/usb.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/common/usb.c b/common/usb.c
index 6a4ad346f4b..00d051edec5 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -1197,10 +1197,17 @@ int usb_select_config(struct usb_device *dev)
err = usb_get_configuration_len(dev, 0);
if (err >= 0) {
tmpbuf = (unsigned char *)malloc_cache_aligned(err);
- if (!tmpbuf)
+ if (!tmpbuf) {
err = -ENOMEM;
- else
+ } else {
+ /*
+ * PNY 32GB USB 2.0 flash drives seem to require an
+ * additional delay before getting the next descriptor.
+ */
+ mdelay(1);
+
err = usb_get_configuration_no(dev, 0, tmpbuf, err);
+ }
}
if (err < 0) {
printf("usb_new_device: Cannot read configuration, " \
--
2.53.0