
On Fri, Dec 06, 2024 at 11:44:38AM +0200, Roger Quadros wrote:
On 06/12/2024 11:17, Roger Quadros wrote:
Hello Siddharth,
On 06/12/2024 09:19, Siddharth Vadapalli wrote:
[...]
- With the understanding that "dr_mode" doesn't have to be host/otg for
the compatible "snps,dwc3" which is tied to drivers/usb/host/xhci-dwc3.c, do the following to exit probe when "dr_mode" is "peripheral":
diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c index e3e0ceff43e..edfd7b97a73 100644 --- a/drivers/usb/host/xhci-dwc3.c +++ b/drivers/usb/host/xhci-dwc3.c @@ -208,6 +208,8 @@ static int xhci_dwc3_probe(struct udevice *dev) writel(reg, &dwc3_reg->g_usb2phycfg[0]);
dr_mode = usb_get_dr_mode(dev_ofnode(dev));
if (dr_mode == USB_DR_MODE_PERIPHERAL)
return -ENODEV; if (dr_mode == USB_DR_MODE_OTG && dev_read_bool(dev, "usb-role-switch")) { dr_mode = usb_get_role_switch_default_mode(dev_ofnode(dev));
which will still show "xhci-dwc3" in the output of "dm tree" after "usb start", but the driver won't be probed (absence of "+" in the "Probed" column of "dm tree" output).
I realized later that if dr_mode == USB_DR_MODE_OTG/HOST which is the case for am62a, then xhci-dwc3.c will still be probed and we have 2 drivers probed for the same controller?
Yes, that's true!
We do not want that right? So not having CONFIG_USB_XHCI_DWC3 is still required for am62*.
Yes.
Maybe we still need some Kconfig guards that prevent both CONFIG_USB_XHCI_DWC3 and USB_DWC3_GENERIC to be set together as 2 drivers will claim the controller if dr_mdoe is USB_DR_MODE_OTG or USB_DR_MODE_HOST.
Looking at the list of compatibles in dwc3-generic.c and focusing on the compatible "ti,keystone-dwc3", I see that this compatible is present in: dts/upstream/src/arm/ti/keystone/keystone.dtsi among other keystone device-tree files. The hierarchy of the nodes and compatibles for the USB Subsystem and the USB Controller in Keystone is similar to that of AM62*. The difference however is the following: A) For non AM62* devices: USB Subsystem [Wrapper] driver is dwc3-generic.c USB Controller [DWC3] driver is xhci-dwc3.c B) For AM62* devices: USB Subsystem [Wrapper] driver is dwc3-am62.c which exposes its own ".glue_configure" callback similar to what is done in dwc3-generic.c for other devices. USB Controller [DWC3] driver is xhci-dwc3.c So maybe non AM62* devices have: dwc3-generic.c for Subsystem + xhci-dwc3.c for USB Controller while AM62* devices have: dwc3-am62.c for Subsystem + dwc3-generic.c (neither Subsystem nor Controller?) + xhci-dwc3.c for USB Controller We could probably end up with the two driver situation similar to non AM62* devices if we update dwc3-generic.c to handle the configuration performed by dwc3-am62.c. But that still means we have two drivers: dwc3-generic.c and xhci-dwc3.c Maybe viewing the output of "dm tree" on a non AM62* device with both CONFIG_USB_XHCI_DWC3 and CONFIG_USB_DWC3_GENERIC enabled will let us know whether that is a valid configuration or not.
Regards, Siddharth.