
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;