• Gabriele Paoloni's avatar
    ARM/PCI: Replace pci_sys_data->align_resource with global function pointer · b3a72384
    Gabriele Paoloni authored
    dw_pcie_host_init() creates the PCI host bridge with pci_common_init_dev(),
    an ARM-specific function that supplies the ARM-specific pci_sys_data
    structure as the PCI "sysdata".  To use dw_pcie_host_init() on other
    architectures, we will copy the internals of pci_common_init_dev() into
    pcie-designware.c instead of calling it, and dw_pcie_host_init() will
    supply the DesignWare pcie_port structure as "sysdata".
    
    Most ARM "sysdata" users are specific to non-DesignWare host bridges;
    they'll be unaffected because those bridges will continue to have the ARM
    pci_sys_data.  Most of the rest are ARM-generic functions called by
    pci_common_init_dev(); these will be unaffected because dw_pcie_host_init()
    will no longer call pci_common_init().
    
    But the ARM pcibios_align_resource() can be called by the PCI core for any
    bridge, so it can't depend on sysdata since it may be either pci_sys_data
    or pcie_port.
    
    Remove the pcibios_align_resource() dependency on sysdata by replacing the
    pci_sys_data->align_resource pointer with a global function pointer.
    
    This is less general (we can no longer have per-host bridge
    align_resource() methods), but the pci_sys_data->align_resource pointer was
    used only by Marvell (see mvebu_pcie_enable()), so this would only be a
    problem if we had a system with a combination of Marvell and other host
    bridges
    
    [bhelgaas: changelog]
    Signed-off-by: default avatarGabriele Paoloni <gabriele.paoloni@huawei.com>
    Signed-off-by: default avatarZhou Wang <wangzhou1@hisilicon.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Acked-by: default avatarPratyush Anand <pratyush.anand@gmail.com>
    b3a72384
pci.h 2.45 KB