From: Janne Grunau <j@jannau.net>
To: Ashok Reddy Soma <ashok.reddy.soma@amd.com>
Cc: u-boot@lists.denx.de, marex@denx.de, michal.simek@amd.com,
git@xilinx.com, git@amd.com
Subject: Re: [PATCH] usb: Add delay for control messages to reach usb stick
Date: Fri, 26 Aug 2022 21:37:17 +0200 [thread overview]
Message-ID: <20220826193717.GA10102@jannau.net> (raw)
In-Reply-To: <20220826053533.23805-1-ashok.reddy.soma@amd.com>
[-- Attachment #1: Type: text/plain, Size: 2216 bytes --]
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@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
>
[-- Attachment #2: 0001-usb-request-on-8-bytes-for-USB_SPEED_FULL-bMaxPacket.patch --]
[-- Type: text/x-diff, Size: 1454 bytes --]
From df9e5b78687fc4eed4988f99d3f195cba8b227e1 Mon Sep 17 00:00:00 2001
From: Janne Grunau <j@jannau.net>
Date: Fri, 26 Aug 2022 00:01:15 +0200
Subject: [PATCH 1/1] usb: request on 8 bytes for USB_SPEED_FULL
bMaxPacketSize0 probing
Fixes probing of Logitech Unifying receivers (bcdDevice 12.03 or 12.10)
with bMaxPacketSize0 == 8 on Apple silicon SoCs using DWC3 controllers.
Signed-off-by: Janne Grunau <j@jannau.net>
---
common/usb.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/common/usb.c b/common/usb.c
index aad13fd9c557..2d6d782f9103 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -999,8 +999,17 @@ static int usb_setup_descriptor(struct usb_device *dev, bool do_read)
* the number of packets in addition to the number of bytes.
* A request for 64 bytes of data with the maxpacket guessed
* as 64 (above) yields a request for 1 packet.
+ *
+ * The DWC3 controller integrated into Apple silicon SoCs like
+ * the M1 and M2 does not like to read 64 bytes for devices with
+ * bMaxPacketSize0 == 8. request only 8 bytes which should also
+ * result in a single packet.
+ * Fixes probing errors with Logitech Unifying receivers with
+ * bcdDevice 12.03 or 12.10.
+ * A delay of 1 ms after this get_descriptor_len() call fixes
+ * the issue as well.
*/
- err = get_descriptor_len(dev, 64, 8);
+ err = get_descriptor_len(dev, 8, 8);
if (err)
return err;
}
--
2.35.1
next prev parent reply other threads:[~2022-08-26 19:37 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-26 5:35 [PATCH] usb: Add delay for control messages to reach usb stick Ashok Reddy Soma
2022-08-26 19:37 ` Janne Grunau [this message]
2022-08-27 0:20 ` Simon Glass
2022-08-27 10:40 ` Janne Grunau
2022-08-28 21:41 ` Marek Vasut
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220826193717.GA10102@jannau.net \
--to=j@jannau.net \
--cc=ashok.reddy.soma@amd.com \
--cc=git@amd.com \
--cc=git@xilinx.com \
--cc=marex@denx.de \
--cc=michal.simek@amd.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).