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 |
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 --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;