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