blob: d099f3476cccddabd1c1002175800a23b278059c [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001NVIDIA Tegra PCIe controller
2
3Required properties:
4- compatible: Must be:
5 - "nvidia,tegra20-pcie": for Tegra20
6 - "nvidia,tegra30-pcie": for Tegra30
7 - "nvidia,tegra124-pcie": for Tegra124 and Tegra132
8 - "nvidia,tegra210-pcie": for Tegra210
9 - "nvidia,tegra186-pcie": for Tegra186
10- power-domains: To ungate power partition by BPMP powergate driver. Must
11 contain BPMP phandle and PCIe power partition ID. This is required only
12 for Tegra186.
13- device_type: Must be "pci"
14- reg: A list of physical base address and length for each set of controller
15 registers. Must contain an entry for each entry in the reg-names property.
16- reg-names: Must include the following entries:
17 "pads": PADS registers
18 "afi": AFI registers
19 "cs": configuration space region
20- interrupts: A list of interrupt outputs of the controller. Must contain an
21 entry for each entry in the interrupt-names property.
22- interrupt-names: Must include the following entries:
23 "intr": The Tegra interrupt that is asserted for controller interrupts
24 "msi": The Tegra interrupt that is asserted when an MSI is received
25- bus-range: Range of bus numbers associated with this controller
26- #address-cells: Address representation for root ports (must be 3)
27 - cell 0 specifies the bus and device numbers of the root port:
28 [23:16]: bus number
29 [15:11]: device number
30 - cell 1 denotes the upper 32 address bits and should be 0
31 - cell 2 contains the lower 32 address bits and is used to translate to the
32 CPU address space
33- #size-cells: Size representation for root ports (must be 2)
34- ranges: Describes the translation of addresses for root ports and standard
35 PCI regions. The entries must be 6 cells each, where the first three cells
36 correspond to the address as described for the #address-cells property
37 above, the fourth cell is the physical CPU address to translate to and the
38 fifth and six cells are as described for the #size-cells property above.
39 - The first two entries are expected to translate the addresses for the root
40 port registers, which are referenced by the assigned-addresses property of
41 the root port nodes (see below).
42 - The remaining entries setup the mapping for the standard I/O, memory and
43 prefetchable PCI regions. The first cell determines the type of region
44 that is setup:
45 - 0x81000000: I/O memory region
46 - 0x82000000: non-prefetchable memory region
47 - 0xc2000000: prefetchable memory region
48 Please refer to the standard PCI bus binding document for a more detailed
49 explanation.
50- #interrupt-cells: Size representation for interrupts (must be 1)
51- interrupt-map-mask and interrupt-map: Standard PCI IRQ mapping properties
52 Please refer to the standard PCI bus binding document for a more detailed
53 explanation.
54- clocks: Must contain an entry for each entry in clock-names.
55 See ../clocks/clock-bindings.txt for details.
56- clock-names: Must include the following entries:
57 - pex
58 - afi
59 - pll_e
60 - cml (not required for Tegra20)
61- resets: Must contain an entry for each entry in reset-names.
62 See ../reset/reset.txt for details.
63- reset-names: Must include the following entries:
64 - pex
65 - afi
66 - pcie_x
67
68Optional properties:
69- pinctrl-names: A list of pinctrl state names. Must contain the following
70 entries:
71 - "default": active state, puts PCIe I/O out of deep power down state
72 - "idle": puts PCIe I/O into deep power down state
73- pinctrl-0: phandle for the default/active state of pin configurations.
74- pinctrl-1: phandle for the idle state of pin configurations.
75
76Required properties on Tegra124 and later (deprecated):
77- phys: Must contain an entry for each entry in phy-names.
78- phy-names: Must include the following entries:
79 - pcie
80
81These properties are deprecated in favour of per-lane PHYs define in each of
82the root ports (see below).
83
84Power supplies for Tegra20:
85- avdd-pex-supply: Power supply for analog PCIe logic. Must supply 1.05 V.
86- vdd-pex-supply: Power supply for digital PCIe I/O. Must supply 1.05 V.
87- avdd-pex-pll-supply: Power supply for dedicated (internal) PCIe PLL. Must
88 supply 1.05 V.
89- avdd-plle-supply: Power supply for PLLE, which is shared with SATA. Must
90 supply 1.05 V.
91- vddio-pex-clk-supply: Power supply for PCIe clock. Must supply 3.3 V.
92
93Power supplies for Tegra30:
94- Required:
95 - avdd-pex-pll-supply: Power supply for dedicated (internal) PCIe PLL. Must
96 supply 1.05 V.
97 - avdd-plle-supply: Power supply for PLLE, which is shared with SATA. Must
98 supply 1.05 V.
99 - vddio-pex-ctl-supply: Power supply for PCIe control I/O partition. Must
100 supply 1.8 V.
101 - hvdd-pex-supply: High-voltage supply for PCIe I/O and PCIe output clocks.
102 Must supply 3.3 V.
103- Optional:
104 - If lanes 0 to 3 are used:
105 - avdd-pexa-supply: Power supply for analog PCIe logic. Must supply 1.05 V.
106 - vdd-pexa-supply: Power supply for digital PCIe I/O. Must supply 1.05 V.
107 - If lanes 4 or 5 are used:
108 - avdd-pexb-supply: Power supply for analog PCIe logic. Must supply 1.05 V.
109 - vdd-pexb-supply: Power supply for digital PCIe I/O. Must supply 1.05 V.
110
111Power supplies for Tegra124:
112- Required:
113 - avddio-pex-supply: Power supply for analog PCIe logic. Must supply 1.05 V.
114 - dvddio-pex-supply: Power supply for digital PCIe I/O. Must supply 1.05 V.
115 - hvdd-pex-supply: High-voltage supply for PCIe I/O and PCIe output clocks.
116 Must supply 3.3 V.
117 - vddio-pex-ctl-supply: Power supply for PCIe control I/O partition. Must
118 supply 2.8-3.3 V.
119
120Power supplies for Tegra210:
121- Required:
122 - hvddio-pex-supply: High-voltage supply for PCIe I/O and PCIe output
123 clocks. Must supply 1.8 V.
124 - dvddio-pex-supply: Power supply for digital PCIe I/O. Must supply 1.05 V.
125 - vddio-pex-ctl-supply: Power supply for PCIe control I/O partition. Must
126 supply 1.8 V.
127
128Power supplies for Tegra186:
129- Required:
130 - dvdd-pex-supply: Power supply for digital PCIe I/O. Must supply 1.05 V.
131 - hvdd-pex-pll-supply: High-voltage supply for PLLE (shared with USB3). Must
132 supply 1.8 V.
133 - hvdd-pex-supply: High-voltage supply for PCIe I/O and PCIe output clocks.
134 Must supply 1.8 V.
135 - vddio-pexctl-aud-supply: Power supply for PCIe side band signals. Must
136 supply 1.8 V.
137
138Root ports are defined as subnodes of the PCIe controller node.
139
140Required properties:
141- device_type: Must be "pci"
142- assigned-addresses: Address and size of the port configuration registers
143- reg: PCI bus address of the root port
144- #address-cells: Must be 3
145- #size-cells: Must be 2
146- ranges: Sub-ranges distributed from the PCIe controller node. An empty
147 property is sufficient.
148- nvidia,num-lanes: Number of lanes to use for this port. Valid combinations
149 are:
150 - Root port 0 uses 4 lanes, root port 1 is unused.
151 - Both root ports use 2 lanes.
152
153Required properties for Tegra124 and later:
154- phys: Must contain an phandle to a PHY for each entry in phy-names.
155- phy-names: Must include an entry for each active lane. Note that the number
156 of entries does not have to (though usually will) be equal to the specified
157 number of lanes in the nvidia,num-lanes property. Entries are of the form
158 "pcie-N": where N ranges from 0 to the value specified in nvidia,num-lanes.
159
160Examples:
161=========
162
163Tegra20:
164--------
165
166SoC DTSI:
167
168 pcie-controller@80003000 {
169 compatible = "nvidia,tegra20-pcie";
170 device_type = "pci";
171 reg = <0x80003000 0x00000800 /* PADS registers */
172 0x80003800 0x00000200 /* AFI registers */
173 0x90000000 0x10000000>; /* configuration space */
174 reg-names = "pads", "afi", "cs";
175 interrupts = <0 98 0x04 /* controller interrupt */
176 0 99 0x04>; /* MSI interrupt */
177 interrupt-names = "intr", "msi";
178
179 #interrupt-cells = <1>;
180 interrupt-map-mask = <0 0 0 0>;
181 interrupt-map = <0 0 0 0 &intc GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
182
183 bus-range = <0x00 0xff>;
184 #address-cells = <3>;
185 #size-cells = <2>;
186
187 ranges = <0x82000000 0 0x80000000 0x80000000 0 0x00001000 /* port 0 registers */
188 0x82000000 0 0x80001000 0x80001000 0 0x00001000 /* port 1 registers */
189 0x81000000 0 0 0x82000000 0 0x00010000 /* downstream I/O */
190 0x82000000 0 0xa0000000 0xa0000000 0 0x10000000 /* non-prefetchable memory */
191 0xc2000000 0 0xb0000000 0xb0000000 0 0x10000000>; /* prefetchable memory */
192
193 clocks = <&tegra_car 70>, <&tegra_car 72>, <&tegra_car 118>;
194 clock-names = "pex", "afi", "pll_e";
195 resets = <&tegra_car 70>, <&tegra_car 72>, <&tegra_car 74>;
196 reset-names = "pex", "afi", "pcie_x";
197 status = "disabled";
198
199 pci@1,0 {
200 device_type = "pci";
201 assigned-addresses = <0x82000800 0 0x80000000 0 0x1000>;
202 reg = <0x000800 0 0 0 0>;
203 status = "disabled";
204
205 #address-cells = <3>;
206 #size-cells = <2>;
207
208 ranges;
209
210 nvidia,num-lanes = <2>;
211 };
212
213 pci@2,0 {
214 device_type = "pci";
215 assigned-addresses = <0x82001000 0 0x80001000 0 0x1000>;
216 reg = <0x001000 0 0 0 0>;
217 status = "disabled";
218
219 #address-cells = <3>;
220 #size-cells = <2>;
221
222 ranges;
223
224 nvidia,num-lanes = <2>;
225 };
226 };
227
228Board DTS:
229
230 pcie-controller@80003000 {
231 status = "okay";
232
233 vdd-supply = <&pci_vdd_reg>;
234 pex-clk-supply = <&pci_clk_reg>;
235
236 /* root port 00:01.0 */
237 pci@1,0 {
238 status = "okay";
239
240 /* bridge 01:00.0 (optional) */
241 pci@0,0 {
242 reg = <0x010000 0 0 0 0>;
243
244 #address-cells = <3>;
245 #size-cells = <2>;
246
247 device_type = "pci";
248
249 /* endpoint 02:00.0 */
250 pci@0,0 {
251 reg = <0x020000 0 0 0 0>;
252 };
253 };
254 };
255 };
256
257Note that devices on the PCI bus are dynamically discovered using PCI's bus
258enumeration and therefore don't need corresponding device nodes in DT. However
259if a device on the PCI bus provides a non-probeable bus such as I2C or SPI,
260device nodes need to be added in order to allow the bus' children to be
261instantiated at the proper location in the operating system's device tree (as
262illustrated by the optional nodes in the example above).
263
264Tegra30:
265--------
266
267SoC DTSI:
268
269 pcie-controller@3000 {
270 compatible = "nvidia,tegra30-pcie";
271 device_type = "pci";
272 reg = <0x00003000 0x00000800 /* PADS registers */
273 0x00003800 0x00000200 /* AFI registers */
274 0x10000000 0x10000000>; /* configuration space */
275 reg-names = "pads", "afi", "cs";
276 interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH /* controller interrupt */
277 GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
278 interrupt-names = "intr", "msi";
279
280 #interrupt-cells = <1>;
281 interrupt-map-mask = <0 0 0 0>;
282 interrupt-map = <0 0 0 0 &intc GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
283
284 bus-range = <0x00 0xff>;
285 #address-cells = <3>;
286 #size-cells = <2>;
287
288 ranges = <0x82000000 0 0x00000000 0x00000000 0 0x00001000 /* port 0 configuration space */
289 0x82000000 0 0x00001000 0x00001000 0 0x00001000 /* port 1 configuration space */
290 0x82000000 0 0x00004000 0x00004000 0 0x00001000 /* port 2 configuration space */
291 0x81000000 0 0 0x02000000 0 0x00010000 /* downstream I/O */
292 0x82000000 0 0x20000000 0x20000000 0 0x08000000 /* non-prefetchable memory */
293 0xc2000000 0 0x28000000 0x28000000 0 0x18000000>; /* prefetchable memory */
294
295 clocks = <&tegra_car TEGRA30_CLK_PCIE>,
296 <&tegra_car TEGRA30_CLK_AFI>,
297 <&tegra_car TEGRA30_CLK_PLL_E>,
298 <&tegra_car TEGRA30_CLK_CML0>;
299 clock-names = "pex", "afi", "pll_e", "cml";
300 resets = <&tegra_car 70>,
301 <&tegra_car 72>,
302 <&tegra_car 74>;
303 reset-names = "pex", "afi", "pcie_x";
304 status = "disabled";
305
306 pci@1,0 {
307 device_type = "pci";
308 assigned-addresses = <0x82000800 0 0x00000000 0 0x1000>;
309 reg = <0x000800 0 0 0 0>;
310 status = "disabled";
311
312 #address-cells = <3>;
313 #size-cells = <2>;
314 ranges;
315
316 nvidia,num-lanes = <2>;
317 };
318
319 pci@2,0 {
320 device_type = "pci";
321 assigned-addresses = <0x82001000 0 0x00001000 0 0x1000>;
322 reg = <0x001000 0 0 0 0>;
323 status = "disabled";
324
325 #address-cells = <3>;
326 #size-cells = <2>;
327 ranges;
328
329 nvidia,num-lanes = <2>;
330 };
331
332 pci@3,0 {
333 device_type = "pci";
334 assigned-addresses = <0x82001800 0 0x00004000 0 0x1000>;
335 reg = <0x001800 0 0 0 0>;
336 status = "disabled";
337
338 #address-cells = <3>;
339 #size-cells = <2>;
340 ranges;
341
342 nvidia,num-lanes = <2>;
343 };
344 };
345
346Board DTS:
347
348 pcie-controller@3000 {
349 status = "okay";
350
351 avdd-pexa-supply = <&ldo1_reg>;
352 vdd-pexa-supply = <&ldo1_reg>;
353 avdd-pexb-supply = <&ldo1_reg>;
354 vdd-pexb-supply = <&ldo1_reg>;
355 avdd-pex-pll-supply = <&ldo1_reg>;
356 avdd-plle-supply = <&ldo1_reg>;
357 vddio-pex-ctl-supply = <&sys_3v3_reg>;
358 hvdd-pex-supply = <&sys_3v3_pexs_reg>;
359
360 pci@1,0 {
361 status = "okay";
362 };
363
364 pci@3,0 {
365 status = "okay";
366 };
367 };
368
369Tegra124:
370---------
371
372SoC DTSI:
373
374 pcie-controller@1003000 {
375 compatible = "nvidia,tegra124-pcie";
376 device_type = "pci";
377 reg = <0x0 0x01003000 0x0 0x00000800 /* PADS registers */
378 0x0 0x01003800 0x0 0x00000800 /* AFI registers */
379 0x0 0x02000000 0x0 0x10000000>; /* configuration space */
380 reg-names = "pads", "afi", "cs";
381 interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
382 <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
383 interrupt-names = "intr", "msi";
384
385 #interrupt-cells = <1>;
386 interrupt-map-mask = <0 0 0 0>;
387 interrupt-map = <0 0 0 0 &gic GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
388
389 bus-range = <0x00 0xff>;
390 #address-cells = <3>;
391 #size-cells = <2>;
392
393 ranges = <0x82000000 0 0x01000000 0x0 0x01000000 0 0x00001000 /* port 0 configuration space */
394 0x82000000 0 0x01001000 0x0 0x01001000 0 0x00001000 /* port 1 configuration space */
395 0x81000000 0 0x0 0x0 0x12000000 0 0x00010000 /* downstream I/O (64 KiB) */
396 0x82000000 0 0x13000000 0x0 0x13000000 0 0x0d000000 /* non-prefetchable memory (208 MiB) */
397 0xc2000000 0 0x20000000 0x0 0x20000000 0 0x20000000>; /* prefetchable memory (512 MiB) */
398
399 clocks = <&tegra_car TEGRA124_CLK_PCIE>,
400 <&tegra_car TEGRA124_CLK_AFI>,
401 <&tegra_car TEGRA124_CLK_PLL_E>,
402 <&tegra_car TEGRA124_CLK_CML0>;
403 clock-names = "pex", "afi", "pll_e", "cml";
404 resets = <&tegra_car 70>,
405 <&tegra_car 72>,
406 <&tegra_car 74>;
407 reset-names = "pex", "afi", "pcie_x";
408 status = "disabled";
409
410 pci@1,0 {
411 device_type = "pci";
412 assigned-addresses = <0x82000800 0 0x01000000 0 0x1000>;
413 reg = <0x000800 0 0 0 0>;
414 status = "disabled";
415
416 #address-cells = <3>;
417 #size-cells = <2>;
418 ranges;
419
420 nvidia,num-lanes = <2>;
421 };
422
423 pci@2,0 {
424 device_type = "pci";
425 assigned-addresses = <0x82001000 0 0x01001000 0 0x1000>;
426 reg = <0x001000 0 0 0 0>;
427 status = "disabled";
428
429 #address-cells = <3>;
430 #size-cells = <2>;
431 ranges;
432
433 nvidia,num-lanes = <1>;
434 };
435 };
436
437Board DTS:
438
439 pcie-controller@1003000 {
440 status = "okay";
441
442 avddio-pex-supply = <&vdd_1v05_run>;
443 dvddio-pex-supply = <&vdd_1v05_run>;
444 avdd-pex-pll-supply = <&vdd_1v05_run>;
445 hvdd-pex-supply = <&vdd_3v3_lp0>;
446 hvdd-pex-pll-e-supply = <&vdd_3v3_lp0>;
447 vddio-pex-ctl-supply = <&vdd_3v3_lp0>;
448 avdd-pll-erefe-supply = <&avdd_1v05_run>;
449
450 /* Mini PCIe */
451 pci@1,0 {
452 phys = <&{/padctl@7009f000/pads/pcie/lanes/pcie-4}>;
453 phy-names = "pcie-0";
454 status = "okay";
455 };
456
457 /* Gigabit Ethernet */
458 pci@2,0 {
459 phys = <&{/padctl@7009f000/pads/pcie/lanes/pcie-2}>;
460 phy-names = "pcie-0";
461 status = "okay";
462 };
463 };
464
465Tegra210:
466---------
467
468SoC DTSI:
469
470 pcie-controller@1003000 {
471 compatible = "nvidia,tegra210-pcie";
472 device_type = "pci";
473 reg = <0x0 0x01003000 0x0 0x00000800 /* PADS registers */
474 0x0 0x01003800 0x0 0x00000800 /* AFI registers */
475 0x0 0x02000000 0x0 0x10000000>; /* configuration space */
476 reg-names = "pads", "afi", "cs";
477 interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
478 <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
479 interrupt-names = "intr", "msi";
480
481 #interrupt-cells = <1>;
482 interrupt-map-mask = <0 0 0 0>;
483 interrupt-map = <0 0 0 0 &gic GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
484
485 bus-range = <0x00 0xff>;
486 #address-cells = <3>;
487 #size-cells = <2>;
488
489 ranges = <0x82000000 0 0x01000000 0x0 0x01000000 0 0x00001000 /* port 0 configuration space */
490 0x82000000 0 0x01001000 0x0 0x01001000 0 0x00001000 /* port 1 configuration space */
491 0x81000000 0 0x0 0x0 0x12000000 0 0x00010000 /* downstream I/O (64 KiB) */
492 0x82000000 0 0x13000000 0x0 0x13000000 0 0x0d000000 /* non-prefetchable memory (208 MiB) */
493 0xc2000000 0 0x20000000 0x0 0x20000000 0 0x20000000>; /* prefetchable memory (512 MiB) */
494
495 clocks = <&tegra_car TEGRA210_CLK_PCIE>,
496 <&tegra_car TEGRA210_CLK_AFI>,
497 <&tegra_car TEGRA210_CLK_PLL_E>,
498 <&tegra_car TEGRA210_CLK_CML0>;
499 clock-names = "pex", "afi", "pll_e", "cml";
500 resets = <&tegra_car 70>,
501 <&tegra_car 72>,
502 <&tegra_car 74>;
503 reset-names = "pex", "afi", "pcie_x";
504 status = "disabled";
505
506 pci@1,0 {
507 device_type = "pci";
508 assigned-addresses = <0x82000800 0 0x01000000 0 0x1000>;
509 reg = <0x000800 0 0 0 0>;
510 status = "disabled";
511
512 #address-cells = <3>;
513 #size-cells = <2>;
514 ranges;
515
516 nvidia,num-lanes = <4>;
517 };
518
519 pci@2,0 {
520 device_type = "pci";
521 assigned-addresses = <0x82001000 0 0x01001000 0 0x1000>;
522 reg = <0x001000 0 0 0 0>;
523 status = "disabled";
524
525 #address-cells = <3>;
526 #size-cells = <2>;
527 ranges;
528
529 nvidia,num-lanes = <1>;
530 };
531 };
532
533Board DTS:
534
535 pcie-controller@1003000 {
536 status = "okay";
537
538 avdd-pll-uerefe-supply = <&avdd_1v05_pll>;
539 hvddio-pex-supply = <&vdd_1v8>;
540 dvddio-pex-supply = <&vdd_pex_1v05>;
541 dvdd-pex-pll-supply = <&vdd_pex_1v05>;
542 hvdd-pex-pll-e-supply = <&vdd_1v8>;
543 vddio-pex-ctl-supply = <&vdd_1v8>;
544
545 pci@1,0 {
546 phys = <&{/padctl@7009f000/pads/pcie/lanes/pcie-0}>,
547 <&{/padctl@7009f000/pads/pcie/lanes/pcie-1}>,
548 <&{/padctl@7009f000/pads/pcie/lanes/pcie-2}>,
549 <&{/padctl@7009f000/pads/pcie/lanes/pcie-3}>;
550 phy-names = "pcie-0", "pcie-1", "pcie-2", "pcie-3";
551 status = "okay";
552 };
553
554 pci@2,0 {
555 phys = <&{/padctl@7009f000/pads/pcie/lanes/pcie-4}>;
556 phy-names = "pcie-0";
557 status = "okay";
558 };
559 };
560
561Tegra186:
562---------
563
564SoC DTSI:
565
566 pcie@10003000 {
567 compatible = "nvidia,tegra186-pcie";
568 power-domains = <&bpmp TEGRA186_POWER_DOMAIN_PCX>;
569 device_type = "pci";
570 reg = <0x0 0x10003000 0x0 0x00000800 /* PADS registers */
571 0x0 0x10003800 0x0 0x00000800 /* AFI registers */
572 0x0 0x40000000 0x0 0x10000000>; /* configuration space */
573 reg-names = "pads", "afi", "cs";
574
575 interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
576 <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
577 interrupt-names = "intr", "msi";
578
579 #interrupt-cells = <1>;
580 interrupt-map-mask = <0 0 0 0>;
581 interrupt-map = <0 0 0 0 &gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
582
583 bus-range = <0x00 0xff>;
584 #address-cells = <3>;
585 #size-cells = <2>;
586
587 ranges = <0x82000000 0 0x10000000 0x0 0x10000000 0 0x00001000 /* port 0 configuration space */
588 0x82000000 0 0x10001000 0x0 0x10001000 0 0x00001000 /* port 1 configuration space */
589 0x82000000 0 0x10004000 0x0 0x10004000 0 0x00001000 /* port 2 configuration space */
590 0x81000000 0 0x0 0x0 0x50000000 0 0x00010000 /* downstream I/O (64 KiB) */
591 0x82000000 0 0x50100000 0x0 0x50100000 0 0x07F00000 /* non-prefetchable memory (127 MiB) */
592 0xc2000000 0 0x58000000 0x0 0x58000000 0 0x28000000>; /* prefetchable memory (640 MiB) */
593
594 clocks = <&bpmp TEGRA186_CLK_AFI>,
595 <&bpmp TEGRA186_CLK_PCIE>,
596 <&bpmp TEGRA186_CLK_PLLE>;
597 clock-names = "afi", "pex", "pll_e";
598
599 resets = <&bpmp TEGRA186_RESET_AFI>,
600 <&bpmp TEGRA186_RESET_PCIE>,
601 <&bpmp TEGRA186_RESET_PCIEXCLK>;
602 reset-names = "afi", "pex", "pcie_x";
603
604 status = "disabled";
605
606 pci@1,0 {
607 device_type = "pci";
608 assigned-addresses = <0x82000800 0 0x10000000 0 0x1000>;
609 reg = <0x000800 0 0 0 0>;
610 status = "disabled";
611
612 #address-cells = <3>;
613 #size-cells = <2>;
614 ranges;
615
616 nvidia,num-lanes = <2>;
617 };
618
619 pci@2,0 {
620 device_type = "pci";
621 assigned-addresses = <0x82001000 0 0x10001000 0 0x1000>;
622 reg = <0x001000 0 0 0 0>;
623 status = "disabled";
624
625 #address-cells = <3>;
626 #size-cells = <2>;
627 ranges;
628
629 nvidia,num-lanes = <1>;
630 };
631
632 pci@3,0 {
633 device_type = "pci";
634 assigned-addresses = <0x82001800 0 0x10004000 0 0x1000>;
635 reg = <0x001800 0 0 0 0>;
636 status = "disabled";
637
638 #address-cells = <3>;
639 #size-cells = <2>;
640 ranges;
641
642 nvidia,num-lanes = <1>;
643 };
644 };
645
646Board DTS:
647
648 pcie@10003000 {
649 status = "okay";
650
651 dvdd-pex-supply = <&vdd_pex>;
652 hvdd-pex-pll-supply = <&vdd_1v8>;
653 hvdd-pex-supply = <&vdd_1v8>;
654 vddio-pexctl-aud-supply = <&vdd_1v8>;
655
656 pci@1,0 {
657 nvidia,num-lanes = <4>;
658 status = "okay";
659 };
660
661 pci@2,0 {
662 nvidia,num-lanes = <0>;
663 status = "disabled";
664 };
665
666 pci@3,0 {
667 nvidia,num-lanes = <1>;
668 status = "disabled";
669 };
670 };