xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/pci/qcom,pcie.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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