Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3efa7f1f authored by Bjorn Helgaas's avatar Bjorn Helgaas
Browse files

Merge branch 'lorenzo/pci/tegra'

  - Fix Tegra OF node reference leak (Nishka Dasgupta)

  - Add #defines for PCIe Data Link Feature and Physical Layer 16.0 GT/s
    features (Vidya Sagar)

  - Disable MSI for Tegra Root Ports since they don't support using MSI for
    all Root Port events (Vidya Sagar)

  - Group DesignWare write-protected register writes together (Vidya Sagar)

  - Move DesignWare capability search interfaces so they can be used by
    both host and endpoint drivers (Vidya Sagar)

  - Add DesignWare extended capability search interfaces (Vidya Sagar)

  - Export dw_pcie_wait_for_link() so drivers can be modules (Vidya Sagar)

  - Add "snps,enable-cdm-check" DT binding for Configuration Dependent
    Module (CDM) register checking (Vidya Sagar)

  - Add DesignWare support for "snps,enable-cdm-check" CDM checking (Vidya
    Sagar)

  - Add "supports-clkreq" DT binding for host drivers to decide whether to
    advertise low power features (Vidya Sagar)

  - Add DT binding for Tegra194 (Vidya Sagar)

  - Add DT binding for Tegra194 P2U (PIPE to UPHY) block (Vidya Sagar)

  - Add support for Tegra194 P2U (PIPE to UPHY) (Vidya Sagar)

  - Add support for Tegra194 host controller (Vidya Sagar)

  - Add Tegra support for sideband PERST# and CLKREQ# for C5 (Vidya Sagar)

  - Add Tegra support for slot regulators for p2972-0000 platform (Vidya
    Sagar)

* lorenzo/pci/tegra:
  arm64: tegra: Add PCIe slot supply information in p2972-0000 platform
  arm64: tegra: Add configuration for PCIe C5 sideband signals
  PCI: tegra: Add support to enable slot regulators
  PCI: tegra: Add support to configure sideband pins
  dt-bindings: PCI: tegra: Add PCIe slot supplies regulator entries
  dt-bindings: PCI: tegra: Add sideband pins configuration entries
  PCI: tegra: Add Tegra194 PCIe support
  phy: tegra: Add PCIe PIPE2UPHY support
  dt-bindings: PHY: P2U: Add Tegra194 P2U block
  dt-bindings: PCI: tegra: Add device tree support for Tegra194
  dt-bindings: Add PCIe supports-clkreq property
  PCI: dwc: Add support to enable CDM register check
  dt-bindings: PCI: designware: Add binding for CDM register check
  PCI: dwc: Export dw_pcie_wait_for_link() API
  PCI: dwc: Add extended configuration space capability search API
  PCI: dwc: Move config space capability search API
  PCI: dwc: Group DBI registers writes requiring unlocking
  PCI: Disable MSI for Tegra root ports
  PCI: Add #defines for some of PCIe spec r4.0 features
  PCI: tegra: Fix OF node reference leak
parents 4597905e 09a0774a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -33,6 +33,11 @@ Optional properties:
- clock-names: Must include the following entries:
	- "pcie"
	- "pcie_bus"
- snps,enable-cdm-check: This is a boolean property and if present enables
   automatic checking of CDM (Configuration Dependent Module) registers
   for data corruption. CDM registers include standard PCIe configuration
   space registers, Port Logic registers, DMA and iATU (internal Address
   Translation Unit) registers.
RC mode:
- num-viewport: number of view ports configured in hardware. If a platform
  does not specify it, the driver assumes 2.
+171 −0
Original line number Diff line number Diff line
NVIDIA Tegra PCIe controller (Synopsys DesignWare Core based)

This PCIe host controller is based on the Synopsis Designware PCIe IP
and thus inherits all the common properties defined in designware-pcie.txt.

Required properties:
- compatible: For Tegra19x, must contain "nvidia,tegra194-pcie".
- device_type: Must be "pci"
- power-domains: A phandle to the node that controls power to the respective
  PCIe controller and a specifier name for the PCIe controller. Following are
  the specifiers for the different PCIe controllers
    TEGRA194_POWER_DOMAIN_PCIEX8B: C0
    TEGRA194_POWER_DOMAIN_PCIEX1A: C1
    TEGRA194_POWER_DOMAIN_PCIEX1A: C2
    TEGRA194_POWER_DOMAIN_PCIEX1A: C3
    TEGRA194_POWER_DOMAIN_PCIEX4A: C4
    TEGRA194_POWER_DOMAIN_PCIEX8A: C5
  these specifiers are defined in
  "include/dt-bindings/power/tegra194-powergate.h" file.
- reg: A list of physical base address and length pairs for each set of
  controller registers. Must contain an entry for each entry in the reg-names
  property.
- reg-names: Must include the following entries:
  "appl": Controller's application logic registers
  "config": As per the definition in designware-pcie.txt
  "atu_dma": iATU and DMA registers. This is where the iATU (internal Address
             Translation Unit) registers of the PCIe core are made available
             for SW access.
  "dbi": The aperture where root port's own configuration registers are
         available
- interrupts: A list of interrupt outputs of the controller. Must contain an
  entry for each entry in the interrupt-names property.
- interrupt-names: Must include the following entries:
  "intr": The Tegra interrupt that is asserted for controller interrupts
  "msi": The Tegra interrupt that is asserted when an MSI is received
- bus-range: Range of bus numbers associated with this controller
- #address-cells: Address representation for root ports (must be 3)
  - cell 0 specifies the bus and device numbers of the root port:
    [23:16]: bus number
    [15:11]: device number
  - cell 1 denotes the upper 32 address bits and should be 0
  - cell 2 contains the lower 32 address bits and is used to translate to the
    CPU address space
- #size-cells: Size representation for root ports (must be 2)
- ranges: Describes the translation of addresses for root ports and standard
  PCI regions. The entries must be 7 cells each, where the first three cells
  correspond to the address as described for the #address-cells property
  above, the fourth and fifth cells are for the physical CPU address to
  translate to and the sixth and seventh cells are as described for the
  #size-cells property above.
  - Entries setup the mapping for the standard I/O, memory and
    prefetchable PCI regions. The first cell determines the type of region
    that is setup:
    - 0x81000000: I/O memory region
    - 0x82000000: non-prefetchable memory region
    - 0xc2000000: prefetchable memory region
  Please refer to the standard PCI bus binding document for a more detailed
  explanation.
- #interrupt-cells: Size representation for interrupts (must be 1)
- interrupt-map-mask and interrupt-map: Standard PCI IRQ mapping properties
  Please refer to the standard PCI bus binding document for a more detailed
  explanation.
- clocks: Must contain an entry for each entry in clock-names.
  See ../clocks/clock-bindings.txt for details.
- clock-names: Must include the following entries:
  - core
- resets: Must contain an entry for each entry in reset-names.
  See ../reset/reset.txt for details.
- reset-names: Must include the following entries:
  - apb
  - core
- phys: Must contain a phandle to P2U PHY for each entry in phy-names.
- phy-names: Must include an entry for each active lane.
  "p2u-N": where N ranges from 0 to one less than the total number of lanes
- nvidia,bpmp: Must contain a pair of phandle to BPMP controller node followed
  by controller-id. Following are the controller ids for each controller.
    0: C0
    1: C1
    2: C2
    3: C3
    4: C4
    5: C5
- vddio-pex-ctl-supply: Regulator supply for PCIe side band signals

Optional properties:
- pinctrl-names: A list of pinctrl state names.
  It is mandatory for C5 controller and optional for other controllers.
  - "default": Configures PCIe I/O for proper operation.
- pinctrl-0: phandle for the 'default' state of pin configuration.
  It is mandatory for C5 controller and optional for other controllers.
- supports-clkreq: Refer to Documentation/devicetree/bindings/pci/pci.txt
- nvidia,update-fc-fixup: This is a boolean property and needs to be present to
    improve performance when a platform is designed in such a way that it
    satisfies at least one of the following conditions thereby enabling root
    port to exchange optimum number of FC (Flow Control) credits with
    downstream devices
    1. If C0/C4/C5 run at x1/x2 link widths (irrespective of speed and MPS)
    2. If C0/C1/C2/C3/C4/C5 operate at their respective max link widths and
       a) speed is Gen-2 and MPS is 256B
       b) speed is >= Gen-3 with any MPS
- nvidia,aspm-cmrt-us: Common Mode Restore Time for proper operation of ASPM
   to be specified in microseconds
- nvidia,aspm-pwr-on-t-us: Power On time for proper operation of ASPM to be
   specified in microseconds
- nvidia,aspm-l0s-entrance-latency-us: ASPM L0s entrance latency to be
   specified in microseconds
- vpcie3v3-supply: A phandle to the regulator node that supplies 3.3V to the slot
  if the platform has one such slot. (Ex:- x16 slot owned by C5 controller
  in p2972-0000 platform).
- vpcie12v-supply: A phandle to the regulator node that supplies 12V to the slot
  if the platform has one such slot. (Ex:- x16 slot owned by C5 controller
  in p2972-0000 platform).

Examples:
=========

Tegra194:
--------

	pcie@14180000 {
		compatible = "nvidia,tegra194-pcie", "snps,dw-pcie";
		power-domains = <&bpmp TEGRA194_POWER_DOMAIN_PCIEX8B>;
		reg = <0x00 0x14180000 0x0 0x00020000   /* appl registers (128K)      */
		       0x00 0x38000000 0x0 0x00040000   /* configuration space (256K) */
		       0x00 0x38040000 0x0 0x00040000>; /* iATU_DMA reg space (256K)  */
		reg-names = "appl", "config", "atu_dma";

		#address-cells = <3>;
		#size-cells = <2>;
		device_type = "pci";
		num-lanes = <8>;
		linux,pci-domain = <0>;

		pinctrl-names = "default";
		pinctrl-0 = <&pex_rst_c5_out_state>, <&clkreq_c5_bi_dir_state>;

		clocks = <&bpmp TEGRA194_CLK_PEX0_CORE_0>;
		clock-names = "core";

		resets = <&bpmp TEGRA194_RESET_PEX0_CORE_0_APB>,
			 <&bpmp TEGRA194_RESET_PEX0_CORE_0>;
		reset-names = "apb", "core";

		interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,	/* controller interrupt */
			     <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;	/* MSI interrupt */
		interrupt-names = "intr", "msi";

		#interrupt-cells = <1>;
		interrupt-map-mask = <0 0 0 0>;
		interrupt-map = <0 0 0 0 &gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;

		nvidia,bpmp = <&bpmp 0>;

		supports-clkreq;
		nvidia,aspm-cmrt-us = <60>;
		nvidia,aspm-pwr-on-t-us = <20>;
		nvidia,aspm-l0s-entrance-latency-us = <3>;

		bus-range = <0x0 0xff>;
		ranges = <0x81000000 0x0  0x38100000 0x0  0x38100000 0x0 0x00100000    /* downstream I/O (1MB) */
			  0x82000000 0x0  0x38200000 0x0  0x38200000 0x0 0x01E00000    /* non-prefetchable memory (30MB) */
			  0xc2000000 0x18 0x00000000 0x18 0x00000000 0x4 0x00000000>;  /* prefetchable memory (16GB) */

		vddio-pex-ctl-supply = <&vdd_1v8ao>;
		vpcie3v3-supply = <&vdd_3v3_pcie>;
		vpcie12v-supply = <&vdd_12v_pcie>;

		phys = <&p2u_hsio_2>, <&p2u_hsio_3>, <&p2u_hsio_4>,
		       <&p2u_hsio_5>;
		phy-names = "p2u-0", "p2u-1", "p2u-2", "p2u-3";
	};
+5 −0
Original line number Diff line number Diff line
@@ -27,6 +27,11 @@ driver implementation may support the following properties:
- reset-gpios:
   If present this property specifies PERST# GPIO. Host drivers can parse the
   GPIO and apply fundamental reset to endpoints.
- supports-clkreq:
   If present this property specifies that CLKREQ signal routing exists from
   root port to downstream device and host bridge drivers can do programming
   which depends on CLKREQ signal existence. For example, programming root port
   not to advertise ASPM L1 Sub-States support if there is no CLKREQ signal.

PCI-PCI Bridge properties
-------------------------
+28 −0
Original line number Diff line number Diff line
NVIDIA Tegra194 P2U binding

Tegra194 has two PHY bricks namely HSIO (High Speed IO) and NVHS (NVIDIA High
Speed) each interfacing with 12 and 8 P2U instances respectively.
A P2U instance is a glue logic between Synopsys DesignWare Core PCIe IP's PIPE
interface and PHY of HSIO/NVHS bricks. Each P2U instance represents one PCIe
lane.

Required properties:
- compatible: For Tegra19x, must contain "nvidia,tegra194-p2u".
- reg: Should be the physical address space and length of respective each P2U
       instance.
- reg-names: Must include the entry "ctl".

Required properties for PHY port node:
- #phy-cells: Defined by generic PHY bindings.  Must be 0.

Refer to phy/phy-bindings.txt for the generic PHY binding properties.

Example:

p2u_hsio_0: phy@3e10000 {
	compatible = "nvidia,tegra194-p2u";
	reg = <0x03e10000 0x10000>;
	reg-names = "ctl";

	#phy-cells = <0>;
};
+24 −0
Original line number Diff line number Diff line
@@ -289,5 +289,29 @@
			gpio = <&gpio TEGRA194_MAIN_GPIO(A, 3) GPIO_ACTIVE_HIGH>;
			enable-active-high;
		};

		vdd_3v3_pcie: regulator@2 {
			compatible = "regulator-fixed";
			reg = <2>;

			regulator-name = "PEX_3V3";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&gpio TEGRA194_MAIN_GPIO(Z, 2) GPIO_ACTIVE_HIGH>;
			regulator-boot-on;
			enable-active-high;
		};

		vdd_12v_pcie: regulator@3 {
			compatible = "regulator-fixed";
			reg = <3>;

			regulator-name = "VDD_12V";
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
			gpio = <&gpio TEGRA194_MAIN_GPIO(A, 1) GPIO_ACTIVE_LOW>;
			regulator-boot-on;
			enable-active-low;
		};
	};
};
Loading