1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/pci/nvidia,tegra194-pcie-ep.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: NVIDIA Tegra194 (and later) PCIe Endpoint controller (Synopsys DesignWare Core based)
8
9maintainers:
10  - Thierry Reding <thierry.reding@gmail.com>
11  - Jon Hunter <jonathanh@nvidia.com>
12  - Vidya Sagar <vidyas@nvidia.com>
13
14description: |
15  This PCIe controller is based on the Synopsys DesignWare PCIe IP and thus
16  inherits all the common properties defined in snps,dw-pcie-ep.yaml.  Some
17  of the controller instances are dual mode; they can work either in Root
18  Port mode or Endpoint mode but one at a time.
19
20  On Tegra194, controllers C0, C4 and C5 support Endpoint mode.
21  On Tegra234, controllers C5, C6, C7 and C10 support Endpoint mode.
22
23  Note: On Tegra194's P2972-0000 platform, only C5 controller can be enabled to
24  operate in the Endpoint mode because of the way the platform is designed.
25
26properties:
27  compatible:
28    enum:
29      - nvidia,tegra194-pcie-ep
30      - nvidia,tegra234-pcie-ep
31
32  reg:
33    items:
34      - description: controller's application logic registers
35      - description: iATU and DMA registers. This is where the iATU (internal
36          Address Translation Unit) registers of the PCIe core are made
37          available for software access.
38      - description: aperture where the Root Port's own configuration
39          registers are available.
40      - description: aperture used to map the remote Root Complex address space
41
42  reg-names:
43    items:
44      - const: appl
45      - const: atu_dma
46      - const: dbi
47      - const: addr_space
48
49  interrupts:
50    items:
51      - description: controller interrupt
52
53  interrupt-names:
54    items:
55      - const: intr
56
57  clocks:
58    items:
59      - description: module clock
60
61  clock-names:
62    items:
63      - const: core
64
65  resets:
66    items:
67      - description: APB bus interface reset
68      - description: module reset
69
70  reset-names:
71    items:
72      - const: apb
73      - const: core
74
75  reset-gpios:
76    description: Must contain a phandle to a GPIO controller followed by GPIO
77      that is being used as PERST input signal. Please refer to pci.txt.
78
79  phys:
80    minItems: 1
81    maxItems: 8
82
83  phy-names:
84    minItems: 1
85    items:
86      - const: p2u-0
87      - const: p2u-1
88      - const: p2u-2
89      - const: p2u-3
90      - const: p2u-4
91      - const: p2u-5
92      - const: p2u-6
93      - const: p2u-7
94
95  power-domains:
96    maxItems: 1
97    description: |
98      A phandle to the node that controls power to the respective PCIe
99      controller and a specifier name for the PCIe controller.
100
101      Tegra194 specifiers are defined in "include/dt-bindings/power/tegra194-powergate.h"
102      Tegra234 specifiers are defined in "include/dt-bindings/power/tegra234-powergate.h"
103
104  interconnects:
105    items:
106      - description: memory read client
107      - description: memory write client
108
109  interconnect-names:
110    items:
111      - const: dma-mem # read
112      - const: write
113
114  dma-coherent: true
115
116  nvidia,bpmp:
117    $ref: /schemas/types.yaml#/definitions/phandle-array
118    description: |
119      Must contain a pair of phandles to BPMP controller node followed by
120      controller ID. Following are the controller IDs for each controller:
121
122      Tegra194
123
124        0: C0
125        1: C1
126        2: C2
127        3: C3
128        4: C4
129        5: C5
130
131      Tegra234
132
133        0 : C0
134        1 : C1
135        2 : C2
136        3 : C3
137        4 : C4
138        5 : C5
139        6 : C6
140        7 : C7
141        8 : C8
142        9 : C9
143        10: C10
144
145    items:
146      - items:
147          - description: phandle to BPMP controller node
148          - description: PCIe controller ID
149            maximum: 10
150
151  nvidia,aspm-cmrt-us:
152    description: Common Mode Restore Time for proper operation of ASPM to be
153      specified in microseconds
154
155  nvidia,aspm-pwr-on-t-us:
156    description: Power On time for proper operation of ASPM to be specified in
157      microseconds
158
159  nvidia,aspm-l0s-entrance-latency-us:
160    description: ASPM L0s entrance latency to be specified in microseconds
161
162  vddio-pex-ctl-supply:
163    description: A phandle to the regulator supply for PCIe side band signals
164
165  nvidia,refclk-select-gpios:
166    maxItems: 1
167    description: GPIO used to enable REFCLK to controller from the host
168
169  nvidia,enable-ext-refclk:
170    description: |
171      This boolean property needs to be present if the controller is configured
172      to receive Reference Clock from the host.
173      NOTE: This is applicable only for Tegra234.
174
175    $ref: /schemas/types.yaml#/definitions/flag
176
177  nvidia,enable-srns:
178    description: |
179      This boolean property needs to be present if the controller is
180      configured to operate in SRNS (Separate Reference Clocks with No
181      Spread-Spectrum Clocking).  NOTE: This is applicable only for
182      Tegra234.
183
184    $ref: /schemas/types.yaml#/definitions/flag
185
186allOf:
187  - $ref: /schemas/pci/snps,dw-pcie-ep.yaml#
188
189unevaluatedProperties: false
190
191required:
192  - interrupts
193  - interrupt-names
194  - clocks
195  - clock-names
196  - resets
197  - reset-names
198  - power-domains
199  - reset-gpios
200  - vddio-pex-ctl-supply
201  - num-lanes
202  - phys
203  - phy-names
204  - nvidia,bpmp
205
206examples:
207  - |
208    #include <dt-bindings/clock/tegra194-clock.h>
209    #include <dt-bindings/gpio/tegra194-gpio.h>
210    #include <dt-bindings/interrupt-controller/arm-gic.h>
211    #include <dt-bindings/power/tegra194-powergate.h>
212    #include <dt-bindings/reset/tegra194-reset.h>
213
214    bus@0 {
215        #address-cells = <2>;
216        #size-cells = <2>;
217        ranges = <0x0 0x0 0x0 0x8 0x0>;
218
219        pcie-ep@141a0000 {
220            compatible = "nvidia,tegra194-pcie-ep";
221            reg = <0x00 0x141a0000 0x0 0x00020000>, /* appl registers (128K) */
222                  <0x00 0x3a040000 0x0 0x00040000>, /* iATU_DMA reg space (256K)  */
223                  <0x00 0x3a080000 0x0 0x00040000>, /* DBI reg space (256K) */
224                  <0x1c 0x00000000 0x4 0x00000000>; /* Address Space (16G) */
225            reg-names = "appl", "atu_dma", "dbi", "addr_space";
226            interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */
227            interrupt-names = "intr";
228
229            clocks = <&bpmp TEGRA194_CLK_PEX1_CORE_5>;
230            clock-names = "core";
231
232            resets = <&bpmp TEGRA194_RESET_PEX1_CORE_5_APB>,
233                     <&bpmp TEGRA194_RESET_PEX1_CORE_5>;
234            reset-names = "apb", "core";
235
236            power-domains = <&bpmp TEGRA194_POWER_DOMAIN_PCIEX8A>;
237            pinctrl-names = "default";
238            pinctrl-0 = <&clkreq_c5_bi_dir_state>;
239
240            nvidia,bpmp = <&bpmp 5>;
241
242            nvidia,aspm-cmrt-us = <60>;
243            nvidia,aspm-pwr-on-t-us = <20>;
244            nvidia,aspm-l0s-entrance-latency-us = <3>;
245
246            vddio-pex-ctl-supply = <&vdd_1v8ao>;
247
248            reset-gpios = <&gpio TEGRA194_MAIN_GPIO(GG, 1) GPIO_ACTIVE_LOW>;
249
250            nvidia,refclk-select-gpios = <&gpio_aon TEGRA194_AON_GPIO(AA, 5)
251                                          GPIO_ACTIVE_HIGH>;
252
253            num-lanes = <8>;
254
255            phys = <&p2u_nvhs_0>, <&p2u_nvhs_1>, <&p2u_nvhs_2>,
256                   <&p2u_nvhs_3>, <&p2u_nvhs_4>, <&p2u_nvhs_5>,
257                   <&p2u_nvhs_6>, <&p2u_nvhs_7>;
258
259            phy-names = "p2u-0", "p2u-1", "p2u-2", "p2u-3", "p2u-4",
260                        "p2u-5", "p2u-6", "p2u-7";
261        };
262    };
263
264  - |
265    #include <dt-bindings/clock/tegra234-clock.h>
266    #include <dt-bindings/gpio/tegra234-gpio.h>
267    #include <dt-bindings/interrupt-controller/arm-gic.h>
268    #include <dt-bindings/power/tegra234-powergate.h>
269    #include <dt-bindings/reset/tegra234-reset.h>
270
271    bus@0 {
272        #address-cells = <2>;
273        #size-cells = <2>;
274        ranges = <0x0 0x0 0x0 0x8 0x0>;
275
276        pcie-ep@141a0000 {
277            compatible = "nvidia,tegra234-pcie-ep";
278            power-domains = <&bpmp TEGRA234_POWER_DOMAIN_PCIEX8A>;
279            reg = <0x00 0x141a0000 0x0 0x00020000>, /* appl registers (128K)      */
280                  <0x00 0x3a040000 0x0 0x00040000>, /* iATU_DMA reg space (256K)  */
281                  <0x00 0x3a080000 0x0 0x00040000>, /* DBI reg space (256K)       */
282                  <0x27 0x40000000 0x4 0x00000000>; /* Address Space (16G)        */
283            reg-names = "appl", "atu_dma", "dbi", "addr_space";
284
285            interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>; /* controller interrupt */
286            interrupt-names = "intr";
287
288            clocks = <&bpmp TEGRA234_CLK_PEX1_C5_CORE>;
289            clock-names = "core";
290
291            resets = <&bpmp TEGRA234_RESET_PEX1_CORE_5_APB>,
292                     <&bpmp TEGRA234_RESET_PEX1_CORE_5>;
293            reset-names = "apb", "core";
294
295            nvidia,bpmp = <&bpmp 5>;
296
297            nvidia,enable-ext-refclk;
298            nvidia,aspm-cmrt-us = <60>;
299            nvidia,aspm-pwr-on-t-us = <20>;
300            nvidia,aspm-l0s-entrance-latency-us = <3>;
301
302            vddio-pex-ctl-supply = <&p3701_vdd_1v8_ls>;
303
304            reset-gpios = <&gpio TEGRA234_MAIN_GPIO(AF, 1) GPIO_ACTIVE_LOW>;
305
306            nvidia,refclk-select-gpios = <&gpio_aon
307                                          TEGRA234_AON_GPIO(AA, 4)
308                                          GPIO_ACTIVE_HIGH>;
309
310            num-lanes = <8>;
311
312            phys = <&p2u_nvhs_0>, <&p2u_nvhs_1>, <&p2u_nvhs_2>,
313                   <&p2u_nvhs_3>, <&p2u_nvhs_4>, <&p2u_nvhs_5>,
314                   <&p2u_nvhs_6>, <&p2u_nvhs_7>;
315
316            phy-names = "p2u-0", "p2u-1", "p2u-2", "p2u-3", "p2u-4",
317                        "p2u-5", "p2u-6", "p2u-7";
318        };
319    };
320