• Linus Walleij's avatar
    ARM: pci: create pci_common_init_dev() · 14d86e72
    Linus Walleij authored
    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: default avatarAndrew Murray <andrew.murray@arm.com>
    Reviewed-by: default avatarThierry Reding <thierry.reding@avionic-design.de>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    14d86e72
bios32.c 16.9 KB