During dwc2 driver probe, after gadget registration to the udc class driver, if exist any builtin function driver it immediately bound to dwc2 and after init host side (dwc2_hcd_init()) stucked in host mode. Patch postpone gadget registration after host side initialization done.
Cc: stable@vger.kernel.org Fixes: 117777b2c3bb9 ("usb: dwc2: Move gadget probe function into platform code") Reported-by: kbuild test robot lkp@intel.com Tested-by: Marek Vasut marex@denx.de
Signed-off-by: Minas Harutyunyan hminas@synopsys.com --- Changes in V2: - added module configuration check
Changed in V3: - added tag "Reported-by: kbuild test robot lkp@intel.com
drivers/usb/dwc2/gadget.c | 6 ------ drivers/usb/dwc2/platform.c | 11 +++++++++++ 2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c index 12b98b466287..7faf5f8c056d 100644 --- a/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c @@ -4920,12 +4920,6 @@ int dwc2_gadget_init(struct dwc2_hsotg *hsotg) epnum, 0); }
- ret = usb_add_gadget_udc(dev, &hsotg->gadget); - if (ret) { - dwc2_hsotg_ep_free_request(&hsotg->eps_out[0]->ep, - hsotg->ctrl_req); - return ret; - } dwc2_hsotg_dump(hsotg);
return 0; diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c index e571c8ae65ec..c347d93eae64 100644 --- a/drivers/usb/dwc2/platform.c +++ b/drivers/usb/dwc2/platform.c @@ -575,6 +575,17 @@ static int dwc2_driver_probe(struct platform_device *dev) if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) dwc2_lowlevel_hw_disable(hsotg);
+#if IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) || \ + IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE) + /* Postponed adding a new gadget to the udc class driver list */ + if (hsotg->gadget_enabled) { + retval = usb_add_gadget_udc(hsotg->dev, &hsotg->gadget); + if (retval) { + dwc2_hsotg_remove(hsotg); + goto error_init; + } + } +#endif /* CONFIG_USB_DWC2_PERIPHERAL || CONFIG_USB_DWC2_DUAL_ROLE */ return 0;
error_init:
Hi
[This is an automated email]
This commit has been processed because it contains a "Fixes:" tag fixing commit: 117777b2c3bb ("usb: dwc2: Move gadget probe function into platform code").
The bot has tested the following trees: v5.6.15, v5.4.43, v4.19.125, v4.14.182, v4.9.225, v4.4.225.
v5.6.15: Build failed! Errors: drivers/usb/dwc2/platform.c:517:4: error: label ‘error_init’ used but not defined
v5.4.43: Build failed! Errors: drivers/usb/dwc2/platform.c:517:4: error: label ‘error_init’ used but not defined
v4.19.125: Build failed! Errors: drivers/usb/dwc2/platform.c:502:4: error: label ‘error_init’ used but not defined
v4.14.182: Build failed! Errors: drivers/usb/dwc2/platform.c:462:4: error: label ‘error_init’ used but not defined
v4.9.225: Build failed! Errors: drivers/usb/dwc2/platform.c:671:4: error: label ‘error_init’ used but not defined
v4.4.225: Build failed! Errors: drivers/usb/dwc2/platform.c:462:4: error: label ‘error_init’ used but not defined
NOTE: The patch will not be queued to stable trees until it is upstream.
How should we proceed with this patch?
linux-stable-mirror@lists.linaro.org