On 2023-07-16 02:59, Marek Vasut wrote: > On 7/16/23 01:10, 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 >> >> Also use CONFIG_IS_ENABLED(USB_HOST) and change switch to if statements >> to improve readability of the code. >> >> Signed-off-by: Jonas Karlman <[email protected]> >> --- >> v2: >> - Change to use CONFIG_IS_ENABLED for USB_HOST >> - Refactor switch to if statements (Marek Vasut) >> >> drivers/usb/dwc3/dwc3-generic.c | 25 +++++++------------------ >> 1 file changed, 7 insertions(+), 18 deletions(-) >> >> diff --git a/drivers/usb/dwc3/dwc3-generic.c >> b/drivers/usb/dwc3/dwc3-generic.c >> index 4d5d500aefab..6507219d6fc0 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) && >> + (dr_mode == USB_DR_MODE_PERIPHERAL || dr_mode == USB_DR_MODE_OTG)) { >> debug("%s: dr_mode: OTG or Peripheral\n", __func__); >> driver = "dwc3-generic-peripheral"; >> -#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: >> + } else { >> debug("%s: unsupported dr_mode\n", __func__); > > If you are already fixing this, please also print the actual dr_mode > that is unsupported, i.e. the aforementioned debug() output is useless > right now, just add dr_mode %s there.
Sure, I can add a dr_mode %d to the debug message in a v3, dr_mode is enum not a string. Regards, Jonas

