1. 15 Aug, 2018 24 commits
    • Bjorn Helgaas's avatar
      Merge branch 'remotes/lorenzo/pci/vmd' · fa687fb9
      Bjorn Helgaas authored
        - Whitelist VMD devices with fast interrupt handlers to avoid sharing
          vectors with slow handlers (Keith Busch)
      
      * remotes/lorenzo/pci/vmd:
        PCI: vmd: White list for fast interrupt handlers
      fa687fb9
    • Bjorn Helgaas's avatar
      Merge branch 'remotes/lorenzo/pci/mvebu' · 323fc750
      Bjorn Helgaas authored
        - Fix mvebu I/O space remapping issues (Thomas Petazzoni)
      
        - Use generic pci_host_bridge in mvebu instead of ARM-specific API
          (Thomas Petazzoni)
      
      * remotes/lorenzo/pci/mvebu:
        PCI: mvebu: Drop bogus comment above mvebu_pcie_map_registers()
        PCI: mvebu: Convert to use pci_host_bridge directly
        PCI: mvebu: Use resource_size() to remap I/O space
        PCI: mvebu: Only remap I/O space if configured
        PCI: mvebu: Fix I/O space end address calculation
        PCI: mvebu: Remove redundant platform_set_drvdata() call
      323fc750
    • Bjorn Helgaas's avatar
      Merge branch 'remotes/lorenzo/pci/mobiveil' · 732c4701
      Bjorn Helgaas authored
        - Fix mobiveil iomem/phys_addr_t type usage (Lorenzo Pieralisi)
      
        - Fix mobiveil missing include file (Lorenzo Pieralisi)
      
        - Add mobiveil Kconfig/Makefile support (Lorenzo Pieralisi)
      
      * remotes/lorenzo/pci/mobiveil:
        PCI: mobiveil: Add Kconfig/Makefile entries
        PCI: mobiveil: Add missing ../pci.h include
        PCI: mobiveil: Fix struct mobiveil_pcie.pcie_reg_base address type
        PCI: mobiveil: Integer overflow in IB_WIN_SIZE
      732c4701
    • Bjorn Helgaas's avatar
      Merge branch 'remotes/lorenzo/pci/iproc' · 0ea77d2b
      Bjorn Helgaas authored
        - Add more devices to Broadcom PAXC quirk (Ray Jui)
      
        - Work around corrupted Broadcom PAXC config space to enable SMMU and
          GICv3 ITS (Ray Jui)
      
        - Disable MSI parsing to work around broken Broadcom PAXC logic in some
          devices (Ray Jui)
      
        - Hide unconfigured functions to work around a Broadcom PAXC defect (Ray
          Jui)
      
        - Lower iproc log level to reduce console output during boot (Ray Jui)
      
      * remotes/lorenzo/pci/iproc:
        PCI: iproc: Reduce inbound/outbound mapping print level
        PCI: iproc: Reject unconfigured physical functions from PAXC
        PCI: iproc: Disable MSI parsing in certain PAXC blocks
        PCI: iproc: Fix up corrupted PAXC root complex config registers
        PCI: iproc: Activate PAXC bridge quirk for more devices
      0ea77d2b
    • Bjorn Helgaas's avatar
      Merge branch 'remotes/lorenzo/pci/hv' · 1974704e
      Bjorn Helgaas authored
        - Remove unnecessary GFP_ATOMIC from Hyper-V "new child" allocation
          (Jia-Ju Bai)
      
      * remotes/lorenzo/pci/hv:
        PCI: hv: Replace GFP_ATOMIC with GFP_KERNEL in new_pcichild_device()
      1974704e
    • Bjorn Helgaas's avatar
      Merge branch 'remotes/lorenzo/pci/dwc' · 0c38011a
      Bjorn Helgaas authored
        - Add Kirin MSI support (Xiaowei Song)
      
        - Drop unnecessary root_bus_nr setting from exynos, imx6, keystone,
          armada8k, artpec6, designware-plat, histb, qcom, spear13xx (Shawn Guo)
      
        - Move link notification settings from DesignWare core to individual
          drivers (Gustavo Pimentel)
      
        - Add endpoint library MSI-X interfaces (Gustavo Pimentel)
      
        - Correct signature of endpoint library IRQ interfaces (Gustavo Pimentel)
      
        - Add DesignWare endpoint library MSI-X callbacks (Gustavo Pimentel)
      
        - Add endpoint library MSI-X test support (Gustavo Pimentel)
      
      * remotes/lorenzo/pci/dwc:
        PCI: endpoint: Add MSI set maximum restriction
        tools: PCI: Add MSI-X support
        pci_endpoint_test: Add 2 ioctl commands
        pci-epf-test/pci_endpoint_test: Add MSI-X support
        pci-epf-test/pci_endpoint_test: Use irq_type module parameter
        pci-epf-test/pci_endpoint_test: Cleanup PCI_ENDPOINT_TEST memspace
        PCI: dwc: Add legacy interrupt callback handler
        PCI: dwc: Rework MSI callbacks handler
        PCI: dwc: Add MSI-X callbacks handler
        PCI: Update xxx_pcie_ep_raise_irq() and pci_epc_raise_irq() signatures
        PCI: endpoint: Add MSI-X interfaces
        PCI: dwc: Fix EP link notification implementation
        PCI: spear13xx: Drop unnecessary root_bus_nr setting
        PCI: qcom: Drop unnecessary root_bus_nr setting
        PCI: histb: Drop unnecessary root_bus_nr setting
        PCI: designware-plat: Drop unnecessary root_bus_nr setting
        PCI: artpec6: Drop unnecessary root_bus_nr setting
        PCI: armada8k: Drop unnecessary root_bus_nr setting
        PCI: keystone: Drop unnecessary root_bus_nr setting
        PCI: imx6: Drop unnecessary root_bus_nr setting
        PCI: exynos: Drop unnecessary root_bus_nr setting
        PCI: kirin: Add MSI support
      0c38011a
    • Bjorn Helgaas's avatar
      Merge branch 'remotes/lorenzo/pci/cadence' · 37f0e311
      Bjorn Helgaas authored
        - Correct the Cadence cdns_pcie_writel() signature (Alan Douglas)
      
        - Add Cadence support for optional generic PHYs (Alan Douglas)
      
        - Add Cadence power management ops (Alan Douglas)
      
        - Remove redundant variable from Cadence driver (Colin Ian King)
      
      * remotes/lorenzo/pci/cadence:
        PCI: pcie-cadence-ep: Remove redundant variable mmc
        PCI: cadence: Add shutdown callback to host driver
        PCI: cadence: Add Power Management ops for host and EP
        dt-bindings: PCI: cadence: Add DT bindings for optional PHYs
        PCI: cadence: Add generic PHY support to host and EP drivers
        PCI: cadence: Update cdns_pcie_writel() function signature
      37f0e311
    • Bjorn Helgaas's avatar
      Merge branch 'remotes/lorenzo/pci/aardvark' · ce342a1a
      Bjorn Helgaas authored
        - Remove Aardvark outbound window configuration (Evan Wang)
      
        - Fix Aardvark bridge window sizing issue (Zachary Zhang)
      
        - Convert Aardvark to use pci_host_probe() to reduce code duplication
          (Thomas Petazzoni)
      
      * remotes/lorenzo/pci/aardvark:
        PCI: aardvark: Convert to use pci_host_probe()
        PCI: aardvark: Size bridges before resources allocation
        PCI: aardvark: Remove PCIe outbound window configuration
        PCI: aardvark: Introduce an advk_pcie_valid_device() helper
      
      # Conflicts:
      #	drivers/pci/controller/pci-aardvark.c
      ce342a1a
    • Bjorn Helgaas's avatar
      Merge branch 'remotes/lorenzo/pci/controller/misc' · 0d567686
      Bjorn Helgaas authored
        - Remove Xilinx AXI-PCIe host bridge arch dependency (Palmer Dabbelt)
      
      * remotes/lorenzo/pci/controller/misc:
        PCI/xilinx: Depend on OF instead of the ARCH
      0d567686
    • Bjorn Helgaas's avatar
      Merge branch 'pci/virtualization' · 3a48dc6f
      Bjorn Helgaas authored
        - To avoid bus errors, enable PASID only if entire path supports End-End
          TLP prefixes (Sinan Kaya)
      
        - Unify slot and bus reset functions and remove hotplug knowledge from
          callers (Sinan Kaya)
      
        - Add Function-Level Reset quirks for Intel and Samsung NVMe devices to
          fix guest reboot issues (Alex Williamson)
      
        - Add function 1 DMA alias quirk for Marvell 88SS9183 PCIe SSD Controller
          (Bjorn Helgaas)
      
      * pci/virtualization:
        PCI: Add function 1 DMA alias quirk for Marvell 88SS9183
        PCI: Delay after FLR of Intel DC P3700 NVMe
        PCI: Disable Samsung SM961/PM961 NVMe before FLR
        PCI: Export pcie_has_flr()
        PCI: Rename pci_try_reset_bus() to pci_reset_bus()
        PCI: Deprecate pci_reset_bus() and pci_reset_slot() functions
        PCI: Unify try slot and bus reset API
        PCI: Hide pci_reset_bridge_secondary_bus() from drivers
        IB/hfi1: Use pci_try_reset_bus() for initiating PCI Secondary Bus Reset
        PCI: Handle error return from pci_reset_bridge_secondary_bus()
        PCI/IOV: Tidy pci_sriov_set_totalvfs()
        PCI: Enable PASID only if entire path supports End-End TLP prefixes
      
      # Conflicts:
      #	drivers/pci/hotplug/pciehp_hpc.c
      3a48dc6f
    • Bjorn Helgaas's avatar
      Merge branch 'pci/switchtec' · e7aaf90f
      Bjorn Helgaas authored
        - Add DMA alias quirk for Microsemi Switchtec NTB (Doug Meyer)
      
        - Expand documentation for pci_add_dma_alias() (Logan Gunthorpe)
      
      * pci/switchtec:
        PCI: Expand documentation for pci_add_dma_alias()
        PCI: Add DMA alias quirk for Microsemi Switchtec NTB
        switchtec: Use generic PCI Vendor ID and Class Code
      
      # Conflicts:
      #	drivers/pci/quirks.c
      e7aaf90f
    • Bjorn Helgaas's avatar
      Merge branch 'pci/resource' · 5fc054a5
      Bjorn Helgaas authored
        - Clean up devm_of_pci_get_host_bridge_resources() resource allocation
          (Jan Kiszka)
      
        - Fixup resizable BARs after suspend/resume (Christian König)
      
        - Make "pci=earlydump" generic (Sinan Kaya)
      
        - Fix ROM BAR access routines to stay in bounds and check for signature
          correctly (Rex Zhu)
      
      * pci/resource:
        PCI: Make pci_get_rom_size() static
        PCI: Add check code for last image indicator not set
        PCI: Avoid accessing memory outside the ROM BAR
        PCI: Make early dump functionality generic
        PCI: Cleanup PCI_REBAR_CTRL_BAR_SHIFT handling
        PCI: Restore resized BAR state on resume
        PCI: Clean up resource allocation in devm_of_pci_get_host_bridge_resources()
      
      # Conflicts:
      #	Documentation/admin-guide/kernel-parameters.txt
      5fc054a5
    • Bjorn Helgaas's avatar
      Merge branch 'pci/peer-to-peer' · c689209b
      Bjorn Helgaas authored
        - Add "pci=disable_acs_redir=" parameter to disable ACS redirection for
          peer-to-peer DMA support (we don't have the peer-to-peer support yet;
          this is just one piece) (Logan Gunthorpe)
      
      * pci/peer-to-peer:
        PCI: Add ACS Redirect disable quirk for Intel Sunrise Point
        PCI: Add device-specific ACS Redirect disable infrastructure
        PCI: Convert device-specific ACS quirks from NULL termination to ARRAY_SIZE
        PCI: Add "pci=disable_acs_redir=" parameter for peer-to-peer support
        PCI: Allow specifying devices using a base bus and path of devfns
        PCI: Make specifying PCI devices in kernel parameters reusable
        PCI: Hide ACS quirk declarations inside PCI core
      c689209b
    • Bjorn Helgaas's avatar
      Merge branch 'pci/notes' · eadf3d32
      Bjorn Helgaas authored
        - Document ACPI description of PCI host bridges (Bjorn Helgaas)
      
      * pci/notes:
        PCI: Document ACPI description of PCI host bridges
      eadf3d32
    • Bjorn Helgaas's avatar
      Merge branch 'pci/msi' · 11c1a8e1
      Bjorn Helgaas authored
        - Set IRQCHIP_ONESHOT_SAFE for PCI MSI irqchips (Heiner Kallweit)
      
      * pci/msi:
        PCI/MSI: Set IRQCHIP_ONESHOT_SAFE for PCI-MSI irqchips
      11c1a8e1
    • Bjorn Helgaas's avatar
      Merge branch 'pci/misc' · a40f72db
      Bjorn Helgaas authored
        - Mark fall-through switch cases before enabling -Wimplicit-fallthrough
          (Gustavo A. R. Silva)
      
        - Move DMA-debug PCI init from arch code to PCI core (Christoph Hellwig)
      
        - Fix pci_request_irq() usage of IRQF_ONESHOT when no handler is supplied
          (Heiner Kallweit)
      
        - Unify PCI and DMA direction #defines (Shunyong Yang)
      
        - Add PCI_DEVICE_DATA() macro (Andy Shevchenko)
      
        - Check for VPD completion before checking for timeout (Bert Kenward)
      
        - Limit Netronome NFP5000 config space size to work around erratum (Jakub
          Kicinski)
      
      * pci/misc:
        PCI: Limit config space size for Netronome NFP5000
        PCI/VPD: Check for VPD access completion before checking for timeout
        PCI: Add PCI_DEVICE_DATA() macro to fully describe device ID entry
        PCI: Unify PCI and normal DMA direction definitions
        PCI: Use IRQF_ONESHOT if pci_request_irq() called with no handler
        PCI: Call dma_debug_add_bus() for pci_bus_type from PCI core
        PCI: Mark fall-through switch cases before enabling -Wimplicit-fallthrough
      
      # Conflicts:
      #	drivers/pci/hotplug/pciehp_ctrl.c
      a40f72db
    • Bjorn Helgaas's avatar
      Merge branch 'pci/hotplug' · c0638a45
      Bjorn Helgaas authored
        - Simplify SHPC existence/permission checks (Bjorn Helgaas)
      
        - Remove hotplug sample skeleton driver (Lukas Wunner)
      
        - Convert pciehp to threaded IRQ handling (Lukas Wunner)
      
        - Improve pciehp tolerance of missed events and initially unstable links
          (Lukas Wunner)
      
        - Clear spurious pciehp events on resume (Lukas Wunner)
      
        - Add pciehp runtime PM support, including for Thunderbolt controllers
          (Lukas Wunner)
      
        - Support interrupts from pciehp bridges in D3hot (Lukas Wunner)
      
      * pci/hotplug:
        PCI: pciehp: Deduplicate presence check on probe & resume
        PCI: pciehp: Avoid implicit fallthroughs in switch statements
        PCI: Whitelist Thunderbolt ports for runtime D3
        PCI: Whitelist native hotplug ports for runtime D3
        PCI: sysfs: Resume to D0 on function reset
        PCI: pciehp: Resume parent to D0 on config space access
        PCI: pciehp: Resume to D0 on enable/disable
        PCI: pciehp: Support interrupts sent from D3hot
        PCI: pciehp: Obey compulsory command delay after resume
        PCI: pciehp: Clear spurious events earlier on resume
        PCI: portdrv: Deduplicate PM callback iterator
        PCI: pciehp: Avoid slot access during reset
        PCI: pciehp: Always enable occupied slot on probe
        PCI: pciehp: Become resilient to missed events
        PCI: pciehp: Tolerate initially unstable link
        PCI: pciehp: Declare pciehp_enable/disable_slot() static
        PCI: pciehp: Drop enable/disable lock
        PCI: pciehp: Enable/disable exclusively from IRQ thread
        PCI: pciehp: Track enable/disable status
        PCI: pciehp: Publish to user space last on probe
        PCI: hotplug: Demidlayer registration with the core
        PCI: pciehp: Drop slot workqueue
        PCI: pciehp: Handle events synchronously
        PCI: pciehp: Stop blinking on slot enable failure
        PCI: pciehp: Convert to threaded polling
        PCI: pciehp: Convert to threaded IRQ
        PCI: pciehp: Document struct slot and struct controller
        PCI: pciehp: Declare pciehp_unconfigure_device() void
        PCI: pciehp: Drop unnecessary NULL pointer check
        PCI: pciehp: Fix unprotected list iteration in IRQ handler
        PCI: pciehp: Fix use-after-free on unplug
        PCI: hotplug: Don't leak pci_slot on registration failure
        PCI: hotplug: Delete skeleton driver
        PCI: shpchp: Separate existence of SHPC and permission to use it
      c0638a45
    • Bjorn Helgaas's avatar
      Merge branch 'pci/enumeration' · a8bcb5e5
      Bjorn Helgaas authored
        - Work around IDT switch ACS Source Validation erratum (James
          Puthukattukaran)
      
        - Emit diagnostics for all cases of PCIe Link downtraining (Links
          operating slower than they're capable of) (Alexandru Gagniuc)
      
        - Skip VFs when configuring Max Payload Size (Myron Stowe)
      
        - Reduce Root Port Max Payload Size if necessary when hot-adding a device
          below it (Myron Stowe)
      
      * pci/enumeration:
        PCI: Match Root Port's MPS to endpoint's MPSS as necessary
        PCI: Skip MPS logic for Virtual Functions (VFs)
        PCI: Check for PCIe Link downtraining
        PCI: Workaround IDT switch ACS Source Validation erratum
      a8bcb5e5
    • Bjorn Helgaas's avatar
      Merge branch 'pci/dpc' · 1ca358a8
      Bjorn Helgaas authored
        - Defer DPC event handling to work queue (Keith Busch)
      
        - Use threaded IRQ for DPC bottom half (Keith Busch)
      
        - Print AER status while handling DPC events (Keith Busch)
      
      * pci/dpc:
        PCI/DPC: Remove indirection waiting for inactive link
        PCI/DPC: Use threaded IRQ for bottom half handling
        PCI/DPC: Print AER status in DPC event handling
        PCI/DPC: Remove rp_pio_status from dpc struct
        PCI/DPC: Defer event handling to work queue
        PCI/DPC: Leave interrupts enabled while handling event
      1ca358a8
    • Bjorn Helgaas's avatar
      Merge branch 'pci/aspm' · 187dacce
      Bjorn Helgaas authored
        - Use sysfs_match_string() to simplify ASPM sysfs parsing (Andy
          Shevchenko)
      
        - Remove unnecessary includes of <linux/pci-aspm.h> (Bjorn Helgaas)
      
      * pci/aspm:
        PCI: Remove unnecessary include of <linux/pci-aspm.h>
        iwlwifi: Remove unnecessary include of <linux/pci-aspm.h>
        ath9k: Remove unnecessary include of <linux/pci-aspm.h>
        igb: Remove unnecessary include of <linux/pci-aspm.h>
        PCI/ASPM: Convert to use sysfs_match_string() helper
      187dacce
    • Bjorn Helgaas's avatar
      Merge branch 'pci/aer' · 3c3ab37f
      Bjorn Helgaas authored
        - Decode AER errors with names similar to "lspci" (Tyler Baicar)
      
        - Expose AER statistics in sysfs (Rajat Jain)
      
        - Clear AER status bits selectively based on the type of recovery (Oza
          Pawandeep)
      
        - Honor "pcie_ports=native" even if HEST sets FIRMWARE_FIRST (Alexandru
          Gagniuc)
      
        - Don't clear AER status bits if we're using the "Firmware-First"
          strategy where firmware owns the registers (Alexandru Gagniuc)
      
      * pci/aer:
        PCI/AER: Don't clear AER bits if error handling is Firmware-First
        PCI/AER: Remove duplicate PCI_EXP_AER_FLAGS definition
        PCI/portdrv: Remove pcie_portdrv_err_handler.slot_reset
        PCI/AER: Clear device status bits during ERR_COR handling
        PCI/AER: Clear device status bits during ERR_FATAL and ERR_NONFATAL
        PCI/AER: Remove ERR_FATAL code from ERR_NONFATAL path
        PCI/AER: Factor out ERR_NONFATAL status bit clearing
        PCI/AER: Clear only ERR_NONFATAL bits during non-fatal recovery
        PCI/AER: Clear only ERR_FATAL status bits during fatal recovery
        PCI/AER: Honor "pcie_ports=native" even if HEST sets FIRMWARE_FIRST
        PCI/AER: Add sysfs attributes for rootport cumulative stats
        PCI/AER: Add sysfs attributes to provide AER stats and breakdown
        PCI/AER: Define aer_stats structure for AER capable devices
        PCI/AER: Move internal declarations to drivers/pci/pci.h
        PCI/AER: Adopt lspci names for AER error decoding
        PCI/AER: Expose internal API for obtaining AER information
      
      # Conflicts:
      #	drivers/pci/pci.h
      3c3ab37f
    • Bjorn Helgaas's avatar
      Merge branch 'for-linus' · af863d18
      Bjorn Helgaas authored
      * for-linus:
        PCI: Fix is_added/is_busmaster race condition
        PCI: mobiveil: Avoid integer overflow in IB_WIN_SIZE
        PCI/AER: Work around use-after-free in pcie_do_fatal_recovery()
        PCI: v3-semi: Fix I/O space page leak
        PCI: mediatek: Fix I/O space page leak
        PCI: faraday: Fix I/O space page leak
        PCI: aardvark: Fix I/O space page leak
        PCI: designware: Fix I/O space page leak
        PCI: versatile: Fix I/O space page leak
        PCI: xgene: Fix I/O space page leak
        PCI: OF: Fix I/O space page leak
        PCI: endpoint: Fix NULL pointer dereference error when CONFIGFS is disabled
        PCI: hv: Disable/enable IRQs rather than BH in hv_compose_msi_msg()
        nfp: stop limiting VFs to 0
        PCI/IOV: Reset total_VFs limit after detaching PF driver
        PCI: faraday: Add missing of_node_put()
        PCI: xilinx-nwl: Add missing of_node_put()
        PCI: xilinx: Add missing of_node_put()
        PCI: endpoint: Use after free in pci_epf_unregister_driver()
        PCI: controller: dwc: Do not let PCIE_DW_PLAT_HOST default to yes
        PCI: rcar: Clean up PHY init on failure
        PCI: rcar: Shut the PHY down in failpath
        PCI: controller: Move PCI_DOMAINS selection to arch Kconfig
        PCI: Initialize endpoint library before controllers
        PCI: shpchp: Manage SHPC unconditionally on non-ACPI systems
      af863d18
    • Alexandru Gagniuc's avatar
      PCI/AER: Don't clear AER bits if error handling is Firmware-First · 45687f96
      Alexandru Gagniuc authored
      If the platform requests Firmware-First error handling, firmware is
      responsible for reading and clearing AER status bits.  If OSPM also clears
      them, we may miss errors.  See ACPI v6.2, sec 18.3.2.5 and 18.4.
      
      This race is mostly of theoretical significance, as it is not easy to
      reasonably demonstrate it in testing.
      Signed-off-by: default avatarAlexandru Gagniuc <mr.nuke.me@gmail.com>
      [bhelgaas: add similar guards to pci_cleanup_aer_uncorrect_error_status()
      and pci_aer_clear_fatal_status()]
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      45687f96
    • Jakub Kicinski's avatar
      PCI: Limit config space size for Netronome NFP5000 · 2538fb89
      Jakub Kicinski authored
      Like the NFP4000 and NFP6000, the NFP5000 as an erratum where reading/
      writing to PCI config space addresses above 0x600 can cause the NFP to
      generate PCIe completion timeouts.
      
      Limit the NFP5000's PF's config space size to 0x600 bytes as is already
      done for the NFP4000 and NFP6000.
      
      The NFP5000's VF is 0x6003 (PCI_DEVICE_ID_NETRONOME_NFP6000_VF), the same
      device ID as the NFP6000's VF.  Thus, its config space is already limited
      by the existing use of quirk_nfp6000().
      Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Reviewed-by: default avatarTony Egan <tony.egan@netronome.com>
      2538fb89
  2. 14 Aug, 2018 5 commits
    • Heiner Kallweit's avatar
      PCI/MSI: Set IRQCHIP_ONESHOT_SAFE for PCI-MSI irqchips · 923aa4c3
      Heiner Kallweit authored
      If flag IRQCHIP_ONESHOT_SAFE isn't set for an irqchip and we have a
      threaded interrupt with no primary handler, flag IRQF_ONESHOT needs to be
      set for the interrupt, causing some overhead in the threaded interrupt
      handler.  For more detailed explanation also check following comment in
      __setup_irq():
      
        The interrupt was requested with handler = NULL, so we use the default
        primary handler for it. But it does not have the oneshot flag set.  In
        combination with level interrupts this is deadly, because the default
        primary handler just wakes the thread, then the irq lines is reenabled,
        but the device still has the level irq asserted.  Rinse and repeat....
      
        While this works for edge type interrupts, we play it safe and reject
        unconditionally because we can't say for sure which type this interrupt
        really has.  The type flags are unreliable as the underlying chip
        implementation can override them.
      
      Another comment in __setup_irq() gives a hint already that this
      overhead can be avoided for PCI-MSI:
      
        Some irq chips like MSI based interrupts are per se one shot safe.  Check
        the chip flags, so we can avoid the unmask dance at the end of the
        threaded handler for those.
      
      Following this let's mark all PCI-MSI irqchips as oneshot-safe.
      
      See also discussion here:
      https://lkml.kernel.org/r/alpine.DEB.2.21.1808032136490.1658@nanos.tec.linutronix.deSigned-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      923aa4c3
    • Bert Kenward's avatar
      PCI/VPD: Check for VPD access completion before checking for timeout · 6eaf2781
      Bert Kenward authored
      Previously we checked the timeout before checking the VPD access completion
      bit.  On a very heavily loaded system this can cause VPD access to timeout.
      Check the completion bit before checking the timeout.
      Signed-off-by: default avatarBert Kenward <bkenward@solarflare.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      6eaf2781
    • Andy Shevchenko's avatar
      PCI: Add PCI_DEVICE_DATA() macro to fully describe device ID entry · b72ae8ca
      Andy Shevchenko authored
      There are a lot of examples in the kernel where PCI_VDEVICE() is used and
      still looks not so convenient due to additional driver_data field attached.
      
      Introduce PCI_DEVICE_DATA() macro to fully describe device ID entry in
      shortest possible form. For example,
      
        before:
      
          { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_MRFLD),
            (kernel_ulong_t) &dwc3_pci_mrfld_properties, },
      
        after:
      
          { PCI_DEVICE_DATA(INTEL, MRFLD, &dwc3_pci_mrfld_properties) },
      
      Drivers can be converted later on in independent way.
      
      While here, remove the unused macro with the same name from Ralink wireless
      driver.
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Acked-by: Kalle Valo <kvalo@codeaurora.org>	# for rt2x00
      b72ae8ca
    • Myron Stowe's avatar
      PCI: Match Root Port's MPS to endpoint's MPSS as necessary · 9f0e8935
      Myron Stowe authored
      In commit 27d868b5 ("PCI: Set MPS to match upstream bridge"), we made
      sure every device's MPS setting matches its upstream bridge, making it more
      likely that a hot-added device will work in a system with an optimized MPS
      configuration.
      
      Recently I've started encountering systems where the endpoint device's MPSS
      capability is less than its Root Port's current MPS value, thus the
      endpoint is not capable of matching its upstream bridge's MPS setting (see:
      bugzilla via "Link:" below).  This leaves the system vulnerable - the
      upstream Root Port could respond with larger TLPs than the device can
      handle, and the device will consider them to be 'Malformed'.
      
      One could use the "pci=pcie_bus_safe" kernel parameter to work around the
      issue, but that forces a user to supply a kernel parameter to get the
      system to function reliably and may end up limiting MPS settings of other
      unrelated, sub-topologies which could benefit from maintaining their larger
      values.
      
      Augment Keith's approach to include tuning down a Root Port's MPS setting
      when its hot-added endpoint device is not capable of matching it.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=200527Signed-off-by: default avatarMyron Stowe <myron.stowe@redhat.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Acked-by: default avatarJon Mason <jdmason@kudzu.us>
      Cc: Keith Busch <keith.busch@intel.com>
      Cc: Sinan Kaya <okaya@kernel.org>
      Cc: Dongdong Liu <liudongdong3@huawei.com>
      9f0e8935
    • Myron Stowe's avatar
      PCI: Skip MPS logic for Virtual Functions (VFs) · 3dbe97ef
      Myron Stowe authored
      PCIe r4.0, sec 9.3.5.4, "Device Control Register", shows both
      Max_Payload_Size (MPS) and Max_Read_request_Size (MRRS) to be 'RsvdP' for
      VFs.  Just prior to the table it states:
      
        "PF and VF functionality is defined in Section 7.5.3.4 except where
         noted in Table 9-16.  For VF fields marked 'RsvdP', the PF setting
         applies to the VF."
      
      All of which implies that with respect to Max_Payload_Size Supported
      (MPSS), MPS, and MRRS values, we should not be paying any attention to the
      VF's fields, but rather only to the PF's.  Only looking at the PF's fields
      also logically makes sense as it's the sole physical interface to the PCIe
      bus.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=200527
      Fixes: 27d868b5 ("PCI: Set MPS to match upstream bridge")
      Signed-off-by: default avatarMyron Stowe <myron.stowe@redhat.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Cc: stable@vger.kernel.org # 4.3+
      Cc: Keith Busch <keith.busch@intel.com>
      Cc: Sinan Kaya <okaya@kernel.org>
      Cc: Dongdong Liu <liudongdong3@huawei.com>
      Cc: Jon Mason <jdmason@kudzu.us>
      3dbe97ef
  3. 13 Aug, 2018 1 commit
  4. 10 Aug, 2018 1 commit
    • Alexandru Gagniuc's avatar
      PCI: Check for PCIe Link downtraining · 2d1ce5ec
      Alexandru Gagniuc authored
      When both ends of a PCIe Link are capable of a higher bandwidth than is
      currently in use, the Link is said to be "downtrained".  A downtrained Link
      may indicate hardware or configuration problems in the system, but it's
      hard to identify such Links from userspace.
      
      Refactor pcie_print_link_status() so it continues to always print PCIe
      bandwidth information, as several NIC drivers desire.
      
      Add a new internal __pcie_print_link_status() to emit a message only when a
      device's bandwidth is constrained by the fabric and call it from the PCI
      core for all devices, which identifies all downtrained Links.  It also
      emits messages for a few cases that are technically not downtrained, such
      as a x4 device in an open-ended x1 slot.
      Signed-off-by: default avatarAlexandru Gagniuc <mr.nuke.me@gmail.com>
      [bhelgaas: changelog, move __pcie_print_link_status() declaration to
      drivers/pci/, rename pcie_check_upstream_link() to
      pcie_report_downtraining()]
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      2d1ce5ec
  5. 09 Aug, 2018 9 commits