• Oliver O'Halloran's avatar
    powerpc/powernv: Disable native PCIe port management · 9d72dcef
    Oliver O'Halloran authored
    On PowerNV the PCIe topology is (currently) managed by the powernv platform
    code in Linux in cooperation with the platform firmware. Linux's native
    PCIe port service drivers operate independently of both and this can cause
    problems.
    
    The main issue is that the portbus driver will conflict with the platform
    specific hotplug driver (pnv_php) over ownership of the MSI used to notify
    the host when a hotplug event occurs. The portbus driver claims this MSI on
    behalf of the individual port services because the same interrupt is used
    for hotplug events, PMEs (on root ports), and link bandwidth change
    notifications. The portbus driver will always claim the interrupt even if
    the individual port service drivers, such as pciehp, are compiled out.
    
    The second, bigger, problem is that the hotplug port service driver
    fundamentally does not work on PowerNV. The platform assumes that all
    PCI devices have a corresponding arch-specific handle derived from the DT
    node for the device (pci_dn) and without one the platform will not allow
    a PCI device to be enabled. This problem is largely due to historical
    baggage, but it can't be resolved without significant re-factoring of the
    platform PCI support.
    
    We can fix these problems in the interim by setting the
    "pcie_ports_disabled" flag during platform initialisation. The flag
    indicates the platform owns the PCIe ports which stops the portbus driver
    from being registered.
    
    This does have the side effect of disabling all port services drivers
    that is: AER, PME, BW notifications, hotplug, and DPC. However, this is
    not a huge disadvantage on PowerNV since these services are either unused
    or handled through other means.
    
    Fixes: 66725152 ("PCI/hotplug: PowerPC PowerNV PCI hotplug driver")
    Signed-off-by: default avatarOliver O'Halloran <oohall@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20191118065553.30362-1-oohall@gmail.com
    9d72dcef
pci.c 27.7 KB