1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: "http://devicetree.org/schemas/usb/nvidia,tegra-xudc.yaml#"
5$schema: "http://devicetree.org/meta-schemas/core.yaml#"
6
7title: Device tree binding for NVIDIA Tegra XUSB device mode controller (XUDC)
8
9description:
10  The Tegra XUDC controller supports both USB 2.0 HighSpeed/FullSpeed and
11  USB 3.0 SuperSpeed protocols.
12
13maintainers:
14  - Nagarjuna Kristam <nkristam@nvidia.com>
15  - JC Kuo <jckuo@nvidia.com>
16  - Thierry Reding <treding@nvidia.com>
17
18properties:
19  compatible:
20    items:
21      - enum:
22          - nvidia,tegra210-xudc # For Tegra210
23          - nvidia,tegra186-xudc # For Tegra186
24          - nvidia,tegra194-xudc # For Tegra194
25
26  reg:
27    minItems: 2
28    items:
29      - description: XUSB device controller registers
30      - description: XUSB device PCI Config registers
31      - description: XUSB device registers.
32
33  reg-names:
34    minItems: 2
35    items:
36      - const: base
37      - const: fpci
38      - const: ipfs
39
40  interrupts:
41    maxItems: 1
42    description: Must contain the XUSB device interrupt.
43
44  clocks:
45    minItems: 4
46    items:
47      - description: Clock to enable core XUSB dev clock.
48      - description: Clock to enable XUSB super speed clock.
49      - description: Clock to enable XUSB super speed dev clock.
50      - description: Clock to enable XUSB high speed dev clock.
51      - description: Clock to enable XUSB full speed dev clock.
52
53  clock-names:
54    minItems: 4
55    items:
56      - const: dev
57      - const: ss
58      - const: ss_src
59      - const: fs_src
60      - const: hs_src
61
62  interconnects:
63    items:
64      - description: memory read client
65      - description: memory write client
66
67  interconnect-names:
68    items:
69      - const: dma-mem # read
70      - const: write
71
72  iommus:
73    maxItems: 1
74
75  power-domains:
76    items:
77      - description: XUSBB(device) power-domain
78      - description: XUSBA(superspeed) power-domain
79
80  power-domain-names:
81    items:
82      - const: dev
83      - const: ss
84
85  nvidia,xusb-padctl:
86    $ref: /schemas/types.yaml#/definitions/phandle-array
87    description:
88      phandle to the XUSB pad controller that is used to configure the USB pads
89      used by the XUDC controller.
90
91  phys:
92    minItems: 1
93    description:
94      Must contain an entry for each entry in phy-names.
95      See ../phy/phy-bindings.txt for details.
96
97  phy-names:
98    minItems: 1
99    items:
100      - const: usb2-0
101      - const: usb2-1
102      - const: usb2-2
103      - const: usb2-3
104      - const: usb3-0
105      - const: usb3-1
106      - const: usb3-2
107      - const: usb3-3
108
109  avddio-usb-supply:
110    description: PCIe/USB3 analog logic power supply. Must supply 1.05 V.
111
112  hvdd-usb-supply:
113    description: USB controller power supply. Must supply 3.3 V.
114
115required:
116  - compatible
117  - reg
118  - reg-names
119  - interrupts
120  - clocks
121  - clock-names
122  - power-domains
123  - power-domain-names
124  - nvidia,xusb-padctl
125  - phys
126  - phy-names
127
128allOf:
129  - if:
130      properties:
131        compatible:
132          contains:
133            enum:
134              - nvidia,tegra210-xudc
135    then:
136      properties:
137        reg:
138          minItems: 3
139        reg-names:
140          minItems: 3
141        clocks:
142          minItems: 5
143        clock-names:
144          minItems: 5
145      required:
146        - avddio-usb-supply
147        - hvdd-usb-supply
148
149  - if:
150      properties:
151        compatible:
152          contains:
153            enum:
154              - nvidia,tegra186-xudc
155              - nvidia,tegra194-xudc
156    then:
157      properties:
158        reg:
159          maxItems: 2
160        reg-names:
161          maxItems: 2
162        clocks:
163          maxItems: 4
164        clock-names:
165          maxItems: 4
166
167additionalProperties: false
168
169examples:
170  - |
171    #include <dt-bindings/clock/tegra210-car.h>
172    #include <dt-bindings/gpio/tegra-gpio.h>
173    #include <dt-bindings/interrupt-controller/arm-gic.h>
174
175    usb@700d0000 {
176        compatible = "nvidia,tegra210-xudc";
177        reg = <0x700d0000 0x8000>,
178              <0x700d8000 0x1000>,
179              <0x700d9000 0x1000>;
180        reg-names = "base", "fpci", "ipfs";
181
182        interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
183
184        clocks = <&tegra_car TEGRA210_CLK_XUSB_DEV>,
185                 <&tegra_car TEGRA210_CLK_XUSB_SS>,
186                 <&tegra_car TEGRA210_CLK_XUSB_SSP_SRC>,
187                 <&tegra_car TEGRA210_CLK_XUSB_FS_SRC>,
188                 <&tegra_car TEGRA210_CLK_XUSB_HS_SRC>;
189        clock-names = "dev", "ss", "ss_src", "fs_src", "hs_src";
190
191        power-domains = <&pd_xusbdev>, <&pd_xusbss>;
192        power-domain-names = "dev", "ss";
193
194        nvidia,xusb-padctl = <&padctl>;
195
196        phys = <&micro_b>;
197        phy-names = "usb2-0";
198
199        avddio-usb-supply = <&vdd_pex_1v05>;
200        hvdd-usb-supply = <&vdd_3v3_sys>;
201    };
202