[POWERPC] Fix CHRP platforms with only 8259
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 25 Oct 2006 03:22:27 +0000 (13:22 +1000)
committerPaul Mackerras <paulus@samba.org>
Wed, 25 Oct 2006 03:49:22 +0000 (13:49 +1000)
On CHRP platforms with only a 8259 controller, we should set the
default IRQ host to the 8259 driver's one for the IRQ probing
fallbacks to work in case the IRQ tree is incorrect (like on
Pegasos for example). Without this fix, we get a bunch of WARN_ON's
during boot.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/chrp/setup.c
arch/powerpc/sysdev/i8259.c
include/asm-powerpc/i8259.h

index cae3d13229b995f88374cf0021dac66577c37d30..49b8dabcbc992996db5a3c53dd00b9035f7e5a05 100644 (file)
@@ -477,8 +477,10 @@ static void __init chrp_find_8259(void)
                       " address, polling\n");
 
        i8259_init(pic, chrp_int_ack);
-       if (ppc_md.get_irq == NULL)
+       if (ppc_md.get_irq == NULL) {
                ppc_md.get_irq = i8259_irq;
+               irq_set_default_host(i8259_get_host());
+       }
        if (chrp_mpic != NULL) {
                cascade_irq = irq_of_parse_and_map(pic, 0);
                if (cascade_irq == NO_IRQ)
index 0450265d73bbe38e628829ea2f9219046c5d7f8e..ad87adc975bcc1a6bbf0a901f8f158b6bc5610d3 100644 (file)
@@ -224,6 +224,11 @@ static struct irq_host_ops i8259_host_ops = {
        .xlate = i8259_host_xlate,
 };
 
+struct irq_host *i8259_get_host(void)
+{
+       return i8259_host;
+}
+
 /**
  * i8259_init - Initialize the legacy controller
  * @node: device node of the legacy PIC (can be NULL, but then, it will match
index 78489fb8d140f4465bd9594906efe15f47ea3ffc..db1362f8c603c2576dffefbe6e23a8c410057984 100644 (file)
@@ -7,6 +7,7 @@
 #ifdef CONFIG_PPC_MERGE
 extern void i8259_init(struct device_node *node, unsigned long intack_addr);
 extern unsigned int i8259_irq(void);
+extern struct irq_host *i8259_get_host(void);
 #else
 extern void i8259_init(unsigned long intack_addr, int offset);
 extern int i8259_irq(void);