summaryrefslogtreecommitdiff
path: root/arch/powerpc/kernel/prom_parse.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-10-07 10:52:00 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-07 10:52:00 -0700
commitba00003aa83a61b615542dd66f5af8fb4a7cee1d (patch)
tree013dde7e89730e54433aa40b5e9d67997931aed6 /arch/powerpc/kernel/prom_parse.c
parent9c8e7f5cc965d30006c917ab19221e06fcc5a4f9 (diff)
parent40a5f7ca07f8e1d77acdba5ae0c11c15cb7520c1 (diff)
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc: [POWERPC] PReP fixup after irq changes [POWERPC] SPU fixup after irq changes [POWERPC] Fix up after irq changes [POWERPC] Fix iseries/smp.c for irq breakage [POWERPC] Fix viocons for irq breakage [POWERPC] Update iseries_defconfig [POWERPC] Fix fsl_soc build breaks [POWERPC] Minor fix for bootargs property [POWERPC] Update MTFSF_L() comment [POWERPC] Update pSeries defconfig for SATA [POWERPC] Don't get PCI IRQ from OF for devices with no IRQ [POWERPC] Fix zImage decompress location [POWERPC] linux,tce-size property is 32 bits [POWERPC] Add DTS for MPC8349E-mITX board [POWERPC] Fix harmless typo [PPC] Fix some irq breakage with ARCH=ppc
Diffstat (limited to 'arch/powerpc/kernel/prom_parse.c')
-rw-r--r--arch/powerpc/kernel/prom_parse.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/arch/powerpc/kernel/prom_parse.c b/arch/powerpc/kernel/prom_parse.c
index 603dff3ad62..17fcb4842fe 100644
--- a/arch/powerpc/kernel/prom_parse.c
+++ b/arch/powerpc/kernel/prom_parse.c
@@ -914,6 +914,17 @@ int of_irq_map_pci(struct pci_dev *pdev, struct of_irq *out_irq)
u8 pin;
int rc;
+ /* We need to first check if the PCI device has a PCI interrupt at all
+ * since we have cases where the device-node might expose non-PCI
+ * interrupts, but the device has no PCI interrupt to it
+ */
+ rc = pci_read_config_byte(pdev, PCI_INTERRUPT_PIN, &pin);
+ if (rc != 0)
+ return rc;
+ /* No pin, exit */
+ if (pin == 0)
+ return -ENODEV;
+
/* Check if we have a device node, if yes, fallback to standard OF
* parsing
*/
@@ -925,12 +936,6 @@ int of_irq_map_pci(struct pci_dev *pdev, struct of_irq *out_irq)
* interrupt spec. we assume #interrupt-cells is 1, which is standard
* for PCI. If you do different, then don't use that routine.
*/
- rc = pci_read_config_byte(pdev, PCI_INTERRUPT_PIN, &pin);
- if (rc != 0)
- return rc;
- /* No pin, exit */
- if (pin == 0)
- return -ENODEV;
/* Now we walk up the PCI tree */
lspec = pin;