* [PATCH v3 0/5] usb: musb: da8xx: Add DMA support @ 2017-01-19 14:08 Alexandre Bailon [not found] ` <20170119140835.18981-1-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> 0 siblings, 1 reply; 14+ messages in thread From: Alexandre Bailon @ 2017-01-19 14:08 UTC (permalink / raw) To: b-liu-l0cyMroinI0 Cc: nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, tony-4v6yS6AI5VpBDgjK7y7TUQ, linux-omap-u79uwXL29TY76Z2rM5mHXA, sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA, Alexandre Bailon This series update MUSB driver to add DMA support to DA8xx. It should be applied on top of "[PATCH v3 0/3] usb: musb: cppi41: Add a way to manage DMA irq" but "[PATCH v3 0/3] dmaengine: cppi41: Add dma support to da8xx" and "[PATCH] arm: davinci: Make the usb20 clock available to PM runtime" are required to make it work. Changes in v3: - Remove PM runtime callbacks. I have update arch/arm/mach-davinci/pm_domain.c to let PM runtime control the usb20 clock. - Only use PM runtime sync operation. Changes in v2: - Clock and IRQ management has been moved to MUSB DA8xx glue (was in CPPI 4.1 driver) - I have added a partial support PM runtime. The goal was to use PM runtime to manage clock of MUSB and CPPI 4.1 (they use the same clock). - CPPI 4.1 is now achild of MUSB DA8xx glue. Alexandre Bailon (5): usb: musb: da8xx: Remove CPPI 3.0 quirk and methods usb: musb: Use shared irq usb: musb: Add support of CPPI 4.1 DMA controller to DA8xx usb: musb: musb_cppi41: Workaround DMA stall issue during teardown usb: musb: da8xx: Add a primary support of PM runtime drivers/usb/musb/Kconfig | 4 +-- drivers/usb/musb/da8xx.c | 60 +++++++++++++++++++++++++++--------------- drivers/usb/musb/musb_core.c | 2 +- drivers/usb/musb/musb_core.h | 1 + drivers/usb/musb/musb_cppi41.c | 4 +++ 5 files changed, 47 insertions(+), 24 deletions(-) -- 2.10.2 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <20170119140835.18981-1-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>]
* [PATCH v3 1/5] usb: musb: da8xx: Remove CPPI 3.0 quirk and methods [not found] ` <20170119140835.18981-1-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> @ 2017-01-19 14:08 ` Alexandre Bailon 2017-01-19 14:08 ` [PATCH v3 2/5] usb: musb: Use shared irq Alexandre Bailon ` (3 subsequent siblings) 4 siblings, 0 replies; 14+ messages in thread From: Alexandre Bailon @ 2017-01-19 14:08 UTC (permalink / raw) To: b-liu-l0cyMroinI0 Cc: nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, tony-4v6yS6AI5VpBDgjK7y7TUQ, linux-omap-u79uwXL29TY76Z2rM5mHXA, sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA, Alexandre Bailon DA8xx driver is registering and using the CPPI 3.0 DMA controller but actually, the DA8xx has a CPPI 4.1 DMA controller. Remove the CPPI 3.0 quirk and methods. Fixes: f8e9f34f80a2 ("usb: musb: Fix up DMA related macros") Fixes: 7f6283ed6fe8 ("usb: musb: Set up function pointers for DMA") Signed-off-by: Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> Acked-by: Sergei Shtylyov <sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org> Acked-by: Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org> --- drivers/usb/musb/da8xx.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index e89708d..cd3d763 100644 --- a/drivers/usb/musb/da8xx.c +++ b/drivers/usb/musb/da8xx.c @@ -458,15 +458,11 @@ static inline u8 get_vbus_power(struct device *dev) } static const struct musb_platform_ops da8xx_ops = { - .quirks = MUSB_DMA_CPPI | MUSB_INDEXED_EP, + .quirks = MUSB_INDEXED_EP, .init = da8xx_musb_init, .exit = da8xx_musb_exit, .fifo_mode = 2, -#ifdef CONFIG_USB_TI_CPPI_DMA - .dma_init = cppi_dma_controller_create, - .dma_exit = cppi_dma_controller_destroy, -#endif .enable = da8xx_musb_enable, .disable = da8xx_musb_disable, -- 2.10.2 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 2/5] usb: musb: Use shared irq [not found] ` <20170119140835.18981-1-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> 2017-01-19 14:08 ` [PATCH v3 1/5] usb: musb: da8xx: Remove CPPI 3.0 quirk and methods Alexandre Bailon @ 2017-01-19 14:08 ` Alexandre Bailon 2017-01-19 14:08 ` [PATCH v3 3/5] usb: musb: Add support of CPPI 4.1 DMA controller to DA8xx Alexandre Bailon ` (2 subsequent siblings) 4 siblings, 0 replies; 14+ messages in thread From: Alexandre Bailon @ 2017-01-19 14:08 UTC (permalink / raw) To: b-liu-l0cyMroinI0 Cc: nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, tony-4v6yS6AI5VpBDgjK7y7TUQ, linux-omap-u79uwXL29TY76Z2rM5mHXA, sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA, Alexandre Bailon In the DA8xx, USB and CPPI 4.1 are sharing the same interrupt line. Update the driver to request a shared irq. Signed-off-by: Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> --- drivers/usb/musb/musb_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index fca288bb..cf40adf 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -2329,7 +2329,7 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) setup_timer(&musb->otg_timer, musb_otg_timer_func, (unsigned long) musb); /* attach to the IRQ */ - if (request_irq(nIrq, musb->isr, 0, dev_name(dev), musb)) { + if (request_irq(nIrq, musb->isr, IRQF_SHARED, dev_name(dev), musb)) { dev_err(dev, "request_irq %d failed!\n", nIrq); status = -ENODEV; goto fail3; -- 2.10.2 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 3/5] usb: musb: Add support of CPPI 4.1 DMA controller to DA8xx [not found] ` <20170119140835.18981-1-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> 2017-01-19 14:08 ` [PATCH v3 1/5] usb: musb: da8xx: Remove CPPI 3.0 quirk and methods Alexandre Bailon 2017-01-19 14:08 ` [PATCH v3 2/5] usb: musb: Use shared irq Alexandre Bailon @ 2017-01-19 14:08 ` Alexandre Bailon [not found] ` <20170119140835.18981-4-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> 2017-01-19 14:08 ` [PATCH v3 4/5] usb: musb: musb_cppi41: Workaround DMA stall issue during teardown Alexandre Bailon 2017-01-19 14:08 ` [PATCH v3 5/5] usb: musb: da8xx: Add a primary support of PM runtime Alexandre Bailon 4 siblings, 1 reply; 14+ messages in thread From: Alexandre Bailon @ 2017-01-19 14:08 UTC (permalink / raw) To: b-liu-l0cyMroinI0 Cc: nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, tony-4v6yS6AI5VpBDgjK7y7TUQ, linux-omap-u79uwXL29TY76Z2rM5mHXA, sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA, Alexandre Bailon Currently, only the PIO mode is supported. This add support of CPPI 4.1 to DA8xx. As the In DA8xx the CPPI 4.1 DMA is a part of the USB. Create the CPPI 4.1 device as a child of USB. Signed-off-by: Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> --- drivers/usb/musb/Kconfig | 4 ++-- drivers/usb/musb/da8xx.c | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig index 72a2a50..5506a9c 100644 --- a/drivers/usb/musb/Kconfig +++ b/drivers/usb/musb/Kconfig @@ -160,8 +160,8 @@ config USB_TI_CPPI_DMA Enable DMA transfers when TI CPPI DMA is available. config USB_TI_CPPI41_DMA - bool 'TI CPPI 4.1 (AM335x)' - depends on ARCH_OMAP && DMADEVICES + bool 'TI CPPI 4.1' + depends on (ARCH_OMAP || ARCH_DAVINCI_DA8XX) && DMADEVICES select TI_CPPI41 config USB_TUSB_OMAP_DMA diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index cd3d763..5f50a78 100644 --- a/drivers/usb/musb/da8xx.c +++ b/drivers/usb/musb/da8xx.c @@ -33,6 +33,7 @@ #include <linux/clk.h> #include <linux/err.h> #include <linux/io.h> +#include <linux/of_platform.h> #include <linux/phy/phy.h> #include <linux/platform_device.h> #include <linux/dma-mapping.h> @@ -457,12 +458,40 @@ static inline u8 get_vbus_power(struct device *dev) return current_uA / 1000 / 2; } +#ifdef CONFIG_USB_TI_CPPI41_DM +static void da8xx_dma_controller_callback(struct dma_controller *c) +{ + struct musb *musb = c->musb; + void __iomem *reg_base = musb->ctrl_base; + + musb_writel(reg_base, DA8XX_USB_END_OF_INTR_REG, 0); +} + +static struct dma_controller * +da8xx_dma_controller_create(struct musb *musb, void __iomem *base) +{ + struct dma_controller *controller; + + controller = cppi41_dma_controller_create(musb, base); + if (IS_ERR_OR_NULL(controller)) + return controller; + + controller->dma_callback = da8xx_dma_controller_callback; + + return controller; +} +#endif + static const struct musb_platform_ops da8xx_ops = { - .quirks = MUSB_INDEXED_EP, + .quirks = MUSB_INDEXED_EP | MUSB_DMA_CPPI41, .init = da8xx_musb_init, .exit = da8xx_musb_exit, .fifo_mode = 2, +#ifdef CONFIG_USB_TI_CPPI41_DMA + .dma_init = da8xx_dma_controller_create, + .dma_exit = cppi41_dma_controller_destroy, +#endif .enable = da8xx_musb_enable, .disable = da8xx_musb_disable, @@ -534,6 +563,10 @@ static int da8xx_probe(struct platform_device *pdev) } platform_set_drvdata(pdev, glue); + ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); + if (ret) + return ret; + memset(musb_resources, 0x00, sizeof(*musb_resources) * ARRAY_SIZE(musb_resources)); -- 2.10.2 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 14+ messages in thread
[parent not found: <20170119140835.18981-4-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH v3 3/5] usb: musb: Add support of CPPI 4.1 DMA controller to DA8xx [not found] ` <20170119140835.18981-4-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> @ 2017-01-19 15:56 ` Alexandre Bailon 2017-01-19 16:38 ` Sergei Shtylyov 1 sibling, 0 replies; 14+ messages in thread From: Alexandre Bailon @ 2017-01-19 15:56 UTC (permalink / raw) To: b-liu-l0cyMroinI0 Cc: nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, tony-4v6yS6AI5VpBDgjK7y7TUQ, linux-omap-u79uwXL29TY76Z2rM5mHXA, sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA On 01/19/2017 03:08 PM, Alexandre Bailon wrote: > Currently, only the PIO mode is supported. > This add support of CPPI 4.1 to DA8xx. > As the In DA8xx the CPPI 4.1 DMA is a part of the USB. > Create the CPPI 4.1 device as a child of USB. > > Signed-off-by: Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> > --- > drivers/usb/musb/Kconfig | 4 ++-- > drivers/usb/musb/da8xx.c | 35 ++++++++++++++++++++++++++++++++++- > 2 files changed, 36 insertions(+), 3 deletions(-) > > diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig > index 72a2a50..5506a9c 100644 > --- a/drivers/usb/musb/Kconfig > +++ b/drivers/usb/musb/Kconfig > @@ -160,8 +160,8 @@ config USB_TI_CPPI_DMA > Enable DMA transfers when TI CPPI DMA is available. > > config USB_TI_CPPI41_DMA > - bool 'TI CPPI 4.1 (AM335x)' > - depends on ARCH_OMAP && DMADEVICES > + bool 'TI CPPI 4.1' > + depends on (ARCH_OMAP || ARCH_DAVINCI_DA8XX) && DMADEVICES > select TI_CPPI41 > > config USB_TUSB_OMAP_DMA > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c > index cd3d763..5f50a78 100644 > --- a/drivers/usb/musb/da8xx.c > +++ b/drivers/usb/musb/da8xx.c > @@ -33,6 +33,7 @@ > #include <linux/clk.h> > #include <linux/err.h> > #include <linux/io.h> > +#include <linux/of_platform.h> > #include <linux/phy/phy.h> > #include <linux/platform_device.h> > #include <linux/dma-mapping.h> > @@ -457,12 +458,40 @@ static inline u8 get_vbus_power(struct device *dev) > return current_uA / 1000 / 2; > } > > +#ifdef CONFIG_USB_TI_CPPI41_DM There is a typo here... > +static void da8xx_dma_controller_callback(struct dma_controller *c) > +{ > + struct musb *musb = c->musb; > + void __iomem *reg_base = musb->ctrl_base; > + > + musb_writel(reg_base, DA8XX_USB_END_OF_INTR_REG, 0); > +} > + > +static struct dma_controller * > +da8xx_dma_controller_create(struct musb *musb, void __iomem *base) > +{ > + struct dma_controller *controller; > + > + controller = cppi41_dma_controller_create(musb, base); > + if (IS_ERR_OR_NULL(controller)) > + return controller; > + > + controller->dma_callback = da8xx_dma_controller_callback; > + > + return controller; > +} > +#endif > + > static const struct musb_platform_ops da8xx_ops = { > - .quirks = MUSB_INDEXED_EP, > + .quirks = MUSB_INDEXED_EP | MUSB_DMA_CPPI41, > .init = da8xx_musb_init, > .exit = da8xx_musb_exit, > > .fifo_mode = 2, > +#ifdef CONFIG_USB_TI_CPPI41_DMA > + .dma_init = da8xx_dma_controller_create, > + .dma_exit = cppi41_dma_controller_destroy, > +#endif > .enable = da8xx_musb_enable, > .disable = da8xx_musb_disable, > > @@ -534,6 +563,10 @@ static int da8xx_probe(struct platform_device *pdev) > } > platform_set_drvdata(pdev, glue); > > + ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); > + if (ret) > + return ret; > + > memset(musb_resources, 0x00, sizeof(*musb_resources) * > ARRAY_SIZE(musb_resources)); > > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3 3/5] usb: musb: Add support of CPPI 4.1 DMA controller to DA8xx [not found] ` <20170119140835.18981-4-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> 2017-01-19 15:56 ` Alexandre Bailon @ 2017-01-19 16:38 ` Sergei Shtylyov 1 sibling, 0 replies; 14+ messages in thread From: Sergei Shtylyov @ 2017-01-19 16:38 UTC (permalink / raw) To: Alexandre Bailon, b-liu-l0cyMroinI0 Cc: nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, tony-4v6yS6AI5VpBDgjK7y7TUQ, linux-omap-u79uwXL29TY76Z2rM5mHXA, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA On 01/19/2017 05:08 PM, Alexandre Bailon wrote: > Currently, only the PIO mode is supported. > This add support of CPPI 4.1 to DA8xx. > As the In DA8xx the CPPI 4.1 DMA is a part of the USB. > Create the CPPI 4.1 device as a child of USB. > > Signed-off-by: Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> > --- > drivers/usb/musb/Kconfig | 4 ++-- > drivers/usb/musb/da8xx.c | 35 ++++++++++++++++++++++++++++++++++- > 2 files changed, 36 insertions(+), 3 deletions(-) > > diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig > index 72a2a50..5506a9c 100644 > --- a/drivers/usb/musb/Kconfig > +++ b/drivers/usb/musb/Kconfig > @@ -160,8 +160,8 @@ config USB_TI_CPPI_DMA > Enable DMA transfers when TI CPPI DMA is available. > > config USB_TI_CPPI41_DMA > - bool 'TI CPPI 4.1 (AM335x)' > - depends on ARCH_OMAP && DMADEVICES > + bool 'TI CPPI 4.1' > + depends on (ARCH_OMAP || ARCH_DAVINCI_DA8XX) && DMADEVICES > select TI_CPPI41 > > config USB_TUSB_OMAP_DMA > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c > index cd3d763..5f50a78 100644 > --- a/drivers/usb/musb/da8xx.c > +++ b/drivers/usb/musb/da8xx.c [...] > @@ -457,12 +458,40 @@ static inline u8 get_vbus_power(struct device *dev) > return current_uA / 1000 / 2; > } > > +#ifdef CONFIG_USB_TI_CPPI41_DM CONFIG_USB_TI_CPPI41_DMA! :-) [...] MBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v3 4/5] usb: musb: musb_cppi41: Workaround DMA stall issue during teardown [not found] ` <20170119140835.18981-1-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> ` (2 preceding siblings ...) 2017-01-19 14:08 ` [PATCH v3 3/5] usb: musb: Add support of CPPI 4.1 DMA controller to DA8xx Alexandre Bailon @ 2017-01-19 14:08 ` Alexandre Bailon [not found] ` <20170119140835.18981-5-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> 2017-01-19 14:08 ` [PATCH v3 5/5] usb: musb: da8xx: Add a primary support of PM runtime Alexandre Bailon 4 siblings, 1 reply; 14+ messages in thread From: Alexandre Bailon @ 2017-01-19 14:08 UTC (permalink / raw) To: b-liu-l0cyMroinI0 Cc: nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, tony-4v6yS6AI5VpBDgjK7y7TUQ, linux-omap-u79uwXL29TY76Z2rM5mHXA, sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA, Alexandre Bailon The DMA may hung up if a teardown is initiated while an endpoint is still active (Advisory 2.3.27 of DA8xx errata). To workaround this issue, add a delay before to initiate the teardown. Signed-off-by: Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> --- drivers/usb/musb/da8xx.c | 2 +- drivers/usb/musb/musb_core.h | 1 + drivers/usb/musb/musb_cppi41.c | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 5f50a78..8c9850c 100644 --- a/drivers/usb/musb/da8xx.c +++ b/drivers/usb/musb/da8xx.c @@ -483,7 +483,7 @@ da8xx_dma_controller_create(struct musb *musb, void __iomem *base) #endif static const struct musb_platform_ops da8xx_ops = { - .quirks = MUSB_INDEXED_EP | MUSB_DMA_CPPI41, + .quirks = MUSB_INDEXED_EP | MUSB_DMA_CPPI41 | MUSB_DA8XX, .init = da8xx_musb_init, .exit = da8xx_musb_exit, diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index ade902e..d129278 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h @@ -172,6 +172,7 @@ struct musb_io; */ struct musb_platform_ops { +#define MUSB_DA8XX BIT(7) #define MUSB_DMA_UX500 BIT(6) #define MUSB_DMA_CPPI41 BIT(5) #define MUSB_DMA_CPPI BIT(4) diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c index 1fe7eae..d371d05 100644 --- a/drivers/usb/musb/musb_cppi41.c +++ b/drivers/usb/musb/musb_cppi41.c @@ -554,6 +554,10 @@ static int cppi41_dma_channel_abort(struct dma_channel *channel) } } + /* DA8xx Advisory 2.3.27: wait 250 ms before to start the teardown */ + if (musb->io.quirks & MUSB_DA8XX) + mdelay(250); + tdbit = 1 << cppi41_channel->port_num; if (is_tx) tdbit <<= 16; -- 2.10.2 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 14+ messages in thread
[parent not found: <20170119140835.18981-5-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH v3 4/5] usb: musb: musb_cppi41: Workaround DMA stall issue during teardown [not found] ` <20170119140835.18981-5-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> @ 2017-01-19 16:56 ` Tony Lindgren [not found] ` <20170119165646.GV7403-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org> 0 siblings, 1 reply; 14+ messages in thread From: Tony Lindgren @ 2017-01-19 16:56 UTC (permalink / raw) To: Alexandre Bailon Cc: b-liu-l0cyMroinI0, nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, linux-omap-u79uwXL29TY76Z2rM5mHXA, sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA * Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> [170119 06:09]: > The DMA may hung up if a teardown is initiated while an endpoint is still > active (Advisory 2.3.27 of DA8xx errata). > To workaround this issue, add a delay before to initiate the teardown. > > Signed-off-by: Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> > --- > drivers/usb/musb/da8xx.c | 2 +- > drivers/usb/musb/musb_core.h | 1 + > drivers/usb/musb/musb_cppi41.c | 4 ++++ > 3 files changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c > index 5f50a78..8c9850c 100644 > --- a/drivers/usb/musb/da8xx.c > +++ b/drivers/usb/musb/da8xx.c > @@ -483,7 +483,7 @@ da8xx_dma_controller_create(struct musb *musb, void __iomem *base) > #endif > > static const struct musb_platform_ops da8xx_ops = { > - .quirks = MUSB_INDEXED_EP | MUSB_DMA_CPPI41, > + .quirks = MUSB_INDEXED_EP | MUSB_DMA_CPPI41 | MUSB_DA8XX, > .init = da8xx_musb_init, > .exit = da8xx_musb_exit, > > diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h > index ade902e..d129278 100644 > --- a/drivers/usb/musb/musb_core.h > +++ b/drivers/usb/musb/musb_core.h > @@ -172,6 +172,7 @@ struct musb_io; > */ > struct musb_platform_ops { > > +#define MUSB_DA8XX BIT(7) > #define MUSB_DMA_UX500 BIT(6) > #define MUSB_DMA_CPPI41 BIT(5) > #define MUSB_DMA_CPPI BIT(4) > diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c > index 1fe7eae..d371d05 100644 > --- a/drivers/usb/musb/musb_cppi41.c > +++ b/drivers/usb/musb/musb_cppi41.c > @@ -554,6 +554,10 @@ static int cppi41_dma_channel_abort(struct dma_channel *channel) > } > } > > + /* DA8xx Advisory 2.3.27: wait 250 ms before to start the teardown */ > + if (musb->io.quirks & MUSB_DA8XX) > + mdelay(250); > + > tdbit = 1 << cppi41_channel->port_num; > if (is_tx) > tdbit <<= 16; How about replace the do while loop calling dmaengine_terminate_all() with deferred work doing that? That way it's more generic as it seems there's no hurry doing that after the musb registers are cleared. That would also allow getting rid of the two current udelay() calls there that also seems nasty. Regards, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <20170119165646.GV7403-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>]
* Re: [PATCH v3 4/5] usb: musb: musb_cppi41: Workaround DMA stall issue during teardown [not found] ` <20170119165646.GV7403-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org> @ 2017-01-20 15:03 ` Alexandre Bailon 2017-01-20 17:23 ` Bin Liu 1 sibling, 0 replies; 14+ messages in thread From: Alexandre Bailon @ 2017-01-20 15:03 UTC (permalink / raw) To: Tony Lindgren Cc: b-liu-l0cyMroinI0, nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, linux-omap-u79uwXL29TY76Z2rM5mHXA, sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA On 01/19/2017 05:56 PM, Tony Lindgren wrote: > * Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> [170119 06:09]: >> The DMA may hung up if a teardown is initiated while an endpoint is still >> active (Advisory 2.3.27 of DA8xx errata). >> To workaround this issue, add a delay before to initiate the teardown. >> >> Signed-off-by: Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> >> --- >> drivers/usb/musb/da8xx.c | 2 +- >> drivers/usb/musb/musb_core.h | 1 + >> drivers/usb/musb/musb_cppi41.c | 4 ++++ >> 3 files changed, 6 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c >> index 5f50a78..8c9850c 100644 >> --- a/drivers/usb/musb/da8xx.c >> +++ b/drivers/usb/musb/da8xx.c >> @@ -483,7 +483,7 @@ da8xx_dma_controller_create(struct musb *musb, void __iomem *base) >> #endif >> >> static const struct musb_platform_ops da8xx_ops = { >> - .quirks = MUSB_INDEXED_EP | MUSB_DMA_CPPI41, >> + .quirks = MUSB_INDEXED_EP | MUSB_DMA_CPPI41 | MUSB_DA8XX, >> .init = da8xx_musb_init, >> .exit = da8xx_musb_exit, >> >> diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h >> index ade902e..d129278 100644 >> --- a/drivers/usb/musb/musb_core.h >> +++ b/drivers/usb/musb/musb_core.h >> @@ -172,6 +172,7 @@ struct musb_io; >> */ >> struct musb_platform_ops { >> >> +#define MUSB_DA8XX BIT(7) >> #define MUSB_DMA_UX500 BIT(6) >> #define MUSB_DMA_CPPI41 BIT(5) >> #define MUSB_DMA_CPPI BIT(4) >> diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c >> index 1fe7eae..d371d05 100644 >> --- a/drivers/usb/musb/musb_cppi41.c >> +++ b/drivers/usb/musb/musb_cppi41.c >> @@ -554,6 +554,10 @@ static int cppi41_dma_channel_abort(struct dma_channel *channel) >> } >> } >> >> + /* DA8xx Advisory 2.3.27: wait 250 ms before to start the teardown */ >> + if (musb->io.quirks & MUSB_DA8XX) >> + mdelay(250); >> + >> tdbit = 1 << cppi41_channel->port_num; >> if (is_tx) >> tdbit <<= 16; > > How about replace the do while loop calling dmaengine_terminate_all() with > deferred work doing that? That would be great but I don't know how hard to would be to do it. Right after the teardown, we may have to queue a new request. But we must be sure that the teardown has completed before to start a new transfer. And because it happen in atomic section, we must also defer it. > > That way it's more generic as it seems there's no hurry doing that > after the musb registers are cleared. That would also allow getting rid of > the two current udelay() calls there that also seems nasty. > > Regards, > > Tony > Regards, Alexandre -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3 4/5] usb: musb: musb_cppi41: Workaround DMA stall issue during teardown [not found] ` <20170119165646.GV7403-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org> 2017-01-20 15:03 ` Alexandre Bailon @ 2017-01-20 17:23 ` Bin Liu 2017-01-20 18:45 ` Tony Lindgren 1 sibling, 1 reply; 14+ messages in thread From: Bin Liu @ 2017-01-20 17:23 UTC (permalink / raw) To: Tony Lindgren Cc: Alexandre Bailon, nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, linux-omap-u79uwXL29TY76Z2rM5mHXA, sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA On Thu, Jan 19, 2017 at 08:56:46AM -0800, Tony Lindgren wrote: > * Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> [170119 06:09]: > > The DMA may hung up if a teardown is initiated while an endpoint is still > > active (Advisory 2.3.27 of DA8xx errata). > > To workaround this issue, add a delay before to initiate the teardown. > > > > Signed-off-by: Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> > > --- > > drivers/usb/musb/da8xx.c | 2 +- > > drivers/usb/musb/musb_core.h | 1 + > > drivers/usb/musb/musb_cppi41.c | 4 ++++ > > 3 files changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c > > index 5f50a78..8c9850c 100644 > > --- a/drivers/usb/musb/da8xx.c > > +++ b/drivers/usb/musb/da8xx.c > > @@ -483,7 +483,7 @@ da8xx_dma_controller_create(struct musb *musb, void __iomem *base) > > #endif > > > > static const struct musb_platform_ops da8xx_ops = { > > - .quirks = MUSB_INDEXED_EP | MUSB_DMA_CPPI41, > > + .quirks = MUSB_INDEXED_EP | MUSB_DMA_CPPI41 | MUSB_DA8XX, > > .init = da8xx_musb_init, > > .exit = da8xx_musb_exit, > > > > diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h > > index ade902e..d129278 100644 > > --- a/drivers/usb/musb/musb_core.h > > +++ b/drivers/usb/musb/musb_core.h > > @@ -172,6 +172,7 @@ struct musb_io; > > */ > > struct musb_platform_ops { > > > > +#define MUSB_DA8XX BIT(7) > > #define MUSB_DMA_UX500 BIT(6) > > #define MUSB_DMA_CPPI41 BIT(5) > > #define MUSB_DMA_CPPI BIT(4) > > diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c > > index 1fe7eae..d371d05 100644 > > --- a/drivers/usb/musb/musb_cppi41.c > > +++ b/drivers/usb/musb/musb_cppi41.c > > @@ -554,6 +554,10 @@ static int cppi41_dma_channel_abort(struct dma_channel *channel) > > } > > } > > > > + /* DA8xx Advisory 2.3.27: wait 250 ms before to start the teardown */ > > + if (musb->io.quirks & MUSB_DA8XX) > > + mdelay(250); > > + > > tdbit = 1 << cppi41_channel->port_num; > > if (is_tx) > > tdbit <<= 16; > > How about replace the do while loop calling dmaengine_terminate_all() with > deferred work doing that? It would be great, but it seems a little hard to implement. If the _abort is initiated by application due to transfer timeout, the application might immediately retry the transfer, then the driver would have to ensure the deferred work is done and the channel is free by that time. I guess we have to evaluate the impact of the do-while loop and the performance impact of the deferred work to know if it is worth it. > > That way it's more generic as it seems there's no hurry doing that > after the musb registers are cleared. That would also allow getting rid of > the two current udelay() calls there that also seems nasty. I don't think replacing the do-while loop will allow to get rid of the two udelay() calls, which are there as barriers for the register changes - clearing MUSB_RXCSR_DMAENAB and flushing FIFO. Regards, -Bin. -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3 4/5] usb: musb: musb_cppi41: Workaround DMA stall issue during teardown 2017-01-20 17:23 ` Bin Liu @ 2017-01-20 18:45 ` Tony Lindgren 0 siblings, 0 replies; 14+ messages in thread From: Tony Lindgren @ 2017-01-20 18:45 UTC (permalink / raw) To: Bin Liu, Alexandre Bailon, nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, linux-omap-u79uwXL29TY76Z2rM5mHXA, sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA * Bin Liu <b-liu-l0cyMroinI0@public.gmane.org> [170120 09:24]: > On Thu, Jan 19, 2017 at 08:56:46AM -0800, Tony Lindgren wrote: > > * Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> [170119 06:09]: > > > The DMA may hung up if a teardown is initiated while an endpoint is still > > > active (Advisory 2.3.27 of DA8xx errata). > > > To workaround this issue, add a delay before to initiate the teardown. > > > > > > Signed-off-by: Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> > > > --- > > > drivers/usb/musb/da8xx.c | 2 +- > > > drivers/usb/musb/musb_core.h | 1 + > > > drivers/usb/musb/musb_cppi41.c | 4 ++++ > > > 3 files changed, 6 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c > > > index 5f50a78..8c9850c 100644 > > > --- a/drivers/usb/musb/da8xx.c > > > +++ b/drivers/usb/musb/da8xx.c > > > @@ -483,7 +483,7 @@ da8xx_dma_controller_create(struct musb *musb, void __iomem *base) > > > #endif > > > > > > static const struct musb_platform_ops da8xx_ops = { > > > - .quirks = MUSB_INDEXED_EP | MUSB_DMA_CPPI41, > > > + .quirks = MUSB_INDEXED_EP | MUSB_DMA_CPPI41 | MUSB_DA8XX, > > > .init = da8xx_musb_init, > > > .exit = da8xx_musb_exit, > > > > > > diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h > > > index ade902e..d129278 100644 > > > --- a/drivers/usb/musb/musb_core.h > > > +++ b/drivers/usb/musb/musb_core.h > > > @@ -172,6 +172,7 @@ struct musb_io; > > > */ > > > struct musb_platform_ops { > > > > > > +#define MUSB_DA8XX BIT(7) > > > #define MUSB_DMA_UX500 BIT(6) > > > #define MUSB_DMA_CPPI41 BIT(5) > > > #define MUSB_DMA_CPPI BIT(4) > > > diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c > > > index 1fe7eae..d371d05 100644 > > > --- a/drivers/usb/musb/musb_cppi41.c > > > +++ b/drivers/usb/musb/musb_cppi41.c > > > @@ -554,6 +554,10 @@ static int cppi41_dma_channel_abort(struct dma_channel *channel) > > > } > > > } > > > > > > + /* DA8xx Advisory 2.3.27: wait 250 ms before to start the teardown */ > > > + if (musb->io.quirks & MUSB_DA8XX) > > > + mdelay(250); > > > + > > > tdbit = 1 << cppi41_channel->port_num; > > > if (is_tx) > > > tdbit <<= 16; > > > > How about replace the do while loop calling dmaengine_terminate_all() with > > deferred work doing that? > > It would be great, but it seems a little hard to implement. If the > _abort is initiated by application due to transfer timeout, the > application might immediately retry the transfer, then the driver would > have to ensure the deferred work is done and the channel is free by that > time. > > I guess we have to evaluate the impact of the do-while loop and the > performance impact of the deferred work to know if it is worth it. > > > > > That way it's more generic as it seems there's no hurry doing that > > after the musb registers are cleared. That would also allow getting rid of > > the two current udelay() calls there that also seems nasty. > > I don't think replacing the do-while loop will allow to get rid of the > two udelay() calls, which are there as barriers for the register changes > - clearing MUSB_RXCSR_DMAENAB and flushing FIFO. OK fine with me. Tony -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v3 5/5] usb: musb: da8xx: Add a primary support of PM runtime [not found] ` <20170119140835.18981-1-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> ` (3 preceding siblings ...) 2017-01-19 14:08 ` [PATCH v3 4/5] usb: musb: musb_cppi41: Workaround DMA stall issue during teardown Alexandre Bailon @ 2017-01-19 14:08 ` Alexandre Bailon [not found] ` <20170119140835.18981-6-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> 4 siblings, 1 reply; 14+ messages in thread From: Alexandre Bailon @ 2017-01-19 14:08 UTC (permalink / raw) To: b-liu-l0cyMroinI0 Cc: nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, tony-4v6yS6AI5VpBDgjK7y7TUQ, linux-omap-u79uwXL29TY76Z2rM5mHXA, sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA, Alexandre Bailon Currently, DA8xx doesn't support PM runtime. In addition, the glue driver is managing the clock itself. But the CPPI DMA needs to manage this clock too. Add support to PM runtime and use the callback to enable / disable the clock. And because the CPPI 4.1 is a child of Da8xx USB, it will be able to enable / disable the clock by using PM runtime. Signed-off-by: Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> --- drivers/usb/musb/da8xx.c | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 8c9850c..c4478c7 100644 --- a/drivers/usb/musb/da8xx.c +++ b/drivers/usb/musb/da8xx.c @@ -30,7 +30,6 @@ */ #include <linux/module.h> -#include <linux/clk.h> #include <linux/err.h> #include <linux/io.h> #include <linux/of_platform.h> @@ -86,7 +85,6 @@ struct da8xx_glue { struct device *dev; struct platform_device *musb; struct platform_device *usb_phy; - struct clk *clk; struct phy *phy; }; @@ -377,11 +375,7 @@ static int da8xx_musb_init(struct musb *musb) musb->mregs += DA8XX_MENTOR_CORE_OFFSET; - ret = clk_prepare_enable(glue->clk); - if (ret) { - dev_err(glue->dev, "failed to enable clock\n"); - return ret; - } + pm_runtime_get_sync(musb->controller->parent); /* Returns zero if e.g. not clocked */ rev = musb_readl(reg_base, DA8XX_USB_REVISION_REG); @@ -424,7 +418,7 @@ static int da8xx_musb_init(struct musb *musb) err_phy_power_on: phy_exit(glue->phy); fail: - clk_disable_unprepare(glue->clk); + pm_runtime_put_sync(musb->controller->parent); return ret; } @@ -436,7 +430,7 @@ static int da8xx_musb_exit(struct musb *musb) phy_power_off(glue->phy); phy_exit(glue->phy); - clk_disable_unprepare(glue->clk); + pm_runtime_put_sync(musb->controller->parent); usb_put_phy(musb->xceiv); @@ -519,7 +513,6 @@ static int da8xx_probe(struct platform_device *pdev) struct musb_hdrc_platform_data *pdata = dev_get_platdata(&pdev->dev); struct da8xx_glue *glue; struct platform_device_info pinfo; - struct clk *clk; struct device_node *np = pdev->dev.of_node; int ret; @@ -527,12 +520,6 @@ static int da8xx_probe(struct platform_device *pdev) if (!glue) return -ENOMEM; - clk = devm_clk_get(&pdev->dev, "usb20"); - if (IS_ERR(clk)) { - dev_err(&pdev->dev, "failed to get clock\n"); - return PTR_ERR(clk); - } - glue->phy = devm_phy_get(&pdev->dev, "usb-phy"); if (IS_ERR(glue->phy)) { if (PTR_ERR(glue->phy) != -EPROBE_DEFER) @@ -541,7 +528,6 @@ static int da8xx_probe(struct platform_device *pdev) } glue->dev = &pdev->dev; - glue->clk = clk; if (IS_ENABLED(CONFIG_OF) && np) { pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); @@ -587,6 +573,8 @@ static int da8xx_probe(struct platform_device *pdev) pinfo.data = pdata; pinfo.size_data = sizeof(*pdata); + pm_runtime_enable(&pdev->dev); + glue->musb = platform_device_register_full(&pinfo); ret = PTR_ERR_OR_ZERO(glue->musb); if (ret) { @@ -603,6 +591,7 @@ static int da8xx_remove(struct platform_device *pdev) platform_device_unregister(glue->musb); usb_phy_generic_unregister(glue->usb_phy); + pm_runtime_disable(&pdev->dev); return 0; } -- 2.10.2 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 14+ messages in thread
[parent not found: <20170119140835.18981-6-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>]
* Re: [PATCH v3 5/5] usb: musb: da8xx: Add a primary support of PM runtime [not found] ` <20170119140835.18981-6-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> @ 2017-01-19 16:42 ` Sergei Shtylyov [not found] ` <6287b54d-c5ed-dc2d-2077-3eaa4a4e7d4a-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org> 0 siblings, 1 reply; 14+ messages in thread From: Sergei Shtylyov @ 2017-01-19 16:42 UTC (permalink / raw) To: Alexandre Bailon, b-liu-l0cyMroinI0 Cc: nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, tony-4v6yS6AI5VpBDgjK7y7TUQ, linux-omap-u79uwXL29TY76Z2rM5mHXA, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA On 01/19/2017 05:08 PM, Alexandre Bailon wrote: > Currently, DA8xx doesn't support PM runtime. > In addition, the glue driver is managing the clock itself. > But the CPPI DMA needs to manage this clock too. > Add support to PM runtime and use the callback to enable / disable > the clock. I think this sentence is stale now.... > And because the CPPI 4.1 is a child of Da8xx USB, > it will be able to enable / disable the clock by using PM runtime. > > Signed-off-by: Alexandre Bailon <abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> > --- > drivers/usb/musb/da8xx.c | 23 ++++++----------------- > 1 file changed, 6 insertions(+), 17 deletions(-) > > diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c > index 8c9850c..c4478c7 100644 > --- a/drivers/usb/musb/da8xx.c > +++ b/drivers/usb/musb/da8xx.c [...] > @@ -377,11 +375,7 @@ static int da8xx_musb_init(struct musb *musb) > > musb->mregs += DA8XX_MENTOR_CORE_OFFSET; > > - ret = clk_prepare_enable(glue->clk); > - if (ret) { > - dev_err(glue->dev, "failed to enable clock\n"); > - return ret; > - } > + pm_runtime_get_sync(musb->controller->parent); > > /* Returns zero if e.g. not clocked */ > rev = musb_readl(reg_base, DA8XX_USB_REVISION_REG); > @@ -424,7 +418,7 @@ static int da8xx_musb_init(struct musb *musb) > err_phy_power_on: > phy_exit(glue->phy); > fail: > - clk_disable_unprepare(glue->clk); > + pm_runtime_put_sync(musb->controller->parent); Not sure we need put_sync() here and below -- usually a simple put() is used... [...] MBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <6287b54d-c5ed-dc2d-2077-3eaa4a4e7d4a-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org>]
* Re: [PATCH v3 5/5] usb: musb: da8xx: Add a primary support of PM runtime [not found] ` <6287b54d-c5ed-dc2d-2077-3eaa4a4e7d4a-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org> @ 2017-01-20 5:40 ` Sekhar Nori 0 siblings, 0 replies; 14+ messages in thread From: Sekhar Nori @ 2017-01-20 5:40 UTC (permalink / raw) To: Sergei Shtylyov, Alexandre Bailon, b-liu-l0cyMroinI0 Cc: khilman-rdvid1DuHRBWk0Htik3J/w, ptitiano-rdvid1DuHRBWk0Htik3J/w, tony-4v6yS6AI5VpBDgjK7y7TUQ, linux-omap-u79uwXL29TY76Z2rM5mHXA, grygorii.strashko-l0cyMroinI0, linux-usb-u79uwXL29TY76Z2rM5mHXA On Thursday 19 January 2017 10:12 PM, Sergei Shtylyov wrote: > On 01/19/2017 05:08 PM, Alexandre Bailon wrote: > >> Currently, DA8xx doesn't support PM runtime. >> In addition, the glue driver is managing the clock itself. >> But the CPPI DMA needs to manage this clock too. >> Add support to PM runtime and use the callback to enable / disable >> the clock. > > I think this sentence is stale now.... And please clarify what you mean by "DA8xx doesn't support PM runtime." because we do have drivers using PM runtime being used on DA8xx. Thanks, Sekhar -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2017-01-20 18:45 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-01-19 14:08 [PATCH v3 0/5] usb: musb: da8xx: Add DMA support Alexandre Bailon [not found] ` <20170119140835.18981-1-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> 2017-01-19 14:08 ` [PATCH v3 1/5] usb: musb: da8xx: Remove CPPI 3.0 quirk and methods Alexandre Bailon 2017-01-19 14:08 ` [PATCH v3 2/5] usb: musb: Use shared irq Alexandre Bailon 2017-01-19 14:08 ` [PATCH v3 3/5] usb: musb: Add support of CPPI 4.1 DMA controller to DA8xx Alexandre Bailon [not found] ` <20170119140835.18981-4-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> 2017-01-19 15:56 ` Alexandre Bailon 2017-01-19 16:38 ` Sergei Shtylyov 2017-01-19 14:08 ` [PATCH v3 4/5] usb: musb: musb_cppi41: Workaround DMA stall issue during teardown Alexandre Bailon [not found] ` <20170119140835.18981-5-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> 2017-01-19 16:56 ` Tony Lindgren [not found] ` <20170119165646.GV7403-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org> 2017-01-20 15:03 ` Alexandre Bailon 2017-01-20 17:23 ` Bin Liu 2017-01-20 18:45 ` Tony Lindgren 2017-01-19 14:08 ` [PATCH v3 5/5] usb: musb: da8xx: Add a primary support of PM runtime Alexandre Bailon [not found] ` <20170119140835.18981-6-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org> 2017-01-19 16:42 ` Sergei Shtylyov [not found] ` <6287b54d-c5ed-dc2d-2077-3eaa4a4e7d4a-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org> 2017-01-20 5:40 ` Sekhar Nori
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.