* [PATCH v7 1/3] usb: musb: Use shared irq
[not found] ` <20170329162432.27299-1-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
@ 2017-03-29 16:24 ` Alexandre Bailon
2017-03-29 16:24 ` [PATCH v7 2/3] usb: musb: Add support of CPPI 4.1 DMA controller to DA8xx Alexandre Bailon
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Alexandre Bailon @ 2017-03-29 16:24 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,
linux-usb-u79uwXL29TY76Z2rM5mHXA, grygorii.strashko-l0cyMroinI0,
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 0c3664a..870da18 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -2332,7 +2332,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] 8+ messages in thread* [PATCH v7 2/3] usb: musb: Add support of CPPI 4.1 DMA controller to DA8xx
[not found] ` <20170329162432.27299-1-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-03-29 16:24 ` [PATCH v7 1/3] usb: musb: Use shared irq Alexandre Bailon
@ 2017-03-29 16:24 ` Alexandre Bailon
[not found] ` <20170329162432.27299-3-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-03-29 16:24 ` [PATCH v7 3/3] usb: musb: musb_cppi41: Workaround DMA stall issue during teardown Alexandre Bailon
2017-04-17 4:38 ` [PATCH v7 0/3] usb: musb: da8xx: Add DMA support Bin Liu
3 siblings, 1 reply; 8+ messages in thread
From: Alexandre Bailon @ 2017-03-29 16:24 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,
linux-usb-u79uwXL29TY76Z2rM5mHXA, grygorii.strashko-l0cyMroinI0,
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 | 43 ++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 44 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 d79c288..7b9a44d 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>
@@ -456,12 +457,41 @@ static inline u8 get_vbus_power(struct device *dev)
return current_uA / 1000 / 2;
}
+#ifdef CONFIG_USB_TI_CPPI41_DMA
+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 | MUSB_PRESERVE_SESSION,
+ .quirks = MUSB_INDEXED_EP | MUSB_PRESERVE_SESSION |
+ 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,
@@ -483,6 +513,12 @@ static const struct musb_hdrc_config da8xx_config = {
.multipoint = 1,
};
+static struct of_dev_auxdata da8xx_auxdata_lookup[] __initdata = {
+ OF_DEV_AUXDATA("ti,da830-cppi41", 0x01e01000, "cppi41-dmaengine",
+ NULL),
+ {}
+};
+
static int da8xx_probe(struct platform_device *pdev)
{
struct resource musb_resources[2];
@@ -533,6 +569,11 @@ static int da8xx_probe(struct platform_device *pdev)
}
platform_set_drvdata(pdev, glue);
+ ret = of_platform_populate(pdev->dev.of_node, NULL,
+ da8xx_auxdata_lookup, &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] 8+ messages in thread* [PATCH v7 3/3] usb: musb: musb_cppi41: Workaround DMA stall issue during teardown
[not found] ` <20170329162432.27299-1-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2017-03-29 16:24 ` [PATCH v7 1/3] usb: musb: Use shared irq Alexandre Bailon
2017-03-29 16:24 ` [PATCH v7 2/3] usb: musb: Add support of CPPI 4.1 DMA controller to DA8xx Alexandre Bailon
@ 2017-03-29 16:24 ` Alexandre Bailon
2017-04-17 4:38 ` [PATCH v7 0/3] usb: musb: da8xx: Add DMA support Bin Liu
3 siblings, 0 replies; 8+ messages in thread
From: Alexandre Bailon @ 2017-03-29 16:24 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,
linux-usb-u79uwXL29TY76Z2rM5mHXA, grygorii.strashko-l0cyMroinI0,
Alexandre Bailon
The DMA may hang 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 7b9a44d..5a8a031 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)
static const struct musb_platform_ops da8xx_ops = {
.quirks = MUSB_INDEXED_EP | MUSB_PRESERVE_SESSION |
- MUSB_DMA_CPPI41,
+ 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 5b708be..3e98d42 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(8)
#define MUSB_PRESERVE_SESSION BIT(7)
#define MUSB_DMA_UX500 BIT(6)
#define MUSB_DMA_CPPI41 BIT(5)
diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c
index 355655f..e7c8b1b 100644
--- a/drivers/usb/musb/musb_cppi41.c
+++ b/drivers/usb/musb/musb_cppi41.c
@@ -571,6 +571,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] 8+ messages in thread* Re: [PATCH v7 0/3] usb: musb: da8xx: Add DMA support
[not found] ` <20170329162432.27299-1-abailon-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
` (2 preceding siblings ...)
2017-03-29 16:24 ` [PATCH v7 3/3] usb: musb: musb_cppi41: Workaround DMA stall issue during teardown Alexandre Bailon
@ 2017-04-17 4:38 ` Bin Liu
3 siblings, 0 replies; 8+ messages in thread
From: Bin Liu @ 2017-04-17 4:38 UTC (permalink / raw)
To: Alexandre Bailon
Cc: nsekhar-l0cyMroinI0, khilman-rdvid1DuHRBWk0Htik3J/w,
ptitiano-rdvid1DuHRBWk0Htik3J/w, tony-4v6yS6AI5VpBDgjK7y7TUQ,
linux-omap-u79uwXL29TY76Z2rM5mHXA,
sergei.shtylyov-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8,
linux-usb-u79uwXL29TY76Z2rM5mHXA, grygorii.strashko-l0cyMroinI0
On Wed, Mar 29, 2017 at 06:24:29PM +0200, Alexandre Bailon wrote:
> This series update MUSB driver to add DMA support to DA8xx.
> It should be applied on top of:
> "[PATCH v4 0/3] dmaengine: cppi41: Add dma support to da8xx" and
> "[PATCH] ARM: davinci: Add the clock for the CPPI 4.1 DMA engine"
Applied and sent for v4.12-rc1 merge window.
Regards,
-Bin.
>
> Changes in v7:
> - Remove the patch that was adding runtime PM.
> It was breaking system suspend.
> - Use of_dev_auxdata to map the DT node name to the name expected by the clock.
>
> Changes in v6:
> - Rebased on linux-next. Some patches were conflicting with a series
> adding suspend and resume support.
>
> Changes in v5:
> - Fix a typo in commit message of patch 4
>
> Changes in v4:
> - Update and clarify the commit message of patch 5
> - Fix the typo in patch 3
>
> 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 (3):
> 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
>
> drivers/usb/musb/Kconfig | 4 ++--
> drivers/usb/musb/da8xx.c | 43 +++++++++++++++++++++++++++++++++++++++++-
> drivers/usb/musb/musb_core.c | 2 +-
> drivers/usb/musb/musb_core.h | 1 +
> drivers/usb/musb/musb_cppi41.c | 4 ++++
> 5 files changed, 50 insertions(+), 4 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] 8+ messages in thread