public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Janne Grunau <j@jannau.net>
To: Marek Vasut <marex@denx.de>
Cc: u-boot@lists.denx.de, Thomas Glanzmann <thomas@glanzmann.de>,
	Russell King <rmk@armlinux.org.uk>
Subject: Re: [PATCH 1/1] usb: request only 8 bytes for USB_SPEED_FULL bMaxPacketSize0 discovery
Date: Mon, 26 Sep 2022 07:42:03 +0200	[thread overview]
Message-ID: <20220926054203.GJ4024@jannau.net> (raw)
In-Reply-To: <81755570-4f88-c3f0-c00b-076ce00d4615@denx.de>

On 2022-09-26 01:52:37 +0200, Marek Vasut wrote:
> On 8/29/22 08:31, Janne Grunau wrote:
> > Fixes probing of various keyboards with DWC3 as integrated into Apple
> > silicon SoCs. The problem appears to be requesting more data than the
> > devices's bMaxPacketSize0 of 8. Older Logitech unifying receivers
> > (bcdDevice 12.03 or 12.10) are for eaxample affected.
> > 
> > Signed-off-by: Janne Grunau <j@jannau.net>
> > Tested-by: Thomas Glanzmann <thomas@glanzmann.de>
> > ---
> >   common/usb.c | 8 +++++---
> >   1 file changed, 5 insertions(+), 3 deletions(-)
> > 
> > diff --git a/common/usb.c b/common/usb.c
> > index 6fcf1e8428e9..48a310e8599d 100644
> > --- a/common/usb.c
> > +++ b/common/usb.c
> > @@ -993,10 +993,12 @@ static int usb_setup_descriptor(struct usb_device *dev, bool do_read)
> >   		 *
> >   		 * At least the DWC2 controller needs to be programmed with
> >   		 * 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.
> > +		 * Requesting more than 8 bytes causes probing errors on the
> > +		 * DWC3 controller integrated into Apple silicon SoCs with
> > +		 * devices with bMaxPacketSize0 of 8. So limit the read request
> > +		 * to the used size of 8 bytes.
> >   		 */
> > -		err = get_descriptor_len(dev, 64, 8);
> > +		err = get_descriptor_len(dev, 8, 8);
> >   		if (err)
> >   			return err;
> >   	}
> 
> Sorry for the delay.
> 
> Can you be more specific about those logitech receivers ?

In my case it's a device a little bit larger than a USB-A plug. ~7mm 
heigh black plastic case with "logitech" written on the end and and 
their unifying logo in orange on a side (idVendor: 0x046d, idProduct: 
0xc52b, bcdDevice: 12.03). Russell has one with bcdDevice: 12.10

The problem is not limited to the logitech receivers. It reproduces for 
other keyboards with bMaxPacketSize0 == 8 as well. I suspect it affects 
all devices with bMaxPacketSize0 == 8. Keyboards are simply the type of 
device those breakage is noticed inside u-boot / efi bootloaders on 
desktop class devices and don't transfer that much data so that 
bMaxPacketSize0 == 8 doesn't hurt.

> I might have one
> of those devices, and I have DWC3 in i.MX8MP and i.MX8MQ, as well as ZynqMP,
> so I should be able to try and trigger the problem. Can you share the
> reproducer test case for this problem ?

The device is not detected. It is not listed as detected usb device 
during u-boot's USB probing. If the device is a keyboard or you have a 
matching logitech wireless keyboard it will not work to interrupt the 
auto boot or on the u-boot prompt.

> If the problem is specific to the Apple instance of the controller, 
> maybe we need some sort of quirk instead ?

The code looks evidently broken to me. The comment says that we can only 
expect to receive a single packet. We request 64 bytes but devices might 
have a bMaxPacketSize0 of 8. Requesting more than 8 bytes looks also 
unnecessary as we are only interested in bMaxPacketSize0 which is within 
the first 8 bytes of the device descriptor.

Thanks

Janne

  reply	other threads:[~2022-09-26  5:42 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-29  6:31 [PATCH 1/1] usb: request only 8 bytes for USB_SPEED_FULL bMaxPacketSize0 discovery Janne Grunau
2022-08-29  7:07 ` Mark Kettenis
2022-09-25 23:52 ` Marek Vasut
2022-09-26  5:42   ` Janne Grunau [this message]
2022-09-26  7:34   ` Thomas Glanzmann
2022-09-30  2:54     ` 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=20220926054203.GJ4024@jannau.net \
    --to=j@jannau.net \
    --cc=marex@denx.de \
    --cc=rmk@armlinux.org.uk \
    --cc=thomas@glanzmann.de \
    --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