| MSM PCIe |
| |
| MSM PCI express root complex |
| |
| Required properties: |
| - compatible: should be "qcom,pci-msm" |
| - cell-index: defines root complex ID. |
| - #address-cells: Should provide a value of 0. |
| - reg: should contain PCIe register maps. |
| - reg-names: indicates various resources passed to driver by name. |
| Should be "parf", "phy", "dm_core", "elbi", "conf", "io", "bars". |
| These correspond to different modules within the PCIe core. |
| - ranges: For details of ranges properties, please refer to: |
| "Documentation\devicetree\bindings\pci\pci.txt" |
| - interrupts: Should be in the format <0 1 2> and it is an index to the |
| interrupt-map that contains PCIe related interrupts. |
| - #interrupt-cells: Should provide a value of 1. |
| - #interrupt-map-mask: should provide a value of 0xffffffff. |
| - interrupt-map: Must create mapping for the number of interrupts |
| that are defined in above interrupts property. |
| For PCIe device node, it should define 12 mappings for |
| the corresponding PCIe interrupts supporting the specification. |
| - interrupt-names: indicates interrupts passed to driver by name. |
| Should be "int_msi", "int_a", "int_b", "int_c", "int_d", |
| "int_pls_pme", "int_pme_legacy", "int_pls_err", |
| "int_aer_legacy", "int_pls_link_up", |
| "int_pls_link_down", "int_bridge_flush_n", |
| "msi_0", "msi_1", "msi_2", "msi_3", |
| "msi_4", "msi_5", "msi_6", "msi_7", |
| "msi_8", "msi_9", "msi_10", "msi_11", |
| "msi_12", "msi_13", "msi_14", "msi_15", |
| "msi_16", "msi_17", "msi_18", "msi_19", |
| "msi_20", "msi_21", "msi_22", "msi_23", |
| "msi_24", "msi_25", "msi_26", "msi_27", |
| "msi_28", "msi_29", "msi_30", "msi_31" |
| These correspond to the standard PCIe specification to support |
| MSIs, virtual IRQ's (INT#), link state notifications. |
| - perst-gpio: PERST GPIO specified by PCIe spec. |
| - wake-gpio: WAKE GPIO specified by PCIe spec. |
| - <supply-name>-supply: phandle to the regulator device tree node. |
| Refer to the schematics for the corresponding voltage regulators. |
| vreg-1.8-supply: phandle to the analog supply for the PCIe controller. |
| vreg-3.3-supply: phandle to the analog supply for the PCIe controller. |
| vreg-0.9-supply: phandle to the analog supply for the PCIe controller. |
| |
| Optional Properties: |
| - qcom,<supply-name>-voltage-level: specifies voltage levels for supply. |
| Should be specified in pairs (max, min, optimal), units uV. |
| - clkreq-gpio: CLKREQ GPIO specified by PCIe spec. |
| - qcom,ep-gpio: GPIO which enables a certain type of endpoint for link training. |
| - pinctrl-names: The state name of the pin configuration. |
| supports: "default", "sleep" |
| - pinctrl-0: For details of pinctrl properties, please refer to: |
| "Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt" |
| - pinctrl-1: For details of pinctrl properties, please refer to: |
| "Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt" |
| - clocks: list of clock phandles |
| - clock-names: list of names of clock inputs. |
| Should be "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"; |
| - max-clock-frequency-hz: list of the maximum operating frequencies stored |
| in the same order of clock names; |
| - qcom,l0s-supported: L0s is supported. |
| - qcom,l1-supported: L1 is supported. |
| - qcom,l1ss-supported: L1 sub-states (L1ss) is supported. |
| - qcom,aux-clk-sync: The AUX clock is synchronous to the Core clock to |
| support L1ss. |
| - qcom,common-clk-en: Enables the common clock configuration for the endpoint. |
| - qcom,clk-power-manage-en: Enables the clock power management for the |
| endpoint. |
| - qcom,n-fts: The number of fast training sequences sent when the link state |
| is changed from L0s to L0. |
| - qcom,pcie-phy-ver: version of PCIe PHY. |
| - qcom,phy-sequence: The initialization sequence to bring up the PCIe PHY. |
| Should be specified in groups (offset, value, delay). |
| - qcom,port-phy-sequence: The initialization sequence to bring up the |
| PCIe port PHY. |
| Should be specified in groups (offset, value, delay). |
| - qcom,use-19p2mhz-aux-clk: The frequency of PCIe AUX clock is 19.2MHz. |
| - qcom,boot-option: Bits that alter PCIe bus driver boot sequence. |
| Below details what happens when each bit is set |
| 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,msi-gicm-addr: MSI address for GICv2m. |
| - qcom,msi-gicm-base: MSI IRQ base for GICv2m. |
| - qcom,ext-ref-clk: The reference clock is external. |
| - iommus: the phandle and stream IDs for the SMMU used by this root |
| complex. This should be used in separate nodes from the main root |
| complex nodes, and is the only property needed in that case. |
| - qcom,common-phy: There is a common phy for all the Root Complexes. |
| - qcom,smmu-exist: PCIe uses a SMMU. |
| - qcom,smmu-sid-base: The base SMMU SID that PCIe bus driver will use to calculate |
| and assign for each endpoint. |
| - qcom,ep-latency: The time (unit: ms) to wait for the PCIe endpoint to become |
| stable after power on, before de-assert the PERST to the endpoint. |
| - qcom,wr-halt-size: With base 2, this exponent determines the size of the |
| data that PCIe core will halt on for each write transaction. |
| - qcom,cpl-timeout: Completion timeout value. This value specifies the time range |
| which the root complex will send out a completion packet if there is no response |
| from the endpoint. |
| - linux,pci-domain: For details of pci-domains properties, please refer to: |
| "Documentation/devicetree/bindings/pci/pci.txt" |
| - qcom,perst-delay-us-min: The minimum allowed time (unit: us) to sleep after |
| asserting or de-asserting PERST GPIO. |
| - qcom,perst-delay-us-max: The maximum allowed time (unit: us) to sleep after |
| asserting or de-asserting PERST GPIO. |
| - qcom,tlp-rd-size: The max TLP read size (Calculation: 128 times 2 to the |
| tlp-rd-size power). |
| - Refer to "Documentation/devicetree/bindings/arm/msm/msm_bus.txt" for |
| below optional properties: |
| - qcom,msm-bus,name |
| - qcom,msm-bus,num-cases |
| - qcom,msm-bus,num-paths |
| - qcom,msm-bus,vectors-KBps |
| - qcom,scm-dev-id: If present then device id value is passed to secure channel |
| manager(scm) driver. scm driver uses this device id to restore PCIe |
| controller related security configuration after coming out of the controller |
| power collapse. |
| - resets: reset specifier pair consists of phandle for the reset controller |
| and reset lines used by this controller. |
| - reset-names: reset signal name strings sorted in the same order as the resets |
| property. |
| |
| Example: |
| |
| pcie0: qcom,pcie@fc520000 { |
| compatible = "qcom,msm_pcie"; |
| cell-index = <0>; |
| #address-cells = <0>; |
| reg = <0xfc520000 0x2000>, |
| <0xfc526000 0x1000>, |
| <0xff000000 0x1000>, |
| <0xff001000 0x1000>, |
| <0xff100000 0x1000>, |
| <0xff200000 0x100000>, |
| <0xff300000 0xd00000>; |
| reg-names = "parf", "dm_core", "elbi", |
| "conf", "io", "bars"; |
| ranges = <0x01000000 0x0 0x0c200000 0x0c200000 0x0 0x100000>, |
| <0x02000000 0x0 0x0c300000 0x0c300000 0x0 0xd00000>; |
| interrupt-parent = <&pcie0>; |
| interrupts = <0 1 2 3 4 5 6 7 8 9 10 11 |
| 12 13 14 15 16 17 18 19 20 |
| 21 22 23 24 25 26 27 28 29 |
| 30 31 32 33 34 35 36 37 38 |
| 39 40 41 42 43>; |
| #interrupt-cells = <1>; |
| interrupt-map-mask = <0xffffffff>; |
| interrupt-map = <0x0 0x0 0x0 0 &intc 0 405 0 |
| 0x0 0x0 0x0 1 &intc 0 244 0 |
| 0x0 0x0 0x0 2 &intc 0 245 0 |
| 0x0 0x0 0x0 3 &intc 0 247 0 |
| 0x0 0x0 0x0 4 &intc 0 248 0 |
| 0x0 0x0 0x0 5 &intc 0 249 0 |
| 0x0 0x0 0x0 6 &intc 0 250 0 |
| 0x0 0x0 0x0 7 &intc 0 251 0 |
| 0x0 0x0 0x0 8 &intc 0 252 0 |
| 0x0 0x0 0x0 9 &intc 0 253 0 |
| 0x0 0x0 0x0 10 &intc 0 254 0 |
| 0x0 0x0 0x0 11 &intc 0 255 0 |
| 0x0 0x0 0x0 12 &intc 0 448 0 |
| 0x0 0x0 0x0 13 &intc 0 449 0 |
| 0x0 0x0 0x0 14 &intc 0 450 0 |
| 0x0 0x0 0x0 15 &intc 0 451 0 |
| 0x0 0x0 0x0 16 &intc 0 452 0 |
| 0x0 0x0 0x0 17 &intc 0 453 0 |
| 0x0 0x0 0x0 18 &intc 0 454 0 |
| 0x0 0x0 0x0 19 &intc 0 455 0 |
| 0x0 0x0 0x0 20 &intc 0 456 0 |
| 0x0 0x0 0x0 21 &intc 0 457 0 |
| 0x0 0x0 0x0 22 &intc 0 458 0 |
| 0x0 0x0 0x0 23 &intc 0 459 0 |
| 0x0 0x0 0x0 24 &intc 0 460 0 |
| 0x0 0x0 0x0 25 &intc 0 461 0 |
| 0x0 0x0 0x0 26 &intc 0 462 0 |
| 0x0 0x0 0x0 27 &intc 0 463 0 |
| 0x0 0x0 0x0 28 &intc 0 464 0 |
| 0x0 0x0 0x0 29 &intc 0 465 0 |
| 0x0 0x0 0x0 30 &intc 0 466 0 |
| 0x0 0x0 0x0 31 &intc 0 467 0 |
| 0x0 0x0 0x0 32 &intc 0 468 0 |
| 0x0 0x0 0x0 33 &intc 0 469 0 |
| 0x0 0x0 0x0 34 &intc 0 470 0 |
| 0x0 0x0 0x0 35 &intc 0 471 0 |
| 0x0 0x0 0x0 36 &intc 0 472 0 |
| 0x0 0x0 0x0 37 &intc 0 473 0 |
| 0x0 0x0 0x0 38 &intc 0 474 0 |
| 0x0 0x0 0x0 39 &intc 0 475 0 |
| 0x0 0x0 0x0 40 &intc 0 476 0 |
| 0x0 0x0 0x0 41 &intc 0 477 0 |
| 0x0 0x0 0x0 42 &intc 0 478 0 |
| 0x0 0x0 0x0 43 &intc 0 479 0>; |
| interrupt-names = "int_msi", "int_a", "int_b", "int_c", "int_d", |
| "int_pls_pme", "int_pme_legacy", "int_pls_err", |
| "int_aer_legacy", "int_pls_link_up", |
| "int_pls_link_down", "int_bridge_flush_n", |
| "msi_0", "msi_1", "msi_2", "msi_3", |
| "msi_4", "msi_5", "msi_6", "msi_7", |
| "msi_8", "msi_9", "msi_10", "msi_11", |
| "msi_12", "msi_13", "msi_14", "msi_15", |
| "msi_16", "msi_17", "msi_18", "msi_19", |
| "msi_20", "msi_21", "msi_22", "msi_23", |
| "msi_24", "msi_25", "msi_26", "msi_27", |
| "msi_28", "msi_29", "msi_30", "msi_31"; |
| |
| qcom,phy-sequence = <0x804 0x01 0x00 |
| 0x034 0x14 0x00 |
| 0x138 0x30 0x00 |
| 0x048 0x0f 0x00 |
| 0x15c 0x06 0x00 |
| 0x090 0x01 0x00 |
| 0x808 0x03 0x00>; |
| qcom,port-phy-sequence = <0x804 0x01 0x00 |
| 0x034 0x14 0x00 |
| 0x138 0x30 0x00 |
| 0x048 0x0f 0x00 |
| 0x15c 0x06 0x00 |
| 0x090 0x01 0x00 |
| 0x808 0x03 0x00>; |
| perst-gpio = <&msmgpio 70 0>; |
| wake-gpio = <&msmgpio 69 0>; |
| clkreq-gpio = <&msmgpio 68 0>; |
| qcom,ep-gpio = <&tlmm 94 0>; |
| |
| gdsc-vdd-supply = <&gdsc_pcie_0>; |
| vreg-1.8-supply = <&pma8084_l12>; |
| vreg-0.9-supply = <&pma8084_l4>; |
| vreg-3.3-supply = <&wlan_vreg>; |
| |
| qcom,vreg-1.8-voltage-level = <1800000 1800000 1000>; |
| qcom,vreg-0.9-voltage-level = <950000 950000 24000>; |
| |
| 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>; |
| |
| clocks = <&clock_gcc clk_gcc_pcie_0_pipe_clk>, |
| <&clock_rpm clk_ln_bb_clk>, |
| <&clock_gcc clk_gcc_pcie_0_aux_clk>, |
| <&clock_gcc clk_gcc_pcie_0_cfg_ahb_clk>, |
| <&clock_gcc clk_gcc_pcie_0_mstr_axi_clk>, |
| <&clock_gcc clk_gcc_pcie_0_slv_axi_clk>, |
| <&clock_gcc clk_pcie_0_phy_ldo>; |
| |
| 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"; |
| |
| resets = <&clock_gcc GCC_PCIE_PHY_BCR>, |
| <&clock_gcc GCC_PCIE_PHY_COM_BCR>, |
| <&clock_gcc GCC_PCIE_PHY_NOCSR_COM_PHY_BCR>, |
| <&clock_gcc GCC_PCIE_0_PHY_BCR>; |
| |
| reset-names = "pcie_phy_reset", "pcie_phy_com_reset", |
| "pcie_phy_nocsr_com_phy_reset","pcie_0_phy_reset"; |
| |
| max-clock-frequency-hz = <125000000>, <0>, <1000000>, |
| <0>, <0>, <0>, <0>; |
| qcom,l0s-supported; |
| qcom,l1-supported; |
| qcom,l1ss-supported; |
| qcom,aux-clk-sync; |
| qcom,n-fts = <0x50>; |
| qcom,pcie-phy-ver = <1>; |
| qcom,boot-option = <0x1>; |
| qcom,msi-gicm-addr = <0xf9040040>; |
| qcom,msi-gicm-base = <0x160>; |
| qcom,ext-ref-clk; |
| qcom,tlp-rd-size = <0x5>; |
| qcom,common-phy; |
| qcom,smmu-exist; |
| qcom,smmu-sid-base = <0x1480>; |
| qcom,ep-latency = <100>; |
| qcom,wr-halt-size = <0xa>; /* 1KB */ |
| qcom,cpl-timeout = <0x2>; |
| |
| iommus = <&anoc0_smmu>; |
| |
| 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>; |
| |
| qcom,scm-dev-id = <11>; |
| }; |