From f44f961812c059b69df19ac5bd828986ba10513f Mon Sep 17 00:00:00 2001 From: Marcoen Hirschberg Date: Wed, 18 Apr 2007 12:22:27 +0000 Subject: move the Gigabeat from gigabeat/meg-fx to s3c2440/gigabeat-fx to avoid problems with possible ports in the future: Gigabeat S/V (i.mx31 based) and Kenwood HD20GA7/HD20GA9 (s3c2440 based) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13200 a1c6a512-1295-4272-9138-f99709370657 --- .../target/arm/s3c2440/gigabeat-fx/system-meg-fx.c | 96 ++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c (limited to 'firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c') diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c new file mode 100644 index 0000000000..b7e59e66ea --- /dev/null +++ b/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c @@ -0,0 +1,96 @@ +#include "kernel.h" +#include "system.h" +#include "panic.h" + +#include "lcd.h" +#include + +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); + +int system_memory_guard(int newmode) +{ + (void)newmode; + return 0; +} + +extern void timer4(void); +extern void dma0(void); +extern void dma1(void); +extern void dma3(void); + +void irq(void) +{ + int intpending = INTPND; + + SRCPND = intpending; /* Clear this interrupt. */ + INTPND = intpending; /* Clear this interrupt. */ + + /* Timer 4 */ + if ((intpending & TIMER4_MASK) != 0) + timer4(); + else if ((intpending & DMA0_MASK) != 0) + dma0(); + else + { + /* unexpected interrupt */ + } +} + +void system_reboot(void) +{ + WTCON = 0; + WTCNT = WTDAT = 1 ; + WTCON = 0x21; + for(;;) + ; +} + +void system_init(void) +{ + /* Turn off un-needed devices */ + + /* Turn off all of the UARTS */ + CLKCON &= ~( (1<<10) | (1<<11) |(1<<12) ); + + /* Turn off AC97 and Camera */ + CLKCON &= ~( (1<<19) | (1<<20) ); + + /* Turn off USB host */ + CLKCON &= ~(1 << 6); + + /* Turn off NAND flash controller */ + CLKCON &= ~(1 << 4); + +} + + +#ifdef HAVE_ADJUSTABLE_CPU_FREQ + +void set_cpu_frequency(long frequency) +{ + if (frequency == CPUFREQ_MAX) + { + asm volatile("mov r0, #0\n" + "mrc p15, 0, r0, c1, c0, 0\n" + "orr r0, r0, #3<<30\n" /* set to Asynchronous mode*/ + "mcr p15, 0, r0, c1, c0, 0" : : : "r0"); + + FREQ = CPUFREQ_MAX; + } + else + { + asm volatile("mov r0, #0\n" + "mrc p15, 0, r0, c1, c0, 0\n" + "bic r0, r0, #3<<30\n" /* set to FastBus mode*/ + "mcr p15, 0, r0, c1, c0, 0" : : : "r0"); + + FREQ = CPUFREQ_NORMAL; + } +} + +#endif -- cgit v1.2.3