diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2007-04-30 12:54:05 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2007-04-30 12:54:05 +0000 |
commit | a05bb26233c368d7670bc150f3a0597fe91501f2 (patch) | |
tree | 4307047aba216cffab04a51a14237826b2b2548f /firmware/target/arm | |
parent | 0987a6be89bb369aa6cfa9befce7af8667fa4d2c (diff) |
Gigabeat F/X: Correct the yielding in the ATA. Dump the unneeded DMA transfer complete interrupt in there too. Clean it out.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13293 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm')
-rw-r--r-- | firmware/target/arm/s3c2440/gigabeat-fx/ata-meg-fx.c | 14 | ||||
-rw-r--r-- | firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c | 21 |
2 files changed, 15 insertions, 20 deletions
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/ata-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/ata-meg-fx.c index 34fbc2b2ac..2f28124edf 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/ata-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/ata-meg-fx.c @@ -20,6 +20,7 @@ #include "cpu.h" #include <stdbool.h> #include "kernel.h" +#include "thread.h" #include "system.h" #include "power.h" #include "panic.h" @@ -117,27 +118,20 @@ void copy_read_sectors(unsigned char* buf, int wordcount) DIDST0 += 0x30000000; DIDSTC0 = 0; - /* DACK/DREQ Sync to AHB, Int on Transfer complete, Whole service, No reload, 16-bit transfers */ - DCON0 = ((1 << 30) | (1<< 29) | (1<<27) | (1<<22) | (1<<20)) | wordcount; + /* DACK/DREQ Sync to AHB, Whole service, No reload, 16-bit transfers */ + DCON0 = ((1 << 30) | (1<<27) | (1<<22) | (1<<20)) | wordcount; /* Activate the channel */ DMASKTRIG0 = 0x2; invalidate_dcache_range((void *)buf, wordcount*2); - INTMSK &= ~(1<<17); /* unmask the interrupt */ - SRCPND = (1<<17); /* clear any pending interrupts */ /* Start DMA */ DMASKTRIG0 |= 0x1; /* Wait for transfer to complete */ while((DSTAT0 & 0x000fffff)) - yield(); + priority_yield(); /* Dump cache for the buffer */ } #endif -void dma0(void) -{ -} - - diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c index 6c5e35f0d5..212b8facb2 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c @@ -6,13 +6,16 @@ #include "lcd.h" #include <stdio.h> -const int TIMER4_MASK = (1 << 14); -const int LCD_MASK = (1 << 16); -const int DMA0_MASK = (1 << 17); -const int DMA1_MASK = (1 << 18); -const int DMA2_MASK = (1 << 19); -const int DMA3_MASK = (1 << 20); -const int ALARM_MASK = (1 << 30); +enum +{ + TIMER4_MASK = (1 << 14), + LCD_MASK = (1 << 16), + DMA0_MASK = (1 << 17), + DMA1_MASK = (1 << 18), + DMA2_MASK = (1 << 19), + DMA3_MASK = (1 << 20), + ALARM_MASK = (1 << 30), +}; int system_memory_guard(int newmode) { @@ -21,7 +24,7 @@ int system_memory_guard(int newmode) } extern void timer4(void); -extern void dma0(void); +extern void dma0(void); /* free */ extern void dma1(void); extern void dma3(void); @@ -35,8 +38,6 @@ void irq(void) /* Timer 4 */ if ((intpending & TIMER4_MASK) != 0) timer4(); - else if ((intpending & DMA0_MASK) != 0) - dma0(); else { /* unexpected interrupt */ |