Merge branch 'nfs-for-2.6.35' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6
[pandora-kernel.git] / arch / sh / kernel / cpu / sh4a / setup-sh7763.c
1 /*
2  * SH7763 Setup
3  *
4  *  Copyright (C) 2006  Paul Mundt
5  *  Copyright (C) 2007  Yoshihiro Shimoda
6  *  Copyright (C) 2008, 2009  Nobuhiro Iwamatsu
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/sh_timer.h>
16 #include <linux/io.h>
17 #include <linux/serial_sci.h>
18
19 static struct plat_sci_port scif0_platform_data = {
20         .mapbase        = 0xffe00000,
21         .flags          = UPF_BOOT_AUTOCONF,
22         .type           = PORT_SCIF,
23         .irqs           = { 40, 40, 40, 40 },
24 };
25
26 static struct platform_device scif0_device = {
27         .name           = "sh-sci",
28         .id             = 0,
29         .dev            = {
30                 .platform_data  = &scif0_platform_data,
31         },
32 };
33
34 static struct plat_sci_port scif1_platform_data = {
35         .mapbase        = 0xffe08000,
36         .flags          = UPF_BOOT_AUTOCONF,
37         .type           = PORT_SCIF,
38         .irqs           = { 76, 76, 76, 76 },
39 };
40
41 static struct platform_device scif1_device = {
42         .name           = "sh-sci",
43         .id             = 1,
44         .dev            = {
45                 .platform_data  = &scif1_platform_data,
46         },
47 };
48
49 static struct plat_sci_port scif2_platform_data = {
50         .mapbase        = 0xffe10000,
51         .flags          = UPF_BOOT_AUTOCONF,
52         .type           = PORT_SCIF,
53         .irqs           = { 104, 104, 104, 104 },
54 };
55
56 static struct platform_device scif2_device = {
57         .name           = "sh-sci",
58         .id             = 2,
59         .dev            = {
60                 .platform_data  = &scif2_platform_data,
61         },
62 };
63
64 static struct resource rtc_resources[] = {
65         [0] = {
66                 .start  = 0xffe80000,
67                 .end    = 0xffe80000 + 0x58 - 1,
68                 .flags  = IORESOURCE_IO,
69         },
70         [1] = {
71                 /* Shared Period/Carry/Alarm IRQ */
72                 .start  = 20,
73                 .flags  = IORESOURCE_IRQ,
74         },
75 };
76
77 static struct platform_device rtc_device = {
78         .name           = "sh-rtc",
79         .id             = -1,
80         .num_resources  = ARRAY_SIZE(rtc_resources),
81         .resource       = rtc_resources,
82 };
83
84 static struct resource usb_ohci_resources[] = {
85         [0] = {
86                 .start  = 0xffec8000,
87                 .end    = 0xffec80ff,
88                 .flags  = IORESOURCE_MEM,
89         },
90         [1] = {
91                 .start  = 83,
92                 .end    = 83,
93                 .flags  = IORESOURCE_IRQ,
94         },
95 };
96
97 static u64 usb_ohci_dma_mask = 0xffffffffUL;
98 static struct platform_device usb_ohci_device = {
99         .name           = "sh_ohci",
100         .id             = -1,
101         .dev = {
102                 .dma_mask               = &usb_ohci_dma_mask,
103                 .coherent_dma_mask      = 0xffffffff,
104         },
105         .num_resources  = ARRAY_SIZE(usb_ohci_resources),
106         .resource       = usb_ohci_resources,
107 };
108
109 static struct resource usbf_resources[] = {
110         [0] = {
111                 .start  = 0xffec0000,
112                 .end    = 0xffec00ff,
113                 .flags  = IORESOURCE_MEM,
114         },
115         [1] = {
116                 .start  = 84,
117                 .end    = 84,
118                 .flags  = IORESOURCE_IRQ,
119         },
120 };
121
122 static struct platform_device usbf_device = {
123         .name           = "sh_udc",
124         .id             = -1,
125         .dev = {
126                 .dma_mask               = NULL,
127                 .coherent_dma_mask      = 0xffffffff,
128         },
129         .num_resources  = ARRAY_SIZE(usbf_resources),
130         .resource       = usbf_resources,
131 };
132
133 static struct sh_timer_config tmu0_platform_data = {
134         .channel_offset = 0x04,
135         .timer_bit = 0,
136         .clockevent_rating = 200,
137 };
138
139 static struct resource tmu0_resources[] = {
140         [0] = {
141                 .start  = 0xffd80008,
142                 .end    = 0xffd80013,
143                 .flags  = IORESOURCE_MEM,
144         },
145         [1] = {
146                 .start  = 28,
147                 .flags  = IORESOURCE_IRQ,
148         },
149 };
150
151 static struct platform_device tmu0_device = {
152         .name           = "sh_tmu",
153         .id             = 0,
154         .dev = {
155                 .platform_data  = &tmu0_platform_data,
156         },
157         .resource       = tmu0_resources,
158         .num_resources  = ARRAY_SIZE(tmu0_resources),
159 };
160
161 static struct sh_timer_config tmu1_platform_data = {
162         .channel_offset = 0x10,
163         .timer_bit = 1,
164         .clocksource_rating = 200,
165 };
166
167 static struct resource tmu1_resources[] = {
168         [0] = {
169                 .start  = 0xffd80014,
170                 .end    = 0xffd8001f,
171                 .flags  = IORESOURCE_MEM,
172         },
173         [1] = {
174                 .start  = 29,
175                 .flags  = IORESOURCE_IRQ,
176         },
177 };
178
179 static struct platform_device tmu1_device = {
180         .name           = "sh_tmu",
181         .id             = 1,
182         .dev = {
183                 .platform_data  = &tmu1_platform_data,
184         },
185         .resource       = tmu1_resources,
186         .num_resources  = ARRAY_SIZE(tmu1_resources),
187 };
188
189 static struct sh_timer_config tmu2_platform_data = {
190         .channel_offset = 0x1c,
191         .timer_bit = 2,
192 };
193
194 static struct resource tmu2_resources[] = {
195         [0] = {
196                 .start  = 0xffd80020,
197                 .end    = 0xffd8002f,
198                 .flags  = IORESOURCE_MEM,
199         },
200         [1] = {
201                 .start  = 30,
202                 .flags  = IORESOURCE_IRQ,
203         },
204 };
205
206 static struct platform_device tmu2_device = {
207         .name           = "sh_tmu",
208         .id             = 2,
209         .dev = {
210                 .platform_data  = &tmu2_platform_data,
211         },
212         .resource       = tmu2_resources,
213         .num_resources  = ARRAY_SIZE(tmu2_resources),
214 };
215
216 static struct sh_timer_config tmu3_platform_data = {
217         .channel_offset = 0x04,
218         .timer_bit = 0,
219 };
220
221 static struct resource tmu3_resources[] = {
222         [0] = {
223                 .start  = 0xffd88008,
224                 .end    = 0xffd88013,
225                 .flags  = IORESOURCE_MEM,
226         },
227         [1] = {
228                 .start  = 96,
229                 .flags  = IORESOURCE_IRQ,
230         },
231 };
232
233 static struct platform_device tmu3_device = {
234         .name           = "sh_tmu",
235         .id             = 3,
236         .dev = {
237                 .platform_data  = &tmu3_platform_data,
238         },
239         .resource       = tmu3_resources,
240         .num_resources  = ARRAY_SIZE(tmu3_resources),
241 };
242
243 static struct sh_timer_config tmu4_platform_data = {
244         .channel_offset = 0x10,
245         .timer_bit = 1,
246 };
247
248 static struct resource tmu4_resources[] = {
249         [0] = {
250                 .start  = 0xffd88014,
251                 .end    = 0xffd8801f,
252                 .flags  = IORESOURCE_MEM,
253         },
254         [1] = {
255                 .start  = 97,
256                 .flags  = IORESOURCE_IRQ,
257         },
258 };
259
260 static struct platform_device tmu4_device = {
261         .name           = "sh_tmu",
262         .id             = 4,
263         .dev = {
264                 .platform_data  = &tmu4_platform_data,
265         },
266         .resource       = tmu4_resources,
267         .num_resources  = ARRAY_SIZE(tmu4_resources),
268 };
269
270 static struct sh_timer_config tmu5_platform_data = {
271         .channel_offset = 0x1c,
272         .timer_bit = 2,
273 };
274
275 static struct resource tmu5_resources[] = {
276         [0] = {
277                 .start  = 0xffd88020,
278                 .end    = 0xffd8802b,
279                 .flags  = IORESOURCE_MEM,
280         },
281         [1] = {
282                 .start  = 98,
283                 .flags  = IORESOURCE_IRQ,
284         },
285 };
286
287 static struct platform_device tmu5_device = {
288         .name           = "sh_tmu",
289         .id             = 5,
290         .dev = {
291                 .platform_data  = &tmu5_platform_data,
292         },
293         .resource       = tmu5_resources,
294         .num_resources  = ARRAY_SIZE(tmu5_resources),
295 };
296
297 static struct platform_device *sh7763_devices[] __initdata = {
298         &scif0_device,
299         &scif1_device,
300         &scif2_device,
301         &tmu0_device,
302         &tmu1_device,
303         &tmu2_device,
304         &tmu3_device,
305         &tmu4_device,
306         &tmu5_device,
307         &rtc_device,
308         &usb_ohci_device,
309         &usbf_device,
310 };
311
312 static int __init sh7763_devices_setup(void)
313 {
314         return platform_add_devices(sh7763_devices,
315                                     ARRAY_SIZE(sh7763_devices));
316 }
317 arch_initcall(sh7763_devices_setup);
318
319 static struct platform_device *sh7763_early_devices[] __initdata = {
320         &scif0_device,
321         &scif1_device,
322         &scif2_device,
323         &tmu0_device,
324         &tmu1_device,
325         &tmu2_device,
326         &tmu3_device,
327         &tmu4_device,
328         &tmu5_device,
329 };
330
331 void __init plat_early_device_setup(void)
332 {
333         early_platform_add_devices(sh7763_early_devices,
334                                    ARRAY_SIZE(sh7763_early_devices));
335 }
336
337 enum {
338         UNUSED = 0,
339
340         /* interrupt sources */
341
342         IRL_LLLL, IRL_LLLH, IRL_LLHL, IRL_LLHH,
343         IRL_LHLL, IRL_LHLH, IRL_LHHL, IRL_LHHH,
344         IRL_HLLL, IRL_HLLH, IRL_HLHL, IRL_HLHH,
345         IRL_HHLL, IRL_HHLH, IRL_HHHL,
346
347         IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7,
348         RTC, WDT, TMU0, TMU1, TMU2, TMU2_TICPI,
349         HUDI, LCDC, DMAC, SCIF0, IIC0, IIC1, CMT, GETHER, HAC,
350         PCISERR, PCIINTA, PCIINTB, PCIINTC, PCIINTD, PCIC5,
351         STIF0, STIF1, SCIF1, SIOF0, SIOF1, SIOF2,
352         USBH, USBF, TPU, PCC, MMCIF, SIM,
353         TMU3, TMU4, TMU5, ADC, SSI0, SSI1, SSI2, SSI3,
354         SCIF2, GPIO,
355
356         /* interrupt groups */
357
358         TMU012, TMU345,
359 };
360
361 static struct intc_vect vectors[] __initdata = {
362         INTC_VECT(RTC, 0x480), INTC_VECT(RTC, 0x4a0),
363         INTC_VECT(RTC, 0x4c0),
364         INTC_VECT(WDT, 0x560), INTC_VECT(TMU0, 0x580),
365         INTC_VECT(TMU1, 0x5a0), INTC_VECT(TMU2, 0x5c0),
366         INTC_VECT(TMU2_TICPI, 0x5e0), INTC_VECT(HUDI, 0x600),
367         INTC_VECT(LCDC, 0x620),
368         INTC_VECT(DMAC, 0x640), INTC_VECT(DMAC, 0x660),
369         INTC_VECT(DMAC, 0x680), INTC_VECT(DMAC, 0x6a0),
370         INTC_VECT(DMAC, 0x6c0),
371         INTC_VECT(SCIF0, 0x700), INTC_VECT(SCIF0, 0x720),
372         INTC_VECT(SCIF0, 0x740), INTC_VECT(SCIF0, 0x760),
373         INTC_VECT(DMAC, 0x780), INTC_VECT(DMAC, 0x7a0),
374         INTC_VECT(IIC0, 0x8A0), INTC_VECT(IIC1, 0x8C0),
375         INTC_VECT(CMT, 0x900), INTC_VECT(GETHER, 0x920),
376         INTC_VECT(GETHER, 0x940), INTC_VECT(GETHER, 0x960),
377         INTC_VECT(HAC, 0x980),
378         INTC_VECT(PCISERR, 0xa00), INTC_VECT(PCIINTA, 0xa20),
379         INTC_VECT(PCIINTB, 0xa40), INTC_VECT(PCIINTC, 0xa60),
380         INTC_VECT(PCIINTD, 0xa80), INTC_VECT(PCIC5, 0xaa0),
381         INTC_VECT(PCIC5, 0xac0), INTC_VECT(PCIC5, 0xae0),
382         INTC_VECT(PCIC5, 0xb00), INTC_VECT(PCIC5, 0xb20),
383         INTC_VECT(STIF0, 0xb40), INTC_VECT(STIF1, 0xb60),
384         INTC_VECT(SCIF1, 0xb80), INTC_VECT(SCIF1, 0xba0),
385         INTC_VECT(SCIF1, 0xbc0), INTC_VECT(SCIF1, 0xbe0),
386         INTC_VECT(SIOF0, 0xc00), INTC_VECT(SIOF1, 0xc20),
387         INTC_VECT(USBH, 0xc60), INTC_VECT(USBF, 0xc80),
388         INTC_VECT(USBF, 0xca0),
389         INTC_VECT(TPU, 0xcc0), INTC_VECT(PCC, 0xce0),
390         INTC_VECT(MMCIF, 0xd00), INTC_VECT(MMCIF, 0xd20),
391         INTC_VECT(MMCIF, 0xd40), INTC_VECT(MMCIF, 0xd60),
392         INTC_VECT(SIM, 0xd80), INTC_VECT(SIM, 0xda0),
393         INTC_VECT(SIM, 0xdc0), INTC_VECT(SIM, 0xde0),
394         INTC_VECT(TMU3, 0xe00), INTC_VECT(TMU4, 0xe20),
395         INTC_VECT(TMU5, 0xe40), INTC_VECT(ADC, 0xe60),
396         INTC_VECT(SSI0, 0xe80), INTC_VECT(SSI1, 0xea0),
397         INTC_VECT(SSI2, 0xec0), INTC_VECT(SSI3, 0xee0),
398         INTC_VECT(SCIF2, 0xf00), INTC_VECT(SCIF2, 0xf20),
399         INTC_VECT(SCIF2, 0xf40), INTC_VECT(SCIF2, 0xf60),
400         INTC_VECT(GPIO, 0xf80), INTC_VECT(GPIO, 0xfa0),
401         INTC_VECT(GPIO, 0xfc0), INTC_VECT(GPIO, 0xfe0),
402 };
403
404 static struct intc_group groups[] __initdata = {
405         INTC_GROUP(TMU012, TMU0, TMU1, TMU2, TMU2_TICPI),
406         INTC_GROUP(TMU345, TMU3, TMU4, TMU5),
407 };
408
409 static struct intc_mask_reg mask_registers[] __initdata = {
410         { 0xffd40038, 0xffd4003c, 32, /* INT2MSKR / INT2MSKCR */
411           { 0, 0, 0, 0, 0, 0, GPIO, 0,
412             SSI0, MMCIF, 0, SIOF0, PCIC5, PCIINTD, PCIINTC, PCIINTB,
413             PCIINTA, PCISERR, HAC, CMT, 0, 0, 0, DMAC,
414             HUDI, 0, WDT, SCIF1, SCIF0, RTC, TMU345, TMU012 } },
415         { 0xffd400d0, 0xffd400d4, 32, /* INT2MSKR1 / INT2MSKCR1 */
416           { 0, 0, 0, 0, 0, 0, SCIF2, USBF,
417             0, 0, STIF1, STIF0, 0, 0, USBH, GETHER,
418             PCC, 0, 0, ADC, TPU, SIM, SIOF2, SIOF1,
419             LCDC, 0, IIC1, IIC0, SSI3, SSI2, SSI1, 0 } },
420 };
421
422 static struct intc_prio_reg prio_registers[] __initdata = {
423         { 0xffd40000, 0, 32, 8, /* INT2PRI0 */ { TMU0, TMU1,
424                                                  TMU2, TMU2_TICPI } },
425         { 0xffd40004, 0, 32, 8, /* INT2PRI1 */ { TMU3, TMU4, TMU5, RTC } },
426         { 0xffd40008, 0, 32, 8, /* INT2PRI2 */ { SCIF0, SCIF1, WDT } },
427         { 0xffd4000c, 0, 32, 8, /* INT2PRI3 */ { HUDI, DMAC, ADC } },
428         { 0xffd40010, 0, 32, 8, /* INT2PRI4 */ { CMT, HAC,
429                                                  PCISERR, PCIINTA } },
430         { 0xffd40014, 0, 32, 8, /* INT2PRI5 */ { PCIINTB, PCIINTC,
431                                                  PCIINTD, PCIC5 } },
432         { 0xffd40018, 0, 32, 8, /* INT2PRI6 */ { SIOF0, USBF, MMCIF, SSI0 } },
433         { 0xffd4001c, 0, 32, 8, /* INT2PRI7 */ { SCIF2, GPIO } },
434         { 0xffd400a0, 0, 32, 8, /* INT2PRI8 */ { SSI3, SSI2, SSI1, 0 } },
435         { 0xffd400a4, 0, 32, 8, /* INT2PRI9 */ { LCDC, 0, IIC1, IIC0 } },
436         { 0xffd400a8, 0, 32, 8, /* INT2PRI10 */ { TPU, SIM, SIOF2, SIOF1 } },
437         { 0xffd400ac, 0, 32, 8, /* INT2PRI11 */ { PCC } },
438         { 0xffd400b0, 0, 32, 8, /* INT2PRI12 */ { 0, 0, USBH, GETHER } },
439         { 0xffd400b4, 0, 32, 8, /* INT2PRI13 */ { 0, 0, STIF1, STIF0 } },
440 };
441
442 static DECLARE_INTC_DESC(intc_desc, "sh7763", vectors, groups,
443                          mask_registers, prio_registers, NULL);
444
445 /* Support for external interrupt pins in IRQ mode */
446 static struct intc_vect irq_vectors[] __initdata = {
447         INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280),
448         INTC_VECT(IRQ2, 0x2c0), INTC_VECT(IRQ3, 0x300),
449         INTC_VECT(IRQ4, 0x340), INTC_VECT(IRQ5, 0x380),
450         INTC_VECT(IRQ6, 0x3c0), INTC_VECT(IRQ7, 0x200),
451 };
452
453 static struct intc_mask_reg irq_mask_registers[] __initdata = {
454         { 0xffd00044, 0xffd00064, 32, /* INTMSK0 / INTMSKCLR0 */
455           { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
456 };
457
458 static struct intc_prio_reg irq_prio_registers[] __initdata = {
459         { 0xffd00010, 0, 32, 4, /* INTPRI */ { IRQ0, IRQ1, IRQ2, IRQ3,
460                                                IRQ4, IRQ5, IRQ6, IRQ7 } },
461 };
462
463 static struct intc_sense_reg irq_sense_registers[] __initdata = {
464         { 0xffd0001c, 32, 2, /* ICR1 */   { IRQ0, IRQ1, IRQ2, IRQ3,
465                                             IRQ4, IRQ5, IRQ6, IRQ7 } },
466 };
467
468 static struct intc_mask_reg irq_ack_registers[] __initdata = {
469         { 0xffd00024, 0, 32, /* INTREQ */
470           { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
471 };
472
473 static DECLARE_INTC_DESC_ACK(intc_irq_desc, "sh7763-irq", irq_vectors,
474                              NULL, irq_mask_registers, irq_prio_registers,
475                              irq_sense_registers, irq_ack_registers);
476
477
478 /* External interrupt pins in IRL mode */
479 static struct intc_vect irl_vectors[] __initdata = {
480         INTC_VECT(IRL_LLLL, 0x200), INTC_VECT(IRL_LLLH, 0x220),
481         INTC_VECT(IRL_LLHL, 0x240), INTC_VECT(IRL_LLHH, 0x260),
482         INTC_VECT(IRL_LHLL, 0x280), INTC_VECT(IRL_LHLH, 0x2a0),
483         INTC_VECT(IRL_LHHL, 0x2c0), INTC_VECT(IRL_LHHH, 0x2e0),
484         INTC_VECT(IRL_HLLL, 0x300), INTC_VECT(IRL_HLLH, 0x320),
485         INTC_VECT(IRL_HLHL, 0x340), INTC_VECT(IRL_HLHH, 0x360),
486         INTC_VECT(IRL_HHLL, 0x380), INTC_VECT(IRL_HHLH, 0x3a0),
487         INTC_VECT(IRL_HHHL, 0x3c0),
488 };
489
490 static struct intc_mask_reg irl3210_mask_registers[] __initdata = {
491         { 0xffd40080, 0xffd40084, 32, /* INTMSK2 / INTMSKCLR2 */
492           { IRL_LLLL, IRL_LLLH, IRL_LLHL, IRL_LLHH,
493             IRL_LHLL, IRL_LHLH, IRL_LHHL, IRL_LHHH,
494             IRL_HLLL, IRL_HLLH, IRL_HLHL, IRL_HLHH,
495             IRL_HHLL, IRL_HHLH, IRL_HHHL, } },
496 };
497
498 static struct intc_mask_reg irl7654_mask_registers[] __initdata = {
499         { 0xffd40080, 0xffd40084, 32, /* INTMSK2 / INTMSKCLR2 */
500           { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
501             IRL_LLLL, IRL_LLLH, IRL_LLHL, IRL_LLHH,
502             IRL_LHLL, IRL_LHLH, IRL_LHHL, IRL_LHHH,
503             IRL_HLLL, IRL_HLLH, IRL_HLHL, IRL_HLHH,
504             IRL_HHLL, IRL_HHLH, IRL_HHHL, } },
505 };
506
507 static DECLARE_INTC_DESC(intc_irl7654_desc, "sh7763-irl7654", irl_vectors,
508                         NULL, irl7654_mask_registers, NULL, NULL);
509
510 static DECLARE_INTC_DESC(intc_irl3210_desc, "sh7763-irl3210", irl_vectors,
511                         NULL, irl3210_mask_registers, NULL, NULL);
512
513 #define INTC_ICR0       0xffd00000
514 #define INTC_INTMSK0    0xffd00044
515 #define INTC_INTMSK1    0xffd00048
516 #define INTC_INTMSK2    0xffd40080
517 #define INTC_INTMSKCLR1 0xffd00068
518 #define INTC_INTMSKCLR2 0xffd40084
519
520 void __init plat_irq_setup(void)
521 {
522         /* disable IRQ7-0 */
523         __raw_writel(0xff000000, INTC_INTMSK0);
524
525         /* disable IRL3-0 + IRL7-4 */
526         __raw_writel(0xc0000000, INTC_INTMSK1);
527         __raw_writel(0xfffefffe, INTC_INTMSK2);
528
529         register_intc_controller(&intc_desc);
530 }
531
532 void __init plat_irq_setup_pins(int mode)
533 {
534         switch (mode) {
535         case IRQ_MODE_IRQ:
536                 /* select IRQ mode for IRL3-0 + IRL7-4 */
537                 __raw_writel(__raw_readl(INTC_ICR0) | 0x00c00000, INTC_ICR0);
538                 register_intc_controller(&intc_irq_desc);
539                 break;
540         case IRQ_MODE_IRL7654:
541                 /* enable IRL7-4 but don't provide any masking */
542                 __raw_writel(0x40000000, INTC_INTMSKCLR1);
543                 __raw_writel(0x0000fffe, INTC_INTMSKCLR2);
544                 break;
545         case IRQ_MODE_IRL3210:
546                 /* enable IRL0-3 but don't provide any masking */
547                 __raw_writel(0x80000000, INTC_INTMSKCLR1);
548                 __raw_writel(0xfffe0000, INTC_INTMSKCLR2);
549                 break;
550         case IRQ_MODE_IRL7654_MASK:
551                 /* enable IRL7-4 and mask using cpu intc controller */
552                 __raw_writel(0x40000000, INTC_INTMSKCLR1);
553                 register_intc_controller(&intc_irl7654_desc);
554                 break;
555         case IRQ_MODE_IRL3210_MASK:
556                 /* enable IRL0-3 and mask using cpu intc controller */
557                 __raw_writel(0x80000000, INTC_INTMSKCLR1);
558                 register_intc_controller(&intc_irl3210_desc);
559                 break;
560         default:
561                 BUG();
562         }
563 }