diff options
Diffstat (limited to 'firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c')
-rw-r--r-- | firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c | 96 |
1 files changed, 96 insertions, 0 deletions
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 @@ | |||
1 | #include "kernel.h" | ||
2 | #include "system.h" | ||
3 | #include "panic.h" | ||
4 | |||
5 | #include "lcd.h" | ||
6 | #include <stdio.h> | ||
7 | |||
8 | const int TIMER4_MASK = (1 << 14); | ||
9 | const int LCD_MASK = (1 << 16); | ||
10 | const int DMA0_MASK = (1 << 17); | ||
11 | const int DMA1_MASK = (1 << 18); | ||
12 | const int DMA2_MASK = (1 << 19); | ||
13 | const int DMA3_MASK = (1 << 20); | ||
14 | |||
15 | int system_memory_guard(int newmode) | ||
16 | { | ||
17 | (void)newmode; | ||
18 | return 0; | ||
19 | } | ||
20 | |||
21 | extern void timer4(void); | ||
22 | extern void dma0(void); | ||
23 | extern void dma1(void); | ||
24 | extern void dma3(void); | ||
25 | |||
26 | void irq(void) | ||
27 | { | ||
28 | int intpending = INTPND; | ||
29 | |||
30 | SRCPND = intpending; /* Clear this interrupt. */ | ||
31 | INTPND = intpending; /* Clear this interrupt. */ | ||
32 | |||
33 | /* Timer 4 */ | ||
34 | if ((intpending & TIMER4_MASK) != 0) | ||
35 | timer4(); | ||
36 | else if ((intpending & DMA0_MASK) != 0) | ||
37 | dma0(); | ||
38 | else | ||
39 | { | ||
40 | /* unexpected interrupt */ | ||
41 | } | ||
42 | } | ||
43 | |||
44 | void system_reboot(void) | ||
45 | { | ||
46 | WTCON = 0; | ||
47 | WTCNT = WTDAT = 1 ; | ||
48 | WTCON = 0x21; | ||
49 | for(;;) | ||
50 | ; | ||
51 | } | ||
52 | |||
53 | void system_init(void) | ||
54 | { | ||
55 | /* Turn off un-needed devices */ | ||
56 | |||
57 | /* Turn off all of the UARTS */ | ||
58 | CLKCON &= ~( (1<<10) | (1<<11) |(1<<12) ); | ||
59 | |||
60 | /* Turn off AC97 and Camera */ | ||
61 | CLKCON &= ~( (1<<19) | (1<<20) ); | ||
62 | |||
63 | /* Turn off USB host */ | ||
64 | CLKCON &= ~(1 << 6); | ||
65 | |||
66 | /* Turn off NAND flash controller */ | ||
67 | CLKCON &= ~(1 << 4); | ||
68 | |||
69 | } | ||
70 | |||
71 | |||
72 | #ifdef HAVE_ADJUSTABLE_CPU_FREQ | ||
73 | |||
74 | void set_cpu_frequency(long frequency) | ||
75 | { | ||
76 | if (frequency == CPUFREQ_MAX) | ||
77 | { | ||
78 | asm volatile("mov r0, #0\n" | ||
79 | "mrc p15, 0, r0, c1, c0, 0\n" | ||
80 | "orr r0, r0, #3<<30\n" /* set to Asynchronous mode*/ | ||
81 | "mcr p15, 0, r0, c1, c0, 0" : : : "r0"); | ||
82 | |||
83 | FREQ = CPUFREQ_MAX; | ||
84 | } | ||
85 | else | ||
86 | { | ||
87 | asm volatile("mov r0, #0\n" | ||
88 | "mrc p15, 0, r0, c1, c0, 0\n" | ||
89 | "bic r0, r0, #3<<30\n" /* set to FastBus mode*/ | ||
90 | "mcr p15, 0, r0, c1, c0, 0" : : : "r0"); | ||
91 | |||
92 | FREQ = CPUFREQ_NORMAL; | ||
93 | } | ||
94 | } | ||
95 | |||
96 | #endif | ||