• Yinghai Lu's avatar
    PCI: Workaround missing pci_set_master in pci drivers · f41f064c
    Yinghai Lu authored
    Ben Herrenschmidt found that commit 928bea96 ("PCI: Delay enabling
    bridges until they're needed") breaks PCI in some powerpc environments.
    
    The reason is that the PCIe port driver will call pci_enable_device() on
    the bridge, so the device is enabled, but skips pci_set_master because
    pcie_port_auto and no acpi on powerpc.
    
    Because of that, pci_enable_bridge() later on (called as a result of the
    child device driver doing pci_enable_device) will see the bridge as
    already enabled and will not call pci_set_master() on it.
    
    Fixed by add checking in pci_enable_bridge, and call pci_set_master
    if driver skip that.
    
    That will make the code more robot and wade off problem for missing
    pci_set_master in drivers.
    Reported-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    Signed-off-by: default avatarYinghai Lu <yinghai@kernel.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f41f064c
pci.c 115 KB