Merge tag 'pci-v4.16-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaa...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 6 Feb 2018 17:59:40 +0000 (09:59 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 6 Feb 2018 17:59:40 +0000 (09:59 -0800)
Pull PCI updates from Bjorn Helgaas:

 - skip AER driver error recovery callbacks for correctable errors
   reported via ACPI APEI, as we already do for errors reported via the
   native path (Tyler Baicar)

 - fix DPC shared interrupt handling (Alex Williamson)

 - print full DPC interrupt number (Keith Busch)

 - enable DPC only if AER is available (Keith Busch)

 - simplify DPC code (Bjorn Helgaas)

 - calculate ASPM L1 substate parameter instead of hardcoding it (Bjorn
   Helgaas)

 - enable Latency Tolerance Reporting for ASPM L1 substates (Bjorn
   Helgaas)

 - move ASPM internal interfaces out of public header (Bjorn Helgaas)

 - allow hot-removal of VGA devices (Mika Westerberg)

 - speed up unplug and shutdown by assuming Thunderbolt controllers
   don't support Command Completed events (Lukas Wunner)

 - add AtomicOps support for GPU and Infiniband drivers (Felix Kuehling,
   Jay Cornwall)

 - expose "ari_enabled" in sysfs to help NIC naming (Stuart Hayes)

 - clean up PCI DMA interface usage (Christoph Hellwig)

 - remove PCI pool API (replaced with DMA pool) (Romain Perier)

 - deprecate pci_get_bus_and_slot(), which assumed PCI domain 0 (Sinan
   Kaya)

 - move DT PCI code from drivers/of/ to drivers/pci/ (Rob Herring)

 - add PCI-specific wrappers for dev_info(), etc (Frederick Lawler)

 - remove warnings on sysfs mmap failure (Bjorn Helgaas)

 - quiet ROM validation messages (Alex Deucher)

 - remove redundant memory alloc failure messages (Markus Elfring)

 - fill in types for compile-time VGA and other I/O port resources
   (Bjorn Helgaas)

 - make "pci=pcie_scan_all" work for Root Ports as well as Downstream
   Ports to help AmigaOne X1000 (Bjorn Helgaas)

 - add SPDX tags to all PCI files (Bjorn Helgaas)

 - quirk Marvell 9128 DMA aliases (Alex Williamson)

 - quirk broken INTx disable on Ceton InfiniTV4 (Bjorn Helgaas)

 - fix CONFIG_PCI=n build by adding dummy pci_irqd_intx_xlate() (Niklas
   Cassel)

 - use DMA API to get MSI address for DesignWare IP (Niklas Cassel)

 - fix endpoint-mode DMA mask configuration (Kishon Vijay Abraham I)

 - fix ARTPEC-6 incorrect IS_ERR() usage (Wei Yongjun)

 - add support for ARTPEC-7 SoC (Niklas Cassel)

 - add endpoint-mode support for ARTPEC (Niklas Cassel)

 - add Cadence PCIe host and endpoint controller driver (Cyrille
   Pitchen)

 - handle multiple INTx status bits being set in dra7xx (Vignesh R)

 - translate dra7xx hwirq range to fix INTD handling (Vignesh R)

 - remove deprecated Exynos PHY initialization code (Jaehoon Chung)

 - fix MSI erratum workaround for HiSilicon Hip06/Hip07 (Dongdong Liu)

 - fix NULL pointer dereference in iProc BCMA driver (Ray Jui)

 - fix Keystone interrupt-controller-node lookup (Johan Hovold)

 - constify qcom driver structures (Julia Lawall)

 - rework Tegra config space mapping to increase space available for
   endpoints (Vidya Sagar)

 - simplify Tegra driver by using bus->sysdata (Manikanta Maddireddy)

 - remove PCI_REASSIGN_ALL_BUS usage on Tegra (Manikanta Maddireddy)

 - add support for Global Fabric Manager Server (GFMS) event to
   Microsemi Switchtec switch driver (Logan Gunthorpe)

 - add IDs for Switchtec PSX 24xG3 and PSX 48xG3 (Kelvin Cao)

* tag 'pci-v4.16-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (140 commits)
  PCI: cadence: Add EndPoint Controller driver for Cadence PCIe controller
  dt-bindings: PCI: cadence: Add DT bindings for Cadence PCIe endpoint controller
  PCI: endpoint: Fix EPF device name to support multi-function devices
  PCI: endpoint: Add the function number as argument to EPC ops
  PCI: cadence: Add host driver for Cadence PCIe controller
  dt-bindings: PCI: cadence: Add DT bindings for Cadence PCIe host controller
  PCI: Add vendor ID for Cadence
  PCI: Add generic function to probe PCI host controllers
  PCI: generic: fix missing call of pci_free_resource_list()
  PCI: OF: Add generic function to parse and allocate PCI resources
  PCI: Regroup all PCI related entries into drivers/pci/Makefile
  PCI/DPC: Reformat DPC register definitions
  PCI/DPC: Add and use DPC Status register field definitions
  PCI/DPC: Squash dpc_rp_pio_get_info() into dpc_process_rp_pio_error()
  PCI/DPC: Remove unnecessary RP PIO register structs
  PCI/DPC: Push dpc->rp_pio_status assignment into dpc_rp_pio_get_info()
  PCI/DPC: Squash dpc_rp_pio_print_error() into dpc_rp_pio_get_info()
  PCI/DPC: Make RP PIO log size check more generic
  PCI/DPC: Rename local "status" to "dpc_status"
  PCI/DPC: Squash dpc_rp_pio_print_tlp_header() into dpc_rp_pio_print_error()
  ...

30 files changed:
1  2 
Documentation/admin-guide/kernel-parameters.txt
MAINTAINERS
arch/powerpc/kernel/eeh.c
arch/powerpc/kernel/pci-common.c
arch/powerpc/kernel/pci_of_scan.c
arch/powerpc/platforms/powermac/feature.c
arch/powerpc/sysdev/mv64x60_pci.c
drivers/Makefile
drivers/block/DAC960.c
drivers/gpu/drm/gma500/psb_drv.c
drivers/gpu/drm/gma500/psb_drv.h
drivers/gpu/drm/nouveau/nouveau_drm.c
drivers/infiniband/hw/qedr/main.c
drivers/iommu/amd_iommu.c
drivers/iommu/amd_iommu_v2.c
drivers/macintosh/via-pmu.c
drivers/of/Kconfig
drivers/of/address.c
drivers/pci/host/pci-hyperv.c
drivers/pci/hotplug/rpadlpar_core.c
drivers/pci/hotplug/rpadlpar_sysfs.c
drivers/pci/hotplug/rpaphp.h
drivers/pci/hotplug/rpaphp_core.c
drivers/pci/iov.c
drivers/pci/pci-driver.c
drivers/pci/pci.c
drivers/pci/pcie/aer/aerdrv_core.c
drivers/pci/switch/switchtec.c
include/linux/pci.h
include/linux/switchtec.h

diff --cc MAINTAINERS
Simple merge
index cc649809885e6ed2d1a2058f9cb2654c6c99d5e0,cbca0a6676829fe5ac4368365ef48d7deff66e32..2b9df0040d6b507c1c64de47d9c7101c91f9a2f7
@@@ -740,65 -740,6 +740,65 @@@ static void *eeh_restore_dev_state(voi
        return NULL;
  }
  
-               /* Disable Completion Timeout */
 +int eeh_restore_vf_config(struct pci_dn *pdn)
 +{
 +      struct eeh_dev *edev = pdn_to_eeh_dev(pdn);
 +      u32 devctl, cmd, cap2, aer_capctl;
 +      int old_mps;
 +
 +      if (edev->pcie_cap) {
 +              /* Restore MPS */
 +              old_mps = (ffs(pdn->mps) - 8) << 5;
 +              eeh_ops->read_config(pdn, edev->pcie_cap + PCI_EXP_DEVCTL,
 +                                   2, &devctl);
 +              devctl &= ~PCI_EXP_DEVCTL_PAYLOAD;
 +              devctl |= old_mps;
 +              eeh_ops->write_config(pdn, edev->pcie_cap + PCI_EXP_DEVCTL,
 +                                    2, devctl);
 +
-               if (cap2 & 0x10) {
++              /* Disable Completion Timeout if possible */
 +              eeh_ops->read_config(pdn, edev->pcie_cap + PCI_EXP_DEVCAP2,
 +                                   4, &cap2);
-                       cap2 |= 0x10;
++              if (cap2 & PCI_EXP_DEVCAP2_COMP_TMOUT_DIS) {
 +                      eeh_ops->read_config(pdn,
 +                                           edev->pcie_cap + PCI_EXP_DEVCTL2,
 +                                           4, &cap2);
++                      cap2 |= PCI_EXP_DEVCTL2_COMP_TMOUT_DIS;
 +                      eeh_ops->write_config(pdn,
 +                                            edev->pcie_cap + PCI_EXP_DEVCTL2,
 +                                            4, cap2);
 +              }
 +      }
 +
 +      /* Enable SERR and parity checking */
 +      eeh_ops->read_config(pdn, PCI_COMMAND, 2, &cmd);
 +      cmd |= (PCI_COMMAND_PARITY | PCI_COMMAND_SERR);
 +      eeh_ops->write_config(pdn, PCI_COMMAND, 2, cmd);
 +
 +      /* Enable report various errors */
 +      if (edev->pcie_cap) {
 +              eeh_ops->read_config(pdn, edev->pcie_cap + PCI_EXP_DEVCTL,
 +                                   2, &devctl);
 +              devctl &= ~PCI_EXP_DEVCTL_CERE;
 +              devctl |= (PCI_EXP_DEVCTL_NFERE |
 +                         PCI_EXP_DEVCTL_FERE |
 +                         PCI_EXP_DEVCTL_URRE);
 +              eeh_ops->write_config(pdn, edev->pcie_cap + PCI_EXP_DEVCTL,
 +                                    2, devctl);
 +      }
 +
 +      /* Enable ECRC generation and check */
 +      if (edev->pcie_cap && edev->aer_cap) {
 +              eeh_ops->read_config(pdn, edev->aer_cap + PCI_ERR_CAP,
 +                                   4, &aer_capctl);
 +              aer_capctl |= (PCI_ERR_CAP_ECRC_GENE | PCI_ERR_CAP_ECRC_CHKE);
 +              eeh_ops->write_config(pdn, edev->aer_cap + PCI_ERR_CAP,
 +                                    4, aer_capctl);
 +      }
 +
 +      return 0;
 +}
 +
  /**
   * pcibios_set_pcie_reset_state - Set PCI-E reset state
   * @dev: pci device struct
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 06898039d11ef41a749c8f8beb902feb870b3eb6,ee244c2e8c2b4379f200ca620bbbee6a35415ddd..783e0870bd225b0fb2b2e9ebc5ff7bd795f17d5c
@@@ -63,11 -61,7 +63,7 @@@ config OF_DYNAMI
  
  config OF_ADDRESS
        def_bool y
 -      depends on !SPARC && HAS_IOMEM
 +      depends on !SPARC && (HAS_IOMEM || UML)
-       select OF_ADDRESS_PCI if PCI
- config OF_ADDRESS_PCI
-       bool
  
  config OF_IRQ
        def_bool y
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 8d7448063fd1168aaafff9e1c1a37456b12ddefe,109d43fab40ef571989b1d84ebe95c197659fe4a..a4bfea52e7d48a8b32332344e9bd8ea2e7f41965
@@@ -543,9 -535,8 +537,9 @@@ static void do_recovery(struct pci_dev 
        return;
  
  failed:
 +      pci_uevent_ers(dev, PCI_ERS_RESULT_DISCONNECT);
        /* TODO: Should kernel panic here? */
-       dev_info(&dev->dev, "AER: Device recovery failed\n");
+       pci_info(dev, "AER: Device recovery failed\n");
  }
  
  /**
Simple merge
index ad35aac87971169bc69fca755fdfcff4dc289273,43dcecd6533d632c9c18df9ac0ba047bae9ec483..024a1beda008c69d21bd65fe8d1a36cc92a6021a
@@@ -2281,43 -2277,19 +2280,55 @@@ static inline bool pci_is_thunderbolt_a
        return false;
  }
  
- /* provide the legacy pci_dma_* API */
 +/**
 + * pci_uevent_ers - emit a uevent during recovery path of pci device
 + * @pdev: pci device to check
 + * @err_type: type of error event
 + *
 + */
 +static inline void pci_uevent_ers(struct pci_dev *pdev,
 +                                enum  pci_ers_result err_type)
 +{
 +      int idx = 0;
 +      char *envp[3];
 +
 +      switch (err_type) {
 +      case PCI_ERS_RESULT_NONE:
 +      case PCI_ERS_RESULT_CAN_RECOVER:
 +              envp[idx++] = "ERROR_EVENT=BEGIN_RECOVERY";
 +              envp[idx++] = "DEVICE_ONLINE=0";
 +              break;
 +      case PCI_ERS_RESULT_RECOVERED:
 +              envp[idx++] = "ERROR_EVENT=SUCCESSFUL_RECOVERY";
 +              envp[idx++] = "DEVICE_ONLINE=1";
 +              break;
 +      case PCI_ERS_RESULT_DISCONNECT:
 +              envp[idx++] = "ERROR_EVENT=FAILED_RECOVERY";
 +              envp[idx++] = "DEVICE_ONLINE=0";
 +              break;
 +      default:
 +              break;
 +      }
 +
 +      if (idx > 0) {
 +              envp[idx++] = NULL;
 +              kobject_uevent_env(&pdev->dev.kobj, KOBJ_CHANGE, envp);
 +      }
 +}
 +
+ /* Provide the legacy pci_dma_* API */
  #include <linux/pci-dma-compat.h>
  
+ #define pci_printk(level, pdev, fmt, arg...) \
+       dev_printk(level, &(pdev)->dev, fmt, ##arg)
+ #define pci_emerg(pdev, fmt, arg...)  dev_emerg(&(pdev)->dev, fmt, ##arg)
+ #define pci_alert(pdev, fmt, arg...)  dev_alert(&(pdev)->dev, fmt, ##arg)
+ #define pci_crit(pdev, fmt, arg...)   dev_crit(&(pdev)->dev, fmt, ##arg)
+ #define pci_err(pdev, fmt, arg...)    dev_err(&(pdev)->dev, fmt, ##arg)
+ #define pci_warn(pdev, fmt, arg...)   dev_warn(&(pdev)->dev, fmt, ##arg)
+ #define pci_notice(pdev, fmt, arg...) dev_notice(&(pdev)->dev, fmt, ##arg)
+ #define pci_info(pdev, fmt, arg...)   dev_info(&(pdev)->dev, fmt, ##arg)
+ #define pci_dbg(pdev, fmt, arg...)    dev_dbg(&(pdev)->dev, fmt, ##arg)
  #endif /* LINUX_PCI_H */
Simple merge