diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2008-04-01 17:42:25 +1100 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-04-18 15:36:10 +1000 |
commit | 30d6ad251b5dcf497a266c4dc7d38fcde7185422 (patch) | |
tree | 7c71a4e66c4d4c78281690143bba7f7caed5e1ea /arch | |
parent | 032ace7e17f141a5cf350e4ec0c5bf4f5faf1c49 (diff) | |
download | op-kernel-dev-30d6ad251b5dcf497a266c4dc7d38fcde7185422.zip op-kernel-dev-30d6ad251b5dcf497a266c4dc7d38fcde7185422.tar.gz |
[POWERPC] Turn xics_setup_8259_cascade() into a generic pseries_setup_i8259_cascade()
Remove the xics references from xics_setup_8259_cascade(), and merge the
good bits from the almost identical logic in pseries_mpic_init_IRQ().
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/platforms/pseries/setup.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index bef4f68..eb07952 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c @@ -124,28 +124,32 @@ void pseries_8259_cascade(unsigned int irq, struct irq_desc *desc) desc->chip->eoi(irq); } -static void __init xics_setup_8259_cascade(void) +static void __init pseries_setup_i8259_cascade(void) { struct device_node *np, *old, *found = NULL; - int cascade, naddr; + unsigned int cascade; const u32 *addrp; unsigned long intack = 0; + int naddr; - for_each_node_by_type(np, "interrupt-controller") + for_each_node_by_type(np, "interrupt-controller") { if (of_device_is_compatible(np, "chrp,iic")) { found = np; break; } + } + if (found == NULL) { - printk(KERN_DEBUG "xics: no ISA interrupt controller\n"); + printk(KERN_DEBUG "pic: no ISA interrupt controller\n"); return; } + cascade = irq_of_parse_and_map(found, 0); if (cascade == NO_IRQ) { - printk(KERN_ERR "xics: failed to map cascade interrupt"); + printk(KERN_ERR "pic: failed to map cascade interrupt"); return; } - pr_debug("xics: cascade mapped to irq %d\n", cascade); + pr_debug("pic: cascade mapped to irq %d\n", cascade); for (old = of_node_get(found); old != NULL ; old = np) { np = of_get_parent(old); @@ -163,7 +167,7 @@ static void __init xics_setup_8259_cascade(void) intack |= ((unsigned long)addrp[naddr-2]) << 32; } if (intack) - printk(KERN_DEBUG "xics: PCI 8259 intack at 0x%016lx\n", intack); + printk(KERN_DEBUG "pic: PCI 8259 intack at 0x%016lx\n", intack); i8259_init(found, intack); of_node_put(found); set_irq_chained_handler(cascade, pseries_8259_cascade); @@ -251,7 +255,7 @@ static void __init pseries_mpic_init_IRQ(void) static void __init pseries_xics_init_IRQ(void) { xics_init_IRQ(); - xics_setup_8259_cascade(); + pseries_setup_i8259_cascade(); } static void pseries_lpar_enable_pmcs(void) |