[POWERPC] Fix irq routing on some 32-bit PowerMacs
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Mon, 11 Dec 2006 03:09:07 +0000 (14:09 +1100)
committerPaul Mackerras <paulus@samba.org>
Mon, 11 Dec 2006 03:45:53 +0000 (14:45 +1100)
commitdae4828d66ac6db353dee213c594257929a310cb
tree74bbab0309b57d5747726d44118ee26164723a35
parent74e95d5de9d8eb243cda68b546bdb29f6ef0f01c
[POWERPC] Fix irq routing on some 32-bit PowerMacs

The changes to use pci_read_irq_line() broke interrupt parsing
on some 32-bit powermacs (oops).  The reason is a bit obscure.
The code to parse interrupts happens earlier now, during
pcibios_fixup() as the PCI bus is being probed.  However, the
current implementation pci_device_to_OF_node() for 32-bit
powerpc relies, on machines like PowerMac which renumber PCI buses,
on a table called pci_OF_bus_map containing a map of bus numbers
between the kernel and the firmware which is setup only later.
Thus, it fails to match the device node.  In addition, some of
Apple internal PCI devices lack a proper PCI_INTERRUPT_PIN, thus
preventing the fallback mapping code to work.

This patch fixes it by making pci_device_to_OF_node() 32-bit
implementation use a different algorithm that works without
using the pci_OF_bus_map thing (which I intend to deprecate
anyway). It's a bit slower but that function isn't called in
any hot path hopefully.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/pci_32.c