1 /*
2  * SH7757 Setup
3  *
4  * Copyright (C) 2009, 2011  Renesas Solutions Corp.
5  *
6  *  based on setup-sh7785.c : Copyright (C) 2007  Paul Mundt
7  *
8  * This file is subject to the terms and conditions of the GNU General Public
9  * License.  See the file "COPYING" in the main directory of this archive
10  * for more details.
11  */
12 #include <linux/platform_device.h>
13 #include <linux/init.h>
14 #include <linux/serial.h>
15 #include <linux/serial_sci.h>
16 #include <linux/io.h>
17 #include <linux/mm.h>
18 #include <linux/sh_timer.h>
19 #include <linux/sh_dma.h>
20 
21 #include <cpu/dma-register.h>
22 #include <cpu/sh7757.h>
23 
24 static struct plat_sci_port scif2_platform_data = {
25 	.mapbase	= 0xfe4b0000,		/* SCIF2 */
26 	.flags		= UPF_BOOT_AUTOCONF,
27 	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,
28 	.scbrr_algo_id	= SCBRR_ALGO_2,
29 	.type		= PORT_SCIF,
30 	.irqs		= { 40, 40, 40, 40 },
31 };
32 
33 static struct platform_device scif2_device = {
34 	.name		= "sh-sci",
35 	.id		= 0,
36 	.dev		= {
37 		.platform_data	= &scif2_platform_data,
38 	},
39 };
40 
41 static struct plat_sci_port scif3_platform_data = {
42 	.mapbase	= 0xfe4c0000,		/* SCIF3 */
43 	.flags		= UPF_BOOT_AUTOCONF,
44 	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,
45 	.scbrr_algo_id	= SCBRR_ALGO_2,
46 	.type		= PORT_SCIF,
47 	.irqs		= { 76, 76, 76, 76 },
48 };
49 
50 static struct platform_device scif3_device = {
51 	.name		= "sh-sci",
52 	.id		= 1,
53 	.dev		= {
54 		.platform_data	= &scif3_platform_data,
55 	},
56 };
57 
58 static struct plat_sci_port scif4_platform_data = {
59 	.mapbase	= 0xfe4d0000,		/* SCIF4 */
60 	.flags		= UPF_BOOT_AUTOCONF,
61 	.scscr		= SCSCR_RE | SCSCR_TE | SCSCR_REIE,
62 	.scbrr_algo_id	= SCBRR_ALGO_2,
63 	.type		= PORT_SCIF,
64 	.irqs		= { 104, 104, 104, 104 },
65 };
66 
67 static struct platform_device scif4_device = {
68 	.name		= "sh-sci",
69 	.id		= 2,
70 	.dev		= {
71 		.platform_data	= &scif4_platform_data,
72 	},
73 };
74 
75 static struct sh_timer_config tmu0_platform_data = {
76 	.channel_offset = 0x04,
77 	.timer_bit = 0,
78 	.clockevent_rating = 200,
79 };
80 
81 static struct resource tmu0_resources[] = {
82 	[0] = {
83 		.start	= 0xfe430008,
84 		.end	= 0xfe430013,
85 		.flags	= IORESOURCE_MEM,
86 	},
87 	[1] = {
88 		.start	= 28,
89 		.flags	= IORESOURCE_IRQ,
90 	},
91 };
92 
93 static struct platform_device tmu0_device = {
94 	.name		= "sh_tmu",
95 	.id		= 0,
96 	.dev = {
97 		.platform_data	= &tmu0_platform_data,
98 	},
99 	.resource	= tmu0_resources,
100 	.num_resources	= ARRAY_SIZE(tmu0_resources),
101 };
102 
103 static struct sh_timer_config tmu1_platform_data = {
104 	.channel_offset = 0x10,
105 	.timer_bit = 1,
106 	.clocksource_rating = 200,
107 };
108 
109 static struct resource tmu1_resources[] = {
110 	[0] = {
111 		.start	= 0xfe430014,
112 		.end	= 0xfe43001f,
113 		.flags	= IORESOURCE_MEM,
114 	},
115 	[1] = {
116 		.start	= 29,
117 		.flags	= IORESOURCE_IRQ,
118 	},
119 };
120 
121 static struct platform_device tmu1_device = {
122 	.name		= "sh_tmu",
123 	.id		= 1,
124 	.dev = {
125 		.platform_data	= &tmu1_platform_data,
126 	},
127 	.resource	= tmu1_resources,
128 	.num_resources	= ARRAY_SIZE(tmu1_resources),
129 };
130 
131 static struct resource spi0_resources[] = {
132 	[0] = {
133 		.start	= 0xfe002000,
134 		.end	= 0xfe0020ff,
135 		.flags	= IORESOURCE_MEM,
136 	},
137 	[1] = {
138 		.start	= 86,
139 		.flags	= IORESOURCE_IRQ,
140 	},
141 };
142 
143 /* DMA */
144 static const struct sh_dmae_slave_config sh7757_dmae0_slaves[] = {
145 	{
146 		.slave_id	= SHDMA_SLAVE_SDHI_TX,
147 		.addr		= 0x1fe50030,
148 		.chcr		= SM_INC | 0x800 | 0x40000000 |
149 				  TS_INDEX2VAL(XMIT_SZ_16BIT),
150 		.mid_rid	= 0xc5,
151 	},
152 	{
153 		.slave_id	= SHDMA_SLAVE_SDHI_RX,
154 		.addr		= 0x1fe50030,
155 		.chcr		= DM_INC | 0x800 | 0x40000000 |
156 				  TS_INDEX2VAL(XMIT_SZ_16BIT),
157 		.mid_rid	= 0xc6,
158 	},
159 	{
160 		.slave_id	= SHDMA_SLAVE_MMCIF_TX,
161 		.addr		= 0x1fcb0034,
162 		.chcr		= SM_INC | 0x800 | 0x40000000 |
163 				  TS_INDEX2VAL(XMIT_SZ_32BIT),
164 		.mid_rid	= 0xd3,
165 	},
166 	{
167 		.slave_id	= SHDMA_SLAVE_MMCIF_RX,
168 		.addr		= 0x1fcb0034,
169 		.chcr		= DM_INC | 0x800 | 0x40000000 |
170 				  TS_INDEX2VAL(XMIT_SZ_32BIT),
171 		.mid_rid	= 0xd7,
172 	},
173 };
174 
175 static const struct sh_dmae_slave_config sh7757_dmae1_slaves[] = {
176 	{
177 		.slave_id	= SHDMA_SLAVE_SCIF2_TX,
178 		.addr		= 0x1f4b000c,
179 		.chcr		= SM_INC | 0x800 | 0x40000000 |
180 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
181 		.mid_rid	= 0x21,
182 	},
183 	{
184 		.slave_id	= SHDMA_SLAVE_SCIF2_RX,
185 		.addr		= 0x1f4b0014,
186 		.chcr		= SM_INC | 0x800 | 0x40000000 |
187 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
188 		.mid_rid	= 0x22,
189 	},
190 	{
191 		.slave_id	= SHDMA_SLAVE_SCIF3_TX,
192 		.addr		= 0x1f4c000c,
193 		.chcr		= SM_INC | 0x800 | 0x40000000 |
194 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
195 		.mid_rid	= 0x29,
196 	},
197 	{
198 		.slave_id	= SHDMA_SLAVE_SCIF3_RX,
199 		.addr		= 0x1f4c0014,
200 		.chcr		= SM_INC | 0x800 | 0x40000000 |
201 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
202 		.mid_rid	= 0x2a,
203 	},
204 	{
205 		.slave_id	= SHDMA_SLAVE_SCIF4_TX,
206 		.addr		= 0x1f4d000c,
207 		.chcr		= SM_INC | 0x800 | 0x40000000 |
208 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
209 		.mid_rid	= 0x41,
210 	},
211 	{
212 		.slave_id	= SHDMA_SLAVE_SCIF4_RX,
213 		.addr		= 0x1f4d0014,
214 		.chcr		= SM_INC | 0x800 | 0x40000000 |
215 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
216 		.mid_rid	= 0x42,
217 	},
218 };
219 
220 static const struct sh_dmae_slave_config sh7757_dmae2_slaves[] = {
221 	{
222 		.slave_id	= SHDMA_SLAVE_RIIC0_TX,
223 		.addr		= 0x1e500012,
224 		.chcr		= SM_INC | 0x800 | 0x40000000 |
225 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
226 		.mid_rid	= 0x21,
227 	},
228 	{
229 		.slave_id	= SHDMA_SLAVE_RIIC0_RX,
230 		.addr		= 0x1e500013,
231 		.chcr		= SM_INC | 0x800 | 0x40000000 |
232 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
233 		.mid_rid	= 0x22,
234 	},
235 	{
236 		.slave_id	= SHDMA_SLAVE_RIIC1_TX,
237 		.addr		= 0x1e510012,
238 		.chcr		= SM_INC | 0x800 | 0x40000000 |
239 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
240 		.mid_rid	= 0x29,
241 	},
242 	{
243 		.slave_id	= SHDMA_SLAVE_RIIC1_RX,
244 		.addr		= 0x1e510013,
245 		.chcr		= SM_INC | 0x800 | 0x40000000 |
246 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
247 		.mid_rid	= 0x2a,
248 	},
249 	{
250 		.slave_id	= SHDMA_SLAVE_RIIC2_TX,
251 		.addr		= 0x1e520012,
252 		.chcr		= SM_INC | 0x800 | 0x40000000 |
253 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
254 		.mid_rid	= 0xa1,
255 	},
256 	{
257 		.slave_id	= SHDMA_SLAVE_RIIC2_RX,
258 		.addr		= 0x1e520013,
259 		.chcr		= SM_INC | 0x800 | 0x40000000 |
260 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
261 		.mid_rid	= 0xa2,
262 	},
263 	{
264 		.slave_id	= SHDMA_SLAVE_RIIC3_TX,
265 		.addr		= 0x1e530012,
266 		.chcr		= SM_INC | 0x800 | 0x40000000 |
267 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
268 		.mid_rid	= 0xab,
269 	},
270 	{
271 		.slave_id	= SHDMA_SLAVE_RIIC3_RX,
272 		.addr		= 0x1e530013,
273 		.chcr		= SM_INC | 0x800 | 0x40000000 |
274 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
275 		.mid_rid	= 0xaf,
276 	},
277 	{
278 		.slave_id	= SHDMA_SLAVE_RIIC4_TX,
279 		.addr		= 0x1e540012,
280 		.chcr		= SM_INC | 0x800 | 0x40000000 |
281 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
282 		.mid_rid	= 0xc1,
283 	},
284 	{
285 		.slave_id	= SHDMA_SLAVE_RIIC4_RX,
286 		.addr		= 0x1e540013,
287 		.chcr		= SM_INC | 0x800 | 0x40000000 |
288 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
289 		.mid_rid	= 0xc2,
290 	},
291 };
292 
293 static const struct sh_dmae_slave_config sh7757_dmae3_slaves[] = {
294 	{
295 		.slave_id	= SHDMA_SLAVE_RIIC5_TX,
296 		.addr		= 0x1e550012,
297 		.chcr		= SM_INC | 0x800 | 0x40000000 |
298 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
299 		.mid_rid	= 0x21,
300 	},
301 	{
302 		.slave_id	= SHDMA_SLAVE_RIIC5_RX,
303 		.addr		= 0x1e550013,
304 		.chcr		= SM_INC | 0x800 | 0x40000000 |
305 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
306 		.mid_rid	= 0x22,
307 	},
308 	{
309 		.slave_id	= SHDMA_SLAVE_RIIC6_TX,
310 		.addr		= 0x1e560012,
311 		.chcr		= SM_INC | 0x800 | 0x40000000 |
312 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
313 		.mid_rid	= 0x29,
314 	},
315 	{
316 		.slave_id	= SHDMA_SLAVE_RIIC6_RX,
317 		.addr		= 0x1e560013,
318 		.chcr		= SM_INC | 0x800 | 0x40000000 |
319 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
320 		.mid_rid	= 0x2a,
321 	},
322 	{
323 		.slave_id	= SHDMA_SLAVE_RIIC7_TX,
324 		.addr		= 0x1e570012,
325 		.chcr		= SM_INC | 0x800 | 0x40000000 |
326 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
327 		.mid_rid	= 0x41,
328 	},
329 	{
330 		.slave_id	= SHDMA_SLAVE_RIIC7_RX,
331 		.addr		= 0x1e570013,
332 		.chcr		= SM_INC | 0x800 | 0x40000000 |
333 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
334 		.mid_rid	= 0x42,
335 	},
336 	{
337 		.slave_id	= SHDMA_SLAVE_RIIC8_TX,
338 		.addr		= 0x1e580012,
339 		.chcr		= SM_INC | 0x800 | 0x40000000 |
340 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
341 		.mid_rid	= 0x45,
342 	},
343 	{
344 		.slave_id	= SHDMA_SLAVE_RIIC8_RX,
345 		.addr		= 0x1e580013,
346 		.chcr		= SM_INC | 0x800 | 0x40000000 |
347 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
348 		.mid_rid	= 0x46,
349 	},
350 	{
351 		.slave_id	= SHDMA_SLAVE_RIIC9_TX,
352 		.addr		= 0x1e590012,
353 		.chcr		= SM_INC | 0x800 | 0x40000000 |
354 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
355 		.mid_rid	= 0x51,
356 	},
357 	{
358 		.slave_id	= SHDMA_SLAVE_RIIC9_RX,
359 		.addr		= 0x1e590013,
360 		.chcr		= SM_INC | 0x800 | 0x40000000 |
361 				  TS_INDEX2VAL(XMIT_SZ_8BIT),
362 		.mid_rid	= 0x52,
363 	},
364 };
365 
366 static const struct sh_dmae_channel sh7757_dmae_channels[] = {
367 	{
368 		.offset = 0,
369 		.dmars = 0,
370 		.dmars_bit = 0,
371 	}, {
372 		.offset = 0x10,
373 		.dmars = 0,
374 		.dmars_bit = 8,
375 	}, {
376 		.offset = 0x20,
377 		.dmars = 4,
378 		.dmars_bit = 0,
379 	}, {
380 		.offset = 0x30,
381 		.dmars = 4,
382 		.dmars_bit = 8,
383 	}, {
384 		.offset = 0x50,
385 		.dmars = 8,
386 		.dmars_bit = 0,
387 	}, {
388 		.offset = 0x60,
389 		.dmars = 8,
390 		.dmars_bit = 8,
391 	}
392 };
393 
394 static const unsigned int ts_shift[] = TS_SHIFT;
395 
396 static struct sh_dmae_pdata dma0_platform_data = {
397 	.slave		= sh7757_dmae0_slaves,
398 	.slave_num	= ARRAY_SIZE(sh7757_dmae0_slaves),
399 	.channel	= sh7757_dmae_channels,
400 	.channel_num	= ARRAY_SIZE(sh7757_dmae_channels),
401 	.ts_low_shift	= CHCR_TS_LOW_SHIFT,
402 	.ts_low_mask	= CHCR_TS_LOW_MASK,
403 	.ts_high_shift	= CHCR_TS_HIGH_SHIFT,
404 	.ts_high_mask	= CHCR_TS_HIGH_MASK,
405 	.ts_shift	= ts_shift,
406 	.ts_shift_num	= ARRAY_SIZE(ts_shift),
407 	.dmaor_init	= DMAOR_INIT,
408 };
409 
410 static struct sh_dmae_pdata dma1_platform_data = {
411 	.slave		= sh7757_dmae1_slaves,
412 	.slave_num	= ARRAY_SIZE(sh7757_dmae1_slaves),
413 	.channel	= sh7757_dmae_channels,
414 	.channel_num	= ARRAY_SIZE(sh7757_dmae_channels),
415 	.ts_low_shift	= CHCR_TS_LOW_SHIFT,
416 	.ts_low_mask	= CHCR_TS_LOW_MASK,
417 	.ts_high_shift	= CHCR_TS_HIGH_SHIFT,
418 	.ts_high_mask	= CHCR_TS_HIGH_MASK,
419 	.ts_shift	= ts_shift,
420 	.ts_shift_num	= ARRAY_SIZE(ts_shift),
421 	.dmaor_init	= DMAOR_INIT,
422 };
423 
424 static struct sh_dmae_pdata dma2_platform_data = {
425 	.slave		= sh7757_dmae2_slaves,
426 	.slave_num	= ARRAY_SIZE(sh7757_dmae2_slaves),
427 	.channel	= sh7757_dmae_channels,
428 	.channel_num	= ARRAY_SIZE(sh7757_dmae_channels),
429 	.ts_low_shift	= CHCR_TS_LOW_SHIFT,
430 	.ts_low_mask	= CHCR_TS_LOW_MASK,
431 	.ts_high_shift	= CHCR_TS_HIGH_SHIFT,
432 	.ts_high_mask	= CHCR_TS_HIGH_MASK,
433 	.ts_shift	= ts_shift,
434 	.ts_shift_num	= ARRAY_SIZE(ts_shift),
435 	.dmaor_init	= DMAOR_INIT,
436 };
437 
438 static struct sh_dmae_pdata dma3_platform_data = {
439 	.slave		= sh7757_dmae3_slaves,
440 	.slave_num	= ARRAY_SIZE(sh7757_dmae3_slaves),
441 	.channel	= sh7757_dmae_channels,
442 	.channel_num	= ARRAY_SIZE(sh7757_dmae_channels),
443 	.ts_low_shift	= CHCR_TS_LOW_SHIFT,
444 	.ts_low_mask	= CHCR_TS_LOW_MASK,
445 	.ts_high_shift	= CHCR_TS_HIGH_SHIFT,
446 	.ts_high_mask	= CHCR_TS_HIGH_MASK,
447 	.ts_shift	= ts_shift,
448 	.ts_shift_num	= ARRAY_SIZE(ts_shift),
449 	.dmaor_init	= DMAOR_INIT,
450 };
451 
452 /* channel 0 to 5 */
453 static struct resource sh7757_dmae0_resources[] = {
454 	[0] = {
455 		/* Channel registers and DMAOR */
456 		.start	= 0xff608020,
457 		.end	= 0xff60808f,
458 		.flags	= IORESOURCE_MEM,
459 	},
460 	[1] = {
461 		/* DMARSx */
462 		.start	= 0xff609000,
463 		.end	= 0xff60900b,
464 		.flags	= IORESOURCE_MEM,
465 	},
466 	{
467 		.start	= 34,
468 		.end	= 34,
469 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
470 	},
471 };
472 
473 /* channel 6 to 11 */
474 static struct resource sh7757_dmae1_resources[] = {
475 	[0] = {
476 		/* Channel registers and DMAOR */
477 		.start	= 0xff618020,
478 		.end	= 0xff61808f,
479 		.flags	= IORESOURCE_MEM,
480 	},
481 	[1] = {
482 		/* DMARSx */
483 		.start	= 0xff619000,
484 		.end	= 0xff61900b,
485 		.flags	= IORESOURCE_MEM,
486 	},
487 	{
488 		/* DMA error */
489 		.start	= 34,
490 		.end	= 34,
491 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
492 	},
493 	{
494 		/* IRQ for channels 4 */
495 		.start	= 46,
496 		.end	= 46,
497 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
498 	},
499 	{
500 		/* IRQ for channels 5 */
501 		.start	= 46,
502 		.end	= 46,
503 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
504 	},
505 	{
506 		/* IRQ for channels 6 */
507 		.start	= 88,
508 		.end	= 88,
509 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
510 	},
511 	{
512 		/* IRQ for channels 7 */
513 		.start	= 88,
514 		.end	= 88,
515 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
516 	},
517 	{
518 		/* IRQ for channels 8 */
519 		.start	= 88,
520 		.end	= 88,
521 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
522 	},
523 	{
524 		/* IRQ for channels 9 */
525 		.start	= 88,
526 		.end	= 88,
527 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
528 	},
529 	{
530 		/* IRQ for channels 10 */
531 		.start	= 88,
532 		.end	= 88,
533 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
534 	},
535 	{
536 		/* IRQ for channels 11 */
537 		.start	= 88,
538 		.end	= 88,
539 		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,
540 	},
541 };
542 
543 /* channel 12 to 17 */
544 static struct resource sh7757_dmae2_resources[] = {
545 	[0] = {
546 		/* Channel registers and DMAOR */
547 		.start	= 0xff708020,
548 		.end	= 0xff70808f,
549 		.flags	= IORESOURCE_MEM,
550 	},
551 	[1] = {
552 		/* DMARSx */
553 		.start	= 0xff709000,
554 		.end	= 0xff70900b,
555 		.flags	= IORESOURCE_MEM,
556 	},
557 	{
558 		/* DMA error */
559 		.start	= 323,
560 		.end	= 323,
561 		.flags	= IORESOURCE_IRQ,
562 	},
563 	{
564 		/* IRQ for channels 12 to 16 */
565 		.start	= 272,
566 		.end	= 276,
567 		.flags	= IORESOURCE_IRQ,
568 	},
569 	{
570 		/* IRQ for channel 17 */
571 		.start	= 279,
572 		.end	= 279,
573 		.flags	= IORESOURCE_IRQ,
574 	},
575 };
576 
577 /* channel 18 to 23 */
578 static struct resource sh7757_dmae3_resources[] = {
579 	[0] = {
580 		/* Channel registers and DMAOR */
581 		.start	= 0xff718020,
582 		.end	= 0xff71808f,
583 		.flags	= IORESOURCE_MEM,
584 	},
585 	[1] = {
586 		/* DMARSx */
587 		.start	= 0xff719000,
588 		.end	= 0xff71900b,
589 		.flags	= IORESOURCE_MEM,
590 	},
591 	{
592 		/* DMA error */
593 		.start	= 324,
594 		.end	= 324,
595 		.flags	= IORESOURCE_IRQ,
596 	},
597 	{
598 		/* IRQ for channels 18 to 22 */
599 		.start	= 280,
600 		.end	= 284,
601 		.flags	= IORESOURCE_IRQ,
602 	},
603 	{
604 		/* IRQ for channel 23 */
605 		.start	= 288,
606 		.end	= 288,
607 		.flags	= IORESOURCE_IRQ,
608 	},
609 };
610 
611 static struct platform_device dma0_device = {
612 	.name           = "sh-dma-engine",
613 	.id             = 0,
614 	.resource	= sh7757_dmae0_resources,
615 	.num_resources	= ARRAY_SIZE(sh7757_dmae0_resources),
616 	.dev            = {
617 		.platform_data	= &dma0_platform_data,
618 	},
619 };
620 
621 static struct platform_device dma1_device = {
622 	.name		= "sh-dma-engine",
623 	.id		= 1,
624 	.resource	= sh7757_dmae1_resources,
625 	.num_resources	= ARRAY_SIZE(sh7757_dmae1_resources),
626 	.dev		= {
627 		.platform_data	= &dma1_platform_data,
628 	},
629 };
630 
631 static struct platform_device dma2_device = {
632 	.name		= "sh-dma-engine",
633 	.id		= 2,
634 	.resource	= sh7757_dmae2_resources,
635 	.num_resources	= ARRAY_SIZE(sh7757_dmae2_resources),
636 	.dev		= {
637 		.platform_data	= &dma2_platform_data,
638 	},
639 };
640 
641 static struct platform_device dma3_device = {
642 	.name		= "sh-dma-engine",
643 	.id		= 3,
644 	.resource	= sh7757_dmae3_resources,
645 	.num_resources	= ARRAY_SIZE(sh7757_dmae3_resources),
646 	.dev		= {
647 		.platform_data	= &dma3_platform_data,
648 	},
649 };
650 
651 static struct platform_device spi0_device = {
652 	.name	= "sh_spi",
653 	.id	= 0,
654 	.dev	= {
655 		.dma_mask		= NULL,
656 		.coherent_dma_mask	= 0xffffffff,
657 	},
658 	.num_resources	= ARRAY_SIZE(spi0_resources),
659 	.resource	= spi0_resources,
660 };
661 
662 static struct platform_device *sh7757_devices[] __initdata = {
663 	&scif2_device,
664 	&scif3_device,
665 	&scif4_device,
666 	&tmu0_device,
667 	&tmu1_device,
668 	&dma0_device,
669 	&dma1_device,
670 	&dma2_device,
671 	&dma3_device,
672 	&spi0_device,
673 };
674 
675 static int __init sh7757_devices_setup(void)
676 {
677 	return platform_add_devices(sh7757_devices,
678 				    ARRAY_SIZE(sh7757_devices));
679 }
680 arch_initcall(sh7757_devices_setup);
681 
682 static struct platform_device *sh7757_early_devices[] __initdata = {
683 	&scif2_device,
684 	&scif3_device,
685 	&scif4_device,
686 	&tmu0_device,
687 	&tmu1_device,
688 };
689 
690 void __init plat_early_device_setup(void)
691 {
692 	early_platform_add_devices(sh7757_early_devices,
693 				   ARRAY_SIZE(sh7757_early_devices));
694 }
695 
696 enum {
697 	UNUSED = 0,
698 
699 	/* interrupt sources */
700 
701 	IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH,
702 	IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH,
703 	IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH,
704 	IRL0_HHLL, IRL0_HHLH, IRL0_HHHL,
705 
706 	IRL4_LLLL, IRL4_LLLH, IRL4_LLHL, IRL4_LLHH,
707 	IRL4_LHLL, IRL4_LHLH, IRL4_LHHL, IRL4_LHHH,
708 	IRL4_HLLL, IRL4_HLLH, IRL4_HLHL, IRL4_HLHH,
709 	IRL4_HHLL, IRL4_HHLH, IRL4_HHHL,
710 	IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7,
711 
712 	SDHI, DVC,
713 	IRQ8, IRQ9, IRQ11, IRQ10, IRQ12, IRQ13, IRQ14, IRQ15,
714 	TMU0, TMU1, TMU2, TMU2_TICPI, TMU3, TMU4, TMU5,
715 	HUDI,
716 	ARC4,
717 	DMAC0_5, DMAC6_7, DMAC8_11,
718 	SCIF0, SCIF1, SCIF2, SCIF3, SCIF4,
719 	USB0, USB1,
720 	JMC,
721 	SPI0, SPI1,
722 	TMR01, TMR23, TMR45,
723 	FRT,
724 	LPC, LPC5, LPC6, LPC7, LPC8,
725 	PECI0, PECI1, PECI2, PECI3, PECI4, PECI5,
726 	ETHERC,
727 	ADC0, ADC1,
728 	SIM,
729 	IIC0_0, IIC0_1, IIC0_2, IIC0_3,
730 	IIC1_0, IIC1_1, IIC1_2, IIC1_3,
731 	IIC2_0, IIC2_1, IIC2_2, IIC2_3,
732 	IIC3_0, IIC3_1, IIC3_2, IIC3_3,
733 	IIC4_0, IIC4_1, IIC4_2, IIC4_3,
734 	IIC5_0, IIC5_1, IIC5_2, IIC5_3,
735 	IIC6_0, IIC6_1, IIC6_2, IIC6_3,
736 	IIC7_0, IIC7_1, IIC7_2, IIC7_3,
737 	IIC8_0, IIC8_1, IIC8_2, IIC8_3,
738 	IIC9_0, IIC9_1, IIC9_2, IIC9_3,
739 	ONFICTL,
740 	MMC1, MMC2,
741 	ECCU,
742 	PCIC,
743 	G200,
744 	RSPI,
745 	SGPIO,
746 	DMINT12, DMINT13, DMINT14, DMINT15, DMINT16, DMINT17, DMINT18, DMINT19,
747 	DMINT20, DMINT21, DMINT22, DMINT23,
748 	DDRECC,
749 	TSIP,
750 	PCIE_BRIDGE,
751 	WDT0B, WDT1B, WDT2B, WDT3B, WDT4B, WDT5B, WDT6B, WDT7B, WDT8B,
752 	GETHER0, GETHER1, GETHER2,
753 	PBIA, PBIB, PBIC,
754 	DMAE2, DMAE3,
755 	SERMUX2, SERMUX3,
756 
757 	/* interrupt groups */
758 
759 	TMU012, TMU345,
760 };
761 
762 static struct intc_vect vectors[] __initdata = {
763 	INTC_VECT(SDHI, 0x480), INTC_VECT(SDHI, 0x04a0),
764 	INTC_VECT(SDHI, 0x4c0),
765 	INTC_VECT(DVC, 0x4e0),
766 	INTC_VECT(IRQ8, 0x500), INTC_VECT(IRQ9, 0x520),
767 	INTC_VECT(IRQ10, 0x540),
768 	INTC_VECT(TMU0, 0x580), INTC_VECT(TMU1, 0x5a0),
769 	INTC_VECT(TMU2, 0x5c0), INTC_VECT(TMU2_TICPI, 0x5e0),
770 	INTC_VECT(HUDI, 0x600),
771 	INTC_VECT(ARC4, 0x620),
772 	INTC_VECT(DMAC0_5, 0x640), INTC_VECT(DMAC0_5, 0x660),
773 	INTC_VECT(DMAC0_5, 0x680), INTC_VECT(DMAC0_5, 0x6a0),
774 	INTC_VECT(DMAC0_5, 0x6c0),
775 	INTC_VECT(IRQ11, 0x6e0),
776 	INTC_VECT(SCIF2, 0x700), INTC_VECT(SCIF2, 0x720),
777 	INTC_VECT(SCIF2, 0x740), INTC_VECT(SCIF2, 0x760),
778 	INTC_VECT(DMAC0_5, 0x780), INTC_VECT(DMAC0_5, 0x7a0),
779 	INTC_VECT(DMAC6_7, 0x7c0), INTC_VECT(DMAC6_7, 0x7e0),
780 	INTC_VECT(USB0, 0x840),
781 	INTC_VECT(IRQ12, 0x880),
782 	INTC_VECT(JMC, 0x8a0),
783 	INTC_VECT(SPI1, 0x8c0),
784 	INTC_VECT(IRQ13, 0x8e0), INTC_VECT(IRQ14, 0x900),
785 	INTC_VECT(USB1, 0x920),
786 	INTC_VECT(TMR01, 0xa00), INTC_VECT(TMR23, 0xa20),
787 	INTC_VECT(TMR45, 0xa40),
788 	INTC_VECT(FRT, 0xa80),
789 	INTC_VECT(LPC, 0xaa0), INTC_VECT(LPC, 0xac0),
790 	INTC_VECT(LPC, 0xae0), INTC_VECT(LPC, 0xb00),
791 	INTC_VECT(LPC, 0xb20),
792 	INTC_VECT(SCIF0, 0xb40), INTC_VECT(SCIF1, 0xb60),
793 	INTC_VECT(SCIF3, 0xb80), INTC_VECT(SCIF3, 0xba0),
794 	INTC_VECT(SCIF3, 0xbc0), INTC_VECT(SCIF3, 0xbe0),
795 	INTC_VECT(PECI0, 0xc00), INTC_VECT(PECI1, 0xc20),
796 	INTC_VECT(PECI2, 0xc40),
797 	INTC_VECT(IRQ15, 0xc60),
798 	INTC_VECT(ETHERC, 0xc80), INTC_VECT(ETHERC, 0xca0),
799 	INTC_VECT(SPI0, 0xcc0),
800 	INTC_VECT(ADC1, 0xce0),
801 	INTC_VECT(DMAC8_11, 0xd00), INTC_VECT(DMAC8_11, 0xd20),
802 	INTC_VECT(DMAC8_11, 0xd40), INTC_VECT(DMAC8_11, 0xd60),
803 	INTC_VECT(SIM, 0xd80), INTC_VECT(SIM, 0xda0),
804 	INTC_VECT(SIM, 0xdc0), INTC_VECT(SIM, 0xde0),
805 	INTC_VECT(TMU3, 0xe00), INTC_VECT(TMU4, 0xe20),
806 	INTC_VECT(TMU5, 0xe40),
807 	INTC_VECT(ADC0, 0xe60),
808 	INTC_VECT(SCIF4, 0xf00), INTC_VECT(SCIF4, 0xf20),
809 	INTC_VECT(SCIF4, 0xf40), INTC_VECT(SCIF4, 0xf60),
810 	INTC_VECT(IIC0_0, 0x1400), INTC_VECT(IIC0_1, 0x1420),
811 	INTC_VECT(IIC0_2, 0x1440), INTC_VECT(IIC0_3, 0x1460),
812 	INTC_VECT(IIC1_0, 0x1480), INTC_VECT(IIC1_1, 0x14e0),
813 	INTC_VECT(IIC1_2, 0x1500), INTC_VECT(IIC1_3, 0x1520),
814 	INTC_VECT(IIC2_0, 0x1540), INTC_VECT(IIC2_1, 0x1560),
815 	INTC_VECT(IIC2_2, 0x1580), INTC_VECT(IIC2_3, 0x1600),
816 	INTC_VECT(IIC3_0, 0x1620), INTC_VECT(IIC3_1, 0x1640),
817 	INTC_VECT(IIC3_2, 0x16e0), INTC_VECT(IIC3_3, 0x1700),
818 	INTC_VECT(IIC4_0, 0x17c0), INTC_VECT(IIC4_1, 0x1800),
819 	INTC_VECT(IIC4_2, 0x1820), INTC_VECT(IIC4_3, 0x1840),
820 	INTC_VECT(IIC5_0, 0x1860), INTC_VECT(IIC5_1, 0x1880),
821 	INTC_VECT(IIC5_2, 0x18a0), INTC_VECT(IIC5_3, 0x18c0),
822 	INTC_VECT(IIC6_0, 0x18e0), INTC_VECT(IIC6_1, 0x1900),
823 	INTC_VECT(IIC6_2, 0x1920),
824 	INTC_VECT(ONFICTL, 0x1960),
825 	INTC_VECT(IIC6_3, 0x1980),
826 	INTC_VECT(IIC7_0, 0x19a0), INTC_VECT(IIC7_1, 0x1a00),
827 	INTC_VECT(IIC7_2, 0x1a20), INTC_VECT(IIC7_3, 0x1a40),
828 	INTC_VECT(IIC8_0, 0x1a60), INTC_VECT(IIC8_1, 0x1a80),
829 	INTC_VECT(IIC8_2, 0x1aa0), INTC_VECT(IIC8_3, 0x1b40),
830 	INTC_VECT(IIC9_0, 0x1b60), INTC_VECT(IIC9_1, 0x1b80),
831 	INTC_VECT(IIC9_2, 0x1c00), INTC_VECT(IIC9_3, 0x1c20),
832 	INTC_VECT(MMC1, 0x1c60), INTC_VECT(MMC2, 0x1c80),
833 	INTC_VECT(ECCU, 0x1cc0),
834 	INTC_VECT(PCIC, 0x1ce0),
835 	INTC_VECT(G200, 0x1d00),
836 	INTC_VECT(RSPI, 0x1d80), INTC_VECT(RSPI, 0x1da0),
837 	INTC_VECT(RSPI, 0x1dc0), INTC_VECT(RSPI, 0x1de0),
838 	INTC_VECT(PECI3, 0x1ec0), INTC_VECT(PECI4, 0x1ee0),
839 	INTC_VECT(PECI5, 0x1f00),
840 	INTC_VECT(SGPIO, 0x1f80), INTC_VECT(SGPIO, 0x1fa0),
841 	INTC_VECT(SGPIO, 0x1fc0),
842 	INTC_VECT(DMINT12, 0x2400), INTC_VECT(DMINT13, 0x2420),
843 	INTC_VECT(DMINT14, 0x2440), INTC_VECT(DMINT15, 0x2460),
844 	INTC_VECT(DMINT16, 0x2480), INTC_VECT(DMINT17, 0x24e0),
845 	INTC_VECT(DMINT18, 0x2500), INTC_VECT(DMINT19, 0x2520),
846 	INTC_VECT(DMINT20, 0x2540), INTC_VECT(DMINT21, 0x2560),
847 	INTC_VECT(DMINT22, 0x2580), INTC_VECT(DMINT23, 0x2600),
848 	INTC_VECT(DDRECC, 0x2620),
849 	INTC_VECT(TSIP, 0x2640),
850 	INTC_VECT(PCIE_BRIDGE, 0x27c0),
851 	INTC_VECT(WDT0B, 0x2800), INTC_VECT(WDT1B, 0x2820),
852 	INTC_VECT(WDT2B, 0x2840), INTC_VECT(WDT3B, 0x2860),
853 	INTC_VECT(WDT4B, 0x2880), INTC_VECT(WDT5B, 0x28a0),
854 	INTC_VECT(WDT6B, 0x28c0), INTC_VECT(WDT7B, 0x28e0),
855 	INTC_VECT(WDT8B, 0x2900),
856 	INTC_VECT(GETHER0, 0x2960), INTC_VECT(GETHER1, 0x2980),
857 	INTC_VECT(GETHER2, 0x29a0),
858 	INTC_VECT(PBIA, 0x2a00), INTC_VECT(PBIB, 0x2a20),
859 	INTC_VECT(PBIC, 0x2a40),
860 	INTC_VECT(DMAE2, 0x2a60), INTC_VECT(DMAE3, 0x2a80),
861 	INTC_VECT(SERMUX2, 0x2aa0), INTC_VECT(SERMUX3, 0x2b40),
862 	INTC_VECT(LPC5, 0x2b60), INTC_VECT(LPC6, 0x2b80),
863 	INTC_VECT(LPC7, 0x2c00), INTC_VECT(LPC8, 0x2c20),
864 };
865 
866 static struct intc_group groups[] __initdata = {
867 	INTC_GROUP(TMU012, TMU0, TMU1, TMU2, TMU2_TICPI),
868 	INTC_GROUP(TMU345, TMU3, TMU4, TMU5),
869 };
870 
871 static struct intc_mask_reg mask_registers[] __initdata = {
872 	{ 0xffd00044, 0xffd00064, 32, /* INTMSK0 / INTMSKCLR0 */
873 	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
874 
875 	{ 0xffd40080, 0xffd40084, 32, /* INTMSK2 / INTMSKCLR2 */
876 	  { IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH,
877 	    IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH,
878 	    IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH,
879 	    IRL0_HHLL, IRL0_HHLH, IRL0_HHHL, 0,
880 	    IRL4_LLLL, IRL4_LLLH, IRL4_LLHL, IRL4_LLHH,
881 	    IRL4_LHLL, IRL4_LHLH, IRL4_LHHL, IRL4_LHHH,
882 	    IRL4_HLLL, IRL4_HLLH, IRL4_HLHL, IRL4_HLHH,
883 	    IRL4_HHLL, IRL4_HHLH, IRL4_HHHL, 0, } },
884 
885 	{ 0xffd40038, 0xffd4003c, 32, /* INT2MSKR / INT2MSKCR */
886 	  { 0, 0, 0, 0, 0, 0, 0, 0,
887 	    0, DMAC8_11, 0, PECI0, LPC, FRT, 0, TMR45,
888 	    TMR23, TMR01, 0, 0, 0, 0, 0, DMAC0_5,
889 	    HUDI, 0, 0, SCIF3, SCIF2, SDHI, TMU345, TMU012
890 	     } },
891 
892 	{ 0xffd400d0, 0xffd400d4, 32, /* INT2MSKR1 / INT2MSKCR1 */
893 	  { IRQ15, IRQ14, IRQ13, IRQ12, IRQ11, IRQ10, SCIF4, ETHERC,
894 	    IRQ9, IRQ8, SCIF1, SCIF0, USB0, 0, 0, USB1,
895 	    ADC1, 0, DMAC6_7, ADC0, SPI0, SIM, PECI2, PECI1,
896 	    ARC4, 0, SPI1, JMC, 0, 0, 0, DVC
897 	     } },
898 
899 	{ 0xffd10038, 0xffd1003c, 32, /* INT2MSKR2 / INT2MSKCR2 */
900 	  { IIC4_1, IIC4_2, IIC5_0, ONFICTL, 0, 0, SGPIO, 0,
901 	    0, G200, 0, IIC9_2, IIC8_2, IIC8_1, IIC8_0, IIC7_3,
902 	    IIC7_2, IIC7_1, IIC6_3, IIC0_0, IIC0_1, IIC0_2, IIC0_3, IIC3_1,
903 	    IIC2_3, 0, IIC2_1, IIC9_1, IIC3_3, IIC1_0, 0, IIC2_2
904 	     } },
905 
906 	{ 0xffd100d0, 0xffd100d4, 32, /* INT2MSKR3 / INT2MSKCR3 */
907 	  { MMC1, IIC6_1, IIC6_0, IIC5_1, IIC3_2, IIC2_0, PECI5, MMC2,
908 	    IIC1_3, IIC1_2, IIC9_0, IIC8_3, IIC4_3, IIC7_0, 0, IIC6_2,
909 	    PCIC, 0, IIC4_0, 0, ECCU, RSPI, 0, IIC9_3,
910 	    IIC3_0, 0, IIC5_3, IIC5_2, 0, 0, 0, IIC1_1
911 	     } },
912 
913 	{ 0xffd20038, 0xffd2003c, 32, /* INT2MSKR4 / INT2MSKCR4 */
914 	  { WDT0B, WDT1B, WDT3B, GETHER0, 0, 0, 0, 0,
915 	    0, 0, 0, LPC7, SERMUX2, DMAE3, DMAE2, PBIC,
916 	    PBIB, PBIA, GETHER1, DMINT12, DMINT13, DMINT14, DMINT15, TSIP,
917 	    DMINT23, 0, DMINT21, LPC6, 0, DMINT16, 0, DMINT22
918 	     } },
919 
920 	{ 0xffd200d0, 0xffd200d4, 32, /* INT2MSKR5 / INT2MSKCR5 */
921 	  { 0, WDT8B, WDT7B, WDT4B, 0, DMINT20, 0, 0,
922 	    DMINT19, DMINT18, LPC5, SERMUX3, WDT2B, GETHER2, 0, 0,
923 	    0, 0, PCIE_BRIDGE, 0, 0, 0, 0, LPC8,
924 	    DDRECC, 0, WDT6B, WDT5B, 0, 0, 0, DMINT17
925 	     } },
926 };
927 
928 #define INTPRI		0xffd00010
929 #define INT2PRI0	0xffd40000
930 #define INT2PRI1	0xffd40004
931 #define INT2PRI2	0xffd40008
932 #define INT2PRI3	0xffd4000c
933 #define INT2PRI4	0xffd40010
934 #define INT2PRI5	0xffd40014
935 #define INT2PRI6	0xffd40018
936 #define INT2PRI7	0xffd4001c
937 #define INT2PRI8	0xffd400a0
938 #define INT2PRI9	0xffd400a4
939 #define INT2PRI10	0xffd400a8
940 #define INT2PRI11	0xffd400ac
941 #define INT2PRI12	0xffd400b0
942 #define INT2PRI13	0xffd400b4
943 #define INT2PRI14	0xffd400b8
944 #define INT2PRI15	0xffd400bc
945 #define INT2PRI16	0xffd10000
946 #define INT2PRI17	0xffd10004
947 #define INT2PRI18	0xffd10008
948 #define INT2PRI19	0xffd1000c
949 #define INT2PRI20	0xffd10010
950 #define INT2PRI21	0xffd10014
951 #define INT2PRI22	0xffd10018
952 #define INT2PRI23	0xffd1001c
953 #define INT2PRI24	0xffd100a0
954 #define INT2PRI25	0xffd100a4
955 #define INT2PRI26	0xffd100a8
956 #define INT2PRI27	0xffd100ac
957 #define INT2PRI28	0xffd100b0
958 #define INT2PRI29	0xffd100b4
959 #define INT2PRI30	0xffd100b8
960 #define INT2PRI31	0xffd100bc
961 #define INT2PRI32	0xffd20000
962 #define INT2PRI33	0xffd20004
963 #define INT2PRI34	0xffd20008
964 #define INT2PRI35	0xffd2000c
965 #define INT2PRI36	0xffd20010
966 #define INT2PRI37	0xffd20014
967 #define INT2PRI38	0xffd20018
968 #define INT2PRI39	0xffd2001c
969 #define INT2PRI40	0xffd200a0
970 #define INT2PRI41	0xffd200a4
971 #define INT2PRI42	0xffd200a8
972 #define INT2PRI43	0xffd200ac
973 #define INT2PRI44	0xffd200b0
974 #define INT2PRI45	0xffd200b4
975 #define INT2PRI46	0xffd200b8
976 #define INT2PRI47	0xffd200bc
977 
978 static struct intc_prio_reg prio_registers[] __initdata = {
979 	{ INTPRI, 0, 32, 4, { IRQ0, IRQ1, IRQ2, IRQ3,
980 			      IRQ4, IRQ5, IRQ6, IRQ7 } },
981 
982 	{ INT2PRI0, 0, 32, 8, { TMU0, TMU1, TMU2, TMU2_TICPI } },
983 	{ INT2PRI1, 0, 32, 8, { TMU3, TMU4, TMU5, SDHI } },
984 	{ INT2PRI2, 0, 32, 8, { SCIF2, SCIF3, 0, IRQ8 } },
985 	{ INT2PRI3, 0, 32, 8, { HUDI, DMAC0_5, ADC0, IRQ9 } },
986 	{ INT2PRI4, 0, 32, 8, { IRQ10, 0, TMR01, TMR23 } },
987 	{ INT2PRI5, 0, 32, 8, { TMR45, 0, FRT, LPC } },
988 	{ INT2PRI6, 0, 32, 8, { PECI0, ETHERC, DMAC8_11, 0 } },
989 	{ INT2PRI7, 0, 32, 8, { SCIF4, 0, IRQ11, IRQ12 } },
990 	{ INT2PRI8, 0, 32, 8, { 0, 0, 0, DVC } },
991 	{ INT2PRI9, 0, 32, 8, { ARC4, 0, SPI1, JMC } },
992 	{ INT2PRI10, 0, 32, 8, { SPI0, SIM, PECI2, PECI1 } },
993 	{ INT2PRI11, 0, 32, 8, { ADC1, IRQ13, DMAC6_7, IRQ14 } },
994 	{ INT2PRI12, 0, 32, 8, { USB0, 0, IRQ15, USB1 } },
995 	{ INT2PRI13, 0, 32, 8, { 0, 0, SCIF1, SCIF0 } },
996 
997 	{ INT2PRI16, 0, 32, 8, { IIC2_2, 0, 0, 0 } },
998 	{ INT2PRI17, 0, 32, 8, { 0, 0, 0, IIC1_0 } },
999 	{ INT2PRI18, 0, 32, 8, { IIC3_3, IIC9_1, IIC2_1, IIC1_2 } },
1000 	{ INT2PRI19, 0, 32, 8, { IIC2_3, IIC3_1, 0, IIC1_3 } },
1001 	{ INT2PRI20, 0, 32, 8, { IIC2_0, IIC6_3, IIC7_1, IIC7_2 } },
1002 	{ INT2PRI21, 0, 32, 8, { IIC7_3, IIC8_0, IIC8_1, IIC8_2 } },
1003 	{ INT2PRI22, 0, 32, 8, { IIC9_2, MMC2, G200, 0 } },
1004 	{ INT2PRI23, 0, 32, 8, { PECI5, SGPIO, IIC3_2, IIC5_1 } },
1005 	{ INT2PRI24, 0, 32, 8, { PECI4, PECI3, 0, IIC1_1 } },
1006 	{ INT2PRI25, 0, 32, 8, { IIC3_0, 0, IIC5_3, IIC5_2 } },
1007 	{ INT2PRI26, 0, 32, 8, { ECCU, RSPI, 0, IIC9_3 } },
1008 	{ INT2PRI27, 0, 32, 8, { PCIC, IIC6_0, IIC4_0, IIC6_1 } },
1009 	{ INT2PRI28, 0, 32, 8, { IIC4_3, IIC7_0, MMC1, IIC6_2 } },
1010 	{ INT2PRI29, 0, 32, 8, { 0, 0, IIC9_0, IIC8_3 } },
1011 	{ INT2PRI30, 0, 32, 8, { IIC4_1, IIC4_2, IIC5_0, ONFICTL } },
1012 	{ INT2PRI31, 0, 32, 8, { IIC0_0, IIC0_1, IIC0_2, IIC0_3 } },
1013 	{ INT2PRI32, 0, 32, 8, { DMINT22, 0, 0, 0 } },
1014 	{ INT2PRI33, 0, 32, 8, { 0, 0, 0, DMINT16 } },
1015 	{ INT2PRI34, 0, 32, 8, { 0, LPC6, DMINT21, DMINT18 } },
1016 	{ INT2PRI35, 0, 32, 8, { DMINT23, TSIP, 0, DMINT19 } },
1017 	{ INT2PRI36, 0, 32, 8, { DMINT20, GETHER1, PBIA, PBIB } },
1018 	{ INT2PRI37, 0, 32, 8, { PBIC, DMAE2, DMAE3, SERMUX2 } },
1019 	{ INT2PRI38, 0, 32, 8, { LPC7, 0, 0, 0 } },
1020 	{ INT2PRI39, 0, 32, 8, { 0, 0, 0, WDT4B } },
1021 	{ INT2PRI40, 0, 32, 8, { 0, 0, 0, DMINT17 } },
1022 	{ INT2PRI41, 0, 32, 8, { DDRECC, 0, WDT6B, WDT5B } },
1023 	{ INT2PRI42, 0, 32, 8, { 0, 0, 0, LPC8 } },
1024 	{ INT2PRI43, 0, 32, 8, { 0, WDT7B, PCIE_BRIDGE, WDT8B } },
1025 	{ INT2PRI44, 0, 32, 8, { WDT2B, GETHER2, 0, 0 } },
1026 	{ INT2PRI45, 0, 32, 8, { 0, 0, LPC5, SERMUX3 } },
1027 	{ INT2PRI46, 0, 32, 8, { WDT0B, WDT1B, WDT3B, GETHER0 } },
1028 	{ INT2PRI47, 0, 32, 8, { DMINT12, DMINT13, DMINT14, DMINT15 } },
1029 };
1030 
1031 static struct intc_sense_reg sense_registers_irq8to15[] __initdata = {
1032 	{ 0xffd100f8, 32, 2, /* ICR2 */   { IRQ15, IRQ14, IRQ13, IRQ12,
1033 					    IRQ11, IRQ10, IRQ9, IRQ8 } },
1034 };
1035 
1036 static DECLARE_INTC_DESC(intc_desc, "sh7757", vectors, groups,
1037 			 mask_registers, prio_registers,
1038 			 sense_registers_irq8to15);
1039 
1040 /* Support for external interrupt pins in IRQ mode */
1041 static struct intc_vect vectors_irq0123[] __initdata = {
1042 	INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280),
1043 	INTC_VECT(IRQ2, 0x2c0), INTC_VECT(IRQ3, 0x300),
1044 };
1045 
1046 static struct intc_vect vectors_irq4567[] __initdata = {
1047 	INTC_VECT(IRQ4, 0x340), INTC_VECT(IRQ5, 0x380),
1048 	INTC_VECT(IRQ6, 0x3c0), INTC_VECT(IRQ7, 0x200),
1049 };
1050 
1051 static struct intc_sense_reg sense_registers[] __initdata = {
1052 	{ 0xffd0001c, 32, 2, /* ICR1 */   { IRQ0, IRQ1, IRQ2, IRQ3,
1053 					    IRQ4, IRQ5, IRQ6, IRQ7 } },
1054 };
1055 
1056 static struct intc_mask_reg ack_registers[] __initdata = {
1057 	{ 0xffd00024, 0, 32, /* INTREQ */
1058 	  { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
1059 };
1060 
1061 static DECLARE_INTC_DESC_ACK(intc_desc_irq0123, "sh7757-irq0123",
1062 			     vectors_irq0123, NULL, mask_registers,
1063 			     prio_registers, sense_registers, ack_registers);
1064 
1065 static DECLARE_INTC_DESC_ACK(intc_desc_irq4567, "sh7757-irq4567",
1066 			     vectors_irq4567, NULL, mask_registers,
1067 			     prio_registers, sense_registers, ack_registers);
1068 
1069 /* External interrupt pins in IRL mode */
1070 static struct intc_vect vectors_irl0123[] __initdata = {
1071 	INTC_VECT(IRL0_LLLL, 0x200), INTC_VECT(IRL0_LLLH, 0x220),
1072 	INTC_VECT(IRL0_LLHL, 0x240), INTC_VECT(IRL0_LLHH, 0x260),
1073 	INTC_VECT(IRL0_LHLL, 0x280), INTC_VECT(IRL0_LHLH, 0x2a0),
1074 	INTC_VECT(IRL0_LHHL, 0x2c0), INTC_VECT(IRL0_LHHH, 0x2e0),
1075 	INTC_VECT(IRL0_HLLL, 0x300), INTC_VECT(IRL0_HLLH, 0x320),
1076 	INTC_VECT(IRL0_HLHL, 0x340), INTC_VECT(IRL0_HLHH, 0x360),
1077 	INTC_VECT(IRL0_HHLL, 0x380), INTC_VECT(IRL0_HHLH, 0x3a0),
1078 	INTC_VECT(IRL0_HHHL, 0x3c0),
1079 };
1080 
1081 static struct intc_vect vectors_irl4567[] __initdata = {
1082 	INTC_VECT(IRL4_LLLL, 0xb00), INTC_VECT(IRL4_LLLH, 0xb20),
1083 	INTC_VECT(IRL4_LLHL, 0xb40), INTC_VECT(IRL4_LLHH, 0xb60),
1084 	INTC_VECT(IRL4_LHLL, 0xb80), INTC_VECT(IRL4_LHLH, 0xba0),
1085 	INTC_VECT(IRL4_LHHL, 0xbc0), INTC_VECT(IRL4_LHHH, 0xbe0),
1086 	INTC_VECT(IRL4_HLLL, 0xc00), INTC_VECT(IRL4_HLLH, 0xc20),
1087 	INTC_VECT(IRL4_HLHL, 0xc40), INTC_VECT(IRL4_HLHH, 0xc60),
1088 	INTC_VECT(IRL4_HHLL, 0xc80), INTC_VECT(IRL4_HHLH, 0xca0),
1089 	INTC_VECT(IRL4_HHHL, 0xcc0),
1090 };
1091 
1092 static DECLARE_INTC_DESC(intc_desc_irl0123, "sh7757-irl0123", vectors_irl0123,
1093 			 NULL, mask_registers, NULL, NULL);
1094 
1095 static DECLARE_INTC_DESC(intc_desc_irl4567, "sh7757-irl4567", vectors_irl4567,
1096 			 NULL, mask_registers, NULL, NULL);
1097 
1098 #define INTC_ICR0	0xffd00000
1099 #define INTC_INTMSK0	0xffd00044
1100 #define INTC_INTMSK1	0xffd00048
1101 #define INTC_INTMSK2	0xffd40080
1102 #define INTC_INTMSKCLR1	0xffd00068
1103 #define INTC_INTMSKCLR2	0xffd40084
1104 
1105 void __init plat_irq_setup(void)
1106 {
1107 	/* disable IRQ3-0 + IRQ7-4 */
1108 	__raw_writel(0xff000000, INTC_INTMSK0);
1109 
1110 	/* disable IRL3-0 + IRL7-4 */
1111 	__raw_writel(0xc0000000, INTC_INTMSK1);
1112 	__raw_writel(0xfffefffe, INTC_INTMSK2);
1113 
1114 	/* select IRL mode for IRL3-0 + IRL7-4 */
1115 	__raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);
1116 
1117 	/* disable holding function, ie enable "SH-4 Mode" */
1118 	__raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0);
1119 
1120 	register_intc_controller(&intc_desc);
1121 }
1122 
1123 void __init plat_irq_setup_pins(int mode)
1124 {
1125 	switch (mode) {
1126 	case IRQ_MODE_IRQ7654:
1127 		/* select IRQ mode for IRL7-4 */
1128 		__raw_writel(__raw_readl(INTC_ICR0) | 0x00400000, INTC_ICR0);
1129 		register_intc_controller(&intc_desc_irq4567);
1130 		break;
1131 	case IRQ_MODE_IRQ3210:
1132 		/* select IRQ mode for IRL3-0 */
1133 		__raw_writel(__raw_readl(INTC_ICR0) | 0x00800000, INTC_ICR0);
1134 		register_intc_controller(&intc_desc_irq0123);
1135 		break;
1136 	case IRQ_MODE_IRL7654:
1137 		/* enable IRL7-4 but don't provide any masking */
1138 		__raw_writel(0x40000000, INTC_INTMSKCLR1);
1139 		__raw_writel(0x0000fffe, INTC_INTMSKCLR2);
1140 		break;
1141 	case IRQ_MODE_IRL3210:
1142 		/* enable IRL0-3 but don't provide any masking */
1143 		__raw_writel(0x80000000, INTC_INTMSKCLR1);
1144 		__raw_writel(0xfffe0000, INTC_INTMSKCLR2);
1145 		break;
1146 	case IRQ_MODE_IRL7654_MASK:
1147 		/* enable IRL7-4 and mask using cpu intc controller */
1148 		__raw_writel(0x40000000, INTC_INTMSKCLR1);
1149 		register_intc_controller(&intc_desc_irl4567);
1150 		break;
1151 	case IRQ_MODE_IRL3210_MASK:
1152 		/* enable IRL0-3 and mask using cpu intc controller */
1153 		__raw_writel(0x80000000, INTC_INTMSKCLR1);
1154 		register_intc_controller(&intc_desc_irl0123);
1155 		break;
1156 	default:
1157 		BUG();
1158 	}
1159 }
1160 
1161 void __init plat_mem_setup(void)
1162 {
1163 }
1164