1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/pci/fsl,imx6q-pcie-ep.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Freescale i.MX6 PCIe Endpoint controller
8
9maintainers:
10  - Lucas Stach <l.stach@pengutronix.de>
11  - Richard Zhu <hongxing.zhu@nxp.com>
12
13description: |+
14  This PCIe controller is based on the Synopsys DesignWare PCIe IP and
15  thus inherits all the common properties defined in snps,dw-pcie-ep.yaml.
16  The controller instances are dual mode where in they can work either in
17  Root Port mode or Endpoint mode but one at a time.
18
19properties:
20  compatible:
21    enum:
22      - fsl,imx8mm-pcie-ep
23      - fsl,imx8mq-pcie-ep
24      - fsl,imx8mp-pcie-ep
25      - fsl,imx95-pcie-ep
26
27  clocks:
28    minItems: 3
29    items:
30      - description: PCIe bridge clock.
31      - description: PCIe bus clock.
32      - description: PCIe PHY clock.
33      - description: Additional required clock entry for imx6sx-pcie,
34           imx6sx-pcie-ep, imx8mq-pcie, imx8mq-pcie-ep.
35
36  clock-names:
37    minItems: 3
38    maxItems: 4
39
40  interrupts:
41    items:
42      - description: builtin eDMA interrupter.
43
44  interrupt-names:
45    items:
46      - const: dma
47
48required:
49  - compatible
50  - reg
51  - reg-names
52  - interrupts
53  - interrupt-names
54
55allOf:
56  - $ref: /schemas/pci/snps,dw-pcie-ep.yaml#
57  - $ref: /schemas/pci/fsl,imx6q-pcie-common.yaml#
58  - if:
59      properties:
60        compatible:
61          enum:
62            - fsl,imx8mm-pcie-ep
63            - fsl,imx8mq-pcie-ep
64            - fsl,imx8mp-pcie-ep
65    then:
66      properties:
67        reg:
68          minItems: 2
69          maxItems: 2
70        reg-names:
71          items:
72            - const: dbi
73            - const: addr_space
74
75  - if:
76      properties:
77        compatible:
78          enum:
79            - fsl,imx95-pcie-ep
80    then:
81      properties:
82        reg:
83          minItems: 6
84          maxItems: 6
85        reg-names:
86          items:
87            - const: dbi
88            - const: atu
89            - const: dbi2
90            - const: app
91            - const: dma
92            - const: addr_space
93
94  - if:
95      properties:
96        compatible:
97          enum:
98            - fsl,imx8mq-pcie-ep
99            - fsl,imx95-pcie-ep
100    then:
101      properties:
102        clocks:
103          minItems: 4
104        clock-names:
105          items:
106            - const: pcie
107            - const: pcie_bus
108            - const: pcie_phy
109            - const: pcie_aux
110    else:
111      properties:
112        clocks:
113          maxItems: 3
114        clock-names:
115          items:
116            - const: pcie
117            - const: pcie_bus
118            - const: pcie_aux
119
120
121unevaluatedProperties: false
122
123examples:
124  - |
125    #include <dt-bindings/clock/imx8mp-clock.h>
126    #include <dt-bindings/power/imx8mp-power.h>
127    #include <dt-bindings/reset/imx8mp-reset.h>
128    #include <dt-bindings/interrupt-controller/arm-gic.h>
129
130    pcie_ep: pcie-ep@33800000 {
131      compatible = "fsl,imx8mp-pcie-ep";
132      reg = <0x33800000 0x000400000>, <0x18000000 0x08000000>;
133      reg-names = "dbi", "addr_space";
134      clocks = <&clk IMX8MP_CLK_HSIO_ROOT>,
135               <&clk IMX8MP_CLK_HSIO_AXI>,
136               <&clk IMX8MP_CLK_PCIE_ROOT>;
137      clock-names = "pcie", "pcie_bus", "pcie_aux";
138      assigned-clocks = <&clk IMX8MP_CLK_PCIE_AUX>;
139      assigned-clock-rates = <10000000>;
140      assigned-clock-parents = <&clk IMX8MP_SYS_PLL2_50M>;
141      num-lanes = <1>;
142      interrupts = <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>; /* eDMA */
143      interrupt-names = "dma";
144      fsl,max-link-speed = <3>;
145      power-domains = <&hsio_blk_ctrl IMX8MP_HSIOBLK_PD_PCIE>;
146      resets = <&src IMX8MP_RESET_PCIE_CTRL_APPS_EN>,
147               <&src IMX8MP_RESET_PCIE_CTRL_APPS_TURNOFF>;
148      reset-names = "apps", "turnoff";
149      phys = <&pcie_phy>;
150      phy-names = "pcie-phy";
151      num-ib-windows = <4>;
152      num-ob-windows = <4>;
153    };
154