usb: host: dwc2: force reset assert
authorPatrick Delaunay <patrick.delaunay@st.com>
Mon, 27 Apr 2020 13:30:00 +0000 (15:30 +0200)
committerMarek Vasut <marek.vasut+renesas@gmail.com>
Tue, 28 Apr 2020 11:52:52 +0000 (13:52 +0200)
Assert reset before deassert in dwc2_reset;
this patch solve issues when the DWC2 registers are already
initialized with value incompatible with host mode.

Force a hardware reset of the IP reset all the DWC2 registers at
default value, the host driver start with a clean state
(Core Soft reset doen in dwc_otg_core_reset is not enought
 to reset all register).

The error can occurs in U-Boot when DWC2 device gadget driver
force device mode (called by ums or dfu command, before to execute
the usb start command).

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
drivers/usb/host/dwc2.c

index b1b79d0a1802c537b8b6e7f3f9108af2d9ea068c..640ae3e73005a7027143d6c1abb3e76bb93bb2b9 100644 (file)
@@ -1151,6 +1151,8 @@ static int dwc2_reset(struct udevice *dev)
                        return ret;
        }
 
+       /* force reset to clear all IP register */
+       reset_assert_bulk(&priv->resets);
        ret = reset_deassert_bulk(&priv->resets);
        if (ret) {
                reset_release_bulk(&priv->resets);