Merge branch 'next-sriov' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/power...
[firefly-linux-kernel-4.4.55.git] / arch / powerpc / kernel / pci-common.c
index 9a306ff304ae1ebc3653575f4da977ea6fc8877a..0d054068a21d5849bc949320bfcc5835ac92dfdb 100644 (file)
@@ -76,7 +76,7 @@ struct pci_controller *pcibios_alloc_controller(struct device_node *dev)
        list_add_tail(&phb->list_node, &hose_list);
        spin_unlock(&hose_spinlock);
        phb->dn = dev;
-       phb->is_dynamic = mem_init_done;
+       phb->is_dynamic = slab_is_available();
 #ifdef CONFIG_PPC64
        if (dev) {
                int nid = of_node_to_nid(dev);
@@ -109,8 +109,10 @@ void pcibios_free_controller(struct pci_controller *phb)
 resource_size_t pcibios_window_alignment(struct pci_bus *bus,
                                         unsigned long type)
 {
-       if (ppc_md.pcibios_window_alignment)
-               return ppc_md.pcibios_window_alignment(bus, type);
+       struct pci_controller *phb = pci_bus_to_host(bus);
+
+       if (phb->controller_ops.window_alignment)
+               return phb->controller_ops.window_alignment(bus, type);
 
        /*
         * PCI core will figure out the default
@@ -122,8 +124,10 @@ resource_size_t pcibios_window_alignment(struct pci_bus *bus,
 
 void pcibios_reset_secondary_bus(struct pci_dev *dev)
 {
-       if (ppc_md.pcibios_reset_secondary_bus) {
-               ppc_md.pcibios_reset_secondary_bus(dev);
+       struct pci_controller *phb = pci_bus_to_host(dev->bus);
+
+       if (phb->controller_ops.reset_secondary_bus) {
+               phb->controller_ops.reset_secondary_bus(dev);
                return;
        }
 
@@ -956,6 +960,8 @@ static void pcibios_fixup_bridge(struct pci_bus *bus)
 
 void pcibios_setup_bus_self(struct pci_bus *bus)
 {
+       struct pci_controller *phb;
+
        /* Fix up the bus resources for P2P bridges */
        if (bus->self != NULL)
                pcibios_fixup_bridge(bus);
@@ -967,12 +973,14 @@ void pcibios_setup_bus_self(struct pci_bus *bus)
                ppc_md.pcibios_fixup_bus(bus);
 
        /* Setup bus DMA mappings */
-       if (ppc_md.pci_dma_bus_setup)
-               ppc_md.pci_dma_bus_setup(bus);
+       phb = pci_bus_to_host(bus);
+       if (phb->controller_ops.dma_bus_setup)
+               phb->controller_ops.dma_bus_setup(bus);
 }
 
 static void pcibios_setup_device(struct pci_dev *dev)
 {
+       struct pci_controller *phb;
        /* Fixup NUMA node as it may not be setup yet by the generic
         * code and is needed by the DMA init
         */
@@ -983,8 +991,9 @@ static void pcibios_setup_device(struct pci_dev *dev)
        set_dma_offset(&dev->dev, PCI_DRAM_OFFSET);
 
        /* Additional platform DMA/iommu setup */
-       if (ppc_md.pci_dma_dev_setup)
-               ppc_md.pci_dma_dev_setup(dev);
+       phb = pci_bus_to_host(dev->bus);
+       if (phb->controller_ops.dma_dev_setup)
+               phb->controller_ops.dma_dev_setup(dev);
 
        /* Read default IRQs and fixup if necessary */
        pci_read_irq_line(dev);
@@ -1470,8 +1479,10 @@ EXPORT_SYMBOL_GPL(pcibios_finish_adding_to_bus);
 
 int pcibios_enable_device(struct pci_dev *dev, int mask)
 {
-       if (ppc_md.pcibios_enable_device_hook)
-               if (ppc_md.pcibios_enable_device_hook(dev))
+       struct pci_controller *phb = pci_bus_to_host(dev->bus);
+
+       if (phb->controller_ops.enable_device_hook)
+               if (!phb->controller_ops.enable_device_hook(dev))
                        return -EINVAL;
 
        return pci_enable_resources(dev, mask);
@@ -1644,8 +1655,8 @@ void pcibios_scan_phb(struct pci_controller *hose)
 
        /* Get probe mode and perform scan */
        mode = PCI_PROBE_NORMAL;
-       if (node && ppc_md.pci_probe_mode)
-               mode = ppc_md.pci_probe_mode(bus);
+       if (node && hose->controller_ops.probe_mode)
+               mode = hose->controller_ops.probe_mode(bus);
        pr_debug("    probe mode: %d\n", mode);
        if (mode == PCI_PROBE_DEVTREE)
                of_scan_bus(node, bus);