21 #include <linux/kernel.h>
28 #include <mach/irqs.h>
218 static struct intc_group intca_groups[] __initdata = {
260 static struct intc_mask_reg intca_mask_registers[] __initdata = {
261 { 0xe6940080, 0xe69400c0, 8,
264 { 0xe6940084, 0xe69400c4, 8,
267 { 0xe6940088, 0xe69400c8, 8,
270 { 0xe694008c, 0xe69400cc, 8,
273 { 0xe6940090, 0xe69400d0, 8,
276 { 0xe6940094, 0xe69400d4, 8,
279 { 0xe6940098, 0xe69400d8, 8,
282 { 0xe694009c, 0xe69400dc, 8,
285 { 0xe69400a0, 0xe69400e0, 8,
288 { 0xe69400a4, 0xe69400e4, 8,
291 { 0xe69400a8, 0xe69400e8, 8,
294 { 0xe69400ac, 0xe69400ec, 8,
297 { 0xe69400b0, 0xe69400f0, 8,
300 { 0xe69400b4, 0xe69400f4, 8,
303 { 0xe6950080, 0xe69500c0, 8,
307 { 0xe6950088, 0xe69500c8, 8,
311 { 0xe6950090, 0xe69500d0, 8,
314 { 0xe6950094, 0xe69500d4, 8,
317 { 0xe6950098, 0xe69500d8, 8,
320 { 0xe695009c, 0xe69500dc, 8,
324 { 0xe69500a4, 0xe69500e4, 8,
327 { 0xe69500a8, 0xe69500e8, 8,
332 static struct intc_prio_reg intca_prio_registers[] __initdata = {
336 { 0xe694000c, 0, 16, 4, { 0, 0,
CMT1_2, 0 } },
350 { 0xe6940030, 0, 16, 4, { 0,
CMT3, 0,
RWDT0 } },
352 { 0xe6940038, 0, 16, 4, { 0, 0,
DIRC,
SDHI2 } },
353 { 0xe6950000, 0, 16, 4, {
SHWYSTAT, 0, 0, 0 } },
357 { 0xe6950010, 0, 16, 4, {
USBH1, 0, 0, 0 } },
358 { 0xe6950014, 0, 16, 4, {
USBH2, 0, 0, 0 } },
361 { 0xe6950020, 0, 16, 4, {
HDMI, 0, 0, 0 } },
362 { 0xe6950024, 0, 16, 4, {
RSPI, 0, 0, 0 } },
365 { 0xe6950030, 0, 16, 4, {
IPMMU, 0, 0, 0 } },
366 { 0xe6950034, 0, 16, 4, {
AP_ARM2, 0, 0, 0 } },
376 { 0xe6950050, 0, 16, 4, {
STPRO_4, 0, 0, 0 } },
380 intca_vectors, intca_groups,
381 intca_mask_registers, intca_prio_registers,
445 static struct intc_vect intcs_vectors[] = {
501 static struct intc_group intcs_groups[] __initdata = {
512 { 0xffd20184, 0xffd201c4, 8,
515 { 0xffd20188, 0xffd201c8, 8,
518 { 0xffd2018c, 0xffd201cc, 8,
521 { 0xffd20190, 0xffd201d0, 8,
526 { 0xffd2019c, 0xffd201dc, 8,
529 { 0xffd201a0, 0xffd201e0, 8,
532 { 0xffd201a4, 0xffd201e4, 8,
536 { 0xffd201ac, 0xffd201ec, 8,
545 { 0xffd50190, 0xffd501d0, 8,
549 { 0xffd50198, 0xffd501d8, 8,
552 { 0xffd5019c, 0xffd501dc, 8,
556 { 0, 0, 0, 0, 0, 0, 0, 0,
557 0, 0, 0, 0, 0, 0, 0,
INTCS } },
562 { 0xffd20000, 0, 16, 4, {
CTI,
VOU, 0,
ICB } },
566 { 0xffd20010, 0, 16, 4, { 0,
VPU5HA2,
568 { 0xffd20014, 0, 16, 4, { 0, 0,
572 { 0xffd2001c, 0, 16, 4, { 0, 0, 0,
574 { 0xffd20020, 0, 16, 4, { 0, 0, 0,
IIC0 } },
575 { 0xffd20024, 0, 16, 4, {
CEU20, 0, 0, 0 } },
576 { 0xffd20028, 0, 16, 4, {
VIO6C, 0,
LMB, 0 } },
577 { 0xffd2002c, 0, 16, 4, { 0, 0,
CEU21, 0 } },
588 { 0xffd50024, 0, 16, 4, {
LCDC1, 0, 0, 0 } },
591 { 0xffd50030, 0, 16, 4, {
TMU1, 0, 0, 0 } },
593 { 0xffd50038, 0, 16, 4, { 0,
CPORTS2R, 0, 0 } },
597 static struct resource intcs_resources[] __initdata = {
610 static struct intc_desc intcs_desc __initdata = {
611 .
name =
"r8a7740-intcs",
612 .resource = intcs_resources,
614 .hw =
INTC_HW_DESC(intcs_vectors, intcs_groups, intcs_mask_registers,
618 static void intcs_demux(
unsigned int irq,
struct irq_desc *
desc)
620 void __iomem *
reg = (
void *)irq_get_handler_data(irq);
621 unsigned int evtcodeas =
ioread32(reg);
636 irq_set_chained_handler(
evt2irq(0xf80), intcs_demux);