diff options
| author | Daniel Axtens | 2015-03-31 07:00:56 +0200 | 
|---|---|---|
| committer | Michael Ellerman | 2015-04-11 12:49:18 +0200 | 
| commit | 467efc2e4fdc44e6cd4be7dd4adf01c14b3d148e (patch) | |
| tree | d8702b30db2eedb190e82beb802ac30275af6ea7 /arch/powerpc | |
| parent | powerpc/cell: Move controller ops from ppc_md to controller_ops (diff) | |
| download | kernel-qcow2-linux-467efc2e4fdc44e6cd4be7dd4adf01c14b3d148e.tar.gz kernel-qcow2-linux-467efc2e4fdc44e6cd4be7dd4adf01c14b3d148e.tar.xz kernel-qcow2-linux-467efc2e4fdc44e6cd4be7dd4adf01c14b3d148e.zip | |
powerpc: Remove shims for pci_controller_ops operations
Remove shims, patch callsites to use pci_controller_ops
versions instead.
Also move back the probe mode defines, as explained in the patch
for pci_probe_mode.
Signed-off-by: Daniel Axtens <dja@axtens.net>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc')
| -rw-r--r-- | arch/powerpc/include/asm/machdep.h | 14 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/pci-bridge.h | 84 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/pci.h | 5 | ||||
| -rw-r--r-- | arch/powerpc/kernel/pci-common.c | 43 | ||||
| -rw-r--r-- | arch/powerpc/kernel/pci-hotplug.c | 6 | ||||
| -rw-r--r-- | arch/powerpc/kernel/pci_of_scan.c | 6 | ||||
| -rw-r--r-- | arch/powerpc/sysdev/dart_iommu.c | 5 | 
7 files changed, 50 insertions, 113 deletions
| diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h index e29f058c0903..5c19ac527a8e 100644 --- a/arch/powerpc/include/asm/machdep.h +++ b/arch/powerpc/include/asm/machdep.h @@ -103,9 +103,6 @@ struct machdep_calls {  #endif  #endif /* CONFIG_PPC64 */ -	void		(*pci_dma_dev_setup)(struct pci_dev *dev); -	void		(*pci_dma_bus_setup)(struct pci_bus *bus); -  	/* Platform set_dma_mask and dma_get_required_mask overrides */  	int		(*dma_set_mask)(struct device *dev, u64 dma_mask);  	u64		(*dma_get_required_mask)(struct device *dev); @@ -127,7 +124,6 @@ struct machdep_calls {  	/* PCI stuff */  	/* Called after allocating resources */  	void		(*pcibios_fixup)(void); -	int		(*pci_probe_mode)(struct pci_bus *);  	void		(*pci_irq_fixup)(struct pci_dev *dev);  	int		(*pcibios_root_bridge_prepare)(struct pci_host_bridge  				*bridge); @@ -237,19 +233,9 @@ struct machdep_calls {  	/* Called for each PCI bus in the system when it's probed */  	void (*pcibios_fixup_bus)(struct pci_bus *); -	/* Called when pci_enable_device() is called. Returns true to -	 * allow assignment/enabling of the device. */ -	bool (*pcibios_enable_device_hook)(struct pci_dev *); -  	/* Called after scan and before resource survey */  	void (*pcibios_fixup_phb)(struct pci_controller *hose); -	/* Called during PCI resource reassignment */ -	resource_size_t (*pcibios_window_alignment)(struct pci_bus *, unsigned long type); - -	/* Reset the secondary bus of bridge */ -	void  (*pcibios_reset_secondary_bus)(struct pci_dev *dev); -  	/* Called to shutdown machine specific hardware not already controlled  	 * by other drivers.  	 */ diff --git a/arch/powerpc/include/asm/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h index bb34b1eebfbe..7d972bc85638 100644 --- a/arch/powerpc/include/asm/pci-bridge.h +++ b/arch/powerpc/include/asm/pci-bridge.h @@ -12,11 +12,6 @@  #include <linux/ioport.h>  #include <asm-generic/pci-bridge.h> -/* Return values for pci_controller_ops.probe_mode function */ -#define PCI_PROBE_NONE		-1	/* Don't look at this bus at all */ -#define PCI_PROBE_NORMAL	0	/* Do normal PCI probing */ -#define PCI_PROBE_DEVTREE	1	/* Instantiate from device tree */ -  struct device_node;  /* @@ -284,84 +279,5 @@ static inline int pcibios_vaddr_is_ioport(void __iomem *address)  }  #endif	/* CONFIG_PCI */ -/* - * Shims to prefer pci_controller version over ppc_md where available. - */ -static inline void pci_dma_dev_setup(struct pci_dev *dev) -{ -	struct pci_controller *phb = pci_bus_to_host(dev->bus); - -	if (phb->controller_ops.dma_dev_setup) -		phb->controller_ops.dma_dev_setup(dev); -	else if (ppc_md.pci_dma_dev_setup) -		ppc_md.pci_dma_dev_setup(dev); -} - -static inline void pci_dma_bus_setup(struct pci_bus *bus) -{ -	struct pci_controller *phb = pci_bus_to_host(bus); - -	if (phb->controller_ops.dma_bus_setup) -		phb->controller_ops.dma_bus_setup(bus); -	else if (ppc_md.pci_dma_bus_setup) -		ppc_md.pci_dma_bus_setup(bus); -} - -static inline int pci_probe_mode(struct pci_bus *bus) -{ -	struct pci_controller *phb = pci_bus_to_host(bus); - -	if (phb->controller_ops.probe_mode) -		return phb->controller_ops.probe_mode(bus); -	if (ppc_md.pci_probe_mode) -		return ppc_md.pci_probe_mode(bus); -	return PCI_PROBE_NORMAL; -} - -static inline bool pcibios_enable_device_hook(struct pci_dev *dev) -{ -	struct pci_controller *phb = pci_bus_to_host(dev->bus); - -	if (phb->controller_ops.enable_device_hook) -		return phb->controller_ops.enable_device_hook(dev); -	if (ppc_md.pcibios_enable_device_hook) -		return ppc_md.pcibios_enable_device_hook(dev); -	return true; -} - -static inline resource_size_t pci_window_alignment(struct pci_bus *bus, -						   unsigned long type) -{ -	struct pci_controller *phb = pci_bus_to_host(bus); - -	if (phb->controller_ops.window_alignment) -		return phb->controller_ops.window_alignment(bus, type); -	if (ppc_md.pcibios_window_alignment) -		return ppc_md.pcibios_window_alignment(bus, type); - -	/* -	 * PCI core will figure out the default -	 * alignment: 4KiB for I/O and 1MiB for -	 * memory window. -	 */ -	return 1; -} - -static inline void pcibios_reset_secondary_bus_shim(struct pci_dev *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); -	else if (ppc_md.pcibios_reset_secondary_bus) -		ppc_md.pcibios_reset_secondary_bus(dev); -	else -		/* -		 * Fallback to the generic function if no -		 * platform-specific one is provided -		 */ -		pci_reset_secondary_bus(dev); -} -  #endif	/* __KERNEL__ */  #endif	/* _ASM_POWERPC_PCI_BRIDGE_H */ diff --git a/arch/powerpc/include/asm/pci.h b/arch/powerpc/include/asm/pci.h index 8745067ac702..4aef8d660999 100644 --- a/arch/powerpc/include/asm/pci.h +++ b/arch/powerpc/include/asm/pci.h @@ -22,6 +22,11 @@  #include <asm-generic/pci-dma-compat.h> +/* Return values for pci_controller_ops.probe_mode function */ +#define PCI_PROBE_NONE		-1	/* Don't look at this bus at all */ +#define PCI_PROBE_NORMAL	0	/* Do normal PCI probing */ +#define PCI_PROBE_DEVTREE	1	/* Instantiate from device tree */ +  #define PCIBIOS_MIN_IO		0x1000  #define PCIBIOS_MIN_MEM		0x10000000 diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index 759eb1c87638..9052b4fbc41f 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c @@ -109,12 +109,29 @@ void pcibios_free_controller(struct pci_controller *phb)  resource_size_t pcibios_window_alignment(struct pci_bus *bus,  					 unsigned long type)  { -	return pci_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 +	 * alignment: 4KiB for I/O and 1MiB for +	 * memory window. +	 */ +	return 1;  }  void pcibios_reset_secondary_bus(struct pci_dev *dev)  { -	pcibios_reset_secondary_bus_shim(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; +	} + +	pci_reset_secondary_bus(dev);  }  static resource_size_t pcibios_io_size(const struct pci_controller *hose) @@ -929,6 +946,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); @@ -940,11 +959,14 @@ void pcibios_setup_bus_self(struct pci_bus *bus)  		ppc_md.pcibios_fixup_bus(bus);  	/* Setup bus DMA mappings */ -	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  	 */ @@ -955,7 +977,9 @@ static void pcibios_setup_device(struct pci_dev *dev)  	set_dma_offset(&dev->dev, PCI_DRAM_OFFSET);  	/* Additional platform DMA/iommu setup */ -	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); @@ -1435,8 +1459,11 @@ EXPORT_SYMBOL_GPL(pcibios_finish_adding_to_bus);  int pcibios_enable_device(struct pci_dev *dev, int mask)  { -	if (!pcibios_enable_device_hook(dev)) -		return -EINVAL; +	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);  } @@ -1608,8 +1635,8 @@ void pcibios_scan_phb(struct pci_controller *hose)  	/* Get probe mode and perform scan */  	mode = PCI_PROBE_NORMAL; -	if (node) -		mode = 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); diff --git a/arch/powerpc/kernel/pci-hotplug.c b/arch/powerpc/kernel/pci-hotplug.c index 27116b1b2d14..7ed85a69a9c2 100644 --- a/arch/powerpc/kernel/pci-hotplug.c +++ b/arch/powerpc/kernel/pci-hotplug.c @@ -73,12 +73,16 @@ void pcibios_add_pci_devices(struct pci_bus * bus)  {  	int slotno, mode, pass, max;  	struct pci_dev *dev; +	struct pci_controller *phb;  	struct device_node *dn = pci_bus_to_OF_node(bus);  	eeh_add_device_tree_early(PCI_DN(dn)); +	phb = pci_bus_to_host(bus); +  	mode = PCI_PROBE_NORMAL; -	mode = pci_probe_mode(bus); +	if (phb->controller_ops.probe_mode) +		mode = phb->controller_ops.probe_mode(bus);  	if (mode == PCI_PROBE_DEVTREE) {  		/* use ofdt-based probe */ diff --git a/arch/powerpc/kernel/pci_of_scan.c b/arch/powerpc/kernel/pci_of_scan.c index 4ee63c4f077e..42e02a2d570b 100644 --- a/arch/powerpc/kernel/pci_of_scan.c +++ b/arch/powerpc/kernel/pci_of_scan.c @@ -207,6 +207,7 @@ void of_scan_pci_bridge(struct pci_dev *dev)  {  	struct device_node *node = dev->dev.of_node;  	struct pci_bus *bus; +	struct pci_controller *phb;  	const __be32 *busrange, *ranges;  	int len, i, mode;  	struct pci_bus_region region; @@ -286,8 +287,11 @@ void of_scan_pci_bridge(struct pci_dev *dev)  		bus->number);  	pr_debug("    bus name: %s\n", bus->name); +	phb = pci_bus_to_host(bus); +  	mode = PCI_PROBE_NORMAL; -	mode = pci_probe_mode(bus); +	if (phb->controller_ops.probe_mode) +		mode = phb->controller_ops.probe_mode(bus);  	pr_debug("    probe mode: %d\n", mode);  	if (mode == PCI_PROBE_DEVTREE) diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c index 120e96a9e2cb..87b80009bc9f 100644 --- a/arch/powerpc/sysdev/dart_iommu.c +++ b/arch/powerpc/sysdev/dart_iommu.c @@ -398,9 +398,6 @@ void __init iommu_init_early_dart(struct pci_controller_ops *controller_ops)  	if (controller_ops) {  		controller_ops->dma_dev_setup = pci_dma_dev_setup_dart;  		controller_ops->dma_bus_setup = pci_dma_bus_setup_dart; -	} else { -		ppc_md.pci_dma_dev_setup = pci_dma_dev_setup_dart; -		ppc_md.pci_dma_bus_setup = pci_dma_bus_setup_dart;  	}  	/* Setup pci_dma ops */  	set_pci_dma_ops(&dma_iommu_ops); @@ -412,8 +409,6 @@ void __init iommu_init_early_dart(struct pci_controller_ops *controller_ops)  		controller_ops->dma_dev_setup = NULL;  		controller_ops->dma_bus_setup = NULL;  	} -	ppc_md.pci_dma_dev_setup = NULL; -	ppc_md.pci_dma_bus_setup = NULL;  	/* Setup pci_dma ops */  	set_pci_dma_ops(&dma_direct_ops); | 
