1*4882a593Smuzhiyun* Qualcomm PCI express root complex 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun- compatible: 4*4882a593Smuzhiyun Usage: required 5*4882a593Smuzhiyun Value type: <stringlist> 6*4882a593Smuzhiyun Definition: Value should contain 7*4882a593Smuzhiyun - "qcom,pcie-ipq8064" for ipq8064 8*4882a593Smuzhiyun - "qcom,pcie-ipq8064-v2" for ipq8064 rev 2 or ipq8065 9*4882a593Smuzhiyun - "qcom,pcie-apq8064" for apq8064 10*4882a593Smuzhiyun - "qcom,pcie-apq8084" for apq8084 11*4882a593Smuzhiyun - "qcom,pcie-msm8996" for msm8996 or apq8096 12*4882a593Smuzhiyun - "qcom,pcie-ipq4019" for ipq4019 13*4882a593Smuzhiyun - "qcom,pcie-ipq8074" for ipq8074 14*4882a593Smuzhiyun - "qcom,pcie-qcs404" for qcs404 15*4882a593Smuzhiyun - "qcom,pcie-sdm845" for sdm845 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun- reg: 18*4882a593Smuzhiyun Usage: required 19*4882a593Smuzhiyun Value type: <prop-encoded-array> 20*4882a593Smuzhiyun Definition: Register ranges as listed in the reg-names property 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun- reg-names: 23*4882a593Smuzhiyun Usage: required 24*4882a593Smuzhiyun Value type: <stringlist> 25*4882a593Smuzhiyun Definition: Must include the following entries 26*4882a593Smuzhiyun - "parf" Qualcomm specific registers 27*4882a593Smuzhiyun - "dbi" DesignWare PCIe registers 28*4882a593Smuzhiyun - "elbi" External local bus interface registers 29*4882a593Smuzhiyun - "config" PCIe configuration space 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun- device_type: 32*4882a593Smuzhiyun Usage: required 33*4882a593Smuzhiyun Value type: <string> 34*4882a593Smuzhiyun Definition: Should be "pci". As specified in designware-pcie.txt 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun- #address-cells: 37*4882a593Smuzhiyun Usage: required 38*4882a593Smuzhiyun Value type: <u32> 39*4882a593Smuzhiyun Definition: Should be 3. As specified in designware-pcie.txt 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun- #size-cells: 42*4882a593Smuzhiyun Usage: required 43*4882a593Smuzhiyun Value type: <u32> 44*4882a593Smuzhiyun Definition: Should be 2. As specified in designware-pcie.txt 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun- ranges: 47*4882a593Smuzhiyun Usage: required 48*4882a593Smuzhiyun Value type: <prop-encoded-array> 49*4882a593Smuzhiyun Definition: As specified in designware-pcie.txt 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun- interrupts: 52*4882a593Smuzhiyun Usage: required 53*4882a593Smuzhiyun Value type: <prop-encoded-array> 54*4882a593Smuzhiyun Definition: MSI interrupt 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun- interrupt-names: 57*4882a593Smuzhiyun Usage: required 58*4882a593Smuzhiyun Value type: <stringlist> 59*4882a593Smuzhiyun Definition: Should contain "msi" 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun- #interrupt-cells: 62*4882a593Smuzhiyun Usage: required 63*4882a593Smuzhiyun Value type: <u32> 64*4882a593Smuzhiyun Definition: Should be 1. As specified in designware-pcie.txt 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun- interrupt-map-mask: 67*4882a593Smuzhiyun Usage: required 68*4882a593Smuzhiyun Value type: <prop-encoded-array> 69*4882a593Smuzhiyun Definition: As specified in designware-pcie.txt 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun- interrupt-map: 72*4882a593Smuzhiyun Usage: required 73*4882a593Smuzhiyun Value type: <prop-encoded-array> 74*4882a593Smuzhiyun Definition: As specified in designware-pcie.txt 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun- clocks: 77*4882a593Smuzhiyun Usage: required 78*4882a593Smuzhiyun Value type: <prop-encoded-array> 79*4882a593Smuzhiyun Definition: List of phandle and clock specifier pairs as listed 80*4882a593Smuzhiyun in clock-names property 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun- clock-names: 83*4882a593Smuzhiyun Usage: required 84*4882a593Smuzhiyun Value type: <stringlist> 85*4882a593Smuzhiyun Definition: Should contain the following entries 86*4882a593Smuzhiyun - "iface" Configuration AHB clock 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun- clock-names: 89*4882a593Smuzhiyun Usage: required for ipq/apq8064 90*4882a593Smuzhiyun Value type: <stringlist> 91*4882a593Smuzhiyun Definition: Should contain the following entries 92*4882a593Smuzhiyun - "core" Clocks the pcie hw block 93*4882a593Smuzhiyun - "phy" Clocks the pcie PHY block 94*4882a593Smuzhiyun - "aux" Clocks the pcie AUX block 95*4882a593Smuzhiyun - "ref" Clocks the pcie ref block 96*4882a593Smuzhiyun- clock-names: 97*4882a593Smuzhiyun Usage: required for apq8084/ipq4019 98*4882a593Smuzhiyun Value type: <stringlist> 99*4882a593Smuzhiyun Definition: Should contain the following entries 100*4882a593Smuzhiyun - "aux" Auxiliary (AUX) clock 101*4882a593Smuzhiyun - "bus_master" Master AXI clock 102*4882a593Smuzhiyun - "bus_slave" Slave AXI clock 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun- clock-names: 105*4882a593Smuzhiyun Usage: required for msm8996/apq8096 106*4882a593Smuzhiyun Value type: <stringlist> 107*4882a593Smuzhiyun Definition: Should contain the following entries 108*4882a593Smuzhiyun - "pipe" Pipe Clock driving internal logic 109*4882a593Smuzhiyun - "aux" Auxiliary (AUX) clock 110*4882a593Smuzhiyun - "cfg" Configuration clock 111*4882a593Smuzhiyun - "bus_master" Master AXI clock 112*4882a593Smuzhiyun - "bus_slave" Slave AXI clock 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun- clock-names: 115*4882a593Smuzhiyun Usage: required for ipq8074 116*4882a593Smuzhiyun Value type: <stringlist> 117*4882a593Smuzhiyun Definition: Should contain the following entries 118*4882a593Smuzhiyun - "iface" PCIe to SysNOC BIU clock 119*4882a593Smuzhiyun - "axi_m" AXI Master clock 120*4882a593Smuzhiyun - "axi_s" AXI Slave clock 121*4882a593Smuzhiyun - "ahb" AHB clock 122*4882a593Smuzhiyun - "aux" Auxiliary clock 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun- clock-names: 125*4882a593Smuzhiyun Usage: required for qcs404 126*4882a593Smuzhiyun Value type: <stringlist> 127*4882a593Smuzhiyun Definition: Should contain the following entries 128*4882a593Smuzhiyun - "iface" AHB clock 129*4882a593Smuzhiyun - "aux" Auxiliary clock 130*4882a593Smuzhiyun - "master_bus" AXI Master clock 131*4882a593Smuzhiyun - "slave_bus" AXI Slave clock 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun-clock-names: 134*4882a593Smuzhiyun Usage: required for sdm845 135*4882a593Smuzhiyun Value type: <stringlist> 136*4882a593Smuzhiyun Definition: Should contain the following entries 137*4882a593Smuzhiyun - "aux" Auxiliary clock 138*4882a593Smuzhiyun - "cfg" Configuration clock 139*4882a593Smuzhiyun - "bus_master" Master AXI clock 140*4882a593Smuzhiyun - "bus_slave" Slave AXI clock 141*4882a593Smuzhiyun - "slave_q2a" Slave Q2A clock 142*4882a593Smuzhiyun - "tbu" PCIe TBU clock 143*4882a593Smuzhiyun - "pipe" PIPE clock 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun- resets: 146*4882a593Smuzhiyun Usage: required 147*4882a593Smuzhiyun Value type: <prop-encoded-array> 148*4882a593Smuzhiyun Definition: List of phandle and reset specifier pairs as listed 149*4882a593Smuzhiyun in reset-names property 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun- reset-names: 152*4882a593Smuzhiyun Usage: required for ipq/apq8064 153*4882a593Smuzhiyun Value type: <stringlist> 154*4882a593Smuzhiyun Definition: Should contain the following entries 155*4882a593Smuzhiyun - "axi" AXI reset 156*4882a593Smuzhiyun - "ahb" AHB reset 157*4882a593Smuzhiyun - "por" POR reset 158*4882a593Smuzhiyun - "pci" PCI reset 159*4882a593Smuzhiyun - "phy" PHY reset 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun- reset-names: 162*4882a593Smuzhiyun Usage: required for apq8084 163*4882a593Smuzhiyun Value type: <stringlist> 164*4882a593Smuzhiyun Definition: Should contain the following entries 165*4882a593Smuzhiyun - "core" Core reset 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun- reset-names: 168*4882a593Smuzhiyun Usage: required for ipq/apq8064 169*4882a593Smuzhiyun Value type: <stringlist> 170*4882a593Smuzhiyun Definition: Should contain the following entries 171*4882a593Smuzhiyun - "axi_m" AXI master reset 172*4882a593Smuzhiyun - "axi_s" AXI slave reset 173*4882a593Smuzhiyun - "pipe" PIPE reset 174*4882a593Smuzhiyun - "axi_m_vmid" VMID reset 175*4882a593Smuzhiyun - "axi_s_xpu" XPU reset 176*4882a593Smuzhiyun - "parf" PARF reset 177*4882a593Smuzhiyun - "phy" PHY reset 178*4882a593Smuzhiyun - "axi_m_sticky" AXI sticky reset 179*4882a593Smuzhiyun - "pipe_sticky" PIPE sticky reset 180*4882a593Smuzhiyun - "pwr" PWR reset 181*4882a593Smuzhiyun - "ahb" AHB reset 182*4882a593Smuzhiyun - "phy_ahb" PHY AHB reset 183*4882a593Smuzhiyun - "ext" EXT reset 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun- reset-names: 186*4882a593Smuzhiyun Usage: required for ipq8074 187*4882a593Smuzhiyun Value type: <stringlist> 188*4882a593Smuzhiyun Definition: Should contain the following entries 189*4882a593Smuzhiyun - "pipe" PIPE reset 190*4882a593Smuzhiyun - "sleep" Sleep reset 191*4882a593Smuzhiyun - "sticky" Core Sticky reset 192*4882a593Smuzhiyun - "axi_m" AXI Master reset 193*4882a593Smuzhiyun - "axi_s" AXI Slave reset 194*4882a593Smuzhiyun - "ahb" AHB Reset 195*4882a593Smuzhiyun - "axi_m_sticky" AXI Master Sticky reset 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun- reset-names: 198*4882a593Smuzhiyun Usage: required for qcs404 199*4882a593Smuzhiyun Value type: <stringlist> 200*4882a593Smuzhiyun Definition: Should contain the following entries 201*4882a593Smuzhiyun - "axi_m" AXI Master reset 202*4882a593Smuzhiyun - "axi_s" AXI Slave reset 203*4882a593Smuzhiyun - "axi_m_sticky" AXI Master Sticky reset 204*4882a593Smuzhiyun - "pipe_sticky" PIPE sticky reset 205*4882a593Smuzhiyun - "pwr" PWR reset 206*4882a593Smuzhiyun - "ahb" AHB reset 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun- reset-names: 209*4882a593Smuzhiyun Usage: required for sdm845 210*4882a593Smuzhiyun Value type: <stringlist> 211*4882a593Smuzhiyun Definition: Should contain the following entries 212*4882a593Smuzhiyun - "pci" PCIe core reset 213*4882a593Smuzhiyun 214*4882a593Smuzhiyun- power-domains: 215*4882a593Smuzhiyun Usage: required for apq8084 and msm8996/apq8096 216*4882a593Smuzhiyun Value type: <prop-encoded-array> 217*4882a593Smuzhiyun Definition: A phandle and power domain specifier pair to the 218*4882a593Smuzhiyun power domain which is responsible for collapsing 219*4882a593Smuzhiyun and restoring power to the peripheral 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun- vdda-supply: 222*4882a593Smuzhiyun Usage: required 223*4882a593Smuzhiyun Value type: <phandle> 224*4882a593Smuzhiyun Definition: A phandle to the core analog power supply 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun- vdda_phy-supply: 227*4882a593Smuzhiyun Usage: required for ipq/apq8064 228*4882a593Smuzhiyun Value type: <phandle> 229*4882a593Smuzhiyun Definition: A phandle to the analog power supply for PHY 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun- vdda_refclk-supply: 232*4882a593Smuzhiyun Usage: required for ipq/apq8064 233*4882a593Smuzhiyun Value type: <phandle> 234*4882a593Smuzhiyun Definition: A phandle to the analog power supply for IC which generates 235*4882a593Smuzhiyun reference clock 236*4882a593Smuzhiyun- vddpe-3v3-supply: 237*4882a593Smuzhiyun Usage: optional 238*4882a593Smuzhiyun Value type: <phandle> 239*4882a593Smuzhiyun Definition: A phandle to the PCIe endpoint power supply 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun- phys: 242*4882a593Smuzhiyun Usage: required for apq8084 and qcs404 243*4882a593Smuzhiyun Value type: <phandle> 244*4882a593Smuzhiyun Definition: List of phandle(s) as listed in phy-names property 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun- phy-names: 247*4882a593Smuzhiyun Usage: required for apq8084 and qcs404 248*4882a593Smuzhiyun Value type: <stringlist> 249*4882a593Smuzhiyun Definition: Should contain "pciephy" 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun- <name>-gpios: 252*4882a593Smuzhiyun Usage: optional 253*4882a593Smuzhiyun Value type: <prop-encoded-array> 254*4882a593Smuzhiyun Definition: List of phandle and GPIO specifier pairs. Should contain 255*4882a593Smuzhiyun - "perst-gpios" PCIe endpoint reset signal line 256*4882a593Smuzhiyun - "wake-gpios" PCIe endpoint wake signal line 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun* Example for ipq/apq8064 259*4882a593Smuzhiyun pcie@1b500000 { 260*4882a593Smuzhiyun compatible = "qcom,pcie-apq8064", "qcom,pcie-ipq8064", "snps,dw-pcie"; 261*4882a593Smuzhiyun reg = <0x1b500000 0x1000 262*4882a593Smuzhiyun 0x1b502000 0x80 263*4882a593Smuzhiyun 0x1b600000 0x100 264*4882a593Smuzhiyun 0x0ff00000 0x100000>; 265*4882a593Smuzhiyun reg-names = "dbi", "elbi", "parf", "config"; 266*4882a593Smuzhiyun device_type = "pci"; 267*4882a593Smuzhiyun linux,pci-domain = <0>; 268*4882a593Smuzhiyun bus-range = <0x00 0xff>; 269*4882a593Smuzhiyun num-lanes = <1>; 270*4882a593Smuzhiyun #address-cells = <3>; 271*4882a593Smuzhiyun #size-cells = <2>; 272*4882a593Smuzhiyun ranges = <0x81000000 0 0 0x0fe00000 0 0x00100000 /* I/O */ 273*4882a593Smuzhiyun 0x82000000 0 0 0x08000000 0 0x07e00000>; /* memory */ 274*4882a593Smuzhiyun interrupts = <GIC_SPI 238 IRQ_TYPE_NONE>; 275*4882a593Smuzhiyun interrupt-names = "msi"; 276*4882a593Smuzhiyun #interrupt-cells = <1>; 277*4882a593Smuzhiyun interrupt-map-mask = <0 0 0 0x7>; 278*4882a593Smuzhiyun interrupt-map = <0 0 0 1 &intc 0 36 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ 279*4882a593Smuzhiyun <0 0 0 2 &intc 0 37 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ 280*4882a593Smuzhiyun <0 0 0 3 &intc 0 38 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ 281*4882a593Smuzhiyun <0 0 0 4 &intc 0 39 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ 282*4882a593Smuzhiyun clocks = <&gcc PCIE_A_CLK>, 283*4882a593Smuzhiyun <&gcc PCIE_H_CLK>, 284*4882a593Smuzhiyun <&gcc PCIE_PHY_CLK>, 285*4882a593Smuzhiyun <&gcc PCIE_AUX_CLK>, 286*4882a593Smuzhiyun <&gcc PCIE_ALT_REF_CLK>; 287*4882a593Smuzhiyun clock-names = "core", "iface", "phy", "aux", "ref"; 288*4882a593Smuzhiyun resets = <&gcc PCIE_ACLK_RESET>, 289*4882a593Smuzhiyun <&gcc PCIE_HCLK_RESET>, 290*4882a593Smuzhiyun <&gcc PCIE_POR_RESET>, 291*4882a593Smuzhiyun <&gcc PCIE_PCI_RESET>, 292*4882a593Smuzhiyun <&gcc PCIE_PHY_RESET>, 293*4882a593Smuzhiyun <&gcc PCIE_EXT_RESET>; 294*4882a593Smuzhiyun reset-names = "axi", "ahb", "por", "pci", "phy", "ext"; 295*4882a593Smuzhiyun pinctrl-0 = <&pcie_pins_default>; 296*4882a593Smuzhiyun pinctrl-names = "default"; 297*4882a593Smuzhiyun }; 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun* Example for apq8084 300*4882a593Smuzhiyun pcie0@fc520000 { 301*4882a593Smuzhiyun compatible = "qcom,pcie-apq8084", "snps,dw-pcie"; 302*4882a593Smuzhiyun reg = <0xfc520000 0x2000>, 303*4882a593Smuzhiyun <0xff000000 0x1000>, 304*4882a593Smuzhiyun <0xff001000 0x1000>, 305*4882a593Smuzhiyun <0xff002000 0x2000>; 306*4882a593Smuzhiyun reg-names = "parf", "dbi", "elbi", "config"; 307*4882a593Smuzhiyun device_type = "pci"; 308*4882a593Smuzhiyun linux,pci-domain = <0>; 309*4882a593Smuzhiyun bus-range = <0x00 0xff>; 310*4882a593Smuzhiyun num-lanes = <1>; 311*4882a593Smuzhiyun #address-cells = <3>; 312*4882a593Smuzhiyun #size-cells = <2>; 313*4882a593Smuzhiyun ranges = <0x81000000 0 0 0xff200000 0 0x00100000 /* I/O */ 314*4882a593Smuzhiyun 0x82000000 0 0x00300000 0xff300000 0 0x00d00000>; /* memory */ 315*4882a593Smuzhiyun interrupts = <GIC_SPI 243 IRQ_TYPE_NONE>; 316*4882a593Smuzhiyun interrupt-names = "msi"; 317*4882a593Smuzhiyun #interrupt-cells = <1>; 318*4882a593Smuzhiyun interrupt-map-mask = <0 0 0 0x7>; 319*4882a593Smuzhiyun interrupt-map = <0 0 0 1 &intc 0 244 IRQ_TYPE_LEVEL_HIGH>, /* int_a */ 320*4882a593Smuzhiyun <0 0 0 2 &intc 0 245 IRQ_TYPE_LEVEL_HIGH>, /* int_b */ 321*4882a593Smuzhiyun <0 0 0 3 &intc 0 247 IRQ_TYPE_LEVEL_HIGH>, /* int_c */ 322*4882a593Smuzhiyun <0 0 0 4 &intc 0 248 IRQ_TYPE_LEVEL_HIGH>; /* int_d */ 323*4882a593Smuzhiyun clocks = <&gcc GCC_PCIE_0_CFG_AHB_CLK>, 324*4882a593Smuzhiyun <&gcc GCC_PCIE_0_MSTR_AXI_CLK>, 325*4882a593Smuzhiyun <&gcc GCC_PCIE_0_SLV_AXI_CLK>, 326*4882a593Smuzhiyun <&gcc GCC_PCIE_0_AUX_CLK>; 327*4882a593Smuzhiyun clock-names = "iface", "master_bus", "slave_bus", "aux"; 328*4882a593Smuzhiyun resets = <&gcc GCC_PCIE_0_BCR>; 329*4882a593Smuzhiyun reset-names = "core"; 330*4882a593Smuzhiyun power-domains = <&gcc PCIE0_GDSC>; 331*4882a593Smuzhiyun vdda-supply = <&pma8084_l3>; 332*4882a593Smuzhiyun phys = <&pciephy0>; 333*4882a593Smuzhiyun phy-names = "pciephy"; 334*4882a593Smuzhiyun perst-gpio = <&tlmm 70 GPIO_ACTIVE_LOW>; 335*4882a593Smuzhiyun pinctrl-0 = <&pcie0_pins_default>; 336*4882a593Smuzhiyun pinctrl-names = "default"; 337*4882a593Smuzhiyun }; 338