]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
Revert "usb: cdns3: use VBUS Valid to determine role for dr_mode OTG"
authorPrasanth Babu Mantena <p-mantena@ti.com>
Thu, 12 Mar 2026 13:32:47 +0000 (19:02 +0530)
committerTom Rini <trini@konsulko.com>
Fri, 3 Apr 2026 23:50:16 +0000 (17:50 -0600)
While USB DFU boot works with this patch, but the non USB boot modes like
SD Boot and flash boot fails for J784S4 EVM device.

So, Reverting this patch.

This reverts commit bfb530e06ca6c19f66c079601e568c761a001993.

Signed-off-by: Prasanth Babu Mantena <p-mantena@ti.com>
drivers/usb/cdns3/core.c
drivers/usb/cdns3/drd.c

index 10bc4cabed44adb4c15246fd418bf427af1884b0..4434dc15bec577b3a54a062320aae6e132c11925 100644 (file)
@@ -392,52 +392,6 @@ static const struct udevice_id cdns3_ids[] = {
        { },
 };
 
-/*
- * The VBUS Valid Bit in the OTG Status register can be used to determine
- * the role. When VBUS Valid is set, it indicates that a USB Host is supplying
- * power, so the Controller should assume the PERIPHERAL role. If it isn't set,
- * it indicates the absence of a USB Host, so the Controller should assume the
- * HOST role. If the OTG Status register is inaccessible, return an error.
- */
-static int cdns3_get_otg_mode(struct udevice *parent, enum usb_dr_mode *mode)
-{
-       /* Create a temporary child device for using devfdt_remap_addr_name() */
-       struct udevice child = {
-               .parent = parent,
-       };
-       struct cdns3 cdns, *cdnsp;
-       void __iomem *otg_regs;
-
-       dev_set_ofnode(&child, ofnode_first_subnode(dev_ofnode(parent)));
-       otg_regs = devfdt_remap_addr_name(&child, "otg");
-       if (!otg_regs) {
-               dev_err(parent, "failed to get otg registers for child node\n");
-               return -ENXIO;
-       }
-
-       /*
-        * As mentioned in drivers/usb/cdns3/drd.c, there are two versions
-        * of the Controller. The following logic detects the version of the
-        * Controller and interprets the register layout accordingly.
-        */
-       cdnsp = &cdns;
-       cdnsp->otg_v0_regs = otg_regs;
-       if (!readl(&cdnsp->otg_v0_regs->cmd)) {
-               cdnsp->otg_regs = otg_regs;
-       } else {
-               cdnsp->otg_v1_regs = otg_regs;
-               cdnsp->otg_regs = (void *)&cdnsp->otg_v1_regs->cmd;
-       }
-
-       /* Use VBUS Valid to determine role */
-       if (readl(&cdnsp->otg_regs->sts) & OTGSTS_VBUS_VALID)
-               *mode = USB_DR_MODE_PERIPHERAL;
-       else
-               *mode = USB_DR_MODE_HOST;
-
-       return 0;
-}
-
 int cdns3_bind(struct udevice *parent)
 {
        enum usb_dr_mode dr_mode;
@@ -459,13 +413,6 @@ int cdns3_bind(struct udevice *parent)
        if (dr_mode == USB_DR_MODE_UNKNOWN)
                dr_mode = usb_get_dr_mode(dev_ofnode(parent));
 
-       /* Use VBUS Valid to determine role */
-       if (dr_mode == USB_DR_MODE_OTG) {
-               ret = cdns3_get_otg_mode(parent, &dr_mode);
-               if (ret < 0)
-                       return ret;
-       }
-
        switch (dr_mode) {
 #if defined(CONFIG_SPL_USB_HOST) || \
        (!defined(CONFIG_XPL_BUILD) && defined(CONFIG_USB_HOST))
index 0ca40a5cc8d3ab67df3e0e5f1c74366cca982d5b..cbb1334234359e0873597f420402d5c6963859a3 100644 (file)
@@ -301,17 +301,6 @@ int cdns3_drd_init(struct cdns3 *cdns)
                cdns->dr_mode = USB_DR_MODE_PERIPHERAL;
        }
 
-       /*
-        * In the absence of STRAP configuration, use VBUS Valid to
-        * determine the appropriate role to be assigned to dr_mode.
-        */
-       if (cdns->dr_mode == USB_DR_MODE_OTG) {
-               if (cdns3_get_vbus(cdns))
-                       cdns->dr_mode = USB_DR_MODE_PERIPHERAL;
-               else
-                       cdns->dr_mode = USB_DR_MODE_HOST;
-       }
-
        state = readl(&cdns->otg_regs->sts);
        if (OTGSTS_OTG_NRDY(state) != 0) {
                dev_err(cdns->dev, "Cadence USB3 OTG device not ready\n");