diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/sh/Kconfig | 2 | ||||
-rw-r--r-- | arch/sh/boards/sh03/setup.c | 26 | ||||
-rw-r--r-- | arch/sh/boards/snapgear/setup.c | 30 | ||||
-rw-r--r-- | arch/sh/boards/titan/setup.c | 30 | ||||
-rw-r--r-- | arch/sh/kernel/cpu/sh4/setup-sh7750.c | 14 |
5 files changed, 15 insertions, 87 deletions
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index ceceb05f9dc9..6553325fa437 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
@@ -308,7 +308,7 @@ config SH_MPC1211 | |||
308 | 308 | ||
309 | config SH_SH03 | 309 | config SH_SH03 |
310 | bool "Interface CTP/PCI-SH03" | 310 | bool "Interface CTP/PCI-SH03" |
311 | depends on CPU_SUBTYPE_SH7751 && BROKEN | 311 | depends on CPU_SUBTYPE_SH7751 |
312 | select CPU_HAS_IPR_IRQ | 312 | select CPU_HAS_IPR_IRQ |
313 | select SYS_SUPPORTS_PCI | 313 | select SYS_SUPPORTS_PCI |
314 | help | 314 | help |
diff --git a/arch/sh/boards/sh03/setup.c b/arch/sh/boards/sh03/setup.c index 9c031a8c0a1c..df96312efd45 100644 --- a/arch/sh/boards/sh03/setup.c +++ b/arch/sh/boards/sh03/setup.c | |||
@@ -15,33 +15,9 @@ | |||
15 | #include <asm/sh03/sh03.h> | 15 | #include <asm/sh03/sh03.h> |
16 | #include <asm/addrspace.h> | 16 | #include <asm/addrspace.h> |
17 | 17 | ||
18 | static struct ipr_data ipr_irq_table[] = { | ||
19 | { IRL0_IRQ, 0, IRL0_IPR_POS, IRL0_PRIORITY }, | ||
20 | { IRL1_IRQ, 0, IRL1_IPR_POS, IRL1_PRIORITY }, | ||
21 | { IRL2_IRQ, 0, IRL2_IPR_POS, IRL2_PRIORITY }, | ||
22 | { IRL3_IRQ, 0, IRL3_IPR_POS, IRL3_PRIORITY }, | ||
23 | }; | ||
24 | |||
25 | static unsigned long ipr_offsets[] = { | ||
26 | INTC_IPRD, | ||
27 | }; | ||
28 | |||
29 | static struct ipr_desc ipr_irq_desc = { | ||
30 | .ipr_offsets = ipr_offsets, | ||
31 | .nr_offsets = ARRAY_SIZE(ipr_offsets), | ||
32 | |||
33 | .ipr_data = ipr_irq_table, | ||
34 | .nr_irqs = ARRAY_SIZE(ipr_irq_table), | ||
35 | |||
36 | .chip = { | ||
37 | .name = "IPR-sh03", | ||
38 | }, | ||
39 | }; | ||
40 | |||
41 | static void __init init_sh03_IRQ(void) | 18 | static void __init init_sh03_IRQ(void) |
42 | { | 19 | { |
43 | ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); | 20 | plat_irq_setup_pins(IRQ_MODE_IRQ); |
44 | register_ipr_controller(&ipr_irq_desc); | ||
45 | } | 21 | } |
46 | 22 | ||
47 | extern void *cf_io_base; | 23 | extern void *cf_io_base; |
diff --git a/arch/sh/boards/snapgear/setup.c b/arch/sh/boards/snapgear/setup.c index 84271d85a8dd..2b594f600002 100644 --- a/arch/sh/boards/snapgear/setup.c +++ b/arch/sh/boards/snapgear/setup.c | |||
@@ -68,37 +68,11 @@ module_init(eraseconfig_init); | |||
68 | * IRL3 = crypto | 68 | * IRL3 = crypto |
69 | */ | 69 | */ |
70 | 70 | ||
71 | static struct ipr_data ipr_irq_table[] = { | ||
72 | { IRL0_IRQ, 0, IRL0_IPR_POS, IRL0_PRIORITY }, | ||
73 | { IRL1_IRQ, 0, IRL1_IPR_POS, IRL1_PRIORITY }, | ||
74 | { IRL2_IRQ, 0, IRL2_IPR_POS, IRL2_PRIORITY }, | ||
75 | { IRL3_IRQ, 0, IRL3_IPR_POS, IRL3_PRIORITY }, | ||
76 | }; | ||
77 | |||
78 | static unsigned long ipr_offsets[] = { | ||
79 | INTC_IPRD, | ||
80 | }; | ||
81 | |||
82 | static struct ipr_desc ipr_irq_desc = { | ||
83 | .ipr_offsets = ipr_offsets, | ||
84 | .nr_offsets = ARRAY_SIZE(ipr_offsets), | ||
85 | |||
86 | .ipr_data = ipr_irq_table, | ||
87 | .nr_irqs = ARRAY_SIZE(ipr_irq_table), | ||
88 | |||
89 | .chip = { | ||
90 | .name = "IPR-snapgear", | ||
91 | }, | ||
92 | }; | ||
93 | |||
94 | static void __init init_snapgear_IRQ(void) | 71 | static void __init init_snapgear_IRQ(void) |
95 | { | 72 | { |
96 | /* enable individual interrupt mode for externals */ | ||
97 | ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); | ||
98 | |||
99 | printk("Setup SnapGear IRQ/IPR ...\n"); | 73 | printk("Setup SnapGear IRQ/IPR ...\n"); |
100 | 74 | /* enable individual interrupt mode for externals */ | |
101 | register_ipr_controller(&ipr_irq_desc); | 75 | plat_irq_setup_pins(IRQ_MODE_IRQ); |
102 | } | 76 | } |
103 | 77 | ||
104 | /* | 78 | /* |
diff --git a/arch/sh/boards/titan/setup.c b/arch/sh/boards/titan/setup.c index 606d25a4b870..5de3b2ad71af 100644 --- a/arch/sh/boards/titan/setup.c +++ b/arch/sh/boards/titan/setup.c | |||
@@ -12,38 +12,10 @@ | |||
12 | #include <asm/titan.h> | 12 | #include <asm/titan.h> |
13 | #include <asm/io.h> | 13 | #include <asm/io.h> |
14 | 14 | ||
15 | static struct ipr_data ipr_irq_table[] = { | ||
16 | /* IRQ, IPR idx, shift, prio */ | ||
17 | { TITAN_IRQ_WAN, 3, 12, 8 }, /* eth0 (WAN) */ | ||
18 | { TITAN_IRQ_LAN, 3, 8, 8 }, /* eth1 (LAN) */ | ||
19 | { TITAN_IRQ_MPCIA, 3, 4, 8 }, /* mPCI A (top) */ | ||
20 | { TITAN_IRQ_USB, 3, 0, 8 }, /* mPCI B (bottom), USB */ | ||
21 | }; | ||
22 | |||
23 | static unsigned long ipr_offsets[] = { /* stolen from setup-sh7750.c */ | ||
24 | 0xffd00004UL, /* 0: IPRA */ | ||
25 | 0xffd00008UL, /* 1: IPRB */ | ||
26 | 0xffd0000cUL, /* 2: IPRC */ | ||
27 | 0xffd00010UL, /* 3: IPRD */ | ||
28 | }; | ||
29 | |||
30 | static struct ipr_desc ipr_irq_desc = { | ||
31 | .ipr_offsets = ipr_offsets, | ||
32 | .nr_offsets = ARRAY_SIZE(ipr_offsets), | ||
33 | |||
34 | .ipr_data = ipr_irq_table, | ||
35 | .nr_irqs = ARRAY_SIZE(ipr_irq_table), | ||
36 | |||
37 | .chip = { | ||
38 | .name = "IPR-titan", | ||
39 | }, | ||
40 | }; | ||
41 | static void __init init_titan_irq(void) | 15 | static void __init init_titan_irq(void) |
42 | { | 16 | { |
43 | /* enable individual interrupt mode for externals */ | 17 | /* enable individual interrupt mode for externals */ |
44 | ipr_irq_enable_irlm(); | 18 | plat_irq_setup_pins(IRQ_MODE_IRQ); |
45 | /* register ipr irqs */ | ||
46 | register_ipr_controller(&ipr_irq_desc); | ||
47 | } | 19 | } |
48 | 20 | ||
49 | static struct sh_machine_vector mv_titan __initmv = { | 21 | static struct sh_machine_vector mv_titan __initmv = { |
diff --git a/arch/sh/kernel/cpu/sh4/setup-sh7750.c b/arch/sh/kernel/cpu/sh4/setup-sh7750.c index f2286de22bd5..e313be249840 100644 --- a/arch/sh/kernel/cpu/sh4/setup-sh7750.c +++ b/arch/sh/kernel/cpu/sh4/setup-sh7750.c | |||
@@ -282,13 +282,19 @@ void __init plat_irq_setup(void) | |||
282 | #define INTC_ICR 0xffd00000UL | 282 | #define INTC_ICR 0xffd00000UL |
283 | #define INTC_ICR_IRLM (1<<7) | 283 | #define INTC_ICR_IRLM (1<<7) |
284 | 284 | ||
285 | /* enable individual interrupt mode for external interupts */ | 285 | void __init plat_irq_setup_pins(int mode) |
286 | void __init ipr_irq_enable_irlm(void) | ||
287 | { | 286 | { |
288 | #if defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7091) | 287 | #if defined(CONFIG_CPU_SUBTYPE_SH7750) || defined(CONFIG_CPU_SUBTYPE_SH7091) |
289 | BUG(); /* impossible to mask interrupts on SH7750 and SH7091 */ | 288 | BUG(); /* impossible to mask interrupts on SH7750 and SH7091 */ |
289 | return; | ||
290 | #endif | 290 | #endif |
291 | register_intc_controller(&intc_desc_irlm); | ||
292 | 291 | ||
293 | ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); | 292 | switch (mode) { |
293 | case IRQ_MODE_IRQ: /* individual interrupt mode for IRL3-0 */ | ||
294 | ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); | ||
295 | register_intc_controller(&intc_desc_irlm); | ||
296 | break; | ||
297 | default: | ||
298 | BUG(); | ||
299 | } | ||
294 | } | 300 | } |