Hello.

Felipe Balbi wrote:

As DaVinci DM646x has a dedicated CPPI DMA interrupt, replace cppi_completion()
(which has always been kind of layering violation) by a complete CPPI interrupt
handler.

Signed-off-by: Dmitry Krivoschekov <[email protected]>
Signed-off-by: Sergei Shtylyov <[email protected]>

---
The patch is against the recent DaVinci tree; untested...

 drivers/usb/musb/cppi_dma.c |   33 ++++++++++++++++++++++++++++++---
 drivers/usb/musb/cppi_dma.h |    7 +++++--
 drivers/usb/musb/davinci.c  |   14 ++++----------
 3 files changed, 39 insertions(+), 15 deletions(-)

Index: linux-davinci/drivers/usb/musb/cppi_dma.c
===================================================================
--- linux-davinci.orig/drivers/usb/musb/cppi_dma.c
+++ linux-davinci/drivers/usb/musb/cppi_dma.c
@@ -1144,17 +1144,27 @@ static bool cppi_rx_scan(struct cppi *cp
        return completed;
 }
-void cppi_completion(struct musb *musb, u32 rx, u32 tx)
+irqreturn_t cppi_interrupt(int irq, void *dev_id)

static ??

  No. Look better, it's called from davinci.c.

@@ -282,16 +283,9 @@ static irqreturn_t davinci_interrupt(int
        /* CPPI interrupts share the same IRQ line, but have their own
         * mask, state, "vector", and EOI registers.
         */
-       if (is_cppi_enabled()) {
-               u32 cppi_tx = musb_readl(tibase, DAVINCI_TXCPPI_MASKED_REG);
-               u32 cppi_rx = musb_readl(tibase, DAVINCI_RXCPPI_MASKED_REG);
-
-               if (cppi_tx || cppi_rx) {
-                       DBG(4, "CPPI IRQ t%x r%x\n", cppi_tx, cppi_rx);
-                       cppi_completion(musb, cppi_rx, cppi_tx);
-                       retval = IRQ_HANDLED;
-               }
-       }
+       cppi = container_of(musb->dma_controller, struct cppi, controller);
+       if (is_cppi_enabled() && musb->dma_controller && !cppi->irq)
+               retval = cppi_interrupt(irq, __hci);

Now that you call request_irq() during controller create, this should be
unnecessary.

  Not all DaVincis have dedivated CPPI IRQ.

You should probably call musb_dma_completion() from your cppi_interrupt() 
though.

  It's called from there, of course.

WBR, Sergei



_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to