10 Nov, 2020

1 commit


18 Sep, 2020

1 commit

  • Ampere Altra SOC supports only 32-bit ECAM reads. Add an MCFG quirk for
    the platform.

    Link: https://lore.kernel.org/r/1596751055-12316-1-git-send-email-tuanphan@os.amperecomputing.com
    Signed-off-by: Tuan Phan
    Signed-off-by: Bjorn Helgaas

    Tuan Phan
     

15 Sep, 2020

1 commit

  • MCFG is an optional ACPI table. Given there are machines without PCI (or
    it is hidden) we have been receiving queries/complaints about what this
    message means given it's being presented as an error.

    Reduce the message severity. The ACPI table list printed at boot will
    continue to provide another way to detect when the table is missing.

    Link: https://lore.kernel.org/r/20200908210359.569294-1-jeremy.linton@arm.com
    Signed-off-by: Jeremy Linton
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Hanjun Guo

    Jeremy Linton
     

01 May, 2020

1 commit

  • struct pci_ecam_ops is typically DT match table data which is defined to
    be const. It's also best practice for ops structs to be const. Ideally,
    we'd make struct pci_ops const as well, but that becomes pretty
    invasive, so for now we just cast it where needed.

    Link: https://lore.kernel.org/r/20200409234923.21598-2-robh@kernel.org
    Signed-off-by: Rob Herring
    Signed-off-by: Lorenzo Pieralisi
    Acked-by: Bjorn Helgaas
    Acked-by: Catalin Marinas
    Cc: Catalin Marinas
    Cc: Will Deacon
    Cc: Lorenzo Pieralisi
    Cc: Andrew Murray
    Cc: Bjorn Helgaas
    Cc: "Rafael J. Wysocki"
    Cc: Len Brown
    Cc: Jonathan Chocron
    Cc: Zhou Wang
    Cc: Robert Richter
    Cc: Toan Le
    Cc: Marc Gonzalez
    Cc: Mans Rullgard
    Cc: linux-acpi@vger.kernel.org

    Rob Herring
     

19 Jun, 2019

1 commit

  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation the gpl this program is
    distributed in the hope that it will be useful but without any
    warranty without even the implied warranty of merchantability or
    fitness for a particular purpose see the gnu general public license
    version 2 gplv2 for more details you should have received a copy of
    the gnu general public license version 2 gplv2 along with this
    source code

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 16 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Enrico Weigelt
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190604081201.771169395@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

26 Apr, 2019

1 commit

  • Add driver for Amazon's Annapurna Labs PCIe host controller. The
    controller is based on DesignWare's IP.

    The controller doesn't support accessing the Root Port's config space via
    ECAM, so we obtain its base address via an AMZN0001 device.

    Furthermore, the DesignWare PCIe controller doesn't filter out config
    transactions sent to devices 1 and up on its bus, so they are filtered by
    the driver.

    All subordinate buses do support ECAM access.

    Implementing specific PCI config access functions involves:
    - Adding an init function to obtain the Root Port's base address from
    an AMZN0001 device.
    - Adding a new entry in the MCFG quirk array.

    [bhelgaas: Note that there is no Kconfig option for this driver because it
    is only intended for use with the generic ACPI host bridge driver. This
    driver is only needed because the DesignWare IP doesn't completely support
    ECAM access to the root bus.]

    Link: https://lore.kernel.org/lkml/1553774276-24675-1-git-send-email-jonnyc@amazon.com
    Co-developed-by: Vladimir Aerov
    Signed-off-by: Jonathan Chocron
    Signed-off-by: Vladimir Aerov
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: David Woodhouse
    Reviewed-by: Benjamin Herrenschmidt
    Acked-by: Lorenzo Pieralisi

    Jonathan Chocron
     

25 Apr, 2017

1 commit

  • Currently SoCs pass2.x do not emulate EA headers for ACPI boot method at
    all. However, for pass2.x some devices (like EDAC) advertise incorrect
    base addresses in their BARs which results in driver probe failure during
    resource request. Since all problematic blocks are on 2nd NUMA node under
    domain 10 add necessary quirk entry to obtain BAR addresses correction
    using EA header emulation.

    Fixes: 44f22bd91e88 ("PCI: Add MCFG quirks for Cavium ThunderX pass2.x host controller")
    Signed-off-by: Tomasz Nowicki
    Signed-off-by: Bjorn Helgaas
    Acked-by: Robert Richter
    CC: stable@vger.kernel.org # v4.10+

    Tomasz Nowicki
     

22 Apr, 2017

1 commit

  • With no blank lines, it's not obvious where the macro definitions end and
    the uses begin. Add some blank lines and reorder the ThunderX definitions.
    No functional change intended.

    Signed-off-by: Bjorn Helgaas
    CC: stable@vger.kernel.org # v4.10+

    Bjorn Helgaas
     

13 Jan, 2017

1 commit

  • The configuration data provided by an MCFG entry, i.e., PCI segment and bus
    range, may span multiple host bridges.

    pci_mcfg_lookup() previously required an exact match of the host bridge
    starting bus and the MCFG starting bus, which made the following
    configuration fail:

    MCFG region:
    segment: 0
    bus range: 0x00-0xff

    host bridge
    segment: 0
    bus range: 0x20-0x4f

    Relax the bus range check in pci_mcfg_lookup() so we can use any MCFG entry
    that contains the required bus range, as we do in pci_mmconfig_lookup().

    [bhelgaas: changelog]
    Signed-off-by: Zhou Wang
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Tomasz Nowicki
    Acked-by: Lorenzo Pieralisi

    Zhou Wang
     

07 Dec, 2016

7 commits

  • PCIe controllers in X-Gene SoCs are not ECAM compliant: software needs to
    configure additional controller's register to address device at
    bus:dev:function.

    Add a quirk to discover controller MMIO register space and configure
    controller registers to select and address the target secondary device.

    The quirk will only be applied for X-Gene PCIe MCFG table with
    OEM revison 1, 2, 3 or 4 (PCIe controller v1 and v2 on X-Gene SoCs).

    Tested-by: Jon Masters
    Signed-off-by: Duc Dang
    Signed-off-by: Bjorn Helgaas

    Duc Dang
     
  • ThunderX pass1.x requires to emulate the EA headers for on-chip devices
    hence it has to use custom pci_thunder_ecam_ops for accessing PCI config
    space (pci-thunder-ecam.c). Add new entries to MCFG quirk array where it
    can be applied while probing ACPI based PCI host controller.

    ThunderX pass1.x is using the same way for accessing off-chip devices
    (so-called PEM) as silicon pass-2.x so we need to add PEM quirk entries
    too.

    Quirk is considered for ThunderX silicon pass1.x only which is identified
    via MCFG revision 2.

    ThunderX pass 1.x requires the following accessors:

    NUMA node 0 PCI segments 0- 3: pci_thunder_ecam_ops (MCFG quirk)
    NUMA node 0 PCI segments 4- 9: thunder_pem_ecam_ops (MCFG quirk)
    NUMA node 1 PCI segments 10-13: pci_thunder_ecam_ops (MCFG quirk)
    NUMA node 1 PCI segments 14-19: thunder_pem_ecam_ops (MCFG quirk)

    [bhelgaas: change Makefile/ifdefs so quirk doesn't depend on
    CONFIG_PCI_HOST_THUNDER_ECAM]
    Signed-off-by: Tomasz Nowicki
    Signed-off-by: Bjorn Helgaas

    Tomasz Nowicki
     
  • ThunderX PCIe controller to off-chip devices (so-called PEM) is not fully
    compliant with ECAM standard. It uses non-standard configuration space
    accessors (see thunder_pem_ecam_ops) and custom configuration space
    granulation (see bus_shift = 24). In order to access configuration space
    and probe PEM as ACPI-based PCI host controller we need to add MCFG quirk
    infrastructure. This involves:
    1. A new thunder_pem_acpi_init() init function to locate PEM-specific
    register ranges using ACPI.
    2. Export PEM thunder_pem_ecam_ops structure so it is visible to MCFG quirk
    code.
    3. New quirk entries for each PEM segment. Each contains platform IDs,
    mentioned thunder_pem_ecam_ops and CFG resources.

    Quirk is considered for ThunderX silicon pass2.x only which is identified
    via MCFG revision 1.

    ThunderX pass 2.x requires the following accessors:

    NUMA Node 0 PCI segments 0- 3: pci_generic_ecam_ops (ECAM-compliant)
    NUMA Node 0 PCI segments 4- 9: thunder_pem_ecam_ops (MCFG quirk)
    NUMA Node 1 PCI segments 10-13: pci_generic_ecam_ops (ECAM-compliant)
    NUMA Node 1 PCI segments 14-19: thunder_pem_ecam_ops (MCFG quirk)

    [bhelgaas: adapt to use acpi_get_rc_resources(), update Makefile/ifdefs so
    quirk doesn't depend on CONFIG_PCI_HOST_THUNDER_PEM]
    Signed-off-by: Tomasz Nowicki
    Signed-off-by: Bjorn Helgaas

    Tomasz Nowicki
     
  • The PCIe controller in Hip05/Hip06/Hip07 SoCs is not completely
    ECAM-compliant. It is non-ECAM only for the RC bus config space; for any
    other bus underneath the root bus it does support ECAM access.

    Add specific quirks for PCI config space accessors. This involves:
    1. New initialization call hisi_pcie_init() to obtain RC base
    addresses from PNP0C02 at the root of the ACPI namespace (under \_SB).
    2. New entry in common quirk array.

    [bhelgaas: move to pcie-hisi.c and change Makefile/ifdefs so quirk doesn't
    depend on CONFIG_PCI_HISI]
    Signed-off-by: Dongdong Liu
    Signed-off-by: Gabriele Paoloni
    Signed-off-by: Bjorn Helgaas

    Dongdong Liu
     
  • The Qualcomm Technologies QDF2432 SoC does not support accesses smaller
    than 32 bits to the PCI configuration space. Register the appropriate
    quirk.

    [bhelgaas: add QCOM_ECAM32 macro, ifdef for ACPI and PCI_QUIRKS]
    Signed-off-by: Christopher Covington
    Signed-off-by: Bjorn Helgaas

    Christopher Covington
     
  • The PCIe spec (r3.0, sec 7.2.2) specifies an "Enhanced Configuration Access
    Mechanism" (ECAM) for memory-mapped access to configuration space. ECAM is
    required for PCIe systems unless there's a standard firmware interface for
    config access.

    In the absence of a firmware interface, we use pci_generic_ecam_ops, and on
    ACPI systems, we discover the ECAM space via the MCFG table and/or the _CBA
    method.

    Unfortunately some systems provide MCFG but don't implement ECAM according
    to spec, so we need a mechanism for quirks to make those systems work.

    Add an MCFG quirk mechanism to override the config accessor functions
    and/or the memory-mapped address space.

    A quirk is selected if it matches all of the following:

    - OEM ID
    - OEM Table ID
    - OEM Revision
    - PCI segment (from _SEG)
    - PCI bus number range (from _CRS, wildcard allowed)

    If the quirk specifies config accessor functions or a memory-mapped address
    range, these override the defaults.

    [bhelgaas: changelog, reorder quirk matching, fix oem_revision typo per
    Duc, add under #ifdef CONFIG_PCI_QUIRKS]
    Signed-off-by: Tomasz Nowicki
    Signed-off-by: Dongdong Liu
    Signed-off-by: Christopher Covington
    Signed-off-by: Bjorn Helgaas

    Tomasz Nowicki
     
  • pci_mcfg_lookup() is the external interface to the generic MCFG code.
    Previously it merely looked up the ECAM base address for a given domain and
    bus range. We want a way to add MCFG quirks, some of which may require
    special config accessors and adjustments to the ECAM address range.

    Extend pci_mcfg_lookup() so it can return a pointer to a pci_ecam_ops
    structure and a struct resource for the ECAM address space. For now, it
    always returns &pci_generic_ecam_ops (the standard accessor) and the
    resource described by the MCFG.

    No functional changes intended.

    [bhelgaas: changelog]
    Signed-off-by: Tomasz Nowicki
    Signed-off-by: Bjorn Helgaas

    Tomasz Nowicki
     

11 Jun, 2016

1 commit

  • On ACPI systems that support memory-mapped config space access, i.e., ECAM,
    the PCI Firmware Specification says the OS can learn where the ECAM space
    is from either:

    - the static MCFG table (for non-hotpluggable bridges), or
    - the _CBA method (for hotpluggable bridges)

    The current MCFG table handling code cannot be easily generalized owing to
    x86-specific quirks, which makes it hard to reuse on other architectures.

    Implement generic MCFG handling from scratch, including:

    - Simple MCFG table parsing (via pci_mmcfg_late_init() as in current x86)
    - MCFG region lookup for a (domain, bus_start, bus_end) tuple

    [bhelgaas: changelog]
    Signed-off-by: Tomasz Nowicki
    Signed-off-by: Jayachandran C
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Lorenzo Pieralisi

    Tomasz Nowicki