1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/phy/qcom,msm8996-qmp-usb3-phy.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm QMP PHY controller (USB, MSM8996)
8
9maintainers:
10  - Vinod Koul <vkoul@kernel.org>
11
12description:
13  QMP PHY controller supports physical layer functionality for a number of
14  controllers on Qualcomm chipsets, such as, PCIe, UFS, and USB.
15
16  Note that these bindings are for SoCs up to SC8180X. For newer SoCs, see
17  qcom,sc8280xp-qmp-usb3-uni-phy.yaml.
18
19properties:
20  compatible:
21    enum:
22      - qcom,ipq6018-qmp-usb3-phy
23      - qcom,ipq8074-qmp-usb3-phy
24      - qcom,msm8996-qmp-usb3-phy
25      - qcom,msm8998-qmp-usb3-phy
26      - qcom,qcm2290-qmp-usb3-phy
27      - qcom,sc7180-qmp-usb3-phy
28      - qcom,sc8180x-qmp-usb3-phy
29      - qcom,sc8280xp-qmp-usb3-uni-phy
30      - qcom,sdm845-qmp-usb3-phy
31      - qcom,sdm845-qmp-usb3-uni-phy
32      - qcom,sdx55-qmp-usb3-uni-phy
33      - qcom,sdx65-qmp-usb3-uni-phy
34      - qcom,sm8150-qmp-usb3-phy
35      - qcom,sm8150-qmp-usb3-uni-phy
36      - qcom,sm8250-qmp-usb3-phy
37      - qcom,sm8250-qmp-usb3-uni-phy
38      - qcom,sm8350-qmp-usb3-phy
39      - qcom,sm8350-qmp-usb3-uni-phy
40      - qcom,sm8450-qmp-usb3-phy
41
42  reg:
43    minItems: 1
44    items:
45      - description: serdes
46      - description: DP_COM
47
48  "#address-cells":
49    enum: [ 1, 2 ]
50
51  "#size-cells":
52    enum: [ 1, 2 ]
53
54  ranges: true
55
56  clocks:
57    minItems: 3
58    maxItems: 4
59
60  clock-names:
61    minItems: 3
62    maxItems: 4
63
64  power-domains:
65    maxItems: 1
66
67  resets:
68    maxItems: 2
69
70  reset-names:
71    maxItems: 2
72
73  vdda-phy-supply: true
74
75  vdda-pll-supply: true
76
77  vddp-ref-clk-supply: true
78
79patternProperties:
80  "^phy@[0-9a-f]+$":
81    type: object
82    description: single PHY-provider child node
83    properties:
84      reg:
85        minItems: 3
86        maxItems: 6
87
88      clocks:
89        items:
90          - description: PIPE clock
91
92      clock-names:
93        deprecated: true
94        items:
95          - const: pipe0
96
97      "#clock-cells":
98        const: 0
99
100      clock-output-names:
101        maxItems: 1
102
103      "#phy-cells":
104        const: 0
105
106    required:
107      - reg
108      - clocks
109      - "#clock-cells"
110      - clock-output-names
111      - "#phy-cells"
112
113    additionalProperties: false
114
115required:
116  - compatible
117  - reg
118  - "#address-cells"
119  - "#size-cells"
120  - ranges
121  - clocks
122  - clock-names
123  - resets
124  - reset-names
125  - vdda-phy-supply
126  - vdda-pll-supply
127
128additionalProperties: false
129
130allOf:
131  - if:
132      properties:
133        compatible:
134          contains:
135            enum:
136              - qcom,sc7180-qmp-usb3-phy
137    then:
138      properties:
139        clocks:
140          maxItems: 4
141        clock-names:
142          items:
143            - const: aux
144            - const: cfg_ahb
145            - const: ref
146            - const: com_aux
147        resets:
148          maxItems: 1
149        reset-names:
150          items:
151            - const: phy
152
153  - if:
154      properties:
155        compatible:
156          contains:
157            enum:
158              - qcom,sdm845-qmp-usb3-uni-phy
159    then:
160      properties:
161        clocks:
162          maxItems: 4
163        clock-names:
164          items:
165            - const: aux
166            - const: cfg_ahb
167            - const: ref
168            - const: com_aux
169        resets:
170          maxItems: 2
171        reset-names:
172          items:
173            - const: phy
174            - const: common
175
176  - if:
177      properties:
178        compatible:
179          contains:
180            enum:
181              - qcom,ipq8074-qmp-usb3-phy
182              - qcom,msm8996-qmp-usb3-phy
183              - qcom,msm8998-qmp-usb3-phy
184              - qcom,sdx55-qmp-usb3-uni-phy
185              - qcom,sdx65-qmp-usb3-uni-phy
186    then:
187      properties:
188        clocks:
189          maxItems: 3
190        clock-names:
191          items:
192            - const: aux
193            - const: cfg_ahb
194            - const: ref
195        resets:
196          maxItems: 2
197        reset-names:
198          items:
199            - const: phy
200            - const: common
201
202  - if:
203      properties:
204        compatible:
205          contains:
206            enum:
207              - qcom,sc8280xp-qmp-usb3-uni-phy
208              - qcom,sm8150-qmp-usb3-phy
209              - qcom,sm8150-qmp-usb3-uni-phy
210              - qcom,sm8250-qmp-usb3-uni-phy
211              - qcom,sm8350-qmp-usb3-uni-phy
212    then:
213      properties:
214        clocks:
215          maxItems: 4
216        clock-names:
217          items:
218            - const: aux
219            - const: ref_clk_src
220            - const: ref
221            - const: com_aux
222        resets:
223          maxItems: 2
224        reset-names:
225          items:
226            - const: phy
227            - const: common
228
229  - if:
230      properties:
231        compatible:
232          contains:
233            enum:
234              - qcom,sm8250-qmp-usb3-phy
235              - qcom,sm8350-qmp-usb3-phy
236    then:
237      properties:
238        clocks:
239          maxItems: 3
240        clock-names:
241          items:
242            - const: aux
243            - const: ref_clk_src
244            - const: com_aux
245        resets:
246          maxItems: 2
247        reset-names:
248          items:
249            - const: phy
250            - const: common
251
252  - if:
253      properties:
254        compatible:
255          contains:
256            enum:
257              - qcom,qcm2290-qmp-usb3-phy
258    then:
259      properties:
260        clocks:
261          maxItems: 3
262        clock-names:
263          items:
264            - const: cfg_ahb
265            - const: ref
266            - const: com_aux
267        resets:
268          maxItems: 2
269        reset-names:
270          items:
271            - const: phy_phy
272            - const: phy
273
274  - if:
275      properties:
276        compatible:
277          contains:
278            enum:
279              - qcom,sc8280xp-qmp-usb3-uni-phy
280    then:
281      required:
282        - power-domains
283
284  - if:
285      properties:
286        compatible:
287          contains:
288            enum:
289              - qcom,sdm845-qmp-usb3-phy
290              - qcom,sm8150-qmp-usb3-phy
291              - qcom,sm8350-qmp-usb3-phy
292              - qcom,sm8450-qmp-usb3-phy
293    then:
294      patternProperties:
295        "^phy@[0-9a-f]+$":
296          properties:
297            reg:
298              items:
299                - description: TX lane 1
300                - description: RX lane 1
301                - description: PCS
302                - description: TX lane 2
303                - description: RX lane 2
304                - description: PCS_MISC
305
306  - if:
307      properties:
308        compatible:
309          contains:
310            enum:
311              - qcom,msm8998-qmp-usb3-phy
312    then:
313      patternProperties:
314        "^phy@[0-9a-f]+$":
315          properties:
316            reg:
317              items:
318                - description: TX lane 1
319                - description: RX lane 1
320                - description: PCS
321                - description: TX lane 2
322                - description: RX lane 2
323
324  - if:
325      properties:
326        compatible:
327          contains:
328            enum:
329              - qcom,ipq6018-qmp-usb3-phy
330              - qcom,ipq8074-qmp-usb3-phy
331              - qcom,qcm2290-qmp-usb3-phy
332              - qcom,sc7180-qmp-usb3-phy
333              - qcom,sc8180x-qmp-usb3-phy
334              - qcom,sdx55-qmp-usb3-uni-phy
335              - qcom,sdx65-qmp-usb3-uni-phy
336              - qcom,sm8150-qmp-usb3-uni-phy
337              - qcom,sm8250-qmp-usb3-phy
338    then:
339      patternProperties:
340        "^phy@[0-9a-f]+$":
341          properties:
342            reg:
343              items:
344                - description: TX
345                - description: RX
346                - description: PCS
347                - description: PCS_MISC
348
349  - if:
350      properties:
351        compatible:
352          contains:
353            enum:
354              - qcom,msm8996-qmp-usb3-phy
355              - qcom,sc8280xp-qmp-usb3-uni-phy
356              - qcom,sm8250-qmp-usb3-uni-phy
357              - qcom,sm8350-qmp-usb3-uni-phy
358    then:
359      patternProperties:
360        "^phy@[0-9a-f]+$":
361          properties:
362            reg:
363              items:
364                - description: TX
365                - description: RX
366                - description: PCS
367
368examples:
369  - |
370    #include <dt-bindings/clock/qcom,gcc-sdm845.h>
371    usb_2_qmpphy: phy-wrapper@88eb000 {
372        compatible = "qcom,sdm845-qmp-usb3-uni-phy";
373        reg = <0x088eb000 0x18c>;
374        #address-cells = <1>;
375        #size-cells = <1>;
376        ranges = <0x0 0x088eb000 0x2000>;
377
378        clocks = <&gcc GCC_USB3_SEC_PHY_AUX_CLK >,
379                 <&gcc GCC_USB_PHY_CFG_AHB2PHY_CLK>,
380                 <&gcc GCC_USB3_SEC_CLKREF_CLK>,
381                 <&gcc GCC_USB3_SEC_PHY_COM_AUX_CLK>;
382        clock-names = "aux", "cfg_ahb", "ref", "com_aux";
383
384        resets = <&gcc GCC_USB3PHY_PHY_SEC_BCR>,
385                 <&gcc GCC_USB3_PHY_SEC_BCR>;
386        reset-names = "phy", "common";
387
388        vdda-phy-supply = <&vdda_usb2_ss_1p2>;
389        vdda-pll-supply = <&vdda_usb2_ss_core>;
390
391        usb_2_ssphy: phy@200 {
392                reg = <0x200 0x128>,
393                      <0x400 0x1fc>,
394                      <0x800 0x218>,
395                      <0x600 0x70>;
396
397                clocks = <&gcc GCC_USB3_SEC_PHY_PIPE_CLK>;
398
399                #clock-cells = <0>;
400                clock-output-names = "usb3_uni_phy_pipe_clk_src";
401
402                #phy-cells = <0>;
403            };
404        };
405