pci/of: Match PCI devices to OF nodes dynamically
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Mon, 11 Apr 2011 01:37:07 +0000 (11:37 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Tue, 7 Jun 2011 23:08:17 +0000 (09:08 +1000)
commit98d9f30c820d509145757e6ecbc36013aa02f7bc
treedd5da915d991352ced56ed849612029339f64198
parent1fa7b6a29c61358cc2ca6f64cef4aa0e1a7ca74c
pci/of: Match PCI devices to OF nodes dynamically

powerpc has two different ways of matching PCI devices to their
corresponding OF node (if any) for historical reasons. The ppc64 one
does a scan looking for matching bus/dev/fn, while the ppc32 one does a
scan looking only for matching dev/fn on each level in order to be
agnostic to busses being renumbered (which Linux does on some
platforms).

This removes both and instead moves the matching code to the PCI core
itself. It's the most logical place to do it: when a pci_dev is created,
we know the parent and thus can do a single level scan for the matching
device_node (if any).

The benefit is that all archs now get the matching for free. There's one
hook the arch might want to provide to match a PHB bus to its device
node. A default weak implementation is provided that looks for the
parent device device node, but it's not entirely reliable on powerpc for
various reasons so powerpc provides its own.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Acked-by: Michal Simek <monstr@monstr.eu>
Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org>
22 files changed:
arch/microblaze/include/asm/pci-bridge.h
arch/microblaze/include/asm/prom.h
arch/microblaze/pci/pci_32.c
arch/powerpc/include/asm/pci-bridge.h
arch/powerpc/include/asm/pci.h
arch/powerpc/include/asm/prom.h
arch/powerpc/kernel/pci-common.c
arch/powerpc/kernel/pci_32.c
arch/powerpc/kernel/pci_dn.c
arch/powerpc/kernel/pci_of_scan.c
arch/powerpc/platforms/powermac/pci.c
arch/sparc/kernel/pci.c
drivers/of/Kconfig
drivers/of/Makefile
drivers/of/of_pci.c
drivers/of/of_pci_irq.c [new file with mode: 0644]
drivers/pci/Makefile
drivers/pci/hotplug/rpadlpar_core.c
drivers/pci/of.c [new file with mode: 0644]
drivers/pci/probe.c
include/linux/of_pci.h
include/linux/pci.h