Commit f4d4c354 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Paul Mackerras

[POWERPC] Fix CHRP platforms with only 8259

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: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent f49196a5
...@@ -477,8 +477,10 @@ static void __init chrp_find_8259(void) ...@@ -477,8 +477,10 @@ static void __init chrp_find_8259(void)
" address, polling\n"); " address, polling\n");
i8259_init(pic, chrp_int_ack); i8259_init(pic, chrp_int_ack);
if (ppc_md.get_irq == NULL) if (ppc_md.get_irq == NULL) {
ppc_md.get_irq = i8259_irq; ppc_md.get_irq = i8259_irq;
irq_set_default_host(i8259_get_host());
}
if (chrp_mpic != NULL) { if (chrp_mpic != NULL) {
cascade_irq = irq_of_parse_and_map(pic, 0); cascade_irq = irq_of_parse_and_map(pic, 0);
if (cascade_irq == NO_IRQ) if (cascade_irq == NO_IRQ)
......
...@@ -224,6 +224,11 @@ static struct irq_host_ops i8259_host_ops = { ...@@ -224,6 +224,11 @@ static struct irq_host_ops i8259_host_ops = {
.xlate = i8259_host_xlate, .xlate = i8259_host_xlate,
}; };
struct irq_host *i8259_get_host(void)
{
return i8259_host;
}
/** /**
* i8259_init - Initialize the legacy controller * i8259_init - Initialize the legacy controller
* @node: device node of the legacy PIC (can be NULL, but then, it will match * @node: device node of the legacy PIC (can be NULL, but then, it will match
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#ifdef CONFIG_PPC_MERGE #ifdef CONFIG_PPC_MERGE
extern void i8259_init(struct device_node *node, unsigned long intack_addr); extern void i8259_init(struct device_node *node, unsigned long intack_addr);
extern unsigned int i8259_irq(void); extern unsigned int i8259_irq(void);
extern struct irq_host *i8259_get_host(void);
#else #else
extern void i8259_init(unsigned long intack_addr, int offset); extern void i8259_init(unsigned long intack_addr, int offset);
extern int i8259_irq(void); extern int i8259_irq(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment