diff options
author | Paul Mundt <lethal@linux-sh.org> | 2011-01-13 01:06:28 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2011-01-13 01:06:28 -0500 |
commit | f43dc23d5ea91fca257be02138a255f02d98e806 (patch) | |
tree | b29722f6e965316e90ac97abf79923ced250dc21 /arch/sh/kernel/cpu/sh4a/setup-sh7785.c | |
parent | f8e53553f452dcbf67cb89c8cba63a1cd6eb4cc0 (diff) | |
parent | 4162cf64973df51fc885825bc9ca4d055891c49f (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 into common/serial-rework
Conflicts:
arch/sh/kernel/cpu/sh2/setup-sh7619.c
arch/sh/kernel/cpu/sh2a/setup-mxg.c
arch/sh/kernel/cpu/sh2a/setup-sh7201.c
arch/sh/kernel/cpu/sh2a/setup-sh7203.c
arch/sh/kernel/cpu/sh2a/setup-sh7206.c
arch/sh/kernel/cpu/sh3/setup-sh7705.c
arch/sh/kernel/cpu/sh3/setup-sh770x.c
arch/sh/kernel/cpu/sh3/setup-sh7710.c
arch/sh/kernel/cpu/sh3/setup-sh7720.c
arch/sh/kernel/cpu/sh4/setup-sh4-202.c
arch/sh/kernel/cpu/sh4/setup-sh7750.c
arch/sh/kernel/cpu/sh4/setup-sh7760.c
arch/sh/kernel/cpu/sh4a/setup-sh7343.c
arch/sh/kernel/cpu/sh4a/setup-sh7366.c
arch/sh/kernel/cpu/sh4a/setup-sh7722.c
arch/sh/kernel/cpu/sh4a/setup-sh7723.c
arch/sh/kernel/cpu/sh4a/setup-sh7724.c
arch/sh/kernel/cpu/sh4a/setup-sh7763.c
arch/sh/kernel/cpu/sh4a/setup-sh7770.c
arch/sh/kernel/cpu/sh4a/setup-sh7780.c
arch/sh/kernel/cpu/sh4a/setup-sh7785.c
arch/sh/kernel/cpu/sh4a/setup-sh7786.c
arch/sh/kernel/cpu/sh4a/setup-shx3.c
arch/sh/kernel/cpu/sh5/setup-sh5.c
drivers/serial/sh-sci.c
drivers/serial/sh-sci.h
include/linux/serial_sci.h
Diffstat (limited to 'arch/sh/kernel/cpu/sh4a/setup-sh7785.c')
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/setup-sh7785.c | 329 |
1 files changed, 248 insertions, 81 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c index 3ae2e2071009..18d8fc136fb2 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c | |||
@@ -13,20 +13,123 @@ | |||
13 | #include <linux/serial_sci.h> | 13 | #include <linux/serial_sci.h> |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
16 | #include <linux/sh_dma.h> | ||
16 | #include <linux/sh_timer.h> | 17 | #include <linux/sh_timer.h> |
18 | |||
17 | #include <asm/mmzone.h> | 19 | #include <asm/mmzone.h> |
18 | 20 | ||
21 | #include <cpu/dma-register.h> | ||
22 | |||
23 | static struct plat_sci_port scif0_platform_data = { | ||
24 | .mapbase = 0xffea0000, | ||
25 | .flags = UPF_BOOT_AUTOCONF, | ||
26 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1, | ||
27 | .scbrr_algo_id = SCBRR_ALGO_1, | ||
28 | .type = PORT_SCIF, | ||
29 | .irqs = { 40, 40, 40, 40 }, | ||
30 | }; | ||
31 | |||
32 | static struct platform_device scif0_device = { | ||
33 | .name = "sh-sci", | ||
34 | .id = 0, | ||
35 | .dev = { | ||
36 | .platform_data = &scif0_platform_data, | ||
37 | }, | ||
38 | }; | ||
39 | |||
40 | static struct plat_sci_port scif1_platform_data = { | ||
41 | .mapbase = 0xffeb0000, | ||
42 | .flags = UPF_BOOT_AUTOCONF, | ||
43 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1, | ||
44 | .scbrr_algo_id = SCBRR_ALGO_1, | ||
45 | .type = PORT_SCIF, | ||
46 | .irqs = { 44, 44, 44, 44 }, | ||
47 | }; | ||
48 | |||
49 | static struct platform_device scif1_device = { | ||
50 | .name = "sh-sci", | ||
51 | .id = 1, | ||
52 | .dev = { | ||
53 | .platform_data = &scif1_platform_data, | ||
54 | }, | ||
55 | }; | ||
56 | |||
57 | static struct plat_sci_port scif2_platform_data = { | ||
58 | .mapbase = 0xffec0000, | ||
59 | .flags = UPF_BOOT_AUTOCONF, | ||
60 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1, | ||
61 | .scbrr_algo_id = SCBRR_ALGO_1, | ||
62 | .type = PORT_SCIF, | ||
63 | .irqs = { 60, 60, 60, 60 }, | ||
64 | }; | ||
65 | |||
66 | static struct platform_device scif2_device = { | ||
67 | .name = "sh-sci", | ||
68 | .id = 2, | ||
69 | .dev = { | ||
70 | .platform_data = &scif2_platform_data, | ||
71 | }, | ||
72 | }; | ||
73 | |||
74 | static struct plat_sci_port scif3_platform_data = { | ||
75 | .mapbase = 0xffed0000, | ||
76 | .flags = UPF_BOOT_AUTOCONF, | ||
77 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1, | ||
78 | .scbrr_algo_id = SCBRR_ALGO_1, | ||
79 | .type = PORT_SCIF, | ||
80 | .irqs = { 61, 61, 61, 61 }, | ||
81 | }; | ||
82 | |||
83 | static struct platform_device scif3_device = { | ||
84 | .name = "sh-sci", | ||
85 | .id = 3, | ||
86 | .dev = { | ||
87 | .platform_data = &scif3_platform_data, | ||
88 | }, | ||
89 | }; | ||
90 | |||
91 | static struct plat_sci_port scif4_platform_data = { | ||
92 | .mapbase = 0xffee0000, | ||
93 | .flags = UPF_BOOT_AUTOCONF, | ||
94 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1, | ||
95 | .scbrr_algo_id = SCBRR_ALGO_1, | ||
96 | .type = PORT_SCIF, | ||
97 | .irqs = { 62, 62, 62, 62 }, | ||
98 | }; | ||
99 | |||
100 | static struct platform_device scif4_device = { | ||
101 | .name = "sh-sci", | ||
102 | .id = 4, | ||
103 | .dev = { | ||
104 | .platform_data = &scif4_platform_data, | ||
105 | }, | ||
106 | }; | ||
107 | |||
108 | static struct plat_sci_port scif5_platform_data = { | ||
109 | .mapbase = 0xffef0000, | ||
110 | .flags = UPF_BOOT_AUTOCONF, | ||
111 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1, | ||
112 | .scbrr_algo_id = SCBRR_ALGO_1, | ||
113 | .type = PORT_SCIF, | ||
114 | .irqs = { 63, 63, 63, 63 }, | ||
115 | }; | ||
116 | |||
117 | static struct platform_device scif5_device = { | ||
118 | .name = "sh-sci", | ||
119 | .id = 5, | ||
120 | .dev = { | ||
121 | .platform_data = &scif5_platform_data, | ||
122 | }, | ||
123 | }; | ||
124 | |||
19 | static struct sh_timer_config tmu0_platform_data = { | 125 | static struct sh_timer_config tmu0_platform_data = { |
20 | .name = "TMU0", | ||
21 | .channel_offset = 0x04, | 126 | .channel_offset = 0x04, |
22 | .timer_bit = 0, | 127 | .timer_bit = 0, |
23 | .clk = "tmu012_fck", | ||
24 | .clockevent_rating = 200, | 128 | .clockevent_rating = 200, |
25 | }; | 129 | }; |
26 | 130 | ||
27 | static struct resource tmu0_resources[] = { | 131 | static struct resource tmu0_resources[] = { |
28 | [0] = { | 132 | [0] = { |
29 | .name = "TMU0", | ||
30 | .start = 0xffd80008, | 133 | .start = 0xffd80008, |
31 | .end = 0xffd80013, | 134 | .end = 0xffd80013, |
32 | .flags = IORESOURCE_MEM, | 135 | .flags = IORESOURCE_MEM, |
@@ -48,16 +151,13 @@ static struct platform_device tmu0_device = { | |||
48 | }; | 151 | }; |
49 | 152 | ||
50 | static struct sh_timer_config tmu1_platform_data = { | 153 | static struct sh_timer_config tmu1_platform_data = { |
51 | .name = "TMU1", | ||
52 | .channel_offset = 0x10, | 154 | .channel_offset = 0x10, |
53 | .timer_bit = 1, | 155 | .timer_bit = 1, |
54 | .clk = "tmu012_fck", | ||
55 | .clocksource_rating = 200, | 156 | .clocksource_rating = 200, |
56 | }; | 157 | }; |
57 | 158 | ||
58 | static struct resource tmu1_resources[] = { | 159 | static struct resource tmu1_resources[] = { |
59 | [0] = { | 160 | [0] = { |
60 | .name = "TMU1", | ||
61 | .start = 0xffd80014, | 161 | .start = 0xffd80014, |
62 | .end = 0xffd8001f, | 162 | .end = 0xffd8001f, |
63 | .flags = IORESOURCE_MEM, | 163 | .flags = IORESOURCE_MEM, |
@@ -79,15 +179,12 @@ static struct platform_device tmu1_device = { | |||
79 | }; | 179 | }; |
80 | 180 | ||
81 | static struct sh_timer_config tmu2_platform_data = { | 181 | static struct sh_timer_config tmu2_platform_data = { |
82 | .name = "TMU2", | ||
83 | .channel_offset = 0x1c, | 182 | .channel_offset = 0x1c, |
84 | .timer_bit = 2, | 183 | .timer_bit = 2, |
85 | .clk = "tmu012_fck", | ||
86 | }; | 184 | }; |
87 | 185 | ||
88 | static struct resource tmu2_resources[] = { | 186 | static struct resource tmu2_resources[] = { |
89 | [0] = { | 187 | [0] = { |
90 | .name = "TMU2", | ||
91 | .start = 0xffd80020, | 188 | .start = 0xffd80020, |
92 | .end = 0xffd8002f, | 189 | .end = 0xffd8002f, |
93 | .flags = IORESOURCE_MEM, | 190 | .flags = IORESOURCE_MEM, |
@@ -109,15 +206,12 @@ static struct platform_device tmu2_device = { | |||
109 | }; | 206 | }; |
110 | 207 | ||
111 | static struct sh_timer_config tmu3_platform_data = { | 208 | static struct sh_timer_config tmu3_platform_data = { |
112 | .name = "TMU3", | ||
113 | .channel_offset = 0x04, | 209 | .channel_offset = 0x04, |
114 | .timer_bit = 0, | 210 | .timer_bit = 0, |
115 | .clk = "tmu345_fck", | ||
116 | }; | 211 | }; |
117 | 212 | ||
118 | static struct resource tmu3_resources[] = { | 213 | static struct resource tmu3_resources[] = { |
119 | [0] = { | 214 | [0] = { |
120 | .name = "TMU3", | ||
121 | .start = 0xffdc0008, | 215 | .start = 0xffdc0008, |
122 | .end = 0xffdc0013, | 216 | .end = 0xffdc0013, |
123 | .flags = IORESOURCE_MEM, | 217 | .flags = IORESOURCE_MEM, |
@@ -139,15 +233,12 @@ static struct platform_device tmu3_device = { | |||
139 | }; | 233 | }; |
140 | 234 | ||
141 | static struct sh_timer_config tmu4_platform_data = { | 235 | static struct sh_timer_config tmu4_platform_data = { |
142 | .name = "TMU4", | ||
143 | .channel_offset = 0x10, | 236 | .channel_offset = 0x10, |
144 | .timer_bit = 1, | 237 | .timer_bit = 1, |
145 | .clk = "tmu345_fck", | ||
146 | }; | 238 | }; |
147 | 239 | ||
148 | static struct resource tmu4_resources[] = { | 240 | static struct resource tmu4_resources[] = { |
149 | [0] = { | 241 | [0] = { |
150 | .name = "TMU4", | ||
151 | .start = 0xffdc0014, | 242 | .start = 0xffdc0014, |
152 | .end = 0xffdc001f, | 243 | .end = 0xffdc001f, |
153 | .flags = IORESOURCE_MEM, | 244 | .flags = IORESOURCE_MEM, |
@@ -169,15 +260,12 @@ static struct platform_device tmu4_device = { | |||
169 | }; | 260 | }; |
170 | 261 | ||
171 | static struct sh_timer_config tmu5_platform_data = { | 262 | static struct sh_timer_config tmu5_platform_data = { |
172 | .name = "TMU5", | ||
173 | .channel_offset = 0x1c, | 263 | .channel_offset = 0x1c, |
174 | .timer_bit = 2, | 264 | .timer_bit = 2, |
175 | .clk = "tmu345_fck", | ||
176 | }; | 265 | }; |
177 | 266 | ||
178 | static struct resource tmu5_resources[] = { | 267 | static struct resource tmu5_resources[] = { |
179 | [0] = { | 268 | [0] = { |
180 | .name = "TMU5", | ||
181 | .start = 0xffdc0020, | 269 | .start = 0xffdc0020, |
182 | .end = 0xffdc002b, | 270 | .end = 0xffdc002b, |
183 | .flags = IORESOURCE_MEM, | 271 | .flags = IORESOURCE_MEM, |
@@ -198,76 +286,149 @@ static struct platform_device tmu5_device = { | |||
198 | .num_resources = ARRAY_SIZE(tmu5_resources), | 286 | .num_resources = ARRAY_SIZE(tmu5_resources), |
199 | }; | 287 | }; |
200 | 288 | ||
201 | static struct plat_sci_port sci_platform_data[] = { | 289 | /* DMA */ |
290 | static const struct sh_dmae_channel sh7785_dmae0_channels[] = { | ||
202 | { | 291 | { |
203 | .mapbase = 0xffea0000, | 292 | .offset = 0, |
204 | .flags = UPF_BOOT_AUTOCONF, | 293 | .dmars = 0, |
205 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1, | 294 | .dmars_bit = 0, |
206 | .scbrr_algo_id = SCBRR_ALGO_1, | ||
207 | .type = PORT_SCIF, | ||
208 | .irqs = { 40, 40, 40, 40 }, | ||
209 | .clk = "scif_fck", | ||
210 | }, { | 295 | }, { |
211 | .mapbase = 0xffeb0000, | 296 | .offset = 0x10, |
212 | .flags = UPF_BOOT_AUTOCONF, | 297 | .dmars = 0, |
213 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1, | 298 | .dmars_bit = 8, |
214 | .scbrr_algo_id = SCBRR_ALGO_1, | ||
215 | .type = PORT_SCIF, | ||
216 | .irqs = { 44, 44, 44, 44 }, | ||
217 | .clk = "scif_fck", | ||
218 | }, { | 299 | }, { |
219 | .mapbase = 0xffec0000, | 300 | .offset = 0x20, |
220 | .flags = UPF_BOOT_AUTOCONF, | 301 | .dmars = 4, |
221 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1, | 302 | .dmars_bit = 0, |
222 | .scbrr_algo_id = SCBRR_ALGO_1, | ||
223 | .type = PORT_SCIF, | ||
224 | .irqs = { 60, 60, 60, 60 }, | ||
225 | .clk = "scif_fck", | ||
226 | }, { | 303 | }, { |
227 | .mapbase = 0xffed0000, | 304 | .offset = 0x30, |
228 | .flags = UPF_BOOT_AUTOCONF, | 305 | .dmars = 4, |
229 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1, | 306 | .dmars_bit = 8, |
230 | .scbrr_algo_id = SCBRR_ALGO_1, | ||
231 | .type = PORT_SCIF, | ||
232 | .irqs = { 61, 61, 61, 61 }, | ||
233 | .clk = "scif_fck", | ||
234 | }, { | 307 | }, { |
235 | .mapbase = 0xffee0000, | 308 | .offset = 0x50, |
236 | .flags = UPF_BOOT_AUTOCONF, | 309 | .dmars = 8, |
237 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1, | 310 | .dmars_bit = 0, |
238 | .scbrr_algo_id = SCBRR_ALGO_1, | ||
239 | .type = PORT_SCIF, | ||
240 | .irqs = { 62, 62, 62, 62 }, | ||
241 | .clk = "scif_fck", | ||
242 | }, { | 311 | }, { |
243 | .mapbase = 0xffef0000, | 312 | .offset = 0x60, |
244 | .flags = UPF_BOOT_AUTOCONF, | 313 | .dmars = 8, |
245 | .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_CKE1, | 314 | .dmars_bit = 8, |
246 | .scbrr_algo_id = SCBRR_ALGO_1, | 315 | } |
247 | .type = PORT_SCIF, | 316 | }; |
248 | .irqs = { 63, 63, 63, 63 }, | 317 | |
249 | .clk = "scif_fck", | 318 | static const struct sh_dmae_channel sh7785_dmae1_channels[] = { |
319 | { | ||
320 | .offset = 0, | ||
250 | }, { | 321 | }, { |
251 | .flags = 0, | 322 | .offset = 0x10, |
323 | }, { | ||
324 | .offset = 0x20, | ||
325 | }, { | ||
326 | .offset = 0x30, | ||
327 | }, { | ||
328 | .offset = 0x50, | ||
329 | }, { | ||
330 | .offset = 0x60, | ||
252 | } | 331 | } |
253 | }; | 332 | }; |
254 | 333 | ||
255 | static struct platform_device sci_device = { | 334 | static const unsigned int ts_shift[] = TS_SHIFT; |
256 | .name = "sh-sci", | 335 | |
257 | .id = -1, | 336 | static struct sh_dmae_pdata dma0_platform_data = { |
337 | .channel = sh7785_dmae0_channels, | ||
338 | .channel_num = ARRAY_SIZE(sh7785_dmae0_channels), | ||
339 | .ts_low_shift = CHCR_TS_LOW_SHIFT, | ||
340 | .ts_low_mask = CHCR_TS_LOW_MASK, | ||
341 | .ts_high_shift = CHCR_TS_HIGH_SHIFT, | ||
342 | .ts_high_mask = CHCR_TS_HIGH_MASK, | ||
343 | .ts_shift = ts_shift, | ||
344 | .ts_shift_num = ARRAY_SIZE(ts_shift), | ||
345 | .dmaor_init = DMAOR_INIT, | ||
346 | }; | ||
347 | |||
348 | static struct sh_dmae_pdata dma1_platform_data = { | ||
349 | .channel = sh7785_dmae1_channels, | ||
350 | .channel_num = ARRAY_SIZE(sh7785_dmae1_channels), | ||
351 | .ts_low_shift = CHCR_TS_LOW_SHIFT, | ||
352 | .ts_low_mask = CHCR_TS_LOW_MASK, | ||
353 | .ts_high_shift = CHCR_TS_HIGH_SHIFT, | ||
354 | .ts_high_mask = CHCR_TS_HIGH_MASK, | ||
355 | .ts_shift = ts_shift, | ||
356 | .ts_shift_num = ARRAY_SIZE(ts_shift), | ||
357 | .dmaor_init = DMAOR_INIT, | ||
358 | }; | ||
359 | |||
360 | static struct resource sh7785_dmae0_resources[] = { | ||
361 | [0] = { | ||
362 | /* Channel registers and DMAOR */ | ||
363 | .start = 0xfc808020, | ||
364 | .end = 0xfc80808f, | ||
365 | .flags = IORESOURCE_MEM, | ||
366 | }, | ||
367 | [1] = { | ||
368 | /* DMARSx */ | ||
369 | .start = 0xfc809000, | ||
370 | .end = 0xfc80900b, | ||
371 | .flags = IORESOURCE_MEM, | ||
372 | }, | ||
373 | { | ||
374 | /* Real DMA error IRQ is 39, and channel IRQs are 33-38 */ | ||
375 | .start = 33, | ||
376 | .end = 33, | ||
377 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, | ||
378 | }, | ||
379 | }; | ||
380 | |||
381 | static struct resource sh7785_dmae1_resources[] = { | ||
382 | [0] = { | ||
383 | /* Channel registers and DMAOR */ | ||
384 | .start = 0xfcc08020, | ||
385 | .end = 0xfcc0808f, | ||
386 | .flags = IORESOURCE_MEM, | ||
387 | }, | ||
388 | /* DMAC1 has no DMARS */ | ||
389 | { | ||
390 | /* Real DMA error IRQ is 58, and channel IRQs are 52-57 */ | ||
391 | .start = 52, | ||
392 | .end = 52, | ||
393 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE, | ||
394 | }, | ||
395 | }; | ||
396 | |||
397 | static struct platform_device dma0_device = { | ||
398 | .name = "sh-dma-engine", | ||
399 | .id = 0, | ||
400 | .resource = sh7785_dmae0_resources, | ||
401 | .num_resources = ARRAY_SIZE(sh7785_dmae0_resources), | ||
402 | .dev = { | ||
403 | .platform_data = &dma0_platform_data, | ||
404 | }, | ||
405 | }; | ||
406 | |||
407 | static struct platform_device dma1_device = { | ||
408 | .name = "sh-dma-engine", | ||
409 | .id = 1, | ||
410 | .resource = sh7785_dmae1_resources, | ||
411 | .num_resources = ARRAY_SIZE(sh7785_dmae1_resources), | ||
258 | .dev = { | 412 | .dev = { |
259 | .platform_data = sci_platform_data, | 413 | .platform_data = &dma1_platform_data, |
260 | }, | 414 | }, |
261 | }; | 415 | }; |
262 | 416 | ||
263 | static struct platform_device *sh7785_devices[] __initdata = { | 417 | static struct platform_device *sh7785_devices[] __initdata = { |
418 | &scif0_device, | ||
419 | &scif1_device, | ||
420 | &scif2_device, | ||
421 | &scif3_device, | ||
422 | &scif4_device, | ||
423 | &scif5_device, | ||
264 | &tmu0_device, | 424 | &tmu0_device, |
265 | &tmu1_device, | 425 | &tmu1_device, |
266 | &tmu2_device, | 426 | &tmu2_device, |
267 | &tmu3_device, | 427 | &tmu3_device, |
268 | &tmu4_device, | 428 | &tmu4_device, |
269 | &tmu5_device, | 429 | &tmu5_device, |
270 | &sci_device, | 430 | &dma0_device, |
431 | &dma1_device, | ||
271 | }; | 432 | }; |
272 | 433 | ||
273 | static int __init sh7785_devices_setup(void) | 434 | static int __init sh7785_devices_setup(void) |
@@ -275,9 +436,15 @@ static int __init sh7785_devices_setup(void) | |||
275 | return platform_add_devices(sh7785_devices, | 436 | return platform_add_devices(sh7785_devices, |
276 | ARRAY_SIZE(sh7785_devices)); | 437 | ARRAY_SIZE(sh7785_devices)); |
277 | } | 438 | } |
278 | __initcall(sh7785_devices_setup); | 439 | arch_initcall(sh7785_devices_setup); |
279 | 440 | ||
280 | static struct platform_device *sh7785_early_devices[] __initdata = { | 441 | static struct platform_device *sh7785_early_devices[] __initdata = { |
442 | &scif0_device, | ||
443 | &scif1_device, | ||
444 | &scif2_device, | ||
445 | &scif3_device, | ||
446 | &scif4_device, | ||
447 | &scif5_device, | ||
281 | &tmu0_device, | 448 | &tmu0_device, |
282 | &tmu1_device, | 449 | &tmu1_device, |
283 | &tmu2_device, | 450 | &tmu2_device, |
@@ -482,17 +649,17 @@ static DECLARE_INTC_DESC(intc_desc_irl4567, "sh7785-irl4567", vectors_irl4567, | |||
482 | void __init plat_irq_setup(void) | 649 | void __init plat_irq_setup(void) |
483 | { | 650 | { |
484 | /* disable IRQ3-0 + IRQ7-4 */ | 651 | /* disable IRQ3-0 + IRQ7-4 */ |
485 | ctrl_outl(0xff000000, INTC_INTMSK0); | 652 | __raw_writel(0xff000000, INTC_INTMSK0); |
486 | 653 | ||
487 | /* disable IRL3-0 + IRL7-4 */ | 654 | /* disable IRL3-0 + IRL7-4 */ |
488 | ctrl_outl(0xc0000000, INTC_INTMSK1); | 655 | __raw_writel(0xc0000000, INTC_INTMSK1); |
489 | ctrl_outl(0xfffefffe, INTC_INTMSK2); | 656 | __raw_writel(0xfffefffe, INTC_INTMSK2); |
490 | 657 | ||
491 | /* select IRL mode for IRL3-0 + IRL7-4 */ | 658 | /* select IRL mode for IRL3-0 + IRL7-4 */ |
492 | ctrl_outl(ctrl_inl(INTC_ICR0) & ~0x00c00000, INTC_ICR0); | 659 | __raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0); |
493 | 660 | ||
494 | /* disable holding function, ie enable "SH-4 Mode" */ | 661 | /* disable holding function, ie enable "SH-4 Mode" */ |
495 | ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00200000, INTC_ICR0); | 662 | __raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0); |
496 | 663 | ||
497 | register_intc_controller(&intc_desc); | 664 | register_intc_controller(&intc_desc); |
498 | } | 665 | } |
@@ -502,32 +669,32 @@ void __init plat_irq_setup_pins(int mode) | |||
502 | switch (mode) { | 669 | switch (mode) { |
503 | case IRQ_MODE_IRQ7654: | 670 | case IRQ_MODE_IRQ7654: |
504 | /* select IRQ mode for IRL7-4 */ | 671 | /* select IRQ mode for IRL7-4 */ |
505 | ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00400000, INTC_ICR0); | 672 | __raw_writel(__raw_readl(INTC_ICR0) | 0x00400000, INTC_ICR0); |
506 | register_intc_controller(&intc_desc_irq4567); | 673 | register_intc_controller(&intc_desc_irq4567); |
507 | break; | 674 | break; |
508 | case IRQ_MODE_IRQ3210: | 675 | case IRQ_MODE_IRQ3210: |
509 | /* select IRQ mode for IRL3-0 */ | 676 | /* select IRQ mode for IRL3-0 */ |
510 | ctrl_outl(ctrl_inl(INTC_ICR0) | 0x00800000, INTC_ICR0); | 677 | __raw_writel(__raw_readl(INTC_ICR0) | 0x00800000, INTC_ICR0); |
511 | register_intc_controller(&intc_desc_irq0123); | 678 | register_intc_controller(&intc_desc_irq0123); |
512 | break; | 679 | break; |
513 | case IRQ_MODE_IRL7654: | 680 | case IRQ_MODE_IRL7654: |
514 | /* enable IRL7-4 but don't provide any masking */ | 681 | /* enable IRL7-4 but don't provide any masking */ |
515 | ctrl_outl(0x40000000, INTC_INTMSKCLR1); | 682 | __raw_writel(0x40000000, INTC_INTMSKCLR1); |
516 | ctrl_outl(0x0000fffe, INTC_INTMSKCLR2); | 683 | __raw_writel(0x0000fffe, INTC_INTMSKCLR2); |
517 | break; | 684 | break; |
518 | case IRQ_MODE_IRL3210: | 685 | case IRQ_MODE_IRL3210: |
519 | /* enable IRL0-3 but don't provide any masking */ | 686 | /* enable IRL0-3 but don't provide any masking */ |
520 | ctrl_outl(0x80000000, INTC_INTMSKCLR1); | 687 | __raw_writel(0x80000000, INTC_INTMSKCLR1); |
521 | ctrl_outl(0xfffe0000, INTC_INTMSKCLR2); | 688 | __raw_writel(0xfffe0000, INTC_INTMSKCLR2); |
522 | break; | 689 | break; |
523 | case IRQ_MODE_IRL7654_MASK: | 690 | case IRQ_MODE_IRL7654_MASK: |
524 | /* enable IRL7-4 and mask using cpu intc controller */ | 691 | /* enable IRL7-4 and mask using cpu intc controller */ |
525 | ctrl_outl(0x40000000, INTC_INTMSKCLR1); | 692 | __raw_writel(0x40000000, INTC_INTMSKCLR1); |
526 | register_intc_controller(&intc_desc_irl4567); | 693 | register_intc_controller(&intc_desc_irl4567); |
527 | break; | 694 | break; |
528 | case IRQ_MODE_IRL3210_MASK: | 695 | case IRQ_MODE_IRL3210_MASK: |
529 | /* enable IRL0-3 and mask using cpu intc controller */ | 696 | /* enable IRL0-3 and mask using cpu intc controller */ |
530 | ctrl_outl(0x80000000, INTC_INTMSKCLR1); | 697 | __raw_writel(0x80000000, INTC_INTMSKCLR1); |
531 | register_intc_controller(&intc_desc_irl0123); | 698 | register_intc_controller(&intc_desc_irl0123); |
532 | break; | 699 | break; |
533 | default: | 700 | default: |