1 NVIDIA Tegra PCIe controller
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
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
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:
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
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
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
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
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:
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:
68 Required properties on Tegra124 and later (deprecated):
69 - phys: Must contain an entry for each entry in phy-names.
70 - phy-names: Must include the following entries:
73 These properties are deprecated in favour of per-lane PHYs define in each of
74 the root ports (see below).
76 Power supplies for Tegra20:
77 - avdd-pex-supply: Power supply for analog PCIe logic. Must supply 1.05 V.
78 - vdd-pex-supply: Power supply for digital PCIe I/O. Must supply 1.05 V.
79 - avdd-pex-pll-supply: Power supply for dedicated (internal) PCIe PLL. Must
81 - avdd-plle-supply: Power supply for PLLE, which is shared with SATA. Must
83 - vddio-pex-clk-supply: Power supply for PCIe clock. Must supply 3.3 V.
85 Power supplies for Tegra30:
87 - avdd-pex-pll-supply: Power supply for dedicated (internal) PCIe PLL. Must
89 - avdd-plle-supply: Power supply for PLLE, which is shared with SATA. Must
91 - vddio-pex-ctl-supply: Power supply for PCIe control I/O partition. Must
93 - hvdd-pex-supply: High-voltage supply for PCIe I/O and PCIe output clocks.
96 - If lanes 0 to 3 are used:
97 - avdd-pexa-supply: Power supply for analog PCIe logic. Must supply 1.05 V.
98 - vdd-pexa-supply: Power supply for digital PCIe I/O. Must supply 1.05 V.
99 - If lanes 4 or 5 are used:
100 - avdd-pexb-supply: Power supply for analog PCIe logic. Must supply 1.05 V.
101 - vdd-pexb-supply: Power supply for digital PCIe I/O. Must supply 1.05 V.
103 Power supplies for Tegra124:
105 - avddio-pex-supply: Power supply for analog PCIe logic. Must supply 1.05 V.
106 - dvddio-pex-supply: Power supply for digital PCIe I/O. Must supply 1.05 V.
107 - avdd-pex-pll-supply: Power supply for dedicated (internal) PCIe PLL. Must
109 - hvdd-pex-supply: High-voltage supply for PCIe I/O and PCIe output clocks.
111 - hvdd-pex-pll-e-supply: High-voltage supply for PLLE (shared with USB3).
113 - vddio-pex-ctl-supply: Power supply for PCIe control I/O partition. Must
115 - avdd-pll-erefe-supply: Power supply for PLLE (shared with USB3). Must
118 Power supplies for Tegra210:
120 - avdd-pll-uerefe-supply: Power supply for PLLE (shared with USB3). Must
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 - dvdd-pex-pll-supply: Power supply for dedicated (internal) PCIe PLL. Must
127 - hvdd-pex-pll-e-supply: High-voltage supply for PLLE (shared with USB3).
129 - vddio-pex-ctl-supply: Power supply for PCIe control I/O partition. Must
132 Power supplies for Tegra186:
134 - dvdd-pex-supply: Power supply for digital PCIe I/O. Must supply 1.05 V.
135 - hvdd-pex-pll-supply: High-voltage supply for PLLE (shared with USB3). Must
137 - hvdd-pex-supply: High-voltage supply for PCIe I/O and PCIe output clocks.
139 - vddio-pexctl-aud-supply: Power supply for PCIe side band signals. Must
142 Root ports are defined as subnodes of the PCIe controller node.
145 - device_type: Must be "pci"
146 - assigned-addresses: Address and size of the port configuration registers
147 - reg: PCI bus address of the root port
148 - #address-cells: Must be 3
149 - #size-cells: Must be 2
150 - ranges: Sub-ranges distributed from the PCIe controller node. An empty
151 property is sufficient.
152 - nvidia,num-lanes: Number of lanes to use for this port. Valid combinations
154 - Root port 0 uses 4 lanes, root port 1 is unused.
155 - Both root ports use 2 lanes.
157 Required properties for Tegra124 and later:
158 - phys: Must contain an phandle to a PHY for each entry in phy-names.
159 - phy-names: Must include an entry for each active lane. Note that the number
160 of entries does not have to (though usually will) be equal to the specified
161 number of lanes in the nvidia,num-lanes property. Entries are of the form
162 "pcie-N": where N ranges from 0 to the value specified in nvidia,num-lanes.
172 pcie-controller@80003000 {
173 compatible = "nvidia,tegra20-pcie";
175 reg = <0x80003000 0x00000800 /* PADS registers */
176 0x80003800 0x00000200 /* AFI registers */
177 0x90000000 0x10000000>; /* configuration space */
178 reg-names = "pads", "afi", "cs";
179 interrupts = <0 98 0x04 /* controller interrupt */
180 0 99 0x04>; /* MSI interrupt */
181 interrupt-names = "intr", "msi";
183 #interrupt-cells = <1>;
184 interrupt-map-mask = <0 0 0 0>;
185 interrupt-map = <0 0 0 0 &intc GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
187 bus-range = <0x00 0xff>;
188 #address-cells = <3>;
191 ranges = <0x82000000 0 0x80000000 0x80000000 0 0x00001000 /* port 0 registers */
192 0x82000000 0 0x80001000 0x80001000 0 0x00001000 /* port 1 registers */
193 0x81000000 0 0 0x82000000 0 0x00010000 /* downstream I/O */
194 0x82000000 0 0xa0000000 0xa0000000 0 0x10000000 /* non-prefetchable memory */
195 0xc2000000 0 0xb0000000 0xb0000000 0 0x10000000>; /* prefetchable memory */
197 clocks = <&tegra_car 70>, <&tegra_car 72>, <&tegra_car 118>;
198 clock-names = "pex", "afi", "pll_e";
199 resets = <&tegra_car 70>, <&tegra_car 72>, <&tegra_car 74>;
200 reset-names = "pex", "afi", "pcie_x";
205 assigned-addresses = <0x82000800 0 0x80000000 0 0x1000>;
206 reg = <0x000800 0 0 0 0>;
209 #address-cells = <3>;
214 nvidia,num-lanes = <2>;
219 assigned-addresses = <0x82001000 0 0x80001000 0 0x1000>;
220 reg = <0x001000 0 0 0 0>;
223 #address-cells = <3>;
228 nvidia,num-lanes = <2>;
234 pcie-controller@80003000 {
237 vdd-supply = <&pci_vdd_reg>;
238 pex-clk-supply = <&pci_clk_reg>;
240 /* root port 00:01.0 */
244 /* bridge 01:00.0 (optional) */
246 reg = <0x010000 0 0 0 0>;
248 #address-cells = <3>;
253 /* endpoint 02:00.0 */
255 reg = <0x020000 0 0 0 0>;
261 Note that devices on the PCI bus are dynamically discovered using PCI's bus
262 enumeration and therefore don't need corresponding device nodes in DT. However
263 if a device on the PCI bus provides a non-probeable bus such as I2C or SPI,
264 device nodes need to be added in order to allow the bus' children to be
265 instantiated at the proper location in the operating system's device tree (as
266 illustrated by the optional nodes in the example above).
273 pcie-controller@3000 {
274 compatible = "nvidia,tegra30-pcie";
276 reg = <0x00003000 0x00000800 /* PADS registers */
277 0x00003800 0x00000200 /* AFI registers */
278 0x10000000 0x10000000>; /* configuration space */
279 reg-names = "pads", "afi", "cs";
280 interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH /* controller interrupt */
281 GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
282 interrupt-names = "intr", "msi";
284 #interrupt-cells = <1>;
285 interrupt-map-mask = <0 0 0 0>;
286 interrupt-map = <0 0 0 0 &intc GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
288 bus-range = <0x00 0xff>;
289 #address-cells = <3>;
292 ranges = <0x82000000 0 0x00000000 0x00000000 0 0x00001000 /* port 0 configuration space */
293 0x82000000 0 0x00001000 0x00001000 0 0x00001000 /* port 1 configuration space */
294 0x82000000 0 0x00004000 0x00004000 0 0x00001000 /* port 2 configuration space */
295 0x81000000 0 0 0x02000000 0 0x00010000 /* downstream I/O */
296 0x82000000 0 0x20000000 0x20000000 0 0x08000000 /* non-prefetchable memory */
297 0xc2000000 0 0x28000000 0x28000000 0 0x18000000>; /* prefetchable memory */
299 clocks = <&tegra_car TEGRA30_CLK_PCIE>,
300 <&tegra_car TEGRA30_CLK_AFI>,
301 <&tegra_car TEGRA30_CLK_PLL_E>,
302 <&tegra_car TEGRA30_CLK_CML0>;
303 clock-names = "pex", "afi", "pll_e", "cml";
304 resets = <&tegra_car 70>,
307 reset-names = "pex", "afi", "pcie_x";
312 assigned-addresses = <0x82000800 0 0x00000000 0 0x1000>;
313 reg = <0x000800 0 0 0 0>;
316 #address-cells = <3>;
320 nvidia,num-lanes = <2>;
325 assigned-addresses = <0x82001000 0 0x00001000 0 0x1000>;
326 reg = <0x001000 0 0 0 0>;
329 #address-cells = <3>;
333 nvidia,num-lanes = <2>;
338 assigned-addresses = <0x82001800 0 0x00004000 0 0x1000>;
339 reg = <0x001800 0 0 0 0>;
342 #address-cells = <3>;
346 nvidia,num-lanes = <2>;
352 pcie-controller@3000 {
355 avdd-pexa-supply = <&ldo1_reg>;
356 vdd-pexa-supply = <&ldo1_reg>;
357 avdd-pexb-supply = <&ldo1_reg>;
358 vdd-pexb-supply = <&ldo1_reg>;
359 avdd-pex-pll-supply = <&ldo1_reg>;
360 avdd-plle-supply = <&ldo1_reg>;
361 vddio-pex-ctl-supply = <&sys_3v3_reg>;
362 hvdd-pex-supply = <&sys_3v3_pexs_reg>;
378 pcie-controller@1003000 {
379 compatible = "nvidia,tegra124-pcie";
381 reg = <0x0 0x01003000 0x0 0x00000800 /* PADS registers */
382 0x0 0x01003800 0x0 0x00000800 /* AFI registers */
383 0x0 0x02000000 0x0 0x10000000>; /* configuration space */
384 reg-names = "pads", "afi", "cs";
385 interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
386 <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
387 interrupt-names = "intr", "msi";
389 #interrupt-cells = <1>;
390 interrupt-map-mask = <0 0 0 0>;
391 interrupt-map = <0 0 0 0 &gic GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
393 bus-range = <0x00 0xff>;
394 #address-cells = <3>;
397 ranges = <0x82000000 0 0x01000000 0x0 0x01000000 0 0x00001000 /* port 0 configuration space */
398 0x82000000 0 0x01001000 0x0 0x01001000 0 0x00001000 /* port 1 configuration space */
399 0x81000000 0 0x0 0x0 0x12000000 0 0x00010000 /* downstream I/O (64 KiB) */
400 0x82000000 0 0x13000000 0x0 0x13000000 0 0x0d000000 /* non-prefetchable memory (208 MiB) */
401 0xc2000000 0 0x20000000 0x0 0x20000000 0 0x20000000>; /* prefetchable memory (512 MiB) */
403 clocks = <&tegra_car TEGRA124_CLK_PCIE>,
404 <&tegra_car TEGRA124_CLK_AFI>,
405 <&tegra_car TEGRA124_CLK_PLL_E>,
406 <&tegra_car TEGRA124_CLK_CML0>;
407 clock-names = "pex", "afi", "pll_e", "cml";
408 resets = <&tegra_car 70>,
411 reset-names = "pex", "afi", "pcie_x";
416 assigned-addresses = <0x82000800 0 0x01000000 0 0x1000>;
417 reg = <0x000800 0 0 0 0>;
420 #address-cells = <3>;
424 nvidia,num-lanes = <2>;
429 assigned-addresses = <0x82001000 0 0x01001000 0 0x1000>;
430 reg = <0x001000 0 0 0 0>;
433 #address-cells = <3>;
437 nvidia,num-lanes = <1>;
443 pcie-controller@1003000 {
446 avddio-pex-supply = <&vdd_1v05_run>;
447 dvddio-pex-supply = <&vdd_1v05_run>;
448 avdd-pex-pll-supply = <&vdd_1v05_run>;
449 hvdd-pex-supply = <&vdd_3v3_lp0>;
450 hvdd-pex-pll-e-supply = <&vdd_3v3_lp0>;
451 vddio-pex-ctl-supply = <&vdd_3v3_lp0>;
452 avdd-pll-erefe-supply = <&avdd_1v05_run>;
456 phys = <&{/padctl@7009f000/pads/pcie/lanes/pcie-4}>;
457 phy-names = "pcie-0";
461 /* Gigabit Ethernet */
463 phys = <&{/padctl@7009f000/pads/pcie/lanes/pcie-2}>;
464 phy-names = "pcie-0";
474 pcie-controller@1003000 {
475 compatible = "nvidia,tegra210-pcie";
477 reg = <0x0 0x01003000 0x0 0x00000800 /* PADS registers */
478 0x0 0x01003800 0x0 0x00000800 /* AFI registers */
479 0x0 0x02000000 0x0 0x10000000>; /* configuration space */
480 reg-names = "pads", "afi", "cs";
481 interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
482 <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
483 interrupt-names = "intr", "msi";
485 #interrupt-cells = <1>;
486 interrupt-map-mask = <0 0 0 0>;
487 interrupt-map = <0 0 0 0 &gic GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
489 bus-range = <0x00 0xff>;
490 #address-cells = <3>;
493 ranges = <0x82000000 0 0x01000000 0x0 0x01000000 0 0x00001000 /* port 0 configuration space */
494 0x82000000 0 0x01001000 0x0 0x01001000 0 0x00001000 /* port 1 configuration space */
495 0x81000000 0 0x0 0x0 0x12000000 0 0x00010000 /* downstream I/O (64 KiB) */
496 0x82000000 0 0x13000000 0x0 0x13000000 0 0x0d000000 /* non-prefetchable memory (208 MiB) */
497 0xc2000000 0 0x20000000 0x0 0x20000000 0 0x20000000>; /* prefetchable memory (512 MiB) */
499 clocks = <&tegra_car TEGRA210_CLK_PCIE>,
500 <&tegra_car TEGRA210_CLK_AFI>,
501 <&tegra_car TEGRA210_CLK_PLL_E>,
502 <&tegra_car TEGRA210_CLK_CML0>;
503 clock-names = "pex", "afi", "pll_e", "cml";
504 resets = <&tegra_car 70>,
507 reset-names = "pex", "afi", "pcie_x";
512 assigned-addresses = <0x82000800 0 0x01000000 0 0x1000>;
513 reg = <0x000800 0 0 0 0>;
516 #address-cells = <3>;
520 nvidia,num-lanes = <4>;
525 assigned-addresses = <0x82001000 0 0x01001000 0 0x1000>;
526 reg = <0x001000 0 0 0 0>;
529 #address-cells = <3>;
533 nvidia,num-lanes = <1>;
539 pcie-controller@1003000 {
542 avdd-pll-uerefe-supply = <&avdd_1v05_pll>;
543 hvddio-pex-supply = <&vdd_1v8>;
544 dvddio-pex-supply = <&vdd_pex_1v05>;
545 dvdd-pex-pll-supply = <&vdd_pex_1v05>;
546 hvdd-pex-pll-e-supply = <&vdd_1v8>;
547 vddio-pex-ctl-supply = <&vdd_1v8>;
550 phys = <&{/padctl@7009f000/pads/pcie/lanes/pcie-0}>,
551 <&{/padctl@7009f000/pads/pcie/lanes/pcie-1}>,
552 <&{/padctl@7009f000/pads/pcie/lanes/pcie-2}>,
553 <&{/padctl@7009f000/pads/pcie/lanes/pcie-3}>;
554 phy-names = "pcie-0", "pcie-1", "pcie-2", "pcie-3";
559 phys = <&{/padctl@7009f000/pads/pcie/lanes/pcie-4}>;
560 phy-names = "pcie-0";
571 compatible = "nvidia,tegra186-pcie";
572 power-domains = <&bpmp TEGRA186_POWER_DOMAIN_PCX>;
574 reg = <0x0 0x10003000 0x0 0x00000800 /* PADS registers */
575 0x0 0x10003800 0x0 0x00000800 /* AFI registers */
576 0x0 0x40000000 0x0 0x10000000>; /* configuration space */
577 reg-names = "pads", "afi", "cs";
579 interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
580 <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
581 interrupt-names = "intr", "msi";
583 #interrupt-cells = <1>;
584 interrupt-map-mask = <0 0 0 0>;
585 interrupt-map = <0 0 0 0 &gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
587 bus-range = <0x00 0xff>;
588 #address-cells = <3>;
591 ranges = <0x82000000 0 0x10000000 0x0 0x10000000 0 0x00001000 /* port 0 configuration space */
592 0x82000000 0 0x10001000 0x0 0x10001000 0 0x00001000 /* port 1 configuration space */
593 0x82000000 0 0x10004000 0x0 0x10004000 0 0x00001000 /* port 2 configuration space */
594 0x81000000 0 0x0 0x0 0x50000000 0 0x00010000 /* downstream I/O (64 KiB) */
595 0x82000000 0 0x50100000 0x0 0x50100000 0 0x07F00000 /* non-prefetchable memory (127 MiB) */
596 0xc2000000 0 0x58000000 0x0 0x58000000 0 0x28000000>; /* prefetchable memory (640 MiB) */
598 clocks = <&bpmp TEGRA186_CLK_AFI>,
599 <&bpmp TEGRA186_CLK_PCIE>,
600 <&bpmp TEGRA186_CLK_PLLE>;
601 clock-names = "afi", "pex", "pll_e";
603 resets = <&bpmp TEGRA186_RESET_AFI>,
604 <&bpmp TEGRA186_RESET_PCIE>,
605 <&bpmp TEGRA186_RESET_PCIEXCLK>;
606 reset-names = "afi", "pex", "pcie_x";
612 assigned-addresses = <0x82000800 0 0x10000000 0 0x1000>;
613 reg = <0x000800 0 0 0 0>;
616 #address-cells = <3>;
620 nvidia,num-lanes = <2>;
625 assigned-addresses = <0x82001000 0 0x10001000 0 0x1000>;
626 reg = <0x001000 0 0 0 0>;
629 #address-cells = <3>;
633 nvidia,num-lanes = <1>;
638 assigned-addresses = <0x82001800 0 0x10004000 0 0x1000>;
639 reg = <0x001800 0 0 0 0>;
642 #address-cells = <3>;
646 nvidia,num-lanes = <1>;
655 dvdd-pex-supply = <&vdd_pex>;
656 hvdd-pex-pll-supply = <&vdd_1v8>;
657 hvdd-pex-supply = <&vdd_1v8>;
658 vddio-pexctl-aud-supply = <&vdd_1v8>;
661 nvidia,num-lanes = <4>;
666 nvidia,num-lanes = <0>;
671 nvidia,num-lanes = <1>;