aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMagnus Damm <damm@igel.co.jp>2007-08-12 02:22:02 -0400
committerPaul Mundt <lethal@linux-sh.org>2007-09-20 22:57:49 -0400
commit6ef5fb2cfcedaab4a43493c8f2305a67c0ce1af6 (patch)
treeba5b4c0a19a1d81047d49488b6fe3e3b02e824cf
parentd6aee69ca11550f3ca325ceaa020ea74e173478f (diff)
sh: intc - add a clear register to struct intc_prio_reg
We need a secondary register member in struct intc_prio_reg to support dual priority registers used by ipi on x3. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r--arch/sh/kernel/cpu/irq/intc.c8
-rw-r--r--arch/sh/kernel/cpu/sh3/setup-sh7705.c16
-rw-r--r--arch/sh/kernel/cpu/sh3/setup-sh770x.c16
-rw-r--r--arch/sh/kernel/cpu/sh3/setup-sh7710.c20
-rw-r--r--arch/sh/kernel/cpu/sh4/setup-sh7750.c14
-rw-r--r--arch/sh/kernel/cpu/sh4/setup-sh7760.c22
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7722.c26
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7780.c24
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-sh7785.c29
-rw-r--r--arch/sh/kernel/cpu/sh4a/setup-shx3.c25
-rw-r--r--include/asm-sh/hw_irq.h2
11 files changed, 105 insertions, 97 deletions
diff --git a/arch/sh/kernel/cpu/irq/intc.c b/arch/sh/kernel/cpu/irq/intc.c
index 56819409a36a..24a8d554799e 100644
--- a/arch/sh/kernel/cpu/irq/intc.c
+++ b/arch/sh/kernel/cpu/irq/intc.c
@@ -59,14 +59,14 @@ static inline unsigned int set_prio_field(struct intc_desc *desc,
59 59
60static void disable_prio_16(struct intc_desc *desc, unsigned int data) 60static void disable_prio_16(struct intc_desc *desc, unsigned int data)
61{ 61{
62 unsigned long addr = _INTC_PTR(desc, prio_regs, data)->reg; 62 unsigned long addr = _INTC_PTR(desc, prio_regs, data)->set_reg;
63 63
64 ctrl_outw(set_prio_field(desc, ctrl_inw(addr), 0, data), addr); 64 ctrl_outw(set_prio_field(desc, ctrl_inw(addr), 0, data), addr);
65} 65}
66 66
67static void enable_prio_16(struct intc_desc *desc, unsigned int data) 67static void enable_prio_16(struct intc_desc *desc, unsigned int data)
68{ 68{
69 unsigned long addr = _INTC_PTR(desc, prio_regs, data)->reg; 69 unsigned long addr = _INTC_PTR(desc, prio_regs, data)->set_reg;
70 unsigned int prio = _INTC_VALUE(data); 70 unsigned int prio = _INTC_VALUE(data);
71 71
72 ctrl_outw(set_prio_field(desc, ctrl_inw(addr), prio, data), addr); 72 ctrl_outw(set_prio_field(desc, ctrl_inw(addr), prio, data), addr);
@@ -74,14 +74,14 @@ static void enable_prio_16(struct intc_desc *desc, unsigned int data)
74 74
75static void disable_prio_32(struct intc_desc *desc, unsigned int data) 75static void disable_prio_32(struct intc_desc *desc, unsigned int data)
76{ 76{
77 unsigned long addr = _INTC_PTR(desc, prio_regs, data)->reg; 77 unsigned long addr = _INTC_PTR(desc, prio_regs, data)->set_reg;
78 78
79 ctrl_outl(set_prio_field(desc, ctrl_inl(addr), 0, data), addr); 79 ctrl_outl(set_prio_field(desc, ctrl_inl(addr), 0, data), addr);
80} 80}
81 81
82static void enable_prio_32(struct intc_desc *desc, unsigned int data) 82static void enable_prio_32(struct intc_desc *desc, unsigned int data)
83{ 83{
84 unsigned long addr = _INTC_PTR(desc, prio_regs, data)->reg; 84 unsigned long addr = _INTC_PTR(desc, prio_regs, data)->set_reg;
85 unsigned int prio = _INTC_VALUE(data); 85 unsigned int prio = _INTC_VALUE(data);
86 86
87 ctrl_outl(set_prio_field(desc, ctrl_inl(addr), prio, data), addr); 87 ctrl_outl(set_prio_field(desc, ctrl_inl(addr), prio, data), addr);
diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7705.c b/arch/sh/kernel/cpu/sh3/setup-sh7705.c
index 568cc08c254b..a1b342e170c6 100644
--- a/arch/sh/kernel/cpu/sh3/setup-sh7705.c
+++ b/arch/sh/kernel/cpu/sh3/setup-sh7705.c
@@ -73,14 +73,14 @@ static struct intc_prio priorities[] = {
73}; 73};
74 74
75static struct intc_prio_reg prio_registers[] = { 75static struct intc_prio_reg prio_registers[] = {
76 { 0xfffffee2, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } }, 76 { 0xfffffee2, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } },
77 { 0xfffffee4, 16, 4, /* IPRB */ { WDT, REF_RCMI, 0, 0 } }, 77 { 0xfffffee4, 0, 16, 4, /* IPRB */ { WDT, REF_RCMI, 0, 0 } },
78 { 0xa4000016, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } }, 78 { 0xa4000016, 0, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } },
79 { 0xa4000018, 16, 4, /* IPRD */ { PINT07, PINT815, IRQ5, IRQ4 } }, 79 { 0xa4000018, 0, 16, 4, /* IPRD */ { PINT07, PINT815, IRQ5, IRQ4 } },
80 { 0xa400001a, 16, 4, /* IPRE */ { DMAC, SCIF0, SCIF2, ADC_ADI } }, 80 { 0xa400001a, 0, 16, 4, /* IPRE */ { DMAC, SCIF0, SCIF2, ADC_ADI } },
81 { 0xa4080000, 16, 4, /* IPRF */ { 0, 0, USB } }, 81 { 0xa4080000, 0, 16, 4, /* IPRF */ { 0, 0, USB } },
82 { 0xa4080002, 16, 4, /* IPRG */ { TPU0, TPU1 } }, 82 { 0xa4080002, 0, 16, 4, /* IPRG */ { TPU0, TPU1 } },
83 { 0xa4080004, 16, 4, /* IPRH */ { TPU2, TPU3 } }, 83 { 0xa4080004, 0, 16, 4, /* IPRH */ { TPU2, TPU3 } },
84 84
85}; 85};
86 86
diff --git a/arch/sh/kernel/cpu/sh3/setup-sh770x.c b/arch/sh/kernel/cpu/sh3/setup-sh770x.c
index eef505b43f0c..2980c44ffb2f 100644
--- a/arch/sh/kernel/cpu/sh3/setup-sh770x.c
+++ b/arch/sh/kernel/cpu/sh3/setup-sh770x.c
@@ -89,22 +89,22 @@ static struct intc_prio priorities[] = {
89}; 89};
90 90
91static struct intc_prio_reg prio_registers[] = { 91static struct intc_prio_reg prio_registers[] = {
92 { 0xfffffee2, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } }, 92 { 0xfffffee2, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } },
93 { 0xfffffee4, 16, 4, /* IPRB */ { WDT, REF, SCI, 0 } }, 93 { 0xfffffee4, 0, 16, 4, /* IPRB */ { WDT, REF, SCI, 0 } },
94#if defined(CONFIG_CPU_SUBTYPE_SH7706) || \ 94#if defined(CONFIG_CPU_SUBTYPE_SH7706) || \
95 defined(CONFIG_CPU_SUBTYPE_SH7707) || \ 95 defined(CONFIG_CPU_SUBTYPE_SH7707) || \
96 defined(CONFIG_CPU_SUBTYPE_SH7709) 96 defined(CONFIG_CPU_SUBTYPE_SH7709)
97 { 0xa4000016, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } }, 97 { 0xa4000016, 0, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } },
98 { 0xa4000018, 16, 4, /* IPRD */ { 0, 0, IRQ5, IRQ4 } }, 98 { 0xa4000018, 0, 16, 4, /* IPRD */ { 0, 0, IRQ5, IRQ4 } },
99 { 0xa400001a, 16, 4, /* IPRE */ { DMAC, 0, SCIF2, ADC_ADI } }, 99 { 0xa400001a, 0, 16, 4, /* IPRE */ { DMAC, 0, SCIF2, ADC_ADI } },
100#endif 100#endif
101#if defined(CONFIG_CPU_SUBTYPE_SH7707) || \ 101#if defined(CONFIG_CPU_SUBTYPE_SH7707) || \
102 defined(CONFIG_CPU_SUBTYPE_SH7709) 102 defined(CONFIG_CPU_SUBTYPE_SH7709)
103 { 0xa4000018, 16, 4, /* IPRD */ { PINT07, PINT815, } }, 103 { 0xa4000018, 0, 16, 4, /* IPRD */ { PINT07, PINT815, } },
104 { 0xa400001a, 16, 4, /* IPRE */ { 0, SCIF0 } }, 104 { 0xa400001a, 0, 16, 4, /* IPRE */ { 0, SCIF0 } },
105#endif 105#endif
106#if defined(CONFIG_CPU_SUBTYPE_SH7707) 106#if defined(CONFIG_CPU_SUBTYPE_SH7707)
107 { 0xa400001c, 16, 4, /* IPRF */ { 0, LCDC, PCC0, PCC1, } }, 107 { 0xa400001c, 0, 16, 4, /* IPRF */ { 0, LCDC, PCC0, PCC1, } },
108#endif 108#endif
109}; 109};
110 110
diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7710.c b/arch/sh/kernel/cpu/sh3/setup-sh7710.c
index eb55ac9dbf71..5aa77710e42b 100644
--- a/arch/sh/kernel/cpu/sh3/setup-sh7710.c
+++ b/arch/sh/kernel/cpu/sh3/setup-sh7710.c
@@ -86,18 +86,18 @@ static struct intc_prio priorities[] = {
86}; 86};
87 87
88static struct intc_prio_reg prio_registers[] = { 88static struct intc_prio_reg prio_registers[] = {
89 { 0xfffffee2, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } }, 89 { 0xfffffee2, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } },
90 { 0xfffffee4, 16, 4, /* IPRB */ { WDT, REF, 0, 0 } }, 90 { 0xfffffee4, 0, 16, 4, /* IPRB */ { WDT, REF, 0, 0 } },
91 { 0xa4000016, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } }, 91 { 0xa4000016, 0, 16, 4, /* IPRC */ { IRQ3, IRQ2, IRQ1, IRQ0 } },
92 { 0xa4000018, 16, 4, /* IPRD */ { 0, 0, IRQ5, IRQ4 } }, 92 { 0xa4000018, 0, 16, 4, /* IPRD */ { 0, 0, IRQ5, IRQ4 } },
93 { 0xa400001a, 16, 4, /* IPRE */ { DMAC1, SCIF0, SCIF1 } }, 93 { 0xa400001a, 0, 16, 4, /* IPRE */ { DMAC1, SCIF0, SCIF1 } },
94 { 0xa4080000, 16, 4, /* IPRF */ { 0, DMAC2 } }, 94 { 0xa4080000, 0, 16, 4, /* IPRF */ { 0, DMAC2 } },
95#ifdef CONFIG_CPU_SUBTYPE_SH7710 95#ifdef CONFIG_CPU_SUBTYPE_SH7710
96 { 0xa4080000, 16, 4, /* IPRF */ { IPSEC } }, 96 { 0xa4080000, 0, 16, 4, /* IPRF */ { IPSEC } },
97#endif 97#endif
98 { 0xa4080002, 16, 4, /* IPRG */ { EDMAC0, EDMAC1, EDMAC2 } }, 98 { 0xa4080002, 0, 16, 4, /* IPRG */ { EDMAC0, EDMAC1, EDMAC2 } },
99 { 0xa4080004, 16, 4, /* IPRH */ { 0, 0, 0, SIOF0 } }, 99 { 0xa4080004, 0, 16, 4, /* IPRH */ { 0, 0, 0, SIOF0 } },
100 { 0xa4080006, 16, 4, /* IPRI */ { 0, 0, SIOF1 } }, 100 { 0xa4080006, 0, 16, 4, /* IPRI */ { 0, 0, SIOF1 } },
101}; 101};
102 102
103static DECLARE_INTC_DESC(intc_desc, "sh7710", vectors, groups, 103static DECLARE_INTC_DESC(intc_desc, "sh7710", vectors, groups,
diff --git a/arch/sh/kernel/cpu/sh4/setup-sh7750.c b/arch/sh/kernel/cpu/sh4/setup-sh7750.c
index e313be249840..062c3c1b2431 100644
--- a/arch/sh/kernel/cpu/sh4/setup-sh7750.c
+++ b/arch/sh/kernel/cpu/sh4/setup-sh7750.c
@@ -133,13 +133,13 @@ static struct intc_prio priorities[] = {
133}; 133};
134 134
135static struct intc_prio_reg prio_registers[] = { 135static struct intc_prio_reg prio_registers[] = {
136 { 0xffd00004, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } }, 136 { 0xffd00004, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, RTC } },
137 { 0xffd00008, 16, 4, /* IPRB */ { WDT, REF, SCI1, 0 } }, 137 { 0xffd00008, 0, 16, 4, /* IPRB */ { WDT, REF, SCI1, 0 } },
138 { 0xffd0000c, 16, 4, /* IPRC */ { GPIOI, DMAC, SCIF, HUDI } }, 138 { 0xffd0000c, 0, 16, 4, /* IPRC */ { GPIOI, DMAC, SCIF, HUDI } },
139 { 0xffd00010, 16, 4, /* IPRD */ { IRL0, IRL1, IRL2, IRL3 } }, 139 { 0xffd00010, 0, 16, 4, /* IPRD */ { IRL0, IRL1, IRL2, IRL3 } },
140 { 0xfe080000, 32, 4, /* INTPRI00 */ { 0, 0, 0, 0, 140 { 0xfe080000, 0, 32, 4, /* INTPRI00 */ { 0, 0, 0, 0,
141 TMU4, TMU3, 141 TMU4, TMU3,
142 PCIC1, PCIC0_PCISERR } }, 142 PCIC1, PCIC0_PCISERR } },
143}; 143};
144 144
145static DECLARE_INTC_DESC(intc_desc, "sh7750", vectors, groups, 145static DECLARE_INTC_DESC(intc_desc, "sh7750", vectors, groups,
diff --git a/arch/sh/kernel/cpu/sh4/setup-sh7760.c b/arch/sh/kernel/cpu/sh4/setup-sh7760.c
index 6a6686d71fbc..6b4e48cbe7ff 100644
--- a/arch/sh/kernel/cpu/sh4/setup-sh7760.c
+++ b/arch/sh/kernel/cpu/sh4/setup-sh7760.c
@@ -118,17 +118,17 @@ static struct intc_mask_reg mask_registers[] = {
118}; 118};
119 119
120static struct intc_prio_reg prio_registers[] = { 120static struct intc_prio_reg prio_registers[] = {
121 { 0xffd00004, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2 } }, 121 { 0xffd00004, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2 } },
122 { 0xffd00008, 16, 4, /* IPRB */ { WDT, REF, 0, 0 } }, 122 { 0xffd00008, 0, 16, 4, /* IPRB */ { WDT, REF, 0, 0 } },
123 { 0xffd0000c, 16, 4, /* IPRC */ { GPIOI, DMAC, 0, HUDI } }, 123 { 0xffd0000c, 0, 16, 4, /* IPRC */ { GPIOI, DMAC, 0, HUDI } },
124 { 0xffd00010, 16, 4, /* IPRD */ { IRL0, IRL1, IRL2, IRL3 } }, 124 { 0xffd00010, 0, 16, 4, /* IPRD */ { IRL0, IRL1, IRL2, IRL3 } },
125 { 0xfe080000, 32, 4, /* INTPRI00 */ { IRQ4, IRQ5, IRQ6, IRQ7 } }, 125 { 0xfe080000, 0, 32, 4, /* INTPRI00 */ { IRQ4, IRQ5, IRQ6, IRQ7 } },
126 { 0xfe080004, 32, 4, /* INTPRI04 */ { HCAN20, HCAN21, SSI0, SSI1, 126 { 0xfe080004, 0, 32, 4, /* INTPRI04 */ { HCAN20, HCAN21, SSI0, SSI1,
127 HAC0, HAC1, I2C0, I2C1 } }, 127 HAC0, HAC1, I2C0, I2C1 } },
128 { 0xfe080008, 32, 4, /* INTPRI08 */ { USB, LCDC, DMABRG, SCIF0, 128 { 0xfe080008, 0, 32, 4, /* INTPRI08 */ { USB, LCDC, DMABRG, SCIF0,
129 SCIF1, SCIF2, SIM, HSPI } }, 129 SCIF1, SCIF2, SIM, HSPI } },
130 { 0xfe08000c, 32, 4, /* INTPRI0C */ { 0, 0, MMCIF, 0, 130 { 0xfe08000c, 0, 32, 4, /* INTPRI0C */ { 0, 0, MMCIF, 0,
131 MFI, 0, ADC, CMT } }, 131 MFI, 0, ADC, CMT } },
132}; 132};
133 133
134static DECLARE_INTC_DESC(intc_desc, "sh7760", vectors, groups, 134static DECLARE_INTC_DESC(intc_desc, "sh7760", vectors, groups,
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c
index 25b913e07e2c..ae63635cf1ef 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c
@@ -169,19 +169,19 @@ static struct intc_mask_reg mask_registers[] = {
169}; 169};
170 170
171static struct intc_prio_reg prio_registers[] = { 171static struct intc_prio_reg prio_registers[] = {
172 { 0xa4080000, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, IRDA } }, 172 { 0xa4080000, 0, 16, 4, /* IPRA */ { TMU0, TMU1, TMU2, IRDA } },
173 { 0xa4080004, 16, 4, /* IPRB */ { JPU, LCDC, SIM } }, 173 { 0xa4080004, 0, 16, 4, /* IPRB */ { JPU, LCDC, SIM } },
174 { 0xa4080008, 16, 4, /* IPRC */ { } }, 174 { 0xa4080008, 0, 16, 4, /* IPRC */ { } },
175 { 0xa408000c, 16, 4, /* IPRD */ { } }, 175 { 0xa408000c, 0, 16, 4, /* IPRD */ { } },
176 { 0xa4080010, 16, 4, /* IPRE */ { DMAC0123, VIOVOU, 0, VPU } }, 176 { 0xa4080010, 0, 16, 4, /* IPRE */ { DMAC0123, VIOVOU, 0, VPU } },
177 { 0xa4080014, 16, 4, /* IPRF */ { KEYSC, DMAC45, USB, CMT } }, 177 { 0xa4080014, 0, 16, 4, /* IPRF */ { KEYSC, DMAC45, USB, CMT } },
178 { 0xa4080018, 16, 4, /* IPRG */ { SCIF0, SCIF1, SCIF2 } }, 178 { 0xa4080018, 0, 16, 4, /* IPRG */ { SCIF0, SCIF1, SCIF2 } },
179 { 0xa408001c, 16, 4, /* IPRH */ { SIOF0, SIOF1, FLCTL, I2C } }, 179 { 0xa408001c, 0, 16, 4, /* IPRH */ { SIOF0, SIOF1, FLCTL, I2C } },
180 { 0xa4080020, 16, 4, /* IPRI */ { SIO, 0, TSIF, RTC } }, 180 { 0xa4080020, 0, 16, 4, /* IPRI */ { SIO, 0, TSIF, RTC } },
181 { 0xa4080024, 16, 4, /* IPRJ */ { 0, 0, SIU } }, 181 { 0xa4080024, 0, 16, 4, /* IPRJ */ { 0, 0, SIU } },
182 { 0xa4080028, 16, 4, /* IPRK */ { 0, 0, 0, SDHI } }, 182 { 0xa4080028, 0, 16, 4, /* IPRK */ { 0, 0, 0, SDHI } },
183 { 0xa408002c, 16, 4, /* IPRL */ { TWODG, 0, TPU } }, 183 { 0xa408002c, 0, 16, 4, /* IPRL */ { TWODG, 0, TPU } },
184 { 0xa4140010, 32, 4, /* INTPRI00 */ 184 { 0xa4140010, 0, 32, 4, /* INTPRI00 */
185 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } }, 185 { IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },
186}; 186};
187 187
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c
index a4127ec15203..c9965c0dde6d 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7780.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7780.c
@@ -181,15 +181,17 @@ static struct intc_mask_reg mask_registers[] = {
181}; 181};
182 182
183static struct intc_prio_reg prio_registers[] = { 183static struct intc_prio_reg prio_registers[] = {
184 { 0xffd40000, 32, 8, /* INT2PRI0 */ { TMU0, TMU1, TMU2, TMU2_TICPI } }, 184 { 0xffd40000, 0, 32, 8, /* INT2PRI0 */ { TMU0, TMU1,
185 { 0xffd40004, 32, 8, /* INT2PRI1 */ { TMU3, TMU4, TMU5, RTC } }, 185 TMU2, TMU2_TICPI } },
186 { 0xffd40008, 32, 8, /* INT2PRI2 */ { SCIF0, SCIF1, WDT } }, 186 { 0xffd40004, 0, 32, 8, /* INT2PRI1 */ { TMU3, TMU4, TMU5, RTC } },
187 { 0xffd4000c, 32, 8, /* INT2PRI3 */ { HUDI, DMAC0, DMAC1 } }, 187 { 0xffd40008, 0, 32, 8, /* INT2PRI2 */ { SCIF0, SCIF1, WDT } },
188 { 0xffd40010, 32, 8, /* INT2PRI4 */ { CMT, HAC, PCISERR, PCIINTA, } }, 188 { 0xffd4000c, 0, 32, 8, /* INT2PRI3 */ { HUDI, DMAC0, DMAC1 } },
189 { 0xffd40014, 32, 8, /* INT2PRI5 */ { PCIINTB, PCIINTC, 189 { 0xffd40010, 0, 32, 8, /* INT2PRI4 */ { CMT, HAC,
190 PCIINTD, PCIC5 } }, 190 PCISERR, PCIINTA, } },
191 { 0xffd40018, 32, 8, /* INT2PRI6 */ { SIOF, HSPI, MMCIF, SSI } }, 191 { 0xffd40014, 0, 32, 8, /* INT2PRI5 */ { PCIINTB, PCIINTC,
192 { 0xffd4001c, 32, 8, /* INT2PRI7 */ { FLCTL, GPIO } }, 192 PCIINTD, PCIC5 } },
193 { 0xffd40018, 0, 32, 8, /* INT2PRI6 */ { SIOF, HSPI, MMCIF, SSI } },
194 { 0xffd4001c, 0, 32, 8, /* INT2PRI7 */ { FLCTL, GPIO } },
193}; 195};
194 196
195static DECLARE_INTC_DESC(intc_desc, "sh7780", vectors, groups, priorities, 197static DECLARE_INTC_DESC(intc_desc, "sh7780", vectors, groups, priorities,
@@ -210,8 +212,8 @@ static struct intc_mask_reg irq_mask_registers[] = {
210}; 212};
211 213
212static struct intc_prio_reg irq_prio_registers[] = { 214static struct intc_prio_reg irq_prio_registers[] = {
213 { 0xffd00010, 32, 4, /* INTPRI */ { IRQ0, IRQ1, IRQ2, IRQ3, 215 { 0xffd00010, 0, 32, 4, /* INTPRI */ { IRQ0, IRQ1, IRQ2, IRQ3,
214 IRQ4, IRQ5, IRQ6, IRQ7 } }, 216 IRQ4, IRQ5, IRQ6, IRQ7 } },
215}; 217};
216 218
217static struct intc_sense_reg irq_sense_registers[] = { 219static struct intc_sense_reg irq_sense_registers[] = {
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c
index c49fcb0800cc..a33d6a54c03d 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-sh7785.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-sh7785.c
@@ -206,19 +206,22 @@ static struct intc_mask_reg mask_registers[] = {
206}; 206};
207 207
208static struct intc_prio_reg prio_registers[] = { 208static struct intc_prio_reg prio_registers[] = {
209 { 0xffd00010, 32, 4, /* INTPRI */ { IRQ0, IRQ1, IRQ2, IRQ3, 209 { 0xffd00010, 0, 32, 4, /* INTPRI */ { IRQ0, IRQ1, IRQ2, IRQ3,
210 IRQ4, IRQ5, IRQ6, IRQ7 } }, 210 IRQ4, IRQ5, IRQ6, IRQ7 } },
211 { 0xffd40000, 32, 8, /* INT2PRI0 */ { TMU0, TMU1, TMU2, TMU2_TICPI } }, 211 { 0xffd40000, 0, 32, 8, /* INT2PRI0 */ { TMU0, TMU1,
212 { 0xffd40004, 32, 8, /* INT2PRI1 */ { TMU3, TMU4, TMU5, } }, 212 TMU2, TMU2_TICPI } },
213 { 0xffd40008, 32, 8, /* INT2PRI2 */ { SCIF0, SCIF1, SCIF2, SCIF3 } }, 213 { 0xffd40004, 0, 32, 8, /* INT2PRI1 */ { TMU3, TMU4, TMU5, } },
214 { 0xffd4000c, 32, 8, /* INT2PRI3 */ { SCIF4, SCIF5, WDT, } }, 214 { 0xffd40008, 0, 32, 8, /* INT2PRI2 */ { SCIF0, SCIF1,
215 { 0xffd40010, 32, 8, /* INT2PRI4 */ { HUDI, DMAC0, DMAC1, } }, 215 SCIF2, SCIF3 } },
216 { 0xffd40014, 32, 8, /* INT2PRI5 */ { HAC0, HAC1, PCISERR, PCIINTA } }, 216 { 0xffd4000c, 0, 32, 8, /* INT2PRI3 */ { SCIF4, SCIF5, WDT, } },
217 { 0xffd40018, 32, 8, /* INT2PRI6 */ { PCIINTB, PCIINTC, 217 { 0xffd40010, 0, 32, 8, /* INT2PRI4 */ { HUDI, DMAC0, DMAC1, } },
218 PCIINTD, PCIC5 } }, 218 { 0xffd40014, 0, 32, 8, /* INT2PRI5 */ { HAC0, HAC1,
219 { 0xffd4001c, 32, 8, /* INT2PRI7 */ { SIOF, HSPI, MMCIF, } }, 219 PCISERR, PCIINTA } },
220 { 0xffd40020, 32, 8, /* INT2PRI8 */ { FLCTL, GPIO, SSI0, SSI1, } }, 220 { 0xffd40018, 0, 32, 8, /* INT2PRI6 */ { PCIINTB, PCIINTC,
221 { 0xffd40024, 32, 8, /* INT2PRI9 */ { DU, GDTA, } }, 221 PCIINTD, PCIC5 } },
222 { 0xffd4001c, 0, 32, 8, /* INT2PRI7 */ { SIOF, HSPI, MMCIF, } },
223 { 0xffd40020, 0, 32, 8, /* INT2PRI8 */ { FLCTL, GPIO, SSI0, SSI1, } },
224 { 0xffd40024, 0, 32, 8, /* INT2PRI9 */ { DU, GDTA, } },
222}; 225};
223 226
224static DECLARE_INTC_DESC(intc_desc, "sh7785", vectors, groups, priorities, 227static DECLARE_INTC_DESC(intc_desc, "sh7785", vectors, groups, priorities,
diff --git a/arch/sh/kernel/cpu/sh4a/setup-shx3.c b/arch/sh/kernel/cpu/sh4a/setup-shx3.c
index 610343ea9a84..2c13f9ceac74 100644
--- a/arch/sh/kernel/cpu/sh4a/setup-shx3.c
+++ b/arch/sh/kernel/cpu/sh4a/setup-shx3.c
@@ -192,18 +192,21 @@ static struct intc_mask_reg mask_registers[] = {
192}; 192};
193 193
194static struct intc_prio_reg prio_registers[] = { 194static struct intc_prio_reg prio_registers[] = {
195 { 0xfe410010, 32, 4, /* INTPRI */ { IRQ0, IRQ1, IRQ2, IRQ3 } }, 195 { 0xfe410010, 0, 32, 4, /* INTPRI */ { IRQ0, IRQ1, IRQ2, IRQ3 } },
196 196
197 { 0xfe410800, 32, 4, /* INT2PRI0 */ { 0, HUDII, TMU5, TMU4, 197 { 0xfe410800, 0, 32, 4, /* INT2PRI0 */ { 0, HUDII, TMU5, TMU4,
198 TMU3, TMU2, TMU1, TMU0 } }, 198 TMU3, TMU2, TMU1, TMU0 } },
199 { 0xfe410804, 32, 4, /* INT2PRI1 */ { DTU3, DTU2, DTU1, DTU0, 199 { 0xfe410804, 0, 32, 4, /* INT2PRI1 */ { DTU3, DTU2, DTU1, DTU0,
200 SCIF3, SCIF2, SCIF1, SCIF0 } }, 200 SCIF3, SCIF2,
201 { 0xfe410808, 32, 4, /* INT2PRI2 */ { DMAC1, DMAC0, PCII56789, PCII4, 201 SCIF1, SCIF0 } },
202 PCII3, PCII2, PCII1, PCII0 } }, 202 { 0xfe410808, 0, 32, 4, /* INT2PRI2 */ { DMAC1, DMAC0,
203 { 0xfe41080c, 32, 4, /* INT2PRI3 */ { FE1, FE0, ATAPI, VCORE0, 203 PCII56789, PCII4,
204 VIN1, VIN0, IIC, DU} }, 204 PCII3, PCII2,
205 { 0xfe410810, 32, 4, /* INT2PRI4 */ { 0, 0, PAM, GPIO3, 205 PCII1, PCII0 } },
206 GPIO2, GPIO1, GPIO0, IRM } }, 206 { 0xfe41080c, 0, 32, 4, /* INT2PRI3 */ { FE1, FE0, ATAPI, VCORE0,
207 VIN1, VIN0, IIC, DU} },
208 { 0xfe410810, 0, 32, 4, /* INT2PRI4 */ { 0, 0, PAM, GPIO3,
209 GPIO2, GPIO1, GPIO0, IRM } },
207}; 210};
208 211
209static DECLARE_INTC_DESC(intc_desc, "shx3", vectors, groups, priorities, 212static DECLARE_INTC_DESC(intc_desc, "shx3", vectors, groups, priorities,
diff --git a/include/asm-sh/hw_irq.h b/include/asm-sh/hw_irq.h
index a4086ea313c7..6c759b2b8929 100644
--- a/include/asm-sh/hw_irq.h
+++ b/include/asm-sh/hw_irq.h
@@ -53,7 +53,7 @@ struct intc_mask_reg {
53}; 53};
54 54
55struct intc_prio_reg { 55struct intc_prio_reg {
56 unsigned long reg, reg_width, field_width; 56 unsigned long set_reg, clr_reg, reg_width, field_width;
57 intc_enum enum_ids[16]; 57 intc_enum enum_ids[16];
58}; 58};
59 59