diff options
author | Jesper Nilsson <jespern@axis.com> | 2014-01-15 08:42:37 -0500 |
---|---|---|
committer | Jesper Nilsson <jespern@axis.com> | 2014-01-15 08:44:02 -0500 |
commit | e269a869417cd4053b37da1b19186902d3cbf63b (patch) | |
tree | 6d97e80f40859b62cfa8a1a634a1c3ad944681b1 /arch/cris/arch-v10 | |
parent | e7672be573afa078e8d85d5ad0202b78bd6bd1fd (diff) |
Drop code for CRISv10 CPU simulator
That simulator is dead and redundant.
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
Diffstat (limited to 'arch/cris/arch-v10')
-rw-r--r-- | arch/cris/arch-v10/kernel/Makefile | 1 | ||||
-rw-r--r-- | arch/cris/arch-v10/kernel/debugport.c | 7 | ||||
-rw-r--r-- | arch/cris/arch-v10/kernel/entry.S | 4 | ||||
-rw-r--r-- | arch/cris/arch-v10/kernel/head.S | 5 | ||||
-rw-r--r-- | arch/cris/arch-v10/kernel/irq.c | 18 | ||||
-rw-r--r-- | arch/cris/arch-v10/kernel/process.c | 5 | ||||
-rw-r--r-- | arch/cris/arch-v10/kernel/time.c | 92 | ||||
-rw-r--r-- | arch/cris/arch-v10/lib/dram_init.S | 40 |
8 files changed, 65 insertions, 107 deletions
diff --git a/arch/cris/arch-v10/kernel/Makefile b/arch/cris/arch-v10/kernel/Makefile index dcfec41d3533..4841e822cdd1 100644 --- a/arch/cris/arch-v10/kernel/Makefile +++ b/arch/cris/arch-v10/kernel/Makefile | |||
@@ -1,4 +1,3 @@ | |||
1 | # $Id: Makefile,v 1.6 2004/12/13 12:21:51 starvik Exp $ | ||
2 | # | 1 | # |
3 | # Makefile for the linux kernel. | 2 | # Makefile for the linux kernel. |
4 | # | 3 | # |
diff --git a/arch/cris/arch-v10/kernel/debugport.c b/arch/cris/arch-v10/kernel/debugport.c index f932c85fbde4..7d307cce8bd8 100644 --- a/arch/cris/arch-v10/kernel/debugport.c +++ b/arch/cris/arch-v10/kernel/debugport.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <linux/delay.h> | 19 | #include <linux/delay.h> |
20 | #include <linux/tty.h> | 20 | #include <linux/tty.h> |
21 | #include <arch/svinto.h> | 21 | #include <arch/svinto.h> |
22 | #include <asm/io.h> /* Get SIMCOUT. */ | ||
23 | 22 | ||
24 | extern void reset_watchdog(void); | 23 | extern void reset_watchdog(void); |
25 | 24 | ||
@@ -318,12 +317,6 @@ console_write(struct console *co, const char *buf, unsigned int len) | |||
318 | if (!port) | 317 | if (!port) |
319 | return; | 318 | return; |
320 | 319 | ||
321 | #ifdef CONFIG_SVINTO_SIM | ||
322 | /* no use to simulate the serial debug output */ | ||
323 | SIMCOUT(buf, len); | ||
324 | return; | ||
325 | #endif | ||
326 | |||
327 | console_write_direct(co, buf, len); | 320 | console_write_direct(co, buf, len); |
328 | } | 321 | } |
329 | 322 | ||
diff --git a/arch/cris/arch-v10/kernel/entry.S b/arch/cris/arch-v10/kernel/entry.S index def0a530e9d4..81570fcd0412 100644 --- a/arch/cris/arch-v10/kernel/entry.S +++ b/arch/cris/arch-v10/kernel/entry.S | |||
@@ -457,7 +457,7 @@ IRQ1_interrupt: | |||
457 | ba _Rexit ; Return the standard way | 457 | ba _Rexit ; Return the standard way |
458 | nop | 458 | nop |
459 | wdog: | 459 | wdog: |
460 | #if defined(CONFIG_ETRAX_WATCHDOG) && !defined(CONFIG_SVINTO_SIM) | 460 | #if defined(CONFIG_ETRAX_WATCHDOG) |
461 | ;; Check if we're waiting for reset to happen, as signalled by | 461 | ;; Check if we're waiting for reset to happen, as signalled by |
462 | ;; hard_reset_now setting cause_of_death to a magic value. If so, just | 462 | ;; hard_reset_now setting cause_of_death to a magic value. If so, just |
463 | ;; get stuck until reset happens. | 463 | ;; get stuck until reset happens. |
@@ -523,7 +523,7 @@ _watchdogmsg: | |||
523 | .ascii "Oops: bitten by watchdog\n\0" | 523 | .ascii "Oops: bitten by watchdog\n\0" |
524 | .previous | 524 | .previous |
525 | 525 | ||
526 | #endif /* CONFIG_ETRAX_WATCHDOG and not CONFIG_SVINTO_SIM */ | 526 | #endif /* CONFIG_ETRAX_WATCHDOG */ |
527 | 527 | ||
528 | spurious_interrupt: | 528 | spurious_interrupt: |
529 | di | 529 | di |
diff --git a/arch/cris/arch-v10/kernel/head.S b/arch/cris/arch-v10/kernel/head.S index 137bf52a5596..4a146e1749c9 100644 --- a/arch/cris/arch-v10/kernel/head.S +++ b/arch/cris/arch-v10/kernel/head.S | |||
@@ -168,13 +168,11 @@ _inflash: | |||
168 | #endif | 168 | #endif |
169 | 169 | ||
170 | ;; Set up waitstates etc according to kernel configuration. | 170 | ;; Set up waitstates etc according to kernel configuration. |
171 | #ifndef CONFIG_SVINTO_SIM | ||
172 | move.d CONFIG_ETRAX_DEF_R_WAITSTATES, $r0 | 171 | move.d CONFIG_ETRAX_DEF_R_WAITSTATES, $r0 |
173 | move.d $r0, [R_WAITSTATES] | 172 | move.d $r0, [R_WAITSTATES] |
174 | 173 | ||
175 | move.d CONFIG_ETRAX_DEF_R_BUS_CONFIG, $r0 | 174 | move.d CONFIG_ETRAX_DEF_R_BUS_CONFIG, $r0 |
176 | move.d $r0, [R_BUS_CONFIG] | 175 | move.d $r0, [R_BUS_CONFIG] |
177 | #endif | ||
178 | 176 | ||
179 | ;; We need to initialze DRAM registers before we start using the DRAM | 177 | ;; We need to initialze DRAM registers before we start using the DRAM |
180 | 178 | ||
@@ -466,7 +464,6 @@ no_command_line: | |||
466 | 464 | ||
467 | move.d $r0,[genconfig_shadow] ; init a shadow register of R_GEN_CONFIG | 465 | move.d $r0,[genconfig_shadow] ; init a shadow register of R_GEN_CONFIG |
468 | 466 | ||
469 | #ifndef CONFIG_SVINTO_SIM | ||
470 | move.d $r0,[R_GEN_CONFIG] | 467 | move.d $r0,[R_GEN_CONFIG] |
471 | 468 | ||
472 | #if 0 | 469 | #if 0 |
@@ -701,8 +698,6 @@ no_command_line: | |||
701 | move.b $r0,[R_SERIAL3_TR_CTRL] | 698 | move.b $r0,[R_SERIAL3_TR_CTRL] |
702 | #endif | 699 | #endif |
703 | 700 | ||
704 | #endif /* CONFIG_SVINTO_SIM */ | ||
705 | |||
706 | jump start_kernel ; jump into the C-function start_kernel in init/main.c | 701 | jump start_kernel ; jump into the C-function start_kernel in init/main.c |
707 | 702 | ||
708 | .data | 703 | .data |
diff --git a/arch/cris/arch-v10/kernel/irq.c b/arch/cris/arch-v10/kernel/irq.c index ba0e5965d6e3..09cae80a834a 100644 --- a/arch/cris/arch-v10/kernel/irq.c +++ b/arch/cris/arch-v10/kernel/irq.c | |||
@@ -5,7 +5,7 @@ | |||
5 | * | 5 | * |
6 | * Authors: Bjorn Wesen (bjornw@axis.com) | 6 | * Authors: Bjorn Wesen (bjornw@axis.com) |
7 | * | 7 | * |
8 | * This file contains the interrupt vectors and some | 8 | * This file contains the interrupt vectors and some |
9 | * helper functions | 9 | * helper functions |
10 | * | 10 | * |
11 | */ | 11 | */ |
@@ -182,19 +182,14 @@ void do_multiple_IRQ(struct pt_regs* regs) | |||
182 | setting the irq vector table. | 182 | setting the irq vector table. |
183 | */ | 183 | */ |
184 | 184 | ||
185 | void __init | 185 | void __init init_IRQ(void) |
186 | init_IRQ(void) | ||
187 | { | 186 | { |
188 | int i; | 187 | int i; |
189 | 188 | ||
190 | /* clear all interrupt masks */ | 189 | /* clear all interrupt masks */ |
191 | |||
192 | #ifndef CONFIG_SVINTO_SIM | ||
193 | *R_IRQ_MASK0_CLR = 0xffffffff; | 190 | *R_IRQ_MASK0_CLR = 0xffffffff; |
194 | *R_IRQ_MASK1_CLR = 0xffffffff; | 191 | *R_IRQ_MASK1_CLR = 0xffffffff; |
195 | *R_IRQ_MASK2_CLR = 0xffffffff; | 192 | *R_IRQ_MASK2_CLR = 0xffffffff; |
196 | #endif | ||
197 | |||
198 | *R_VECT_MASK_CLR = 0xffffffff; | 193 | *R_VECT_MASK_CLR = 0xffffffff; |
199 | 194 | ||
200 | for (i = 0; i < 256; i++) | 195 | for (i = 0; i < 256; i++) |
@@ -211,25 +206,20 @@ init_IRQ(void) | |||
211 | executed by the associated break handler, rather than just a jump | 206 | executed by the associated break handler, rather than just a jump |
212 | address. therefore we need to setup a default breakpoint handler | 207 | address. therefore we need to setup a default breakpoint handler |
213 | for all breakpoints */ | 208 | for all breakpoints */ |
214 | |||
215 | for (i = 0; i < 16; i++) | 209 | for (i = 0; i < 16; i++) |
216 | set_break_vector(i, do_sigtrap); | 210 | set_break_vector(i, do_sigtrap); |
217 | |||
218 | /* except IRQ 15 which is the multiple-IRQ handler on Etrax100 */ | ||
219 | 211 | ||
212 | /* except IRQ 15 which is the multiple-IRQ handler on Etrax100 */ | ||
220 | set_int_vector(15, multiple_interrupt); | 213 | set_int_vector(15, multiple_interrupt); |
221 | |||
222 | /* 0 and 1 which are special breakpoint/NMI traps */ | ||
223 | 214 | ||
215 | /* 0 and 1 which are special breakpoint/NMI traps */ | ||
224 | set_int_vector(0, hwbreakpoint); | 216 | set_int_vector(0, hwbreakpoint); |
225 | set_int_vector(1, IRQ1_interrupt); | 217 | set_int_vector(1, IRQ1_interrupt); |
226 | 218 | ||
227 | /* and irq 14 which is the mmu bus fault handler */ | 219 | /* and irq 14 which is the mmu bus fault handler */ |
228 | |||
229 | set_int_vector(14, mmu_bus_fault); | 220 | set_int_vector(14, mmu_bus_fault); |
230 | 221 | ||
231 | /* setup the system-call trap, which is reached by BREAK 13 */ | 222 | /* setup the system-call trap, which is reached by BREAK 13 */ |
232 | |||
233 | set_break_vector(13, system_call); | 223 | set_break_vector(13, system_call); |
234 | 224 | ||
235 | /* setup a breakpoint handler for debugging used for both user and | 225 | /* setup a breakpoint handler for debugging used for both user and |
diff --git a/arch/cris/arch-v10/kernel/process.c b/arch/cris/arch-v10/kernel/process.c index 753e9a03cf87..c20e4e8c3663 100644 --- a/arch/cris/arch-v10/kernel/process.c +++ b/arch/cris/arch-v10/kernel/process.c | |||
@@ -14,7 +14,6 @@ | |||
14 | #include <linux/slab.h> | 14 | #include <linux/slab.h> |
15 | #include <linux/err.h> | 15 | #include <linux/err.h> |
16 | #include <linux/fs.h> | 16 | #include <linux/fs.h> |
17 | #include <arch/svinto.h> | ||
18 | #include <linux/init.h> | 17 | #include <linux/init.h> |
19 | #include <arch/system.h> | 18 | #include <arch/system.h> |
20 | #include <linux/ptrace.h> | 19 | #include <linux/ptrace.h> |
@@ -56,14 +55,14 @@ void hard_reset_now (void) | |||
56 | * code to know about it than the watchdog handler in entry.S and | 55 | * code to know about it than the watchdog handler in entry.S and |
57 | * this code, implementing hard reset through the watchdog. | 56 | * this code, implementing hard reset through the watchdog. |
58 | */ | 57 | */ |
59 | #if defined(CONFIG_ETRAX_WATCHDOG) && !defined(CONFIG_SVINTO_SIM) | 58 | #if defined(CONFIG_ETRAX_WATCHDOG) |
60 | extern int cause_of_death; | 59 | extern int cause_of_death; |
61 | #endif | 60 | #endif |
62 | 61 | ||
63 | printk("*** HARD RESET ***\n"); | 62 | printk("*** HARD RESET ***\n"); |
64 | local_irq_disable(); | 63 | local_irq_disable(); |
65 | 64 | ||
66 | #if defined(CONFIG_ETRAX_WATCHDOG) && !defined(CONFIG_SVINTO_SIM) | 65 | #if defined(CONFIG_ETRAX_WATCHDOG) |
67 | cause_of_death = 0xbedead; | 66 | cause_of_death = 0xbedead; |
68 | #else | 67 | #else |
69 | /* Since we dont plan to keep on resetting the watchdog, | 68 | /* Since we dont plan to keep on resetting the watchdog, |
diff --git a/arch/cris/arch-v10/kernel/time.c b/arch/cris/arch-v10/kernel/time.c index e6a722715a8d..b5eb5cd2f60b 100644 --- a/arch/cris/arch-v10/kernel/time.c +++ b/arch/cris/arch-v10/kernel/time.c | |||
@@ -14,7 +14,6 @@ | |||
14 | #include <linux/sched.h> | 14 | #include <linux/sched.h> |
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
17 | #include <arch/svinto.h> | ||
18 | #include <asm/types.h> | 17 | #include <asm/types.h> |
19 | #include <asm/signal.h> | 18 | #include <asm/signal.h> |
20 | #include <asm/io.h> | 19 | #include <asm/io.h> |
@@ -34,7 +33,7 @@ unsigned long get_ns_in_jiffie(void) | |||
34 | 33 | ||
35 | local_irq_save(flags); | 34 | local_irq_save(flags); |
36 | timer_count = *R_TIMER0_DATA; | 35 | timer_count = *R_TIMER0_DATA; |
37 | presc_count = *R_TIM_PRESC_STATUS; | 36 | presc_count = *R_TIM_PRESC_STATUS; |
38 | /* presc_count might be wrapped */ | 37 | /* presc_count might be wrapped */ |
39 | t1 = *R_TIMER0_DATA; | 38 | t1 = *R_TIMER0_DATA; |
40 | 39 | ||
@@ -50,7 +49,7 @@ unsigned long get_ns_in_jiffie(void) | |||
50 | presc_count = PRESCALE_VALUE - presc_count - PRESCALE_VALUE/2; | 49 | presc_count = PRESCALE_VALUE - presc_count - PRESCALE_VALUE/2; |
51 | } | 50 | } |
52 | 51 | ||
53 | ns = ( (TIMER0_DIV - timer_count) * ((1000000000/HZ)/TIMER0_DIV )) + | 52 | ns = ( (TIMER0_DIV - timer_count) * ((1000000000/HZ)/TIMER0_DIV )) + |
54 | ( (presc_count) * (1000000000/PRESCALE_FREQ)); | 53 | ( (presc_count) * (1000000000/PRESCALE_FREQ)); |
55 | return ns; | 54 | return ns; |
56 | } | 55 | } |
@@ -80,7 +79,7 @@ static u32 cris_v10_gettimeoffset(void) | |||
80 | * by the R_WATCHDOG register. The R_WATCHDOG register contains an enable bit | 79 | * by the R_WATCHDOG register. The R_WATCHDOG register contains an enable bit |
81 | * and a 3-bit key value. The effect of writing to the R_WATCHDOG register is | 80 | * and a 3-bit key value. The effect of writing to the R_WATCHDOG register is |
82 | * described in the table below: | 81 | * described in the table below: |
83 | * | 82 | * |
84 | * Watchdog Value written: | 83 | * Watchdog Value written: |
85 | * state: To enable: To key: Operation: | 84 | * state: To enable: To key: Operation: |
86 | * -------- ---------- ------- ---------- | 85 | * -------- ---------- ------- ---------- |
@@ -89,15 +88,15 @@ static u32 cris_v10_gettimeoffset(void) | |||
89 | * started 0 ~key Stop watchdog | 88 | * started 0 ~key Stop watchdog |
90 | * started 1 ~key Restart watchdog with key = ~key. | 89 | * started 1 ~key Restart watchdog with key = ~key. |
91 | * started X new_key_val Change key to new_key_val. | 90 | * started X new_key_val Change key to new_key_val. |
92 | * | 91 | * |
93 | * Note: '~' is the bitwise NOT operator. | 92 | * Note: '~' is the bitwise NOT operator. |
94 | * | 93 | * |
95 | */ | 94 | */ |
96 | 95 | ||
97 | /* right now, starting the watchdog is the same as resetting it */ | 96 | /* right now, starting the watchdog is the same as resetting it */ |
98 | #define start_watchdog reset_watchdog | 97 | #define start_watchdog reset_watchdog |
99 | 98 | ||
100 | #if defined(CONFIG_ETRAX_WATCHDOG) && !defined(CONFIG_SVINTO_SIM) | 99 | #ifdef CONFIG_ETRAX_WATCHDOG |
101 | static int watchdog_key = 0; /* arbitrary number */ | 100 | static int watchdog_key = 0; /* arbitrary number */ |
102 | #endif | 101 | #endif |
103 | 102 | ||
@@ -107,10 +106,9 @@ static int watchdog_key = 0; /* arbitrary number */ | |||
107 | 106 | ||
108 | #define WATCHDOG_MIN_FREE_PAGES 8 | 107 | #define WATCHDOG_MIN_FREE_PAGES 8 |
109 | 108 | ||
110 | void | 109 | void reset_watchdog(void) |
111 | reset_watchdog(void) | ||
112 | { | 110 | { |
113 | #if defined(CONFIG_ETRAX_WATCHDOG) && !defined(CONFIG_SVINTO_SIM) | 111 | #if defined(CONFIG_ETRAX_WATCHDOG) |
114 | /* only keep watchdog happy as long as we have memory left! */ | 112 | /* only keep watchdog happy as long as we have memory left! */ |
115 | if(nr_free_pages() > WATCHDOG_MIN_FREE_PAGES) { | 113 | if(nr_free_pages() > WATCHDOG_MIN_FREE_PAGES) { |
116 | /* reset the watchdog with the inverse of the old key */ | 114 | /* reset the watchdog with the inverse of the old key */ |
@@ -123,28 +121,23 @@ reset_watchdog(void) | |||
123 | 121 | ||
124 | /* stop the watchdog - we still need the correct key */ | 122 | /* stop the watchdog - we still need the correct key */ |
125 | 123 | ||
126 | void | 124 | void stop_watchdog(void) |
127 | stop_watchdog(void) | ||
128 | { | 125 | { |
129 | #if defined(CONFIG_ETRAX_WATCHDOG) && !defined(CONFIG_SVINTO_SIM) | 126 | #ifdef CONFIG_ETRAX_WATCHDOG |
130 | watchdog_key ^= 0x7; /* invert key, which is 3 bits */ | 127 | watchdog_key ^= 0x7; /* invert key, which is 3 bits */ |
131 | *R_WATCHDOG = IO_FIELD(R_WATCHDOG, key, watchdog_key) | | 128 | *R_WATCHDOG = IO_FIELD(R_WATCHDOG, key, watchdog_key) | |
132 | IO_STATE(R_WATCHDOG, enable, stop); | 129 | IO_STATE(R_WATCHDOG, enable, stop); |
133 | #endif | 130 | #endif |
134 | } | 131 | } |
135 | 132 | ||
136 | 133 | ||
134 | extern void cris_do_profile(struct pt_regs *regs); | ||
135 | |||
137 | /* | 136 | /* |
138 | * timer_interrupt() needs to keep up the real-time clock, | 137 | * timer_interrupt() needs to keep up the real-time clock, |
139 | * as well as call the "xtime_update()" routine every clocktick | 138 | * as well as call the "xtime_update()" routine every clocktick |
140 | */ | 139 | */ |
141 | 140 | static inline irqreturn_t timer_interrupt(int irq, void *dev_id) | |
142 | //static unsigned short myjiff; /* used by our debug routine print_timestamp */ | ||
143 | |||
144 | extern void cris_do_profile(struct pt_regs *regs); | ||
145 | |||
146 | static inline irqreturn_t | ||
147 | timer_interrupt(int irq, void *dev_id) | ||
148 | { | 141 | { |
149 | struct pt_regs *regs = get_irq_regs(); | 142 | struct pt_regs *regs = get_irq_regs(); |
150 | /* acknowledge the timer irq */ | 143 | /* acknowledge the timer irq */ |
@@ -160,20 +153,18 @@ timer_interrupt(int irq, void *dev_id) | |||
160 | IO_STATE( R_TIMER_CTRL, tm0, run) | | 153 | IO_STATE( R_TIMER_CTRL, tm0, run) | |
161 | IO_STATE( R_TIMER_CTRL, clksel0, c6250kHz); | 154 | IO_STATE( R_TIMER_CTRL, clksel0, c6250kHz); |
162 | #else | 155 | #else |
163 | *R_TIMER_CTRL = r_timer_ctrl_shadow | | 156 | *R_TIMER_CTRL = r_timer_ctrl_shadow | IO_STATE(R_TIMER_CTRL, i0, clr); |
164 | IO_STATE(R_TIMER_CTRL, i0, clr); | ||
165 | #endif | 157 | #endif |
166 | 158 | ||
167 | /* reset watchdog otherwise it resets us! */ | 159 | /* reset watchdog otherwise it resets us! */ |
168 | reset_watchdog(); | 160 | reset_watchdog(); |
169 | 161 | ||
170 | /* Update statistics. */ | 162 | /* Update statistics. */ |
171 | update_process_times(user_mode(regs)); | 163 | update_process_times(user_mode(regs)); |
172 | 164 | ||
173 | /* call the real timer interrupt handler */ | 165 | /* call the real timer interrupt handler */ |
174 | |||
175 | xtime_update(1); | 166 | xtime_update(1); |
176 | 167 | ||
177 | cris_do_profile(regs); /* Save profiling information */ | 168 | cris_do_profile(regs); /* Save profiling information */ |
178 | return IRQ_HANDLED; | 169 | return IRQ_HANDLED; |
179 | } | 170 | } |
@@ -186,16 +177,15 @@ static struct irqaction irq2 = { | |||
186 | .name = "timer", | 177 | .name = "timer", |
187 | }; | 178 | }; |
188 | 179 | ||
189 | void __init | 180 | void __init time_init(void) |
190 | time_init(void) | 181 | { |
191 | { | ||
192 | arch_gettimeoffset = cris_v10_gettimeoffset; | 182 | arch_gettimeoffset = cris_v10_gettimeoffset; |
193 | 183 | ||
194 | /* probe for the RTC and read it if it exists | 184 | /* probe for the RTC and read it if it exists |
195 | * Before the RTC can be probed the loops_per_usec variable needs | 185 | * Before the RTC can be probed the loops_per_usec variable needs |
196 | * to be initialized to make usleep work. A better value for | 186 | * to be initialized to make usleep work. A better value for |
197 | * loops_per_usec is calculated by the kernel later once the | 187 | * loops_per_usec is calculated by the kernel later once the |
198 | * clock has started. | 188 | * clock has started. |
199 | */ | 189 | */ |
200 | loops_per_usec = 50; | 190 | loops_per_usec = 50; |
201 | 191 | ||
@@ -206,7 +196,7 @@ time_init(void) | |||
206 | * Remember that linux/timex.h contains #defines that rely on the | 196 | * Remember that linux/timex.h contains #defines that rely on the |
207 | * timer settings below (hz and divide factor) !!! | 197 | * timer settings below (hz and divide factor) !!! |
208 | */ | 198 | */ |
209 | 199 | ||
210 | #ifdef USE_CASCADE_TIMERS | 200 | #ifdef USE_CASCADE_TIMERS |
211 | *R_TIMER_CTRL = | 201 | *R_TIMER_CTRL = |
212 | IO_FIELD( R_TIMER_CTRL, timerdiv1, 0) | | 202 | IO_FIELD( R_TIMER_CTRL, timerdiv1, 0) | |
@@ -217,8 +207,8 @@ time_init(void) | |||
217 | IO_STATE( R_TIMER_CTRL, i0, nop) | | 207 | IO_STATE( R_TIMER_CTRL, i0, nop) | |
218 | IO_STATE( R_TIMER_CTRL, tm0, stop_ld) | | 208 | IO_STATE( R_TIMER_CTRL, tm0, stop_ld) | |
219 | IO_STATE( R_TIMER_CTRL, clksel0, c6250kHz); | 209 | IO_STATE( R_TIMER_CTRL, clksel0, c6250kHz); |
220 | 210 | ||
221 | *R_TIMER_CTRL = r_timer_ctrl_shadow = | 211 | *R_TIMER_CTRL = r_timer_ctrl_shadow = |
222 | IO_FIELD( R_TIMER_CTRL, timerdiv1, 0) | | 212 | IO_FIELD( R_TIMER_CTRL, timerdiv1, 0) | |
223 | IO_FIELD( R_TIMER_CTRL, timerdiv0, 0) | | 213 | IO_FIELD( R_TIMER_CTRL, timerdiv0, 0) | |
224 | IO_STATE( R_TIMER_CTRL, i1, nop) | | 214 | IO_STATE( R_TIMER_CTRL, i1, nop) | |
@@ -228,18 +218,18 @@ time_init(void) | |||
228 | IO_STATE( R_TIMER_CTRL, tm0, run) | | 218 | IO_STATE( R_TIMER_CTRL, tm0, run) | |
229 | IO_STATE( R_TIMER_CTRL, clksel0, c6250kHz); | 219 | IO_STATE( R_TIMER_CTRL, clksel0, c6250kHz); |
230 | #else | 220 | #else |
231 | *R_TIMER_CTRL = | 221 | *R_TIMER_CTRL = |
232 | IO_FIELD(R_TIMER_CTRL, timerdiv1, 192) | | 222 | IO_FIELD(R_TIMER_CTRL, timerdiv1, 192) | |
233 | IO_FIELD(R_TIMER_CTRL, timerdiv0, TIMER0_DIV) | | 223 | IO_FIELD(R_TIMER_CTRL, timerdiv0, TIMER0_DIV) | |
234 | IO_STATE(R_TIMER_CTRL, i1, nop) | | 224 | IO_STATE(R_TIMER_CTRL, i1, nop) | |
235 | IO_STATE(R_TIMER_CTRL, tm1, stop_ld) | | 225 | IO_STATE(R_TIMER_CTRL, tm1, stop_ld) | |
236 | IO_STATE(R_TIMER_CTRL, clksel1, c19k2Hz) | | 226 | IO_STATE(R_TIMER_CTRL, clksel1, c19k2Hz) | |
237 | IO_STATE(R_TIMER_CTRL, i0, nop) | | 227 | IO_STATE(R_TIMER_CTRL, i0, nop) | |
238 | IO_STATE(R_TIMER_CTRL, tm0, stop_ld) | | 228 | IO_STATE(R_TIMER_CTRL, tm0, stop_ld) | |
239 | IO_STATE(R_TIMER_CTRL, clksel0, flexible); | 229 | IO_STATE(R_TIMER_CTRL, clksel0, flexible); |
240 | 230 | ||
241 | *R_TIMER_CTRL = r_timer_ctrl_shadow = | 231 | *R_TIMER_CTRL = r_timer_ctrl_shadow = |
242 | IO_FIELD(R_TIMER_CTRL, timerdiv1, 192) | | 232 | IO_FIELD(R_TIMER_CTRL, timerdiv1, 192) | |
243 | IO_FIELD(R_TIMER_CTRL, timerdiv0, TIMER0_DIV) | | 233 | IO_FIELD(R_TIMER_CTRL, timerdiv0, TIMER0_DIV) | |
244 | IO_STATE(R_TIMER_CTRL, i1, nop) | | 234 | IO_STATE(R_TIMER_CTRL, i1, nop) | |
245 | IO_STATE(R_TIMER_CTRL, tm1, run) | | 235 | IO_STATE(R_TIMER_CTRL, tm1, run) | |
@@ -251,16 +241,14 @@ time_init(void) | |||
251 | *R_TIMER_PRESCALE = PRESCALE_VALUE; | 241 | *R_TIMER_PRESCALE = PRESCALE_VALUE; |
252 | #endif | 242 | #endif |
253 | 243 | ||
254 | *R_IRQ_MASK0_SET = | 244 | /* unmask the timer irq */ |
255 | IO_STATE(R_IRQ_MASK0_SET, timer0, set); /* unmask the timer irq */ | 245 | *R_IRQ_MASK0_SET = IO_STATE(R_IRQ_MASK0_SET, timer0, set); |
256 | 246 | ||
257 | /* now actually register the timer irq handler that calls timer_interrupt() */ | 247 | /* now actually register the irq handler that calls timer_interrupt() */ |
258 | |||
259 | setup_irq(2, &irq2); /* irq 2 is the timer0 irq in etrax */ | 248 | setup_irq(2, &irq2); /* irq 2 is the timer0 irq in etrax */ |
260 | 249 | ||
261 | /* enable watchdog if we should use one */ | 250 | /* enable watchdog if we should use one */ |
262 | 251 | #if defined(CONFIG_ETRAX_WATCHDOG) | |
263 | #if defined(CONFIG_ETRAX_WATCHDOG) && !defined(CONFIG_SVINTO_SIM) | ||
264 | printk("Enabling watchdog...\n"); | 252 | printk("Enabling watchdog...\n"); |
265 | start_watchdog(); | 253 | start_watchdog(); |
266 | 254 | ||
@@ -273,9 +261,7 @@ time_init(void) | |||
273 | driver or infrastructure support yet. */ | 261 | driver or infrastructure support yet. */ |
274 | asm ("setf m"); | 262 | asm ("setf m"); |
275 | 263 | ||
276 | *R_IRQ_MASK0_SET = | 264 | *R_IRQ_MASK0_SET = IO_STATE(R_IRQ_MASK0_SET, watchdog_nmi, set); |
277 | IO_STATE(R_IRQ_MASK0_SET, watchdog_nmi, set); | 265 | *R_VECT_MASK_SET = IO_STATE(R_VECT_MASK_SET, nmi, set); |
278 | *R_VECT_MASK_SET = | ||
279 | IO_STATE(R_VECT_MASK_SET, nmi, set); | ||
280 | #endif | 266 | #endif |
281 | } | 267 | } |
diff --git a/arch/cris/arch-v10/lib/dram_init.S b/arch/cris/arch-v10/lib/dram_init.S index b9190ff7d0a4..e541d3d8f922 100644 --- a/arch/cris/arch-v10/lib/dram_init.S +++ b/arch/cris/arch-v10/lib/dram_init.S | |||
@@ -5,9 +5,7 @@ | |||
5 | * Note: This file may not modify r9 because r9 is used to carry | 5 | * Note: This file may not modify r9 because r9 is used to carry |
6 | * information from the decompresser to the kernel | 6 | * information from the decompresser to the kernel |
7 | * | 7 | * |
8 | * Copyright (C) 2000, 2001 Axis Communications AB | 8 | * Copyright (C) 2000-2012 Axis Communications AB |
9 | * | ||
10 | * Authors: Mikael Starvik (starvik@axis.com) | ||
11 | * | 9 | * |
12 | */ | 10 | */ |
13 | 11 | ||
@@ -18,16 +16,15 @@ | |||
18 | 16 | ||
19 | 17 | ||
20 | ;; WARNING! The registers r8 and r9 are used as parameters carrying | 18 | ;; WARNING! The registers r8 and r9 are used as parameters carrying |
21 | ;; information from the decompressor (if the kernel was compressed). | 19 | ;; information from the decompressor (if the kernel was compressed). |
22 | ;; They should not be used in the code below. | 20 | ;; They should not be used in the code below. |
23 | 21 | ||
24 | #ifndef CONFIG_SVINTO_SIM | ||
25 | move.d CONFIG_ETRAX_DEF_R_WAITSTATES, $r0 | 22 | move.d CONFIG_ETRAX_DEF_R_WAITSTATES, $r0 |
26 | move.d $r0, [R_WAITSTATES] | 23 | move.d $r0, [R_WAITSTATES] |
27 | 24 | ||
28 | move.d CONFIG_ETRAX_DEF_R_BUS_CONFIG, $r0 | 25 | move.d CONFIG_ETRAX_DEF_R_BUS_CONFIG, $r0 |
29 | move.d $r0, [R_BUS_CONFIG] | 26 | move.d $r0, [R_BUS_CONFIG] |
30 | 27 | ||
31 | #ifndef CONFIG_ETRAX_SDRAM | 28 | #ifndef CONFIG_ETRAX_SDRAM |
32 | move.d CONFIG_ETRAX_DEF_R_DRAM_CONFIG, $r0 | 29 | move.d CONFIG_ETRAX_DEF_R_DRAM_CONFIG, $r0 |
33 | move.d $r0, [R_DRAM_CONFIG] | 30 | move.d $r0, [R_DRAM_CONFIG] |
@@ -38,14 +35,14 @@ | |||
38 | ;; Samsung SDRAMs seem to require to be initialized twice to work properly. | 35 | ;; Samsung SDRAMs seem to require to be initialized twice to work properly. |
39 | moveq 2, $r6 | 36 | moveq 2, $r6 |
40 | _sdram_init: | 37 | _sdram_init: |
41 | 38 | ||
42 | ; Refer to ETRAX 100LX Designers Reference for a description of SDRAM initialization | 39 | ; Refer to ETRAX 100LX Designers Reference for a description of SDRAM initialization |
43 | 40 | ||
44 | ; Bank configuration | 41 | ; Bank configuration |
45 | move.d CONFIG_ETRAX_DEF_R_SDRAM_CONFIG, $r0 | 42 | move.d CONFIG_ETRAX_DEF_R_SDRAM_CONFIG, $r0 |
46 | move.d $r0, [R_SDRAM_CONFIG] | 43 | move.d $r0, [R_SDRAM_CONFIG] |
47 | 44 | ||
48 | ; Calculate value of mrs_data | 45 | ; Calculate value of mrs_data |
49 | ; CAS latency = 2 && bus_width = 32 => 0x40 | 46 | ; CAS latency = 2 && bus_width = 32 => 0x40 |
50 | ; CAS latency = 3 && bus_width = 32 => 0x60 | 47 | ; CAS latency = 3 && bus_width = 32 => 0x60 |
51 | ; CAS latency = 2 && bus_width = 16 => 0x20 | 48 | ; CAS latency = 2 && bus_width = 16 => 0x20 |
@@ -56,22 +53,22 @@ _sdram_init: | |||
56 | and.d 0x00ff0000, $r2 | 53 | and.d 0x00ff0000, $r2 |
57 | bne _set_timing | 54 | bne _set_timing |
58 | lsrq 16, $r2 | 55 | lsrq 16, $r2 |
59 | 56 | ||
60 | move.d 0x40, $r2 ; Assume 32 bits and CAS latency = 2 | 57 | move.d 0x40, $r2 ; Assume 32 bits and CAS latency = 2 |
61 | move.d CONFIG_ETRAX_DEF_R_SDRAM_TIMING, $r1 | 58 | move.d CONFIG_ETRAX_DEF_R_SDRAM_TIMING, $r1 |
62 | move.d $r1, $r3 | 59 | move.d $r1, $r3 |
63 | and.d 0x03, $r1 ; Get CAS latency | 60 | and.d 0x03, $r1 ; Get CAS latency |
64 | and.d 0x1000, $r3 ; 50 or 100 MHz? | 61 | and.d 0x1000, $r3 ; 50 or 100 MHz? |
65 | beq _speed_50 | 62 | beq _speed_50 |
66 | nop | 63 | nop |
67 | _speed_100: | 64 | _speed_100: |
68 | cmp.d 0x00, $r1 ; CAS latency = 2? | 65 | cmp.d 0x00, $r1 ; CAS latency = 2? |
69 | beq _bw_check | 66 | beq _bw_check |
70 | nop | 67 | nop |
71 | or.d 0x20, $r2 ; CAS latency = 3 | 68 | or.d 0x20, $r2 ; CAS latency = 3 |
72 | ba _bw_check | 69 | ba _bw_check |
73 | nop | 70 | nop |
74 | _speed_50: | 71 | _speed_50: |
75 | cmp.d 0x01, $r1 ; CAS latency = 2? | 72 | cmp.d 0x01, $r1 ; CAS latency = 2? |
76 | beq _bw_check | 73 | beq _bw_check |
77 | nop | 74 | nop |
@@ -86,19 +83,19 @@ _bw_check: | |||
86 | ; Set timing parameters. Starts master clock | 83 | ; Set timing parameters. Starts master clock |
87 | _set_timing: | 84 | _set_timing: |
88 | move.d CONFIG_ETRAX_DEF_R_SDRAM_TIMING, $r1 | 85 | move.d CONFIG_ETRAX_DEF_R_SDRAM_TIMING, $r1 |
89 | and.d 0x8000f9ff, $r1 ; Make sure mrs data and command is 0 | 86 | and.d 0x8000f9ff, $r1 ; Make sure mrs data and command is 0 |
90 | or.d 0x80000000, $r1 ; Make sure sdram enable bit is set | 87 | or.d 0x80000000, $r1 ; Make sure sdram enable bit is set |
91 | move.d $r1, $r5 | 88 | move.d $r1, $r5 |
92 | or.d 0x0000c000, $r1 ; ref = disable | 89 | or.d 0x0000c000, $r1 ; ref = disable |
93 | lslq 16, $r2 ; mrs data starts at bit 16 | 90 | lslq 16, $r2 ; mrs data starts at bit 16 |
94 | or.d $r2, $r1 | 91 | or.d $r2, $r1 |
95 | move.d $r1, [R_SDRAM_TIMING] | 92 | move.d $r1, [R_SDRAM_TIMING] |
96 | 93 | ||
97 | ; Wait 200us | 94 | ; Wait 200us |
98 | move.d 10000, $r2 | 95 | move.d 10000, $r2 |
99 | 1: bne 1b | 96 | 1: bne 1b |
100 | subq 1, $r2 | 97 | subq 1, $r2 |
101 | 98 | ||
102 | ; Issue initialization command sequence | 99 | ; Issue initialization command sequence |
103 | move.d _sdram_commands_start, $r2 | 100 | move.d _sdram_commands_start, $r2 |
104 | and.d 0x000fffff, $r2 ; Make sure commands are read from flash | 101 | and.d 0x000fffff, $r2 ; Make sure commands are read from flash |
@@ -144,7 +141,6 @@ _sdram_commands_start: | |||
144 | .byte 2 ; refresh | 141 | .byte 2 ; refresh |
145 | .byte 0 ; nop | 142 | .byte 0 ; nop |
146 | .byte 1 ; mrs | 143 | .byte 1 ; mrs |
147 | .byte 0 ; nop | 144 | .byte 0 ; nop |
148 | _sdram_commands_end: | 145 | _sdram_commands_end: |
149 | #endif | ||
150 | #endif | 146 | #endif |