OSDN Git Service

powerpc/pseries: Move controller ops from ppc_md to controller_ops
authorDaniel Axtens <dja@axtens.net>
Tue, 31 Mar 2015 05:00:50 +0000 (16:00 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Sat, 11 Apr 2015 10:49:15 +0000 (20:49 +1000)
This moves the pSeries platform to use the pci_controller_ops structure,
rather than ppc_md for PCI controller operations.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/platforms/pseries/iommu.c
arch/powerpc/platforms/pseries/pci_dlpar.c
arch/powerpc/platforms/pseries/pseries.h
arch/powerpc/platforms/pseries/setup.c

index 7803a19..61d5a17 100644 (file)
@@ -49,6 +49,7 @@
 #include <asm/mmzone.h>
 #include <asm/plpar_wrappers.h>
 
+#include "pseries.h"
 
 static void tce_invalidate_pSeries_sw(struct iommu_table *tbl,
                                      __be64 *startp, __be64 *endp)
@@ -1307,16 +1308,16 @@ void iommu_init_early_pSeries(void)
                        ppc_md.tce_free  = tce_free_pSeriesLP;
                }
                ppc_md.tce_get   = tce_get_pSeriesLP;
-               ppc_md.pci_dma_bus_setup = pci_dma_bus_setup_pSeriesLP;
-               ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_pSeriesLP;
+               pseries_pci_controller_ops.dma_bus_setup = pci_dma_bus_setup_pSeriesLP;
+               pseries_pci_controller_ops.dma_dev_setup = pci_dma_dev_setup_pSeriesLP;
                ppc_md.dma_set_mask = dma_set_mask_pSeriesLP;
                ppc_md.dma_get_required_mask = dma_get_required_mask_pSeriesLP;
        } else {
                ppc_md.tce_build = tce_build_pSeries;
                ppc_md.tce_free  = tce_free_pSeries;
                ppc_md.tce_get   = tce_get_pseries;
-               ppc_md.pci_dma_bus_setup = pci_dma_bus_setup_pSeries;
-               ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_pSeries;
+               pseries_pci_controller_ops.dma_bus_setup = pci_dma_bus_setup_pSeries;
+               pseries_pci_controller_ops.dma_dev_setup = pci_dma_dev_setup_pSeries;
        }
 
 
index f735f4f..5d4a3df 100644 (file)
@@ -32,6 +32,8 @@
 #include <asm/firmware.h>
 #include <asm/eeh.h>
 
+#include "pseries.h"
+
 static struct pci_bus *
 find_bus_among_children(struct pci_bus *bus,
                         struct device_node *dn)
@@ -75,6 +77,7 @@ struct pci_controller *init_phb_dynamic(struct device_node *dn)
                return NULL;
        rtas_setup_phb(phb);
        pci_process_bridge_OF_ranges(phb, dn, 0);
+       phb->controller_ops = pseries_pci_controller_ops;
 
        pci_devs_phb_init_dynamic(phb);
 
index 1796c54..cd64672 100644 (file)
@@ -65,6 +65,8 @@ extern int dlpar_detach_node(struct device_node *);
 struct pci_host_bridge;
 int pseries_root_bridge_prepare(struct pci_host_bridge *bridge);
 
+extern struct pci_controller_ops pseries_pci_controller_ops;
+
 unsigned long pseries_memory_block_size(void);
 
 #endif /* _PSERIES_PSERIES_H */
index bcc6d24..1044b8b 100644 (file)
@@ -478,6 +478,7 @@ static void __init find_and_init_phbs(void)
                rtas_setup_phb(phb);
                pci_process_bridge_OF_ranges(phb, node, 0);
                isa_bridge_find_early(phb);
+               phb->controller_ops = pseries_pci_controller_ops;
        }
 
        of_node_put(root);
@@ -840,6 +841,10 @@ static int pSeries_pci_probe_mode(struct pci_bus *bus)
 void pSeries_final_fixup(void) { }
 #endif
 
+struct pci_controller_ops pseries_pci_controller_ops = {
+       .probe_mode             = pSeries_pci_probe_mode,
+};
+
 define_machine(pseries) {
        .name                   = "pSeries",
        .probe                  = pSeries_probe,
@@ -848,7 +853,6 @@ define_machine(pseries) {
        .show_cpuinfo           = pSeries_show_cpuinfo,
        .log_error              = pSeries_log_error,
        .pcibios_fixup          = pSeries_final_fixup,
-       .pci_probe_mode         = pSeries_pci_probe_mode,
        .restart                = rtas_restart,
        .halt                   = rtas_halt,
        .panic                  = rtas_os_term,