patch-2.4.19 linux-2.4.19/arch/arm/mach-sa1100/dma-sa1100.c
Next file: linux-2.4.19/arch/arm/mach-sa1100/dma-sa1111.c
Previous file: linux-2.4.19/arch/arm/mach-sa1100/cpu-sa1110.c
Back to the patch index
Back to the overall index
- Lines: 38
- Date:
Fri Aug 2 17:39:42 2002
- Orig file:
linux-2.4.18/arch/arm/mach-sa1100/dma-sa1100.c
- Orig date:
Thu Oct 25 13:53:46 2001
diff -urN linux-2.4.18/arch/arm/mach-sa1100/dma-sa1100.c linux-2.4.19/arch/arm/mach-sa1100/dma-sa1100.c
@@ -147,6 +147,19 @@
}
/*
+ * This improves latency if there are some active spinning
+ * buffers. We kill them altogether.
+ */
+ if (dma->spin_ref > 0) {
+ if (channel_is_sa1111_sac(dma - dma_chan))
+ sa1111_reset_sac_dma(dma - dma_chan);
+ else
+ dma->regs->ClrDCSR =
+ DCSR_STRTA|DCSR_STRTB|DCSR_DONEA|DCSR_DONEB;
+ dma->spin_ref = 0;
+ }
+
+ /*
* Let's try to start DMA on the current buffer.
* If DMA is busy then we break here.
*/
@@ -188,8 +201,7 @@
*/
DPRINTK("IRQ: buf done\n");
dma->curr = buf->next;
- if (dma->curr == NULL)
- dma->spin_ref = -dma->spin_ref;
+ dma->spin_ref = -dma->spin_ref;
if (dma->head == buf)
dma->head = NULL;
if (dma->callback) {
@@ -468,7 +480,6 @@
int flags;
save_flags_cli(flags);
dma->stopped = 0;
- dma->spin_ref = 0;
process_dma(dma);
restore_flags(flags);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)