diff options
author | Bertrik Sikken <bertrik@sikken.nl> | 2009-04-07 17:08:26 +0000 |
---|---|---|
committer | Bertrik Sikken <bertrik@sikken.nl> | 2009-04-07 17:08:26 +0000 |
commit | 6b63f23648d04dd4d0dee2d878b1457da6b5cf53 (patch) | |
tree | 89e80dab65d01d022a3f8e58fa2a158b38df8370 /firmware | |
parent | e15cf78987dcbaa572e882bc0b5773bde3a852e5 (diff) | |
download | rockbox-6b63f23648d04dd4d0dee2d878b1457da6b5cf53.tar.gz rockbox-6b63f23648d04dd4d0dee2d878b1457da6b5cf53.zip |
Patch by Rafaël Carré - Sansa AMS: Fix a few mistakes in DMA code
DMAC_INT_TC_CLEAR is a write-only reg
HIGH bits of DMAC_SYNC mean synchronisation logic disabled.
Also, according to the OF and to tests, all the peripherals we use run at the same frequency (PCLK?).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20643 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/target/arm/as3525/dma-pl081.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/firmware/target/arm/as3525/dma-pl081.c b/firmware/target/arm/as3525/dma-pl081.c index 8a97986f2c..52fd90f940 100644 --- a/firmware/target/arm/as3525/dma-pl081.c +++ b/firmware/target/arm/as3525/dma-pl081.c | |||
@@ -48,7 +48,7 @@ void dma_release(void) | |||
48 | 48 | ||
49 | void dma_init(void) | 49 | void dma_init(void) |
50 | { | 50 | { |
51 | DMAC_SYNC = 0; | 51 | DMAC_SYNC = 0xffff; /* disable synchronisation logic */ |
52 | VIC_INT_ENABLE |= INTERRUPT_DMAC; | 52 | VIC_INT_ENABLE |= INTERRUPT_DMAC; |
53 | } | 53 | } |
54 | 54 | ||
@@ -88,9 +88,6 @@ void dma_enable_channel(int channel, void *src, void *dst, int peri, | |||
88 | 88 | ||
89 | DMAC_CH_CONTROL(channel) = control; | 89 | DMAC_CH_CONTROL(channel) = control; |
90 | 90 | ||
91 | /* only needed if DMAC and Peripheral do not run at the same clock speed */ | ||
92 | DMAC_SYNC |= (1<<peri); | ||
93 | |||
94 | /* we set the same peripheral as source and destination because we always | 91 | /* we set the same peripheral as source and destination because we always |
95 | * use memory-to-peripheral or peripheral-to-memory transfers */ | 92 | * use memory-to-peripheral or peripheral-to-memory transfers */ |
96 | DMAC_CH_CONFIGURATION(channel) = | 93 | DMAC_CH_CONFIGURATION(channel) = |
@@ -116,7 +113,7 @@ void INT_DMAC(void) | |||
116 | panicf("DMA error, channel %d", channel); | 113 | panicf("DMA error, channel %d", channel); |
117 | 114 | ||
118 | /* clear terminal count interrupt */ | 115 | /* clear terminal count interrupt */ |
119 | DMAC_INT_TC_CLEAR |= (1<<channel); | 116 | DMAC_INT_TC_CLEAR = (1<<channel); |
120 | 117 | ||
121 | if(dma_callback[channel]) | 118 | if(dma_callback[channel]) |
122 | dma_callback[channel](); | 119 | dma_callback[channel](); |