From: T Karthik Reddy Date: Tue, 2 Nov 2021 11:46:28 +0000 (-0600) Subject: usb: dwc3: Add support to reset usb ULPI phy X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7cf60855c1bce2d543944dcbe592740af3d726c0;p=thirdparty%2Fu-boot.git usb: dwc3: Add support to reset usb ULPI phy When usb PHY initialization is done, the PHY need to be reset. In dwc3-generic driver we are requesting for corresponding modepin gpio and toggle it to reset the PHY using modepin gpio driver. Signed-off-by: T Karthik Reddy --- diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c index c80eebe9b3b..95baa067eff 100644 --- a/drivers/usb/dwc3/dwc3-generic.c +++ b/drivers/usb/dwc3/dwc3-generic.c @@ -25,6 +25,7 @@ #include #include #include +#include struct dwc3_glue_data { struct clk_bulk clks; @@ -86,10 +87,11 @@ static void dwc3_frame_length_adjustment(struct udevice *dev, struct dwc3 *dwc) static int dwc3_generic_probe(struct udevice *dev, struct dwc3_generic_priv *priv) { - int rc; + int rc, ret; struct dwc3_generic_plat *plat = dev_get_platdata(dev); struct dwc3 *dwc3 = &priv->dwc3; struct dwc3_glue_data *glue = dev_get_platdata(dev->parent); + struct gpio_desc reset_gpio; dwc3->dev = dev; dwc3->maximum_speed = plat->maximum_speed; @@ -111,6 +113,19 @@ static int dwc3_generic_probe(struct udevice *dev, if (rc && rc != -ENOTSUPP) return rc; + if (device_is_compatible(dev->parent, "xlnx,zynqmp-dwc3")) { + ret = gpio_request_by_name(dev->parent, "reset-gpios", 0, + &reset_gpio, GPIOD_ACTIVE_LOW); + if (ret != -EBUSY && ret) + return ret; + + /* Toggle ulpi to reset the phy. */ + dm_gpio_set_value(&reset_gpio, 1); + mdelay(5); + dm_gpio_set_value(&reset_gpio, 0); + mdelay(5); + } + if (device_is_compatible(dev->parent, "rockchip,rk3399-dwc3")) reset_deassert_bulk(&glue->resets);