1. 17 May, 2016 1 commit
    • Bjorn Helgaas's avatar
      Merge branches 'pci/hotplug' and 'pci/resource' into next · 45604e68
      Bjorn Helgaas authored
      * pci/hotplug:
        PCI: Use cached copy of PCI_EXP_SLTCAP_HPC bit
      
      * pci/resource:
        PCI: Disable all BAR sizing for devices with non-compliant BARs
        x86/PCI: Mark Broadwell-EP Home Agent 1 as having non-compliant BARs
        PCI: Identify Enhanced Allocation (EA) BAR Equivalent resources in sysfs
      45604e68
  2. 16 May, 2016 3 commits
    • Prarit Bhargava's avatar
      PCI: Disable all BAR sizing for devices with non-compliant BARs · ad67b437
      Prarit Bhargava authored
      b84106b4 ("PCI: Disable IO/MEM decoding for devices with non-compliant
      BARs") disabled BAR sizing for BARs 0-5 of devices that don't comply with
      the PCI spec.  But it didn't do anything for expansion ROM BARs, so we
      still try to size them, resulting in warnings like this on Broadwell-EP:
      
        pci 0000:ff:12.0: BAR 6: failed to assign [mem size 0x00000001 pref]
      
      Move the non-compliant BAR check from __pci_read_base() up to
      pci_read_bases() so it applies to the expansion ROM BAR as well as
      to BARs 0-5.
      
      Note that direct callers of __pci_read_base(), like sriov_init(), will now
      bypass this check.  We haven't had reports of devices with broken SR-IOV
      BARs yet.
      
      [bhelgaas: changelog]
      Fixes: b84106b4 ("PCI: Disable IO/MEM decoding for devices with non-compliant BARs")
      Signed-off-by: default avatarPrarit Bhargava <prarit@redhat.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      CC: stable@vger.kernel.org
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: Ingo Molnar <mingo@redhat.com>
      CC: "H. Peter Anvin" <hpa@zytor.com>
      CC: Andi Kleen <ak@linux.intel.com>
      ad67b437
    • Prarit Bhargava's avatar
      x86/PCI: Mark Broadwell-EP Home Agent 1 as having non-compliant BARs · da77b671
      Prarit Bhargava authored
      Commit b8941571 ("x86/PCI: Mark Broadwell-EP Home Agent & PCU as having
      non-compliant BARs") marked Home Agent 0 & PCU has having non-compliant
      BARs.  Home Agent 1 also has non-compliant BARs.
      
      Mark Home Agent 1 as having non-compliant BARs so the PCI core doesn't
      touch them.
      
      The problem with these devices is documented in the Xeon v4 specification
      update:
      
        BDF2          PCI BARs in the Home Agent Will Return Non-Zero Values
                      During Enumeration
      
        Problem:      During system initialization the Operating System may access
                      the standard PCI BARs (Base Address Registers).  Due to
                      this erratum, accesses to the Home Agent BAR registers (Bus
                      1; Device 18; Function 0,4; Offsets (0x14-0x24) will return
                      non-zero values.
      
        Implication:  The operating system may issue a warning.  Intel has not
                      observed any functional failures due to this erratum.
      
      Link: http://www.intel.com/content/www/us/en/processors/xeon/xeon-e5-v4-spec-update.html
      Fixes: b8941571 ("x86/PCI: Mark Broadwell-EP Home Agent & PCU as having non-compliant BARs")
      Signed-off-by: default avatarPrarit Bhargava <prarit@redhat.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      CC: Thomas Gleixner <tglx@linutronix.de>
      CC: Ingo Molnar <mingo@redhat.com>
      CC: "H. Peter Anvin" <hpa@zytor.com>
      CC: Andi Kleen <ak@linux.intel.com>
      da77b671
    • Alex Williamson's avatar
      PCI: Identify Enhanced Allocation (EA) BAR Equivalent resources in sysfs · 92efb1bd
      Alex Williamson authored
      Resource flags are exposed to userspace via the sysfs "resource" file.
      lspci reads the sysfs file to determine resource properties.
      
      Add a "BAR Equivalent Indicator" flag so lspci can distinguish between
      [virtual] and [enhanced] resources.
      Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
      Signed-off-by: default avatarSean O. Stalley <sean.stalley@intel.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      92efb1bd
  3. 04 May, 2016 1 commit
  4. 03 May, 2016 5 commits
    • Bjorn Helgaas's avatar
      Merge branches 'pci/dpc', 'pci/resource' and 'pci/thunderbolt' into next · d9322d22
      Bjorn Helgaas authored
      * pci/dpc:
        PCI: Add Downstream Port Containment driver
        PCI: Add Downstream Port Containment portdrv service type
        PCI: Widen portdrv service type from 4 bits to 8 bits
      
      * pci/resource:
        alpha/PCI: Call iomem_is_exclusive() for IORESOURCE_MEM, but not IORESOURCE_IO
        PCI: Supply CPU physical address (not bus address) to iomem_is_exclusive()
      
      * pci/thunderbolt:
        thunderbolt: Fix double free of drom buffer
      d9322d22
    • Bjorn Helgaas's avatar
      Merge branches 'pci/host-armada', 'pci/host-designware', 'pci/host-hv',... · 58f8b094
      Bjorn Helgaas authored
      Merge branches 'pci/host-armada', 'pci/host-designware', 'pci/host-hv', 'pci/host-imx6', 'pci/host-keystone', 'pci/host-mvebu', 'pci/host-rcar', 'pci/host-thunder' and 'pci/host-vmd' into next
      
      * pci/host-armada:
        PCI: armada: Add driver for Marvell Armada 7K/8K PCIe controller
        dt-bindings: pci: add DT binding for Marvell Armada 7K/8K PCIe controller
      
      * pci/host-designware:
        PCI: designware: Remove incorrect RC memory base/limit configuration
        PCI: designware: Move Root Complex setup code to dw_pcie_setup_rc()
      
      * pci/host-hv:
        PCI: hv: Report resources release after stopping the bus
      
      * pci/host-imx6:
        ARM: dts: imx6qp: Specify imx6qp version of PCIe core
        PCI: imx6: Implement reset sequence for i.MX6+
        PCI: imx6: Use enum instead of bool for variant indicator
        PCI: imx6: Add DT property for link gen, default to Gen1
        PCI: imx6: Add reset-gpio-active-high boolean property to DT
        ARM: dts: imx6: Fix PCIe reset GPIO polarity on Toradex Apalis Ixora
        PCI: imx6: Add initial imx6sx support
        PCI: imx6: Factor out ref clock enable
        Revert "PCI: imx6: Add support for active-low reset GPIO"
      
      * pci/host-keystone:
        PCI: keystone: Remove unnecessary goto statement
        PCI: keystone: Add error IRQ handler
      
      * pci/host-mvebu:
        PCI: mvebu: Use SET_NOIRQ_SYSTEM_SLEEP_PM_OPS for mvebu_pcie_pm_ops
        PCI: mvebu: Constify mvebu_pcie_pm_ops structure
      
      * pci/host-rcar:
        PCI: rcar: Select PCI_MSI_IRQ_DOMAIN
      
      * pci/host-thunder:
        PCI: thunder: Don't clobber read-only bits in bridge config registers
      
      * pci/host-vmd:
        PCI: Remove return values from pcie_port_platform_notify() and relatives
        PCI/ACPI: Allow all PCIe services on non-ACPI host bridges
      58f8b094
    • Keith Busch's avatar
      PCI: Add Downstream Port Containment driver · 26e51571
      Keith Busch authored
      Add driver for the PCI Express Downstream Port Containment extended
      capability.  DPC is an optional capability to contain uncorrectable errors
      below a port.
      
      For more information on DPC, please see PCI Express Base Specification
      Revision 4, section 7.31, or view the PCI-SIG DPC ECN here:
      
        https://pcisig.com/sites/default/files/specification_documents/ECN_DPC_2012-02-09_finalized.pdf
      
      When a DPC event is triggered, the hardware disables downstream links, so
      the DPC driver schedules removal for all devices below this port.  This may
      happen concurrently with a PCIe hotplug driver if enabled.  When all
      downstream devices are removed and the link state transitions to disabled,
      the DPC driver clears the DPC status and interrupt bits so the link may
      retrain for a newly connected device.
      
      [bhelgaas: clear (not set) DPC_CTL bits on remove, whitespace cleanup]
      Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Cc: Lukas Wunner <lukas@wunner.de>
      26e51571
    • Keith Busch's avatar
      PCI: Add Downstream Port Containment portdrv service type · 10126ac1
      Keith Busch authored
      Add the Downstream Port Containment (PCIE_PORT_SERVICE_DPC) portdrv service
      type, available if the device has the DPC extended capability.
      
      [bhelgaas: split to separate patch, changelog]
      Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      10126ac1
    • Keith Busch's avatar
      PCI: Widen portdrv service type from 4 bits to 8 bits · 6d81417d
      Keith Busch authored
      The names of port service devices previously used one nibble to encode the
      port type and another nibble to encode the service type.  We're about to
      add a fifth service type, so change device names to use one *byte* to
      encode the service type.
      
      For example, a hotplug port service on a downstream bridge was previously
      called "pcie24" and is now called "pcie204".  The "2" encodes the device
      type (PCI_EXP_TYPE_DOWNSTREAM - 4), and the "4" (now "04") encodes the
      service (PCIE_PORT_SERVICE_HP).
      
      Based on Lukas Wunner's patch:
      https://github.com/l1k/linux/commit/b688d6e4873ab082e5916b1a993bc1d38c6f4178
      
      [bhelgaas: split to separate patch, expand changelog]
      Based-on-patch-by: default avatarLukas Wunner <lukas@wunner.de>
      Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      6d81417d
  5. 02 May, 2016 8 commits
  6. 26 Apr, 2016 2 commits
  7. 25 Apr, 2016 4 commits
    • Bjorn Helgaas's avatar
      alpha/PCI: Call iomem_is_exclusive() for IORESOURCE_MEM, but not IORESOURCE_IO · c20e1280
      Bjorn Helgaas authored
      The alpha pci_mmap_resource() is used for both IORESOURCE_MEM and
      IORESOURCE_IO resources, but iomem_is_exclusive() is only applicable for
      IORESOURCE_MEM.
      
      Call iomem_is_exclusive() only for IORESOURCE_MEM resources, and do it
      earlier to match the generic version of pci_mmap_resource().
      
      Fixes: 10a0ef39 ("PCI/alpha: pci sysfs resources")
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      CC: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
      c20e1280
    • Bjorn Helgaas's avatar
      PCI: Supply CPU physical address (not bus address) to iomem_is_exclusive() · ca620723
      Bjorn Helgaas authored
      iomem_is_exclusive() requires a CPU physical address, but on some arches we
      supplied a PCI bus address instead.
      
      On most arches, pci_resource_to_user(res) returns "res->start", which is a
      CPU physical address.  But on microblaze, mips, powerpc, and sparc, it
      returns the PCI bus address corresponding to "res->start".
      
      The result is that pci_mmap_resource() may fail when it shouldn't (if the
      bus address happens to match an existing resource), or it may succeed when
      it should fail (if the resource is exclusive but the bus address doesn't
      match it).
      
      Call iomem_is_exclusive() with "res->start", which is always a CPU physical
      address, not the result of pci_resource_to_user().
      
      Fixes: e8de1481 ("resource: allow MMIO exclusivity for device drivers")
      Suggested-by: default avatarYinghai Lu <yinghai@kernel.org>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      CC: Arjan van de Ven <arjan@linux.intel.com>
      ca620723
    • Bjorn Helgaas's avatar
      Merge branches 'pci/enumeration', 'pci/hotplug', 'pci/misc', 'pci/ntb',... · 7f768544
      Bjorn Helgaas authored
      Merge branches 'pci/enumeration', 'pci/hotplug', 'pci/misc', 'pci/ntb', 'pci/thunderbolt' and 'pci/virtualization' into next
      
      * pci/enumeration:
        x86/PCI: Refine PCI support check in pcibios_init()
      
      * pci/hotplug:
        PCI: acpiphp_ibm: Avoid uninitialized variable reference
      
      * pci/misc:
        PCI: Fix spelling errors
      
      * pci/ntb:
        PCI: Add DMA alias quirk for mic_x200_dma
        PCI: Add support for multiple DMA aliases
        PCI: Move informational printk to pci_add_dma_alias()
        PCI: Add pci_add_dma_alias() to abstract implementation
      
      * pci/thunderbolt:
        thunderbolt: Support 1st gen Light Ridge controller
        thunderbolt: Fix typos and magic number
        PCI: Add Intel Thunderbolt device IDs
      
      * pci/virtualization:
        PCI: Work around Intel Sunrise Point PCH incorrect ACS capability
        PCI: Reverse standard ACS vs device-specific ACS enabling
        PCI: Mark Intel i40e NIC INTx masking as broken
      7f768544
    • Murali Karicheri's avatar
      PCI: keystone: Remove unnecessary goto statement · 1e9f8dcf
      Murali Karicheri authored
      Fix the misuse of goto statement in ks_pcie_get_irq_controller_info() as
      simple return is more appropriate for this function.  While at it add an
      error log for absence of interrupt controller node.
      
      [bhelgaas: drop "ret" altogether since we always know the return value]
      Signed-off-by: default avatarMurali Karicheri <m-karicheri2@ti.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      CC: Rob Herring <robh+dt@kernel.org>
      CC: Pawel Moll <pawel.moll@arm.com>
      CC: Mark Rutland <mark.rutland@arm.com>
      CC: Ian Campbell <ijc+devicetree@hellion.org.uk>
      CC: Kumar Gala <galak@codeaurora.org>
      1e9f8dcf
  8. 20 Apr, 2016 5 commits
    • Tim Harvey's avatar
      PCI: imx6: Add DT property for link gen, default to Gen1 · a5fcec48
      Tim Harvey authored
      Freescale has stated [1] that the LVDS clock source of the IMX6 does not
      pass the PCI Gen2 clock jitter test, therefore unless an external Gen2
      compliant external clock source is present and supplied back to the IMX6
      PCIe core via LVDS CLK1/CLK2 you can not claim Gen2 compliance.
      
      Add a DT property to specify Gen1 vs Gen2 and check this before allowing a
      Gen2 link.
      
      We default to Gen1 if the property is not present because at this time
      there are no IMX6 boards in mainline that 'input' a clock on LVDS
      CLK1/CLK2.
      
      In order to be Gen2 compliant on IMX6 you need to:
      
       - Have a Gen2 compliant external clock generator and route that clock back
         to either LVDS CLK1 or LVDS CLK2 as an input (see IMX6SX-SabreSD
         reference design).
      
       - Specify this clock in the PCIe node in the DT (i.e.,
         IMX6QDL_CLK_LVDS1_IN or IMX6QDL_CLK_LVDS2_IN instead of
         IMX6QDL_CLK_LVDS1_GATE which configures it as a CLK output).
      
      [1] https://community.freescale.com/message/453209Signed-off-by: default avatarTim Harvey <tharvey@gateworks.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Reviewed-by: default avatarLucas Stach <l.stach@pengutronix.de>
      CC: Fabio Estevam <fabio.estevam@freescale.com>
      CC: Zhu Richard <Richard.Zhu@freescale.com>
      CC: Akshay Bhat <akshay.bhat@timesys.com>
      CC: Rob Herring <robh+dt@kernel.org>
      CC: Shawn Guo <shawnguo@kernel.org>
      a5fcec48
    • Petr Štetiar's avatar
      PCI: imx6: Add reset-gpio-active-high boolean property to DT · 3ea8529a
      Petr Štetiar authored
      Currently the reset-gpio DT property which controls the PCI bus device
      reset signal defaults to active-low reset sequence (L=reset state,
      H=operation state) plus the code in reset function isn't GPIO polarity
      aware - it doesn't matter if the defined reset-gpio is active-low or
      active-high, it will always result into active-low reset sequence.
      
      I've tried to fix it properly and change the reset-gpio reset sequence to
      be polarity-aware, but this patch has been accepted and then reverted as it
      has introduced few backward incompatible issues:
      
      1. Some DTBs, for example, imx6qdl-sabresd, don't define reset-gpio
      polarity correctly:
      
        reset-gpio = <&gpio7 12 0>;
      
      which means that it's defined as active-high, but in reality it's
      active-low; thus it wouldn't work without a DTS fix.
      
      2. The logic in the reset function is inverted:
      
      	gpio_set_value_cansleep(imx6_pcie->reset_gpio, 0)
      	msleep(100);
      	gpio_set_value_cansleep(imx6_pcie->reset_gpio, 1);
      
      so even if some of the i.MX6 boards had reset-gpio polarity defined
      correctly in their DTSes, they would stop working.
      
      As we can't break old DTBs, we can't fix them, so we need to introduce this
      new DT reset-gpio-active-high boolean property so we can support boards
      with active-high reset sequence.
      
      This active-high reset sequence is for example needed on Apalis SoMs, where
      GPIO1_IO28, used to PCIe reset is not connected directly to PERST# PCIe
      signal, but it's ORed with RESETBMCU coming off the PMIC, and thus is
      inverted, active-high.
      
      Tested-by: Tim Harvey <tharvey@gateworks.com>	# Gateworks Ventana boards (which have active-low PERST#)
      Signed-off-by: default avatarPetr Štetiar <ynezz@true.cz>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Reviewed-by: default avatarLucas Stach <l.stach@pengutronix.de>
      Acked-by: default avatarRob Herring <robh@kernel.org>
      3ea8529a
    • Petr Štetiar's avatar
      ARM: dts: imx6: Fix PCIe reset GPIO polarity on Toradex Apalis Ixora · 4f6926e9
      Petr Štetiar authored
      Adding reset-gpio-active-high boolean DT binding property, which we need to
      make PCIe working on Apalis SoMs and not break old DTBs. While at it, I've
      fixed comment and GPIO polarity.
      
      On Apalis SoMs the GPIO1_IO28 used to PCIe reset is not connected directly
      to PERST# PCIe signal, but it's ORed with RESETBMCU coming off the PMIC,
      and thus is inverted, active-high.
      Signed-off-by: default avatarPetr Štetiar <ynezz@true.cz>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      4f6926e9
    • Christoph Fritz's avatar
      PCI: imx6: Add initial imx6sx support · e3c06cd0
      Christoph Fritz authored
      Add initial PCIe support for the imx6 SoC derivate imx6sx.  PCI MSI support
      is untested as the necessary suspend/resume quirk is not included in this
      patch.
      
      This patch is heavily based on patches by Richard Zhu.
      
      [bhelgaas: factor out refclk enable, fix adjacent typos in imx6q-pcie.txt]
      Signed-off-by: default avatarChristoph Fritz <chf.fritz@googlemail.com>
      Acked-by: default avatarRichard Zhu <Richard.Zhu@freescale.com>
      Acked-by: default avatarLucas Stach <l.stach@pengutronix.de>
      e3c06cd0
    • Bjorn Helgaas's avatar
      PCI: imx6: Factor out ref clock enable · 4d1821e7
      Bjorn Helgaas authored
      Factor out ref clock enable to make it cleaner to add imx6sx support.  No
      functional change intended.
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Tested-by: default avatarChristoph Fritz <chf.fritz@googlemail.com>
      4d1821e7
  9. 19 Apr, 2016 3 commits
  10. 15 Apr, 2016 1 commit
  11. 14 Apr, 2016 1 commit
  12. 12 Apr, 2016 1 commit
  13. 11 Apr, 2016 4 commits
  14. 08 Apr, 2016 1 commit