e91ae436cafe7c97a03f33dad4488eb5743f1100
[platform/kernel/linux-starfive.git] / Documentation / devicetree / bindings / pci / qcom,pcie.yaml
1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/pci/qcom,pcie.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Qualcomm PCI express root complex
8
9 maintainers:
10   - Bjorn Andersson <bjorn.andersson@linaro.org>
11   - Stanimir Varbanov <svarbanov@mm-sol.com>
12
13 description: |
14   Qualcomm PCIe root complex controller is bansed on the Synopsys DesignWare
15   PCIe IP.
16
17 properties:
18   compatible:
19     enum:
20       - qcom,pcie-ipq8064
21       - qcom,pcie-ipq8064-v2
22       - qcom,pcie-apq8064
23       - qcom,pcie-apq8084
24       - qcom,pcie-msm8996
25       - qcom,pcie-ipq4019
26       - qcom,pcie-ipq8074
27       - qcom,pcie-qcs404
28       - qcom,pcie-sc8180x
29       - qcom,pcie-sdm845
30       - qcom,pcie-sm8150
31       - qcom,pcie-sm8250
32       - qcom,pcie-sm8450-pcie0
33       - qcom,pcie-sm8450-pcie1
34       - qcom,pcie-ipq6018
35
36   reg:
37     minItems: 4
38     maxItems: 5
39
40   reg-names:
41     minItems: 4
42     maxItems: 5
43
44   interrupts:
45     maxItems: 1
46
47   interrupt-names:
48     items:
49       - const: msi
50
51   # Common definitions for clocks, clock-names and reset.
52   # Platform constraints are described later.
53   clocks:
54     minItems: 3
55     maxItems: 12
56
57   clock-names:
58     minItems: 3
59     maxItems: 12
60
61   resets:
62     minItems: 1
63     maxItems: 12
64
65   resets-names:
66     minItems: 1
67     maxItems: 12
68
69   vdda-supply:
70     description: A phandle to the core analog power supply
71
72   vdda_phy-supply:
73     description: A phandle to the core analog power supply for PHY
74
75   vdda_refclk-supply:
76     description: A phandle to the core analog power supply for IC which generates reference clock
77
78   vddpe-3v3-supply:
79     description: A phandle to the PCIe endpoint power supply
80
81   phys:
82     maxItems: 1
83
84   phy-names:
85     items:
86       - const: pciephy
87
88   power-domains:
89     maxItems: 1
90
91   perst-gpios:
92     description: GPIO controlled connection to PERST# signal
93     maxItems: 1
94
95   wake-gpios:
96     description: GPIO controlled connection to WAKE# signal
97     maxItems: 1
98
99 required:
100   - compatible
101   - reg
102   - reg-names
103   - interrupts
104   - interrupt-names
105   - "#interrupt-cells"
106   - interrupt-map-mask
107   - interrupt-map
108   - clocks
109   - clock-names
110
111 allOf:
112   - $ref: /schemas/pci/pci-bus.yaml#
113   - if:
114       properties:
115         compatible:
116           contains:
117             enum:
118               - qcom,pcie-apq8064
119               - qcom,pcie-ipq4019
120               - qcom,pcie-ipq8064
121               - qcom,pcie-ipq8064v2
122               - qcom,pcie-ipq8074
123               - qcom,pcie-qcs404
124     then:
125       properties:
126         reg:
127           minItems: 4
128           maxItems: 4
129         reg-names:
130           items:
131             - const: dbi # DesignWare PCIe registers
132             - const: elbi # External local bus interface registers
133             - const: parf # Qualcomm specific registers
134             - const: config # PCIe configuration space
135
136   - if:
137       properties:
138         compatible:
139           contains:
140             enum:
141               - qcom,pcie-ipq6018
142     then:
143       properties:
144         reg:
145           minItems: 5
146           maxItems: 5
147         reg-names:
148           items:
149             - const: dbi # DesignWare PCIe registers
150             - const: elbi # External local bus interface registers
151             - const: atu # ATU address space
152             - const: parf # Qualcomm specific registers
153             - const: config # PCIe configuration space
154
155   - if:
156       properties:
157         compatible:
158           contains:
159             enum:
160               - qcom,pcie-apq8084
161               - qcom,pcie-msm8996
162               - qcom,pcie-sdm845
163     then:
164       properties:
165         reg:
166           minItems: 4
167           maxItems: 4
168         reg-names:
169           items:
170             - const: parf # Qualcomm specific registers
171             - const: dbi # DesignWare PCIe registers
172             - const: elbi # External local bus interface registers
173             - const: config # PCIe configuration space
174
175   - if:
176       properties:
177         compatible:
178           contains:
179             enum:
180               - qcom,pcie-sc8180x
181               - qcom,pcie-sm8250
182               - qcom,pcie-sm8450-pcie0
183               - qcom,pcie-sm8450-pcie1
184     then:
185       properties:
186         reg:
187           minItems: 5
188           maxItems: 5
189         reg-names:
190           items:
191             - const: parf # Qualcomm specific registers
192             - const: dbi # DesignWare PCIe registers
193             - const: elbi # External local bus interface registers
194             - const: atu # ATU address space
195             - const: config # PCIe configuration space
196
197   - if:
198       properties:
199         compatible:
200           contains:
201             enum:
202               - qcom,pcie-apq8064
203               - qcom,pcie-ipq8064
204               - qcom,pcie-ipq8064v2
205     then:
206       properties:
207         clocks:
208           minItems: 3
209           maxItems: 5
210         clock-names:
211           minItems: 3
212           items:
213             - const: core # Clocks the pcie hw block
214             - const: iface # Configuration AHB clock
215             - const: phy # Clocks the pcie PHY block
216             - const: aux # Clocks the pcie AUX block, not on apq8064
217             - const: ref # Clocks the pcie ref block, not on apq8064
218         resets:
219           minItems: 5
220           maxItems: 6
221         reset-names:
222           minItems: 5
223           items:
224             - const: axi # AXI reset
225             - const: ahb # AHB reset
226             - const: por # POR reset
227             - const: pci # PCI reset
228             - const: phy # PHY reset
229             - const: ext # EXT reset, not on apq8064
230       required:
231         - vdda-supply
232         - vdda_phy-supply
233         - vdda_refclk-supply
234
235   - if:
236       properties:
237         compatible:
238           contains:
239             enum:
240               - qcom,pcie-apq8084
241     then:
242       properties:
243         clocks:
244           minItems: 4
245           maxItems: 4
246         clock-names:
247           items:
248             - const: iface # Configuration AHB clock
249             - const: master_bus # Master AXI clock
250             - const: slave_bus # Slave AXI clock
251             - const: aux # Auxiliary (AUX) clock
252         resets:
253           maxItems: 1
254         reset-names:
255           items:
256             - const: core # Core reset
257
258   - if:
259       properties:
260         compatible:
261           contains:
262             enum:
263               - qcom,pcie-ipq4019
264     then:
265       properties:
266         clocks:
267           minItems: 3
268           maxItems: 3
269         clock-names:
270           items:
271             - const: aux # Auxiliary (AUX) clock
272             - const: master_bus # Master AXI clock
273             - const: slave_bus # Slave AXI clock
274         resets:
275           minItems: 12
276           maxItems: 12
277         reset-names:
278           items:
279             - const: axi_m # AXI master reset
280             - const: axi_s # AXI slave reset
281             - const: pipe # PIPE reset
282             - const: axi_m_vmid # VMID reset
283             - const: axi_s_xpu # XPU reset
284             - const: parf # PARF reset
285             - const: phy # PHY reset
286             - const: axi_m_sticky # AXI sticky reset
287             - const: pipe_sticky # PIPE sticky reset
288             - const: pwr # PWR reset
289             - const: ahb # AHB reset
290             - const: phy_ahb # PHY AHB reset
291
292   - if:
293       properties:
294         compatible:
295           contains:
296             enum:
297               - qcom,pcie-msm8996
298     then:
299       oneOf:
300         - properties:
301             clock-names:
302               items:
303                 - const: pipe # Pipe Clock driving internal logic
304                 - const: aux # Auxiliary (AUX) clock
305                 - const: cfg # Configuration clock
306                 - const: bus_master # Master AXI clock
307                 - const: bus_slave # Slave AXI clock
308         - properties:
309             clock-names:
310               items:
311                 - const: pipe # Pipe Clock driving internal logic
312                 - const: bus_master # Master AXI clock
313                 - const: bus_slave # Slave AXI clock
314                 - const: cfg # Configuration clock
315                 - const: aux # Auxiliary (AUX) clock
316       properties:
317         clocks:
318           minItems: 5
319           maxItems: 5
320         resets: false
321         reset-names: false
322
323   - if:
324       properties:
325         compatible:
326           contains:
327             enum:
328               - qcom,pcie-ipq8074
329     then:
330       properties:
331         clocks:
332           minItems: 5
333           maxItems: 5
334         clock-names:
335           items:
336             - const: iface # PCIe to SysNOC BIU clock
337             - const: axi_m # AXI Master clock
338             - const: axi_s # AXI Slave clock
339             - const: ahb # AHB clock
340             - const: aux # Auxiliary clock
341         resets:
342           minItems: 7
343           maxItems: 7
344         reset-names:
345           items:
346             - const: pipe # PIPE reset
347             - const: sleep # Sleep reset
348             - const: sticky # Core Sticky reset
349             - const: axi_m # AXI Master reset
350             - const: axi_s # AXI Slave reset
351             - const: ahb # AHB Reset
352             - const: axi_m_sticky # AXI Master Sticky reset
353
354   - if:
355       properties:
356         compatible:
357           contains:
358             enum:
359               - qcom,pcie-ipq6018
360     then:
361       properties:
362         clocks:
363           minItems: 5
364           maxItems: 5
365         clock-names:
366           items:
367             - const: iface # PCIe to SysNOC BIU clock
368             - const: axi_m # AXI Master clock
369             - const: axi_s # AXI Slave clock
370             - const: axi_bridge # AXI bridge clock
371             - const: rchng
372         resets:
373           minItems: 8
374           maxItems: 8
375         reset-names:
376           items:
377             - const: pipe # PIPE reset
378             - const: sleep # Sleep reset
379             - const: sticky # Core Sticky reset
380             - const: axi_m # AXI Master reset
381             - const: axi_s # AXI Slave reset
382             - const: ahb # AHB Reset
383             - const: axi_m_sticky # AXI Master Sticky reset
384             - const: axi_s_sticky # AXI Slave Sticky reset
385
386   - if:
387       properties:
388         compatible:
389           contains:
390             enum:
391               - qcom,pcie-qcs404
392     then:
393       properties:
394         clocks:
395           minItems: 4
396           maxItems: 4
397         clock-names:
398           items:
399             - const: iface # AHB clock
400             - const: aux # Auxiliary clock
401             - const: master_bus # AXI Master clock
402             - const: slave_bus # AXI Slave clock
403         resets:
404           minItems: 6
405           maxItems: 6
406         reset-names:
407           items:
408             - const: axi_m # AXI Master reset
409             - const: axi_s # AXI Slave reset
410             - const: axi_m_sticky # AXI Master Sticky reset
411             - const: pipe_sticky # PIPE sticky reset
412             - const: pwr # PWR reset
413             - const: ahb # AHB reset
414
415   - if:
416       properties:
417         compatible:
418           contains:
419             enum:
420               - qcom,pcie-sdm845
421     then:
422       oneOf:
423           # Unfortunately the "optional" ref clock is used in the middle of the list
424         - properties:
425             clocks:
426               minItems: 8
427               maxItems: 8
428             clock-names:
429               items:
430                 - const: pipe # PIPE clock
431                 - const: aux # Auxiliary clock
432                 - const: cfg # Configuration clock
433                 - const: bus_master # Master AXI clock
434                 - const: bus_slave # Slave AXI clock
435                 - const: slave_q2a # Slave Q2A clock
436                 - const: ref # REFERENCE clock
437                 - const: tbu # PCIe TBU clock
438         - properties:
439             clocks:
440               minItems: 7
441               maxItems: 7
442             clock-names:
443               items:
444                 - const: pipe # PIPE clock
445                 - const: aux # Auxiliary clock
446                 - const: cfg # Configuration clock
447                 - const: bus_master # Master AXI clock
448                 - const: bus_slave # Slave AXI clock
449                 - const: slave_q2a # Slave Q2A clock
450                 - const: tbu # PCIe TBU clock
451       properties:
452         resets:
453           maxItems: 1
454         reset-names:
455           items:
456             - const: pci # PCIe core reset
457
458   - if:
459       properties:
460         compatible:
461           contains:
462             enum:
463               - qcom,pcie-sc8180x
464               - qcom,pcie-sm8150
465               - qcom,pcie-sm8250
466     then:
467       oneOf:
468           # Unfortunately the "optional" ref clock is used in the middle of the list
469         - properties:
470             clocks:
471               minItems: 9
472               maxItems: 9
473             clock-names:
474               items:
475                 - const: pipe # PIPE clock
476                 - const: aux # Auxiliary clock
477                 - const: cfg # Configuration clock
478                 - const: bus_master # Master AXI clock
479                 - const: bus_slave # Slave AXI clock
480                 - const: slave_q2a # Slave Q2A clock
481                 - const: ref # REFERENCE clock
482                 - const: tbu # PCIe TBU clock
483                 - const: ddrss_sf_tbu # PCIe SF TBU clock
484         - properties:
485             clocks:
486               minItems: 8
487               maxItems: 8
488             clock-names:
489               items:
490                 - const: pipe # PIPE clock
491                 - const: aux # Auxiliary clock
492                 - const: cfg # Configuration clock
493                 - const: bus_master # Master AXI clock
494                 - const: bus_slave # Slave AXI clock
495                 - const: slave_q2a # Slave Q2A clock
496                 - const: tbu # PCIe TBU clock
497                 - const: ddrss_sf_tbu # PCIe SF TBU clock
498       properties:
499         resets:
500           maxItems: 1
501         reset-names:
502           items:
503             - const: pci # PCIe core reset
504
505   - if:
506       properties:
507         compatible:
508           contains:
509             enum:
510               - qcom,pcie-sm8450-pcie0
511     then:
512       properties:
513         clocks:
514           minItems: 12
515           maxItems: 12
516         clock-names:
517           items:
518             - const: pipe # PIPE clock
519             - const: pipe_mux # PIPE MUX
520             - const: phy_pipe # PIPE output clock
521             - const: ref # REFERENCE clock
522             - const: aux # Auxiliary clock
523             - const: cfg # Configuration clock
524             - const: bus_master # Master AXI clock
525             - const: bus_slave # Slave AXI clock
526             - const: slave_q2a # Slave Q2A clock
527             - const: ddrss_sf_tbu # PCIe SF TBU clock
528             - const: aggre0 # Aggre NoC PCIe0 AXI clock
529             - const: aggre1 # Aggre NoC PCIe1 AXI clock
530         resets:
531           maxItems: 1
532         reset-names:
533           items:
534             - const: pci # PCIe core reset
535
536   - if:
537       properties:
538         compatible:
539           contains:
540             enum:
541               - qcom,pcie-sm8450-pcie1
542     then:
543       properties:
544         clocks:
545           minItems: 11
546           maxItems: 11
547         clock-names:
548           items:
549             - const: pipe # PIPE clock
550             - const: pipe_mux # PIPE MUX
551             - const: phy_pipe # PIPE output clock
552             - const: ref # REFERENCE clock
553             - const: aux # Auxiliary clock
554             - const: cfg # Configuration clock
555             - const: bus_master # Master AXI clock
556             - const: bus_slave # Slave AXI clock
557             - const: slave_q2a # Slave Q2A clock
558             - const: ddrss_sf_tbu # PCIe SF TBU clock
559             - const: aggre1 # Aggre NoC PCIe1 AXI clock
560         resets:
561           maxItems: 1
562         reset-names:
563           items:
564             - const: pci # PCIe core reset
565
566   - if:
567       not:
568         properties:
569           compatible:
570             contains:
571               enum:
572                 - qcom,pcie-apq8064
573                 - qcom,pcie-ipq4019
574                 - qcom,pcie-ipq8064
575                 - qcom,pcie-ipq8064v2
576                 - qcom,pcie-ipq8074
577                 - qcom,pcie-qcs404
578     then:
579       required:
580         - power-domains
581
582   - if:
583       not:
584         properties:
585           compatibles:
586             contains:
587               enum:
588                 - qcom,pcie-msm8996
589     then:
590       required:
591         - resets
592         - reset-names
593
594 unevaluatedProperties: false
595
596 examples:
597   - |
598     #include <dt-bindings/interrupt-controller/arm-gic.h>
599     pcie@1b500000 {
600       compatible = "qcom,pcie-ipq8064";
601       reg = <0x1b500000 0x1000>,
602             <0x1b502000 0x80>,
603             <0x1b600000 0x100>,
604             <0x0ff00000 0x100000>;
605       reg-names = "dbi", "elbi", "parf", "config";
606       device_type = "pci";
607       linux,pci-domain = <0>;
608       bus-range = <0x00 0xff>;
609       num-lanes = <1>;
610       #address-cells = <3>;
611       #size-cells = <2>;
612       ranges = <0x81000000 0 0 0x0fe00000 0 0x00100000>,
613                <0x82000000 0 0 0x08000000 0 0x07e00000>;
614       interrupts = <GIC_SPI 238 IRQ_TYPE_LEVEL_HIGH>;
615       interrupt-names = "msi";
616       #interrupt-cells = <1>;
617       interrupt-map-mask = <0 0 0 0x7>;
618       interrupt-map = <0 0 0 1 &intc 0 36 IRQ_TYPE_LEVEL_HIGH>,
619                       <0 0 0 2 &intc 0 37 IRQ_TYPE_LEVEL_HIGH>,
620                       <0 0 0 3 &intc 0 38 IRQ_TYPE_LEVEL_HIGH>,
621                       <0 0 0 4 &intc 0 39 IRQ_TYPE_LEVEL_HIGH>;
622       clocks = <&gcc 41>,
623                <&gcc 43>,
624                <&gcc 44>,
625                <&gcc 42>,
626                <&gcc 248>;
627       clock-names = "core", "iface", "phy", "aux", "ref";
628       resets = <&gcc 27>,
629                <&gcc 26>,
630                <&gcc 25>,
631                <&gcc 24>,
632                <&gcc 23>,
633                <&gcc 22>;
634       reset-names = "axi", "ahb", "por", "pci", "phy", "ext";
635       pinctrl-0 = <&pcie_pins_default>;
636       pinctrl-names = "default";
637       vdda-supply = <&pm8921_s3>;
638       vdda_phy-supply = <&pm8921_lvs6>;
639       vdda_refclk-supply = <&ext_3p3v>;
640     };
641   - |
642     #include <dt-bindings/interrupt-controller/arm-gic.h>
643     #include <dt-bindings/gpio/gpio.h>
644     pcie@fc520000 {
645       compatible = "qcom,pcie-apq8084";
646       reg = <0xfc520000 0x2000>,
647             <0xff000000 0x1000>,
648             <0xff001000 0x1000>,
649             <0xff002000 0x2000>;
650       reg-names = "parf", "dbi", "elbi", "config";
651       device_type = "pci";
652       linux,pci-domain = <0>;
653       bus-range = <0x00 0xff>;
654       num-lanes = <1>;
655       #address-cells = <3>;
656       #size-cells = <2>;
657       ranges = <0x81000000 0 0          0xff200000 0 0x00100000>,
658                <0x82000000 0 0x00300000 0xff300000 0 0x00d00000>;
659       interrupts = <GIC_SPI 243 IRQ_TYPE_LEVEL_HIGH>;
660       interrupt-names = "msi";
661       #interrupt-cells = <1>;
662       interrupt-map-mask = <0 0 0 0x7>;
663       interrupt-map = <0 0 0 1 &intc 0 244 IRQ_TYPE_LEVEL_HIGH>,
664                       <0 0 0 2 &intc 0 245 IRQ_TYPE_LEVEL_HIGH>,
665                       <0 0 0 3 &intc 0 247 IRQ_TYPE_LEVEL_HIGH>,
666                       <0 0 0 4 &intc 0 248 IRQ_TYPE_LEVEL_HIGH>;
667       clocks = <&gcc 324>,
668                <&gcc 325>,
669                <&gcc 327>,
670                <&gcc 323>;
671       clock-names = "iface", "master_bus", "slave_bus", "aux";
672       resets = <&gcc 81>;
673       reset-names = "core";
674       power-domains = <&gcc 1>;
675       vdda-supply = <&pma8084_l3>;
676       phys = <&pciephy0>;
677       phy-names = "pciephy";
678       perst-gpios = <&tlmm 70 GPIO_ACTIVE_LOW>;
679       pinctrl-0 = <&pcie0_pins_default>;
680       pinctrl-names = "default";
681     };
682 ...