diff options
Diffstat (limited to 'arch/m68knommu/platform/523x/config.c')
-rw-r--r-- | arch/m68knommu/platform/523x/config.c | 66 |
1 files changed, 9 insertions, 57 deletions
diff --git a/arch/m68knommu/platform/523x/config.c b/arch/m68knommu/platform/523x/config.c index 961fefebca14..6ba84f2aa397 100644 --- a/arch/m68knommu/platform/523x/config.c +++ b/arch/m68knommu/platform/523x/config.c | |||
@@ -82,66 +82,20 @@ static struct platform_device *m523x_devices[] __initdata = { | |||
82 | 82 | ||
83 | /***************************************************************************/ | 83 | /***************************************************************************/ |
84 | 84 | ||
85 | #define INTC0 (MCF_MBAR + MCFICM_INTC0) | ||
86 | |||
87 | static void __init m523x_uart_init_line(int line, int irq) | ||
88 | { | ||
89 | u32 imr; | ||
90 | |||
91 | if ((line < 0) || (line > 2)) | ||
92 | return; | ||
93 | |||
94 | writeb(0x30+line, (INTC0 + MCFINTC_ICR0 + MCFINT_UART0 + line)); | ||
95 | |||
96 | imr = readl(INTC0 + MCFINTC_IMRL); | ||
97 | imr &= ~((1 << (irq - MCFINT_VECBASE)) | 1); | ||
98 | writel(imr, INTC0 + MCFINTC_IMRL); | ||
99 | } | ||
100 | |||
101 | static void __init m523x_uarts_init(void) | ||
102 | { | ||
103 | const int nrlines = ARRAY_SIZE(m523x_uart_platform); | ||
104 | int line; | ||
105 | |||
106 | for (line = 0; (line < nrlines); line++) | ||
107 | m523x_uart_init_line(line, m523x_uart_platform[line].irq); | ||
108 | } | ||
109 | |||
110 | /***************************************************************************/ | ||
111 | |||
112 | static void __init m523x_fec_init(void) | 85 | static void __init m523x_fec_init(void) |
113 | { | 86 | { |
114 | u32 imr; | 87 | u16 par; |
115 | 88 | u8 v; | |
116 | /* Unmask FEC interrupts at ColdFire interrupt controller */ | 89 | |
117 | writeb(0x28, MCF_IPSBAR + MCFICM_INTC0 + MCFINTC_ICR0 + 23); | 90 | /* Set multi-function pins to ethernet use */ |
118 | writeb(0x27, MCF_IPSBAR + MCFICM_INTC0 + MCFINTC_ICR0 + 27); | 91 | par = readw(MCF_IPSBAR + 0x100082); |
119 | writeb(0x26, MCF_IPSBAR + MCFICM_INTC0 + MCFINTC_ICR0 + 29); | 92 | writew(par | 0xf00, MCF_IPSBAR + 0x100082); |
120 | 93 | v = readb(MCF_IPSBAR + 0x100078); | |
121 | imr = readl(MCF_IPSBAR + MCFICM_INTC0 + MCFINTC_IMRH); | 94 | writeb(v | 0xc0, MCF_IPSBAR + 0x100078); |
122 | imr &= ~0xf; | ||
123 | writel(imr, MCF_IPSBAR + MCFICM_INTC0 + MCFINTC_IMRH); | ||
124 | imr = readl(MCF_IPSBAR + MCFICM_INTC0 + MCFINTC_IMRL); | ||
125 | imr &= ~0xff800001; | ||
126 | writel(imr, MCF_IPSBAR + MCFICM_INTC0 + MCFINTC_IMRL); | ||
127 | } | ||
128 | |||
129 | /***************************************************************************/ | ||
130 | |||
131 | void mcf_disableall(void) | ||
132 | { | ||
133 | *((volatile unsigned long *) (MCF_IPSBAR + MCFICM_INTC0 + MCFINTC_IMRH)) = 0xffffffff; | ||
134 | *((volatile unsigned long *) (MCF_IPSBAR + MCFICM_INTC0 + MCFINTC_IMRL)) = 0xffffffff; | ||
135 | } | 95 | } |
136 | 96 | ||
137 | /***************************************************************************/ | 97 | /***************************************************************************/ |
138 | 98 | ||
139 | void mcf_autovector(unsigned int vec) | ||
140 | { | ||
141 | /* Everything is auto-vectored on the 523x */ | ||
142 | } | ||
143 | /***************************************************************************/ | ||
144 | |||
145 | static void m523x_cpu_reset(void) | 99 | static void m523x_cpu_reset(void) |
146 | { | 100 | { |
147 | local_irq_disable(); | 101 | local_irq_disable(); |
@@ -152,16 +106,14 @@ static void m523x_cpu_reset(void) | |||
152 | 106 | ||
153 | void __init config_BSP(char *commandp, int size) | 107 | void __init config_BSP(char *commandp, int size) |
154 | { | 108 | { |
155 | mcf_disableall(); | ||
156 | mach_reset = m523x_cpu_reset; | 109 | mach_reset = m523x_cpu_reset; |
157 | m523x_uarts_init(); | ||
158 | m523x_fec_init(); | ||
159 | } | 110 | } |
160 | 111 | ||
161 | /***************************************************************************/ | 112 | /***************************************************************************/ |
162 | 113 | ||
163 | static int __init init_BSP(void) | 114 | static int __init init_BSP(void) |
164 | { | 115 | { |
116 | m523x_fec_init(); | ||
165 | platform_add_devices(m523x_devices, ARRAY_SIZE(m523x_devices)); | 117 | platform_add_devices(m523x_devices, ARRAY_SIZE(m523x_devices)); |
166 | return 0; | 118 | return 0; |
167 | } | 119 | } |