mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] usb: Fix initial max packet size
@ 2020-10-27  9:42 Sascha Hauer
  2020-10-27 12:10 ` Gavin Schenk
  0 siblings, 1 reply; 2+ messages in thread
From: Sascha Hauer @ 2020-10-27  9:42 UTC (permalink / raw)
  To: Barebox List; +Cc: ukl

In case the USB device is a full speed device we have to set
dev->epmaxpacketin[0] and dev->epmaxpacketout[0] before doing a
get_descriptor_len() because otherwise it's unset during that call.

Fixes: 6d1d95a386 ("usb: factor out a usb_setup_descriptor() function")
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 drivers/usb/core/usb.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
index c068c64c6b..ea244d4bcf 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
@@ -332,6 +332,8 @@ static int usb_setup_descriptor(struct usb_device *dev, bool do_read)
 		dev->descriptor->bMaxPacketSize0 = 64;
 		dev->maxpacketsize = PACKET_SIZE_64;
 	}
+	dev->epmaxpacketin[0] = dev->descriptor->bMaxPacketSize0;
+	dev->epmaxpacketout[0] = dev->descriptor->bMaxPacketSize0;
 
 	if (do_read && dev->speed == USB_SPEED_FULL) {
 		int err;
@@ -355,10 +357,10 @@ static int usb_setup_descriptor(struct usb_device *dev, bool do_read)
 		err = get_descriptor_len(dev, 64, 8);
 		if (err)
 			return err;
-	}
 
-	dev->epmaxpacketin[0] = dev->descriptor->bMaxPacketSize0;
-	dev->epmaxpacketout[0] = dev->descriptor->bMaxPacketSize0;
+		dev->epmaxpacketin[0] = dev->descriptor->bMaxPacketSize0;
+		dev->epmaxpacketout[0] = dev->descriptor->bMaxPacketSize0;
+	}
 
 	switch (dev->descriptor->bMaxPacketSize0) {
 	case 8:
-- 
2.20.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] usb: Fix initial max packet size
  2020-10-27  9:42 [PATCH] usb: Fix initial max packet size Sascha Hauer
@ 2020-10-27 12:10 ` Gavin Schenk
  0 siblings, 0 replies; 2+ messages in thread
From: Gavin Schenk @ 2020-10-27 12:10 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: Barebox List, ukl

Hi,

thanks a lot, that's great.

On Tue, Oct 27, 2020 at 10:42:42AM +0100, Sascha Hauer wrote:
> In case the USB device is a full speed device we have to set
> dev->epmaxpacketin[0] and dev->epmaxpacketout[0] before doing a
> get_descriptor_len() because otherwise it's unset during that call.
>
> Fixes: 6d1d95a386 ("usb: factor out a usb_setup_descriptor() function")
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Tested-by: Gavin Schenk <g.schenk@eckelmann.de>

On one of our i.MX25 based platforms there are currently four revert commits to
make USB work on barebox 2020.06.

(Reverted commits are:)
62d565ba0 (usb: hub: When no connection came up remove from scanning list)
1f8c8af48 (usb: Add super speed support)
bb2cbfb2b (usb: hub: Translate USB 3.0 hub port status into old version)
6d1d95a38 (usb: factor out a usb_setup_descriptor() function)

Without reverting the behaviour is:
usb: USB: scanning bus for devices...
usb1: Bus 001 Device 001: ID 0000:0000 EHCI Host Controller
ERROR: usb1-0: unable to get device descriptor (error=-110)
ERROR: usb1-0: USB device not accepting new address (error=80000000)
usb: 1 USB Device(s) found

With this patch applied USB is working again:

usb: USB: scanning bus for devices...
usb1: Bus 001 Device 001: ID 0000:0000 EHCI Host Controller
usb1-0: Bus 001 Device 002: ID 0951:161a DataTraveler 410
Using index 0 for the new disk
usb: 2 USB Device(s) found

barebox@Eckelmann AG ECU02:/ ls /mnt/usbstorage/
.                                   ..
.Trash-1000                         2016-barebox-eag-ecu02.img
2020-barebox-eckelmann-ecu02.img    barebox-eag-ecu02.img

Regards
Gavin Schenk
Eckelmann AG
Vorstand: Dipl.-Ing. Peter Frankenbach (Sprecher) Dipl.-Wi.-Ing. Philipp Eckelmann
Dr.-Ing. Marco Münchhof Dr.-Ing. Frank Uhlemann
Vorsitzender des Aufsichtsrats: Hubertus G. Krossa Stv. Vorsitzender des Aufsichtsrats: Dr.-Ing. Gerd Eckelmann
Sitz der Gesellschaft: Berliner Str. 161, 65205 Wiesbaden, Amtsgericht Wiesbaden HRB 12636
www.eckelmann.de

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-10-27 12:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-27  9:42 [PATCH] usb: Fix initial max packet size Sascha Hauer
2020-10-27 12:10 ` Gavin Schenk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox