Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 467efc2e authored by Daniel Axtens's avatar Daniel Axtens Committed by Michael Ellerman
Browse files

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: default avatarDaniel Axtens <dja@axtens.net>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 9c1368fc
Loading
Loading
Loading
Loading
+0 −14
Original line number Original line Diff line number Diff line
@@ -103,9 +103,6 @@ struct machdep_calls {
#endif
#endif
#endif /* CONFIG_PPC64 */
#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 */
	/* Platform set_dma_mask and dma_get_required_mask overrides */
	int		(*dma_set_mask)(struct device *dev, u64 dma_mask);
	int		(*dma_set_mask)(struct device *dev, u64 dma_mask);
	u64		(*dma_get_required_mask)(struct device *dev);
	u64		(*dma_get_required_mask)(struct device *dev);
@@ -127,7 +124,6 @@ struct machdep_calls {
	/* PCI stuff */
	/* PCI stuff */
	/* Called after allocating resources */
	/* Called after allocating resources */
	void		(*pcibios_fixup)(void);
	void		(*pcibios_fixup)(void);
	int		(*pci_probe_mode)(struct pci_bus *);
	void		(*pci_irq_fixup)(struct pci_dev *dev);
	void		(*pci_irq_fixup)(struct pci_dev *dev);
	int		(*pcibios_root_bridge_prepare)(struct pci_host_bridge
	int		(*pcibios_root_bridge_prepare)(struct pci_host_bridge
				*bridge);
				*bridge);
@@ -237,19 +233,9 @@ struct machdep_calls {
	/* Called for each PCI bus in the system when it's probed */
	/* Called for each PCI bus in the system when it's probed */
	void (*pcibios_fixup_bus)(struct pci_bus *);
	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 */
	/* Called after scan and before resource survey */
	void (*pcibios_fixup_phb)(struct pci_controller *hose);
	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
	/* Called to shutdown machine specific hardware not already controlled
	 * by other drivers.
	 * by other drivers.
	 */
	 */
+0 −84
Original line number Original line Diff line number Diff line
@@ -12,11 +12,6 @@
#include <linux/ioport.h>
#include <linux/ioport.h>
#include <asm-generic/pci-bridge.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;
struct device_node;


/*
/*
@@ -284,84 +279,5 @@ static inline int pcibios_vaddr_is_ioport(void __iomem *address)
}
}
#endif	/* CONFIG_PCI */
#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	/* __KERNEL__ */
#endif	/* _ASM_POWERPC_PCI_BRIDGE_H */
#endif	/* _ASM_POWERPC_PCI_BRIDGE_H */
+5 −0
Original line number Original line Diff line number Diff line
@@ -22,6 +22,11 @@


#include <asm-generic/pci-dma-compat.h>
#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_IO		0x1000
#define PCIBIOS_MIN_MEM		0x10000000
#define PCIBIOS_MIN_MEM		0x10000000


+35 −8
Original line number Original line Diff line number Diff line
@@ -109,12 +109,29 @@ void pcibios_free_controller(struct pci_controller *phb)
resource_size_t pcibios_window_alignment(struct pci_bus *bus,
resource_size_t pcibios_window_alignment(struct pci_bus *bus,
					 unsigned long type)
					 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)
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)
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)
void pcibios_setup_bus_self(struct pci_bus *bus)
{
{
	struct pci_controller *phb;

	/* Fix up the bus resources for P2P bridges */
	/* Fix up the bus resources for P2P bridges */
	if (bus->self != NULL)
	if (bus->self != NULL)
		pcibios_fixup_bridge(bus);
		pcibios_fixup_bridge(bus);
@@ -940,11 +959,14 @@ void pcibios_setup_bus_self(struct pci_bus *bus)
		ppc_md.pcibios_fixup_bus(bus);
		ppc_md.pcibios_fixup_bus(bus);


	/* Setup bus DMA mappings */
	/* 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)
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
	/* Fixup NUMA node as it may not be setup yet by the generic
	 * code and is needed by the DMA init
	 * 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);
	set_dma_offset(&dev->dev, PCI_DRAM_OFFSET);


	/* Additional platform DMA/iommu setup */
	/* 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 */
	/* Read default IRQs and fixup if necessary */
	pci_read_irq_line(dev);
	pci_read_irq_line(dev);
@@ -1435,7 +1459,10 @@ EXPORT_SYMBOL_GPL(pcibios_finish_adding_to_bus);


int pcibios_enable_device(struct pci_dev *dev, int mask)
int pcibios_enable_device(struct pci_dev *dev, int mask)
{
{
	if (!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 -EINVAL;


	return pci_enable_resources(dev, mask);
	return pci_enable_resources(dev, mask);
@@ -1608,8 +1635,8 @@ void pcibios_scan_phb(struct pci_controller *hose)


	/* Get probe mode and perform scan */
	/* Get probe mode and perform scan */
	mode = PCI_PROBE_NORMAL;
	mode = PCI_PROBE_NORMAL;
	if (node)
	if (node && hose->controller_ops.probe_mode)
		mode = pci_probe_mode(bus);
		mode = hose->controller_ops.probe_mode(bus);
	pr_debug("    probe mode: %d\n", mode);
	pr_debug("    probe mode: %d\n", mode);
	if (mode == PCI_PROBE_DEVTREE)
	if (mode == PCI_PROBE_DEVTREE)
		of_scan_bus(node, bus);
		of_scan_bus(node, bus);
+5 −1
Original line number Original line Diff line number Diff line
@@ -73,12 +73,16 @@ void pcibios_add_pci_devices(struct pci_bus * bus)
{
{
	int slotno, mode, pass, max;
	int slotno, mode, pass, max;
	struct pci_dev *dev;
	struct pci_dev *dev;
	struct pci_controller *phb;
	struct device_node *dn = pci_bus_to_OF_node(bus);
	struct device_node *dn = pci_bus_to_OF_node(bus);


	eeh_add_device_tree_early(PCI_DN(dn));
	eeh_add_device_tree_early(PCI_DN(dn));


	phb = pci_bus_to_host(bus);

	mode = PCI_PROBE_NORMAL;
	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) {
	if (mode == PCI_PROBE_DEVTREE) {
		/* use ofdt-based probe */
		/* use ofdt-based probe */
Loading