[PATCH] usb: Add delay for control messages to reach usb stick
Janne Grunau
j at jannau.net
Fri Aug 26 21:37:17 CEST 2022
Hej,
On 2022-08-25 23:35:33 -0600, Ashok Reddy Soma wrote:
> We are seeing timing issues with transcend usb sticks. These devices
> seems to require more time than regular devices for the control messages
> to reach device. Add 1ms delay before sending control message to fix
> trancend device detection issue.
I suspect I see something similar with the DWC3 controller on Apple
M1/M2 devices. It seems to be related to USB full speed devices with
bMaxPacketSize0 of 8. Failing devices are so only keyboards since that
is a device everyone will connect when using a Mac Mini as desktop.
I can reproduce the issue with older Logitech Unifying Receiver wireless
keyboard/mouse dongles (bcdDevice 12.03 or 12.10). I could also resolve
the issue with random 'mdelay(1);'. I chased the cause of the issue down
to the initial USB descriptor read to parse 'bMaxPacketSize0' in
usb_setup_descriptor(). Please test if adding the delay after the
get_descriptor_len() call in usb_setup_descriptor() is enough.
On the Apple silicon devices reducing the read size from 64 byte to 8
resolves the issue as well. Please try attached work-in-progress patch
(comment and commit message are not finalized).
HTH Janne
> Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma at amd.com>
> ---
>
> common/usb.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/common/usb.c b/common/usb.c
> index 6fcf1e8428..3fae32b048 100644
> --- a/common/usb.c
> +++ b/common/usb.c
> @@ -241,6 +241,12 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe,
> request, requesttype, value, index, size);
> dev->status = USB_ST_NOT_PROC; /*not yet processed */
>
> + /* Timing issues are observed with transcend usb sticks such as
> + * “Transcend Jetflash 350 USB2.0". Add 1ms delay for the usb
> + * device to get detected.
> + */
> + mdelay(1);
Please let's try to avoid this. I noticed a slowdown of USB probing with
an hub with 4 devices connected. Since Apple silicon devices are desktop
style machines I expect it's not uncommon to see systems with many USB
devices.
> +
> err = submit_control_msg(dev, pipe, data, size, setup_packet);
> if (err < 0)
> return err;
> --
> 2.17.1
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-usb-request-on-8-bytes-for-USB_SPEED_FULL-bMaxPacket.patch
Type: text/x-diff
Size: 1455 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20220826/f35516b8/attachment.patch>
More information about the U-Boot
mailing list