diff options
Diffstat (limited to 'arch/m68knommu/platform')
-rw-r--r-- | arch/m68knommu/platform/5206/config.c | 11 | ||||
-rw-r--r-- | arch/m68knommu/platform/5206e/config.c | 12 | ||||
-rw-r--r-- | arch/m68knommu/platform/5249/config.c | 11 | ||||
-rw-r--r-- | arch/m68knommu/platform/5307/config.c | 12 | ||||
-rw-r--r-- | arch/m68knommu/platform/5407/config.c | 12 | ||||
-rw-r--r-- | arch/m68knommu/platform/coldfire/intc.c | 59 |
6 files changed, 83 insertions, 34 deletions
diff --git a/arch/m68knommu/platform/5206/config.c b/arch/m68knommu/platform/5206/config.c index 481617a23d09..0dce2383320d 100644 --- a/arch/m68knommu/platform/5206/config.c +++ b/arch/m68knommu/platform/5206/config.c | |||
@@ -49,11 +49,11 @@ static void __init m5206_uart_init_line(int line, int irq) | |||
49 | if (line == 0) { | 49 | if (line == 0) { |
50 | writel(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCF_MBAR + MCFSIM_UART1ICR); | 50 | writel(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCF_MBAR + MCFSIM_UART1ICR); |
51 | writeb(irq, MCFUART_BASE1 + MCFUART_UIVR); | 51 | writeb(irq, MCFUART_BASE1 + MCFUART_UIVR); |
52 | mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_UART1); | 52 | mcf_clrimr(MCFINTC_UART0); |
53 | } else if (line == 1) { | 53 | } else if (line == 1) { |
54 | writel(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCF_MBAR + MCFSIM_UART2ICR); | 54 | writel(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCF_MBAR + MCFSIM_UART2ICR); |
55 | writeb(irq, MCFUART_BASE2 + MCFUART_UIVR); | 55 | writeb(irq, MCFUART_BASE2 + MCFUART_UIVR); |
56 | mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_UART2); | 56 | mcf_clrimr(MCFINTC_UART1); |
57 | } | 57 | } |
58 | } | 58 | } |
59 | 59 | ||
@@ -75,13 +75,13 @@ void mcf_settimericr(unsigned int timer, unsigned int level) | |||
75 | 75 | ||
76 | if (timer <= 2) { | 76 | if (timer <= 2) { |
77 | switch (timer) { | 77 | switch (timer) { |
78 | case 2: icr = MCFSIM_TIMER2ICR; imr = MCFSIM_IMR_TIMER2; break; | 78 | case 2: icr = MCFSIM_TIMER2ICR; imr = MCFINTC_TIMER2; break; |
79 | default: icr = MCFSIM_TIMER1ICR; imr = MCFSIM_IMR_TIMER1; break; | 79 | default: icr = MCFSIM_TIMER1ICR; imr = MCFINTC_TIMER1; break; |
80 | } | 80 | } |
81 | 81 | ||
82 | icrp = (volatile unsigned char *) (MCF_MBAR + icr); | 82 | icrp = (volatile unsigned char *) (MCF_MBAR + icr); |
83 | *icrp = MCFSIM_ICR_AUTOVEC | (level << 2) | MCFSIM_ICR_PRI3; | 83 | *icrp = MCFSIM_ICR_AUTOVEC | (level << 2) | MCFSIM_ICR_PRI3; |
84 | mcf_setimr(mcf_getimr() & ~imr); | 84 | mcf_clrimr(imr); |
85 | } | 85 | } |
86 | } | 86 | } |
87 | 87 | ||
@@ -100,7 +100,6 @@ void m5206_cpu_reset(void) | |||
100 | 100 | ||
101 | void __init config_BSP(char *commandp, int size) | 101 | void __init config_BSP(char *commandp, int size) |
102 | { | 102 | { |
103 | mcf_setimr(MCFSIM_IMR_MASKALL); | ||
104 | mach_reset = m5206_cpu_reset; | 103 | mach_reset = m5206_cpu_reset; |
105 | } | 104 | } |
106 | 105 | ||
diff --git a/arch/m68knommu/platform/5206e/config.c b/arch/m68knommu/platform/5206e/config.c index 29e565a44431..08ef7e268989 100644 --- a/arch/m68knommu/platform/5206e/config.c +++ b/arch/m68knommu/platform/5206e/config.c | |||
@@ -50,11 +50,11 @@ static void __init m5206e_uart_init_line(int line, int irq) | |||
50 | if (line == 0) { | 50 | if (line == 0) { |
51 | writel(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCF_MBAR + MCFSIM_UART1ICR); | 51 | writel(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCF_MBAR + MCFSIM_UART1ICR); |
52 | writeb(irq, MCFUART_BASE1 + MCFUART_UIVR); | 52 | writeb(irq, MCFUART_BASE1 + MCFUART_UIVR); |
53 | mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_UART1); | 53 | mcf_clrimr(MCFINTC_UART0); |
54 | } else if (line == 1) { | 54 | } else if (line == 1) { |
55 | writel(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCF_MBAR + MCFSIM_UART2ICR); | 55 | writel(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCF_MBAR + MCFSIM_UART2ICR); |
56 | writeb(irq, MCFUART_BASE2 + MCFUART_UIVR); | 56 | writeb(irq, MCFUART_BASE2 + MCFUART_UIVR); |
57 | mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_UART2); | 57 | mcf_clrimr(MCFINTC_UART1); |
58 | } | 58 | } |
59 | } | 59 | } |
60 | 60 | ||
@@ -76,13 +76,13 @@ void mcf_settimericr(unsigned int timer, unsigned int level) | |||
76 | 76 | ||
77 | if (timer <= 2) { | 77 | if (timer <= 2) { |
78 | switch (timer) { | 78 | switch (timer) { |
79 | case 2: icr = MCFSIM_TIMER2ICR; imr = MCFSIM_IMR_TIMER2; break; | 79 | case 2: icr = MCFSIM_TIMER2ICR; imr = MCFINTC_TIMER2; break; |
80 | default: icr = MCFSIM_TIMER1ICR; imr = MCFSIM_IMR_TIMER1; break; | 80 | default: icr = MCFSIM_TIMER1ICR; imr = MCFINTC_TIMER1; break; |
81 | } | 81 | } |
82 | 82 | ||
83 | icrp = (volatile unsigned char *) (MCF_MBAR + icr); | 83 | icrp = (volatile unsigned char *) (MCF_MBAR + icr); |
84 | *icrp = MCFSIM_ICR_AUTOVEC | (level << 2) | MCFSIM_ICR_PRI3; | 84 | *icrp = MCFSIM_ICR_AUTOVEC | (level << 2) | MCFSIM_ICR_PRI3; |
85 | mcf_setimr(mcf_getimr() & ~imr); | 85 | mcf_clrimr(imr); |
86 | } | 86 | } |
87 | } | 87 | } |
88 | 88 | ||
@@ -101,8 +101,6 @@ void m5206e_cpu_reset(void) | |||
101 | 101 | ||
102 | void __init config_BSP(char *commandp, int size) | 102 | void __init config_BSP(char *commandp, int size) |
103 | { | 103 | { |
104 | mcf_setimr(MCFSIM_IMR_MASKALL); | ||
105 | |||
106 | #if defined(CONFIG_NETtel) | 104 | #if defined(CONFIG_NETtel) |
107 | /* Copy command line from FLASH to local buffer... */ | 105 | /* Copy command line from FLASH to local buffer... */ |
108 | memcpy(commandp, (char *) 0xf0004000, size); | 106 | memcpy(commandp, (char *) 0xf0004000, size); |
diff --git a/arch/m68knommu/platform/5249/config.c b/arch/m68knommu/platform/5249/config.c index 365fb6c52700..7261a3d28adc 100644 --- a/arch/m68knommu/platform/5249/config.c +++ b/arch/m68knommu/platform/5249/config.c | |||
@@ -48,11 +48,11 @@ static void __init m5249_uart_init_line(int line, int irq) | |||
48 | if (line == 0) { | 48 | if (line == 0) { |
49 | writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCF_MBAR + MCFSIM_UART1ICR); | 49 | writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCF_MBAR + MCFSIM_UART1ICR); |
50 | writeb(irq, MCF_MBAR + MCFUART_BASE1 + MCFUART_UIVR); | 50 | writeb(irq, MCF_MBAR + MCFUART_BASE1 + MCFUART_UIVR); |
51 | mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_UART1); | 51 | mcf_clrimr(MCFINTC_UART0); |
52 | } else if (line == 1) { | 52 | } else if (line == 1) { |
53 | writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCF_MBAR + MCFSIM_UART2ICR); | 53 | writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCF_MBAR + MCFSIM_UART2ICR); |
54 | writeb(irq, MCF_MBAR + MCFUART_BASE2 + MCFUART_UIVR); | 54 | writeb(irq, MCF_MBAR + MCFUART_BASE2 + MCFUART_UIVR); |
55 | mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_UART2); | 55 | mcf_clrimr(MCFINTC_UART1); |
56 | } | 56 | } |
57 | } | 57 | } |
58 | 58 | ||
@@ -75,13 +75,13 @@ void mcf_settimericr(unsigned int timer, unsigned int level) | |||
75 | 75 | ||
76 | if (timer <= 2) { | 76 | if (timer <= 2) { |
77 | switch (timer) { | 77 | switch (timer) { |
78 | case 2: icr = MCFSIM_TIMER2ICR; imr = MCFSIM_IMR_TIMER2; break; | 78 | case 2: icr = MCFSIM_TIMER2ICR; imr = MCFINTC_TIMER2; break; |
79 | default: icr = MCFSIM_TIMER1ICR; imr = MCFSIM_IMR_TIMER1; break; | 79 | default: icr = MCFSIM_TIMER1ICR; imr = MCFINTC_TIMER1; break; |
80 | } | 80 | } |
81 | 81 | ||
82 | icrp = (volatile unsigned char *) (MCF_MBAR + icr); | 82 | icrp = (volatile unsigned char *) (MCF_MBAR + icr); |
83 | *icrp = MCFSIM_ICR_AUTOVEC | (level << 2) | MCFSIM_ICR_PRI3; | 83 | *icrp = MCFSIM_ICR_AUTOVEC | (level << 2) | MCFSIM_ICR_PRI3; |
84 | mcf_setimr(mcf_getimr() & ~imr); | 84 | mcf_clrimr(imr); |
85 | } | 85 | } |
86 | } | 86 | } |
87 | 87 | ||
@@ -100,7 +100,6 @@ void m5249_cpu_reset(void) | |||
100 | 100 | ||
101 | void __init config_BSP(char *commandp, int size) | 101 | void __init config_BSP(char *commandp, int size) |
102 | { | 102 | { |
103 | mcf_setimr(MCFSIM_IMR_MASKALL); | ||
104 | mach_reset = m5249_cpu_reset; | 103 | mach_reset = m5249_cpu_reset; |
105 | } | 104 | } |
106 | 105 | ||
diff --git a/arch/m68knommu/platform/5307/config.c b/arch/m68knommu/platform/5307/config.c index 60fe45d51391..3e27d2ec03f0 100644 --- a/arch/m68knommu/platform/5307/config.c +++ b/arch/m68knommu/platform/5307/config.c | |||
@@ -64,11 +64,11 @@ static void __init m5307_uart_init_line(int line, int irq) | |||
64 | if (line == 0) { | 64 | if (line == 0) { |
65 | writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCF_MBAR + MCFSIM_UART1ICR); | 65 | writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCF_MBAR + MCFSIM_UART1ICR); |
66 | writeb(irq, MCF_MBAR + MCFUART_BASE1 + MCFUART_UIVR); | 66 | writeb(irq, MCF_MBAR + MCFUART_BASE1 + MCFUART_UIVR); |
67 | mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_UART1); | 67 | mcf_clrimr(MCFINTC_UART0); |
68 | } else if (line == 1) { | 68 | } else if (line == 1) { |
69 | writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCF_MBAR + MCFSIM_UART2ICR); | 69 | writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCF_MBAR + MCFSIM_UART2ICR); |
70 | writeb(irq, MCF_MBAR + MCFUART_BASE2 + MCFUART_UIVR); | 70 | writeb(irq, MCF_MBAR + MCFUART_BASE2 + MCFUART_UIVR); |
71 | mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_UART2); | 71 | mcf_clrimr(MCFINTC_UART1); |
72 | } | 72 | } |
73 | } | 73 | } |
74 | 74 | ||
@@ -90,13 +90,13 @@ void mcf_settimericr(unsigned int timer, unsigned int level) | |||
90 | 90 | ||
91 | if (timer <= 2) { | 91 | if (timer <= 2) { |
92 | switch (timer) { | 92 | switch (timer) { |
93 | case 2: icr = MCFSIM_TIMER2ICR; imr = MCFSIM_IMR_TIMER2; break; | 93 | case 2: icr = MCFSIM_TIMER2ICR; imr = MCFINTC_TIMER2; break; |
94 | default: icr = MCFSIM_TIMER1ICR; imr = MCFSIM_IMR_TIMER1; break; | 94 | default: icr = MCFSIM_TIMER1ICR; imr = MCFINTC_TIMER1; break; |
95 | } | 95 | } |
96 | 96 | ||
97 | icrp = (volatile unsigned char *) (MCF_MBAR + icr); | 97 | icrp = (volatile unsigned char *) (MCF_MBAR + icr); |
98 | *icrp = MCFSIM_ICR_AUTOVEC | (level << 2) | MCFSIM_ICR_PRI3; | 98 | *icrp = MCFSIM_ICR_AUTOVEC | (level << 2) | MCFSIM_ICR_PRI3; |
99 | mcf_setimr(mcf_getimr() & ~imr); | 99 | mcf_clrimr(imr); |
100 | } | 100 | } |
101 | } | 101 | } |
102 | 102 | ||
@@ -115,8 +115,6 @@ void m5307_cpu_reset(void) | |||
115 | 115 | ||
116 | void __init config_BSP(char *commandp, int size) | 116 | void __init config_BSP(char *commandp, int size) |
117 | { | 117 | { |
118 | mcf_setimr(MCFSIM_IMR_MASKALL); | ||
119 | |||
120 | #if defined(CONFIG_NETtel) || \ | 118 | #if defined(CONFIG_NETtel) || \ |
121 | defined(CONFIG_SECUREEDGEMP3) || defined(CONFIG_CLEOPATRA) | 119 | defined(CONFIG_SECUREEDGEMP3) || defined(CONFIG_CLEOPATRA) |
122 | /* Copy command line from FLASH to local buffer... */ | 120 | /* Copy command line from FLASH to local buffer... */ |
diff --git a/arch/m68knommu/platform/5407/config.c b/arch/m68knommu/platform/5407/config.c index 1e8ef74ea156..8aa94837bbc3 100644 --- a/arch/m68knommu/platform/5407/config.c +++ b/arch/m68knommu/platform/5407/config.c | |||
@@ -55,11 +55,11 @@ static void __init m5407_uart_init_line(int line, int irq) | |||
55 | if (line == 0) { | 55 | if (line == 0) { |
56 | writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCF_MBAR + MCFSIM_UART1ICR); | 56 | writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI1, MCF_MBAR + MCFSIM_UART1ICR); |
57 | writeb(irq, MCF_MBAR + MCFUART_BASE1 + MCFUART_UIVR); | 57 | writeb(irq, MCF_MBAR + MCFUART_BASE1 + MCFUART_UIVR); |
58 | mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_UART1); | 58 | mcf_clrimr(MCFINTC_UART0); |
59 | } else if (line == 1) { | 59 | } else if (line == 1) { |
60 | writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCF_MBAR + MCFSIM_UART2ICR); | 60 | writeb(MCFSIM_ICR_LEVEL6 | MCFSIM_ICR_PRI2, MCF_MBAR + MCFSIM_UART2ICR); |
61 | writeb(irq, MCF_MBAR + MCFUART_BASE2 + MCFUART_UIVR); | 61 | writeb(irq, MCF_MBAR + MCFUART_BASE2 + MCFUART_UIVR); |
62 | mcf_setimr(mcf_getimr() & ~MCFSIM_IMR_UART2); | 62 | mcf_clrimr(MCFINTC_UART1); |
63 | } | 63 | } |
64 | } | 64 | } |
65 | 65 | ||
@@ -81,13 +81,13 @@ void mcf_settimericr(unsigned int timer, unsigned int level) | |||
81 | 81 | ||
82 | if (timer <= 2) { | 82 | if (timer <= 2) { |
83 | switch (timer) { | 83 | switch (timer) { |
84 | case 2: icr = MCFSIM_TIMER2ICR; imr = MCFSIM_IMR_TIMER2; break; | 84 | case 2: icr = MCFSIM_TIMER2ICR; imr = MCFINTC_TIMER2; break; |
85 | default: icr = MCFSIM_TIMER1ICR; imr = MCFSIM_IMR_TIMER1; break; | 85 | default: icr = MCFSIM_TIMER1ICR; imr = MCFINTC_TIMER1; break; |
86 | } | 86 | } |
87 | 87 | ||
88 | icrp = (volatile unsigned char *) (MCF_MBAR + icr); | 88 | icrp = (volatile unsigned char *) (MCF_MBAR + icr); |
89 | *icrp = MCFSIM_ICR_AUTOVEC | (level << 2) | MCFSIM_ICR_PRI3; | 89 | *icrp = MCFSIM_ICR_AUTOVEC | (level << 2) | MCFSIM_ICR_PRI3; |
90 | mcf_setimr(mcf_getimr() & ~imr); | 90 | mcf_clrimr(imr); |
91 | } | 91 | } |
92 | } | 92 | } |
93 | 93 | ||
@@ -106,8 +106,6 @@ void m5407_cpu_reset(void) | |||
106 | 106 | ||
107 | void __init config_BSP(char *commandp, int size) | 107 | void __init config_BSP(char *commandp, int size) |
108 | { | 108 | { |
109 | mcf_setimr(MCFSIM_IMR_MASKALL); | ||
110 | |||
111 | #if defined(CONFIG_CLEOPATRA) | 109 | #if defined(CONFIG_CLEOPATRA) |
112 | /* Different timer setup - to prevent device clash */ | 110 | /* Different timer setup - to prevent device clash */ |
113 | mcf_timervector = 30; | 111 | mcf_timervector = 30; |
diff --git a/arch/m68knommu/platform/coldfire/intc.c b/arch/m68knommu/platform/coldfire/intc.c index f7a61346ee25..88bffac50c67 100644 --- a/arch/m68knommu/platform/coldfire/intc.c +++ b/arch/m68knommu/platform/coldfire/intc.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * intc.c | 2 | * intc.c -- support for the old ColdFire interrupt controller |
3 | * | 3 | * |
4 | * (C) Copyright 2009, Greg Ungerer <gerg@snapgear.com> | 4 | * (C) Copyright 2009, Greg Ungerer <gerg@snapgear.com> |
5 | * | 5 | * |
@@ -27,6 +27,62 @@ | |||
27 | #define EIRQ7 31 | 27 | #define EIRQ7 31 |
28 | 28 | ||
29 | /* | 29 | /* |
30 | * In the early version 2 core ColdFire parts the IMR register was 16 bits | ||
31 | * in size. Version 3 (and later version 2) core parts have a 32 bit | ||
32 | * sized IMR register. Provide some size independant methods to access the | ||
33 | * IMR register. | ||
34 | */ | ||
35 | #ifdef MCFSIM_IMR_IS_16BITS | ||
36 | |||
37 | void mcf_setimr(int index) | ||
38 | { | ||
39 | u16 imr; | ||
40 | imr = __raw_readw(MCF_MBAR + MCFSIM_IMR); | ||
41 | __raw_writew(imr | (0x1 << index), MCF_MBAR + MCFSIM_IMR); | ||
42 | } | ||
43 | |||
44 | void mcf_clrimr(int index) | ||
45 | { | ||
46 | u16 imr; | ||
47 | imr = __raw_readw(MCF_MBAR + MCFSIM_IMR); | ||
48 | __raw_writew(imr & ~(0x1 << index), MCF_MBAR + MCFSIM_IMR); | ||
49 | } | ||
50 | |||
51 | void mcf_maskimr(unsigned int mask) | ||
52 | { | ||
53 | u16 imr; | ||
54 | imr = __raw_readw(MCF_MBAR + MCFSIM_IMR); | ||
55 | imr |= mask; | ||
56 | __raw_writew(imr, MCF_MBAR + MCFSIM_IMR); | ||
57 | } | ||
58 | |||
59 | #else | ||
60 | |||
61 | void mcf_setimr(int index) | ||
62 | { | ||
63 | u32 imr; | ||
64 | imr = __raw_readl(MCF_MBAR + MCFSIM_IMR); | ||
65 | __raw_writel(imr | (0x1 << index), MCF_MBAR + MCFSIM_IMR); | ||
66 | } | ||
67 | |||
68 | void mcf_clrimr(int index) | ||
69 | { | ||
70 | u32 imr; | ||
71 | imr = __raw_readl(MCF_MBAR + MCFSIM_IMR); | ||
72 | __raw_writel(imr & ~(0x1 << index), MCF_MBAR + MCFSIM_IMR); | ||
73 | } | ||
74 | |||
75 | void mcf_maskimr(unsigned int mask) | ||
76 | { | ||
77 | u32 imr; | ||
78 | imr = __raw_readl(MCF_MBAR + MCFSIM_IMR); | ||
79 | imr |= mask; | ||
80 | __raw_writel(imr, MCF_MBAR + MCFSIM_IMR); | ||
81 | } | ||
82 | |||
83 | #endif | ||
84 | |||
85 | /* | ||
30 | * Interrupts can be "vectored" on the ColdFire cores that support this old | 86 | * Interrupts can be "vectored" on the ColdFire cores that support this old |
31 | * interrupt controller. That is, the device raising the interrupt can also | 87 | * interrupt controller. That is, the device raising the interrupt can also |
32 | * supply the vector number to interrupt through. The AVR register of the | 88 | * supply the vector number to interrupt through. The AVR register of the |
@@ -70,6 +126,7 @@ void __init init_IRQ(void) | |||
70 | int irq; | 126 | int irq; |
71 | 127 | ||
72 | init_vectors(); | 128 | init_vectors(); |
129 | mcf_maskimr(0xffffffff); | ||
73 | 130 | ||
74 | for (irq = 0; (irq < NR_IRQS); irq++) { | 131 | for (irq = 0; (irq < NR_IRQS); irq++) { |
75 | irq_desc[irq].status = IRQ_DISABLED; | 132 | irq_desc[irq].status = IRQ_DISABLED; |