Commit 25f8f743 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Linus Torvalds

[PATCH] ppc64: Fix some PCI interrupt routing issues on iMac G5

The iMac G5 has some issues with Apple chips not having a valid
PCI_INTERRUPT_PIN.  This patch fixes IRQ routing on PowerMac platforms so
that it only relies on the Open Firmware informations which are correct.
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarJ. Mayer <l_indien@magic.fr>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent d6bf4cce
...@@ -656,13 +656,32 @@ static int __init add_bridge(struct device_node *dev) ...@@ -656,13 +656,32 @@ static int __init add_bridge(struct device_node *dev)
return 0; return 0;
} }
/*
* We use our own read_irq_line here because PCI_INTERRUPT_PIN is
* crap on some of Apple ASICs. We unconditionally use the Open Firmware
* interrupt number as this is always right.
*/
static int pmac_pci_read_irq_line(struct pci_dev *pci_dev)
{
struct device_node *node;
node = pci_device_to_OF_node(pci_dev);
if (node == NULL)
return -1;
if (node->n_intrs == 0)
return -1;
pci_dev->irq = node->intrs[0].line;
pci_write_config_byte(pci_dev, PCI_INTERRUPT_LINE, pci_dev->irq);
return 0;
}
void __init pmac_pcibios_fixup(void) void __init pmac_pcibios_fixup(void)
{ {
struct pci_dev *dev = NULL; struct pci_dev *dev = NULL;
for_each_pci_dev(dev) for_each_pci_dev(dev)
pci_read_irq_line(dev); pmac_pci_read_irq_line(dev);
} }
static void __init pmac_fixup_phb_resources(void) static void __init pmac_fixup_phb_resources(void)
...@@ -771,3 +790,4 @@ static void fixup_k2_sata(struct pci_dev* dev) ...@@ -771,3 +790,4 @@ static void fixup_k2_sata(struct pci_dev* dev)
} }
} }
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SERVERWORKS, 0x0240, fixup_k2_sata); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SERVERWORKS, 0x0240, fixup_k2_sata);
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