[U-Boot] [PATCH] usb: fix usb_stor_read/write on DM

Marek Vasut marex at denx.de
Thu Jul 13 13:38:32 UTC 2017


On 07/13/2017 03:35 PM, Masahiro Yamada wrote:
> Prior to DM, we could not enable different types of USB controllers
> at the same time.  DM was supposed to loosen the limitation.  We can
> compile drivers, but not working.
> 
> For example, if EHCI is enabled, xHCI fails as follows:
> 
>   => usb read 82000000 0 2000
> 
>   USB read: device 0 block # 0, count 8192 ... WARN halted endpoint, queueing URB anyway.
>   Unexpected XHCI event TRB, skipping... (3fb54010 00000001 13000000 01008401)
>   BUG: failure at drivers/usb/host/xhci-ring.c:489/abort_td()!
>   BUG!
>   ### ERROR ### Please RESET the board ###
> 
> The cause of the error seems #ifdef CONFIG_USB_EHCI_HCD in
> common/usb_storage.c
> 
> To fix the problem, align USB_MAX_XFER_BLK to the lowest common
> denominator if CONFIG_DM is defined.

Meh, this is a workaround and a pretty bad one. This should be a
per-controller or even per-storage-device(?) knob. Opinions ?

> Signed-off-by: Masahiro Yamada <yamada.masahiro at socionext.com>
> ---
> 
>  common/usb_storage.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/common/usb_storage.c b/common/usb_storage.c
> index df0b05730879..fa0cf68c3353 100644
> --- a/common/usb_storage.c
> +++ b/common/usb_storage.c
> @@ -100,7 +100,7 @@ struct us_data {
>  	trans_cmnd	transport;		/* transport routine */
>  };
>  
> -#ifdef CONFIG_USB_EHCI_HCD
> +#if !defined(CONFIG_DM_USB) && defined(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
> 


-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list