Re: [PATCH] davinci: edma: clear events in edma_start()

2010-03-11 Thread Kevin Hilman
Brian Niebuhr bniebu...@gmail.com writes:

 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 bnieb...@efjohnson.com

Thanks, applying and queuing in davinci-fixes for v2.6.34-rc

Kevin

 ---
  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 5cd48fa..52c16ff 100644
 --- a/arch/arm/mach-davinci/dma.c
 +++ b/arch/arm/mach-davinci/dma.c
 @@ -1290,7 +1290,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);
 -- 
 1.6.3.3

 ___
 Davinci-linux-open-source mailing list
 Davinci-linux-open-source@linux.davincidsp.com
 http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


[PATCH] davinci: edma: clear events in edma_start()

2010-03-10 Thread Brian Niebuhr
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 bnieb...@efjohnson.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 5cd48fa..52c16ff 100644
--- a/arch/arm/mach-davinci/dma.c
+++ b/arch/arm/mach-davinci/dma.c
@@ -1290,7 +1290,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);
-- 
1.6.3.3

___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source