All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver
@ 2018-05-25  9:32 Jean-Jacques Hiblot
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 1/7] usb: gadget: Do not call board_usb_xxx() directly in USB gadget drivers Jean-Jacques Hiblot
                   ` (7 more replies)
  0 siblings, 8 replies; 18+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25  9:32 UTC (permalink / raw)
  To: u-boot

This series aims at bringing improvements to the dwc3_generic driver so
that it can be used by most of the platforms using the dwc3 controller.

I tested this on with DRA7 and AM57x platforms for both Peripheral and Host
operations. The code to enable DM USB host & dev support for those
platforms will be submitted in a separate series.

Enhancements:
- use separate Kconfig option for DM USB Periphal and DM USB Host. This
allow platforms to keep their non-DM USB peripheral code and use the DM
USB host.
- fixes the bind/probe confusion in dwc3_generic. The probe is done when
the USB device is first needed.
- handles PHYs when in the peripheral mode. The code to handle the PHYs is
shared with the host side
- handles clock and reset
- bind host controller to the more generic driver 'xhci-dwc3'



Jean-Jacques Hiblot (7):
  usb: gadget: Do not call board_usb_xxx() directly in USB gadget
    drivers
  usb: introduce a separate config option for DM USB device
  usb: udc: implement DM versions of
    usb_gadget_initialize()/_release()/_handle_interrupt()
  dwc3_generic: do not probe the USB device driver when it's bound
  dwc3: move phy operation to core.c
  dwc3-generic: Handle the PHYs, the clocks and the reset lines
  dwc3-generic: Add select_dr_mode operation

 cmd/fastboot.c                    |   4 +-
 cmd/rockusb.c                     |   4 +-
 cmd/thordown.c                    |   4 +-
 cmd/usb_gadget_sdp.c              |   4 +-
 cmd/usb_mass_storage.c            |   4 +-
 common/dfu.c                      |   6 +-
 drivers/usb/Kconfig               |   6 ++
 drivers/usb/dwc3/Kconfig          |   7 +-
 drivers/usb/dwc3/core.c           |  86 +++++++++++++++-
 drivers/usb/dwc3/dwc3-generic.c   | 206 +++++++++++++++++++++++++++++---------
 drivers/usb/dwc3/ep0.c            |   1 -
 drivers/usb/gadget/ether.c        |  38 +------
 drivers/usb/gadget/udc/udc-core.c |  44 +++++++-
 drivers/usb/host/xhci-dwc3.c      |  93 ++---------------
 include/dwc3-uboot.h              |   7 ++
 include/linux/usb/gadget.h        |  18 ++++
 16 files changed, 348 insertions(+), 184 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 1/7] usb: gadget: Do not call board_usb_xxx() directly in USB gadget drivers
  2018-05-25  9:32 [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Jean-Jacques Hiblot
@ 2018-05-25  9:32 ` Jean-Jacques Hiblot
  2018-05-28  8:35   ` Michal Simek
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 2/7] usb: introduce a separate config option for DM USB device Jean-Jacques Hiblot
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 18+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25  9:32 UTC (permalink / raw)
  To: u-boot

Add 2 functions to wrap the calls to board_usb_init() and
board_usb_cleanup().

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---

 cmd/fastboot.c             |  4 ++--
 cmd/rockusb.c              |  4 ++--
 cmd/thordown.c             |  4 ++--
 cmd/usb_gadget_sdp.c       |  4 ++--
 cmd/usb_mass_storage.c     |  4 ++--
 common/dfu.c               |  6 +++---
 drivers/usb/gadget/ether.c | 38 +++++---------------------------------
 include/linux/usb/gadget.h | 10 ++++++++++
 8 files changed, 28 insertions(+), 46 deletions(-)

diff --git a/cmd/fastboot.c b/cmd/fastboot.c
index a5ec5f4..93f97fd 100644
--- a/cmd/fastboot.c
+++ b/cmd/fastboot.c
@@ -24,7 +24,7 @@ static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 	usb_controller = argv[1];
 	controller_index = simple_strtoul(usb_controller, NULL, 0);
 
-	ret = board_usb_init(controller_index, USB_INIT_DEVICE);
+	ret = usb_gadget_initialize(controller_index);
 	if (ret) {
 		pr_err("USB init failed: %d", ret);
 		return CMD_RET_FAILURE;
@@ -55,7 +55,7 @@ static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 exit:
 	g_dnl_unregister();
 	g_dnl_clear_detach();
-	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
+	usb_gadget_release(controller_index);
 
 	return ret;
 }
diff --git a/cmd/rockusb.c b/cmd/rockusb.c
index 8206643..e0c1480 100644
--- a/cmd/rockusb.c
+++ b/cmd/rockusb.c
@@ -33,7 +33,7 @@ static int do_rockusb(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 	dev_index = simple_strtoul(devnum, NULL, 0);
 	rockusb_dev_init(devtype, dev_index);
 
-	ret = board_usb_init(controller_index, USB_INIT_DEVICE);
+	ret = usb_gadget_initialize(controller_index);
 	if (ret) {
 		printf("USB init failed: %d\n", ret);
 		return CMD_RET_FAILURE;
@@ -62,7 +62,7 @@ static int do_rockusb(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 exit:
 	g_dnl_unregister();
 	g_dnl_clear_detach();
-	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
+	usb_gadget_release(controller_index);
 
 	return ret;
 }
diff --git a/cmd/thordown.c b/cmd/thordown.c
index e297de2..b7866d1 100644
--- a/cmd/thordown.c
+++ b/cmd/thordown.c
@@ -30,7 +30,7 @@ int do_thor_down(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		goto done;
 
 	int controller_index = simple_strtoul(usb_controller, NULL, 0);
-	ret = board_usb_init(controller_index, USB_INIT_DEVICE);
+	ret = usb_gadget_initialize(controller_index);
 	if (ret) {
 		pr_err("USB init failed: %d", ret);
 		ret = CMD_RET_FAILURE;
@@ -55,7 +55,7 @@ int do_thor_down(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 exit:
 	g_dnl_unregister();
-	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
+	usb_gadget_realease(controller_index);
 done:
 	dfu_free_entities();
 
diff --git a/cmd/usb_gadget_sdp.c b/cmd/usb_gadget_sdp.c
index ba1f66a..808ed97 100644
--- a/cmd/usb_gadget_sdp.c
+++ b/cmd/usb_gadget_sdp.c
@@ -20,7 +20,7 @@ static int do_sdp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 	char *usb_controller = argv[1];
 	int controller_index = simple_strtoul(usb_controller, NULL, 0);
-	board_usb_init(controller_index, USB_INIT_DEVICE);
+	usb_gadget_initialize(controller_index);
 
 	g_dnl_clear_detach();
 	g_dnl_register("usb_dnl_sdp");
@@ -37,7 +37,7 @@ static int do_sdp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 exit:
 	g_dnl_unregister();
-	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
+	usb_gadget_release(controller_index);
 
 	return ret;
 }
diff --git a/cmd/usb_mass_storage.c b/cmd/usb_mass_storage.c
index 89b9ddf..7c6d0c6 100644
--- a/cmd/usb_mass_storage.c
+++ b/cmd/usb_mass_storage.c
@@ -160,7 +160,7 @@ static int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
 
 	controller_index = (unsigned int)(simple_strtoul(
 				usb_controller,	NULL, 0));
-	if (board_usb_init(controller_index, USB_INIT_DEVICE)) {
+	if (usb_gadget_initialize(controller_index)) {
 		pr_err("Couldn't init USB controller.");
 		rc = CMD_RET_FAILURE;
 		goto cleanup_ums_init;
@@ -231,7 +231,7 @@ static int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
 cleanup_register:
 	g_dnl_unregister();
 cleanup_board:
-	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
+	usb_gadget_release(controller_index);
 cleanup_ums_init:
 	ums_fini();
 
diff --git a/common/dfu.c b/common/dfu.c
index 2620d32..44d1484 100644
--- a/common/dfu.c
+++ b/common/dfu.c
@@ -23,9 +23,9 @@ int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget)
 	bool dfu_reset = false;
 	int ret, i = 0;
 
-	ret = board_usb_init(usbctrl_index, USB_INIT_DEVICE);
+	ret = usb_gadget_initialize(usbctrl_index);
 	if (ret) {
-		pr_err("board usb init failed\n");
+		pr_err("usb_gadget_initialize failed\n");
 		return CMD_RET_FAILURE;
 	}
 	g_dnl_clear_detach();
@@ -84,7 +84,7 @@ int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget)
 	}
 exit:
 	g_dnl_unregister();
-	board_usb_cleanup(usbctrl_index, USB_INIT_DEVICE);
+	usb_gadget_release(usbctrl_index);
 
 	if (dfu_reset)
 		do_reset(NULL, 0, 0, NULL);
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index 8ab9b9f..1c438c3 100644
--- a/drivers/usb/gadget/ether.c
+++ b/drivers/usb/gadget/ether.c
@@ -105,9 +105,6 @@ struct eth_dev {
 	struct usb_gadget	*gadget;
 	struct usb_request	*req;		/* for control responses */
 	struct usb_request	*stat_req;	/* for cdc & rndis status */
-#ifdef CONFIG_DM_USB
-	struct udevice		*usb_udev;
-#endif
 
 	u8			config;
 	struct usb_ep		*in_ep, *out_ep, *status_ep;
@@ -2341,40 +2338,17 @@ fail:
 }
 
 /*-------------------------------------------------------------------------*/
-
-#ifdef CONFIG_DM_USB
-int dm_usb_init(struct eth_dev *e_dev)
-{
-	struct udevice *dev = NULL;
-	int ret;
-
-	ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
-	if (!dev || ret) {
-		pr_err("No USB device found\n");
-		return -ENODEV;
-	}
-
-	e_dev->usb_udev = dev;
-
-	return ret;
-}
-#endif
-
 static int _usb_eth_init(struct ether_priv *priv)
 {
 	struct eth_dev *dev = &priv->ethdev;
 	struct usb_gadget *gadget;
 	unsigned long ts;
+	int ret;
 	unsigned long timeout = USB_CONNECT_TIMEOUT;
 
-#ifdef CONFIG_DM_USB
-	if (dm_usb_init(dev)) {
-		pr_err("USB ether not found\n");
-		return -ENODEV;
-	}
-#else
-	board_usb_init(0, USB_INIT_DEVICE);
-#endif
+	ret = usb_gadget_initialize(0);
+	if (ret)
+		return ret;
 
 	/* Configure default mac-addresses for the USB ethernet device */
 #ifdef CONFIG_USBNET_DEV_ADDR
@@ -2546,9 +2520,7 @@ void _usb_eth_halt(struct ether_priv *priv)
 	}
 
 	usb_gadget_unregister_driver(&priv->eth_driver);
-#ifndef CONFIG_DM_USB
-	board_usb_cleanup(0, USB_INIT_DEVICE);
-#endif
+	usb_gadget_release(0);
 }
 
 #ifndef CONFIG_DM_ETH
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index b824f13..40ca2d3 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -19,6 +19,7 @@
 #define __LINUX_USB_GADGET_H
 
 #include <errno.h>
+#include <usb.h>
 #include <linux/compat.h>
 #include <linux/list.h>
 
@@ -926,4 +927,13 @@ extern void usb_ep_autoconfig_reset(struct usb_gadget *);
 
 extern int usb_gadget_handle_interrupts(int index);
 
+static inline int usb_gadget_initialize(int index)
+{
+	return board_usb_init(index, USB_INIT_DEVICE);
+}
+
+static inline int usb_gadget_release(int index)
+{
+	return board_usb_cleanup(index, USB_INIT_DEVICE);
+}
 #endif	/* __LINUX_USB_GADGET_H */
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 2/7] usb: introduce a separate config option for DM USB device
  2018-05-25  9:32 [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Jean-Jacques Hiblot
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 1/7] usb: gadget: Do not call board_usb_xxx() directly in USB gadget drivers Jean-Jacques Hiblot
@ 2018-05-25  9:32 ` Jean-Jacques Hiblot
  2018-05-28  8:37   ` Michal Simek
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 3/7] usb: udc: implement DM versions of usb_gadget_initialize()/_release()/_handle_interrupt() Jean-Jacques Hiblot
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 18+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25  9:32 UTC (permalink / raw)
  To: u-boot

Using CONFIG_DM_USB for this purpose prevents using DM_USB for host and not
for device.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---

 drivers/usb/Kconfig             | 6 ++++++
 drivers/usb/dwc3/core.c         | 2 +-
 drivers/usb/dwc3/dwc3-generic.c | 4 +++-
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig
index 4fbe172..3587ba4 100644
--- a/drivers/usb/Kconfig
+++ b/drivers/usb/Kconfig
@@ -47,6 +47,12 @@ config DM_USB
 	  declared with the U_BOOT_USB_DEVICE() macro and will be
 	  automatically probed when found on the bus.
 
+config DM_USB_DEV
+	bool "Enable driver model for USB (Peripheral mode)"
+	depends on DM_USB
+	help
+	  Enable driver model for USB (Peripheral mode).
+
 source "drivers/usb/host/Kconfig"
 
 source "drivers/usb/dwc3/Kconfig"
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 1ab5cee..d5ee6d9 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -789,7 +789,7 @@ MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
 MODULE_LICENSE("GPL v2");
 MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");
 
-#ifdef CONFIG_DM_USB
+#ifdef CONFIG_DM_USB_DEV
 
 int dwc3_init(struct dwc3 *dwc)
 {
diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
index ca63eac..2c1e696 100644
--- a/drivers/usb/dwc3/dwc3-generic.c
+++ b/drivers/usb/dwc3/dwc3-generic.c
@@ -21,7 +21,7 @@
 #include "gadget.h"
 #include "linux-compat.h"
 
-DECLARE_GLOBAL_DATA_PTR;
+#ifdef CONFIG_DM_USB_DEV
 
 int usb_gadget_handle_interrupts(int index)
 {
@@ -98,6 +98,8 @@ U_BOOT_DRIVER(dwc3_generic_peripheral) = {
 	.flags	= DM_FLAG_ALLOC_PRIV_DMA,
 };
 
+#endif
+
 static int dwc3_generic_bind(struct udevice *parent)
 {
 	const void *fdt = gd->fdt_blob;
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 3/7] usb: udc: implement DM versions of usb_gadget_initialize()/_release()/_handle_interrupt()
  2018-05-25  9:32 [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Jean-Jacques Hiblot
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 1/7] usb: gadget: Do not call board_usb_xxx() directly in USB gadget drivers Jean-Jacques Hiblot
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 2/7] usb: introduce a separate config option for DM USB device Jean-Jacques Hiblot
@ 2018-05-25  9:32 ` Jean-Jacques Hiblot
  2018-05-28  7:29   ` Lukasz Majewski
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 4/7] dwc3_generic: do not probe the USB device driver when it's bound Jean-Jacques Hiblot
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 18+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25  9:32 UTC (permalink / raw)
  To: u-boot

When DM_USB_DEV the platform code for the USB device must be replaced by
calls to a USB device driver.

usb_gadget_initialize() probes the USB device driver.
usb_gadget_release() removes the USB device driver.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---

 drivers/usb/dwc3/dwc3-generic.c   | 14 ++-----------
 drivers/usb/gadget/udc/udc-core.c | 44 ++++++++++++++++++++++++++++++++++++++-
 include/linux/usb/gadget.h        |  8 +++++++
 3 files changed, 53 insertions(+), 13 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
index 2c1e696..43e97be 100644
--- a/drivers/usb/dwc3/dwc3-generic.c
+++ b/drivers/usb/dwc3/dwc3-generic.c
@@ -23,19 +23,9 @@
 
 #ifdef CONFIG_DM_USB_DEV
 
-int usb_gadget_handle_interrupts(int index)
+int dm_usb_gadget_handle_interrupts(struct udevice *dev)
 {
-	struct dwc3 *priv;
-	struct udevice *dev;
-	int ret;
-
-	ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
-	if (!dev || ret) {
-		pr_err("No USB device found\n");
-		return -ENODEV;
-	}
-
-	priv = dev_get_priv(dev);
+	struct dwc3 *priv = dev_get_priv(dev);
 
 	dwc3_gadget_uboot_handle_interrupt(priv);
 
diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c
index f5c30dd..42c9ea9 100644
--- a/drivers/usb/gadget/udc/udc-core.c
+++ b/drivers/usb/gadget/udc/udc-core.c
@@ -18,7 +18,8 @@
 #include <asm/cache.h>
 #include <asm/dma-mapping.h>
 #include <common.h>
-
+#include <dm.h>
+#include <dm/device-internal.h>
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
 
@@ -351,3 +352,44 @@ EXPORT_SYMBOL_GPL(usb_gadget_unregister_driver);
 MODULE_DESCRIPTION("UDC Framework");
 MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
 MODULE_LICENSE("GPL v2");
+
+#ifdef CONFIG_DM_USB_DEV
+#define MAX_UDC_DEVICES 4
+static struct udevice *dev_array[MAX_UDC_DEVICES];
+int usb_gadget_initialize(int index)
+{
+	int ret;
+	struct udevice *dev = NULL;
+
+	if (index < 0 || index >= ARRAY_SIZE(dev_array))
+		return -EINVAL;
+	if (dev_array[index])
+		return 0;
+	ret = uclass_get_device(UCLASS_USB_DEV_GENERIC, index, &dev);
+	if (!dev || ret) {
+		pr_err("No USB device found\n");
+		return -ENODEV;
+	}
+	dev_array[index] = dev;
+	return 0;
+}
+
+int usb_gadget_release(int index)
+{
+	int ret;
+
+	if (index < 0 || index >= ARRAY_SIZE(dev_array))
+		return -EINVAL;
+	ret = device_remove(dev_array[index], DM_REMOVE_NORMAL);
+	if (!ret)
+		dev_array[index] = NULL;
+	return ret;
+}
+
+int usb_gadget_handle_interrupts(int index)
+{
+	if (index < 0 || index >= ARRAY_SIZE(dev_array))
+		return -EINVAL;
+	return dm_usb_gadget_handle_interrupts(dev_array[index]);
+}
+#endif
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 40ca2d3..a094e31 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -927,6 +927,12 @@ extern void usb_ep_autoconfig_reset(struct usb_gadget *);
 
 extern int usb_gadget_handle_interrupts(int index);
 
+#ifdef CONFIG_DM_USB_DEV
+int usb_gadget_initialize(int index);
+int usb_gadget_release(int index);
+int dm_usb_gadget_handle_interrupts(struct udevice *dev);
+#else
+#include <usb.h>
 static inline int usb_gadget_initialize(int index)
 {
 	return board_usb_init(index, USB_INIT_DEVICE);
@@ -936,4 +942,6 @@ static inline int usb_gadget_release(int index)
 {
 	return board_usb_cleanup(index, USB_INIT_DEVICE);
 }
+#endif
+
 #endif	/* __LINUX_USB_GADGET_H */
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 4/7] dwc3_generic: do not probe the USB device driver when it's bound
  2018-05-25  9:32 [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Jean-Jacques Hiblot
                   ` (2 preceding siblings ...)
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 3/7] usb: udc: implement DM versions of usb_gadget_initialize()/_release()/_handle_interrupt() Jean-Jacques Hiblot
@ 2018-05-25  9:32 ` Jean-Jacques Hiblot
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 5/7] dwc3: move phy operation to core.c Jean-Jacques Hiblot
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 18+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25  9:32 UTC (permalink / raw)
  To: u-boot

The driver will be probed when usb_gadget_initialize() is called.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---

 drivers/usb/dwc3/dwc3-generic.c | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
index 43e97be..3ec0c0e 100644
--- a/drivers/usb/dwc3/dwc3-generic.c
+++ b/drivers/usb/dwc3/dwc3-generic.c
@@ -71,21 +71,14 @@ static int dwc3_generic_peripheral_ofdata_to_platdata(struct udevice *dev)
 	return 0;
 }
 
-static int dwc3_generic_peripheral_bind(struct udevice *dev)
-{
-	return device_probe(dev);
-}
-
 U_BOOT_DRIVER(dwc3_generic_peripheral) = {
 	.name	= "dwc3-generic-peripheral",
 	.id	= UCLASS_USB_DEV_GENERIC,
 	.ofdata_to_platdata = dwc3_generic_peripheral_ofdata_to_platdata,
 	.probe = dwc3_generic_peripheral_probe,
 	.remove = dwc3_generic_peripheral_remove,
-	.bind = dwc3_generic_peripheral_bind,
 	.platdata_auto_alloc_size = sizeof(struct usb_platdata),
 	.priv_auto_alloc_size = sizeof(struct dwc3),
-	.flags	= DM_FLAG_ALLOC_PRIV_DMA,
 };
 
 #endif
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 5/7] dwc3: move phy operation to core.c
  2018-05-25  9:32 [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Jean-Jacques Hiblot
                   ` (3 preceding siblings ...)
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 4/7] dwc3_generic: do not probe the USB device driver when it's bound Jean-Jacques Hiblot
@ 2018-05-25  9:32 ` Jean-Jacques Hiblot
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 6/7] dwc3-generic: Handle the PHYs, the clocks and the reset lines Jean-Jacques Hiblot
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 18+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25  9:32 UTC (permalink / raw)
  To: u-boot

Those operations can be used for peripheral operation as well as host
operation.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---

 drivers/usb/dwc3/core.c      | 88 ++++++++++++++++++++++++++++++++++++++++-
 drivers/usb/dwc3/ep0.c       |  1 -
 drivers/usb/host/xhci-dwc3.c | 93 +++-----------------------------------------
 include/dwc3-uboot.h         |  7 ++++
 4 files changed, 99 insertions(+), 90 deletions(-)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index d5ee6d9..538c603 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -19,7 +19,7 @@
 #include <asm/dma-mapping.h>
 #include <linux/ioport.h>
 #include <dm.h>
-
+#include <generic-phy.h>
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
 
@@ -789,8 +789,92 @@ MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
 MODULE_LICENSE("GPL v2");
 MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");
 
-#ifdef CONFIG_DM_USB_DEV
+#ifdef CONFIG_DM_USB
+int dwc3_setup_phy(struct udevice *dev, struct phy **array, int *num_phys)
+{
+	int i, ret, count;
+	struct phy *usb_phys;
+
+	/* Return if no phy declared */
+	if (!dev_read_prop(dev, "phys", NULL))
+		return 0;
+
+	count = dev_count_phandle_with_args(dev, "phys", "#phy-cells");
+	if (count <= 0)
+		return count;
+
+	usb_phys = devm_kcalloc(dev, count, sizeof(struct phy),
+				GFP_KERNEL);
+	if (!usb_phys)
+		return -ENOMEM;
+
+	for (i = 0; i < count; i++) {
+		ret = generic_phy_get_by_index(dev, i, &usb_phys[i]);
+		if (ret && ret != -ENOENT) {
+			pr_err("Failed to get USB PHY%d for %s\n",
+			       i, dev->name);
+			return ret;
+		}
+	}
+
+	for (i = 0; i < count; i++) {
+		ret = generic_phy_init(&usb_phys[i]);
+		if (ret) {
+			pr_err("Can't init USB PHY%d for %s\n",
+			       i, dev->name);
+			goto phys_init_err;
+		}
+	}
+
+	for (i = 0; i < count; i++) {
+		ret = generic_phy_power_on(&usb_phys[i]);
+		if (ret) {
+			pr_err("Can't power USB PHY%d for %s\n",
+			       i, dev->name);
+			goto phys_poweron_err;
+		}
+	}
+
+	*num_phys =  count;
+	return 0;
 
+phys_poweron_err:
+	for (i = count - 1; i >= 0; i--)
+		generic_phy_power_off(&usb_phys[i]);
+
+	for (i = 0; i < count; i++)
+		generic_phy_exit(&usb_phys[i]);
+
+	return ret;
+
+phys_init_err:
+	for (; i >= 0; i--)
+		generic_phy_exit(&usb_phys[i]);
+
+	return ret;
+}
+
+int dwc3_shutdown_phy(struct udevice *dev, struct phy *usb_phys, int num_phys)
+{
+	int i, ret;
+
+	for (i = 0; i < num_phys; i++) {
+		if (!generic_phy_valid(&usb_phys[i]))
+			continue;
+
+		ret = generic_phy_power_off(&usb_phys[i]);
+		ret |= generic_phy_exit(&usb_phys[i]);
+		if (ret) {
+			pr_err("Can't shutdown USB PHY%d for %s\n",
+			       i, dev->name);
+		}
+	}
+
+	return 0;
+}
+#endif
+
+#ifdef CONFIG_DM_USB_DEV
 int dwc3_init(struct dwc3 *dwc)
 {
 	int ret;
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
index 4f68887..433e5f6 100644
--- a/drivers/usb/dwc3/ep0.c
+++ b/drivers/usb/dwc3/ep0.c
@@ -19,7 +19,6 @@
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
 #include <linux/usb/composite.h>
-
 #include "core.h"
 #include "gadget.h"
 #include "io.h"
diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
index 80754d7..052e704 100644
--- a/drivers/usb/host/xhci-dwc3.c
+++ b/drivers/usb/host/xhci-dwc3.c
@@ -12,6 +12,7 @@
 #include <fdtdec.h>
 #include <generic-phy.h>
 #include <usb.h>
+#include <dwc3-uboot.h>
 
 #include "xhci.h"
 #include <asm/io.h>
@@ -110,104 +111,20 @@ void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val)
 }
 
 #ifdef CONFIG_DM_USB
-static int xhci_dwc3_setup_phy(struct udevice *dev)
-{
-	struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
-	int i, ret, count;
-
-	/* Return if no phy declared */
-	if (!dev_read_prop(dev, "phys", NULL))
-		return 0;
-
-	count = dev_count_phandle_with_args(dev, "phys", "#phy-cells");
-	if (count <= 0)
-		return count;
-
-	plat->usb_phys = devm_kcalloc(dev, count, sizeof(struct phy),
-				      GFP_KERNEL);
-	if (!plat->usb_phys)
-		return -ENOMEM;
-
-	for (i = 0; i < count; i++) {
-		ret = generic_phy_get_by_index(dev, i, &plat->usb_phys[i]);
-		if (ret && ret != -ENOENT) {
-			pr_err("Failed to get USB PHY%d for %s\n",
-			       i, dev->name);
-			return ret;
-		}
-
-		++plat->num_phys;
-	}
-
-	for (i = 0; i < plat->num_phys; i++) {
-		ret = generic_phy_init(&plat->usb_phys[i]);
-		if (ret) {
-			pr_err("Can't init USB PHY%d for %s\n",
-			       i, dev->name);
-			goto phys_init_err;
-		}
-	}
-
-	for (i = 0; i < plat->num_phys; i++) {
-		ret = generic_phy_power_on(&plat->usb_phys[i]);
-		if (ret) {
-			pr_err("Can't power USB PHY%d for %s\n",
-			       i, dev->name);
-			goto phys_poweron_err;
-		}
-	}
-
-	return 0;
-
-phys_poweron_err:
-	for (; i >= 0; i--)
-		generic_phy_power_off(&plat->usb_phys[i]);
-
-	for (i = 0; i < plat->num_phys; i++)
-		generic_phy_exit(&plat->usb_phys[i]);
-
-	return ret;
-
-phys_init_err:
-	for (; i >= 0; i--)
-		generic_phy_exit(&plat->usb_phys[i]);
-
-	return ret;
-}
-
-static int xhci_dwc3_shutdown_phy(struct udevice *dev)
-{
-	struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
-	int i, ret;
-
-	for (i = 0; i < plat->num_phys; i++) {
-		if (!generic_phy_valid(&plat->usb_phys[i]))
-			continue;
-
-		ret = generic_phy_power_off(&plat->usb_phys[i]);
-		ret |= generic_phy_exit(&plat->usb_phys[i]);
-		if (ret) {
-			pr_err("Can't shutdown USB PHY%d for %s\n",
-			       i, dev->name);
-		}
-	}
-
-	return 0;
-}
-
 static int xhci_dwc3_probe(struct udevice *dev)
 {
 	struct xhci_hcor *hcor;
 	struct xhci_hccr *hccr;
 	struct dwc3 *dwc3_reg;
 	enum usb_dr_mode dr_mode;
+	struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
 	int ret;
 
 	hccr = (struct xhci_hccr *)((uintptr_t)dev_read_addr(dev));
 	hcor = (struct xhci_hcor *)((uintptr_t)hccr +
 			HC_LENGTH(xhci_readl(&(hccr)->cr_capbase)));
 
-	ret = xhci_dwc3_setup_phy(dev);
+	ret = dwc3_setup_phy(dev, &plat->usb_phys, &plat->num_phys);
 	if (ret)
 		return ret;
 
@@ -227,7 +144,9 @@ static int xhci_dwc3_probe(struct udevice *dev)
 
 static int xhci_dwc3_remove(struct udevice *dev)
 {
-	xhci_dwc3_shutdown_phy(dev);
+	struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
+
+	dwc3_shutdown_phy(dev, plat->usb_phys, plat->num_phys);
 
 	return xhci_deregister(dev);
 }
diff --git a/include/dwc3-uboot.h b/include/dwc3-uboot.h
index 228ab3b..a2da081 100644
--- a/include/dwc3-uboot.h
+++ b/include/dwc3-uboot.h
@@ -38,4 +38,11 @@ struct dwc3_device {
 int dwc3_uboot_init(struct dwc3_device *dev);
 void dwc3_uboot_exit(int index);
 void dwc3_uboot_handle_interrupt(int index);
+
+#ifdef CONFIG_DM_USB
+struct phy;
+int dwc3_setup_phy(struct udevice *dev, struct phy **array, int *num_phys);
+int dwc3_shutdown_phy(struct udevice *dev, struct phy *usb_phys, int num_phys);
+#endif
+
 #endif /* __DWC3_UBOOT_H_ */
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 6/7] dwc3-generic: Handle the PHYs, the clocks and the reset lines
  2018-05-25  9:32 [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Jean-Jacques Hiblot
                   ` (4 preceding siblings ...)
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 5/7] dwc3: move phy operation to core.c Jean-Jacques Hiblot
@ 2018-05-25  9:32 ` Jean-Jacques Hiblot
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 7/7] dwc3-generic: Add select_dr_mode operation Jean-Jacques Hiblot
  2018-05-28  8:32 ` [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Michal Simek
  7 siblings, 0 replies; 18+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25  9:32 UTC (permalink / raw)
  To: u-boot

This make the driver more generic. At this point this driver can replace
the dwc3-of-simple implementation.
Make the description in the Kconfig more generic too.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
---

 drivers/usb/dwc3/Kconfig        |   7 +-
 drivers/usb/dwc3/dwc3-generic.c | 159 +++++++++++++++++++++++++++++++++-------
 2 files changed, 136 insertions(+), 30 deletions(-)

diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig
index 943b763..bbd8105 100644
--- a/drivers/usb/dwc3/Kconfig
+++ b/drivers/usb/dwc3/Kconfig
@@ -38,10 +38,11 @@ config USB_DWC3_OMAP
 	  Say 'Y' here if you have one such device
 
 config USB_DWC3_GENERIC
-	bool "Xilinx ZynqMP and similar Platforms"
-	depends on DM_USB && USB_DWC3
+	bool "Generic implementation of a DWC3 wrapper (aka dwc3 glue)"
+	depends on DM_USB && USB_DWC3 && MISC
 	help
-	  Some platforms can reuse this DWC3 generic implementation.
+	  Select this for Xilinx ZynqMP and similar Platforms.
+	  This wrapper supports Host and Peripheral operation modes.
 
 config USB_DWC3_UNIPHIER
 	bool "DesignWare USB3 Host Support on UniPhier Platforms"
diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
index 3ec0c0e..977f310 100644
--- a/drivers/usb/dwc3/dwc3-generic.c
+++ b/drivers/usb/dwc3/dwc3-generic.c
@@ -11,59 +11,85 @@
 #include <dm.h>
 #include <dm/device-internal.h>
 #include <dm/lists.h>
-#include <linux/usb/otg.h>
-#include <linux/compat.h>
+#include <dwc3-uboot.h>
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
 #include <malloc.h>
 #include <usb.h>
 #include "core.h"
 #include "gadget.h"
-#include "linux-compat.h"
+#include <reset.h>
+#include <clk.h>
 
 #ifdef CONFIG_DM_USB_DEV
 
+struct dwc3_generic_peripheral {
+	struct dwc3 dwc3;
+	struct phy *phys;
+	int num_phys;
+};
+
 int dm_usb_gadget_handle_interrupts(struct udevice *dev)
 {
-	struct dwc3 *priv = dev_get_priv(dev);
+	struct dwc3_generic_peripheral *priv = dev_get_priv(dev);
+	struct dwc3 *dwc3 = &priv->dwc3;
 
-	dwc3_gadget_uboot_handle_interrupt(priv);
+	dwc3_gadget_uboot_handle_interrupt(dwc3);
 
 	return 0;
 }
 
 static int dwc3_generic_peripheral_probe(struct udevice *dev)
 {
-	struct dwc3 *priv = dev_get_priv(dev);
+	int rc;
+	struct dwc3_generic_peripheral *priv = dev_get_priv(dev);
+	struct dwc3 *dwc3 = &priv->dwc3;
+
+	rc = dwc3_setup_phy(dev, &priv->phys, &priv->num_phys);
+	if (rc)
+		return rc;
+
+	dwc3->regs = map_physmem(priv->base, DWC3_OTG_REGS_END, MAP_NOCACHE);
+	dwc3->regs += DWC3_GLOBALS_REGS_START;
+	dwc3->dev = dev;
+
+	rc =  dwc3_init(dwc3);
+	if (rc) {
+		unmap_physmem(dwc3->regs, MAP_NOCACHE);
+		return rc;
+	}
 
-	return dwc3_init(priv);
+	return 0;
 }
 
 static int dwc3_generic_peripheral_remove(struct udevice *dev)
 {
-	struct dwc3 *priv = dev_get_priv(dev);
+	struct dwc3_generic_peripheral *priv = dev_get_priv(dev);
+	struct dwc3 *dwc3 = &priv->dwc3;
 
-	dwc3_remove(priv);
+	dwc3_remove(dwc3);
+	dwc3_shutdown_phy(dev, priv->phys, priv->num_phys);
+	unmap_physmem(dwc3->regs, MAP_NOCACHE);
 
 	return 0;
 }
 
 static int dwc3_generic_peripheral_ofdata_to_platdata(struct udevice *dev)
 {
-	struct dwc3 *priv = dev_get_priv(dev);
+	struct dwc3_generic_peripheral *priv = dev_get_priv(dev);
+	struct dwc3 *dwc3 = &priv->dwc3;
 	int node = dev_of_offset(dev);
 
-	priv->regs = (void *)devfdt_get_addr(dev);
-	priv->regs += DWC3_GLOBALS_REGS_START;
+	priv->base = devfdt_get_addr(dev);
 
-	priv->maximum_speed = usb_get_maximum_speed(node);
-	if (priv->maximum_speed == USB_SPEED_UNKNOWN) {
+	dwc3->maximum_speed = usb_get_maximum_speed(node);
+	if (dwc3->maximum_speed == USB_SPEED_UNKNOWN) {
 		pr_err("Invalid usb maximum speed\n");
 		return -ENODEV;
 	}
 
-	priv->dr_mode = usb_get_dr_mode(node);
-	if (priv->dr_mode == USB_DR_MODE_UNKNOWN) {
+	dwc3->dr_mode = usb_get_dr_mode(node);
+	if (dwc3->dr_mode == USB_DR_MODE_UNKNOWN) {
 		pr_err("Invalid usb mode setup\n");
 		return -ENODEV;
 	}
@@ -77,13 +103,16 @@ U_BOOT_DRIVER(dwc3_generic_peripheral) = {
 	.ofdata_to_platdata = dwc3_generic_peripheral_ofdata_to_platdata,
 	.probe = dwc3_generic_peripheral_probe,
 	.remove = dwc3_generic_peripheral_remove,
-	.platdata_auto_alloc_size = sizeof(struct usb_platdata),
-	.priv_auto_alloc_size = sizeof(struct dwc3),
+	.priv_auto_alloc_size = sizeof(struct dwc3_generic_peripheral),
 };
-
 #endif
 
-static int dwc3_generic_bind(struct udevice *parent)
+struct dwc3_glue_data {
+	struct clk_bulk		clks;
+	struct reset_ctl_bulk	resets;
+};
+
+static int dwc3_glue_bind(struct udevice *parent)
 {
 	const void *fdt = gd->fdt_blob;
 	int node;
@@ -94,29 +123,32 @@ static int dwc3_generic_bind(struct udevice *parent)
 		const char *name = fdt_get_name(fdt, node, NULL);
 		enum usb_dr_mode dr_mode;
 		struct udevice *dev;
-		const char *driver;
+		const char *driver = NULL;
 
 		debug("%s: subnode name: %s\n", __func__, name);
-		if (strncmp(name, "dwc3@", 4))
-			continue;
 
 		dr_mode = usb_get_dr_mode(node);
 
 		switch (dr_mode) {
 		case USB_DR_MODE_PERIPHERAL:
 		case USB_DR_MODE_OTG:
+#ifdef CONFIG_DM_USB_DEV
 			debug("%s: dr_mode: OTG or Peripheral\n", __func__);
 			driver = "dwc3-generic-peripheral";
+#endif
 			break;
 		case USB_DR_MODE_HOST:
 			debug("%s: dr_mode: HOST\n", __func__);
-			driver = "dwc3-generic-host";
+			driver = "xhci-dwc3";
 			break;
 		default:
 			debug("%s: unsupported dr_mode\n", __func__);
 			return -ENODEV;
 		};
 
+		if (!driver)
+			continue;
+
 		ret = device_bind_driver_to_node(parent, driver, name,
 						 offset_to_ofnode(node), &dev);
 		if (ret) {
@@ -129,7 +161,76 @@ static int dwc3_generic_bind(struct udevice *parent)
 	return 0;
 }
 
-static const struct udevice_id dwc3_generic_ids[] = {
+static int dwc3_glue_reset_init(struct udevice *dev,
+				struct dwc3_glue_data *glue)
+{
+	int ret;
+
+	ret = reset_get_bulk(dev, &glue->resets);
+	if (ret == -ENOTSUPP)
+		return 0;
+	else if (ret)
+		return ret;
+
+	ret = reset_deassert_bulk(&glue->resets);
+	if (ret) {
+		reset_release_bulk(&glue->resets);
+		return ret;
+	}
+
+	return 0;
+}
+
+static int dwc3_glue_clk_init(struct udevice *dev,
+			      struct dwc3_glue_data *glue)
+{
+	int ret;
+
+	ret = clk_get_bulk(dev, &glue->clks);
+	if (ret == -ENOSYS)
+		return 0;
+	if (ret)
+		return ret;
+
+#if CONFIG_IS_ENABLED(CLK)
+	ret = clk_enable_bulk(&glue->clks);
+	if (ret) {
+		clk_release_bulk(&glue->clks);
+		return ret;
+	}
+#endif
+
+	return 0;
+}
+
+static int dwc3_glue_probe(struct udevice *dev)
+{
+	struct dwc3_glue_data *glue = dev_get_platdata(dev);
+	int ret;
+
+	ret = dwc3_glue_clk_init(dev, glue);
+	if (ret)
+		return ret;
+
+	ret = dwc3_glue_reset_init(dev, glue);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+static int dwc3_glue_remove(struct udevice *dev)
+{
+	struct dwc3_glue_data *glue = dev_get_platdata(dev);
+
+	reset_release_bulk(&glue->resets);
+
+	clk_release_bulk(&glue->clks);
+
+	return dm_scan_fdt_dev(dev);
+}
+
+static const struct udevice_id dwc3_glue_ids[] = {
 	{ .compatible = "xlnx,zynqmp-dwc3" },
 	{ }
 };
@@ -137,6 +238,10 @@ static const struct udevice_id dwc3_generic_ids[] = {
 U_BOOT_DRIVER(dwc3_generic_wrapper) = {
 	.name	= "dwc3-generic-wrapper",
 	.id	= UCLASS_MISC,
-	.of_match = dwc3_generic_ids,
-	.bind = dwc3_generic_bind,
+	.of_match = dwc3_glue_ids,
+	.bind = dwc3_glue_bind,
+	.probe = dwc3_glue_probe,
+	.remove = dwc3_glue_remove,
+	.platdata_auto_alloc_size = sizeof(struct dwc3_glue_data),
+
 };
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 7/7] dwc3-generic: Add select_dr_mode operation
  2018-05-25  9:32 [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Jean-Jacques Hiblot
                   ` (5 preceding siblings ...)
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 6/7] dwc3-generic: Handle the PHYs, the clocks and the reset lines Jean-Jacques Hiblot
@ 2018-05-25  9:32 ` Jean-Jacques Hiblot
  2018-05-28  8:32 ` [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Michal Simek
  7 siblings, 0 replies; 18+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-25  9:32 UTC (permalink / raw)
  To: u-boot

The select_dr_mode operation is executed when the glue driver is probed.
The role of this optional function is to configure the operating mode
of the controller at the glue level.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>

---

 drivers/usb/dwc3/dwc3-generic.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
index 977f310..9227501 100644
--- a/drivers/usb/dwc3/dwc3-generic.c
+++ b/drivers/usb/dwc3/dwc3-generic.c
@@ -8,6 +8,7 @@
  */
 
 #include <common.h>
+#include <asm-generic/io.h>
 #include <dm.h>
 #include <dm/device-internal.h>
 #include <dm/lists.h>
@@ -110,6 +111,12 @@ U_BOOT_DRIVER(dwc3_generic_peripheral) = {
 struct dwc3_glue_data {
 	struct clk_bulk		clks;
 	struct reset_ctl_bulk	resets;
+	fdt_addr_t regs;
+};
+
+struct dwc3_glue_ops {
+	void (*select_dr_mode)(struct udevice *dev, int index,
+			       enum usb_dr_mode mode);
 };
 
 static int dwc3_glue_bind(struct udevice *parent)
@@ -205,9 +212,14 @@ static int dwc3_glue_clk_init(struct udevice *dev,
 
 static int dwc3_glue_probe(struct udevice *dev)
 {
+	struct dwc3_glue_ops *ops = (struct dwc3_glue_ops *)dev_get_driver_data(dev);
 	struct dwc3_glue_data *glue = dev_get_platdata(dev);
+	struct udevice *child = NULL;
+	int index = 0;
 	int ret;
 
+	glue->regs = dev_read_addr(dev);
+
 	ret = dwc3_glue_clk_init(dev, glue);
 	if (ret)
 		return ret;
@@ -216,6 +228,20 @@ static int dwc3_glue_probe(struct udevice *dev)
 	if (ret)
 		return ret;
 
+	ret = device_find_first_child(dev, &child);
+	if (ret)
+		return ret;
+
+	while (child) {
+		enum usb_dr_mode dr_mode;
+
+		dr_mode = usb_get_dr_mode(dev_of_offset(child));
+		device_find_next_child(&child);
+		if (ops && ops->select_dr_mode)
+			ops->select_dr_mode(dev, index, dr_mode);
+		index++;
+	}
+
 	return 0;
 }
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 3/7] usb: udc: implement DM versions of usb_gadget_initialize()/_release()/_handle_interrupt()
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 3/7] usb: udc: implement DM versions of usb_gadget_initialize()/_release()/_handle_interrupt() Jean-Jacques Hiblot
@ 2018-05-28  7:29   ` Lukasz Majewski
  0 siblings, 0 replies; 18+ messages in thread
From: Lukasz Majewski @ 2018-05-28  7:29 UTC (permalink / raw)
  To: u-boot

On Fri, 25 May 2018 11:32:38 +0200
Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:

> When DM_USB_DEV the platform code for the USB device must be replaced
> by calls to a USB device driver.
> 
> usb_gadget_initialize() probes the USB device driver.
> usb_gadget_release() removes the USB device driver.
> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>

Reviewed-by: Lukasz Majewski <lukma@denx.de>

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180528/05643238/attachment.sig>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver
  2018-05-25  9:32 [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Jean-Jacques Hiblot
                   ` (6 preceding siblings ...)
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 7/7] dwc3-generic: Add select_dr_mode operation Jean-Jacques Hiblot
@ 2018-05-28  8:32 ` Michal Simek
  2018-05-28  9:47   ` Jean-Jacques Hiblot
  7 siblings, 1 reply; 18+ messages in thread
From: Michal Simek @ 2018-05-28  8:32 UTC (permalink / raw)
  To: u-boot

Hi Jean,

On 25.5.2018 11:32, Jean-Jacques Hiblot wrote:
> This series aims at bringing improvements to the dwc3_generic driver so
> that it can be used by most of the platforms using the dwc3 controller.
> 
> I tested this on with DRA7 and AM57x platforms for both Peripheral and Host
> operations. The code to enable DM USB host & dev support for those
> platforms will be submitted in a separate series.
> 
> Enhancements:
> - use separate Kconfig option for DM USB Periphal and DM USB Host. This
> allow platforms to keep their non-DM USB peripheral code and use the DM
> USB host.
> - fixes the bind/probe confusion in dwc3_generic. The probe is done when
> the USB device is first needed.
> - handles PHYs when in the peripheral mode. The code to handle the PHYs is
> shared with the host side
> - handles clock and reset
> - bind host controller to the more generic driver 'xhci-dwc3'

I see two series which were sent recently without any description of
dependencies.
Will be good to push these patches somewhere to git and send a link that
I can easily test.

Thanks,
Michal

> 
> 
> 
> Jean-Jacques Hiblot (7):
>   usb: gadget: Do not call board_usb_xxx() directly in USB gadget
>     drivers
>   usb: introduce a separate config option for DM USB device
>   usb: udc: implement DM versions of
>     usb_gadget_initialize()/_release()/_handle_interrupt()
>   dwc3_generic: do not probe the USB device driver when it's bound
>   dwc3: move phy operation to core.c
>   dwc3-generic: Handle the PHYs, the clocks and the reset lines
>   dwc3-generic: Add select_dr_mode operation
> 
>  cmd/fastboot.c                    |   4 +-
>  cmd/rockusb.c                     |   4 +-
>  cmd/thordown.c                    |   4 +-
>  cmd/usb_gadget_sdp.c              |   4 +-
>  cmd/usb_mass_storage.c            |   4 +-
>  common/dfu.c                      |   6 +-
>  drivers/usb/Kconfig               |   6 ++
>  drivers/usb/dwc3/Kconfig          |   7 +-
>  drivers/usb/dwc3/core.c           |  86 +++++++++++++++-
>  drivers/usb/dwc3/dwc3-generic.c   | 206 +++++++++++++++++++++++++++++---------
>  drivers/usb/dwc3/ep0.c            |   1 -
>  drivers/usb/gadget/ether.c        |  38 +------
>  drivers/usb/gadget/udc/udc-core.c |  44 +++++++-
>  drivers/usb/host/xhci-dwc3.c      |  93 ++---------------
>  include/dwc3-uboot.h              |   7 ++
>  include/linux/usb/gadget.h        |  18 ++++
>  16 files changed, 348 insertions(+), 184 deletions(-)
> 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 1/7] usb: gadget: Do not call board_usb_xxx() directly in USB gadget drivers
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 1/7] usb: gadget: Do not call board_usb_xxx() directly in USB gadget drivers Jean-Jacques Hiblot
@ 2018-05-28  8:35   ` Michal Simek
  2018-05-29  7:41     ` Jean-Jacques Hiblot
  0 siblings, 1 reply; 18+ messages in thread
From: Michal Simek @ 2018-05-28  8:35 UTC (permalink / raw)
  To: u-boot

On 25.5.2018 11:32, Jean-Jacques Hiblot wrote:
> Add 2 functions to wrap the calls to board_usb_init() and
> board_usb_cleanup().

Here should be written why you need this change.

M

> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> ---
> 
>  cmd/fastboot.c             |  4 ++--
>  cmd/rockusb.c              |  4 ++--
>  cmd/thordown.c             |  4 ++--
>  cmd/usb_gadget_sdp.c       |  4 ++--
>  cmd/usb_mass_storage.c     |  4 ++--
>  common/dfu.c               |  6 +++---
>  drivers/usb/gadget/ether.c | 38 +++++---------------------------------
>  include/linux/usb/gadget.h | 10 ++++++++++
>  8 files changed, 28 insertions(+), 46 deletions(-)
> 
> diff --git a/cmd/fastboot.c b/cmd/fastboot.c
> index a5ec5f4..93f97fd 100644
> --- a/cmd/fastboot.c
> +++ b/cmd/fastboot.c
> @@ -24,7 +24,7 @@ static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>  	usb_controller = argv[1];
>  	controller_index = simple_strtoul(usb_controller, NULL, 0);
>  
> -	ret = board_usb_init(controller_index, USB_INIT_DEVICE);
> +	ret = usb_gadget_initialize(controller_index);
>  	if (ret) {
>  		pr_err("USB init failed: %d", ret);
>  		return CMD_RET_FAILURE;
> @@ -55,7 +55,7 @@ static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>  exit:
>  	g_dnl_unregister();
>  	g_dnl_clear_detach();
> -	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
> +	usb_gadget_release(controller_index);
>  
>  	return ret;
>  }
> diff --git a/cmd/rockusb.c b/cmd/rockusb.c
> index 8206643..e0c1480 100644
> --- a/cmd/rockusb.c
> +++ b/cmd/rockusb.c
> @@ -33,7 +33,7 @@ static int do_rockusb(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>  	dev_index = simple_strtoul(devnum, NULL, 0);
>  	rockusb_dev_init(devtype, dev_index);
>  
> -	ret = board_usb_init(controller_index, USB_INIT_DEVICE);
> +	ret = usb_gadget_initialize(controller_index);
>  	if (ret) {
>  		printf("USB init failed: %d\n", ret);
>  		return CMD_RET_FAILURE;
> @@ -62,7 +62,7 @@ static int do_rockusb(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>  exit:
>  	g_dnl_unregister();
>  	g_dnl_clear_detach();
> -	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
> +	usb_gadget_release(controller_index);
>  
>  	return ret;
>  }
> diff --git a/cmd/thordown.c b/cmd/thordown.c
> index e297de2..b7866d1 100644
> --- a/cmd/thordown.c
> +++ b/cmd/thordown.c
> @@ -30,7 +30,7 @@ int do_thor_down(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  		goto done;
>  
>  	int controller_index = simple_strtoul(usb_controller, NULL, 0);
> -	ret = board_usb_init(controller_index, USB_INIT_DEVICE);
> +	ret = usb_gadget_initialize(controller_index);
>  	if (ret) {
>  		pr_err("USB init failed: %d", ret);
>  		ret = CMD_RET_FAILURE;
> @@ -55,7 +55,7 @@ int do_thor_down(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  
>  exit:
>  	g_dnl_unregister();
> -	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
> +	usb_gadget_realease(controller_index);
>  done:
>  	dfu_free_entities();
>  
> diff --git a/cmd/usb_gadget_sdp.c b/cmd/usb_gadget_sdp.c
> index ba1f66a..808ed97 100644
> --- a/cmd/usb_gadget_sdp.c
> +++ b/cmd/usb_gadget_sdp.c
> @@ -20,7 +20,7 @@ static int do_sdp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  
>  	char *usb_controller = argv[1];
>  	int controller_index = simple_strtoul(usb_controller, NULL, 0);
> -	board_usb_init(controller_index, USB_INIT_DEVICE);
> +	usb_gadget_initialize(controller_index);
>  
>  	g_dnl_clear_detach();
>  	g_dnl_register("usb_dnl_sdp");
> @@ -37,7 +37,7 @@ static int do_sdp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  
>  exit:
>  	g_dnl_unregister();
> -	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
> +	usb_gadget_release(controller_index);
>  
>  	return ret;
>  }
> diff --git a/cmd/usb_mass_storage.c b/cmd/usb_mass_storage.c
> index 89b9ddf..7c6d0c6 100644
> --- a/cmd/usb_mass_storage.c
> +++ b/cmd/usb_mass_storage.c
> @@ -160,7 +160,7 @@ static int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
>  
>  	controller_index = (unsigned int)(simple_strtoul(
>  				usb_controller,	NULL, 0));
> -	if (board_usb_init(controller_index, USB_INIT_DEVICE)) {
> +	if (usb_gadget_initialize(controller_index)) {
>  		pr_err("Couldn't init USB controller.");
>  		rc = CMD_RET_FAILURE;
>  		goto cleanup_ums_init;
> @@ -231,7 +231,7 @@ static int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
>  cleanup_register:
>  	g_dnl_unregister();
>  cleanup_board:
> -	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
> +	usb_gadget_release(controller_index);
>  cleanup_ums_init:
>  	ums_fini();
>  
> diff --git a/common/dfu.c b/common/dfu.c
> index 2620d32..44d1484 100644
> --- a/common/dfu.c
> +++ b/common/dfu.c
> @@ -23,9 +23,9 @@ int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget)
>  	bool dfu_reset = false;
>  	int ret, i = 0;
>  
> -	ret = board_usb_init(usbctrl_index, USB_INIT_DEVICE);
> +	ret = usb_gadget_initialize(usbctrl_index);
>  	if (ret) {
> -		pr_err("board usb init failed\n");
> +		pr_err("usb_gadget_initialize failed\n");
>  		return CMD_RET_FAILURE;
>  	}
>  	g_dnl_clear_detach();
> @@ -84,7 +84,7 @@ int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget)
>  	}
>  exit:
>  	g_dnl_unregister();
> -	board_usb_cleanup(usbctrl_index, USB_INIT_DEVICE);
> +	usb_gadget_release(usbctrl_index);
>  
>  	if (dfu_reset)
>  		do_reset(NULL, 0, 0, NULL);
> diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
> index 8ab9b9f..1c438c3 100644
> --- a/drivers/usb/gadget/ether.c
> +++ b/drivers/usb/gadget/ether.c
> @@ -105,9 +105,6 @@ struct eth_dev {
>  	struct usb_gadget	*gadget;
>  	struct usb_request	*req;		/* for control responses */
>  	struct usb_request	*stat_req;	/* for cdc & rndis status */
> -#ifdef CONFIG_DM_USB
> -	struct udevice		*usb_udev;
> -#endif
>  
>  	u8			config;
>  	struct usb_ep		*in_ep, *out_ep, *status_ep;
> @@ -2341,40 +2338,17 @@ fail:
>  }
>  
>  /*-------------------------------------------------------------------------*/
> -
> -#ifdef CONFIG_DM_USB
> -int dm_usb_init(struct eth_dev *e_dev)
> -{
> -	struct udevice *dev = NULL;
> -	int ret;
> -
> -	ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
> -	if (!dev || ret) {
> -		pr_err("No USB device found\n");
> -		return -ENODEV;
> -	}
> -
> -	e_dev->usb_udev = dev;
> -
> -	return ret;
> -}
> -#endif
> -
>  static int _usb_eth_init(struct ether_priv *priv)
>  {
>  	struct eth_dev *dev = &priv->ethdev;
>  	struct usb_gadget *gadget;
>  	unsigned long ts;
> +	int ret;
>  	unsigned long timeout = USB_CONNECT_TIMEOUT;
>  
> -#ifdef CONFIG_DM_USB
> -	if (dm_usb_init(dev)) {
> -		pr_err("USB ether not found\n");
> -		return -ENODEV;
> -	}
> -#else
> -	board_usb_init(0, USB_INIT_DEVICE);
> -#endif
> +	ret = usb_gadget_initialize(0);
> +	if (ret)
> +		return ret;
>  
>  	/* Configure default mac-addresses for the USB ethernet device */
>  #ifdef CONFIG_USBNET_DEV_ADDR
> @@ -2546,9 +2520,7 @@ void _usb_eth_halt(struct ether_priv *priv)
>  	}
>  
>  	usb_gadget_unregister_driver(&priv->eth_driver);
> -#ifndef CONFIG_DM_USB
> -	board_usb_cleanup(0, USB_INIT_DEVICE);
> -#endif
> +	usb_gadget_release(0);
>  }
>  
>  #ifndef CONFIG_DM_ETH
> diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
> index b824f13..40ca2d3 100644
> --- a/include/linux/usb/gadget.h
> +++ b/include/linux/usb/gadget.h
> @@ -19,6 +19,7 @@
>  #define __LINUX_USB_GADGET_H
>  
>  #include <errno.h>
> +#include <usb.h>
>  #include <linux/compat.h>
>  #include <linux/list.h>
>  
> @@ -926,4 +927,13 @@ extern void usb_ep_autoconfig_reset(struct usb_gadget *);
>  
>  extern int usb_gadget_handle_interrupts(int index);
>  
> +static inline int usb_gadget_initialize(int index)
> +{
> +	return board_usb_init(index, USB_INIT_DEVICE);
> +}
> +
> +static inline int usb_gadget_release(int index)
> +{
> +	return board_usb_cleanup(index, USB_INIT_DEVICE);
> +}
>  #endif	/* __LINUX_USB_GADGET_H */
> 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 2/7] usb: introduce a separate config option for DM USB device
  2018-05-25  9:32 ` [U-Boot] [PATCH v1 2/7] usb: introduce a separate config option for DM USB device Jean-Jacques Hiblot
@ 2018-05-28  8:37   ` Michal Simek
  2018-05-29  7:40     ` Jean-Jacques Hiblot
  0 siblings, 1 reply; 18+ messages in thread
From: Michal Simek @ 2018-05-28  8:37 UTC (permalink / raw)
  To: u-boot

On 25.5.2018 11:32, Jean-Jacques Hiblot wrote:
> Using CONFIG_DM_USB for this purpose prevents using DM_USB for host and not
> for device.
> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
> ---
> 
>  drivers/usb/Kconfig             | 6 ++++++
>  drivers/usb/dwc3/core.c         | 2 +-
>  drivers/usb/dwc3/dwc3-generic.c | 4 +++-
>  3 files changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig
> index 4fbe172..3587ba4 100644
> --- a/drivers/usb/Kconfig
> +++ b/drivers/usb/Kconfig
> @@ -47,6 +47,12 @@ config DM_USB
>  	  declared with the U_BOOT_USB_DEVICE() macro and will be
>  	  automatically probed when found on the bus.
>  
> +config DM_USB_DEV
> +	bool "Enable driver model for USB (Peripheral mode)"
> +	depends on DM_USB
> +	help
> +	  Enable driver model for USB (Peripheral mode).
> +
>  source "drivers/usb/host/Kconfig"
>  
>  source "drivers/usb/dwc3/Kconfig"
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index 1ab5cee..d5ee6d9 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -789,7 +789,7 @@ MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
>  MODULE_LICENSE("GPL v2");
>  MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");
>  
> -#ifdef CONFIG_DM_USB
> +#ifdef CONFIG_DM_USB_DEV
>  
>  int dwc3_init(struct dwc3 *dwc)
>  {
> diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
> index ca63eac..2c1e696 100644
> --- a/drivers/usb/dwc3/dwc3-generic.c
> +++ b/drivers/usb/dwc3/dwc3-generic.c
> @@ -21,7 +21,7 @@
>  #include "gadget.h"
>  #include "linux-compat.h"
>  
> -DECLARE_GLOBAL_DATA_PTR;

Removing this looks weird. I would expect that there will be new
error/warning when you compile it because gd is used in bind function.

M

> +#ifdef CONFIG_DM_USB_DEV
>  
>  int usb_gadget_handle_interrupts(int index)
>  {
> @@ -98,6 +98,8 @@ U_BOOT_DRIVER(dwc3_generic_peripheral) = {
>  	.flags	= DM_FLAG_ALLOC_PRIV_DMA,
>  };
>  
> +#endif
> +
>  static int dwc3_generic_bind(struct udevice *parent)
>  {
>  	const void *fdt = gd->fdt_blob;
> 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver
  2018-05-28  8:32 ` [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Michal Simek
@ 2018-05-28  9:47   ` Jean-Jacques Hiblot
  2018-05-28 10:25     ` Michal Simek
  0 siblings, 1 reply; 18+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-28  9:47 UTC (permalink / raw)
  To: u-boot

Hi Michal


On 28/05/2018 10:32, Michal Simek wrote:
> Hi Jean,
>
> On 25.5.2018 11:32, Jean-Jacques Hiblot wrote:
>> This series aims at bringing improvements to the dwc3_generic driver so
>> that it can be used by most of the platforms using the dwc3 controller.
>>
>> I tested this on with DRA7 and AM57x platforms for both Peripheral and Host
>> operations. The code to enable DM USB host & dev support for those
>> platforms will be submitted in a separate series.
>>
>> Enhancements:
>> - use separate Kconfig option for DM USB Periphal and DM USB Host. This
>> allow platforms to keep their non-DM USB peripheral code and use the DM
>> USB host.
>> - fixes the bind/probe confusion in dwc3_generic. The probe is done when
>> the USB device is first needed.
>> - handles PHYs when in the peripheral mode. The code to handle the PHYs is
>> shared with the host side
>> - handles clock and reset
>> - bind host controller to the more generic driver 'xhci-dwc3'
> I see two series which were sent recently without any description of
> dependencies.
Right I forgot. This series applies on to of the master branch of the 
USB tree
> Will be good to push these patches somewhere to git and send a link that
> I can easily test.
I pushed all on github : https://github.com/jjhiblot/u-boot

JJ

>
> Thanks,
> Michal
>
>>
>>
>> Jean-Jacques Hiblot (7):
>>    usb: gadget: Do not call board_usb_xxx() directly in USB gadget
>>      drivers
>>    usb: introduce a separate config option for DM USB device
>>    usb: udc: implement DM versions of
>>      usb_gadget_initialize()/_release()/_handle_interrupt()
>>    dwc3_generic: do not probe the USB device driver when it's bound
>>    dwc3: move phy operation to core.c
>>    dwc3-generic: Handle the PHYs, the clocks and the reset lines
>>    dwc3-generic: Add select_dr_mode operation
>>
>>   cmd/fastboot.c                    |   4 +-
>>   cmd/rockusb.c                     |   4 +-
>>   cmd/thordown.c                    |   4 +-
>>   cmd/usb_gadget_sdp.c              |   4 +-
>>   cmd/usb_mass_storage.c            |   4 +-
>>   common/dfu.c                      |   6 +-
>>   drivers/usb/Kconfig               |   6 ++
>>   drivers/usb/dwc3/Kconfig          |   7 +-
>>   drivers/usb/dwc3/core.c           |  86 +++++++++++++++-
>>   drivers/usb/dwc3/dwc3-generic.c   | 206 +++++++++++++++++++++++++++++---------
>>   drivers/usb/dwc3/ep0.c            |   1 -
>>   drivers/usb/gadget/ether.c        |  38 +------
>>   drivers/usb/gadget/udc/udc-core.c |  44 +++++++-
>>   drivers/usb/host/xhci-dwc3.c      |  93 ++---------------
>>   include/dwc3-uboot.h              |   7 ++
>>   include/linux/usb/gadget.h        |  18 ++++
>>   16 files changed, 348 insertions(+), 184 deletions(-)
>>
>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver
  2018-05-28  9:47   ` Jean-Jacques Hiblot
@ 2018-05-28 10:25     ` Michal Simek
  2018-05-29 11:03       ` Jean-Jacques Hiblot
  0 siblings, 1 reply; 18+ messages in thread
From: Michal Simek @ 2018-05-28 10:25 UTC (permalink / raw)
  To: u-boot

Hi,

On 28.5.2018 11:47, Jean-Jacques Hiblot wrote:
> Hi Michal
> 
> 
> On 28/05/2018 10:32, Michal Simek wrote:
>> Hi Jean,
>>
>> On 25.5.2018 11:32, Jean-Jacques Hiblot wrote:
>>> This series aims at bringing improvements to the dwc3_generic driver so
>>> that it can be used by most of the platforms using the dwc3 controller.
>>>
>>> I tested this on with DRA7 and AM57x platforms for both Peripheral
>>> and Host
>>> operations. The code to enable DM USB host & dev support for those
>>> platforms will be submitted in a separate series.
>>>
>>> Enhancements:
>>> - use separate Kconfig option for DM USB Periphal and DM USB Host. This
>>> allow platforms to keep their non-DM USB peripheral code and use the DM
>>> USB host.
>>> - fixes the bind/probe confusion in dwc3_generic. The probe is done when
>>> the USB device is first needed.
>>> - handles PHYs when in the peripheral mode. The code to handle the
>>> PHYs is
>>> shared with the host side
>>> - handles clock and reset
>>> - bind host controller to the more generic driver 'xhci-dwc3'
>> I see two series which were sent recently without any description of
>> dependencies.
> Right I forgot. This series applies on to of the master branch of the
> USB tree
>> Will be good to push these patches somewhere to git and send a link that
>> I can easily test.
> I pushed all on github : https://github.com/jjhiblot/u-boot

I didn't build all patches to identify which one is introducing the
issue. But look below at issues and please fix them. Then I will test.

Thanks,
Michal

[u-boot](dwc3)$ nice -n 19 ./tools/buildman/buildman -b dwc3  zynqmp  -o
../tmp/ -C -I  -c 1 -sSed
boards.cfg is up to date. Nothing to do.
Summary of 1 commit for 20 boards (8 threads, 1 job per thread)
01: board: ti: am57xx: remove USB platform code
   aarch64:  +   xilinx_zynqmp_zc1751_xm016_dc2
xilinx_zynqmp_zcu102_revA xilinx_zynqmp_zcu100_revC
xilinx_zynqmp_zcu104_revA xilinx_zynqmp_zc1751_xm017_dc3
xilinx_zynqmp_zcu102_revB xilinx_zynqmp_zcu106_revA
xilinx_zynqmp_zc1751_xm015_dc1 xilinx_zynqmp_zcu111_revA
xilinx_zynqmp_zcu102_rev1_0 xilinx_zynqmp_zcu104_revC
+common/built-in.o: In function `run_usb_dnl_gadget':
+build/../common/dfu.c:73: undefined reference to
`usb_gadget_handle_interrupts'
+build/../common/dfu.c:83: undefined reference to
`usb_gadget_handle_interrupts'
+make[1]: *** [u-boot] Error 139
+make: *** [sub-make] Error 2
+  usb_gadget_realease(controller_index);
+  ^~~~~~~~~~~~~~~~~~~
+cmd/built-in.o: In function `do_fastboot':
+build/../cmd/fastboot.c:50: undefined reference to
`usb_gadget_handle_interrupts'
+cmd/built-in.o: In function `do_thor_down':
+build/../cmd/thordown.c:58: undefined reference to `usb_gadget_realease'
+drivers/usb/gadget/built-in.o: In function `thor_rx_data':
+build/../drivers/usb/gadget/f_thor.c:555: undefined reference to
`usb_gadget_handle_interrupts'
+drivers/usb/gadget/built-in.o: In function `thor_tx_data':
+build/../drivers/usb/gadget/f_thor.c:589: undefined reference to
`usb_gadget_handle_interrupts'
+drivers/usb/gadget/built-in.o: In function `thor_init':
+build/../drivers/usb/gadget/f_thor.c:706: undefined reference to
`usb_gadget_handle_interrupts'
w+../cmd/thordown.c: In function ?do_thor_down?:
w+../cmd/thordown.c:58:2: warning: implicit declaration of function
?usb_gadget_realease? [-Wimplicit-function-declaration]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 2/7] usb: introduce a separate config option for DM USB device
  2018-05-28  8:37   ` Michal Simek
@ 2018-05-29  7:40     ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 18+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-29  7:40 UTC (permalink / raw)
  To: u-boot



On 28/05/2018 10:37, Michal Simek wrote:
> On 25.5.2018 11:32, Jean-Jacques Hiblot wrote:
>> Using CONFIG_DM_USB for this purpose prevents using DM_USB for host and not
>> for device.
>>
>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>> ---
>>
>>   drivers/usb/Kconfig             | 6 ++++++
>>   drivers/usb/dwc3/core.c         | 2 +-
>>   drivers/usb/dwc3/dwc3-generic.c | 4 +++-
>>   3 files changed, 10 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig
>> index 4fbe172..3587ba4 100644
>> --- a/drivers/usb/Kconfig
>> +++ b/drivers/usb/Kconfig
>> @@ -47,6 +47,12 @@ config DM_USB
>>   	  declared with the U_BOOT_USB_DEVICE() macro and will be
>>   	  automatically probed when found on the bus.
>>   
>> +config DM_USB_DEV
>> +	bool "Enable driver model for USB (Peripheral mode)"
>> +	depends on DM_USB
>> +	help
>> +	  Enable driver model for USB (Peripheral mode).
>> +
>>   source "drivers/usb/host/Kconfig"
>>   
>>   source "drivers/usb/dwc3/Kconfig"
>> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
>> index 1ab5cee..d5ee6d9 100644
>> --- a/drivers/usb/dwc3/core.c
>> +++ b/drivers/usb/dwc3/core.c
>> @@ -789,7 +789,7 @@ MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
>>   MODULE_LICENSE("GPL v2");
>>   MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");
>>   
>> -#ifdef CONFIG_DM_USB
>> +#ifdef CONFIG_DM_USB_DEV
>>   
>>   int dwc3_init(struct dwc3 *dwc)
>>   {
>> diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
>> index ca63eac..2c1e696 100644
>> --- a/drivers/usb/dwc3/dwc3-generic.c
>> +++ b/drivers/usb/dwc3/dwc3-generic.c
>> @@ -21,7 +21,7 @@
>>   #include "gadget.h"
>>   #include "linux-compat.h"
>>   
>> -DECLARE_GLOBAL_DATA_PTR;
> Removing this looks weird. I would expect that there will be new
> error/warning when you compile it because gd is used in bind function.
It must be declared somewhere else in the included headers, there is no 
complain from the compiler.

>
> M
>
>> +#ifdef CONFIG_DM_USB_DEV
>>   
>>   int usb_gadget_handle_interrupts(int index)
>>   {
>> @@ -98,6 +98,8 @@ U_BOOT_DRIVER(dwc3_generic_peripheral) = {
>>   	.flags	= DM_FLAG_ALLOC_PRIV_DMA,
>>   };
>>   
>> +#endif
>> +
>>   static int dwc3_generic_bind(struct udevice *parent)
>>   {
>>   	const void *fdt = gd->fdt_blob;
>>
>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 1/7] usb: gadget: Do not call board_usb_xxx() directly in USB gadget drivers
  2018-05-28  8:35   ` Michal Simek
@ 2018-05-29  7:41     ` Jean-Jacques Hiblot
  0 siblings, 0 replies; 18+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-29  7:41 UTC (permalink / raw)
  To: u-boot



On 28/05/2018 10:35, Michal Simek wrote:
> On 25.5.2018 11:32, Jean-Jacques Hiblot wrote:
>> Add 2 functions to wrap the calls to board_usb_init() and
>> board_usb_cleanup().
> Here should be written why you need this change.
>
> M
I'll update the commit log.
It's a preparatory work for DM support for UDC drivers.
>
>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>> ---
>>
>>   cmd/fastboot.c             |  4 ++--
>>   cmd/rockusb.c              |  4 ++--
>>   cmd/thordown.c             |  4 ++--
>>   cmd/usb_gadget_sdp.c       |  4 ++--
>>   cmd/usb_mass_storage.c     |  4 ++--
>>   common/dfu.c               |  6 +++---
>>   drivers/usb/gadget/ether.c | 38 +++++---------------------------------
>>   include/linux/usb/gadget.h | 10 ++++++++++
>>   8 files changed, 28 insertions(+), 46 deletions(-)
>>
>> diff --git a/cmd/fastboot.c b/cmd/fastboot.c
>> index a5ec5f4..93f97fd 100644
>> --- a/cmd/fastboot.c
>> +++ b/cmd/fastboot.c
>> @@ -24,7 +24,7 @@ static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>>   	usb_controller = argv[1];
>>   	controller_index = simple_strtoul(usb_controller, NULL, 0);
>>   
>> -	ret = board_usb_init(controller_index, USB_INIT_DEVICE);
>> +	ret = usb_gadget_initialize(controller_index);
>>   	if (ret) {
>>   		pr_err("USB init failed: %d", ret);
>>   		return CMD_RET_FAILURE;
>> @@ -55,7 +55,7 @@ static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>>   exit:
>>   	g_dnl_unregister();
>>   	g_dnl_clear_detach();
>> -	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
>> +	usb_gadget_release(controller_index);
>>   
>>   	return ret;
>>   }
>> diff --git a/cmd/rockusb.c b/cmd/rockusb.c
>> index 8206643..e0c1480 100644
>> --- a/cmd/rockusb.c
>> +++ b/cmd/rockusb.c
>> @@ -33,7 +33,7 @@ static int do_rockusb(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>>   	dev_index = simple_strtoul(devnum, NULL, 0);
>>   	rockusb_dev_init(devtype, dev_index);
>>   
>> -	ret = board_usb_init(controller_index, USB_INIT_DEVICE);
>> +	ret = usb_gadget_initialize(controller_index);
>>   	if (ret) {
>>   		printf("USB init failed: %d\n", ret);
>>   		return CMD_RET_FAILURE;
>> @@ -62,7 +62,7 @@ static int do_rockusb(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>>   exit:
>>   	g_dnl_unregister();
>>   	g_dnl_clear_detach();
>> -	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
>> +	usb_gadget_release(controller_index);
>>   
>>   	return ret;
>>   }
>> diff --git a/cmd/thordown.c b/cmd/thordown.c
>> index e297de2..b7866d1 100644
>> --- a/cmd/thordown.c
>> +++ b/cmd/thordown.c
>> @@ -30,7 +30,7 @@ int do_thor_down(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>>   		goto done;
>>   
>>   	int controller_index = simple_strtoul(usb_controller, NULL, 0);
>> -	ret = board_usb_init(controller_index, USB_INIT_DEVICE);
>> +	ret = usb_gadget_initialize(controller_index);
>>   	if (ret) {
>>   		pr_err("USB init failed: %d", ret);
>>   		ret = CMD_RET_FAILURE;
>> @@ -55,7 +55,7 @@ int do_thor_down(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>>   
>>   exit:
>>   	g_dnl_unregister();
>> -	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
>> +	usb_gadget_realease(controller_index);
>>   done:
>>   	dfu_free_entities();
>>   
>> diff --git a/cmd/usb_gadget_sdp.c b/cmd/usb_gadget_sdp.c
>> index ba1f66a..808ed97 100644
>> --- a/cmd/usb_gadget_sdp.c
>> +++ b/cmd/usb_gadget_sdp.c
>> @@ -20,7 +20,7 @@ static int do_sdp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>>   
>>   	char *usb_controller = argv[1];
>>   	int controller_index = simple_strtoul(usb_controller, NULL, 0);
>> -	board_usb_init(controller_index, USB_INIT_DEVICE);
>> +	usb_gadget_initialize(controller_index);
>>   
>>   	g_dnl_clear_detach();
>>   	g_dnl_register("usb_dnl_sdp");
>> @@ -37,7 +37,7 @@ static int do_sdp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>>   
>>   exit:
>>   	g_dnl_unregister();
>> -	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
>> +	usb_gadget_release(controller_index);
>>   
>>   	return ret;
>>   }
>> diff --git a/cmd/usb_mass_storage.c b/cmd/usb_mass_storage.c
>> index 89b9ddf..7c6d0c6 100644
>> --- a/cmd/usb_mass_storage.c
>> +++ b/cmd/usb_mass_storage.c
>> @@ -160,7 +160,7 @@ static int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
>>   
>>   	controller_index = (unsigned int)(simple_strtoul(
>>   				usb_controller,	NULL, 0));
>> -	if (board_usb_init(controller_index, USB_INIT_DEVICE)) {
>> +	if (usb_gadget_initialize(controller_index)) {
>>   		pr_err("Couldn't init USB controller.");
>>   		rc = CMD_RET_FAILURE;
>>   		goto cleanup_ums_init;
>> @@ -231,7 +231,7 @@ static int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
>>   cleanup_register:
>>   	g_dnl_unregister();
>>   cleanup_board:
>> -	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
>> +	usb_gadget_release(controller_index);
>>   cleanup_ums_init:
>>   	ums_fini();
>>   
>> diff --git a/common/dfu.c b/common/dfu.c
>> index 2620d32..44d1484 100644
>> --- a/common/dfu.c
>> +++ b/common/dfu.c
>> @@ -23,9 +23,9 @@ int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget)
>>   	bool dfu_reset = false;
>>   	int ret, i = 0;
>>   
>> -	ret = board_usb_init(usbctrl_index, USB_INIT_DEVICE);
>> +	ret = usb_gadget_initialize(usbctrl_index);
>>   	if (ret) {
>> -		pr_err("board usb init failed\n");
>> +		pr_err("usb_gadget_initialize failed\n");
>>   		return CMD_RET_FAILURE;
>>   	}
>>   	g_dnl_clear_detach();
>> @@ -84,7 +84,7 @@ int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget)
>>   	}
>>   exit:
>>   	g_dnl_unregister();
>> -	board_usb_cleanup(usbctrl_index, USB_INIT_DEVICE);
>> +	usb_gadget_release(usbctrl_index);
>>   
>>   	if (dfu_reset)
>>   		do_reset(NULL, 0, 0, NULL);
>> diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
>> index 8ab9b9f..1c438c3 100644
>> --- a/drivers/usb/gadget/ether.c
>> +++ b/drivers/usb/gadget/ether.c
>> @@ -105,9 +105,6 @@ struct eth_dev {
>>   	struct usb_gadget	*gadget;
>>   	struct usb_request	*req;		/* for control responses */
>>   	struct usb_request	*stat_req;	/* for cdc & rndis status */
>> -#ifdef CONFIG_DM_USB
>> -	struct udevice		*usb_udev;
>> -#endif
>>   
>>   	u8			config;
>>   	struct usb_ep		*in_ep, *out_ep, *status_ep;
>> @@ -2341,40 +2338,17 @@ fail:
>>   }
>>   
>>   /*-------------------------------------------------------------------------*/
>> -
>> -#ifdef CONFIG_DM_USB
>> -int dm_usb_init(struct eth_dev *e_dev)
>> -{
>> -	struct udevice *dev = NULL;
>> -	int ret;
>> -
>> -	ret = uclass_first_device(UCLASS_USB_DEV_GENERIC, &dev);
>> -	if (!dev || ret) {
>> -		pr_err("No USB device found\n");
>> -		return -ENODEV;
>> -	}
>> -
>> -	e_dev->usb_udev = dev;
>> -
>> -	return ret;
>> -}
>> -#endif
>> -
>>   static int _usb_eth_init(struct ether_priv *priv)
>>   {
>>   	struct eth_dev *dev = &priv->ethdev;
>>   	struct usb_gadget *gadget;
>>   	unsigned long ts;
>> +	int ret;
>>   	unsigned long timeout = USB_CONNECT_TIMEOUT;
>>   
>> -#ifdef CONFIG_DM_USB
>> -	if (dm_usb_init(dev)) {
>> -		pr_err("USB ether not found\n");
>> -		return -ENODEV;
>> -	}
>> -#else
>> -	board_usb_init(0, USB_INIT_DEVICE);
>> -#endif
>> +	ret = usb_gadget_initialize(0);
>> +	if (ret)
>> +		return ret;
>>   
>>   	/* Configure default mac-addresses for the USB ethernet device */
>>   #ifdef CONFIG_USBNET_DEV_ADDR
>> @@ -2546,9 +2520,7 @@ void _usb_eth_halt(struct ether_priv *priv)
>>   	}
>>   
>>   	usb_gadget_unregister_driver(&priv->eth_driver);
>> -#ifndef CONFIG_DM_USB
>> -	board_usb_cleanup(0, USB_INIT_DEVICE);
>> -#endif
>> +	usb_gadget_release(0);
>>   }
>>   
>>   #ifndef CONFIG_DM_ETH
>> diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
>> index b824f13..40ca2d3 100644
>> --- a/include/linux/usb/gadget.h
>> +++ b/include/linux/usb/gadget.h
>> @@ -19,6 +19,7 @@
>>   #define __LINUX_USB_GADGET_H
>>   
>>   #include <errno.h>
>> +#include <usb.h>
>>   #include <linux/compat.h>
>>   #include <linux/list.h>
>>   
>> @@ -926,4 +927,13 @@ extern void usb_ep_autoconfig_reset(struct usb_gadget *);
>>   
>>   extern int usb_gadget_handle_interrupts(int index);
>>   
>> +static inline int usb_gadget_initialize(int index)
>> +{
>> +	return board_usb_init(index, USB_INIT_DEVICE);
>> +}
>> +
>> +static inline int usb_gadget_release(int index)
>> +{
>> +	return board_usb_cleanup(index, USB_INIT_DEVICE);
>> +}
>>   #endif	/* __LINUX_USB_GADGET_H */
>>
>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver
  2018-05-28 10:25     ` Michal Simek
@ 2018-05-29 11:03       ` Jean-Jacques Hiblot
  2018-05-29 11:08         ` Michal Simek
  0 siblings, 1 reply; 18+ messages in thread
From: Jean-Jacques Hiblot @ 2018-05-29 11:03 UTC (permalink / raw)
  To: u-boot



On 28/05/2018 12:25, Michal Simek wrote:
> Hi,
>
> On 28.5.2018 11:47, Jean-Jacques Hiblot wrote:
>> Hi Michal
>>
>>
>> On 28/05/2018 10:32, Michal Simek wrote:
>>> Hi Jean,
>>>
>>> On 25.5.2018 11:32, Jean-Jacques Hiblot wrote:
>>>> This series aims at bringing improvements to the dwc3_generic driver so
>>>> that it can be used by most of the platforms using the dwc3 controller.
>>>>
>>>> I tested this on with DRA7 and AM57x platforms for both Peripheral
>>>> and Host
>>>> operations. The code to enable DM USB host & dev support for those
>>>> platforms will be submitted in a separate series.
>>>>
>>>> Enhancements:
>>>> - use separate Kconfig option for DM USB Periphal and DM USB Host. This
>>>> allow platforms to keep their non-DM USB peripheral code and use the DM
>>>> USB host.
>>>> - fixes the bind/probe confusion in dwc3_generic. The probe is done when
>>>> the USB device is first needed.
>>>> - handles PHYs when in the peripheral mode. The code to handle the
>>>> PHYs is
>>>> shared with the host side
>>>> - handles clock and reset
>>>> - bind host controller to the more generic driver 'xhci-dwc3'
>>> I see two series which were sent recently without any description of
>>> dependencies.
>> Right I forgot. This series applies on to of the master branch of the
>> USB tree
>>> Will be good to push these patches somewhere to git and send a link that
>>> I can easily test.
>> I pushed all on github : https://github.com/jjhiblot/u-boot
> I didn't build all patches to identify which one is introducing the
> issue. But look below at issues and please fix them. Then I will test.
The CONFIG_DM_USB_DEV is missing from configuration.
This will be fixed in v2


>
> Thanks,
> Michal
>
> [u-boot](dwc3)$ nice -n 19 ./tools/buildman/buildman -b dwc3  zynqmp  -o
> ../tmp/ -C -I  -c 1 -sSed
> boards.cfg is up to date. Nothing to do.
> Summary of 1 commit for 20 boards (8 threads, 1 job per thread)
> 01: board: ti: am57xx: remove USB platform code
>     aarch64:  +   xilinx_zynqmp_zc1751_xm016_dc2
> xilinx_zynqmp_zcu102_revA xilinx_zynqmp_zcu100_revC
> xilinx_zynqmp_zcu104_revA xilinx_zynqmp_zc1751_xm017_dc3
> xilinx_zynqmp_zcu102_revB xilinx_zynqmp_zcu106_revA
> xilinx_zynqmp_zc1751_xm015_dc1 xilinx_zynqmp_zcu111_revA
> xilinx_zynqmp_zcu102_rev1_0 xilinx_zynqmp_zcu104_revC
> +common/built-in.o: In function `run_usb_dnl_gadget':
> +build/../common/dfu.c:73: undefined reference to
> `usb_gadget_handle_interrupts'
> +build/../common/dfu.c:83: undefined reference to
> `usb_gadget_handle_interrupts'
> +make[1]: *** [u-boot] Error 139
> +make: *** [sub-make] Error 2
> +  usb_gadget_realease(controller_index);
> +  ^~~~~~~~~~~~~~~~~~~
> +cmd/built-in.o: In function `do_fastboot':
> +build/../cmd/fastboot.c:50: undefined reference to
> `usb_gadget_handle_interrupts'
> +cmd/built-in.o: In function `do_thor_down':
> +build/../cmd/thordown.c:58: undefined reference to `usb_gadget_realease'
> +drivers/usb/gadget/built-in.o: In function `thor_rx_data':
> +build/../drivers/usb/gadget/f_thor.c:555: undefined reference to
> `usb_gadget_handle_interrupts'
> +drivers/usb/gadget/built-in.o: In function `thor_tx_data':
> +build/../drivers/usb/gadget/f_thor.c:589: undefined reference to
> `usb_gadget_handle_interrupts'
> +drivers/usb/gadget/built-in.o: In function `thor_init':
> +build/../drivers/usb/gadget/f_thor.c:706: undefined reference to
> `usb_gadget_handle_interrupts'
> w+../cmd/thordown.c: In function ?do_thor_down?:
> w+../cmd/thordown.c:58:2: warning: implicit declaration of function
> ?usb_gadget_realease? [-Wimplicit-function-declaration]
>
>

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver
  2018-05-29 11:03       ` Jean-Jacques Hiblot
@ 2018-05-29 11:08         ` Michal Simek
  0 siblings, 0 replies; 18+ messages in thread
From: Michal Simek @ 2018-05-29 11:08 UTC (permalink / raw)
  To: u-boot

On 29.5.2018 13:03, Jean-Jacques Hiblot wrote:
> 
> 
> On 28/05/2018 12:25, Michal Simek wrote:
>> Hi,
>>
>> On 28.5.2018 11:47, Jean-Jacques Hiblot wrote:
>>> Hi Michal
>>>
>>>
>>> On 28/05/2018 10:32, Michal Simek wrote:
>>>> Hi Jean,
>>>>
>>>> On 25.5.2018 11:32, Jean-Jacques Hiblot wrote:
>>>>> This series aims at bringing improvements to the dwc3_generic
>>>>> driver so
>>>>> that it can be used by most of the platforms using the dwc3
>>>>> controller.
>>>>>
>>>>> I tested this on with DRA7 and AM57x platforms for both Peripheral
>>>>> and Host
>>>>> operations. The code to enable DM USB host & dev support for those
>>>>> platforms will be submitted in a separate series.
>>>>>
>>>>> Enhancements:
>>>>> - use separate Kconfig option for DM USB Periphal and DM USB Host.
>>>>> This
>>>>> allow platforms to keep their non-DM USB peripheral code and use
>>>>> the DM
>>>>> USB host.
>>>>> - fixes the bind/probe confusion in dwc3_generic. The probe is done
>>>>> when
>>>>> the USB device is first needed.
>>>>> - handles PHYs when in the peripheral mode. The code to handle the
>>>>> PHYs is
>>>>> shared with the host side
>>>>> - handles clock and reset
>>>>> - bind host controller to the more generic driver 'xhci-dwc3'
>>>> I see two series which were sent recently without any description of
>>>> dependencies.
>>> Right I forgot. This series applies on to of the master branch of the
>>> USB tree
>>>> Will be good to push these patches somewhere to git and send a link
>>>> that
>>>> I can easily test.
>>> I pushed all on github : https://github.com/jjhiblot/u-boot
>> I didn't build all patches to identify which one is introducing the
>> issue. But look below at issues and please fix them. Then I will test.
> The CONFIG_DM_USB_DEV is missing from configuration.
> This will be fixed in v2

ok. Please send it with another link to git repo.

Thanks,
Michal

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2018-05-29 11:08 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-25  9:32 [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Jean-Jacques Hiblot
2018-05-25  9:32 ` [U-Boot] [PATCH v1 1/7] usb: gadget: Do not call board_usb_xxx() directly in USB gadget drivers Jean-Jacques Hiblot
2018-05-28  8:35   ` Michal Simek
2018-05-29  7:41     ` Jean-Jacques Hiblot
2018-05-25  9:32 ` [U-Boot] [PATCH v1 2/7] usb: introduce a separate config option for DM USB device Jean-Jacques Hiblot
2018-05-28  8:37   ` Michal Simek
2018-05-29  7:40     ` Jean-Jacques Hiblot
2018-05-25  9:32 ` [U-Boot] [PATCH v1 3/7] usb: udc: implement DM versions of usb_gadget_initialize()/_release()/_handle_interrupt() Jean-Jacques Hiblot
2018-05-28  7:29   ` Lukasz Majewski
2018-05-25  9:32 ` [U-Boot] [PATCH v1 4/7] dwc3_generic: do not probe the USB device driver when it's bound Jean-Jacques Hiblot
2018-05-25  9:32 ` [U-Boot] [PATCH v1 5/7] dwc3: move phy operation to core.c Jean-Jacques Hiblot
2018-05-25  9:32 ` [U-Boot] [PATCH v1 6/7] dwc3-generic: Handle the PHYs, the clocks and the reset lines Jean-Jacques Hiblot
2018-05-25  9:32 ` [U-Boot] [PATCH v1 7/7] dwc3-generic: Add select_dr_mode operation Jean-Jacques Hiblot
2018-05-28  8:32 ` [U-Boot] [PATCH v1 0/7] Improvements for the dwc3_generic driver Michal Simek
2018-05-28  9:47   ` Jean-Jacques Hiblot
2018-05-28 10:25     ` Michal Simek
2018-05-29 11:03       ` Jean-Jacques Hiblot
2018-05-29 11:08         ` Michal Simek

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.