|
@@ -504,3 +504,63 @@ static struct intc_prio_reg intcs_prio_registers[] = {
|
|
{ 0xffd2001c, 0, 16, 4, /* IPRHS */ { 0, 0, VEU, BEU } },
|
|
{ 0xffd2001c, 0, 16, 4, /* IPRHS */ { 0, 0, VEU, BEU } },
|
|
{ 0xffd20020, 0, 16, 4, /* IPRIS */ { 0, MSIOF, TSIF0, IIC0 } },
|
|
{ 0xffd20020, 0, 16, 4, /* IPRIS */ { 0, MSIOF, TSIF0, IIC0 } },
|
|
{ 0xffd20028, 0, 16, 4, /* IPRKS */ { 0, 0, LMB, 0 } },
|
|
{ 0xffd20028, 0, 16, 4, /* IPRKS */ { 0, 0, LMB, 0 } },
|
|
|
|
+ { 0xffd2002c, 0, 16, 4, /* IPRLS */ { IPMMU, 0, 0, 0 } },
|
|
|
|
+ { 0xffd20030, 0, 16, 4, /* IPRMS */ { IIC2, 0, 0, 0 } },
|
|
|
|
+ { 0xffd50000, 0, 16, 4, /* IPRAS3 */ { RTDMAC2_1, 0, 0, 0 } },
|
|
|
|
+ { 0xffd50004, 0, 16, 4, /* IPRBS3 */ { RTDMAC2_2, 0, 0, 0 } },
|
|
|
|
+ { 0xffd50020, 0, 16, 4, /* IPRIS3 */ { 0, ISP, 0, 0 } },
|
|
|
|
+ { 0xffd50024, 0, 16, 4, /* IPRJS3 */ { LCDC1, CSIRX, DSITX, 0 } },
|
|
|
|
+ { 0xffd50030, 0, 16, 4, /* IPRMS3 */ { TMU1, 0, 0, 0 } },
|
|
|
|
+ { 0xffd50034, 0, 16, 4, /* IPRNS3 */ { CMT4, DSITX1_DSITX1_0,
|
|
|
|
+ DSITX1_DSITX1_1, 0 } },
|
|
|
|
+ { 0xffd50038, 0, 16, 4, /* IPROS3 */ { ENABLED_INTCS, CPORTS2R,
|
|
|
|
+ 0, 0 } },
|
|
|
|
+ { 0xffd5003c, 0, 16, 4, /* IPRPS3 */ { JPU6E, 0, 0, 0 } },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct resource intcs_resources[] __initdata = {
|
|
|
|
+ [0] = {
|
|
|
|
+ .start = 0xffd20000,
|
|
|
|
+ .end = 0xffd201ff,
|
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
|
+ },
|
|
|
|
+ [1] = {
|
|
|
|
+ .start = 0xffd50000,
|
|
|
|
+ .end = 0xffd501ff,
|
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct intc_desc intcs_desc __initdata = {
|
|
|
|
+ .name = "sh7372-intcs",
|
|
|
|
+ .force_enable = ENABLED_INTCS,
|
|
|
|
+ .skip_syscore_suspend = true,
|
|
|
|
+ .resource = intcs_resources,
|
|
|
|
+ .num_resources = ARRAY_SIZE(intcs_resources),
|
|
|
|
+ .hw = INTC_HW_DESC(intcs_vectors, intcs_groups, intcs_mask_registers,
|
|
|
|
+ intcs_prio_registers, NULL, NULL),
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void intcs_demux(unsigned int irq, struct irq_desc *desc)
|
|
|
|
+{
|
|
|
|
+ void __iomem *reg = (void *)irq_get_handler_data(irq);
|
|
|
|
+ unsigned int evtcodeas = ioread32(reg);
|
|
|
|
+
|
|
|
|
+ generic_handle_irq(intcs_evt2irq(evtcodeas));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void __iomem *intcs_ffd2;
|
|
|
|
+static void __iomem *intcs_ffd5;
|
|
|
|
+
|
|
|
|
+void __init sh7372_init_irq(void)
|
|
|
|
+{
|
|
|
|
+ void __iomem *intevtsa;
|
|
|
|
+ int n;
|
|
|
|
+
|
|
|
|
+ intcs_ffd2 = ioremap_nocache(0xffd20000, PAGE_SIZE);
|
|
|
|
+ intevtsa = intcs_ffd2 + 0x100;
|
|
|
|
+ intcs_ffd5 = ioremap_nocache(0xffd50000, PAGE_SIZE);
|
|
|
|
+
|
|
|
|
+ register_intc_controller(&intca_desc);
|
|
|
|
+ register_intc_controller(&intca_irq_pins_lo_desc);
|
|
|
|
+ register_intc_controller(&intca_irq_pins_hi_desc);
|