Commit 041bc24d authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull pci updates from Bjorn Helgaas:
 "Resource management:

   - Distribute spare resources to unconfigured hotplug bridges at
     boot-time (not just when hot-adding such a bridge), which makes
     hot-adding devices to docks work better.

   - Revert to a BAR assignment inherited from firmware only when the
     address is actually reachable via any upstream bridges, which fixes
     some cases where firmware doesn't configure all devices.

   - Add a sysfs interface to resize BARs so this can be done before
     assigning devices to a VM through VFIO.

  Power management:

   - Disable Precision Time Management for all devices on suspend to
     enable lower-power PM state. We previously did this just for Root
     Ports, which isn't enough because downstream devices can still
     generate PTM messages, which cause errors if it's disabled in the
     Root Port.

   - Save and restore the ASPM L1 PM Substates configuration for
     suspend/ resume. Previously this configuration was lost, so L1.x
     states likely stopped working after resume.

   - Check whether the L1 PM Substates Capability exists. If it didn't
     exist, we previously read junk and tried to configure L1 Substates
     based on that.

   - Fix the LTR_L1.2_THRESHOLD computation, which previously set a
     threshold for entering L1.2 that was too low in some cases.

   - Reduce the delay after transitions to or from D3cold by using
     usleep_range() rather than msleep(), which often slept for ~19ms
     instead of the 10ms normally required. The spec says 10ms is
     enough, but it's possible we could trip over devices that need a
     little more.

  Error handling:

   - Work around a BIOS bug that caused Intel Root Ports to advertise a
     Root Port Programmed I/O (RP PIO) log size of zero, which caused
     annoying warnings and prevented the kernel from dumping log
     registers for DPC errors.

  Qualcomm PCIe controller driver:

   - Add support for SC8280XP and SA8540P host controllers and SM8450
     endpoint controller.

   - Disable Master AXI clock on endpoint controllers to save power when
     link is idle or in L1.x.

   - Expose link state transition counts via debugfs to help debug
     issues with low-power states.

   - Add auto-loading module support.

  Synopsys DesignWare PCIe controller driver:

   - Remove a dependency on ZONE_DMA32 by allocating the MSI target page
     differently. There's more work to do related to eDMA controllers,
     so it's not completely settled"

* tag 'pci-v6.1-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (71 commits)
  PCI: qcom-ep: Check platform_get_resource_byname() return value
  PCI: qcom-ep: Add support for SM8450 SoC
  dt-bindings: PCI: qcom-ep: Add support for SM8450 SoC
  dt-bindings: PCI: qcom-ep: Define clocks per platform
  PCI: qcom-ep: Make PERST separation optional
  dt-bindings: PCI: qcom-ep: Make PERST separation optional
  PCI: qcom-ep: Disable Master AXI Clock when there is no PCIe traffic
  PCI: Expose PCIe Resizable BAR support via sysfs
  PCI/ASPM: Correct LTR_L1.2_THRESHOLD computation
  PCI/ASPM: Ignore L1 PM Substates if device lacks capability
  PCI/ASPM: Factor out L1 PM Substates configuration
  PCI: qcom-ep: Gate Master AXI clock to MHI bus during L1SS
  PCI: qcom-ep: Expose link transition counts via debugfs
  PCI: qcom-ep: Disable IRQs during driver remove
  PCI/ASPM: Save L1 PM Substates Capability for suspend/resume
  PCI/ASPM: Refactor L1 PM Substates Control Register programming
  PCI: qcom-ep: Make use of the cached dev pointer
  PCI: qcom-ep: Rely on the clocks supplied by devicetree
  PCI: qcom-ep: Add kernel-doc for qcom_pcie_ep structure
  phy: freescale: imx8m-pcie: Fix the wrong order of phy_init() and phy_power_on()
  ...
parents c440f996 0e00a3ae
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -457,3 +457,36 @@ Description:

		The file is writable if the PF is bound to a driver that
		implements ->sriov_set_msix_vec_count().

What:		/sys/bus/pci/devices/.../resourceN_resize
Date:		September 2022
Contact:	Alex Williamson <alex.williamson@redhat.com>
Description:
		These files provide an interface to PCIe Resizable BAR support.
		A file is created for each BAR resource (N) supported by the
		PCIe Resizable BAR extended capability of the device.  Reading
		each file exposes the bitmap of available resource sizes:

		# cat resource1_resize
		00000000000001c0

		The bitmap represents supported resource sizes for the BAR,
		where bit0 = 1MB, bit1 = 2MB, bit2 = 4MB, etc.  In the above
		example the device supports 64MB, 128MB, and 256MB BAR sizes.

		When writing the file, the user provides the bit position of
		the desired resource size, for example:

		# echo 7 > resource1_resize

		This indicates to set the size value corresponding to bit 7,
		128MB.  The resulting size is 2 ^ (bit# + 20).  This definition
		matches the PCIe specification of this capability.

		In order to make use of resource resizing, all PCI drivers must
		be unbound from the device and peer devices under the same
		parent bridge may need to be soft removed.  In the case of
		VGA devices, writing a resize value will remove low level
		console drivers from the device.  Raw users of pci-sysfs
		resourceN attributes must be terminated prior to resizing.
		Success of the resizing operation is not guaranteed.
+11 −2
Original line number Diff line number Diff line
@@ -48,7 +48,13 @@ allOf:

properties:
  compatible:
    const: mediatek,mt8192-pcie
    oneOf:
      - items:
          - enum:
              - mediatek,mt8188-pcie
              - mediatek,mt8195-pcie
          - const: mediatek,mt8192-pcie
      - const: mediatek,mt8192-pcie

  reg:
    maxItems: 1
@@ -84,7 +90,9 @@ properties:
      - const: tl_96m
      - const: tl_32k
      - const: peri_26m
      - const: top_133m
      - enum:
          - top_133m        # for MT8192
          - peri_mem        # for MT8188/MT8195

  assigned-clocks:
    maxItems: 1
@@ -126,6 +134,7 @@ required:
  - interrupts
  - ranges
  - clocks
  - clock-names
  - '#interrupt-cells'
  - interrupt-controller

+31 −0
Original line number Diff line number Diff line
@@ -25,6 +25,33 @@ properties:
      - const: cfg
      - const: apb

  clocks:
    description:
      Fabric Interface Controllers, FICs, are the interface between the FPGA
      fabric and the core complex on PolarFire SoC. The FICs require two clocks,
      one from each side of the interface. The "FIC clocks" described by this
      property are on the core complex side & communication through a FIC is not
      possible unless it's corresponding clock is enabled. A clock must be
      enabled for each of the interfaces the root port is connected through.
      This could in theory be all 4 interfaces, one interface or any combination
      in between.
    minItems: 1
    items:
      - description: FIC0's clock
      - description: FIC1's clock
      - description: FIC2's clock
      - description: FIC3's clock

  clock-names:
    description:
      As any FIC connection combination is possible, the names should match the
      order in the clocks property and take the form "ficN" where N is a number
      0-3
    minItems: 1
    maxItems: 4
    items:
      pattern: '^fic[0-3]$'

  interrupts:
    minItems: 1
    items:
@@ -40,6 +67,10 @@ properties:
  ranges:
    maxItems: 1

  dma-ranges:
    minItems: 1
    maxItems: 6

  msi-controller:
    description: Identifies the node as an MSI controller.

+65 −21
Original line number Diff line number Diff line
@@ -9,12 +9,11 @@ title: Qualcomm PCIe Endpoint Controller binding
maintainers:
  - Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

allOf:
  - $ref: "pci-ep.yaml#"

properties:
  compatible:
    const: qcom,sdx55-pcie-ep
    enum:
      - qcom,sdx55-pcie-ep
      - qcom,sm8450-pcie-ep

  reg:
    items:
@@ -35,24 +34,12 @@ properties:
      - const: mmio

  clocks:
    items:
      - description: PCIe Auxiliary clock
      - description: PCIe CFG AHB clock
      - description: PCIe Master AXI clock
      - description: PCIe Slave AXI clock
      - description: PCIe Slave Q2A AXI clock
      - description: PCIe Sleep clock
      - description: PCIe Reference clock
    minItems: 7
    maxItems: 8

  clock-names:
    items:
      - const: aux
      - const: cfg
      - const: bus_master
      - const: bus_slave
      - const: slave_q2a
      - const: sleep
      - const: ref
    minItems: 7
    maxItems: 8

  qcom,perst-regs:
    description: Reference to a syscon representing TCSR followed by the two
@@ -105,7 +92,6 @@ required:
  - reg-names
  - clocks
  - clock-names
  - qcom,perst-regs
  - interrupts
  - interrupt-names
  - reset-gpios
@@ -113,6 +99,64 @@ required:
  - reset-names
  - power-domains

allOf:
  - $ref: pci-ep.yaml#
  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sdx55-pcie-ep
    then:
      properties:
        clocks:
          items:
            - description: PCIe Auxiliary clock
            - description: PCIe CFG AHB clock
            - description: PCIe Master AXI clock
            - description: PCIe Slave AXI clock
            - description: PCIe Slave Q2A AXI clock
            - description: PCIe Sleep clock
            - description: PCIe Reference clock
        clock-names:
          items:
            - const: aux
            - const: cfg
            - const: bus_master
            - const: bus_slave
            - const: slave_q2a
            - const: sleep
            - const: ref

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sm8450-pcie-ep
    then:
      properties:
        clocks:
          items:
            - description: PCIe Auxiliary clock
            - description: PCIe CFG AHB clock
            - description: PCIe Master AXI clock
            - description: PCIe Slave AXI clock
            - description: PCIe Slave Q2A AXI clock
            - description: PCIe Reference clock
            - description: PCIe DDRSS SF TBU clock
            - description: PCIe AGGRE NOC AXI clock
        clock-names:
          items:
            - const: aux
            - const: cfg
            - const: bus_master
            - const: bus_slave
            - const: slave_q2a
            - const: ref
            - const: ddrss_sf_tbu
            - const: aggre_noc_axi

unevaluatedProperties: false

examples:
+67 −3
Original line number Diff line number Diff line
@@ -25,8 +25,10 @@ properties:
      - qcom,pcie-ipq4019
      - qcom,pcie-ipq8074
      - qcom,pcie-qcs404
      - qcom,pcie-sa8540p
      - qcom,pcie-sc7280
      - qcom,pcie-sc8180x
      - qcom,pcie-sc8280xp
      - qcom,pcie-sdm845
      - qcom,pcie-sm8150
      - qcom,pcie-sm8250
@@ -181,6 +183,7 @@ allOf:
            enum:
              - qcom,pcie-sc7280
              - qcom,pcie-sc8180x
              - qcom,pcie-sc8280xp
              - qcom,pcie-sm8250
              - qcom,pcie-sm8450-pcie0
              - qcom,pcie-sm8450-pcie1
@@ -598,6 +601,36 @@ allOf:
          items:
            - const: pci # PCIe core reset

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,pcie-sa8540p
              - qcom,pcie-sc8280xp
    then:
      properties:
        clocks:
          minItems: 8
          maxItems: 9
        clock-names:
          minItems: 8
          items:
            - const: aux # Auxiliary clock
            - const: cfg # Configuration clock
            - const: bus_master # Master AXI clock
            - const: bus_slave # Slave AXI clock
            - const: slave_q2a # Slave Q2A clock
            - const: ddrss_sf_tbu # PCIe SF TBU clock
            - const: noc_aggr_4 # NoC aggregate 4 clock
            - const: noc_aggr_south_sf # NoC aggregate South SF clock
            - const: cnoc_qx # Configuration NoC QX clock
        resets:
          maxItems: 1
        reset-names:
          items:
            - const: pci # PCIe core reset

  - if:
      not:
        properties:
@@ -626,8 +659,6 @@ allOf:
        - resets
        - reset-names

    # Newer chipsets support either 1 or 8 MSI vectors
    # On older chipsets it's always 1 MSI vector
  - if:
      properties:
        compatible:
@@ -662,7 +693,40 @@ allOf:
                - const: msi5
                - const: msi6
                - const: msi7
    else:

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,pcie-sc8280xp
    then:
      properties:
        interrupts:
          minItems: 4
          maxItems: 4
        interrupt-names:
          items:
            - const: msi0
            - const: msi1
            - const: msi2
            - const: msi3

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,pcie-apq8064
              - qcom,pcie-apq8084
              - qcom,pcie-ipq4019
              - qcom,pcie-ipq6018
              - qcom,pcie-ipq8064
              - qcom,pcie-ipq8064-v2
              - qcom,pcie-ipq8074
              - qcom,pcie-qcs404
              - qcom,pcie-sa8540p
    then:
      properties:
        interrupts:
          maxItems: 1
Loading