Commit c87fda50 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Linus Torvalds

[PATCH] ppc32: Fix boot on PowerMac

Tom's recent irq patch broke PowerMac (and possibly others).  I think he
forgot that PReP, CHRP and PowerMac are all built together in a single
kernel image, thus all of those arch_initcall's will end up beeing called,
even on the wrong machine...
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent af200e5a
...@@ -374,6 +374,9 @@ static void __init chrp_find_openpic(void) ...@@ -374,6 +374,9 @@ static void __init chrp_find_openpic(void)
static int __init static int __init
chrp_request_cascade(void) chrp_request_cascade(void)
{ {
if (_machine != _MACH_chrp)
return 0;
/* We have a cascade on OpenPIC IRQ 0, Linux IRQ 16 */ /* We have a cascade on OpenPIC IRQ 0, Linux IRQ 16 */
openpic_hookup_cascade(NUM_8259_INTERRUPTS, "82c59 cascade", openpic_hookup_cascade(NUM_8259_INTERRUPTS, "82c59 cascade",
i8259_irq); i8259_irq);
......
...@@ -961,6 +961,9 @@ prep_irq_canonicalize(u_int irq) ...@@ -961,6 +961,9 @@ prep_irq_canonicalize(u_int irq)
static int __init static int __init
prep_request_cascade(void) prep_request_cascade(void)
{ {
if (_machine != _MACH_prep)
return 0;
if (OpenPIC_Addr != NULL) if (OpenPIC_Addr != NULL)
/* We have a cascade on OpenPIC IRQ 0, Linux IRQ 16 */ /* We have a cascade on OpenPIC IRQ 0, Linux IRQ 16 */
openpic_hookup_cascade(NUM_8259_INTERRUPTS, "82c59 cascade", openpic_hookup_cascade(NUM_8259_INTERRUPTS, "82c59 cascade",
......
...@@ -13,6 +13,7 @@ unsigned char cached_8259[2] = { 0xff, 0xff }; ...@@ -13,6 +13,7 @@ unsigned char cached_8259[2] = { 0xff, 0xff };
static spinlock_t i8259_lock = SPIN_LOCK_UNLOCKED; static spinlock_t i8259_lock = SPIN_LOCK_UNLOCKED;
int i8259_pic_irq_offset; int i8259_pic_irq_offset;
static int i8259_present;
/* /*
* Acknowledge the IRQ using either the PCI host bridge's interrupt * Acknowledge the IRQ using either the PCI host bridge's interrupt
...@@ -154,6 +155,9 @@ static struct resource pic_edgectrl_iores = { ...@@ -154,6 +155,9 @@ static struct resource pic_edgectrl_iores = {
static int __init static int __init
i8259_hook_cascade(void) i8259_hook_cascade(void)
{ {
if (!i8259_present)
return 0;
/* reserve our resources */ /* reserve our resources */
request_irq( i8259_pic_irq_offset + 2, no_action, SA_INTERRUPT, request_irq( i8259_pic_irq_offset + 2, no_action, SA_INTERRUPT,
"82c59 secondary cascade", NULL ); "82c59 secondary cascade", NULL );
...@@ -201,4 +205,6 @@ i8259_init(long intack_addr) ...@@ -201,4 +205,6 @@ i8259_init(long intack_addr)
if (intack_addr != 0) if (intack_addr != 0)
pci_intack = ioremap(intack_addr, 1); pci_intack = ioremap(intack_addr, 1);
i8259_present = 1;
} }
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