Skip to content

Commit 64451ac

Browse files
committed
Merge branch 'pci/ctrl/tegra194'
- Fix tegra_pcie_config_ep() power management in error path (Miaoqian Lin) - Convert DT binding to json-schema (Vidya Sagar) - Add DT bindings and driver support for Tegra234 Root Port and Endpoint mode (Vidya Sagar) - Disable MSI for Tegra234 Root Ports so they use INTx for all events (PCIe doesn't allow mixing INTx and MSI/MSI-X) (Vidya Sagar) - Search for Vendor-Specific RAS-DEC capability instead of hard-coding offset (Vidya Sagar) - Fix unintentional APPL_INTR_STATUS_L0 value overwrite in Root Port interrupt handling (Vidya Sagar) - Clear Bandwidth Management interrupt status bit to avoid interrupt storm (Vidya Sagar) - Set default Max Payload Size to 256 bytes (Vidya Sagar) - Fix offset when clearing bit in Data Link Feature capability (Vidya Sagar) - Extend Endpoint mode support to devices beyond Controller-5 (Vidya Sagar) * pci/ctrl/tegra194: PCI: tegra194: Add Tegra234 PCIe support PCI: tegra194: Extend Endpoint mode support PCI: tegra194: Fix link up retry sequence PCI: tegra194: Clean up the exit path for Endpoint mode PCI: tegra194: Enable support for 256 Byte payload PCI: tegra194: Clear bandwidth management status PCI: tegra194: Fix Root Port interrupt handling PCI: tegra194: Find RAS DES PCIe capability offset Revert "PCI: tegra194: Rename tegra_pcie_dw to tegra194_pcie" PCI: Disable MSI for Tegra234 Root Ports dt-bindings: PCI: tegra234: Add schema for tegra234 Endpoint mode dt-bindings: PCI: tegra234: Add schema for tegra234 Root Port mode dt-bindings: PCI: tegra194: Convert to json-schema PCI: tegra194: Fix PM error handling in tegra_pcie_config_ep() # Conflicts: # drivers/pci/controller/dwc/pcie-designware.h # drivers/pci/controller/dwc/pcie-tegra194.c
2 parents 085c2d6 + a54e190 commit 64451ac

File tree

7 files changed

+1139
-485
lines changed

7 files changed

+1139
-485
lines changed
Lines changed: 319 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,319 @@
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+
7+
title: NVIDIA Tegra194 (and later) PCIe Endpoint controller (Synopsys DesignWare Core based)
8+
9+
maintainers:
10+
- Thierry Reding <[email protected]>
11+
- Jon Hunter <[email protected]>
12+
- Vidya Sagar <[email protected]>
13+
14+
description: |
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+
26+
properties:
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+
186+
allOf:
187+
- $ref: /schemas/pci/snps,dw-pcie-ep.yaml#
188+
189+
unevaluatedProperties: false
190+
191+
required:
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+
206+
examples:
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+
};

0 commit comments

Comments
 (0)