davinci: edma: clear events in edma_start()

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Linux Kernel Mailing List
Date: Wednesday, April 7, 2010 - 11:59 am

Gitweb:     http://git.kernel.org/linus/bb17ef102b72e38557bfa829511e06c4bd3bb972
Commit:     bb17ef102b72e38557bfa829511e06c4bd3bb972
Parent:     5eb2e891f038c8e04757f4536b9693faf35978a3
Author:     Brian Niebuhr <bniebuhr3@gmail.com>
AuthorDate: Tue Mar 9 16:48:03 2010 -0600
Committer:  Kevin Hilman <khilman@deeprootsystems.com>
CommitDate: Mon Apr 5 15:25:11 2010 -0700

    davinci: edma: clear events in edma_start()
    
    This patch fixes an issue where a DMA channel can erroneously process an
    event generated by a previous transfer.  A failure case is where DMA is
    being used for SPI transmit and receive channels on OMAP L138.  In this
    case there is a single bit that controls all event generation from the
    SPI peripheral.  Therefore it is possible that between when edma_stop()
    has been called for the transmit channel on a previous transfer and
    edma_start() is called for the transmit channel on a subsequent transfer,
    that a transmit event has been generated.
    
    The fix is to clear events in edma_start().  This prevents false events
    from being processed when events are enabled for that channel.
    
    Signed-off-by: Brian Niebuhr <bniebuhr@efjohnson.com>
    Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
---
 arch/arm/mach-davinci/dma.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/mach-davinci/dma.c
index 15dd886..260485c 100644
--- a/arch/arm/mach-davinci/dma.c
+++ b/arch/arm/mach-davinci/dma.c
@@ -1266,7 +1266,8 @@ int edma_start(unsigned channel)
 		/* EDMA channel with event association */
 		pr_debug("EDMA: ER%d %08x\n", j,
 			edma_shadow0_read_array(ctlr, SH_ER, j));
-		/* Clear any pending error */
+		/* Clear any pending event or error */
+		edma_write_array(ctlr, EDMA_ECR, j, mask);
 		edma_write_array(ctlr, EDMA_EMCR, j, mask);
 		/* Clear any SER */
 		edma_shadow0_write_array(ctlr, SH_SECR, j, mask);
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
davinci: edma: clear events in edma_start(), Linux Kernel Mailing ..., (Wed Apr 7, 11:59 am)