
On 05/04/2016 10:03 AM, Stefan Roese wrote:
On 03.05.2016 22:51, Marek Vasut wrote:
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
common/usb.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/common/usb.c b/common/usb.c index 205041b..8d9efe5 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) {
Again my question, if this problem also occurs on other platforms with this USB key. A 1ms delay is not really a big deal, but its my general feeling that we should manifest such changes by testing on different platforms.
I tested it by connecting the bus analyzer between the stick and socfpga and between the stick and x86 host. I wouldn't be able to come up with this solution. btw. any ehci ends up inserting these control requests into separate microframes, but we need the mdelay to also cater for ohci/uhci, which has longer frames (1ms).