powerpc/pci: Add pcibios_disable_device() hook
authorMichael Neuling <mikey@neuling.org>
Wed, 27 May 2015 06:07:00 +0000 (16:07 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 3 Jun 2015 03:27:16 +0000 (13:27 +1000)
This adds a hook into the powerpc pci code for pci_disable_device() calls.  The
generic code already provides a weak pcibios_disable_device() symbol, so we
just need to provide our own in powerpc and it'll get picked up.

This is passed directly to the phb controller ops, provided one exists.

Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/pci-bridge.h
arch/powerpc/kernel/pci-common.c

index 3947749de2809b2c2d16671cb7501fdfb785c209..b76cd5682a8c3369f2477195068f550679351cf7 100644 (file)
@@ -27,6 +27,8 @@ struct pci_controller_ops {
         * allow assignment/enabling of the device. */
        bool            (*enable_device_hook)(struct pci_dev *);
 
+       void            (*disable_device)(struct pci_dev *);
+
        void            (*release_device)(struct pci_dev *);
 
        /* Called during PCI resource reassignment */
index 2040cd2f73580c78f47ec9751afcb23aa5ef38b7..b9de34d44fcb877c388bcb54c98cc82bfb2ac3f2 100644 (file)
@@ -1490,6 +1490,14 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
        return pci_enable_resources(dev, mask);
 }
 
+void pcibios_disable_device(struct pci_dev *dev)
+{
+       struct pci_controller *phb = pci_bus_to_host(dev->bus);
+
+       if (phb->controller_ops.disable_device)
+               phb->controller_ops.disable_device(dev);
+}
+
 resource_size_t pcibios_io_space_offset(struct pci_controller *hose)
 {
        return (unsigned long) hose->io_base_virt - _IO_BASE;