diff options
| author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2007-12-19 23:10:02 -0500 |
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2007-12-20 00:18:17 -0500 |
| commit | 54a24cbbd0184faffc37c39cd3a896f4ddac3e03 (patch) | |
| tree | 4ff7a745643406883ba87ee4aa4f527040c6bf71 /arch/powerpc/kernel | |
| parent | 553aa7659bc0e188348f64e978343ed984eb6e56 (diff) | |
[POWERPC] Fix PCI IRQ fallback code to not map IRQ 0
The PCI IRQ code has a fallback when the device-tree parsing fails, that
tries to map the interrupt indicated by PCI_INTERRUPT_LINE if the firmware
set something in there. This is a bit fragile but has proven useful in some
cases so far. However, it's causing us to incorrectly try to map interrupt 0
on various setups, so let's prevent that case, as none of the cases where
the fallback is legit should have an IRQ 0.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel')
| -rw-r--r-- | arch/powerpc/kernel/pci-common.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index 88838b0f8b90..571854f2906c 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c | |||
| @@ -225,10 +225,11 @@ int pci_read_irq_line(struct pci_dev *pci_dev) | |||
| 225 | if (pin == 0) | 225 | if (pin == 0) |
| 226 | return -1; | 226 | return -1; |
| 227 | if (pci_read_config_byte(pci_dev, PCI_INTERRUPT_LINE, &line) || | 227 | if (pci_read_config_byte(pci_dev, PCI_INTERRUPT_LINE, &line) || |
| 228 | line == 0xff) { | 228 | line == 0xff || line == 0) { |
| 229 | return -1; | 229 | return -1; |
| 230 | } | 230 | } |
| 231 | DBG(" -> no map ! Using irq line %d from PCI config\n", line); | 231 | DBG(" -> no map ! Using line %d (pin %d) from PCI config\n", |
| 232 | line, pin); | ||
| 232 | 233 | ||
| 233 | virq = irq_create_mapping(NULL, line); | 234 | virq = irq_create_mapping(NULL, line); |
| 234 | if (virq != NO_IRQ) | 235 | if (virq != NO_IRQ) |
