diff options
Diffstat (limited to 'arch/m68k/platform/coldfire')
-rw-r--r-- | arch/m68k/platform/coldfire/entry.S | 24 | ||||
-rw-r--r-- | arch/m68k/platform/coldfire/intc-2.c | 2 | ||||
-rw-r--r-- | arch/m68k/platform/coldfire/intc-simr.c | 2 | ||||
-rw-r--r-- | arch/m68k/platform/coldfire/intc.c | 1 | ||||
-rw-r--r-- | arch/m68k/platform/coldfire/vectors.c | 10 |
5 files changed, 14 insertions, 25 deletions
diff --git a/arch/m68k/platform/coldfire/entry.S b/arch/m68k/platform/coldfire/entry.S index 27c2b001161e..bd27242c2f43 100644 --- a/arch/m68k/platform/coldfire/entry.S +++ b/arch/m68k/platform/coldfire/entry.S | |||
@@ -182,21 +182,23 @@ ENTRY(inthandler) | |||
182 | 182 | ||
183 | /* | 183 | /* |
184 | * Beware - when entering resume, prev (the current task) is | 184 | * Beware - when entering resume, prev (the current task) is |
185 | * in a0, next (the new task) is in a1,so don't change these | 185 | * in a0, next (the new task) is in a1, so don't change these |
186 | * registers until their contents are no longer needed. | 186 | * registers until their contents are no longer needed. |
187 | * This is always called in supervisor mode, so don't bother to save | ||
188 | * and restore sr; user's process sr is actually in the stack. | ||
189 | */ | 187 | */ |
190 | ENTRY(resume) | 188 | ENTRY(resume) |
191 | movel %a0, %d1 /* get prev thread in d1 */ | 189 | movew %sr,%d1 /* save current status */ |
192 | RDUSP | 190 | movew %d1,%a0@(TASK_THREAD+THREAD_SR) |
193 | movel %a2,%a0@(TASK_THREAD+THREAD_USP) | 191 | movel %a0,%d1 /* get prev thread in d1 */ |
194 | |||
195 | SAVE_SWITCH_STACK | 192 | SAVE_SWITCH_STACK |
196 | movel %sp,%a0@(TASK_THREAD+THREAD_KSP) /* save kernel stack pointer */ | 193 | movel %sp,%a0@(TASK_THREAD+THREAD_KSP) /* save kernel stack pointer */ |
197 | movel %a1@(TASK_THREAD+THREAD_KSP),%sp /* restore new thread stack */ | 194 | RDUSP /* movel %usp,%a3 */ |
195 | movel %a3,%a0@(TASK_THREAD+THREAD_USP) /* save thread user stack */ | ||
196 | |||
197 | movel %a1@(TASK_THREAD+THREAD_USP),%a3 /* restore thread user stack */ | ||
198 | WRUSP /* movel %a3,%usp */ | ||
199 | movel %a1@(TASK_THREAD+THREAD_KSP),%sp /* restore new kernel stack */ | ||
200 | movew %a1@(TASK_THREAD+THREAD_SR),%d7 /* restore new status */ | ||
201 | movew %d7,%sr | ||
198 | RESTORE_SWITCH_STACK | 202 | RESTORE_SWITCH_STACK |
199 | |||
200 | movel %a1@(TASK_THREAD+THREAD_USP),%a0 /* restore thread user stack */ | ||
201 | WRUSP | ||
202 | rts | 203 | rts |
204 | |||
diff --git a/arch/m68k/platform/coldfire/intc-2.c b/arch/m68k/platform/coldfire/intc-2.c index 74b55cfbc3cb..995093357c59 100644 --- a/arch/m68k/platform/coldfire/intc-2.c +++ b/arch/m68k/platform/coldfire/intc-2.c | |||
@@ -194,8 +194,6 @@ void __init init_IRQ(void) | |||
194 | { | 194 | { |
195 | int irq; | 195 | int irq; |
196 | 196 | ||
197 | init_vectors(); | ||
198 | |||
199 | /* Mask all interrupt sources */ | 197 | /* Mask all interrupt sources */ |
200 | __raw_writel(0x1, MCFICM_INTC0 + MCFINTC_IMRL); | 198 | __raw_writel(0x1, MCFICM_INTC0 + MCFINTC_IMRL); |
201 | #ifdef MCFICM_INTC1 | 199 | #ifdef MCFICM_INTC1 |
diff --git a/arch/m68k/platform/coldfire/intc-simr.c b/arch/m68k/platform/coldfire/intc-simr.c index d6a4d9d53e42..650d52e2927e 100644 --- a/arch/m68k/platform/coldfire/intc-simr.c +++ b/arch/m68k/platform/coldfire/intc-simr.c | |||
@@ -171,8 +171,6 @@ void __init init_IRQ(void) | |||
171 | { | 171 | { |
172 | int irq, eirq; | 172 | int irq, eirq; |
173 | 173 | ||
174 | init_vectors(); | ||
175 | |||
176 | /* Mask all interrupt sources */ | 174 | /* Mask all interrupt sources */ |
177 | __raw_writeb(0xff, MCFINTC0_SIMR); | 175 | __raw_writeb(0xff, MCFINTC0_SIMR); |
178 | if (MCFINTC1_SIMR) | 176 | if (MCFINTC1_SIMR) |
diff --git a/arch/m68k/platform/coldfire/intc.c b/arch/m68k/platform/coldfire/intc.c index 0bbb414856eb..5c0c150b4067 100644 --- a/arch/m68k/platform/coldfire/intc.c +++ b/arch/m68k/platform/coldfire/intc.c | |||
@@ -139,7 +139,6 @@ void __init init_IRQ(void) | |||
139 | { | 139 | { |
140 | int irq; | 140 | int irq; |
141 | 141 | ||
142 | init_vectors(); | ||
143 | mcf_maskimr(0xffffffff); | 142 | mcf_maskimr(0xffffffff); |
144 | 143 | ||
145 | for (irq = 0; (irq < NR_IRQS); irq++) { | 144 | for (irq = 0; (irq < NR_IRQS); irq++) { |
diff --git a/arch/m68k/platform/coldfire/vectors.c b/arch/m68k/platform/coldfire/vectors.c index a21d3f870b7a..3a7cc524ecd3 100644 --- a/arch/m68k/platform/coldfire/vectors.c +++ b/arch/m68k/platform/coldfire/vectors.c | |||
@@ -35,21 +35,13 @@ asmlinkage void dbginterrupt_c(struct frame *fp) | |||
35 | 35 | ||
36 | extern e_vector *_ramvec; | 36 | extern e_vector *_ramvec; |
37 | 37 | ||
38 | void set_evector(int vecnum, void (*handler)(void)) | ||
39 | { | ||
40 | if (vecnum >= 0 && vecnum <= 255) | ||
41 | _ramvec[vecnum] = handler; | ||
42 | } | ||
43 | |||
44 | /***************************************************************************/ | ||
45 | |||
46 | /* Assembler routines */ | 38 | /* Assembler routines */ |
47 | asmlinkage void buserr(void); | 39 | asmlinkage void buserr(void); |
48 | asmlinkage void trap(void); | 40 | asmlinkage void trap(void); |
49 | asmlinkage void system_call(void); | 41 | asmlinkage void system_call(void); |
50 | asmlinkage void inthandler(void); | 42 | asmlinkage void inthandler(void); |
51 | 43 | ||
52 | void __init init_vectors(void) | 44 | void __init trap_init(void) |
53 | { | 45 | { |
54 | int i; | 46 | int i; |
55 | 47 | ||