[PATCH v2] usb: gadget: dwc2_udc_otg: Fix dwc2_gadget_start() and usb_gadget_register_driver()

Neil Armstrong narmstrong at baylibre.com
Fri Feb 26 15:10:21 CET 2021


On 17/02/2021 10:17, Patrice Chotard wrote:
> Since commit 8745b9ebccae ("usb: gadget: add super speed support")
> ums was no more functional on platform which use dwc2_udc_otg driver.
> 
> This was due to a too restrictive test which checked that the gadget
> driver speed was either FS or HS.
> 
> So all gadget driver with max speed set to speed higher than
> HS (SS in case of composite gadget driver in our case) are not
> allowed, which is wrong.
> 
> Update the speed test in usb_gadget_register_driver() and in
> dwc2_gadget_start() to allow all gadget driver speed equal or higher
> than FS.
> 
> Tested on stm32mp157c-ev1 board.
> 
> Fixes: c791c8431c34 ("usb: dwc2: convert driver to DM_USB_GADGET")
> 
> Signed-off-by: Patrice Chotard <patrice.chotard at foss.st.com>
> 
> ---
> 
> Changes in v2:
>  - update gadget driver speed test in usb_gadget_register_driver()
>    and in dwc2_gadget_start() instead of removing it completely.
> 
>  drivers/usb/gadget/dwc2_udc_otg.c | 8 ++------
>  1 file changed, 2 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c
> index ecac80fc11..2f31814442 100644
> --- a/drivers/usb/gadget/dwc2_udc_otg.c
> +++ b/drivers/usb/gadget/dwc2_udc_otg.c
> @@ -248,9 +248,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
>  
>  	debug_cond(DEBUG_SETUP != 0, "%s: %s\n", __func__, "no name");
>  
> -	if (!driver
> -	    || (driver->speed != USB_SPEED_FULL
> -		&& driver->speed != USB_SPEED_HIGH)
> +	if (!driver || driver->speed < USB_SPEED_FULL
>  	    || !driver->bind || !driver->disconnect || !driver->setup)
>  		return -EINVAL;
>  	if (!dev)
> @@ -320,9 +318,7 @@ static int dwc2_gadget_start(struct usb_gadget *g,
>  
>  	debug_cond(DEBUG_SETUP != 0, "%s: %s\n", __func__, "no name");
>  
> -	if (!driver ||
> -	    (driver->speed != USB_SPEED_FULL &&
> -	     driver->speed != USB_SPEED_HIGH) ||
> +	if (!driver || driver->speed < USB_SPEED_FULL ||
>  	    !driver->bind || !driver->disconnect || !driver->setup)
>  		return -EINVAL;
>  
> 

Thx for the fix !

Tested-by: Neil Armstrong <narmstrong at baylibre.com>


More information about the U-Boot mailing list