On 2/29/20 4:20 AM, Tom Rini wrote: > On Sat, Feb 29, 2020 at 12:32:57AM +0100, Marek Vasut wrote: >> On 2/26/20 12:29 PM, Lukasz Majewski wrote: >>> This patch aims to improve robustness of 'usb' command operation on the >>> ehci-hcd IP block as it ports to contemporary U-Boot the patch described >>> and provided in [1] (originally applicable to U-Boot 2016.05). >>> >>> According to the fix author - "rayvt" (from [1]): >> >> [...] >> >>> diff --git a/common/usb_storage.c b/common/usb_storage.c >>> index 097b6729c1..48c8c2ae64 100644 >>> --- a/common/usb_storage.c >>> +++ b/common/usb_storage.c >>> @@ -111,6 +111,18 @@ int usb_stor_get_info(struct usb_device *dev, struct >>> us_data *us, >>> struct blk_desc *dev_desc); >>> int usb_storage_probe(struct usb_device *dev, unsigned int ifnum, >>> struct us_data *ss); >>> + >>> +#ifdef CONFIG_USB_EHCI_HCD >>> + /* >>> + * The U-Boot EHCI driver can handle any transfer length as long as >>> + * there is enough free heap space left, but the SCSI READ(10) and >>> + * WRITE(10) commands are limited to 65535 blocks. >>> + */ >>> +int usb_max_xfer_blk = 4096; >>> +#else >>> +int usb_max_xfer_blk = 20; >>> +#endif >> >> This all looks horribly wrong and exactly what >> 7d6fd7f0ba71cd93d94079132f958d9630f27a89 and >> 02b0e1a36c5bc20174299312556ec4e266872bd6 fixed properly. >> >> All those "dynamic reduction of transfer size" attempts are nonsensical, >> the real solution (sadly) is to reduce the transfer size to cater for >> the most limited devices and profile/fix the remaining delays in the USB >> stack (which should have already been done, see the commits above). This >> is also what the Linux USB stack does. >> >> What is the problem you are trying to solve here ? > > Things like the following (omap3_beagle_defconfig): > U-Boot SPL 2020.04-rc3-00009-g9e1d65f36b83 (Feb 28 2020 - 19:08:53 -0500) > Trying to boot from MMC1
[...] > EHCI timed out on TD - token=0x80008c80 > EHCI timed out on TD - token=0x80008c80 > EHCI timed out on TD - token=0x80008d80 > 3 USB Device(s) found > scanning usb for ethernet devices... 0 Ethernet Device(s) found > Hit any key to stop autoboot: 2 0 > BeagleBoard # usb tree > USB device tree: > 1 Hub (480 Mb/s, 0mA) > | u-boot EHCI Host Controller > | > |+-2 Hub (480 Mb/s, 2mA) > | > |+-3 See Interface (480 Mb/s, 0mA) > ??????????? ??????????? ??????????? > > BeagleBoard # > > Note that the hub and ethernet are on-SBC and not something I'm plugging > in. Thanks! The device #3 is a usb mass storage or what is it ? Can you try and implement usb_get_max_xfer_size for musb and make it report 240*512 unconditionally (*size = 240*512; return 0;) ? I think that would "fix" it for you on omap too.