Merge tag 'pci-v5.9-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 8 Aug 2020 01:48:15 +0000 (18:48 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 8 Aug 2020 01:48:15 +0000 (18:48 -0700)
Pull PCI updates from Bjorn Helgaas:
 "Enumeration:
   - Fix pci_cfg_wait queue locking problem (Bjorn Helgaas)
   - Convert PCIe capability PCIBIOS errors to errno (Bolarinwa Olayemi
     Saheed)
   - Align PCIe capability and PCI accessor return values (Bolarinwa
     Olayemi Saheed)
   - Fix pci_create_slot() reference count leak (Qiushi Wu)
   - Announce device after early fixups (Tiezhu Yang)

  PCI device hotplug:
   - Make rpadlpar functions static (Wei Yongjun)

  Driver binding:
   - Add device even if driver attach failed (Rajat Jain)

  Virtualization:
   - xen: Remove redundant initialization of irq (Colin Ian King)

  IOMMU:
   - Add pci_pri_supported() to check device or associated PF (Ashok Raj)
   - Release IVRS table in AMD ACS quirk (Hanjun Guo)
   - Mark AMD Navi10 GPU rev 0x00 ATS as broken (Kai-Heng Feng)
   - Treat "external-facing" devices themselves as internal (Rajat Jain)

  MSI:
   - Forward MSI-X error code in pci_alloc_irq_vectors_affinity() (Piotr
     Stankiewicz)

  Error handling:
   - Clear PCIe Device Status errors only if OS owns AER (Jonathan
     Cameron)
   - Log correctable errors as warning, not error (Matt Jolly)
   - Use 'pci_channel_state_t' instead of 'enum pci_channel_state' (Luc
     Van Oostenryck)

  Peer-to-peer DMA:
   - Allow P2PDMA on AMD Zen and newer CPUs (Logan Gunthorpe)

  ASPM:
   - Add missing newline in sysfs 'policy' (Xiongfeng Wang)

  Native PCIe controllers:
   - Convert to devm_platform_ioremap_resource_byname() (Dejin Zheng)
   - Convert to devm_platform_ioremap_resource() (Dejin Zheng)
   - Remove duplicate error message from devm_pci_remap_cfg_resource()
     callers (Dejin Zheng)
   - Fix runtime PM imbalance on error (Dinghao Liu)
   - Remove dev_err() when handing an error from platform_get_irq()
     (Krzysztof Wilczyński)
   - Use pci_host_bridge.windows list directly instead of splicing in a
     temporary list for cadence, mvebu, host-common (Rob Herring)
   - Use pci_host_probe() instead of open-coding all the pieces for
     altera, brcmstb, iproc, mobiveil, rcar, rockchip, tegra, v3,
     versatile, xgene, xilinx, xilinx-nwl (Rob Herring)
   - Default host bridge parent device to the platform device (Rob
     Herring)
   - Use pci_is_root_bus() instead of tracking root bus number
     separately in aardvark, designware (imx6, keystone,
     designware-host), mobiveil, xilinx-nwl, xilinx, rockchip, rcar (Rob
     Herring)
   - Set host bridge bus number in pci_scan_root_bus_bridge() instead of
     each driver for aardvark, designware-host, host-common, mediatek,
     rcar, tegra, v3-semi (Rob Herring)
   - Move DT resource setup into devm_pci_alloc_host_bridge() (Rob
     Herring)
   - Set bridge map_irq and swizzle_irq to default functions; drivers
     that don't support legacy IRQs (iproc) need to undo this (Rob
     Herring)

  ARM Versatile PCIe controller driver:
   - Drop flag PCI_ENABLE_PROC_DOMAINS (Rob Herring)

  Cadence PCIe controller driver:
   - Use "dma-ranges" instead of "cdns,no-bar-match-nbits" property
     (Kishon Vijay Abraham I)
   - Remove "mem" from reg binding (Kishon Vijay Abraham I)
   - Fix cdns_pcie_{host|ep}_setup() error path (Kishon Vijay Abraham I)
   - Convert all r/w accessors to perform only 32-bit accesses (Kishon
     Vijay Abraham I)
   - Add support to start link and verify link status (Kishon Vijay
     Abraham I)
   - Allow pci_host_bridge to have custom pci_ops (Kishon Vijay Abraham I)
   - Add new *ops* for CPU addr fixup (Kishon Vijay Abraham I)
   - Fix updating Vendor ID and Subsystem Vendor ID register (Kishon
     Vijay Abraham I)
   - Use bridge resources for outbound window setup (Rob Herring)
   - Remove private bus number and range storage (Rob Herring)

  Cadence PCIe endpoint driver:
   - Add MSI-X support (Alan Douglas)

  HiSilicon PCIe controller driver:
   - Remove non-ECAM HiSilicon hip05/hip06 driver (Rob Herring)

  Intel VMD host bridge driver:
   - Use Shadow MEMBAR registers for QEMU/KVM guests (Jon Derrick)

  Loongson PCIe controller driver:
   - Use DECLARE_PCI_FIXUP_EARLY for bridge_class_quirk() (Tiezhu Yang)

  Marvell Aardvark PCIe controller driver:
   - Indicate error in 'val' when config read fails (Pali Rohár)
   - Don't touch PCIe registers if no card connected (Pali Rohár)

  Marvell MVEBU PCIe controller driver:
   - Setup BAR0 in order to fix MSI (Shmuel Hazan)

  Microsoft Hyper-V host bridge driver:
   - Fix a timing issue which causes kdump to fail occasionally (Wei Hu)
   - Make some functions static (Wei Yongjun)

  NVIDIA Tegra PCIe controller driver:
   - Revert tegra124 raw_violation_fixup (Nicolas Chauvet)
   - Remove PLL power supplies (Thierry Reding)

  Qualcomm PCIe controller driver:
   - Change duplicate PCI reset to phy reset (Abhishek Sahu)
   - Add missing ipq806x clocks in PCIe driver (Ansuel Smith)
   - Add missing reset for ipq806x (Ansuel Smith)
   - Add ext reset (Ansuel Smith)
   - Use bulk clk API and assert on error (Ansuel Smith)
   - Add support for tx term offset for rev 2.1.0 (Ansuel Smith)
   - Define some PARF params needed for ipq8064 SoC (Ansuel Smith)
   - Add ipq8064 rev2 variant (Ansuel Smith)
   - Support PCI speed set for ipq806x (Sham Muthayyan)

  Renesas R-Car PCIe controller driver:
   - Use devm_pci_alloc_host_bridge() (Rob Herring)
   - Use struct pci_host_bridge.windows list directly (Rob Herring)
   - Convert rcar-gen2 to use modern host bridge probe functions (Rob
     Herring)

  TI J721E PCIe driver:
   - Add TI J721E PCIe host and endpoint driver (Kishon Vijay Abraham I)

  Xilinx Versal CPM PCIe controller driver:
   - Add Versal CPM Root Port driver and YAML schema (Bharat Kumar
     Gogada)

  MicroSemi Switchtec management driver:
   - Add missing __iomem and __user tags to fix sparse warnings (Logan
     Gunthorpe)

  Miscellaneous:
   - Replace http:// links with https:// (Alexander A. Klimov)
   - Replace lkml.org, spinics, gmane with lore.kernel.org (Bjorn
     Helgaas)
   - Remove unused pci_lost_interrupt() (Heiner Kallweit)
   - Move PCI_VENDOR_ID_REDHAT definition to pci_ids.h (Huacai Chen)
   - Fix kerneldoc warnings (Krzysztof Kozlowski)"

* tag 'pci-v5.9-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (113 commits)
  PCI: Fix kerneldoc warnings
  PCI: xilinx-cpm: Add Versal CPM Root Port driver
  PCI: xilinx-cpm: Add YAML schemas for Versal CPM Root Port
  PCI: Set bridge map_irq and swizzle_irq to default functions
  PCI: Move DT resource setup into devm_pci_alloc_host_bridge()
  PCI: rcar-gen2: Convert to use modern host bridge probe functions
  PCI: Remove dev_err() when handing an error from platform_get_irq()
  MAINTAINERS: Add Kishon Vijay Abraham I for TI J721E SoC PCIe
  misc: pci_endpoint_test: Add J721E in pci_device_id table
  PCI: j721e: Add TI J721E PCIe driver
  PCI: switchtec: Add missing __iomem tag to fix sparse warnings
  PCI: switchtec: Add missing __iomem and __user tags to fix sparse warnings
  PCI: rpadlpar: Make functions static
  PCI/P2PDMA: Allow P2PDMA on AMD Zen and newer CPUs
  PCI: Release IVRS table in AMD ACS quirk
  PCI: Announce device after early fixups
  PCI: Mark AMD Navi10 GPU rev 0x00 ATS as broken
  PCI: Remove unused pci_lost_interrupt()
  dt-bindings: PCI: Add EP mode dt-bindings for TI's J721E SoC
  dt-bindings: PCI: Add host mode dt-bindings for TI's J721E SoC
  ...

22 files changed:
1  2 
Documentation/PCI/pci-error-recovery.rst
Documentation/PCI/pci.rst
MAINTAINERS
arch/powerpc/kernel/eeh_driver.c
drivers/block/rsxx/core.c
drivers/dma/ioat/init.c
drivers/iommu/intel/iommu.c
drivers/misc/genwqe/card_base.c
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/ice/ice_main.c
drivers/net/ethernet/intel/ixgb/ixgb_main.c
drivers/net/ethernet/sfc/efx_common.c
drivers/pci/controller/vmd.c
drivers/pci/msi.c
drivers/pci/pci-acpi.c
drivers/pci/pci.c
drivers/pci/pcie/aer.c
drivers/pci/quirks.c
drivers/scsi/aacraid/linit.c
drivers/scsi/sym53c8xx_2/sym_glue.c
drivers/staging/qlge/qlge_main.c
include/linux/pci.h

Simple merge
diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -1223,114 -1101,3 +1223,114 @@@ void efx_fini_mcdi_logging(struct efx_n
        device_remove_file(&efx->pci_dev->dev, &dev_attr_mcdi_logging);
  }
  #endif
-                                             enum pci_channel_state state)
 +
 +/* A PCI error affecting this device was detected.
 + * At this point MMIO and DMA may be disabled.
 + * Stop the software path and request a slot reset.
 + */
 +static pci_ers_result_t efx_io_error_detected(struct pci_dev *pdev,
++                                            pci_channel_state_t state)
 +{
 +      pci_ers_result_t status = PCI_ERS_RESULT_RECOVERED;
 +      struct efx_nic *efx = pci_get_drvdata(pdev);
 +
 +      if (state == pci_channel_io_perm_failure)
 +              return PCI_ERS_RESULT_DISCONNECT;
 +
 +      rtnl_lock();
 +
 +      if (efx->state != STATE_DISABLED) {
 +              efx->state = STATE_RECOVERY;
 +              efx->reset_pending = 0;
 +
 +              efx_device_detach_sync(efx);
 +
 +              efx_stop_all(efx);
 +              efx_disable_interrupts(efx);
 +
 +              status = PCI_ERS_RESULT_NEED_RESET;
 +      } else {
 +              /* If the interface is disabled we don't want to do anything
 +               * with it.
 +               */
 +              status = PCI_ERS_RESULT_RECOVERED;
 +      }
 +
 +      rtnl_unlock();
 +
 +      pci_disable_device(pdev);
 +
 +      return status;
 +}
 +
 +/* Fake a successful reset, which will be performed later in efx_io_resume. */
 +static pci_ers_result_t efx_io_slot_reset(struct pci_dev *pdev)
 +{
 +      struct efx_nic *efx = pci_get_drvdata(pdev);
 +      pci_ers_result_t status = PCI_ERS_RESULT_RECOVERED;
 +
 +      if (pci_enable_device(pdev)) {
 +              netif_err(efx, hw, efx->net_dev,
 +                        "Cannot re-enable PCI device after reset.\n");
 +              status =  PCI_ERS_RESULT_DISCONNECT;
 +      }
 +
 +      return status;
 +}
 +
 +/* Perform the actual reset and resume I/O operations. */
 +static void efx_io_resume(struct pci_dev *pdev)
 +{
 +      struct efx_nic *efx = pci_get_drvdata(pdev);
 +      int rc;
 +
 +      rtnl_lock();
 +
 +      if (efx->state == STATE_DISABLED)
 +              goto out;
 +
 +      rc = efx_reset(efx, RESET_TYPE_ALL);
 +      if (rc) {
 +              netif_err(efx, hw, efx->net_dev,
 +                        "efx_reset failed after PCI error (%d)\n", rc);
 +      } else {
 +              efx->state = STATE_READY;
 +              netif_dbg(efx, hw, efx->net_dev,
 +                        "Done resetting and resuming IO after PCI error.\n");
 +      }
 +
 +out:
 +      rtnl_unlock();
 +}
 +
 +/* For simplicity and reliability, we always require a slot reset and try to
 + * reset the hardware when a pci error affecting the device is detected.
 + * We leave both the link_reset and mmio_enabled callback unimplemented:
 + * with our request for slot reset the mmio_enabled callback will never be
 + * called, and the link_reset callback is not used by AER or EEH mechanisms.
 + */
 +const struct pci_error_handlers efx_err_handlers = {
 +      .error_detected = efx_io_error_detected,
 +      .slot_reset     = efx_io_slot_reset,
 +      .resume         = efx_io_resume,
 +};
 +
 +int efx_get_phys_port_id(struct net_device *net_dev,
 +                       struct netdev_phys_item_id *ppid)
 +{
 +      struct efx_nic *efx = netdev_priv(net_dev);
 +
 +      if (efx->type->get_phys_port_id)
 +              return efx->type->get_phys_port_id(efx, ppid);
 +      else
 +              return -EOPNOTSUPP;
 +}
 +
 +int efx_get_phys_port_name(struct net_device *net_dev, char *name, size_t len)
 +{
 +      struct efx_nic *efx = netdev_priv(net_dev);
 +
 +      if (snprintf(name, len, "p%u", efx->port_num) >= len)
 +              return -EINVAL;
 +      return 0;
 +}
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge