From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Rini Date: Sun, 1 Mar 2020 18:04:56 -0500 Subject: [PATCH] usb: ehci: Fix "EHCI timed out on TD - token=XXXX" error on ehci-hcd In-Reply-To: <5af0dfb2-fde4-0d35-0d9b-b7158f9049a5@denx.de> References: <20200226112955.7930-1-lukma@denx.de> <20200229032022.GN18302@bill-the-cat> <5af0dfb2-fde4-0d35-0d9b-b7158f9049a5@denx.de> Message-ID: <20200301230456.GO18302@bill-the-cat> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Sat, Feb 29, 2020 at 08:20:57AM +0100, Marek Vasut wrote: > 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 ? It's a usb ethernet device. > 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. I'll pencil in some time to try that, thanks. -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 659 bytes Desc: not available URL: