[PATCH] configs: am62x_evm_*: Fix USB DFU configuration
Roger Quadros
rogerq at kernel.org
Mon Dec 9 13:32:37 CET 2024
On 06/12/2024 12:07, Siddharth Vadapalli wrote:
> 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:
>
> [...]
>
>>>> 2. 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:
note there are 2 cases here:
A1) that enable CONFIG_USB_DWC3_GENERIC
> USB Subsystem [Wrapper] driver is dwc3-generic.c
Yes.
> USB Controller [DWC3] driver is xhci-dwc3.c
No.
Note that none of the platforms that enable CONFIG_USB_DWC3_GENERIC
enable CONFIG_USB_XHCI_DWC3. They should not because dwc3-generic.c
takes care of registering the XHCI driver via xhci_register/deregister()
A2) that don't enable CONFIG_USB_DWC3_GENERIC
These are usually only interested in host mode, they enable
CONFIG_USB_XHCI_DWC3 and may also enable CONFIG_USB_XHCI_DWC3_OF_SIMPLE
So USB Wrapper/glue driver is DWC3_OF_SIMPLE
USB driver is xhci-dwc3.c
Some platforms have their own glue
CONFIG_USB_XHCI_STI dwc3-sti-glue.c
CONFIG_USB_XHCI_OCTEON dwc3-octeon-glue.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.
The Subsystem driver is still dwc3-generic.c. Glue driver is dwc3-am62.c
> USB Controller [DWC3] driver is xhci-dwc3.c
No.
We don't require CONFIG_USB_XHCI_DWC3 as XHCI registration is done
by dwc3-generic. USB Host driver is USB_XHCI_HCD.
> 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.
Enabling both is an invalid configuration and no config does it. AM62 was
doing it wrong and so we fix it with this patch.
--
cheers,
-roger
More information about the U-Boot
mailing list