blob: 362b19e1cd8b9d8a4ddfe1f11c9547baa8a2d1b5 [file] [log] [blame]
* MSM PCI express root complex
=========
Main node
=========
- compatible:
Usage: required
Value type: <stringlist>
Definition: Should be "qcom,pci-msm"
- reg:
Usage: required
Value type: <prop-encoded-array>
Definition: Register ranges as listed in the reg-names property
- reg-names:
Usage: required
Value type: <stringlist>
Definition: Should contain:
- "parf" MSM specific registers
- "phy" PCIe PHY registers
- "dbi" DesignWare PCIe registers
- "elbi" External local bus interface registers
- "iatu" Internal translation unit registers
- "config" PCIe device configuration space
- "io" PCIe device I/O registers
- "bars" PCIe device base address registers
- "tcsr" (opt) PCIe clock scheme register
- "rumi" (opt) PCIe RUMI register
- cell-index:
Usage: required
Value type: <u32>
Definition: defines root complex ID.
- linux,pci-domain:
Usage: required
Value type: <u32>
Definition: As specified in pci.txt
- #address-cells:
Usage: required
Value type: <u32>
Definition: Should be 3. As specified in designware-pcie.txt
- #size-cells:
Usage: required
Value type: <u32>
Definition: Should be 2. As specified in designware-pcie.txt
- ranges:
Usage: required
Value type: <prop-encoded-array>
Definition: As specified in designware-pcie.txt
- interrupt-parent:
Usage: required
Value type: <phandle>
Definition: Phandle of the interrupt controller that services
interrupts for this device
- interrupts:
Usage: required
Value type: <prop-encoded-array>
Definition: PCIe root complex related interrupts
- interrupt-names:
Usage: required
Value type: <stringlist>
Definition: Should contain
- "int_msi"
- "int_a"
- "int_b"
- "int_c"
- "int_d",
- "int_global_int"
- #interrupt-cells:
Usage: required
Value type: <u32>
Definition: Should be 1. As specified in designware-pcie.txt
- interrupt-map-mask:
Usage: required
Value type: <prop-encoded-array>
Definition: As specified in designware-pcie.txt
- interrupt-map:
Usage: required
Value type: <prop-encoded-array>
Definition: As specified in designware-pcie.txt
- msi-parent:
Usage: required
Value type: <phandle>
Definition: As specified in pci-msi.txt
- <name>-gpio:
Usage: required
Value type: <prop-encoded-array>
Definition: List of phandle and GPIO specifier pairs. Should contain:
- "perst-gpio" PCIe reset signal line
- "wake-gpio" PCIe wake signal line
- "qcom,ep-gpio" (opt) PCIe endpoint specific signal line
- pinctrl-names:
Usage: required
Value type: <stringlist>
Definition: Name of pin configuration groups. Should contain:
- "default"
- "sleep" (opt)
- pinctrl-<num>:
Usage: required
Value type: <prop-encoded-array>
Definition: As specified in pinctrl-bindings.txt
- <supply-name>-supply:
Usage: required
Value type: <phandle>
Definition: Phandle to PCIe core and PHY power supply. Should contain:
- "gdsc-vdd-supply" PCIe power domain control
- "vreg-1.8-supply" power supply for PCIe PHY
- "vreg-0.9-supply" power supply for PCIe PHY
- "vreg-cx-supply" power supply for PCIe core
- "vreg-3.3-supply" (opt) power supply for PCIe endpoint
- qcom,<supply-name>-voltage-level:
Usage: required
Value type: <prop-encoded-array>
Definition: List of max/min voltage(uV) and optimal current(uA) tuple
for power supply
- qcom,msm-bus,<bus-field>:
Usage: required
Value type: <prop-encoded>
Definition: As specified in msm_bus.txt
- clocks:
Usage: required
Value type: <prop-encoded-array>
Definition: List of phandle and clock specifier pairs as listed
in clock-names property
- clock-names:
Usage: required
Value type: <stringlist>
Definition: List of clock names that corresponds with listed "clocks"
- max-clock-frequency-hz:
Usage: optional
Value type: <u32 array>
Definition: List of clock frequencies for each PCIe clock. Only need to
specify the ones that needs to be changed
- resets:
Usage: required
Value type: <prop-encoded-array>
Definition: List of phandle and reset specifier pairs as listed
in reset-names property
- reset-names:
Usage: required
Value type: <stringlist>
Definition: Should contain:
- "pcie_<num>_core_reset" Core reset
- "pcie_<num>_phy_reset" PHY reset
- qcom,smmu-sid-base:
Usage: optional
Value: <u32>
Definition: Base SID for PCIe
- iommu-map:
Usage: optional. Required if qcom,smmu-sid-base is defined
Value type: <prop-encoded-array>
Definition: As defined in pci-iommu.txt. Should contain:
- <BDF, iommu phandle, SID, 0x1>
- qcom,target-link-speed:
Usage: optional
Value type: <u32>
Definition: Override maximum GEN speed. Options:
- 0x1 GEN 1
- 0x2 GEN 2
- 0x3 GEN 3
- qcom,link-check-max-count
Usage: optional
Value type: <u32>
Definition: Max number of retries for link training. Delay between each
check is 5ms
- qcom,boot-option:
Usage: optional
Value type: <u32>
Definition: Controls PCIe bus driver boot sequence. Options:
- BIT(0) PCIe bus driver will not start enumeration
during its probe. Clients will control when
PCIe bus driver should do enumeration
- BIT(1) PCIe bus driver will not start enumeration if it
receives a WAKE interrupt
- qcom,use-19p2mhz-aux-clk:
Usage: optional
Value type: <bool>
Definition: Set PCIe AUX clock frequency to 19.2MHz
- qcom,common-clk-en:
Usage: optional
Value type: <bool>
Definition: Support common clock configuration
- qcom,clk-power-manage-en:
Usage: optional
Value type: <bool>
Definition: Support clock power management
- qcom,n-fts:
Usage: optional
Value type: <u32>
Definition: Number of fast training sequences sent when the link
transitions from L0s to L0
- qcom,no-l0s-supported:
Usage: optional
Value type: <bool>
Definition: L0s is not supported
- qcom,no-l1-supported:
Usage: optional
Value type: <bool>
Definition: L1 is not supported
- qcom,no-l1ss-supported:
Usage: optional
Value type: <bool>
Definition: L1 sub-state (L1ss) is not supported
- qcom,no-aux-clk-sync:
Usage: optional
Value type: <bool>
Definition: The AUX clock is not synchronous to the Core clock to
support L1ss
- qcom,slv-addr-space-size:
Usage: required
Value type: <u32>
Definition: Memory block size dedicated to PCIe root complex
- qcom,wr-halt-size:
Usage: optional
Value type: <u32>
Definition: Exponent (base 2) that determines the data size(bytes) that
PCIe core will halt for each write
- qcom,tlp-rd-size:
Usage: optional
Value type: <u32>
Definition: Determines the maximum read request size(bytes). Options:
- 0 128
- 1 256
- 2 512
- 3 1K
- 4 2K
- 5 4K
- qcom,cpl-timeout:
Usage: optional
Value type: <u32>
Definition: Determines the timeout range PCIe root complex will send
out a completion packet if no ACK is seen for TLP. Options:
- BIT(0) 50us to 10ms
- BIT(1) 10ms to 250ms
- BIT(2) 250ms to 4s
- BIT(3) 4s to 64s
- qcom,perst-delay-us-min:
Usage: optional
Value type: <u32>
Definition: Minimum allowed time(us) to sleep after asserting or
de-asserting PERST GPI.
- qcom,perst-delay-us-max:
Usage: optional
Value type: <u32>
Definition: Maximum allowed time(us) to sleep after asserting or
de-asserting PERST GPIO
- qcom,ep-latency:
Usage: optional
Value type: <u32>
Definition: The latency(ms) between when PCIe PHY is up and PERST is
de-asserted. This guarantees the 100MHz clock is available for
the PCIe devices
- qcom,switch-latency:
Usage: optional
Definition: The latency(ms) between when PCIe link is up and before
any device over the switch is accessed
- qcom,pcie-phy-ver:
Usage: required
Value type: <u32>
Definition: States the PCIe PHY version
- qcom,phy-status-offset:
Usage: required
Value type: <u32>
Definition: Offset from PCIe PHY base to check if PCIe PHY status
- qcom,phy-status-bit:
Usage: required
Value type: <u32>
Definition: BIT to check PCIe PHY status
- qcom,phy-power-down-offset:
Usage: required
Value type: <u32>
Definition: Offset from PCIe PHY base to control PHY power state
- qcom,phy-sequence:
Usage: required
Value type: <prop-encoded array>
Definition: PCIe PHY initialization sequence
==============
Root port node
==============
Root port are defined as subnodes of the PCIe controller node
- reg:
Usage: required
Value type: <prop-encoded array>
Definition: First cell is devfn, which is determined by pci bus
topology. Assign the other cells 0 since they are not used
- qcom,iommu-cfg:
Usage: optional
Value type: <u32>
Definition: Defines PCIe root port SMMU configuration. Options:
- BIT(0) Indicates if SMMU is present
- BIT(1) Set IOMMU attribute S1_BYPASS
- BIT(2) Set IOMMU attribute FAST
- BIT(3) Set IOMMU attribute ATOMIC
- BIT(4) Set IOMMU attribute FORCE COHERENT
- qcom,iommu-range:
Usage: optional
Value type: Array of <u64>
Definition: Pair of values describing iova base and size to allocate
=======
Example
=======
pcie0: qcom,pcie@1c00000 {
compatible = "qcom,pci-msm";
reg = <0x1c00000 0x4000>,
<0x1c04000 0x1000>,
<0x60000000 0xf1d>,
<0x60000f20 0xa8>,
<0x60001000 0x1000>,
<0x60100000 0x100000>,
<0x60200000 0x100000>,
<0x60300000 0x3d00000>;
reg-names = "parf", "phy", "dm_core", "elbi", "iatu", "conf",
"io", "bars", "tcsr", "rumi";
cell-index = <0>;
device_type = "pci";
linux,pci-domain = <0>;
#address-cells = <3>;
#size-cells = <2>;
ranges = <0x01000000 0x0 0x60200000 0x60200000 0x0 0x100000>,
<0x02000000 0x0 0x60300000 0x60300000 0x0 0x3d00000>;
interrupt-parent = <&pcie0>;
interrupts = <0 1 2 3 4 5>;
interrupt-names = "int_msi", "int_a", "int_b", "int_c", "int_d",
"int_global_int",
#interrupt-cells = <1>;
interrupt-map-mask = <0 0 0 0xffffffff>;
interrupt-map = <0 0 0 0 &intc 0 141 0
0 0 0 1 &intc 0 149 0
0 0 0 2 &intc 0 150 0
0 0 0 3 &intc 0 151 0
0 0 0 4 &intc 0 152 0
0 0 0 5 &intc 0 140 0>;
msi-parent = <&pcie0_msi>;
perst-gpio = <&tlmm 35 0>;
wake-gpio = <&tlmm 37 0>;
qcom,ep-gpio = <&tlmm 94 0>;
pinctrl-names = "default", "sleep";
pinctrl-0 = <&pcie0_clkreq_default
&pcie0_perst_default
&pcie0_wake_default>;
pinctrl-1 = <&pcie0_clkreq_sleep
&pcie0_perst_sleep
&pcie0_wake_sleep>;
gdsc-vdd-supply = <&pcie_0_gdsc>;
vreg-1.8-supply = <&pm8150l_l3>;
vreg-0.9-supply = <&pm8150_l5>;
vreg-cx-supply = <&VDD_CX_LEVEL>;
vreg-3.3-supply = <&pm8150_l1>;
qcom,vreg-1.8-voltage-level = <1800000 1800000 1000>;
qcom,vreg-0.9-voltage-level = <950000 950000 24000>;
qcom,vreg-cx-voltage-level = <RPMH_REGULATOR_LEVEL_MAX
RPMH_REGULATOR_LEVEL_NOM 0>;
qcom,msm-bus,name = "pcie0";
qcom,msm-bus,num-cases = <2>;
qcom,msm-bus,num-paths = <1>;
qcom,msm-bus,vectors-KBps =
<45 512 0 0>,
<45 512 500 800>;
clocks = <&clock_gcc GCC_PCIE_0_PIPE_CLK>,
<&clock_rpmh RPMH_CXO_CLK>,
<&clock_gcc GCC_PCIE_0_AUX_CLK>,
<&clock_gcc GCC_PCIE_0_CFG_AHB_CLK>,
<&clock_gcc GCC_PCIE_0_MSTR_AXI_CLK>,
<&clock_gcc GCC_PCIE_0_SLV_AXI_CLK>,
<&clock_gcc GCC_PCIE_0_CLKREF_CLK>,
<&clock_gcc GCC_PCIE_0_SLV_Q2A_AXI_CLK>,
<&clock_gcc GCC_AGGRE_NOC_PCIE_TBU_CLK>,
<&clock_gcc GCC_PCIE0_PHY_REFGEN_CLK>,
<&clock_gcc GCC_PCIE_PHY_AUX_CLK>;
clock-names = "pcie_0_pipe_clk", "pcie_0_ref_clk_src",
"pcie_0_aux_clk", "pcie_0_cfg_ahb_clk",
"pcie_0_mstr_axi_clk", "pcie_0_slv_axi_clk",
"pcie_0_ldo", "pcie_0_slv_q2a_axi_clk",
"pcie_tbu_clk", "pcie_phy_refgen_clk",
"pcie_phy_aux_clk";
max-clock-frequency-hz = <0>, <0>, <19200000>, <0>, <0>, <0>,
<0>, <0>, <0>, <0>, <100000000>, <0>;
resets = <&clock_gcc GCC_PCIE_0_BCR>,
<&clock_gcc GCC_PCIE_0_PHY_BCR>;
reset-names = "pcie_0_core_reset",
"pcie_0_phy_reset";
qcom,smmu-sid-base = <0x1e00>;
iommu-map = <0x0 &apps_smmu 0x1e00 0x1>,
<0x100 &apps_smmu 0x1e01 0x1>;
qcom,target-link-speed = <0x2>;
qcom,link-check-max-count = <40> /* 200ms */
qcom,boot-option = <0x1>;
qcom,use-19p2mhz-aux-clk;
qcom,common-clk-en;
qcom,clk-power-manage-en;
qcom,n-fts = <0x50>;
qcom,no-l0s-supported;
qcom,no-l1-supported;
qcom,no-l1ss-supported;
qcom,no-aux-clk-sync;
qcom,slv-addr-space-size = <0x1000000>; /* 16MB */
qcom,wr-halt-size = <0xa>; /* 1KB */
qcom,tlp-rd-size = <0x5>; /* 4KB */
qcom,cpl-timeout = <0x2>; /* 10ms to 250ms */
qcom,perst-delay-us-min = <10>;
qcom,perst-delay-us-max = <15>;
qcom,ep-latency = <20>;
qcom,switch-latency = <25>;
qcom,pcie-phy-ver = <0x2101>; /* v2 version 1.01 */
qcom,phy-status-offset = <0x814>;
qcom,phy-status-bit = <6>;
qcom,phy-power-down-offset = <0x840>;
qcom,phy-sequence = <0x0840 0x03 0x0
0x0094 0x08 0x0
0x0154 0x34 0x0
0x016c 0x08 0x0
0x0058 0x0f 0x0
0x00a4 0x42 0x0
0x0110 0x24 0x0
0x0800 0x00 0x0
0x0844 0x03 0x0>;
pcie0_rp: pcie0_rp {
reg = <0x0 0x0 0x0 0x0 0x0>;
qcom,iommu-cfg = <0x3> /* SMMU PRESENT. SET S1 BYPASS */
qcom,iommu-range = <0x0 0x10000000 0x0 0x40000000>;
};