Merge tag 'pci-v4.7-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 19 May 2016 20:10:54 +0000 (13:10 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 19 May 2016 20:10:54 +0000 (13:10 -0700)
Pull PCI updates from Bjorn Helgaas:
 "Enumeration:
   - Refine PCI support check in pcibios_init() (Adrian-Ken Rueegsegger)
   - Provide common functions for ECAM mapping (Jayachandran C)
   - Allow all PCIe services on non-ACPI host bridges (Jon Derrick)
   - Remove return values from pcie_port_platform_notify() and relatives (Jon Derrick)
   - Widen portdrv service type from 4 bits to 8 bits (Keith Busch)
   - Add Downstream Port Containment portdrv service type (Keith Busch)
   - Add Downstream Port Containment driver (Keith Busch)

  Resource management:
   - Identify Enhanced Allocation (EA) BAR Equivalent resources in sysfs (Alex Williamson)
   - Supply CPU physical address (not bus address) to iomem_is_exclusive() (Bjorn Helgaas)
   - alpha: Call iomem_is_exclusive() for IORESOURCE_MEM, but not IORESOURCE_IO (Bjorn Helgaas)
   - Mark Broadwell-EP Home Agent 1 as having non-compliant BARs (Prarit Bhargava)
   - Disable all BAR sizing for devices with non-compliant BARs (Prarit Bhargava)
   - Move PCI I/O space management from OF to PCI core code (Tomasz Nowicki)

  PCI device hotplug:
   - acpiphp_ibm: Avoid uninitialized variable reference (Dan Carpenter)
   - Use cached copy of PCI_EXP_SLTCAP_HPC bit (Lukas Wunner)

  Virtualization:
   - Mark Intel i40e NIC INTx masking as broken (Alex Williamson)
   - Reverse standard ACS vs device-specific ACS enabling (Alex Williamson)
   - Work around Intel Sunrise Point PCH incorrect ACS capability (Alex Williamson)

  IOMMU:
   - Add pci_add_dma_alias() to abstract implementation (Bjorn Helgaas)
   - Move informational printk to pci_add_dma_alias() (Bjorn Helgaas)
   - Add support for multiple DMA aliases (Jacek Lawrynowicz)
   - Add DMA alias quirk for mic_x200_dma (Jacek Lawrynowicz)

  Thunderbolt:
   - Fix double free of drom buffer (Andreas Noever)
   - Add Intel Thunderbolt device IDs (Lukas Wunner)
   - Fix typos and magic number (Lukas Wunner)
   - Support 1st gen Light Ridge controller (Lukas Wunner)

  Generic host bridge driver:
   - Use generic ECAM API (Jayachandran C)

  Cavium ThunderX host bridge driver:
   - Don't clobber read-only bits in bridge config registers (David Daney)
   - Use generic ECAM API (Jayachandran C)

  Freescale i.MX6 host bridge driver:
   - Use enum instead of bool for variant indicator (Andrey Smirnov)
   - Implement reset sequence for i.MX6+ (Andrey Smirnov)
   - Factor out ref clock enable (Bjorn Helgaas)
   - Add initial imx6sx support (Christoph Fritz)
   - Add reset-gpio-active-high boolean property to DT (Petr Štetiar)
   - Add DT property for link gen, default to Gen1 (Tim Harvey)
   - dts: Specify imx6qp version of PCIe core (Andrey Smirnov)
   - dts: Fix PCIe reset GPIO polarity on Toradex Apalis Ixora (Petr Štetiar)

  Marvell Armada host bridge driver:
   - add DT binding for Marvell Armada 7K/8K PCIe controller (Thomas Petazzoni)
   - Add driver for Marvell Armada 7K/8K PCIe controller (Thomas Petazzoni)

  Marvell MVEBU host bridge driver:
   - Constify mvebu_pcie_pm_ops structure (Jisheng Zhang)
   - Use SET_NOIRQ_SYSTEM_SLEEP_PM_OPS for mvebu_pcie_pm_ops (Jisheng Zhang)

  Microsoft Hyper-V host bridge driver:
   - Report resources release after stopping the bus (Vitaly Kuznetsov)
   - Add explicit barriers to config space access (Vitaly Kuznetsov)

  Renesas R-Car host bridge driver:
   - Select PCI_MSI_IRQ_DOMAIN (Arnd Bergmann)

  Synopsys DesignWare host bridge driver:
   - Remove incorrect RC memory base/limit configuration (Gabriele Paoloni)
   - Move Root Complex setup code to dw_pcie_setup_rc() (Jisheng Zhang)

  TI Keystone host bridge driver:
   - Add error IRQ handler (Murali Karicheri)
   - Remove unnecessary goto statement (Murali Karicheri)

  Miscellaneous:
   - Fix spelling errors (Colin Ian King)"

* tag 'pci-v4.7-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (48 commits)
  PCI: Disable all BAR sizing for devices with non-compliant BARs
  x86/PCI: Mark Broadwell-EP Home Agent 1 as having non-compliant BARs
  PCI: Identify Enhanced Allocation (EA) BAR Equivalent resources in sysfs
  PCI, of: Move PCI I/O space management to PCI core code
  PCI: generic, thunder: Use generic ECAM API
  PCI: Provide common functions for ECAM mapping
  PCI: hv: Add explicit barriers to config space access
  PCI: Use cached copy of PCI_EXP_SLTCAP_HPC bit
  PCI: Add Downstream Port Containment driver
  PCI: Add Downstream Port Containment portdrv service type
  PCI: Widen portdrv service type from 4 bits to 8 bits
  PCI: designware: Remove incorrect RC memory base/limit configuration
  PCI: hv: Report resources release after stopping the bus
  ARM: dts: imx6qp: Specify imx6qp version of PCIe core
  PCI: imx6: Implement reset sequence for i.MX6+
  PCI: imx6: Use enum instead of bool for variant indicator
  PCI: thunder: Don't clobber read-only bits in bridge config registers
  thunderbolt: Fix double free of drom buffer
  PCI: rcar: Select PCI_MSI_IRQ_DOMAIN
  PCI: armada: Add driver for Marvell Armada 7K/8K PCIe controller
  ...

1  2 
arch/arm/boot/dts/imx6q-apalis-ixora.dts
drivers/iommu/amd_iommu.c
drivers/iommu/iommu.c
drivers/pci/host/Kconfig
drivers/pci/host/Makefile
drivers/pci/pci-sysfs.c
include/linux/pci.h

@@@ -211,68 -203,6 +211,67 @@@ out_unlock
        return dev_data;
  }
  
-               pdev->dev_flags |= PCI_DEV_FLAGS_DMA_ALIAS_DEVFN;
-               pdev->dma_alias_devfn = ivrs_alias & 0xff;
 +static int __last_alias(struct pci_dev *pdev, u16 alias, void *data)
 +{
 +      *(u16 *)data = alias;
 +      return 0;
 +}
 +
 +static u16 get_alias(struct device *dev)
 +{
 +      struct pci_dev *pdev = to_pci_dev(dev);
 +      u16 devid, ivrs_alias, pci_alias;
 +
 +      devid = get_device_id(dev);
 +      ivrs_alias = amd_iommu_alias_table[devid];
 +      pci_for_each_dma_alias(pdev, __last_alias, &pci_alias);
 +
 +      if (ivrs_alias == pci_alias)
 +              return ivrs_alias;
 +
 +      /*
 +       * DMA alias showdown
 +       *
 +       * The IVRS is fairly reliable in telling us about aliases, but it
 +       * can't know about every screwy device.  If we don't have an IVRS
 +       * reported alias, use the PCI reported alias.  In that case we may
 +       * still need to initialize the rlookup and dev_table entries if the
 +       * alias is to a non-existent device.
 +       */
 +      if (ivrs_alias == devid) {
 +              if (!amd_iommu_rlookup_table[pci_alias]) {
 +                      amd_iommu_rlookup_table[pci_alias] =
 +                              amd_iommu_rlookup_table[devid];
 +                      memcpy(amd_iommu_dev_table[pci_alias].data,
 +                             amd_iommu_dev_table[devid].data,
 +                             sizeof(amd_iommu_dev_table[pci_alias].data));
 +              }
 +
 +              return pci_alias;
 +      }
 +
 +      pr_info("AMD-Vi: Using IVRS reported alias %02x:%02x.%d "
 +              "for device %s[%04x:%04x], kernel reported alias "
 +              "%02x:%02x.%d\n", PCI_BUS_NUM(ivrs_alias), PCI_SLOT(ivrs_alias),
 +              PCI_FUNC(ivrs_alias), dev_name(dev), pdev->vendor, pdev->device,
 +              PCI_BUS_NUM(pci_alias), PCI_SLOT(pci_alias),
 +              PCI_FUNC(pci_alias));
 +
 +      /*
 +       * If we don't have a PCI DMA alias and the IVRS alias is on the same
 +       * bus, then the IVRS table may know about a quirk that we don't.
 +       */
 +      if (pci_alias == devid &&
 +          PCI_BUS_NUM(ivrs_alias) == pdev->bus->number) {
++              pci_add_dma_alias(pdev, ivrs_alias & 0xff);
 +              pr_info("AMD-Vi: Added PCI DMA alias %02x.%d for %s\n",
 +                      PCI_SLOT(ivrs_alias), PCI_FUNC(ivrs_alias),
 +                      dev_name(dev));
 +      }
 +
 +      return ivrs_alias;
 +}
 +
  static struct iommu_dev_data *find_dev_data(u16 devid)
  {
        struct iommu_dev_data *dev_data;
Simple merge
@@@ -69,11 -69,13 +69,13 @@@ config PCI_RCAR_GEN
          There are 3 internal PCI controllers available with a single
          built-in EHCI/OHCI host controller present on each one.
  
 -config PCI_RCAR_GEN2_PCIE
 +config PCIE_RCAR
        bool "Renesas R-Car PCIe controller"
        depends on ARCH_RENESAS || (ARM && COMPILE_TEST)
+       select PCI_MSI
+       select PCI_MSI_IRQ_DOMAIN
        help
 -        Say Y here if you want PCIe controller support on R-Car Gen2 SoCs.
 +        Say Y here if you want PCIe controller support on R-Car SoCs.
  
  config PCI_HOST_COMMON
        bool
Simple merge
Simple merge
Simple merge