• Paul Mackerras's avatar
    ppc64: Set up PCI tree from Open Firmware device tree · 4267292b
    Paul Mackerras authored
    This adds code which gives us the option on ppc64 of instantiating the
    PCI tree (the tree of pci_bus and pci_dev structs) from the Open
    Firmware device tree rather than by probing PCI configuration space.
    The OF device tree has a node for each PCI device and bridge in the
    system, with properties that tell us what addresses the firmware has
    configured for them and other details.
    
    There are a couple of reasons why this is needed.  First, on systems
    with a hypervisor, there is a PCI-PCI bridge per slot under the PCI
    host bridges.  These PCI-PCI bridges have special isolation features
    for virtualization.  We can't write to their config space, and we are
    not supposed to be reading their config space either.  The firmware
    tells us about the address ranges that they pass in the OF device
    tree.
    
    Secondly, on powermacs, the interrupt controller is in a PCI device
    that may be behind a PCI-PCI bridge.  If we happened to take an
    interrupt just at the point when the device or a bridge on the path to
    it was disabled for probing, we would crash when we try to access the
    interrupt controller.
    
    I have implemented a platform-specific function which is called for
    each PCI bridge (host or PCI-PCI) to say whether the code should look
    in the device tree or use normal PCI probing for the devices under
    that bridge.  On pSeries machines we use the device tree if we're
    running under a hypervisor, otherwise we use normal probing.  On
    powermacs we use normal probing for the AGP bridge, since the device
    for the AGP bridge itself isn't shown in the device tree (at least on
    my G5), and the device tree for everything else.
    
    This has been tested on a dual G5 powermac, a partition on a POWER5
    machine (running under the hypervisor), and a legacy iSeries
    partition.
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    4267292b
pci.c 32.9 KB