Skip to content

Commit 13541cc

Browse files
committed
dt-bindings: pci: tegra: Update for per-lane PHYs
The XUSB pad controller allows PCIe lanes to be controlled individually, providing fine-grained control over their power state. Previous attempts at describing the XUSB pad controller in DT had erroneously assumed that all PCIe lanes were driven by the same PHY, and hence the PCI host controller would reference only a single PHY. Moving to a representation of per-lane PHYs requires that the operating system driver for the PCI host controller have access to the set of PHY devices that make up the connection of each root port in order to power up and down all of the lanes as necessary. Acked-by: Rob Herring <[email protected]> Acked-by: Stephen Warren <[email protected]> Signed-off-by: Thierry Reding <[email protected]>
1 parent 4000b00 commit 13541cc

File tree

1 file changed

+219
-5
lines changed

1 file changed

+219
-5
lines changed

Documentation/devicetree/bindings/pci/nvidia,tegra20-pcie.txt

Lines changed: 219 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,14 @@ Required properties:
6060
- afi
6161
- pcie_x
6262

63-
Required properties on Tegra124 and later:
63+
Required properties on Tegra124 and later (deprecated):
6464
- phys: Must contain an entry for each entry in phy-names.
6565
- phy-names: Must include the following entries:
6666
- pcie
6767

68+
These properties are deprecated in favour of per-lane PHYs define in each of
69+
the root ports (see below).
70+
6871
Power supplies for Tegra20:
6972
- avdd-pex-supply: Power supply for analog PCIe logic. Must supply 1.05 V.
7073
- vdd-pex-supply: Power supply for digital PCIe I/O. Must supply 1.05 V.
@@ -122,11 +125,22 @@ Required properties:
122125
- Root port 0 uses 4 lanes, root port 1 is unused.
123126
- Both root ports use 2 lanes.
124127

125-
Example:
128+
Required properties for Tegra124 and later:
129+
- phys: Must contain an phandle to a PHY for each entry in phy-names.
130+
- phy-names: Must include an entry for each active lane. Note that the number
131+
of entries does not have to (though usually will) be equal to the specified
132+
number of lanes in the nvidia,num-lanes property. Entries are of the form
133+
"pcie-N": where N ranges from 0 to the value specified in nvidia,num-lanes.
134+
135+
Examples:
136+
=========
137+
138+
Tegra20:
139+
--------
126140

127141
SoC DTSI:
128142

129-
pcie-controller {
143+
pcie-controller@80003000 {
130144
compatible = "nvidia,tegra20-pcie";
131145
device_type = "pci";
132146
reg = <0x80003000 0x00000800 /* PADS registers */
@@ -186,10 +200,9 @@ SoC DTSI:
186200
};
187201
};
188202

189-
190203
Board DTS:
191204

192-
pcie-controller {
205+
pcie-controller@80003000 {
193206
status = "okay";
194207

195208
vdd-supply = <&pci_vdd_reg>;
@@ -222,3 +235,204 @@ if a device on the PCI bus provides a non-probeable bus such as I2C or SPI,
222235
device nodes need to be added in order to allow the bus' children to be
223236
instantiated at the proper location in the operating system's device tree (as
224237
illustrated by the optional nodes in the example above).
238+
239+
Tegra30:
240+
--------
241+
242+
SoC DTSI:
243+
244+
pcie-controller@00003000 {
245+
compatible = "nvidia,tegra30-pcie";
246+
device_type = "pci";
247+
reg = <0x00003000 0x00000800 /* PADS registers */
248+
0x00003800 0x00000200 /* AFI registers */
249+
0x10000000 0x10000000>; /* configuration space */
250+
reg-names = "pads", "afi", "cs";
251+
interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH /* controller interrupt */
252+
GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
253+
interrupt-names = "intr", "msi";
254+
255+
#interrupt-cells = <1>;
256+
interrupt-map-mask = <0 0 0 0>;
257+
interrupt-map = <0 0 0 0 &intc GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
258+
259+
bus-range = <0x00 0xff>;
260+
#address-cells = <3>;
261+
#size-cells = <2>;
262+
263+
ranges = <0x82000000 0 0x00000000 0x00000000 0 0x00001000 /* port 0 configuration space */
264+
0x82000000 0 0x00001000 0x00001000 0 0x00001000 /* port 1 configuration space */
265+
0x82000000 0 0x00004000 0x00004000 0 0x00001000 /* port 2 configuration space */
266+
0x81000000 0 0 0x02000000 0 0x00010000 /* downstream I/O */
267+
0x82000000 0 0x20000000 0x20000000 0 0x08000000 /* non-prefetchable memory */
268+
0xc2000000 0 0x28000000 0x28000000 0 0x18000000>; /* prefetchable memory */
269+
270+
clocks = <&tegra_car TEGRA30_CLK_PCIE>,
271+
<&tegra_car TEGRA30_CLK_AFI>,
272+
<&tegra_car TEGRA30_CLK_PLL_E>,
273+
<&tegra_car TEGRA30_CLK_CML0>;
274+
clock-names = "pex", "afi", "pll_e", "cml";
275+
resets = <&tegra_car 70>,
276+
<&tegra_car 72>,
277+
<&tegra_car 74>;
278+
reset-names = "pex", "afi", "pcie_x";
279+
status = "disabled";
280+
281+
pci@1,0 {
282+
device_type = "pci";
283+
assigned-addresses = <0x82000800 0 0x00000000 0 0x1000>;
284+
reg = <0x000800 0 0 0 0>;
285+
status = "disabled";
286+
287+
#address-cells = <3>;
288+
#size-cells = <2>;
289+
ranges;
290+
291+
nvidia,num-lanes = <2>;
292+
};
293+
294+
pci@2,0 {
295+
device_type = "pci";
296+
assigned-addresses = <0x82001000 0 0x00001000 0 0x1000>;
297+
reg = <0x001000 0 0 0 0>;
298+
status = "disabled";
299+
300+
#address-cells = <3>;
301+
#size-cells = <2>;
302+
ranges;
303+
304+
nvidia,num-lanes = <2>;
305+
};
306+
307+
pci@3,0 {
308+
device_type = "pci";
309+
assigned-addresses = <0x82001800 0 0x00004000 0 0x1000>;
310+
reg = <0x001800 0 0 0 0>;
311+
status = "disabled";
312+
313+
#address-cells = <3>;
314+
#size-cells = <2>;
315+
ranges;
316+
317+
nvidia,num-lanes = <2>;
318+
};
319+
};
320+
321+
Board DTS:
322+
323+
pcie-controller@00003000 {
324+
status = "okay";
325+
326+
avdd-pexa-supply = <&ldo1_reg>;
327+
vdd-pexa-supply = <&ldo1_reg>;
328+
avdd-pexb-supply = <&ldo1_reg>;
329+
vdd-pexb-supply = <&ldo1_reg>;
330+
avdd-pex-pll-supply = <&ldo1_reg>;
331+
avdd-plle-supply = <&ldo1_reg>;
332+
vddio-pex-ctl-supply = <&sys_3v3_reg>;
333+
hvdd-pex-supply = <&sys_3v3_pexs_reg>;
334+
335+
pci@1,0 {
336+
status = "okay";
337+
};
338+
339+
pci@3,0 {
340+
status = "okay";
341+
};
342+
};
343+
344+
Tegra124:
345+
---------
346+
347+
SoC DTSI:
348+
349+
pcie-controller@01003000 {
350+
compatible = "nvidia,tegra124-pcie";
351+
device_type = "pci";
352+
reg = <0x0 0x01003000 0x0 0x00000800 /* PADS registers */
353+
0x0 0x01003800 0x0 0x00000800 /* AFI registers */
354+
0x0 0x02000000 0x0 0x10000000>; /* configuration space */
355+
reg-names = "pads", "afi", "cs";
356+
interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */
357+
<GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */
358+
interrupt-names = "intr", "msi";
359+
360+
#interrupt-cells = <1>;
361+
interrupt-map-mask = <0 0 0 0>;
362+
interrupt-map = <0 0 0 0 &gic GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
363+
364+
bus-range = <0x00 0xff>;
365+
#address-cells = <3>;
366+
#size-cells = <2>;
367+
368+
ranges = <0x82000000 0 0x01000000 0x0 0x01000000 0 0x00001000 /* port 0 configuration space */
369+
0x82000000 0 0x01001000 0x0 0x01001000 0 0x00001000 /* port 1 configuration space */
370+
0x81000000 0 0x0 0x0 0x12000000 0 0x00010000 /* downstream I/O (64 KiB) */
371+
0x82000000 0 0x13000000 0x0 0x13000000 0 0x0d000000 /* non-prefetchable memory (208 MiB) */
372+
0xc2000000 0 0x20000000 0x0 0x20000000 0 0x20000000>; /* prefetchable memory (512 MiB) */
373+
374+
clocks = <&tegra_car TEGRA124_CLK_PCIE>,
375+
<&tegra_car TEGRA124_CLK_AFI>,
376+
<&tegra_car TEGRA124_CLK_PLL_E>,
377+
<&tegra_car TEGRA124_CLK_CML0>;
378+
clock-names = "pex", "afi", "pll_e", "cml";
379+
resets = <&tegra_car 70>,
380+
<&tegra_car 72>,
381+
<&tegra_car 74>;
382+
reset-names = "pex", "afi", "pcie_x";
383+
status = "disabled";
384+
385+
pci@1,0 {
386+
device_type = "pci";
387+
assigned-addresses = <0x82000800 0 0x01000000 0 0x1000>;
388+
reg = <0x000800 0 0 0 0>;
389+
status = "disabled";
390+
391+
#address-cells = <3>;
392+
#size-cells = <2>;
393+
ranges;
394+
395+
nvidia,num-lanes = <2>;
396+
};
397+
398+
pci@2,0 {
399+
device_type = "pci";
400+
assigned-addresses = <0x82001000 0 0x01001000 0 0x1000>;
401+
reg = <0x001000 0 0 0 0>;
402+
status = "disabled";
403+
404+
#address-cells = <3>;
405+
#size-cells = <2>;
406+
ranges;
407+
408+
nvidia,num-lanes = <1>;
409+
};
410+
};
411+
412+
Board DTS:
413+
414+
pcie-controller@01003000 {
415+
status = "okay";
416+
417+
avddio-pex-supply = <&vdd_1v05_run>;
418+
dvddio-pex-supply = <&vdd_1v05_run>;
419+
avdd-pex-pll-supply = <&vdd_1v05_run>;
420+
hvdd-pex-supply = <&vdd_3v3_lp0>;
421+
hvdd-pex-pll-e-supply = <&vdd_3v3_lp0>;
422+
vddio-pex-ctl-supply = <&vdd_3v3_lp0>;
423+
avdd-pll-erefe-supply = <&avdd_1v05_run>;
424+
425+
/* Mini PCIe */
426+
pci@1,0 {
427+
phys = <&{/padctl@7009f000/pads/pcie/lanes/pcie-4}>;
428+
phy-names = "pcie-0";
429+
status = "okay";
430+
};
431+
432+
/* Gigabit Ethernet */
433+
pci@2,0 {
434+
phys = <&{/padctl@7009f000/pads/pcie/lanes/pcie-2}>;
435+
phy-names = "pcie-0";
436+
status = "okay";
437+
};
438+
};

0 commit comments

Comments
 (0)