usb: musb: Fix up DMA related macros
authorTony Lindgren <tony@atomide.com>
Fri, 1 May 2015 19:29:27 +0000 (12:29 -0700)
committerFelipe Balbi <balbi@ti.com>
Thu, 7 May 2015 18:35:46 +0000 (13:35 -0500)
Pass struct musb to tusb_dma_omap() and is_cppi_enabled(),
and add macros for the other DMA controllers. Populate the
platform specific quirks with the DMA type and use it during
runtime.

Note that platform glue layers with no custom DMA code are
tagged with MUSB_DMA_INVENTRA which may have a chance of
working. Looks like the defconfigs for these use PIO_ONLY,
so this should not break existing configs.

Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
14 files changed:
drivers/usb/musb/am35x.c
drivers/usb/musb/blackfin.c
drivers/usb/musb/da8xx.c
drivers/usb/musb/davinci.c
drivers/usb/musb/jz4740.c
drivers/usb/musb/musb_core.c
drivers/usb/musb/musb_dma.h
drivers/usb/musb/musb_dsps.c
drivers/usb/musb/musb_gadget.c
drivers/usb/musb/musb_host.c
drivers/usb/musb/omap2430.c
drivers/usb/musb/tusb6010.c
drivers/usb/musb/tusb6010.h
drivers/usb/musb/ux500.c

index 220fd4d3b41cf671dcfa825daa52be7a0477f6c9..72ce2e862b61216d2559c721ae8fbc8e5439b795 100644 (file)
@@ -438,7 +438,7 @@ static void am35x_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
 }
 
 static const struct musb_platform_ops am35x_ops = {
-       .quirks         = MUSB_INDEXED_EP,
+       .quirks         = MUSB_DMA_INVENTRA | MUSB_INDEXED_EP,
        .init           = am35x_musb_init,
        .exit           = am35x_musb_exit,
 
index 6123b748d2628c1c1927418ea852f9106f466003..2a73a730bfa509b103f3f7990148b40b3dfa81bd 100644 (file)
@@ -465,6 +465,7 @@ static int bfin_musb_exit(struct musb *musb)
 }
 
 static const struct musb_platform_ops bfin_ops = {
+       .quirks         = MUSB_DMA_INVENTRA,
        .init           = bfin_musb_init,
        .exit           = bfin_musb_exit,
 
index 9a9c82a4d35d818116bcfcbb5519debbc35b66dc..06c442c2fb20454c922953d69e3932e3c253cdc0 100644 (file)
@@ -458,7 +458,7 @@ static int da8xx_musb_exit(struct musb *musb)
 }
 
 static const struct musb_platform_ops da8xx_ops = {
-       .quirks         = MUSB_INDEXED_EP,
+       .quirks         = MUSB_DMA_CPPI | MUSB_INDEXED_EP,
        .init           = da8xx_musb_init,
        .exit           = da8xx_musb_exit,
 
index 3c1d9b211b51cab1b3b9491bc21953f4abe1a985..26bfdb33bcc7118132f87c3eabf2c97952503e29 100644 (file)
@@ -284,7 +284,7 @@ static irqreturn_t davinci_musb_interrupt(int irq, void *__hci)
         * mask, state, "vector", and EOI registers.
         */
        cppi = container_of(musb->dma_controller, struct cppi, controller);
-       if (is_cppi_enabled() && musb->dma_controller && !cppi->irq)
+       if (is_cppi_enabled(musb) && musb->dma_controller && !cppi->irq)
                retval = cppi_interrupt(irq, __hci);
 
        /* ack and handle non-CPPI interrupts */
@@ -491,6 +491,7 @@ static int davinci_musb_exit(struct musb *musb)
 }
 
 static const struct musb_platform_ops davinci_ops = {
+       .quirks         = MUSB_DMA_CPPI,
        .init           = davinci_musb_init,
        .exit           = davinci_musb_exit,
 
index bb7b26325a74e11b27ba86f1fab899803cf80f46..b7b5fdc0000e4a293e8192d68044c51e5280d663 100644 (file)
@@ -106,7 +106,7 @@ static int jz4740_musb_exit(struct musb *musb)
 }
 
 static const struct musb_platform_ops jz4740_musb_ops = {
-       .quirks         = MUSB_INDEXED_EP,
+       .quirks         = MUSB_DMA_INVENTRA | MUSB_INDEXED_EP,
        .fifo_mode      = 2,
        .init           = jz4740_musb_init,
        .exit           = jz4740_musb_exit,
index 3789b08ef67b037781e278c41c0d4b2f2d33e5d9..4ac060ab8a89ce0019ead8368c9d925ef531c2d7 100644 (file)
@@ -1659,7 +1659,7 @@ void musb_dma_completion(struct musb *musb, u8 epnum, u8 transmit)
 
        if (!epnum) {
 #ifndef CONFIG_USB_TUSB_OMAP_DMA
-               if (!is_cppi_enabled()) {
+               if (!is_cppi_enabled(musb)) {
                        /* endpoint 0 */
                        if (is_host_active(musb))
                                musb_h_ep0_irq(musb);
index 1d44faa8625254577e55c2292a39a7093a926a2f..555f2aed5a556bf72638dfa0869f9501e91ffa5a 100644 (file)
@@ -68,16 +68,41 @@ struct musb_hw_ep;
 #define        is_dma_capable()        (1)
 #endif
 
-#if defined(CONFIG_USB_TI_CPPI_DMA) || defined(CONFIG_USB_TI_CPPI41_DMA)
-#define        is_cppi_enabled()       1
+#ifdef CONFIG_USB_UX500_DMA
+#define musb_dma_ux500(musb)           (musb->io.quirks & MUSB_DMA_UX500)
+#else
+#define musb_dma_ux500(musb)           0
+#endif
+
+#ifdef CONFIG_USB_TI_CPPI41_DMA
+#define musb_dma_cppi41(musb)          (musb->io.quirks & MUSB_DMA_CPPI41)
+#else
+#define musb_dma_cppi41(musb)          0
+#endif
+
+#ifdef CONFIG_USB_TI_CPPI_DMA
+#define musb_dma_cppi(musb)            (musb->io.quirks & MUSB_DMA_CPPI)
 #else
-#define        is_cppi_enabled()       0
+#define musb_dma_cppi(musb)            0
 #endif
 
 #ifdef CONFIG_USB_TUSB_OMAP_DMA
-#define tusb_dma_omap()                        1
+#define tusb_dma_omap(musb)            (musb->io.quirks & MUSB_DMA_TUSB_OMAP)
+#else
+#define tusb_dma_omap(musb)            0
+#endif
+
+#ifdef CONFIG_USB_INVENTRA_DMA
+#define musb_dma_inventra(musb)                (musb->io.quirks & MUSB_DMA_INVENTRA)
+#else
+#define musb_dma_inventra(musb)                0
+#endif
+
+#if defined(CONFIG_USB_TI_CPPI_DMA) || defined(CONFIG_USB_TI_CPPI41_DMA)
+#define        is_cppi_enabled(musb)           \
+       (musb_dma_cppi(musb) || musb_dma_cppi41(musb))
 #else
-#define tusb_dma_omap()                        0
+#define        is_cppi_enabled(musb)   0
 #endif
 
 /* Anomaly 05000456 - USB Receive Interrupt Is Not Generated in DMA Mode 1
index 65d931a28a14c7e5c66860af7b4e54e12adbb6b5..63a8d5bbd3659f411142d08295c79e9bebea9ccd 100644 (file)
@@ -634,7 +634,7 @@ static void dsps_read_fifo32(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
 }
 
 static struct musb_platform_ops dsps_ops = {
-       .quirks         = MUSB_INDEXED_EP,
+       .quirks         = MUSB_DMA_CPPI41 | MUSB_INDEXED_EP,
        .init           = dsps_musb_init,
        .exit           = dsps_musb_exit,
 
index 4c481cd66c77a9724dc5725d8e950dbc51bf23a5..a94db12878307f5e229633f4fe2edbc8dfd7983a 100644 (file)
@@ -366,7 +366,7 @@ static void txstate(struct musb *musb, struct musb_request *req)
                }
 
 #endif
-               if (is_cppi_enabled()) {
+               if (is_cppi_enabled(musb)) {
                        /* program endpoint CSR first, then setup DMA */
                        csr &= ~(MUSB_TXCSR_P_UNDERRUN | MUSB_TXCSR_TXPKTRDY);
                        csr |= MUSB_TXCSR_DMAENAB | MUSB_TXCSR_DMAMODE |
@@ -402,7 +402,7 @@ static void txstate(struct musb *musb, struct musb_request *req)
                                musb_writew(epio, MUSB_TXCSR, csr);
                                /* invariant: prequest->buf is non-null */
                        }
-               } else if (tusb_dma_omap())
+               } else if (tusb_dma_omap(musb))
                        use_dma = use_dma && c->channel_program(
                                        musb_ep->dma, musb_ep->packet_sz,
                                        request->zero,
@@ -595,7 +595,7 @@ static void rxstate(struct musb *musb, struct musb_request *req)
                return;
        }
 
-       if (is_cppi_enabled() && is_buffer_mapped(req)) {
+       if (is_cppi_enabled(musb) && is_buffer_mapped(req)) {
                struct dma_controller   *c = musb->dma_controller;
                struct dma_channel      *channel = musb_ep->dma;
 
@@ -772,7 +772,7 @@ static void rxstate(struct musb *musb, struct musb_request *req)
                        fifo_count = min_t(unsigned, len, fifo_count);
 
 #ifdef CONFIG_USB_TUSB_OMAP_DMA
-                       if (tusb_dma_omap() && is_buffer_mapped(req)) {
+                       if (tusb_dma_omap(musb) && is_buffer_mapped(req)) {
                                struct dma_controller *c = musb->dma_controller;
                                struct dma_channel *channel = musb_ep->dma;
                                u32 dma_addr = request->dma + request->actual;
index e1fb5d885c18ce6a26cf8f3f18050647682e6309..696396e857967ce857752dd0a1ad50030423b330 100644 (file)
@@ -181,7 +181,7 @@ static inline void musb_h_tx_dma_start(struct musb_hw_ep *ep)
        /* NOTE: no locks here; caller should lock and select EP */
        txcsr = musb_readw(ep->regs, MUSB_TXCSR);
        txcsr |= MUSB_TXCSR_DMAENAB | MUSB_TXCSR_H_WZC_BITS;
-       if (is_cppi_enabled())
+       if (is_cppi_enabled(ep->musb))
                txcsr |= MUSB_TXCSR_DMAMODE;
        musb_writew(ep->regs, MUSB_TXCSR, txcsr);
 }
@@ -294,7 +294,7 @@ start:
 
                if (!hw_ep->tx_channel)
                        musb_h_tx_start(hw_ep);
-               else if (is_cppi_enabled() || tusb_dma_omap())
+               else if (is_cppi_enabled(musb) || tusb_dma_omap(musb))
                        musb_h_tx_dma_start(hw_ep);
        }
 }
@@ -656,7 +656,7 @@ static bool musb_tx_dma_program(struct dma_controller *dma,
        channel->desired_mode = mode;
        musb_writew(epio, MUSB_TXCSR, csr);
 #else
-       if (!is_cppi_enabled() && !tusb_dma_omap())
+       if (!is_cppi_enabled(hw_ep->musb) && !tusb_dma_omap(hw_ep->musb))
                return false;
 
        channel->actual_len = 0;
@@ -901,7 +901,7 @@ finish:
 
                /* kick things off */
 
-               if ((is_cppi_enabled() || tusb_dma_omap()) && dma_channel) {
+               if ((is_cppi_enabled(musb) || tusb_dma_omap(musb)) && dma_channel) {
                        /* Candidate for DMA */
                        dma_channel->actual_len = 0L;
                        qh->segsize = len;
@@ -1441,7 +1441,7 @@ done:
        } else if ((usb_pipeisoc(pipe) || transfer_pending) && dma) {
                if (musb_tx_dma_program(musb->dma_controller, hw_ep, qh, urb,
                                offset, length)) {
-                       if (is_cppi_enabled() || tusb_dma_omap())
+                       if (is_cppi_enabled(musb) || tusb_dma_omap(musb))
                                musb_h_tx_dma_start(hw_ep);
                        return;
                }
index cc752d8c7773176d1338d5927c7b7c3bf4fc5ccd..5546a22db2ed4b07631aad70932c77e4dfc8dbd9 100644 (file)
@@ -493,6 +493,7 @@ static int omap2430_musb_exit(struct musb *musb)
 }
 
 static const struct musb_platform_ops omap2430_ops = {
+       .quirks         = MUSB_DMA_INVENTRA,
        .init           = omap2430_musb_init,
        .exit           = omap2430_musb_exit,
 
index 3a5ffd575438e5d26f53ad8fe8fa52ea82834028..af923ded829ee0acf0b49a2554ee9f7fca983938 100644 (file)
@@ -890,7 +890,7 @@ static irqreturn_t tusb_musb_interrupt(int irq, void *__hci)
 
                dev_dbg(musb->controller, "DMA IRQ %08x\n", dma_src);
                real_dma_src = ~real_dma_src & dma_src;
-               if (tusb_dma_omap() && real_dma_src) {
+               if (tusb_dma_omap(musb) && real_dma_src) {
                        int     tx_source = (real_dma_src & 0xffff);
                        int     i;
 
@@ -1181,7 +1181,7 @@ static int tusb_musb_exit(struct musb *musb)
 }
 
 static const struct musb_platform_ops tusb_ops = {
-       .quirks         = MUSB_IN_TUSB,
+       .quirks         = MUSB_DMA_TUSB_OMAP | MUSB_IN_TUSB,
        .init           = tusb_musb_init,
        .exit           = tusb_musb_exit,
 
index aec86c86ce32619b2a044d8a2ebd1de421f937fa..72cdad23ced97774fdd6b29b5871e8098f606690 100644 (file)
 #ifndef __TUSB6010_H__
 #define __TUSB6010_H__
 
-#ifdef CONFIG_USB_TUSB_OMAP_DMA
-#define tusb_dma_omap()                        1
-#else
-#define tusb_dma_omap()                        0
-#endif
-
 /* VLYNQ control register. 32-bit at offset 0x000 */
 #define TUSB_VLYNQ_CTRL                        0x004
 
index abf72728825fad1cce9a1a2aaec1652514c5dfe6..c6582f13ed487040870131edb6d062b0ffcd5f25 100644 (file)
@@ -188,7 +188,7 @@ static int ux500_musb_exit(struct musb *musb)
 }
 
 static const struct musb_platform_ops ux500_ops = {
-       .quirks         = MUSB_INDEXED_EP,
+       .quirks         = MUSB_DMA_UX500 | MUSB_INDEXED_EP,
        .init           = ux500_musb_init,
        .exit           = ux500_musb_exit,
        .fifo_mode      = 5,