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