From mboxrd@z Thu Jan 1 00:00:00 1970 From: Neil Armstrong Date: Fri, 26 Feb 2021 15:10:21 +0100 Subject: [PATCH v2] usb: gadget: dwc2_udc_otg: Fix dwc2_gadget_start() and usb_gadget_register_driver() In-Reply-To: <20210217091727.23923-1-patrice.chotard@foss.st.com> References: <20210217091727.23923-1-patrice.chotard@foss.st.com> Message-ID: <98a10558-98d2-46f8-6a21-c5b4eeca48b6@baylibre.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > > --- > > 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