diff options
author | davem <davem> | 2002-02-01 00:56:03 +0000 |
---|---|---|
committer | davem <davem> | 2002-02-01 00:56:03 +0000 |
commit | df70ce0ae7fd2f5582fd22d02a2416d4ffa36a1d (patch) | |
tree | 00ee4c85d35310c1c769ea1a2343367ac9725b08 | |
parent | 0f3a7bb114157e01abedb47d1f7ffd6879e7f6b4 (diff) | |
download | netdev-vger-cvs-df70ce0ae7fd2f5582fd22d02a2416d4ffa36a1d.tar.gz |
Do not try to calculate IRQ of empty EBUS
devices. Needed to work around a bug in OBP in Ex000
systems with PCI I/O boards. In that case it does not
compute the fully specified INO for the interrupts
property even though it is an onboard device and has
forth firmware.
-rw-r--r-- | arch/sparc64/kernel/pci_common.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/arch/sparc64/kernel/pci_common.c b/arch/sparc64/kernel/pci_common.c index f738c6179..2d9d26ee9 100644 --- a/arch/sparc64/kernel/pci_common.c +++ b/arch/sparc64/kernel/pci_common.c @@ -1,4 +1,4 @@ -/* $Id: pci_common.c,v 1.28 2002-01-14 05:47:02 davem Exp $ +/* $Id: pci_common.c,v 1.29 2002-02-01 00:56:03 davem Exp $ * pci_common.c: PCI controller common support. * * Copyright (C) 1999 David S. Miller (davem@redhat.com) @@ -670,6 +670,20 @@ static void __init pdev_fixup_irq(struct pci_dev *pdev) int prom_node = pcp->prom_node; int err; + /* If this is an empty EBUS device, sometimes OBP fails to + * give it a valid fully specified interrupts property. + * The EBUS hooked up to SunHME on PCI I/O boards of + * Ex000 systems is one such case. + * + * The interrupt is not important so just ignore it. + */ + if (pdev->vendor == PCI_VENDOR_ID_SUN && + pdev->device == PCI_DEVICE_ID_SUN_EBUS && + !prom_getchild(prom_node)) { + pdev->irq = 0; + return; + } + err = prom_getproperty(prom_node, "interrupts", (char *)&prom_irq, sizeof(prom_irq)); if (err == 0 || err == -1) { |