On 2026-01-16 13:33 +01:00, Mattijs Korpershoek wrote: > Hi Kaustabh, > > Thank you for the patch. > > On Thu, Jan 08, 2026 at 18:03, Kaustabh Chakraborty <[email protected]> > wrote: > >> Documentation [1] states that the default value of the dr_mode property >> is "otg". It also isn't marked a mandatory node, so it may or may not be >> set. So, accordingly if dr_mode is not mentioned in the devicetree node, >> OTG mode must be assumed. >> >> In this driver however, this case is not handled. If dr_mode is not >> mentioned, USB_DR_MODE_UNKNOWN is set. The logic implemented raises an >> error, instead of falling back to USB_DR_MODE_OTG. Correct this to >> conform to the specification. >> >> Link: >> https://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git/tree/Bindings/usb/usb-drd.yaml?h=v6.18-dts >> [1] >> Reviewed-by: Marek Vasut <[email protected]> >> Signed-off-by: Kaustabh Chakraborty <[email protected]> > > Reviewed-by: Mattijs Korpershoek <[email protected]>
Thanks for your insight, but isn't this patch applied? This has been merged into u-boot/master already. But I don't see it in next. Confusing. > > Note: there is a similar patch submitted by Casey here: > https://lore.kernel.org/all/[email protected]/ > > Can you have a look at that one please? You could review it or test it > to see if it works for you? This patch addresses a single point of failure, unlike mine. > > Thanks! > Mattijs > >> --- >> drivers/usb/dwc3/dwc3-generic.c | 9 +++++++-- >> 1 file changed, 7 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/usb/dwc3/dwc3-generic.c >> b/drivers/usb/dwc3/dwc3-generic.c >> index c09014aec60..c15eda19e8f 100644 >> --- a/drivers/usb/dwc3/dwc3-generic.c >> +++ b/drivers/usb/dwc3/dwc3-generic.c >> @@ -10,6 +10,7 @@ >> #include <dm.h> >> #include <reset.h> >> #include <asm/gpio.h> >> +#include <dm/device_compat.h> >> #include <dm/lists.h> >> #include <linux/delay.h> >> #include <linux/usb/gadget.h> >> @@ -173,8 +174,8 @@ static int dwc3_generic_of_to_plat(struct udevice *dev) >> node = dev_ofnode(dev->parent); >> plat->dr_mode = usb_get_dr_mode(node); >> if (plat->dr_mode == USB_DR_MODE_UNKNOWN) { >> - pr_err("Invalid usb mode setup\n"); >> - return -ENODEV; >> + dev_info(dev, "No USB mode specified. Using 'otg'\n"); >> + plat->dr_mode = USB_DR_MODE_OTG; >> } >> } >> >> @@ -516,6 +517,10 @@ static int dwc3_glue_bind_common(struct udevice >> *parent, ofnode node) >> if (!dr_mode) >> dr_mode = usb_get_dr_mode(node); >> >> + /* usb mode must fallback to peripheral if not known */ >> + if (dr_mode == USB_DR_MODE_UNKNOWN) >> + dr_mode = USB_DR_MODE_OTG; >> + >> 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__); >> >> -- >> 2.52.0

