diff options
| author | Daniel Axtens | 2015-03-31 07:00:45 +0200 | 
|---|---|---|
| committer | Michael Ellerman | 2015-04-11 12:49:13 +0200 | 
| commit | b31e79f8d92ca115a935e37cfd4da74048739689 (patch) | |
| tree | 15152735740773a6145bc929bd291e3a456a55df /arch/powerpc | |
| parent | powerpc: Create pci_controller_ops.probe_mode and shim (diff) | |
| download | kernel-qcow2-linux-b31e79f8d92ca115a935e37cfd4da74048739689.tar.gz kernel-qcow2-linux-b31e79f8d92ca115a935e37cfd4da74048739689.tar.xz kernel-qcow2-linux-b31e79f8d92ca115a935e37cfd4da74048739689.zip | |
powerpc: Create pci_controller_ops.enable_device_hook and shim
Add pci_controller_ops.enable_device_hook,
shadowing ppc_md.pcibios_enable_device_hook.
Add a shim, and changes the callsites to use the shim.
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/pci-bridge.h | 15 | ||||
| -rw-r--r-- | arch/powerpc/kernel/pci-common.c | 5 | 
2 files changed, 17 insertions, 3 deletions
| diff --git a/arch/powerpc/include/asm/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h index 278f48978bad..9d02ea6255ff 100644 --- a/arch/powerpc/include/asm/pci-bridge.h +++ b/arch/powerpc/include/asm/pci-bridge.h @@ -27,6 +27,10 @@ struct pci_controller_ops {  	void		(*dma_bus_setup)(struct pci_bus *bus);  	int		(*probe_mode)(struct pci_bus *); + +	/* Called when pci_enable_device() is called. Returns true to +	 * allow assignment/enabling of the device. */ +	bool		(*enable_device_hook)(struct pci_dev *);  };  /* @@ -310,5 +314,16 @@ static inline int pci_probe_mode(struct pci_bus *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; +} +  #endif	/* __KERNEL__ */  #endif	/* _ASM_POWERPC_PCI_BRIDGE_H */ diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index b0de23c89ca5..8639e9cd65d5 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c @@ -1448,9 +1448,8 @@ 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)) -			return -EINVAL; +	if (!pcibios_enable_device_hook(dev)) +		return -EINVAL;  	return pci_enable_resources(dev, mask);  } | 
