15 Mar, 2016

4 commits

  • * pci/resource:
    PCI: Simplify pci_create_attr() control flow
    PCI: Don't leak memory if sysfs_create_bin_file() fails
    PCI: Simplify sysfs ROM cleanup
    PCI: Remove unused IORESOURCE_ROM_COPY and IORESOURCE_ROM_BIOS_COPY
    MIPS: Loongson 3: Keep CPU physical (not virtual) addresses in shadow ROM resource
    MIPS: Loongson 3: Use temporary struct resource * to avoid repetition
    ia64/PCI: Keep CPU physical (not virtual) addresses in shadow ROM resource
    ia64/PCI: Use ioremap() instead of open-coded equivalent
    ia64/PCI: Use temporary struct resource * to avoid repetition
    PCI: Clean up pci_map_rom() whitespace
    PCI: Remove arch-specific IORESOURCE_ROM_SHADOW size from sysfs
    PCI: Set ROM shadow location in arch code, not in PCI core
    PCI: Don't enable/disable ROM BAR if we're using a RAM shadow copy
    PCI: Don't assign or reassign immutable resources
    PCI: Mark shadow copy of VGA ROM as IORESOURCE_PCI_FIXED
    x86/PCI: Mark Broadwell-EP Home Agent & PCU as having non-compliant BARs
    PCI: Disable IO/MEM decoding for devices with non-compliant BARs

    Bjorn Helgaas
     
  • * pci/host-hv:
    PCI: hv: Add paravirtual PCI front-end for Microsoft Hyper-V VMs
    PCI: Look up IRQ domain by fwnode_handle
    PCI: Add fwnode_handle to x86 pci_sysdata

    Bjorn Helgaas
     
  • …t-rcar', 'pci/host-tegra', 'pci/host-thunder', 'pci/host-vmd', 'pci/host-xilinx' and 'pci/host-xilinx-nwl' into next

    * pci/host-altera:
    PCI: altera: Fix altera_pcie_link_is_up()

    * pci/host-imx6:
    PCI: imx6: Add DT bindings to configure PHY Tx driver settings

    * pci/host-keystone:
    PCI: keystone: Defer probing if devm_phy_get() returns -EPROBE_DEFER

    * pci/host-rcar:
    PCI: rcar: Depend on ARCH_RENESAS, not ARCH_SHMOBILE

    * pci/host-tegra:
    PCI: tegra: Remove misleading PHYS_OFFSET
    PCI: tegra: Track bus -> CPU mapping
    PCI: tegra: Remove unused struct tegra_pcie.num_ports field
    PCI: tegra: Implement ->{add,remove}_bus() callbacks
    PCI: Add pci_ops.{add,remove}_bus() callbacks

    * pci/host-thunder:
    PCI: thunder: Add driver for ThunderX-pass{1,2} on-chip devices
    PCI: thunder: Add PCIe host driver for ThunderX processors
    PCI: generic: Expose pci_host_common_probe() for use by other drivers
    PCI: generic: Add pci_host_common_probe(), based on gen_pci_probe()
    PCI: generic: Move structure definitions to separate header file

    * pci/host-vmd:
    x86/PCI: VMD: Attach VMD resources to parent domain's resource tree
    x86/PCI: VMD: Set bus resource start to 0
    x86/PCI: VMD: Document code for maintainability

    * pci/host-xilinx:
    microblaze/PCI: Support generic Xilinx AXI PCIe Host Bridge IP driver
    PCI: xilinx: Update Zynq binding with Microblaze node
    PCI: xilinx: Don't call pci_fixup_irqs() on Microblaze
    PCI: xilinx: Remove dependency on ARM-specific struct hw_pci
    PCI: xilinx: Use of_pci_get_host_bridge_resources() to parse DT

    * pci/host-xilinx-nwl:
    PCI: xilinx-nwl: Add support for Xilinx NWL PCIe Host Controller

    Bjorn Helgaas
     
  • …tualization' and 'pci/vpd' into next

    * pci/aer:
    PCI/AER: Log aer_inject error injections
    PCI/AER: Log actual error causes in aer_inject
    PCI/AER: Use dev_warn() in aer_inject
    PCI/AER: Fix aer_inject error codes

    * pci/enumeration:
    PCI: Fix broken URL for Dell biosdevname

    * pci/kconfig:
    PCI: Cleanup pci/pcie/Kconfig whitespace
    PCI: Include pci/hotplug Kconfig directly from pci/Kconfig
    PCI: Include pci/pcie/Kconfig directly from pci/Kconfig

    * pci/misc:
    PCI: Add PCI_CLASS_SERIAL_USB_DEVICE definition
    PCI: Add QEMU top-level IDs for (sub)vendor & device
    unicore32: Remove unused HAVE_ARCH_PCI_SET_DMA_MASK definition
    PCI: Consolidate PCI DMA constants and interfaces in linux/pci-dma-compat.h
    PCI: Move pci_dma_* helpers to common code
    frv/PCI: Remove stray pci_{alloc,free}_consistent() declaration

    * pci/virtualization:
    PCI: Wait for up to 1000ms after FLR reset
    PCI: Support SR-IOV on any function type

    * pci/vpd:
    PCI: Prevent VPD access for buggy devices
    PCI: Sleep rather than busy-wait for VPD access completion
    PCI: Fold struct pci_vpd_pci22 into struct pci_vpd
    PCI: Rename VPD symbols to remove unnecessary "pci22"
    PCI: Remove struct pci_vpd_ops.release function pointer
    PCI: Move pci_vpd_release() from header file to pci/access.c
    PCI: Move pci_read_vpd() and pci_write_vpd() close to other VPD code
    PCI: Determine actual VPD size on first access
    PCI: Use bitfield instead of bool for struct pci_vpd_pci22.busy
    PCI: Allow access to VPD attributes with size 0
    PCI: Update VPD definitions

    Bjorn Helgaas
     

09 Mar, 2016

1 commit

  • Add pci_ops.{add,remove}_bus() callbacks, which will be called on every
    newly created bus and when a bus is being removed, respectively. This can
    be used by drivers to implement driver-specific initialization and teardown
    of the bus, in addition to the architecture-specifics implemented by the
    pcibios_add_bus() and the pcibios_remove_bus() functions.

    Signed-off-by: Thierry Reding
    Signed-off-by: Bjorn Helgaas

    Thierry Reding
     

01 Mar, 2016

1 commit

  • There's only one kind of VPD, so we don't need to qualify it as "the
    version described by PCI spec rev 2.2."

    Rename the following symbols to remove unnecessary "pci22":

    PCI_VPD_PCI22_SIZE -> PCI_VPD_MAX_SIZE
    pci_vpd_pci22_size() -> pci_vpd_size()
    pci_vpd_pci22_wait() -> pci_vpd_wait()
    pci_vpd_pci22_read() -> pci_vpd_read()
    pci_vpd_pci22_write() -> pci_vpd_write()
    pci_vpd_pci22_ops -> pci_vpd_ops
    pci_vpd_pci22_init() -> pci_vpd_init()

    Tested-by: Shane Seymour
    Tested-by: Babu Moger
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Hannes Reinecke

    Bjorn Helgaas
     

26 Feb, 2016

1 commit

  • The PCI config header (first 64 bytes of each device's config space) is
    defined by the PCI spec so generic software can identify the device and
    manage its usage of I/O, memory, and IRQ resources.

    Some non-spec-compliant devices put registers other than BARs where the
    BARs should be. When the PCI core sizes these "BARs", the reads and writes
    it does may have unwanted side effects, and the "BAR" may appear to
    describe non-sensical address space.

    Add a flag bit to mark non-compliant devices so we don't touch their BARs.
    Turn off IO/MEM decoding to prevent the devices from consuming address
    space, since we can't read the BARs to find out what that address space
    would be.

    Signed-off-by: Bjorn Helgaas
    Tested-by: Andi Kleen
    CC: stable@vger.kernel.org

    Bjorn Helgaas
     

17 Feb, 2016

1 commit


06 Feb, 2016

2 commits

  • include/asm-generic/pci-bridge.h is now empty, so remove every #include of
    it.

    Signed-off-by: Bjorn Helgaas
    Acked-by: Will Deacon (arm64)

    Bjorn Helgaas
     
  • The PCI flag management constants and functions were previously declared in
    include/asm-generic/pci-bridge.h. But they are not specific to bridges,
    and arches did not include pci-bridge.h consistently.

    Move the following interfaces and related constants to include/linux/pci.h
    and remove pci-bridge.h:

    pci_set_flags()
    pci_add_flags()
    pci_clear_flags()
    pci_has_flag()

    This fixes these warnings when building for some arches:

    drivers/pci/host/pcie-designware.c:562:20: error: 'PCI_PROBE_ONLY' undeclared (first use in this function)
    drivers/pci/host/pcie-designware.c:562:7: error: implicit declaration of function 'pci_has_flag' [-Werror=implicit-function-declaration]

    Signed-off-by: Bjorn Helgaas

    Bjorn Helgaas
     

22 Jan, 2016

1 commit

  • Pull PCI updates from Bjorn Helgaas:
    "PCI changes for the v4.5 merge window:

    Enumeration:
    - Simplify config space size computation (Bjorn Helgaas)
    - Avoid iterating through ROM outside the resource window (Edward O'Callaghan)
    - Support PCIe devices with short cfg_size (Jason S. McMullan)
    - Add Netronome vendor and device IDs (Jason S. McMullan)
    - Limit config space size for Netronome NFP6000 family (Jason S. McMullan)
    - Add Netronome NFP4000 PF device ID (Simon Horman)
    - Limit config space size for Netronome NFP4000 (Simon Horman)
    - Print warnings for all invalid expansion ROM headers (Vladis Dronov)

    Resource management:
    - Fix minimum allocation address overwrite (Christoph Biedl)

    PCI device hotplug:
    - acpiphp_ibm: Fix null dereferences on null ibm_slot (Colin Ian King)
    - pciehp: Always protect pciehp_disable_slot() with hotplug mutex (Guenter Roeck)
    - shpchp: Constify hpc_ops structure (Julia Lawall)
    - ibmphp: Remove unneeded NULL test (Julia Lawall)

    Power management:
    - Make ASPM sysfs link_state_store() consistent with link_state_show() (Andy Lutomirski)

    Virtualization
    - Add function 1 DMA alias quirk for Lite-On/Plextor M6e/Marvell 88SS9183 (Tim Sander)

    MSI:
    - Remove empty pci_msi_init_pci_dev() (Bjorn Helgaas)
    - Mark PCIe/PCI (MSI) IRQ cascade handlers as IRQF_NO_THREAD (Grygorii Strashko)
    - Initialize MSI capability for all architectures (Guilherme G. Piccoli)
    - Relax msi_domain_alloc() to support parentless MSI irqdomains (Liu Jiang)

    ARM Versatile host bridge driver:
    - Remove unused pci_sys_data structures (Lorenzo Pieralisi)

    Broadcom iProc host bridge driver:
    - Hide CONFIG_PCIE_IPROC (Arnd Bergmann)
    - Do not use 0x in front of %pap (Dmitry V. Krivenok)
    - Update iProc PCIe device tree binding (Ray Jui)
    - Add PAXC interface support (Ray Jui)
    - Add iProc PCIe MSI device tree binding (Ray Jui)
    - Add iProc PCIe MSI support (Ray Jui)

    Freescale i.MX6 host bridge driver:
    - Use gpio_set_value_cansleep() (Fabio Estevam)
    - Add support for active-low reset GPIO (Petr Štetiar)

    HiSilicon host bridge driver:
    - Add support for HiSilicon Hip06 PCIe host controllers (Gabriele Paoloni)

    Intel VMD host bridge driver:
    - Export irq_domain_set_info() for module use (Keith Busch)
    - x86/PCI: Allow DMA ops specific to a PCI domain (Keith Busch)
    - Use 32 bit PCI domain numbers (Keith Busch)
    - Add driver for Intel Volume Management Device (VMD) (Keith Busch)

    Qualcomm host bridge driver:
    - Document PCIe devicetree bindings (Stanimir Varbanov)
    - Add Qualcomm PCIe controller driver (Stanimir Varbanov)
    - dts: apq8064: add PCIe devicetree node (Stanimir Varbanov)
    - dts: ifc6410: enable PCIe DT node for this board (Stanimir Varbanov)

    Renesas R-Car host bridge driver:
    - Add support for R-Car H3 to pcie-rcar (Harunobu Kurokawa)
    - Allow DT to override default window settings (Phil Edworthy)
    - Convert to DT resource parsing API (Phil Edworthy)
    - Revert "PCI: rcar: Build pcie-rcar.c only on ARM" (Phil Edworthy)
    - Remove unused pci_sys_data struct from pcie-rcar (Phil Edworthy)
    - Add runtime PM support to pcie-rcar (Phil Edworthy)
    - Add Gen2 PHY setup to pcie-rcar (Phil Edworthy)
    - Add gen2 fallback compatibility string for pci-rcar-gen2 (Simon Horman)
    - Add gen2 fallback compatibility string for pcie-rcar (Simon Horman)

    Synopsys DesignWare host bridge driver:
    - Simplify control flow (Bjorn Helgaas)
    - Make config accessor override checking symmetric (Bjorn Helgaas)
    - Ensure ATU is enabled before IO/conf space accesses (Stanimir Varbanov)

    Miscellaneous:
    - Add of_pci_get_host_bridge_resources() stub (Arnd Bergmann)
    - Check for PCI_HEADER_TYPE_BRIDGE equality, not bitmask (Bjorn Helgaas)
    - Fix all whitespace issues (Bogicevic Sasa)
    - x86/PCI: Simplify pci_bios_{read,write} (Geliang Tang)
    - Use to_pci_dev() instead of open-coding it (Geliang Tang)
    - Use kobj_to_dev() instead of open-coding it (Geliang Tang)
    - Use list_for_each_entry() to simplify code (Geliang Tang)
    - Fix typos in (Thomas Petazzoni)
    - x86/PCI: Clarify AMD Fam10h config access restrictions comment (Tomasz Nowicki)"

    * tag 'pci-v4.5-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (58 commits)
    PCI: Add function 1 DMA alias quirk for Lite-On/Plextor M6e/Marvell 88SS9183
    PCI: Limit config space size for Netronome NFP4000
    PCI: Add Netronome NFP4000 PF device ID
    x86/PCI: Add driver for Intel Volume Management Device (VMD)
    PCI/AER: Use 32 bit PCI domain numbers
    x86/PCI: Allow DMA ops specific to a PCI domain
    irqdomain: Export irq_domain_set_info() for module use
    PCI: host: Add of_pci_get_host_bridge_resources() stub
    genirq/MSI: Relax msi_domain_alloc() to support parentless MSI irqdomains
    PCI: rcar: Add Gen2 PHY setup to pcie-rcar
    PCI: rcar: Add runtime PM support to pcie-rcar
    PCI: designware: Make config accessor override checking symmetric
    PCI: ibmphp: Remove unneeded NULL test
    ARM: dts: ifc6410: enable PCIe DT node for this board
    ARM: dts: apq8064: add PCIe devicetree node
    PCI: hotplug: Use list_for_each_entry() to simplify code
    PCI: rcar: Remove unused pci_sys_data struct from pcie-rcar
    PCI: hisi: Add support for HiSilicon Hip06 PCIe host controllers
    PCI: Avoid iterating through memory outside the resource window
    PCI: acpiphp_ibm: Fix null dereferences on null ibm_slot
    ...

    Linus Torvalds
     

21 Dec, 2015

1 commit

  • This patch introduces pci_msi_register_fwnode_provider() for irqchip
    to register a callback, to provide a way to determine appropriate MSI
    domain for a pci device.

    It also introduces pci_host_bridge_acpi_msi_domain(), which returns
    the MSI domain of the specified PCI host bridge with DOMAIN_BUS_PCI_MSI
    bus token. Then, it is assigned to pci device.

    Reviewed-by: Marc Zyngier
    Acked-by: Bjorn Helgaas
    Acked-by: Rafael J. Wysocki
    Signed-off-by: Suravee Suthikulpanit
    Signed-off-by: Marc Zyngier

    Suravee Suthikulpanit
     

11 Dec, 2015

2 commits

  • * pci/aspm:
    PCI/ASPM: Make sysfs link_state_store() consistent with link_state_show()

    * pci/hotplug:
    PCI: pciehp: Always protect pciehp_disable_slot() with hotplug mutex

    * pci/misc:
    x86/PCI: Simplify pci_bios_{read,write}
    PCI: Simplify config space size computation
    PCI: Limit config space size for Netronome NFP6000 family
    PCI: Add Netronome vendor and device IDs
    PCI: Support PCIe devices with short cfg_size
    x86/PCI: Clarify AMD Fam10h config access restrictions comment
    PCI: Print warnings for all invalid expansion ROM headers
    PCI: Check for PCI_HEADER_TYPE_BRIDGE equality, not bitmask

    * pci/msi:
    PCI/MSI: Remove empty pci_msi_init_pci_dev()
    PCI/MSI: Initialize MSI capability for all architectures

    Bjorn Helgaas
     
  • Restructure the logic so we return the config space size as soon as we know
    it. This reduces indentation, removes negations, and removes gotos.

    No functional change.

    Signed-off-by: Bjorn Helgaas

    Bjorn Helgaas
     

01 Dec, 2015

1 commit


25 Nov, 2015

1 commit

  • 1851617cd2da ("PCI/MSI: Disable MSI at enumeration even if kernel doesn't
    support MSI") moved dev->msi_cap and dev->msix_cap initialization from the
    pci_init_capabilities() path (used on all architectures) to the
    pci_setup_device() path (not used on Open Firmware architectures).

    This broke MSI or MSI-X on Open Firmware machines. 4d9aac397a5d
    ("powerpc/PCI: Disable MSI/MSI-X interrupts at PCI probe time in OF case")
    fixed it for PowerPC but not for SPARC.

    Set up MSI and MSI-X (initialize msi_cap and msix_cap and disable MSI and
    MSI-X) in pci_init_capabilities() so all architectures do it the same way.

    This reverts 4d9aac397a5d since this patch fixes the problem generically
    for both PowerPC and SPARC.

    [bhelgaas: changelog, make pci_msi_setup_pci_dev() static]
    Fixes: 1851617cd2da ("PCI/MSI: Disable MSI at enumeration even if kernel doesn't support MSI")
    Signed-off-by: Guilherme G. Piccoli
    Signed-off-by: Bjorn Helgaas

    Guilherme G. Piccoli
     

20 Nov, 2015

2 commits

  • * acpi-smbus:
    Revert "ACPI / SBS: Add 5 us delay to fix SBS hangs on MacBook"
    ACPI / SMBus: Fix boot stalls / high CPU caused by reentrant code

    * acpi-ec:
    ACPI-EC: Drop unnecessary check made before calling acpi_ec_delete_query()

    * acpi-pci:
    PCI: Fix OF logic in pci_dma_configure()

    Rafael J. Wysocki
     
  • This patch fixes a bug introduced by previous commit,
    which incorrectly checkes the of_node of the end-point device.
    Instead, it should check the of_node of the host bridge.

    Fixes: 50230713b639 ("PCI: OF: Move of_pci_dma_configure() to pci_dma_configure()")
    Reported-by: Robin Murphy
    Signed-off-by: Suravee Suthikulpanit
    Acked-by: Arnd Bergmann
    Signed-off-by: Rafael J. Wysocki

    Suravee Suthikulpanit
     

13 Nov, 2015

1 commit

  • Pull more power management and ACPI updates from Rafael Wysocki:
    "The only new feature in this batch is support for the ACPI _CCA device
    configuration object, which it a pre-requisite for future ACPI PCI
    support on ARM64, but should not affect the other architectures.

    The rest is fixes and cleanups, mostly in cpufreq (including
    intel_pstate), the Operating Performace Points (OPP) framework and
    tools (cpupower and turbostat).

    Specifics:

    - Support for the ACPI _CCA configuration object intended to tell the
    OS whether or not a bus master device supports hardware managed
    cache coherency and a new set of functions to allow drivers to
    check the cache coherency support for devices in a platform
    firmware interface agnostic way (Suravee Suthikulpanit, Jeremy
    Linton).

    - ACPI backlight quirks for ESPRIMO Mobile M9410 and Dell XPS L421X
    (Aaron Lu, Hans de Goede).

    - Fixes for the arm_big_little and s5pv210-cpufreq cpufreq drivers
    (Jon Medhurst, Nicolas Pitre).

    - kfree()-related fixup for the recently introduced CPPC cpufreq
    frontend (Markus Elfring).

    - intel_pstate fix reducing kernel log noise on systems where
    P-states are managed by hardware (Prarit Bhargava).

    - intel_pstate maintainers information update (Srinivas Pandruvada).

    - cpufreq core optimization related to the handling of delayed work
    items used by governors (Viresh Kumar).

    - Locking fixes and cleanups of the Operating Performance Points
    (OPP) framework (Viresh Kumar).

    - Generic power domains framework cleanups (Lina Iyer).

    - cpupower tool updates (Jacob Tanenbaum, Sriram Raghunathan, Thomas
    Renninger).

    - turbostat tool updates (Len Brown)"

    * tag 'pm+acpi-4.4-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (32 commits)
    PCI: ACPI: Add support for PCI device DMA coherency
    PCI: OF: Move of_pci_dma_configure() to pci_dma_configure()
    of/pci: Fix pci_get_host_bridge_device leak
    device property: ACPI: Remove unused DMA APIs
    device property: ACPI: Make use of the new DMA Attribute APIs
    device property: Adding DMA Attribute APIs for Generic Devices
    ACPI: Adding DMA Attribute APIs for ACPI Device
    device property: Introducing enum dev_dma_attr
    ACPI: Honor ACPI _CCA attribute setting
    cpufreq: CPPC: Delete an unnecessary check before the function call kfree()
    PM / OPP: Add opp_rcu_lockdep_assert() to _find_device_opp()
    PM / OPP: Hold dev_opp_list_lock for writers
    PM / OPP: Protect updates to list_dev with mutex
    PM / OPP: Propagate error properly from dev_pm_opp_set_sharing_cpus()
    cpufreq: s5pv210-cpufreq: fix wrong do_div() usage
    MAINTAINERS: update for intel P-state driver
    Creating a common structure initialization pattern for struct option
    cpupower: Enable disabled Cstates if they are below max latency
    cpupower: Remove debug message when using cpupower idle-set -D switch
    cpupower: cpupower monitor reports uninitialized values for offline cpus
    ...

    Linus Torvalds
     

07 Nov, 2015

4 commits

  • * acpi-pci:
    PCI: ACPI: Add support for PCI device DMA coherency
    PCI: OF: Move of_pci_dma_configure() to pci_dma_configure()
    of/pci: Fix pci_get_host_bridge_device leak
    device property: ACPI: Remove unused DMA APIs
    device property: ACPI: Make use of the new DMA Attribute APIs
    device property: Adding DMA Attribute APIs for Generic Devices
    ACPI: Adding DMA Attribute APIs for ACPI Device
    device property: Introducing enum dev_dma_attr
    ACPI: Honor ACPI _CCA attribute setting

    Conflicts:
    drivers/crypto/ccp/ccp-platform.c

    Rafael J. Wysocki
     
  • This patch adds support for setting up PCI device DMA coherency from
    ACPI _CCA object that should normally be specified in the DSDT node
    of its PCI host bridge.

    Signed-off-by: Suravee Suthikulpanit
    Acked-by: Bjorn Helgaas
    Reviewed-by: Hanjun Guo
    Signed-off-by: Rafael J. Wysocki

    Suthikulpanit, Suravee
     
  • This patch move of_pci_dma_configure() to a more generic
    pci_dma_configure(), which can be extended by non-OF code (e.g. ACPI).

    This has no functional change.

    Signed-off-by: Suravee Suthikulpanit
    Acked-by: Rob Herring
    Acked-by: Bjorn Helgaas
    Reviewed-by: Hanjun Guo
    Signed-off-by: Rafael J. Wysocki

    Suthikulpanit, Suravee
     
  • Pull PCI updates from Bjorn Helgaas:
    "Resource management:
    - Add support for Enhanced Allocation devices (Sean O. Stalley)
    - Add Enhanced Allocation register entries (Sean O. Stalley)
    - Handle IORESOURCE_PCI_FIXED when sizing resources (David Daney)
    - Handle IORESOURCE_PCI_FIXED when assigning resources (David Daney)
    - Handle Enhanced Allocation capability for SR-IOV devices (David Daney)
    - Clear IORESOURCE_UNSET when reverting to firmware-assigned address (Bjorn Helgaas)
    - Make Enhanced Allocation bitmasks more obvious (Bjorn Helgaas)
    - Expand Enhanced Allocation BAR output (Bjorn Helgaas)
    - Add of_pci_check_probe_only to parse "linux,pci-probe-only" (Marc Zyngier)
    - Fix lookup of linux,pci-probe-only property (Marc Zyngier)
    - Add sparc mem64 resource parsing for root bus (Yinghai Lu)

    PCI device hotplug:
    - pciehp: Queue power work requests in dedicated function (Guenter Roeck)

    Driver binding:
    - Add builtin_pci_driver() to avoid registration boilerplate (Paul Gortmaker)

    Virtualization:
    - Set SR-IOV NumVFs to zero after enumeration (Alexander Duyck)
    - Remove redundant validation of SR-IOV offset/stride registers (Alexander Duyck)
    - Remove VFs in reverse order if virtfn_add() fails (Alexander Duyck)
    - Reorder pcibios_sriov_disable() (Alexander Duyck)
    - Wait 1 second between disabling VFs and clearing NumVFs (Alexander Duyck)
    - Fix sriov_enable() error path for pcibios_enable_sriov() failures (Alexander Duyck)
    - Enable SR-IOV ARI Capable Hierarchy before reading TotalVFs (Ben Shelton)
    - Don't try to restore VF BARs (Wei Yang)

    MSI:
    - Don't alloc pcibios-irq when MSI is enabled (Joerg Roedel)
    - Add msi_controller setup_irqs() method for special multivector setup (Lucas Stach)
    - Export all remapped MSIs to sysfs attributes (Romain Bezut)
    - Disable MSI on SiS 761 (Ondrej Zary)

    AER:
    - Clear error status registers during enumeration and restore (Taku Izumi)

    Generic host bridge driver:
    - Fix lookup of linux,pci-probe-only property (Marc Zyngier)
    - Allow multiple hosts with different map_bus() methods (David Daney)
    - Pass starting bus number to pci_scan_root_bus() (David Daney)
    - Fix address window calculation for non-zero starting bus (David Daney)

    Altera host bridge driver:
    - Add msi.h to ARM Kbuild (Ley Foon Tan)
    - Add Altera PCIe host controller driver (Ley Foon Tan)
    - Add Altera PCIe MSI driver (Ley Foon Tan)

    APM X-Gene host bridge driver:
    - Remove msi_controller assignment (Duc Dang)

    Broadcom iProc host bridge driver:
    - Fix header comment "Corporation" misspelling (Florian Fainelli)
    - Fix code comment to match code (Ray Jui)
    - Remove unused struct iproc_pcie.irqs[] (Ray Jui)
    - Call pci_fixup_irqs() for ARM64 as well as ARM (Ray Jui)
    - Fix PCIe reset logic (Ray Jui)
    - Improve link detection logic (Ray Jui)
    - Update PCIe device tree bindings (Ray Jui)
    - Add outbound mapping support (Ray Jui)

    Freescale i.MX6 host bridge driver:
    - Return real error code from imx6_add_pcie_port() (Fabio Estevam)
    - Add PCIE_PHY_RX_ASIC_OUT_VALID definition (Fabio Estevam)

    Freescale Layerscape host bridge driver:
    - Remove ls_pcie_establish_link() (Minghuan Lian)
    - Ignore PCIe controllers in Endpoint mode (Minghuan Lian)
    - Factor out SCFG related function (Minghuan Lian)
    - Update ls_add_pcie_port() (Minghuan Lian)
    - Remove unused fields from struct ls_pcie (Minghuan Lian)
    - Add support for LS1043a and LS2080a (Minghuan Lian)
    - Add ls_pcie_msi_host_init() (Minghuan Lian)

    HiSilicon host bridge driver:
    - Add HiSilicon SoC Hip05 PCIe driver (Zhou Wang)

    Marvell MVEBU host bridge driver:
    - Return zero for reserved or unimplemented config space (Russell King)
    - Use exact config access size; don't read/modify/write (Russell King)
    - Use of_get_available_child_count() (Russell King)
    - Use for_each_available_child_of_node() to walk child nodes (Russell King)
    - Report full node name when reporting a DT error (Russell King)
    - Use port->name rather than "PCIe%d.%d" (Russell King)
    - Move port parsing and resource claiming to separate function (Russell King)
    - Fix memory leaks and refcount leaks (Russell King)
    - Split port parsing and resource claiming from port setup (Russell King)
    - Use gpio_set_value_cansleep() (Russell King)
    - Use devm_kcalloc() to allocate an array (Russell King)
    - Use gpio_desc to carry around gpio (Russell King)
    - Improve clock/reset handling (Russell King)
    - Add PCI Express root complex capability block (Russell King)
    - Remove code restricting accesses to slot 0 (Russell King)

    NVIDIA Tegra host bridge driver:
    - Wrap static pgprot_t initializer with __pgprot() (Ard Biesheuvel)

    Renesas R-Car host bridge driver:
    - Build pci-rcar-gen2.c only on ARM (Geert Uytterhoeven)
    - Build pcie-rcar.c only on ARM (Geert Uytterhoeven)
    - Make PCI aware of the I/O resources (Phil Edworthy)
    - Remove dependency on ARM-specific struct hw_pci (Phil Edworthy)
    - Set root bus nr to that provided in DT (Phil Edworthy)
    - Fix I/O offset for multiple host bridges (Phil Edworthy)

    ST Microelectronics SPEAr13xx host bridge driver:
    - Fix dw_pcie_cfg_read/write() usage (Gabriele Paoloni)

    Synopsys DesignWare host bridge driver:
    - Make "clocks" and "clock-names" optional DT properties (Bhupesh Sharma)
    - Use exact access size in dw_pcie_cfg_read() (Gabriele Paoloni)
    - Simplify dw_pcie_cfg_read/write() interfaces (Gabriele Paoloni)
    - Require config accesses to be naturally aligned (Gabriele Paoloni)
    - Make "num-lanes" an optional DT property (Gabriele Paoloni)
    - Move calculation of bus addresses to DRA7xx (Gabriele Paoloni)
    - Replace ARM pci_sys_data->align_resource with global function pointer (Gabriele Paoloni)
    - Factor out MSI msg setup (Lucas Stach)
    - Implement multivector MSI IRQ setup (Lucas Stach)
    - Make get_msi_addr() return phys_addr_t, not u32 (Lucas Stach)
    - Set up high part of MSI target address (Lucas Stach)
    - Fix PORT_LOGIC_LINK_WIDTH_MASK (Zhou Wang)
    - Revert "PCI: designware: Program ATU with untranslated address" (Zhou Wang)
    - Use of_pci_get_host_bridge_resources() to parse DT (Zhou Wang)
    - Make driver arch-agnostic (Zhou Wang)

    Miscellaneous:
    - Make x86 pci_subsys_init() static (Alexander Kuleshov)
    - Turn off Request Attributes to avoid Chelsio T5 Completion erratum (Hariprasad Shenai)"

    * tag 'pci-v4.4-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (94 commits)
    PCI: altera: Add Altera PCIe MSI driver
    PCI: hisi: Add HiSilicon SoC Hip05 PCIe driver
    PCI: layerscape: Add ls_pcie_msi_host_init()
    PCI: layerscape: Add support for LS1043a and LS2080a
    PCI: layerscape: Remove unused fields from struct ls_pcie
    PCI: layerscape: Update ls_add_pcie_port()
    PCI: layerscape: Factor out SCFG related function
    PCI: layerscape: Ignore PCIe controllers in Endpoint mode
    PCI: layerscape: Remove ls_pcie_establish_link()
    PCI: designware: Make "clocks" and "clock-names" optional DT properties
    PCI: designware: Make driver arch-agnostic
    ARM/PCI: Replace pci_sys_data->align_resource with global function pointer
    PCI: designware: Use of_pci_get_host_bridge_resources() to parse DT
    Revert "PCI: designware: Program ATU with untranslated address"
    PCI: designware: Move calculation of bus addresses to DRA7xx
    PCI: designware: Make "num-lanes" an optional DT property
    PCI: designware: Require config accesses to be naturally aligned
    PCI: designware: Simplify dw_pcie_cfg_read/write() interfaces
    PCI: designware: Use exact access size in dw_pcie_cfg_read()
    PCI: spear: Fix dw_pcie_cfg_read/write() usage
    ...

    Linus Torvalds
     

03 Nov, 2015

1 commit

  • …nd 'pci/virtualization' into next

    * pci/aer:
    PCI/AER: Clear error status registers during enumeration and restore

    * pci/hotplug:
    PCI: pciehp: Queue power work requests in dedicated function

    * pci/misc:
    PCI: Turn off Request Attributes to avoid Chelsio T5 Completion erratum
    x86/PCI: Make pci_subsys_init() static
    PCI: Add builtin_pci_driver() to avoid registration boilerplate
    PCI: Remove unnecessary "if" statement

    * pci/msi:
    x86/PCI: Don't alloc pcibios-irq when MSI is enabled
    PCI/MSI: Export all remapped MSIs to sysfs attributes
    PCI: Disable MSI on SiS 761

    * pci/resource:
    sparc/PCI: Add mem64 resource parsing for root bus
    PCI: Expand Enhanced Allocation BAR output
    PCI: Make Enhanced Allocation bitmasks more obvious
    PCI: Handle Enhanced Allocation capability for SR-IOV devices
    PCI: Add support for Enhanced Allocation devices
    PCI: Add Enhanced Allocation register entries
    PCI: Handle IORESOURCE_PCI_FIXED when assigning resources
    PCI: Handle IORESOURCE_PCI_FIXED when sizing resources
    PCI: Clear IORESOURCE_UNSET when reverting to firmware-assigned address

    * pci/virtualization:
    PCI: Fix sriov_enable() error path for pcibios_enable_sriov() failures
    PCI: Wait 1 second between disabling VFs and clearing NumVFs
    PCI: Reorder pcibios_sriov_disable()
    PCI: Remove VFs in reverse order if virtfn_add() fails
    PCI: Remove redundant validation of SR-IOV offset/stride registers
    PCI: Set SR-IOV NumVFs to zero after enumeration
    PCI: Enable SR-IOV ARI Capable Hierarchy before reading TotalVFs
    PCI: Don't try to restore VF BARs

    Bjorn Helgaas
     

30 Oct, 2015

1 commit

  • Add support for devices using Enhanced Allocation entries instead of BARs.
    This allows the kernel to parse the EA Extended Capability structure in PCI
    config space and claim the BAR-equivalent resources.

    See https://pcisig.com/sites/default/files/specification_documents/ECN_Enhanced_Allocation_23_Oct_2014_Final.pdf

    [bhelgaas: add spec URL, s/pci_ea_set_flags/pci_ea_flags/, consolidate
    declarations, print unknown property in hex to match spec]
    Signed-off-by: Sean O. Stalley
    [david.daney@cavium.com: Add more support/checking for Entry Properties,
    allow EA behind bridges, rewrite some error messages.]
    Signed-off-by: David Daney
    Signed-off-by: Bjorn Helgaas

    Sean O. Stalley
     

16 Oct, 2015

2 commits

  • So far, we've always considered that for a given PCI device, its
    MSI controller was either set by the architecture-specific
    pcibios hook, or simply inherited from the host bridge.

    This doesn't cover things like firmware-defined topologies like
    msi-map (DT) or IORT (ACPI), which can provide information about
    which MSI controller to use on a per-device basis.

    This patch adds the necessary hook into the MSI code to allow this
    feature, and provides the msi-map functionnality as a first
    implementation.

    Acked-by: Rob Herring
    Acked-by: Bjorn Helgaas
    Signed-off-by: Marc Zyngier

    Marc Zyngier
     
  • So far, we have considered that the MSI domain for a device was
    either set via the architecture-dependent pcibios implementation
    or inherited from the host bridge.

    As we're about to break that assumption, add pci_dev_msi_domain
    which is the equivalent of pci_host_bridge_msi_domain, but for
    a single device.

    Other than moving things around a bit, this patch on its own
    has no effect.

    Acked-by: Rob Herring
    Acked-by: Bjorn Helgaas
    Signed-off-by: Marc Zyngier

    Marc Zyngier
     

25 Sep, 2015

1 commit

  • SR-IOV creates a virtual bus where bus->self is NULL. When we add VFs and
    scan for an MSI domain, pci_set_bus_msi_domain() dereferences bus->self,
    which causes a kernel NULL pointer dereference oops.

    Scan up to the parent bus until we find a real bridge where we can get the
    MSI domain.

    [bhelgaas: changelog]
    Fixes: 44aa0c657e3e ("PCI/MSI: Add hooks to populate the msi_domain field")
    Tested-by: Joerg Roedel
    Signed-off-by: Alex Williamson
    Signed-off-by: Bjorn Helgaas
    Acked-by: Marc Zyngier

    Alex Williamson
     

17 Sep, 2015

1 commit

  • AER errors might be recorded when powering-on devices. These errors can be
    ignored, so firmware usually clears them before the OS enumerates devices.
    However, firmware is not involved when devices are added via hotplug, so
    the OS may discover power-up errors that should be ignored. The same may
    happen when powering up devices when resuming after suspend.

    Clear the AER error status registers during enumeration and resume.

    [bhelgaas: changelog, remove repetitive comments]
    Signed-off-by: Taku Izumi
    Signed-off-by: Bjorn Helgaas

    Taku Izumi
     

16 Sep, 2015

1 commit

  • Revert dff22d2054b5 ("PCI: Call pci_read_bridge_bases() from core instead
    of arch code").

    Reading PCI bridge windows is not arch-specific in itself, but there is PCI
    core code that doesn't work correctly if we read them too early. For
    example, Hannes found this case on an ARM Freescale i.mx6 board:

    pci_bus 0000:00: root bus resource [mem 0x01000000-0x01efffff]
    pci 0000:00:00.0: PCI bridge to [bus 01-ff]
    pci 0000:00:00.0: BAR 8: no space for [mem size 0x01000000] (mem window)
    pci 0000:01:00.0: BAR 2: failed to assign [mem size 0x00200000]
    pci 0000:01:00.0: BAR 1: failed to assign [mem size 0x00004000]
    pci 0000:01:00.0: BAR 0: failed to assign [mem size 0x00000100]

    The 00:00.0 mem window needs to be at least 3MB: the 01:00.0 device needs
    0x204100 of space, and mem windows are megabyte-aligned.

    Bus sizing can increase a bridge window size, but never *decrease* it (see
    d65245c3297a ("PCI: don't shrink bridge resources")). Prior to
    dff22d2054b5, ARM didn't read bridge windows at all, so the "original size"
    was zero, and we assigned a 3MB window.

    After dff22d2054b5, we read the bridge windows before sizing the bus. The
    firmware programmed a 16MB window (size 0x01000000) in 00:00.0, and since
    we never decrease the size, we kept 16MB even though we only needed 3MB.
    But 16MB doesn't fit in the host bridge aperture, so we failed to assign
    space for the window and the downstream devices.

    I think this is a defect in the PCI core: we shouldn't rely on the firmware
    to assign sensible windows.

    Ray reported a similar problem, also on ARM, with Broadcom iProc.

    Issues like this are too hard to fix right now, so revert dff22d2054b5.

    Reported-by: Hannes
    Reported-by: Ray Jui
    Link: http://lkml.kernel.org/r/CAAa04yFQEUJm7Jj1qMT57-LG7ZGtnhNDBe=PpSRa70Mj+XhW-A@mail.gmail.com
    Link: http://lkml.kernel.org/r/55F75BB8.4070405@broadcom.com
    Signed-off-by: Bjorn Helgaas
    Acked-by: Yinghai Lu
    Acked-by: Lorenzo Pieralisi

    Bjorn Helgaas
     

09 Sep, 2015

1 commit

  • Pull libnvdimm updates from Dan Williams:
    "This update has successfully completed a 0day-kbuild run and has
    appeared in a linux-next release. The changes outside of the typical
    drivers/nvdimm/ and drivers/acpi/nfit.[ch] paths are related to the
    removal of IORESOURCE_CACHEABLE, the introduction of memremap(), and
    the introduction of ZONE_DEVICE + devm_memremap_pages().

    Summary:

    - Introduce ZONE_DEVICE and devm_memremap_pages() as a generic
    mechanism for adding device-driver-discovered memory regions to the
    kernel's direct map.

    This facility is used by the pmem driver to enable pfn_to_page()
    operations on the page frames returned by DAX ('direct_access' in
    'struct block_device_operations').

    For now, the 'memmap' allocation for these "device" pages comes
    from "System RAM". Support for allocating the memmap from device
    memory will arrive in a later kernel.

    - Introduce memremap() to replace usages of ioremap_cache() and
    ioremap_wt(). memremap() drops the __iomem annotation for these
    mappings to memory that do not have i/o side effects. The
    replacement of ioremap_cache() with memremap() is limited to the
    pmem driver to ease merging the api change in v4.3.

    Completion of the conversion is targeted for v4.4.

    - Similar to the usage of memcpy_to_pmem() + wmb_pmem() in the pmem
    driver, update the VFS DAX implementation and PMEM api to provide
    persistence guarantees for kernel operations on a DAX mapping.

    - Convert the ACPI NFIT 'BLK' driver to map the block apertures as
    cacheable to improve performance.

    - Miscellaneous updates and fixes to libnvdimm including support for
    issuing "address range scrub" commands, clarifying the optimal
    'sector size' of pmem devices, a clarification of the usage of the
    ACPI '_STA' (status) property for DIMM devices, and other minor
    fixes"

    * tag 'libnvdimm-for-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm: (34 commits)
    libnvdimm, pmem: direct map legacy pmem by default
    libnvdimm, pmem: 'struct page' for pmem
    libnvdimm, pfn: 'struct page' provider infrastructure
    x86, pmem: clarify that ARCH_HAS_PMEM_API implies PMEM mapped WB
    add devm_memremap_pages
    mm: ZONE_DEVICE for "device memory"
    mm: move __phys_to_pfn and __pfn_to_phys to asm/generic/memory_model.h
    dax: drop size parameter to ->direct_access()
    nd_blk: change aperture mapping from WC to WB
    nvdimm: change to use generic kvfree()
    pmem, dax: have direct_access use __pmem annotation
    dax: update I/O path to do proper PMEM flushing
    pmem: add copy_from_iter_pmem() and clear_pmem()
    pmem, x86: clean up conditional pmem includes
    pmem: remove layer when calling arch_has_wmb_pmem()
    pmem, x86: move x86 PMEM API to new pmem.h header
    libnvdimm, e820: make CONFIG_X86_PMEM_LEGACY a tristate option
    pmem: switch to devm_ allocations
    devres: add devm_memremap
    libnvdimm, btt: write and validate parent_uuid
    ...

    Linus Torvalds
     

02 Sep, 2015

1 commit

  • Pull irq updates from Thomas Gleixner:
    "This updated pull request does not contain the last few GIC related
    patches which were reported to cause a regression. There is a fix
    available, but I let it breed for a couple of days first.

    The irq departement provides:

    - new infrastructure to support non PCI based MSI interrupts
    - a couple of new irq chip drivers
    - the usual pile of fixlets and updates to irq chip drivers
    - preparatory changes for removal of the irq argument from interrupt
    flow handlers
    - preparatory changes to remove IRQF_VALID"

    * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (129 commits)
    irqchip/imx-gpcv2: IMX GPCv2 driver for wakeup sources
    irqchip: Add bcm2836 interrupt controller for Raspberry Pi 2
    irqchip: Add documentation for the bcm2836 interrupt controller
    irqchip/bcm2835: Add support for being used as a second level controller
    irqchip/bcm2835: Refactor handle_IRQ() calls out of MAKE_HWIRQ
    PCI: xilinx: Fix typo in function name
    irqchip/gic: Ensure gic_cpu_if_up/down() programs correct GIC instance
    irqchip/gic: Only allow the primary GIC to set the CPU map
    PCI/MSI: pci-xgene-msi: Consolidate chained IRQ handler install/remove
    unicore32/irq: Prepare puv3_gpio_handler for irq argument removal
    tile/pci_gx: Prepare trio_handle_level_irq for irq argument removal
    m68k/irq: Prepare irq handlers for irq argument removal
    C6X/megamode-pic: Prepare megamod_irq_cascade for irq argument removal
    blackfin: Prepare irq handlers for irq argument removal
    arc/irq: Prepare idu_cascade_isr for irq argument removal
    sparc/irq: Use access helper irq_data_get_affinity_mask()
    sparc/irq: Use helper irq_data_get_irq_handler_data()
    parisc/irq: Use access helper irq_data_get_affinity_mask()
    mn10300/irq: Use access helper irq_data_get_affinity_mask()
    irqchip/i8259: Prepare i8259_irq_dispatch for irq argument removal
    ...

    Linus Torvalds
     

01 Sep, 2015

1 commit

  • Pull PCI updates from Bjorn Helgaas:
    "PCI changes for the v4.3 merge window:

    Enumeration:
    - Allocate ATS struct during enumeration (Bjorn Helgaas)
    - Embed ATS info directly into struct pci_dev (Bjorn Helgaas)
    - Reduce size of ATS structure elements (Bjorn Helgaas)
    - Stop caching ATS Invalidate Queue Depth (Bjorn Helgaas)
    - iommu/vt-d: Cache PCI ATS state and Invalidate Queue Depth (Bjorn Helgaas)
    - Move MPS configuration check to pci_configure_device() (Bjorn Helgaas)
    - Set MPS to match upstream bridge (Keith Busch)
    - ARM/PCI: Set MPS before pci_bus_add_devices() (Murali Karicheri)
    - Add pci_scan_root_bus_msi() (Lorenzo Pieralisi)
    - ARM/PCI, designware, xilinx: Use pci_scan_root_bus_msi() (Lorenzo Pieralisi)

    Resource management:
    - Call pci_read_bridge_bases() from core instead of arch code (Lorenzo Pieralisi)

    PCI device hotplug:
    - pciehp: Remove unused interrupt events (Bjorn Helgaas)
    - pciehp: Remove ignored MRL sensor interrupt events (Bjorn Helgaas)
    - pciehp: Handle invalid data when reading from non-existent devices (Jarod Wilson)
    - pciehp: Simplify pcie_poll_cmd() (Yijing Wang)
    - Use "slot" and "pci_slot" for struct hotplug_slot and struct pci_slot (Yijing Wang)
    - Protect pci_bus->slots with pci_slot_mutex, not pci_bus_sem (Yijing Wang)
    - Hold pci_slot_mutex while searching bus->slots list (Yijing Wang)

    Power management:
    - Disable async suspend/resume for JMicron multi-function SATA/AHCI (Zhang Rui)

    Virtualization:
    - Add ACS quirks for Intel I219-LM/V (Alex Williamson)
    - Restore ACS configuration as part of pci_restore_state() (Alexander Duyck)

    MSI:
    - Add pcibios_alloc_irq() and pcibios_free_irq() (Jiang Liu)
    - x86: Implement pcibios_alloc_irq() and pcibios_free_irq() (Jiang Liu)
    - Add helpers to manage pci_dev->irq and pci_dev->irq_managed (Jiang Liu)
    - Free legacy IRQ when enabling MSI/MSI-X (Jiang Liu)
    - ARM/PCI: Remove msi_controller from struct pci_sys_data (Lorenzo Pieralisi)
    - Remove unused pcibios_msi_controller() hook (Lorenzo Pieralisi)

    Generic host bridge driver:
    - Remove dependency on ARM-specific struct hw_pci (Jayachandran C)
    - Build setup-irq.o for arm64 (Jayachandran C)
    - Add arm64 support (Jayachandran C)

    APM X-Gene host bridge driver:
    - Add APM X-Gene PCIe 64-bit prefetchable window (Duc Dang)
    - Add support for a 64-bit prefetchable memory window (Duc Dang)
    - Drop owner assignment from platform_driver (Krzysztof Kozlowski)

    Broadcom iProc host bridge driver:
    - Allow BCMA bus driver to be built as module (Hauke Mehrtens)
    - Delete unnecessary checks before phy calls (Markus Elfring)
    - Add arm64 support (Ray Jui)

    Synopsys DesignWare host bridge driver:
    - Don't complain missing *config* reg space if va_cfg0 is set (Murali Karicheri)

    TI DRA7xx host bridge driver:
    - Disable pm_runtime on get_sync failure (Kishon Vijay Abraham I)
    - Add PM support (Kishon Vijay Abraham I)
    - Clear MSE bit during suspend so clocks will idle (Kishon Vijay Abraham I)
    - Add support to make GPIO drive PERST# line (Kishon Vijay Abraham I)

    Xilinx AXI host bridge driver:
    - Check for MSI interrupt flag before handling as INTx (Russell Joyce)

    Miscellaneous:
    - Fix Intersil/Techwell TW686[4589] AV capture class code (Krzysztof Hałasa)
    - Use PCI_CLASS_SERIAL_USB instead of bare number (Bjorn Helgaas)
    - Fix generic NCR 53c810 class code quirk (Bjorn Helgaas)
    - Fix TI816X class code quirk (Bjorn Helgaas)
    - Remove unused "pci_probe" flags (Bjorn Helgaas)
    - Host bridge driver code simplifications (Fabio Estevam)
    - Add dev_flags bit to access VPD through function 0 (Mark Rustad)
    - Add VPD function 0 quirk for Intel Ethernet devices (Mark Rustad)
    - Kill off set_irq_flags() usage (Rob Herring)
    - Remove Intel Cherrytrail D3 delays (Srinidhi Kasagar)
    - Clean up pci_find_capability() (Wei Yang)"

    * tag 'pci-v4.3-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (72 commits)
    PCI: Disable async suspend/resume for JMicron multi-function SATA/AHCI
    PCI: Set MPS to match upstream bridge
    PCI: Move MPS configuration check to pci_configure_device()
    PCI: Drop references acquired by of_parse_phandle()
    PCI/MSI: Remove unused pcibios_msi_controller() hook
    ARM/PCI: Remove msi_controller from struct pci_sys_data
    ARM/PCI, designware, xilinx: Use pci_scan_root_bus_msi()
    PCI: Add pci_scan_root_bus_msi()
    ARM/PCI: Replace panic with WARN messages on failures
    PCI: generic: Add arm64 support
    PCI: Build setup-irq.o for arm64
    PCI: generic: Remove dependency on ARM-specific struct hw_pci
    PCI: imx6: Simplify a trivial if-return sequence
    PCI: spear: Use BUG_ON() instead of condition followed by BUG()
    PCI: dra7xx: Remove unneeded use of IS_ERR_VALUE()
    PCI: Remove pci_ats_enabled()
    PCI: Stop caching ATS Invalidate Queue Depth
    PCI: Move ATS declarations to linux/pci.h so they're all together
    PCI: Clean up ATS error handling
    PCI: Use pci_physfn() rather than looking up physfn by hand
    ...

    Linus Torvalds
     

29 Aug, 2015

1 commit

  • * pci/enumeration:
    PCI: Set MPS to match upstream bridge
    PCI: Move MPS configuration check to pci_configure_device()
    PCI: Drop references acquired by of_parse_phandle()
    PCI/MSI: Remove unused pcibios_msi_controller() hook
    ARM/PCI: Remove msi_controller from struct pci_sys_data
    ARM/PCI, designware, xilinx: Use pci_scan_root_bus_msi()
    PCI: Add pci_scan_root_bus_msi()
    ARM/PCI: Replace panic with WARN messages on failures
    PCI: generic: Add arm64 support
    PCI: Build setup-irq.o for arm64
    PCI: generic: Remove dependency on ARM-specific struct hw_pci
    ARM/PCI: Set MPS before pci_bus_add_devices()

    * pci/misc:
    PCI: Disable async suspend/resume for JMicron multi-function SATA/AHCI

    Bjorn Helgaas
     

26 Aug, 2015

1 commit

  • Commit 1851617cd2da ("PCI/MSI: Disable MSI at enumeration even if kernel
    doesn't support MSI") changed the location of the code that initialises
    dev->msi_cap/msix_cap and then disables MSI/MSI-X interrupts at PCI
    probe time in devices that have this flag set. It moved the code from
    pci_msi_init_pci_dev() to a new function named pci_msi_setup_pci_dev(),
    called by pci_setup_device().

    The pseries PCI probing code does not call pci_setup_device(), so since
    the aforementioned commit the function pci_msi_setup_pci_dev() is not
    called and MSI/MSI-X interrupts are left enabled. Additionally because
    dev->msi_cap/msix_cap are not initialised no driver can ever enable
    MSI/MSI-X.

    To fix this, the pseries PCI probe should manually call
    pci_msi_setup_pci_dev(), so this patch makes it non-static.

    Fixes: 1851617cd2da ("PCI/MSI: Disable MSI at enumeration even if kernel doesn't support MSI")
    [mpe: Update change log to mention dev->msi_cap/msix_cap]
    Signed-off-by: Guilherme G. Piccoli
    Signed-off-by: Michael Ellerman

    Guilherme G. Piccoli
     

24 Aug, 2015

1 commit

  • Firmware typically configures the PCIe fabric with a consistent Max Payload
    Size setting based on the devices present at boot. A hot-added device
    typically has the power-on default MPS setting (128 bytes), which may not
    match the fabric.

    The previous Linux default, in the absence of any "pci=pcie_bus_*" options,
    was PCIE_BUS_TUNE_OFF, in which we never touch MPS, even for hot-added
    devices.

    Add a new default setting, PCIE_BUS_DEFAULT, in which we make sure every
    device's MPS setting matches the upstream bridge. This makes it more
    likely that a hot-added device will work in a system with optimized MPS
    configuration.

    Note that if we hot-add a device that only supports 128-byte MPS, it still
    likely won't work because we don't reconfigure the rest of the fabric.
    Booting with "pci=pcie_bus_peer2peer" is a workaround for this because it
    sets MPS to 128 for everything.

    [bhelgaas: changelog, new default, rework for pci_configure_device() path]
    Tested-by: Keith Busch
    Tested-by: Jordan Hargrave
    Signed-off-by: Keith Busch
    Signed-off-by: Bjorn Helgaas
    Acked-by: Yinghai Lu

    Keith Busch
     

21 Aug, 2015

2 commits

  • Previously we checked for invalid MPS settings, i.e., a device with MPS
    different than its upstream bridge, in pcie_bus_detect_mps(). We only did
    this if the arch or hotplug driver called pcie_bus_configure_settings(),
    and then only if PCIe bus tuning was disabled (PCIE_BUS_TUNE_OFF).

    Move the MPS checking code to pci_configure_device(), so we do it in the
    pci_device_add() path for every device.

    Signed-off-by: Bjorn Helgaas

    Bjorn Helgaas
     
  • Add a pci_scan_root_bus_msi() interface so an arch can specify the MSI
    controller up front. This removes the need for a pcibios callback to set
    the MSI controller later.

    This is not exported because I'd like to replace the variety of "scan root
    bus" interfaces with a single, more extensible interface that can handle
    the MSI controller, domain, pci_ops, resources, etc. I hope this interface
    is temporary.

    [bhelgaas: changelog, split into separate patch]
    Suggested-by: Russell King
    Signed-off-by: Lorenzo Pieralisi
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Jingoo Han

    Lorenzo Pieralisi
     

20 Aug, 2015

1 commit

  • We should not assume any particular hardware topology. Commit d0751b98dfa3
    ("PCI: Add dev->has_secondary_link to track downstream PCIe links") relied
    on the assumption that every PCIe hierarchy is rooted at a Root Port. But
    we can't rely on any assumption about what hardware we will find; we just
    have to deal with the world as it is.

    On some platforms, PCIe devices (endpoints, switch upstream ports, etc.)
    appear directly on the root bus, and there is no Root Port in the PCI bus
    hierarchy. For example, Meelis observed these top-level devices on a
    Sparc V245:

    0000:02:00.0 PCI bridge to [bus 03-0d] Switch Upstream Port
    0001:02:00.0 PCI bridge to [bus 03] PCIe to PCI/PCI-X Bridge

    These devices *look* like they have links going upstream, but there really
    are no upstream devices.

    In set_pcie_port_type(), we used the parent device to figure out which side
    of a switch port has a link, so if the parent device did not exist, we
    dereferenced a NULL parent pointer.

    Check whether the parent device exists before dereferencing it.

    Meelis observed this oops on Sparc V245 and T2000. Ben Herrenschmidt says
    this is also possible on IBM PowerVM guests on PowerPC.

    [bhelgaas: changelog, comment]
    Link: http://lkml.kernel.org/r/alpine.LRH.2.20.1508122118210.18637@math.ut.ee
    Reported-by: Meelis Roos
    Tested-by: Meelis Roos
    Signed-off-by: Yijing Wang
    Signed-off-by: Bjorn Helgaas
    Acked-by: David S. Miller

    Yijing Wang
     

14 Aug, 2015

1 commit

  • * pci/hotplug:
    PCI: pciehp: Remove ignored MRL sensor interrupt events
    PCI: pciehp: Remove unused interrupt events
    PCI: pciehp: Handle invalid data when reading from non-existent devices
    PCI: Hold pci_slot_mutex while searching bus->slots list
    PCI: Protect pci_bus->slots with pci_slot_mutex, not pci_bus_sem
    PCI: pciehp: Simplify pcie_poll_cmd()
    PCI: Use "slot" and "pci_slot" for struct hotplug_slot and struct pci_slot

    * pci/iommu:
    PCI: Remove pci_ats_enabled()
    PCI: Stop caching ATS Invalidate Queue Depth
    PCI: Move ATS declarations to linux/pci.h so they're all together
    PCI: Clean up ATS error handling
    PCI: Use pci_physfn() rather than looking up physfn by hand
    PCI: Inline the ATS setup code into pci_ats_init()
    PCI: Rationalize pci_ats_queue_depth() error checking
    PCI: Reduce size of ATS structure elements
    PCI: Embed ATS info directly into struct pci_dev
    PCI: Allocate ATS struct during enumeration
    iommu/vt-d: Cache PCI ATS state and Invalidate Queue Depth

    * pci/irq:
    PCI: Kill off set_irq_flags() usage

    * pci/virtualization:
    PCI: Add ACS quirks for Intel I219-LM/V

    Bjorn Helgaas