ARM: pci: create pci_common_init_dev()
authorLinus Walleij <linus.walleij@linaro.org>
Thu, 11 Apr 2013 21:32:28 +0000 (23:32 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 3 Jun 2013 06:02:47 +0000 (08:02 +0200)
commit14d86e725ed034917bc721cf5deea019857b6cf0
tree09ca04236ddfad4c11d04691491e58b1e7597db8
parent301d2d87cb4f826a38548f692e1b3c8c23590a9f
ARM: pci: create pci_common_init_dev()

When working with device tree support for PCI on ARM you run
into a problem when mapping IRQs from the device tree irqmaps:
doing this the code in drivers/of/of_pci_irq.c will try to
find the OF node on the root bridge and this fails, because
bus->dev.of_node is NULL, and that in turn boils down to
the fact that pci_set_bus_of_node() has called
pcibios_get_phb_of_node() from drivers/pci/of.c to obtain
the OF node of the bridge or its parent and none is set
and thus NULL is returned.

Fix this by adding an additional parent argument API for
registering PCI bridges on the ARM architecture called
pci_common_init_dev(), and pass along this parent to
pci_scan_root_bus() called from pcibios_init_hw() in
bios32.c and voila: the IRQ mappings start working:
the OF node can be retrieved from the parent.

Create the old pci_common_init() as a wrapper around
the new call.

Cc: Mike Rapoport <mike@compulab.co.il>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Benjamin Herrenschmitt <benh@kernel.crashing.org>
Reviewed-by: Andrew Murray <andrew.murray@arm.com>
Reviewed-by: Thierry Reding <thierry.reding@avionic-design.de>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
arch/arm/include/asm/mach/pci.h
arch/arm/kernel/bios32.c
This page took 0.026124 seconds and 5 git commands to generate.