Message ID | 20191025143015.10102-1-gilles.doffe@savoirfairelinux.com |
---|---|
State | Deferred |
Headers | show |
Series | [U-Boot] usb: ehci: add ehci max xfer size ehci config entry | expand |
On 2019-10-25 8:30 a.m., Gilles DOFFE wrote: > Some USB sticks cannot handle SIZE_MAX bytes (65535) blocks transfer, > leading to 'EHCI timed out on TD' errors. > As it is hardly predictable, this commit adds a configuration option > to easily reduce this EHCI max transfer size. The default value is 65535 > which corresponds to size_t max value (SIZE_MAX). This doesn't seem like an ideal solution, as one would have to rebuild U-Boot to cope with such a device. Do you know how the Linux kernel EHCI driver deals with this problem? > > Signed-off-by: Gilles DOFFE <gilles.doffe@savoirfairelinux.com> > --- > drivers/usb/host/Kconfig | 7 +++++++ > drivers/usb/host/ehci-hcd.c | 2 +- > 2 files changed, 8 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig > index 30c6b69be8..62054c9c7a 100644 > --- a/drivers/usb/host/Kconfig > +++ b/drivers/usb/host/Kconfig > @@ -222,6 +222,13 @@ config USB_EHCI_FSL > select CONFIG_EHCI_HCD_INIT_AFTER_RESET > ---help--- > Enables support for the on-chip EHCI controller on FSL chips. > + > +config USB_EHCI_MAX_XFER_SIZE > + int "USB EHCI max transfer size. The default value is 65535 which > + corresponds to size_t max value (SIZE_MAX)." > + default 65535 > + range 1 65535 > + > endif # USB_EHCI_HCD > > config USB_OHCI_HCD > diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c > index 61a61abb21..8be1319079 100644 > --- a/drivers/usb/host/ehci-hcd.c > +++ b/drivers/usb/host/ehci-hcd.c > @@ -1614,7 +1614,7 @@ static int ehci_get_max_xfer_size(struct udevice *dev, size_t *size) > * EHCD can handle any transfer length as long as there is enough > * free heap space left, hence set the theoretical max number here. > */ > - *size = SIZE_MAX; > + *size = CONFIG_USB_EHCI_MAX_XFER_SIZE; > > return 0; > } >
On 10/28/19 6:35 PM, Robert Hancock wrote: > On 2019-10-25 8:30 a.m., Gilles DOFFE wrote: >> Some USB sticks cannot handle SIZE_MAX bytes (65535) blocks transfer, >> leading to 'EHCI timed out on TD' errors. >> As it is hardly predictable, this commit adds a configuration option >> to easily reduce this EHCI max transfer size. The default value is 65535 >> which corresponds to size_t max value (SIZE_MAX). > > This doesn't seem like an ideal solution, as one would have to rebuild > U-Boot to cope with such a device. Do you know how the Linux kernel EHCI > driver deals with this problem? I presume this is already fixed in u-boot-usb/next by: https://gitlab.denx.de/u-boot/custodians/u-boot-usb/commit/78d49f89e1dd9bdfa891389343bc3016bcaaeee4 https://gitlab.denx.de/u-boot/custodians/u-boot-usb/commit/b43c016256a5eb1070fbca24309e0e66590b7771 https://gitlab.denx.de/u-boot/custodians/u-boot-usb/commit/4bf7e8b7ad6231cf161fcf95d5c3cc6f1de9fff9
----- Le 28 Oct 19, à 23:46, Marek Vasut marex@denx.de a écrit : > On 10/28/19 6:35 PM, Robert Hancock wrote: >> On 2019-10-25 8:30 a.m., Gilles DOFFE wrote: >>> Some USB sticks cannot handle SIZE_MAX bytes (65535) blocks transfer, >>> leading to 'EHCI timed out on TD' errors. >>> As it is hardly predictable, this commit adds a configuration option >>> to easily reduce this EHCI max transfer size. The default value is 65535 >>> which corresponds to size_t max value (SIZE_MAX). >> >> This doesn't seem like an ideal solution, as one would have to rebuild >> U-Boot to cope with such a device. Do you know how the Linux kernel EHCI >> driver deals with this problem? > > I presume this is already fixed in u-boot-usb/next by: > https://gitlab.denx.de/u-boot/custodians/u-boot-usb/commit/78d49f89e1dd9bdfa891389343bc3016bcaaeee4 > https://gitlab.denx.de/u-boot/custodians/u-boot-usb/commit/b43c016256a5eb1070fbca24309e0e66590b7771 > https://gitlab.denx.de/u-boot/custodians/u-boot-usb/commit/4bf7e8b7ad6231cf161fcf95d5c3cc6f1de9fff9 Indeed it could solve the problem. I was not aware of this repo, so I missed it. Thanks for pointing me on it. I'll give it a try.
On 11/13/19 9:58 AM, Gilles Doffe wrote: [...] >>>> Some USB sticks cannot handle SIZE_MAX bytes (65535) blocks transfer, >>>> leading to 'EHCI timed out on TD' errors. >>>> As it is hardly predictable, this commit adds a configuration option >>>> to easily reduce this EHCI max transfer size. The default value is 65535 >>>> which corresponds to size_t max value (SIZE_MAX). >>> >>> This doesn't seem like an ideal solution, as one would have to rebuild >>> U-Boot to cope with such a device. Do you know how the Linux kernel EHCI >>> driver deals with this problem? >> >> I presume this is already fixed in u-boot-usb/next by: >> https://gitlab.denx.de/u-boot/custodians/u-boot-usb/commit/78d49f89e1dd9bdfa891389343bc3016bcaaeee4 >> https://gitlab.denx.de/u-boot/custodians/u-boot-usb/commit/b43c016256a5eb1070fbca24309e0e66590b7771 >> https://gitlab.denx.de/u-boot/custodians/u-boot-usb/commit/4bf7e8b7ad6231cf161fcf95d5c3cc6f1de9fff9 > > Indeed it could solve the problem. > I was not aware of this repo, so I missed it. It's a downstream custodian repository. The patches are now in U-Boot master as well, so you can again forget about this repository. > Thanks for pointing me on it. I'll give it a try. Great, thanks. Please let me know how it went.
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig index 30c6b69be8..62054c9c7a 100644 --- a/drivers/usb/host/Kconfig +++ b/drivers/usb/host/Kconfig @@ -222,6 +222,13 @@ config USB_EHCI_FSL select CONFIG_EHCI_HCD_INIT_AFTER_RESET ---help--- Enables support for the on-chip EHCI controller on FSL chips. + +config USB_EHCI_MAX_XFER_SIZE + int "USB EHCI max transfer size. The default value is 65535 which + corresponds to size_t max value (SIZE_MAX)." + default 65535 + range 1 65535 + endif # USB_EHCI_HCD config USB_OHCI_HCD diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 61a61abb21..8be1319079 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -1614,7 +1614,7 @@ static int ehci_get_max_xfer_size(struct udevice *dev, size_t *size) * EHCD can handle any transfer length as long as there is enough * free heap space left, hence set the theoretical max number here. */ - *size = SIZE_MAX; + *size = CONFIG_USB_EHCI_MAX_XFER_SIZE; return 0; }
Some USB sticks cannot handle SIZE_MAX bytes (65535) blocks transfer, leading to 'EHCI timed out on TD' errors. As it is hardly predictable, this commit adds a configuration option to easily reduce this EHCI max transfer size. The default value is 65535 which corresponds to size_t max value (SIZE_MAX). Signed-off-by: Gilles DOFFE <gilles.doffe@savoirfairelinux.com> --- drivers/usb/host/Kconfig | 7 +++++++ drivers/usb/host/ehci-hcd.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-)