diff mbox series

[U-Boot,v2,1/6] usb: dwc3: Add dwc3_init/remove with DM_USB

Message ID 40b4dfd4b061159bbe3c98385981a3ccb10b35c1.1526642103.git.michal.simek@xilinx.com
State Accepted
Commit 23ba2d6372e45479106922c6241a7a09707bbe08
Delegated to: Marek Vasut
Headers show
Series Convert Xilinx ZynqMP to DM_USB with generic DWC3 glue logic driver | expand

Commit Message

Michal Simek May 18, 2018, 11:15 a.m. UTC
From: Mugunthan V N <mugunthanvnm@ti.com>

The patch is preparing dwc3 core for enabling DM_USB with peripheral
driver with using driver model support.
The driver will be bound by the DWC3 wrapper driver based on the
dr_mode device tree entry.

Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
(Remove dwc3-omap changes)
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

Changes in v2:
- Retype dwc->dev in gadget.c to avoid compilation warning
- Guard udevice with __UBOOT__
- Move ifdef in core.c to avoid compilation issues for some platforms
  (for example edison)

Origin series here: https://patchwork.ozlabs.org/patch/775108/

- Fix labels as was asked in previous review.

---
 drivers/usb/dwc3/core.c   | 55 +++++++++++++++++++++++++++++++++++++++
 drivers/usb/dwc3/core.h   |  6 +++++
 drivers/usb/dwc3/gadget.c |  2 +-
 3 files changed, 62 insertions(+), 1 deletion(-)

Comments

Jean-Jacques Hiblot May 18, 2018, 1:21 p.m. UTC | #1
Hi Michal,

I've been trying your series on DRA7 platforms. Thanks for the work.

I have a few comments though.


On 18/05/2018 13:15, Michal Simek wrote:
> From: Mugunthan V N <mugunthanvnm@ti.com>
>
> The patch is preparing dwc3 core for enabling DM_USB with peripheral
> driver with using driver model support.
> The driver will be bound by the DWC3 wrapper driver based on the
> dr_mode device tree entry.
>
> Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
> (Remove dwc3-omap changes)
> Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> ---
>
> Changes in v2:
> - Retype dwc->dev in gadget.c to avoid compilation warning
> - Guard udevice with __UBOOT__
> - Move ifdef in core.c to avoid compilation issues for some platforms
>    (for example edison)
>
> Origin series here: https://patchwork.ozlabs.org/patch/775108/
>
> - Fix labels as was asked in previous review.
>
> ---
>   drivers/usb/dwc3/core.c   | 55 +++++++++++++++++++++++++++++++++++++++
>   drivers/usb/dwc3/core.h   |  6 +++++
>   drivers/usb/dwc3/gadget.c |  2 +-
>   3 files changed, 62 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index dbdad22d1134..1ab5cee60969 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -788,3 +788,58 @@ MODULE_ALIAS("platform:dwc3");
>   MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
>   MODULE_LICENSE("GPL v2");
>   MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");
> +
> +#ifdef CONFIG_DM_USB
What about having a separate config for device ? like CONFIG_DM_USB_DEV.
This would allow patforms to keep using non-DM USB device and DM USB hosts
> +
> +int dwc3_init(struct dwc3 *dwc)
> +{
> +	int ret;
> +
> +	dwc3_cache_hwparams(dwc);
> +
> +	ret = dwc3_alloc_event_buffers(dwc, DWC3_EVENT_BUFFERS_SIZE);
> +	if (ret) {
> +		dev_err(dwc->dev, "failed to allocate event buffers\n");
> +		return -ENOMEM;
> +	}
> +
> +	ret = dwc3_core_init(dwc);
> +	if (ret) {
> +		dev_err(dev, "failed to initialize core\n");
> +		goto core_fail;
> +	}
> +
> +	ret = dwc3_event_buffers_setup(dwc);
> +	if (ret) {
> +		dev_err(dwc->dev, "failed to setup event buffers\n");
> +		goto event_fail;
> +	}
> +
> +	ret = dwc3_core_init_mode(dwc);
> +	if (ret)
> +		goto mode_fail;
> +
> +	return 0;
> +
> +mode_fail:
> +	dwc3_event_buffers_cleanup(dwc);
> +
> +event_fail:
> +	dwc3_core_exit(dwc);
> +
> +core_fail:
> +	dwc3_free_event_buffers(dwc);
> +
> +	return ret;
> +}
> +
> +void dwc3_remove(struct dwc3 *dwc)
> +{
> +	dwc3_core_exit_mode(dwc);
> +	dwc3_event_buffers_cleanup(dwc);
> +	dwc3_free_event_buffers(dwc);
> +	dwc3_core_exit(dwc);
> +	kfree(dwc->mem);
> +}
> +
> +#endif
> diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
> index cbe9850a0bda..58fe91dc5131 100644
> --- a/drivers/usb/dwc3/core.h
> +++ b/drivers/usb/dwc3/core.h
> @@ -712,7 +712,11 @@ struct dwc3 {
>   	/* device lock */
>   	spinlock_t		lock;
>   
> +#if defined(__UBOOT__) && defined(CONFIG_DM_USB)
> +	struct udevice		*dev;
> +#else
>   	struct device		*dev;
> +#endif
>   
>   	struct platform_device	*xhci;
>   	struct resource		xhci_resources[DWC3_XHCI_RESOURCES_NUM];
> @@ -987,6 +991,8 @@ struct dwc3_gadget_ep_cmd_params {
>   
>   /* prototypes */
>   int dwc3_gadget_resize_tx_fifos(struct dwc3 *dwc);
> +int dwc3_init(struct dwc3 *dwc);
> +void dwc3_remove(struct dwc3 *dwc);
>   
>   #ifdef CONFIG_USB_DWC3_HOST
>   int dwc3_host_init(struct dwc3 *dwc);
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> index d45fae044c4a..e340cb268fcd 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -2609,7 +2609,7 @@ int dwc3_gadget_init(struct dwc3 *dwc)
>   	if (ret)
>   		goto err4;
>   
> -	ret = usb_add_gadget_udc(dwc->dev, &dwc->gadget);
> +	ret = usb_add_gadget_udc((struct device *)dwc->dev, &dwc->gadget);
>   	if (ret) {
>   		dev_err(dwc->dev, "failed to register udc\n");
>   		goto err4;
diff mbox series

Patch

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index dbdad22d1134..1ab5cee60969 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -788,3 +788,58 @@  MODULE_ALIAS("platform:dwc3");
 MODULE_AUTHOR("Felipe Balbi <balbi@ti.com>");
 MODULE_LICENSE("GPL v2");
 MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver");
+
+#ifdef CONFIG_DM_USB
+
+int dwc3_init(struct dwc3 *dwc)
+{
+	int ret;
+
+	dwc3_cache_hwparams(dwc);
+
+	ret = dwc3_alloc_event_buffers(dwc, DWC3_EVENT_BUFFERS_SIZE);
+	if (ret) {
+		dev_err(dwc->dev, "failed to allocate event buffers\n");
+		return -ENOMEM;
+	}
+
+	ret = dwc3_core_init(dwc);
+	if (ret) {
+		dev_err(dev, "failed to initialize core\n");
+		goto core_fail;
+	}
+
+	ret = dwc3_event_buffers_setup(dwc);
+	if (ret) {
+		dev_err(dwc->dev, "failed to setup event buffers\n");
+		goto event_fail;
+	}
+
+	ret = dwc3_core_init_mode(dwc);
+	if (ret)
+		goto mode_fail;
+
+	return 0;
+
+mode_fail:
+	dwc3_event_buffers_cleanup(dwc);
+
+event_fail:
+	dwc3_core_exit(dwc);
+
+core_fail:
+	dwc3_free_event_buffers(dwc);
+
+	return ret;
+}
+
+void dwc3_remove(struct dwc3 *dwc)
+{
+	dwc3_core_exit_mode(dwc);
+	dwc3_event_buffers_cleanup(dwc);
+	dwc3_free_event_buffers(dwc);
+	dwc3_core_exit(dwc);
+	kfree(dwc->mem);
+}
+
+#endif
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index cbe9850a0bda..58fe91dc5131 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -712,7 +712,11 @@  struct dwc3 {
 	/* device lock */
 	spinlock_t		lock;
 
+#if defined(__UBOOT__) && defined(CONFIG_DM_USB)
+	struct udevice		*dev;
+#else
 	struct device		*dev;
+#endif
 
 	struct platform_device	*xhci;
 	struct resource		xhci_resources[DWC3_XHCI_RESOURCES_NUM];
@@ -987,6 +991,8 @@  struct dwc3_gadget_ep_cmd_params {
 
 /* prototypes */
 int dwc3_gadget_resize_tx_fifos(struct dwc3 *dwc);
+int dwc3_init(struct dwc3 *dwc);
+void dwc3_remove(struct dwc3 *dwc);
 
 #ifdef CONFIG_USB_DWC3_HOST
 int dwc3_host_init(struct dwc3 *dwc);
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index d45fae044c4a..e340cb268fcd 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2609,7 +2609,7 @@  int dwc3_gadget_init(struct dwc3 *dwc)
 	if (ret)
 		goto err4;
 
-	ret = usb_add_gadget_udc(dwc->dev, &dwc->gadget);
+	ret = usb_add_gadget_udc((struct device *)dwc->dev, &dwc->gadget);
 	if (ret) {
 		dev_err(dwc->dev, "failed to register udc\n");
 		goto err4;