diff options
Diffstat (limited to 'arch/m68k/platform')
-rw-r--r-- | arch/m68k/platform/5206/config.c | 6 | ||||
-rw-r--r-- | arch/m68k/platform/5206e/Makefile | 18 | ||||
-rw-r--r-- | arch/m68k/platform/5206e/config.c | 127 | ||||
-rw-r--r-- | arch/m68k/platform/5206e/gpio.c | 49 | ||||
-rw-r--r-- | arch/m68k/platform/5272/intc.c | 2 | ||||
-rw-r--r-- | arch/m68k/platform/68328/entry.S | 15 | ||||
-rw-r--r-- | arch/m68k/platform/68328/ints.c | 10 | ||||
-rw-r--r-- | arch/m68k/platform/68360/entry.S | 15 | ||||
-rw-r--r-- | arch/m68k/platform/68360/ints.c | 11 | ||||
-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 |
14 files changed, 46 insertions, 246 deletions
diff --git a/arch/m68k/platform/5206/config.c b/arch/m68k/platform/5206/config.c index 9c335465e66..6fa3f800277 100644 --- a/arch/m68k/platform/5206/config.c +++ b/arch/m68k/platform/5206/config.c | |||
@@ -98,6 +98,12 @@ void m5206_cpu_reset(void) | |||
98 | 98 | ||
99 | void __init config_BSP(char *commandp, int size) | 99 | void __init config_BSP(char *commandp, int size) |
100 | { | 100 | { |
101 | #if defined(CONFIG_NETtel) | ||
102 | /* Copy command line from FLASH to local buffer... */ | ||
103 | memcpy(commandp, (char *) 0xf0004000, size); | ||
104 | commandp[size-1] = 0; | ||
105 | #endif /* CONFIG_NETtel */ | ||
106 | |||
101 | mach_reset = m5206_cpu_reset; | 107 | mach_reset = m5206_cpu_reset; |
102 | m5206_timers_init(); | 108 | m5206_timers_init(); |
103 | m5206_uarts_init(); | 109 | m5206_uarts_init(); |
diff --git a/arch/m68k/platform/5206e/Makefile b/arch/m68k/platform/5206e/Makefile deleted file mode 100644 index b5db05625cf..00000000000 --- a/arch/m68k/platform/5206e/Makefile +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | # | ||
2 | # Makefile for the m68knommu linux kernel. | ||
3 | # | ||
4 | |||
5 | # | ||
6 | # If you want to play with the HW breakpoints then you will | ||
7 | # need to add define this, which will give you a stack backtrace | ||
8 | # on the console port whenever a DBG interrupt occurs. You have to | ||
9 | # set up you HW breakpoints to trigger a DBG interrupt: | ||
10 | # | ||
11 | # ccflags-y := -DTRAP_DBG_INTERRUPT | ||
12 | # asflags-y := -DTRAP_DBG_INTERRUPT | ||
13 | # | ||
14 | |||
15 | asflags-$(CONFIG_FULLDEBUG) := -DDEBUGGER_COMPATIBLE_CACHE=1 | ||
16 | |||
17 | obj-y := config.o gpio.o | ||
18 | |||
diff --git a/arch/m68k/platform/5206e/config.c b/arch/m68k/platform/5206e/config.c deleted file mode 100644 index 942397984c6..00000000000 --- a/arch/m68k/platform/5206e/config.c +++ /dev/null | |||
@@ -1,127 +0,0 @@ | |||
1 | /***************************************************************************/ | ||
2 | |||
3 | /* | ||
4 | * linux/arch/m68knommu/platform/5206e/config.c | ||
5 | * | ||
6 | * Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com) | ||
7 | */ | ||
8 | |||
9 | /***************************************************************************/ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/param.h> | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/io.h> | ||
15 | #include <asm/machdep.h> | ||
16 | #include <asm/coldfire.h> | ||
17 | #include <asm/mcfsim.h> | ||
18 | #include <asm/mcfuart.h> | ||
19 | #include <asm/mcfdma.h> | ||
20 | |||
21 | /***************************************************************************/ | ||
22 | |||
23 | static struct mcf_platform_uart m5206e_uart_platform[] = { | ||
24 | { | ||
25 | .mapbase = MCF_MBAR + MCFUART_BASE1, | ||
26 | .irq = 73, | ||
27 | }, | ||
28 | { | ||
29 | .mapbase = MCF_MBAR + MCFUART_BASE2, | ||
30 | .irq = 74, | ||
31 | }, | ||
32 | { }, | ||
33 | }; | ||
34 | |||
35 | static struct platform_device m5206e_uart = { | ||
36 | .name = "mcfuart", | ||
37 | .id = 0, | ||
38 | .dev.platform_data = m5206e_uart_platform, | ||
39 | }; | ||
40 | |||
41 | static struct platform_device *m5206e_devices[] __initdata = { | ||
42 | &m5206e_uart, | ||
43 | }; | ||
44 | |||
45 | /***************************************************************************/ | ||
46 | |||
47 | static void __init m5206e_uart_init_line(int line, int irq) | ||
48 | { | ||
49 | if (line == 0) { | ||
50 | writel(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCF_MBAR + MCFSIM_UART1ICR); | ||
51 | writeb(irq, MCFUART_BASE1 + MCFUART_UIVR); | ||
52 | mcf_mapirq2imr(irq, MCFINTC_UART0); | ||
53 | } else if (line == 1) { | ||
54 | writel(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCF_MBAR + MCFSIM_UART2ICR); | ||
55 | writeb(irq, MCFUART_BASE2 + MCFUART_UIVR); | ||
56 | mcf_mapirq2imr(irq, MCFINTC_UART1); | ||
57 | } | ||
58 | } | ||
59 | |||
60 | static void __init m5206e_uarts_init(void) | ||
61 | { | ||
62 | const int nrlines = ARRAY_SIZE(m5206e_uart_platform); | ||
63 | int line; | ||
64 | |||
65 | for (line = 0; (line < nrlines); line++) | ||
66 | m5206e_uart_init_line(line, m5206e_uart_platform[line].irq); | ||
67 | } | ||
68 | |||
69 | /***************************************************************************/ | ||
70 | |||
71 | static void __init m5206e_timers_init(void) | ||
72 | { | ||
73 | /* Timer1 is always used as system timer */ | ||
74 | writeb(MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI3, | ||
75 | MCF_MBAR + MCFSIM_TIMER1ICR); | ||
76 | mcf_mapirq2imr(MCF_IRQ_TIMER, MCFINTC_TIMER1); | ||
77 | |||
78 | #ifdef CONFIG_HIGHPROFILE | ||
79 | /* Timer2 is to be used as a high speed profile timer */ | ||
80 | writeb(MCFSIM_ICR_AUTOVEC | MCFSIM_ICR_LEVEL7 | MCFSIM_ICR_PRI3, | ||
81 | MCF_MBAR + MCFSIM_TIMER2ICR); | ||
82 | mcf_mapirq2imr(MCF_IRQ_PROFILER, MCFINTC_TIMER2); | ||
83 | #endif | ||
84 | } | ||
85 | |||
86 | /***************************************************************************/ | ||
87 | |||
88 | void m5206e_cpu_reset(void) | ||
89 | { | ||
90 | local_irq_disable(); | ||
91 | /* Set watchdog to soft reset, and enabled */ | ||
92 | __raw_writeb(0xc0, MCF_MBAR + MCFSIM_SYPCR); | ||
93 | for (;;) | ||
94 | /* wait for watchdog to timeout */; | ||
95 | } | ||
96 | |||
97 | /***************************************************************************/ | ||
98 | |||
99 | void __init config_BSP(char *commandp, int size) | ||
100 | { | ||
101 | #if defined(CONFIG_NETtel) | ||
102 | /* Copy command line from FLASH to local buffer... */ | ||
103 | memcpy(commandp, (char *) 0xf0004000, size); | ||
104 | commandp[size-1] = 0; | ||
105 | #endif /* CONFIG_NETtel */ | ||
106 | |||
107 | mach_reset = m5206e_cpu_reset; | ||
108 | m5206e_timers_init(); | ||
109 | m5206e_uarts_init(); | ||
110 | |||
111 | /* Only support the external interrupts on their primary level */ | ||
112 | mcf_mapirq2imr(25, MCFINTC_EINT1); | ||
113 | mcf_mapirq2imr(28, MCFINTC_EINT4); | ||
114 | mcf_mapirq2imr(31, MCFINTC_EINT7); | ||
115 | } | ||
116 | |||
117 | /***************************************************************************/ | ||
118 | |||
119 | static int __init init_BSP(void) | ||
120 | { | ||
121 | platform_add_devices(m5206e_devices, ARRAY_SIZE(m5206e_devices)); | ||
122 | return 0; | ||
123 | } | ||
124 | |||
125 | arch_initcall(init_BSP); | ||
126 | |||
127 | /***************************************************************************/ | ||
diff --git a/arch/m68k/platform/5206e/gpio.c b/arch/m68k/platform/5206e/gpio.c deleted file mode 100644 index b9ab4a120f2..00000000000 --- a/arch/m68k/platform/5206e/gpio.c +++ /dev/null | |||
@@ -1,49 +0,0 @@ | |||
1 | /* | ||
2 | * Coldfire generic GPIO support | ||
3 | * | ||
4 | * (C) Copyright 2009, Steven King <sfking@fdwdc.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; version 2 of the License. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | */ | ||
15 | |||
16 | #include <linux/kernel.h> | ||
17 | #include <linux/init.h> | ||
18 | |||
19 | #include <asm/coldfire.h> | ||
20 | #include <asm/mcfsim.h> | ||
21 | #include <asm/mcfgpio.h> | ||
22 | |||
23 | static struct mcf_gpio_chip mcf_gpio_chips[] = { | ||
24 | { | ||
25 | .gpio_chip = { | ||
26 | .label = "PP", | ||
27 | .request = mcf_gpio_request, | ||
28 | .free = mcf_gpio_free, | ||
29 | .direction_input = mcf_gpio_direction_input, | ||
30 | .direction_output = mcf_gpio_direction_output, | ||
31 | .get = mcf_gpio_get_value, | ||
32 | .set = mcf_gpio_set_value, | ||
33 | .ngpio = 8, | ||
34 | }, | ||
35 | .pddr = (void __iomem *) MCFSIM_PADDR, | ||
36 | .podr = (void __iomem *) MCFSIM_PADAT, | ||
37 | .ppdr = (void __iomem *) MCFSIM_PADAT, | ||
38 | }, | ||
39 | }; | ||
40 | |||
41 | static int __init mcf_gpio_init(void) | ||
42 | { | ||
43 | unsigned i = 0; | ||
44 | while (i < ARRAY_SIZE(mcf_gpio_chips)) | ||
45 | (void)gpiochip_add((struct gpio_chip *)&mcf_gpio_chips[i++]); | ||
46 | return 0; | ||
47 | } | ||
48 | |||
49 | core_initcall(mcf_gpio_init); | ||
diff --git a/arch/m68k/platform/5272/intc.c b/arch/m68k/platform/5272/intc.c index 7e715dfe281..7160e618b0a 100644 --- a/arch/m68k/platform/5272/intc.c +++ b/arch/m68k/platform/5272/intc.c | |||
@@ -162,8 +162,6 @@ void __init init_IRQ(void) | |||
162 | { | 162 | { |
163 | int irq, edge; | 163 | int irq, edge; |
164 | 164 | ||
165 | init_vectors(); | ||
166 | |||
167 | /* Mask all interrupt sources */ | 165 | /* Mask all interrupt sources */ |
168 | writel(0x88888888, MCF_MBAR + MCFSIM_ICR1); | 166 | writel(0x88888888, MCF_MBAR + MCFSIM_ICR1); |
169 | writel(0x88888888, MCF_MBAR + MCFSIM_ICR2); | 167 | writel(0x88888888, MCF_MBAR + MCFSIM_ICR2); |
diff --git a/arch/m68k/platform/68328/entry.S b/arch/m68k/platform/68328/entry.S index f68dce766c0..293e1eba9ac 100644 --- a/arch/m68k/platform/68328/entry.S +++ b/arch/m68k/platform/68328/entry.S | |||
@@ -236,27 +236,26 @@ ret_from_interrupt: | |||
236 | * Handler for uninitialized and spurious interrupts. | 236 | * Handler for uninitialized and spurious interrupts. |
237 | */ | 237 | */ |
238 | ENTRY(bad_interrupt) | 238 | ENTRY(bad_interrupt) |
239 | addql #1,num_spurious | 239 | addql #1,irq_err_count |
240 | rte | 240 | rte |
241 | 241 | ||
242 | /* | 242 | /* |
243 | * Beware - when entering resume, prev (the current task) is | 243 | * Beware - when entering resume, prev (the current task) is |
244 | * in a0, next (the new task) is in a1,so don't change these | 244 | * in a0, next (the new task) is in a1, so don't change these |
245 | * registers until their contents are no longer needed. | 245 | * registers until their contents are no longer needed. |
246 | */ | 246 | */ |
247 | ENTRY(resume) | 247 | ENTRY(resume) |
248 | movel %a0,%d1 /* save prev thread in d1 */ | 248 | movel %a0,%d1 /* save prev thread in d1 */ |
249 | movew %sr,%a0@(TASK_THREAD+THREAD_SR) /* save sr */ | 249 | movew %sr,%a0@(TASK_THREAD+THREAD_SR) /* save sr */ |
250 | movel %usp,%a2 /* save usp */ | ||
251 | movel %a2,%a0@(TASK_THREAD+THREAD_USP) | ||
252 | |||
253 | SAVE_SWITCH_STACK | 250 | SAVE_SWITCH_STACK |
254 | movel %sp,%a0@(TASK_THREAD+THREAD_KSP) /* save kernel stack */ | 251 | movel %sp,%a0@(TASK_THREAD+THREAD_KSP) /* save kernel stack */ |
252 | movel %usp,%a3 /* save usp */ | ||
253 | movel %a3,%a0@(TASK_THREAD+THREAD_USP) | ||
254 | |||
255 | movel %a1@(TASK_THREAD+THREAD_USP),%a3 /* restore user stack */ | ||
256 | movel %a3,%usp | ||
255 | movel %a1@(TASK_THREAD+THREAD_KSP),%sp /* restore new thread stack */ | 257 | movel %a1@(TASK_THREAD+THREAD_KSP),%sp /* restore new thread stack */ |
256 | RESTORE_SWITCH_STACK | 258 | RESTORE_SWITCH_STACK |
257 | |||
258 | movel %a1@(TASK_THREAD+THREAD_USP),%a0 /* restore user stack */ | ||
259 | movel %a0,%usp | ||
260 | movew %a1@(TASK_THREAD+THREAD_SR),%sr /* restore thread status reg */ | 259 | movew %a1@(TASK_THREAD+THREAD_SR),%sr /* restore thread status reg */ |
261 | rts | 260 | rts |
262 | 261 | ||
diff --git a/arch/m68k/platform/68328/ints.c b/arch/m68k/platform/68328/ints.c index a90288cf744..4bd456531f9 100644 --- a/arch/m68k/platform/68328/ints.c +++ b/arch/m68k/platform/68328/ints.c | |||
@@ -70,9 +70,6 @@ asmlinkage irqreturn_t inthandler7(void); | |||
70 | 70 | ||
71 | extern e_vector *_ramvec; | 71 | extern e_vector *_ramvec; |
72 | 72 | ||
73 | /* The number of spurious interrupts */ | ||
74 | volatile unsigned int num_spurious; | ||
75 | |||
76 | /* The 68k family did not have a good way to determine the source | 73 | /* The 68k family did not have a good way to determine the source |
77 | * of interrupts until later in the family. The EC000 core does | 74 | * of interrupts until later in the family. The EC000 core does |
78 | * not provide the vector number on the stack, we vector everything | 75 | * not provide the vector number on the stack, we vector everything |
@@ -155,7 +152,7 @@ static struct irq_chip intc_irq_chip = { | |||
155 | * This function should be called during kernel startup to initialize | 152 | * This function should be called during kernel startup to initialize |
156 | * the machine vector table. | 153 | * the machine vector table. |
157 | */ | 154 | */ |
158 | void __init init_IRQ(void) | 155 | void __init trap_init(void) |
159 | { | 156 | { |
160 | int i; | 157 | int i; |
161 | 158 | ||
@@ -172,6 +169,11 @@ void __init init_IRQ(void) | |||
172 | _ramvec[69] = (e_vector) inthandler5; | 169 | _ramvec[69] = (e_vector) inthandler5; |
173 | _ramvec[70] = (e_vector) inthandler6; | 170 | _ramvec[70] = (e_vector) inthandler6; |
174 | _ramvec[71] = (e_vector) inthandler7; | 171 | _ramvec[71] = (e_vector) inthandler7; |
172 | } | ||
173 | |||
174 | void __init init_IRQ(void) | ||
175 | { | ||
176 | int i; | ||
175 | 177 | ||
176 | IVR = 0x40; /* Set DragonBall IVR (interrupt base) to 64 */ | 178 | IVR = 0x40; /* Set DragonBall IVR (interrupt base) to 64 */ |
177 | 179 | ||
diff --git a/arch/m68k/platform/68360/entry.S b/arch/m68k/platform/68360/entry.S index a07b14feed9..abbb89672ea 100644 --- a/arch/m68k/platform/68360/entry.S +++ b/arch/m68k/platform/68360/entry.S | |||
@@ -157,27 +157,26 @@ ret_from_interrupt: | |||
157 | * Handler for uninitialized and spurious interrupts. | 157 | * Handler for uninitialized and spurious interrupts. |
158 | */ | 158 | */ |
159 | bad_interrupt: | 159 | bad_interrupt: |
160 | addql #1,num_spurious | 160 | addql #1,irq_err_count |
161 | rte | 161 | rte |
162 | 162 | ||
163 | /* | 163 | /* |
164 | * Beware - when entering resume, prev (the current task) is | 164 | * Beware - when entering resume, prev (the current task) is |
165 | * in a0, next (the new task) is in a1,so don't change these | 165 | * in a0, next (the new task) is in a1, so don't change these |
166 | * registers until their contents are no longer needed. | 166 | * registers until their contents are no longer needed. |
167 | */ | 167 | */ |
168 | ENTRY(resume) | 168 | ENTRY(resume) |
169 | movel %a0,%d1 /* save prev thread in d1 */ | 169 | movel %a0,%d1 /* save prev thread in d1 */ |
170 | movew %sr,%a0@(TASK_THREAD+THREAD_SR) /* save sr */ | 170 | movew %sr,%a0@(TASK_THREAD+THREAD_SR) /* save sr */ |
171 | movel %usp,%a2 /* save usp */ | ||
172 | movel %a2,%a0@(TASK_THREAD+THREAD_USP) | ||
173 | |||
174 | SAVE_SWITCH_STACK | 171 | SAVE_SWITCH_STACK |
175 | movel %sp,%a0@(TASK_THREAD+THREAD_KSP) /* save kernel stack */ | 172 | movel %sp,%a0@(TASK_THREAD+THREAD_KSP) /* save kernel stack */ |
173 | movel %usp,%a3 /* save usp */ | ||
174 | movel %a3,%a0@(TASK_THREAD+THREAD_USP) | ||
175 | |||
176 | movel %a1@(TASK_THREAD+THREAD_USP),%a3 /* restore user stack */ | ||
177 | movel %a3,%usp | ||
176 | movel %a1@(TASK_THREAD+THREAD_KSP),%sp /* restore new thread stack */ | 178 | movel %a1@(TASK_THREAD+THREAD_KSP),%sp /* restore new thread stack */ |
177 | RESTORE_SWITCH_STACK | 179 | RESTORE_SWITCH_STACK |
178 | |||
179 | movel %a1@(TASK_THREAD+THREAD_USP),%a0 /* restore user stack */ | ||
180 | movel %a0,%usp | ||
181 | movew %a1@(TASK_THREAD+THREAD_SR),%sr /* restore thread status reg */ | 180 | movew %a1@(TASK_THREAD+THREAD_SR),%sr /* restore thread status reg */ |
182 | rts | 181 | rts |
183 | 182 | ||
diff --git a/arch/m68k/platform/68360/ints.c b/arch/m68k/platform/68360/ints.c index 4af0f4e30f7..7b40202d963 100644 --- a/arch/m68k/platform/68360/ints.c +++ b/arch/m68k/platform/68360/ints.c | |||
@@ -34,9 +34,6 @@ asmlinkage void inthandler(void); | |||
34 | 34 | ||
35 | extern void *_ramvec[]; | 35 | extern void *_ramvec[]; |
36 | 36 | ||
37 | /* The number of spurious interrupts */ | ||
38 | volatile unsigned int num_spurious; | ||
39 | |||
40 | static void intc_irq_unmask(struct irq_data *d) | 37 | static void intc_irq_unmask(struct irq_data *d) |
41 | { | 38 | { |
42 | pquicc->intr_cimr |= (1 << d->irq); | 39 | pquicc->intr_cimr |= (1 << d->irq); |
@@ -63,9 +60,8 @@ static struct irq_chip intc_irq_chip = { | |||
63 | * This function should be called during kernel startup to initialize | 60 | * This function should be called during kernel startup to initialize |
64 | * the vector table. | 61 | * the vector table. |
65 | */ | 62 | */ |
66 | void init_IRQ(void) | 63 | void __init trap_init(void) |
67 | { | 64 | { |
68 | int i; | ||
69 | int vba = (CPM_VECTOR_BASE<<4); | 65 | int vba = (CPM_VECTOR_BASE<<4); |
70 | 66 | ||
71 | /* set up the vectors */ | 67 | /* set up the vectors */ |
@@ -130,6 +126,11 @@ void init_IRQ(void) | |||
130 | 126 | ||
131 | /* turn off all CPM interrupts */ | 127 | /* turn off all CPM interrupts */ |
132 | pquicc->intr_cimr = 0x00000000; | 128 | pquicc->intr_cimr = 0x00000000; |
129 | } | ||
130 | |||
131 | void init_IRQ(void) | ||
132 | { | ||
133 | int i; | ||
133 | 134 | ||
134 | for (i = 0; (i < NR_IRQS); i++) { | 135 | for (i = 0; (i < NR_IRQS); i++) { |
135 | irq_set_chip(i, &intc_irq_chip); | 136 | irq_set_chip(i, &intc_irq_chip); |
diff --git a/arch/m68k/platform/coldfire/entry.S b/arch/m68k/platform/coldfire/entry.S index 27c2b001161..bd27242c2f4 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 74b55cfbc3c..995093357c5 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 d6a4d9d53e4..650d52e2927 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 0bbb414856e..5c0c150b406 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 a21d3f870b7..3a7cc524ecd 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 | ||