Merge tag 'devicetree-for-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/robh...
[linux-2.6-microblaze.git] / Documentation / devicetree / bindings / phy / mediatek,tphy.yaml
1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 # Copyright (c) 2020 MediaTek
3 %YAML 1.2
4 ---
5 $id: http://devicetree.org/schemas/phy/mediatek,tphy.yaml#
6 $schema: http://devicetree.org/meta-schemas/core.yaml#
7
8 title: MediaTek T-PHY Controller
9
10 maintainers:
11   - Chunfeng Yun <chunfeng.yun@mediatek.com>
12
13 description: |
14   The T-PHY controller supports physical layer functionality for a number of
15   controllers on MediaTek SoCs, includes USB2.0, USB3.0, PCIe and SATA.
16
17   Layout differences of banks between T-PHY V1 (mt8173/mt2701) and
18   T-PHY V2 (mt2712) / V3 (mt8195) when works on USB mode:
19   -----------------------------------
20   Version 1:
21   port        offset    bank
22   shared      0x0000    SPLLC
23               0x0100    FMREG
24   u2 port0    0x0800    U2PHY_COM
25   u3 port0    0x0900    U3PHYD
26               0x0a00    U3PHYD_BANK2
27               0x0b00    U3PHYA
28               0x0c00    U3PHYA_DA
29   u2 port1    0x1000    U2PHY_COM
30   u3 port1    0x1100    U3PHYD
31               0x1200    U3PHYD_BANK2
32               0x1300    U3PHYA
33               0x1400    U3PHYA_DA
34   u2 port2    0x1800    U2PHY_COM
35               ...
36
37   Version 2/3:
38   port        offset    bank
39   u2 port0    0x0000    MISC
40               0x0100    FMREG
41               0x0300    U2PHY_COM
42   u3 port0    0x0700    SPLLC
43               0x0800    CHIP
44               0x0900    U3PHYD
45               0x0a00    U3PHYD_BANK2
46               0x0b00    U3PHYA
47               0x0c00    U3PHYA_DA
48   u2 port1    0x1000    MISC
49               0x1100    FMREG
50               0x1300    U2PHY_COM
51   u3 port1    0x1700    SPLLC
52               0x1800    CHIP
53               0x1900    U3PHYD
54               0x1a00    U3PHYD_BANK2
55               0x1b00    U3PHYA
56               0x1c00    U3PHYA_DA
57   u2 port2    0x2000    MISC
58               ...
59
60   SPLLC shared by u3 ports and FMREG shared by u2 ports on V1 are put back
61   into each port; a new bank MISC for u2 ports and CHIP for u3 ports are
62   added on V2; the FMREG bank for slew rate calibration is not used anymore
63   and reserved on V3;
64
65 properties:
66   $nodename:
67     pattern: "^t-phy@[0-9a-f]+$"
68
69   compatible:
70     oneOf:
71       - items:
72           - enum:
73               - mediatek,mt2701-tphy
74               - mediatek,mt7623-tphy
75               - mediatek,mt7622-tphy
76               - mediatek,mt8516-tphy
77           - const: mediatek,generic-tphy-v1
78       - items:
79           - enum:
80               - mediatek,mt2712-tphy
81               - mediatek,mt7629-tphy
82               - mediatek,mt8183-tphy
83               - mediatek,mt8186-tphy
84               - mediatek,mt8192-tphy
85               - mediatek,mt8365-tphy
86           - const: mediatek,generic-tphy-v2
87       - items:
88           - enum:
89               - mediatek,mt8188-tphy
90               - mediatek,mt8195-tphy
91           - const: mediatek,generic-tphy-v3
92       - const: mediatek,mt2701-u3phy
93         deprecated: true
94       - const: mediatek,mt2712-u3phy
95         deprecated: true
96       - const: mediatek,mt8173-u3phy
97
98   reg:
99     description:
100       Register shared by multiple ports, exclude port's private register.
101       It is needed for T-PHY V1, such as mt2701 and mt8173, but not for
102       T-PHY V2/V3, such as mt2712.
103     maxItems: 1
104
105   "#address-cells":
106     enum: [1, 2]
107
108   "#size-cells":
109     enum: [1, 2]
110
111   # Used with non-empty value if optional 'reg' is not provided.
112   # The format of the value is an arbitrary number of triplets of
113   # (child-bus-address, parent-bus-address, length).
114   ranges: true
115
116   mediatek,src-ref-clk-mhz:
117     description:
118       Frequency of reference clock for slew rate calibrate
119     default: 26
120
121   mediatek,src-coef:
122     description:
123       Coefficient for slew rate calibrate, depends on SoC process
124     $ref: /schemas/types.yaml#/definitions/uint32
125     default: 28
126
127 # Required child node:
128 patternProperties:
129   "^(usb|pcie|sata)-phy@[0-9a-f]+$":
130     type: object
131     description:
132       A sub-node is required for each port the controller provides.
133       Address range information including the usual 'reg' property
134       is used inside these nodes to describe the controller's topology.
135
136     properties:
137       reg:
138         maxItems: 1
139
140       clocks:
141         minItems: 1
142         items:
143           - description: Reference clock, (HS is 48Mhz, SS/P is 24~27Mhz)
144           - description: Reference clock of analog phy
145         description:
146           Uses both clocks if the clock of analog and digital phys are
147           separated, otherwise uses "ref" clock only if needed.
148
149       clock-names:
150         minItems: 1
151         items:
152           - const: ref
153           - const: da_ref
154
155       "#phy-cells":
156         const: 1
157         description: |
158           The cells contain the following arguments.
159
160           - description: The PHY type
161               enum:
162                 - PHY_TYPE_USB2
163                 - PHY_TYPE_USB3
164                 - PHY_TYPE_PCIE
165                 - PHY_TYPE_SATA
166                 - PHY_TYPE_SGMII
167
168       nvmem-cells:
169         items:
170           - description: internal R efuse for U2 PHY or U3/PCIe PHY
171           - description: rx_imp_sel efuse for U3/PCIe PHY
172           - description: tx_imp_sel efuse for U3/PCIe PHY
173         description: |
174           Phandles to nvmem cell that contains the efuse data;
175           Available only for U2 PHY or U3/PCIe PHY of version 2/3, these
176           three items should be provided at the same time for U3/PCIe PHY,
177           when use software to load efuse;
178           If unspecified, will use hardware auto-load efuse.
179
180       nvmem-cell-names:
181         items:
182           - const: intr
183           - const: rx_imp
184           - const: tx_imp
185
186       # The following optional vendor properties are only for debug or HQA test
187       mediatek,eye-src:
188         description:
189           The value of slew rate calibrate (U2 phy)
190         $ref: /schemas/types.yaml#/definitions/uint32
191         minimum: 1
192         maximum: 7
193
194       mediatek,eye-vrt:
195         description:
196           The selection of VRT reference voltage (U2 phy)
197         $ref: /schemas/types.yaml#/definitions/uint32
198         minimum: 1
199         maximum: 7
200
201       mediatek,eye-term:
202         description:
203           The selection of HS_TX TERM reference voltage (U2 phy)
204         $ref: /schemas/types.yaml#/definitions/uint32
205         minimum: 1
206         maximum: 7
207
208       mediatek,intr:
209         description:
210           The selection of internal resistor (U2 phy)
211         $ref: /schemas/types.yaml#/definitions/uint32
212         minimum: 1
213         maximum: 31
214
215       mediatek,discth:
216         description:
217           The selection of disconnect threshold (U2 phy)
218         $ref: /schemas/types.yaml#/definitions/uint32
219         minimum: 1
220         maximum: 15
221
222       mediatek,pre-emphasis:
223         description:
224           The level of pre-emphasis which used to widen the eye opening and
225           boost eye swing, the unit step is about 4.16% increment; e.g. the
226           level 1 means amplitude increases about 4.16%, the level 2 is about
227           8.3% etc. (U2 phy)
228         $ref: /schemas/types.yaml#/definitions/uint32
229         minimum: 1
230         maximum: 3
231
232       mediatek,bc12:
233         description:
234           Specify the flag to enable BC1.2 if support it
235         type: boolean
236
237       mediatek,syscon-type:
238         $ref: /schemas/types.yaml#/definitions/phandle-array
239         maxItems: 1
240         description:
241           A phandle to syscon used to access the register of type switch,
242           the field should always be 3 cells long.
243         items:
244           items:
245             - description:
246                 The first cell represents a phandle to syscon
247             - description:
248                 The second cell represents the register offset
249             - description:
250                 The third cell represents the index of config segment
251               enum: [0, 1, 2, 3]
252
253     required:
254       - reg
255       - "#phy-cells"
256
257     additionalProperties: false
258
259 required:
260   - compatible
261   - "#address-cells"
262   - "#size-cells"
263   - ranges
264
265 additionalProperties: false
266
267 examples:
268   - |
269     #include <dt-bindings/clock/mt8173-clk.h>
270     #include <dt-bindings/interrupt-controller/arm-gic.h>
271     #include <dt-bindings/interrupt-controller/irq.h>
272     #include <dt-bindings/phy/phy.h>
273     usb@11271000 {
274         compatible = "mediatek,mt8173-mtu3", "mediatek,mtu3";
275         reg = <0x11271000 0x3000>, <0x11280700 0x0100>;
276         reg-names = "mac", "ippc";
277         phys = <&u2port0 PHY_TYPE_USB2>,
278                <&u3port0 PHY_TYPE_USB3>,
279                <&u2port1 PHY_TYPE_USB2>;
280         interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_LOW>;
281         clocks = <&topckgen CLK_TOP_USB30_SEL>;
282         clock-names = "sys_ck";
283     };
284
285     t-phy@11290000 {
286         compatible = "mediatek,mt8173-u3phy";
287         reg = <0x11290000 0x800>;
288         #address-cells = <1>;
289         #size-cells = <1>;
290         ranges;
291
292         u2port0: usb-phy@11290800 {
293             reg = <0x11290800 0x100>;
294             clocks = <&apmixedsys CLK_APMIXED_REF2USB_TX>, <&clk48m>;
295             clock-names = "ref", "da_ref";
296             #phy-cells = <1>;
297         };
298
299         u3port0: usb-phy@11290900 {
300             reg = <0x11290900 0x700>;
301             clocks = <&clk26m>;
302             clock-names = "ref";
303             #phy-cells = <1>;
304         };
305
306         u2port1: usb-phy@11291000 {
307             reg = <0x11291000 0x100>;
308             #phy-cells = <1>;
309         };
310     };
311
312 ...