
Hi Marek,
Could you help to look at this patch, is there any further comment for the change?
Thanks,
- Kever
On 2023/7/17 06:35, Jonas Karlman wrote:
When dr_mode is peripheral or otg and U-Boot has not been built with DM_USB_GADGET support, booting such device may end up with:
dwc3_glue_bind_common: subnode name: usb@fcc00000 Error binding driver 'dwc3-generic-wrapper': -6 Some drivers failed to bind initcall sequence 00000000effbca08 failed at call 0000000000a217c8 (err=-6) ### ERROR ### Please RESET the board ###
Instead fail gracfully with ENODEV to allow board continue booting.
dwc3_glue_bind_common: subnode name: usb@fcc00000 dwc3_glue_bind_common: unsupported dr_mode 3
Also use CONFIG_IS_ENABLED(USB_HOST) and change switch to if statements to improve readability of the code.
Signed-off-by: Jonas Karlman jonas@kwiboo.se
v3:
- Update debug message to include dr_mode (Marek Vasut)
v2:
Change to use CONFIG_IS_ENABLED for USB_HOST
Refactor switch to if statements (Marek Vasut)
drivers/usb/dwc3/dwc3-generic.c | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-)
diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c index 4d5d500aefab..2331ac453132 100644 --- a/drivers/usb/dwc3/dwc3-generic.c +++ b/drivers/usb/dwc3/dwc3-generic.c @@ -226,8 +226,7 @@ U_BOOT_DRIVER(dwc3_generic_peripheral) = { }; #endif
-#if defined(CONFIG_SPL_USB_HOST) || \
- !defined(CONFIG_SPL_BUILD) && defined(CONFIG_USB_HOST)
+#if CONFIG_IS_ENABLED(USB_HOST) static int dwc3_generic_host_probe(struct udevice *dev) { struct xhci_hcor *hcor; @@ -409,7 +408,7 @@ struct dwc3_glue_ops ti_ops = { static int dwc3_glue_bind_common(struct udevice *parent, ofnode node) { const char *name = ofnode_get_name(node);
- const char *driver = NULL;
- const char *driver; enum usb_dr_mode dr_mode; struct udevice *dev; int ret;
@@ -421,27 +420,17 @@ static int dwc3_glue_bind_common(struct udevice *parent, ofnode node) if (!dr_mode) dr_mode = usb_get_dr_mode(node);
- switch (dr_mode) {
- case USB_DR_MODE_PERIPHERAL:
- case USB_DR_MODE_OTG:
-#if CONFIG_IS_ENABLED(DM_USB_GADGET)
- if (CONFIG_IS_ENABLED(DM_USB_GADGET) &&
debug("%s: dr_mode: OTG or Peripheral\n", __func__); driver = "dwc3-generic-peripheral";(dr_mode == USB_DR_MODE_PERIPHERAL || dr_mode == USB_DR_MODE_OTG)) {
-#endif
break;
-#if defined(CONFIG_SPL_USB_HOST) || !defined(CONFIG_SPL_BUILD)
- case USB_DR_MODE_HOST:
- } else if (CONFIG_IS_ENABLED(USB_HOST) && dr_mode == USB_DR_MODE_HOST) { debug("%s: dr_mode: HOST\n", __func__); driver = "dwc3-generic-host";
break;
-#endif
- default:
debug("%s: unsupported dr_mode\n", __func__);
- } else {
return -ENODEV;debug("%s: unsupported dr_mode %d\n", __func__, dr_mode);
- };
- if (!driver)
return -ENXIO;
}
ret = device_bind_driver_to_node(parent, driver, name, node, &dev);