Commit 1cac57a2 authored by Bjorn Helgaas's avatar Bjorn Helgaas

Merge branch 'pci/enumeration'

- Rename pcibios_add_device() to pcibios_device_add() since it's called
  from pci_device_add() (Oliver O'Halloran)

- Don't try to enable AtomicOps on VFs, since they can only be enabled on
  the PF (Selvin Xavier)

* pci/enumeration:
  PCI: Do not enable AtomicOps on VFs
  PCI: Rename pcibios_add_device() to pcibios_device_add()
parents 5e19196c 5ec0a6fc
...@@ -587,13 +587,12 @@ static void pcibios_fixup_resources(struct pci_dev *dev) ...@@ -587,13 +587,12 @@ static void pcibios_fixup_resources(struct pci_dev *dev)
} }
DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_resources); DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_resources);
int pcibios_add_device(struct pci_dev *dev) int pcibios_device_add(struct pci_dev *dev)
{ {
dev->irq = of_irq_parse_and_map_pci(dev, 0, 0); dev->irq = of_irq_parse_and_map_pci(dev, 0, 0);
return 0; return 0;
} }
EXPORT_SYMBOL(pcibios_add_device);
/* /*
* Reparent resource children of pr that conflict with res * Reparent resource children of pr that conflict with res
......
...@@ -1059,7 +1059,7 @@ void pcibios_bus_add_device(struct pci_dev *dev) ...@@ -1059,7 +1059,7 @@ void pcibios_bus_add_device(struct pci_dev *dev)
ppc_md.pcibios_bus_add_device(dev); ppc_md.pcibios_bus_add_device(dev);
} }
int pcibios_add_device(struct pci_dev *dev) int pcibios_device_add(struct pci_dev *dev)
{ {
struct irq_domain *d; struct irq_domain *d;
......
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
* to "new_size", calculated above. Implementing this is a convoluted process * to "new_size", calculated above. Implementing this is a convoluted process
* which requires several hooks in the PCI core: * which requires several hooks in the PCI core:
* *
* 1. In pcibios_add_device() we call pnv_pci_ioda_fixup_iov(). * 1. In pcibios_device_add() we call pnv_pci_ioda_fixup_iov().
* *
* At this point the device has been probed and the device's BARs are sized, * At this point the device has been probed and the device's BARs are sized,
* but no resource allocations have been done. The SR-IOV BARs are sized * but no resource allocations have been done. The SR-IOV BARs are sized
......
...@@ -561,7 +561,7 @@ static void zpci_cleanup_bus_resources(struct zpci_dev *zdev) ...@@ -561,7 +561,7 @@ static void zpci_cleanup_bus_resources(struct zpci_dev *zdev)
zdev->has_resources = 0; zdev->has_resources = 0;
} }
int pcibios_add_device(struct pci_dev *pdev) int pcibios_device_add(struct pci_dev *pdev)
{ {
struct zpci_dev *zdev = to_zpci(pdev); struct zpci_dev *zdev = to_zpci(pdev);
struct resource *res; struct resource *res;
......
...@@ -1010,7 +1010,7 @@ void pcibios_set_master(struct pci_dev *dev) ...@@ -1010,7 +1010,7 @@ void pcibios_set_master(struct pci_dev *dev)
} }
#ifdef CONFIG_PCI_IOV #ifdef CONFIG_PCI_IOV
int pcibios_add_device(struct pci_dev *dev) int pcibios_device_add(struct pci_dev *dev)
{ {
struct pci_dev *pdev; struct pci_dev *pdev;
......
...@@ -632,7 +632,7 @@ static void set_dev_domain_options(struct pci_dev *pdev) ...@@ -632,7 +632,7 @@ static void set_dev_domain_options(struct pci_dev *pdev)
pdev->hotplug_user_indicators = 1; pdev->hotplug_user_indicators = 1;
} }
int pcibios_add_device(struct pci_dev *dev) int pcibios_device_add(struct pci_dev *dev)
{ {
struct pci_setup_rom *rom; struct pci_setup_rom *rom;
struct irq_domain *msidom; struct irq_domain *msidom;
......
...@@ -2116,14 +2116,14 @@ void pcim_pin_device(struct pci_dev *pdev) ...@@ -2116,14 +2116,14 @@ void pcim_pin_device(struct pci_dev *pdev)
EXPORT_SYMBOL(pcim_pin_device); EXPORT_SYMBOL(pcim_pin_device);
/* /*
* pcibios_add_device - provide arch specific hooks when adding device dev * pcibios_device_add - provide arch specific hooks when adding device dev
* @dev: the PCI device being added * @dev: the PCI device being added
* *
* Permits the platform to provide architecture specific functionality when * Permits the platform to provide architecture specific functionality when
* devices are added. This is the default implementation. Architecture * devices are added. This is the default implementation. Architecture
* implementations can override this. * implementations can override this.
*/ */
int __weak pcibios_add_device(struct pci_dev *dev) int __weak pcibios_device_add(struct pci_dev *dev)
{ {
return 0; return 0;
} }
...@@ -3744,6 +3744,14 @@ int pci_enable_atomic_ops_to_root(struct pci_dev *dev, u32 cap_mask) ...@@ -3744,6 +3744,14 @@ int pci_enable_atomic_ops_to_root(struct pci_dev *dev, u32 cap_mask)
struct pci_dev *bridge; struct pci_dev *bridge;
u32 cap, ctl2; u32 cap, ctl2;
/*
* Per PCIe r5.0, sec 9.3.5.10, the AtomicOp Requester Enable bit
* in Device Control 2 is reserved in VFs and the PF value applies
* to all associated VFs.
*/
if (dev->is_virtfn)
return -EINVAL;
if (!pci_is_pcie(dev)) if (!pci_is_pcie(dev))
return -EINVAL; return -EINVAL;
......
...@@ -2462,7 +2462,7 @@ static struct irq_domain *pci_dev_msi_domain(struct pci_dev *dev) ...@@ -2462,7 +2462,7 @@ static struct irq_domain *pci_dev_msi_domain(struct pci_dev *dev)
struct irq_domain *d; struct irq_domain *d;
/* /*
* If a domain has been set through the pcibios_add_device() * If a domain has been set through the pcibios_device_add()
* callback, then this is the one (platform code knows best). * callback, then this is the one (platform code knows best).
*/ */
d = dev_get_msi_domain(&dev->dev); d = dev_get_msi_domain(&dev->dev);
...@@ -2530,7 +2530,7 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus) ...@@ -2530,7 +2530,7 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
list_add_tail(&dev->bus_list, &bus->devices); list_add_tail(&dev->bus_list, &bus->devices);
up_write(&pci_bus_sem); up_write(&pci_bus_sem);
ret = pcibios_add_device(dev); ret = pcibios_device_add(dev);
WARN_ON(ret < 0); WARN_ON(ret < 0);
/* Set up MSI IRQ domain */ /* Set up MSI IRQ domain */
......
...@@ -2126,7 +2126,7 @@ void pcibios_disable_device(struct pci_dev *dev); ...@@ -2126,7 +2126,7 @@ void pcibios_disable_device(struct pci_dev *dev);
void pcibios_set_master(struct pci_dev *dev); void pcibios_set_master(struct pci_dev *dev);
int pcibios_set_pcie_reset_state(struct pci_dev *dev, int pcibios_set_pcie_reset_state(struct pci_dev *dev,
enum pcie_reset_state state); enum pcie_reset_state state);
int pcibios_add_device(struct pci_dev *dev); int pcibios_device_add(struct pci_dev *dev);
void pcibios_release_device(struct pci_dev *dev); void pcibios_release_device(struct pci_dev *dev);
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
void pcibios_penalize_isa_irq(int irq, int active); void pcibios_penalize_isa_irq(int irq, int active);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment