On 3/4/22 15:45, Bin Meng wrote:
On Fri, Mar 4, 2022 at 7:36 PM T Karthik Reddy <tkart...@xilinx.com> wrote:

Hi Bin Meng,

-----Original Message-----
From: Bin Meng <bmeng...@gmail.com>
Sent: Thursday, March 3, 2022 2:18 PM
To: Michal Simek <mich...@xilinx.com>
Cc: U-Boot Mailing List <u-boot@lists.denx.de>; git <g...@xilinx.com>; T
Karthik Reddy <tkart...@xilinx.com>; Angus Ainslie <an...@akkea.ca>;
Kunihiko Hayashi <hayashi.kunih...@socionext.com>; Marek Vasut
<ma...@denx.de>; Michael Walle <mich...@walle.cc>; Priyanka Jain
<priyanka.j...@nxp.com>; Simon Glass <s...@chromium.org>
Subject: Re: [PATCH] usb: dwc3: Add support to reset usb ULPI phy

On Wed, Feb 23, 2022 at 11:07 PM Michal Simek <michal.si...@xilinx.com>
wrote:

From: T Karthik Reddy <t.karthik.re...@xilinx.com>

When usb PHY initialization is done, the PHY need to be reset.

Signed-off-by: T Karthik Reddy <t.karthik.re...@xilinx.com>
Signed-off-by: Michal Simek <michal.si...@xilinx.com>
---

  drivers/usb/dwc3/Kconfig        |  2 +-
  drivers/usb/dwc3/dwc3-generic.c | 28
++++++++++++++++++++++++++++
  2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig index
62aa65bf0cd2..685bda3729e5 100644
--- a/drivers/usb/dwc3/Kconfig
+++ b/drivers/usb/dwc3/Kconfig
@@ -25,7 +25,7 @@ config USB_DWC3_OMAP

  config USB_DWC3_GENERIC
         bool "Generic implementation of a DWC3 wrapper (aka dwc3 glue)"
-       depends on DM_USB && USB_DWC3 && MISC
+       depends on DM_USB && USB_DWC3 && MISC && DM_GPIO
         help
           Select this for Xilinx ZynqMP and similar Platforms.
           This wrapper supports Host and Peripheral operation modes.
diff --git a/drivers/usb/dwc3/dwc3-generic.c
b/drivers/usb/dwc3/dwc3-generic.c index b1e019b5b91a..17d35a6dc60c
100644
--- a/drivers/usb/dwc3/dwc3-generic.c
+++ b/drivers/usb/dwc3/dwc3-generic.c
@@ -25,6 +25,7 @@
  #include <reset.h>
  #include <clk.h>
  #include <usb/xhci.h>
+#include <asm/gpio.h>

  struct dwc3_glue_data {
         struct clk_bulk         clks;
@@ -42,6 +43,7 @@ struct dwc3_generic_priv {
         void *base;
         struct dwc3 dwc3;
         struct phy_bulk phys;
+       struct gpio_desc ulpi_reset;
  };

  struct dwc3_generic_host_priv {
@@ -77,6 +79,26 @@ static int dwc3_generic_probe(struct udevice *dev,
         if (rc && rc != -ENOTSUPP)
                 return rc;

+       if (device_is_compatible(dev->parent, "xlnx,zynqmp-dwc3")) {
+               rc = gpio_request_by_name(dev->parent, "reset-gpios", 0,
+                                         &priv->ulpi_reset, GPIOD_ACTIVE_LOW);
+               if (rc != -EBUSY && rc)
+                       return rc;

What happens if rc == -EBUSY?

Every time we do usb reset, gpio is requested again and returns EBUSY.
We want to avoid returning probe with error, if rc == -EBUSY.


What about the very first time it returns EBUSY?

Was chatting with Karthik. We have free gpio in remove function that this stayed there and we forget to remove it. It is not needed when you free gpio.

I sent v2 already.

Thanks,
Michal

Reply via email to