← Documents Documentation/devicetree/bindings/usb/qcom,snps-dwc3.yaml GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings / USB

Qualcomm/Synopsys Combined DWC3 Controller

결합형 Qualcomm DWC3의 SoC별 clock·core/PHY interrupt와 multi-port 구성을 설명합니다.

Source pathDocumentation/devicetree/bindings/usb/qcom,snps-dwc3.yaml
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

qcom,snps-dwc3.yaml:1-628

결합형 Qualcomm DWC3의 SoC별 clock·core/PHY interrupt와 multi-port 구성을 설명합니다. 접을 수 있는 영어 원문 전체와 한국어 전문 번역을 함께 제공하며, compatible, register, interrupt, clock, DMA, interconnect, PHY, source path와 원문 줄 좌표를 원형대로 보존합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/usb/qcom,snps-dwc3.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Qualcomm SuperSpeed DWC3 USB SoC controller
8
9 maintainers:
10 - Wesley Cheng <[email protected]>
11
12 description:
13 Describes the Qualcomm USB block, based on Synopsys DWC3.
14
15 select:
16 properties:
17 compatible:
18 contains:
19 const: qcom,snps-dwc3
20 required:
21 - compatible
22
23 properties:
24 compatible:
25 items:
26 - enum:
27 - qcom,ipq4019-dwc3
28 - qcom,ipq5018-dwc3
29 - qcom,ipq5332-dwc3
30 - qcom,ipq5424-dwc3
31 - qcom,ipq6018-dwc3
32 - qcom,ipq8064-dwc3
33 - qcom,ipq8074-dwc3
34 - qcom,ipq9574-dwc3
35 - qcom,milos-dwc3
36 - qcom,msm8953-dwc3
37 - qcom,msm8994-dwc3
38 - qcom,msm8996-dwc3
39 - qcom,msm8998-dwc3
40 - qcom,qcm2290-dwc3
41 - qcom,qcs404-dwc3
42 - qcom,qcs615-dwc3
43 - qcom,qcs8300-dwc3
44 - qcom,qdu1000-dwc3
45 - qcom,sa8775p-dwc3
46 - qcom,sar2130p-dwc3
47 - qcom,sc7180-dwc3
48 - qcom,sc7280-dwc3
49 - qcom,sc8180x-dwc3
50 - qcom,sc8180x-dwc3-mp
51 - qcom,sc8280xp-dwc3
52 - qcom,sc8280xp-dwc3-mp
53 - qcom,sdm660-dwc3
54 - qcom,sdm670-dwc3
55 - qcom,sdm845-dwc3
56 - qcom,sdx55-dwc3
57 - qcom,sdx65-dwc3
58 - qcom,sdx75-dwc3
59 - qcom,sm4250-dwc3
60 - qcom,sm6115-dwc3
61 - qcom,sm6125-dwc3
62 - qcom,sm6350-dwc3
63 - qcom,sm6375-dwc3
64 - qcom,sm8150-dwc3
65 - qcom,sm8250-dwc3
66 - qcom,sm8350-dwc3
67 - qcom,sm8450-dwc3
68 - qcom,sm8550-dwc3
69 - qcom,sm8650-dwc3
70 - qcom,x1e80100-dwc3
71 - qcom,x1e80100-dwc3-mp
72 - const: qcom,snps-dwc3
73
74 reg:
75 maxItems: 1
76
77 power-domains:
78 maxItems: 1
79
80 required-opps:
81 maxItems: 1
82
83 clocks:
84 description: |
85 Several clocks are used, depending on the variant. Typical ones are::
86 - cfg_noc:: System Config NOC clock.
87 - core:: Master/Core clock, has to be >= 125 MHz for SS operation and >=
88 60MHz for HS operation.
89 - iface:: System bus AXI clock.
90 - sleep:: Sleep clock, used for wakeup when USB3 core goes into low
91 power mode (U3).
92 - mock_utmi:: Mock utmi clock needed for ITP/SOF generation in host
93 mode. Its frequency should be 19.2MHz.
94 minItems: 1
95 maxItems: 9
96
97 clock-names:
98 minItems: 1
99 maxItems: 9
100
101 dma-coherent: true
102
103 iommus:
104 maxItems: 1
105
106 resets:
107 maxItems: 1
108
109 interconnects:
110 maxItems: 2
111
112 interconnect-names:
113 items:
114 - const: usb-ddr
115 - const: apps-usb
116
117 interrupts:
118 description: |
119 Different types of interrupts are used based on HS PHY used on target:
120 - dwc_usb3: Core DWC3 interrupt
121 - pwr_event: Used for wakeup based on other power events.
122 - hs_phy_irq: Apart from DP/DM/QUSB2 PHY interrupts, there is
123 hs_phy_irq which is not triggered by default and its
124 functionality is mutually exclusive to that of
125 {dp/dm}_hs_phy_irq and qusb2_phy_irq.
126 - qusb2_phy: SoCs with QUSB2 PHY do not have separate DP/DM IRQs and
127 expose only a single IRQ whose behavior can be modified
128 by the QUSB2PHY_INTR_CTRL register. The required DPSE/
129 DMSE configuration is done in QUSB2PHY_INTR_CTRL register
130 of PHY address space.
131 - {dp/dm}_hs_phy_irq: These IRQ's directly reflect changes on the DP/
132 DM pads of the SoC. These are used for wakeup
133 only on SoCs with non-QUSB2 targets with
134 exception of SDM670/SDM845/SM6350.
135 - ss_phy_irq: Used for remote wakeup in Super Speed mode of operation.
136 minItems: 3
137 maxItems: 19
138
139 interrupt-names:
140 minItems: 3
141 maxItems: 19
142
143 qcom,select-utmi-as-pipe-clk:
144 description:
145 If present, disable USB3 pipe_clk requirement.
146 Used when dwc3 operates without SSPHY and only
147 HS/FS/LS modes are supported.
148 type: boolean
149
150 wakeup-source: true
151
152 # Required child node:
153
154 required:
155 - compatible
156 - reg
157 - clocks
158 - clock-names
159 - interrupts
160 - interrupt-names
161
162 allOf:
163 - $ref: snps,dwc3-common.yaml#
164 - if:
165 properties:
166 compatible:
167 contains:
168 enum:
169 - qcom,ipq4019-dwc3
170 - qcom,ipq5332-dwc3
171 then:
172 properties:
173 clocks:
174 maxItems: 3
175 clock-names:
176 items:
177 - const: core
178 - const: sleep
179 - const: mock_utmi
180
181 - if:
182 properties:
183 compatible:
184 contains:
185 enum:
186 - qcom,ipq8064-dwc3
187 then:
188 properties:
189 clocks:
190 items:
191 - description: Master/Core clock, has to be >= 125 MHz
192 for SS operation and >= 60MHz for HS operation.
193 clock-names:
194 items:
195 - const: core
196
197 - if:
198 properties:
199 compatible:
200 contains:
201 enum:
202 - qcom,ipq9574-dwc3
203 - qcom,msm8953-dwc3
204 - qcom,msm8996-dwc3
205 - qcom,msm8998-dwc3
206 - qcom,qcs8300-dwc3
207 - qcom,sa8775p-dwc3
208 - qcom,sc7180-dwc3
209 - qcom,sc7280-dwc3
210 - qcom,sdm670-dwc3
211 - qcom,sdm845-dwc3
212 - qcom,sdx55-dwc3
213 - qcom,sdx65-dwc3
214 - qcom,sdx75-dwc3
215 - qcom,sm6350-dwc3
216 then:
217 properties:
218 clocks:
219 maxItems: 5
220 clock-names:
221 items:
222 - const: cfg_noc
223 - const: core
224 - const: iface
225 - const: sleep
226 - const: mock_utmi
227
228 - if:
229 properties:
230 compatible:
231 contains:
232 enum:
233 - qcom,ipq6018-dwc3
234 then:
235 properties:
236 clocks:
237 minItems: 3
238 maxItems: 4
239 clock-names:
240 oneOf:
241 - items:
242 - const: core
243 - const: sleep
244 - const: mock_utmi
245 - items:
246 - const: cfg_noc
247 - const: core
248 - const: sleep
249 - const: mock_utmi
250
251 - if:
252 properties:
253 compatible:
254 contains:
255 enum:
256 - qcom,ipq8074-dwc3
257 - qcom,qdu1000-dwc3
258 then:
259 properties:
260 clocks:
261 maxItems: 4
262 clock-names:
263 items:
264 - const: cfg_noc
265 - const: core
266 - const: sleep
267 - const: mock_utmi
268
269 - if:
270 properties:
271 compatible:
272 contains:
273 enum:
274 - qcom,ipq5018-dwc3
275 - qcom,msm8994-dwc3
276 - qcom,qcs404-dwc3
277 then:
278 properties:
279 clocks:
280 maxItems: 4
281 clock-names:
282 items:
283 - const: core
284 - const: iface
285 - const: sleep
286 - const: mock_utmi
287
288 - if:
289 properties:
290 compatible:
291 contains:
292 enum:
293 - qcom,sc8280xp-dwc3
294 - qcom,sc8280xp-dwc3-mp
295 - qcom,x1e80100-dwc3
296 - qcom,x1e80100-dwc3-mp
297 then:
298 properties:
299 clocks:
300 maxItems: 9
301 clock-names:
302 items:
303 - const: cfg_noc
304 - const: core
305 - const: iface
306 - const: sleep
307 - const: mock_utmi
308 - const: noc_aggr
309 - const: noc_aggr_north
310 - const: noc_aggr_south
311 - const: noc_sys
312
313 - if:
314 properties:
315 compatible:
316 contains:
317 enum:
318 - qcom,sdm660-dwc3
319 then:
320 properties:
321 clocks:
322 minItems: 4
323 maxItems: 5
324 clock-names:
325 oneOf:
326 - items:
327 - const: cfg_noc
328 - const: core
329 - const: iface
330 - const: sleep
331 - const: mock_utmi
332 - items:
333 - const: cfg_noc
334 - const: core
335 - const: sleep
336 - const: mock_utmi
337
338 - if:
339 properties:
340 compatible:
341 contains:
342 enum:
343 - qcom,milos-dwc3
344 - qcom,qcm2290-dwc3
345 - qcom,qcs615-dwc3
346 - qcom,sar2130p-dwc3
347 - qcom,sc8180x-dwc3
348 - qcom,sc8180x-dwc3-mp
349 - qcom,sm6115-dwc3
350 - qcom,sm6125-dwc3
351 - qcom,sm8150-dwc3
352 - qcom,sm8250-dwc3
353 - qcom,sm8450-dwc3
354 - qcom,sm8550-dwc3
355 - qcom,sm8650-dwc3
356 then:
357 properties:
358 clocks:
359 minItems: 6
360 clock-names:
361 items:
362 - const: cfg_noc
363 - const: core
364 - const: iface
365 - const: sleep
366 - const: mock_utmi
367 - const: xo
368
369 - if:
370 properties:
371 compatible:
372 contains:
373 enum:
374 - qcom,sm8350-dwc3
375 then:
376 properties:
377 clocks:
378 minItems: 5
379 maxItems: 6
380 clock-names:
381 minItems: 5
382 items:
383 - const: cfg_noc
384 - const: core
385 - const: iface
386 - const: sleep
387 - const: mock_utmi
388 - const: xo
389
390 - if:
391 properties:
392 compatible:
393 contains:
394 enum:
395 - qcom,ipq5018-dwc3
396 - qcom,ipq6018-dwc3
397 - qcom,ipq8074-dwc3
398 - qcom,msm8953-dwc3
399 - qcom,msm8998-dwc3
400 then:
401 properties:
402 interrupts:
403 minItems: 3
404 maxItems: 4
405 interrupt-names:
406 minItems: 3
407 items:
408 - const: dwc_usb3
409 - const: pwr_event
410 - const: qusb2_phy
411 - const: ss_phy_irq
412
413 - if:
414 properties:
415 compatible:
416 contains:
417 enum:
418 - qcom,msm8996-dwc3
419 - qcom,qcs404-dwc3
420 - qcom,sdm660-dwc3
421 - qcom,sm6115-dwc3
422 - qcom,sm6125-dwc3
423 then:
424 properties:
425 interrupts:
426 minItems: 4
427 maxItems: 5
428 interrupt-names:
429 minItems: 4
430 items:
431 - const: dwc_usb3
432 - const: pwr_event
433 - const: qusb2_phy
434 - const: hs_phy_irq
435 - const: ss_phy_irq
436
437 - if:
438 properties:
439 compatible:
440 contains:
441 enum:
442 - qcom,ipq5332-dwc3
443 then:
444 properties:
445 interrupts:
446 maxItems: 4
447 interrupt-names:
448 items:
449 - const: dwc_usb3
450 - const: pwr_event
451 - const: dp_hs_phy_irq
452 - const: dm_hs_phy_irq
453
454 - if:
455 properties:
456 compatible:
457 contains:
458 enum:
459 - qcom,milos-dwc3
460 - qcom,x1e80100-dwc3
461 then:
462 properties:
463 interrupts:
464 minItems: 4
465 maxItems: 5
466 interrupt-names:
467 minItems: 4
468 items:
469 - const: dwc_usb3
470 - const: pwr_event
471 - const: dp_hs_phy_irq
472 - const: dm_hs_phy_irq
473 - const: ss_phy_irq
474
475 - if:
476 properties:
477 compatible:
478 contains:
479 enum:
480 - qcom,ipq4019-dwc3
481 - qcom,ipq8064-dwc3
482 - qcom,msm8994-dwc3
483 - qcom,qcs615-dwc3
484 - qcom,qcs8300-dwc3
485 - qcom,qdu1000-dwc3
486 - qcom,sa8775p-dwc3
487 - qcom,sc7180-dwc3
488 - qcom,sc7280-dwc3
489 - qcom,sc8180x-dwc3
490 - qcom,sc8280xp-dwc3
491 - qcom,sdm670-dwc3
492 - qcom,sdm845-dwc3
493 - qcom,sdx55-dwc3
494 - qcom,sdx65-dwc3
495 - qcom,sdx75-dwc3
496 - qcom,sm4250-dwc3
497 - qcom,sm6350-dwc3
498 - qcom,sm8150-dwc3
499 - qcom,sm8250-dwc3
500 - qcom,sm8350-dwc3
501 - qcom,sm8450-dwc3
502 - qcom,sm8550-dwc3
503 - qcom,sm8650-dwc3
504 then:
505 properties:
506 interrupts:
507 minItems: 5
508 maxItems: 6
509 interrupt-names:
510 minItems: 5
511 items:
512 - const: dwc_usb3
513 - const: pwr_event
514 - const: hs_phy_irq
515 - const: dp_hs_phy_irq
516 - const: dm_hs_phy_irq
517 - const: ss_phy_irq
518
519 - if:
520 properties:
521 compatible:
522 contains:
523 enum:
524 - qcom,sc8180x-dwc3-mp
525 - qcom,x1e80100-dwc3-mp
526 then:
527 properties:
528 interrupts:
529 minItems: 11
530 maxItems: 11
531 interrupt-names:
532 items:
533 - const: dwc_usb3
534 - const: pwr_event_1
535 - const: pwr_event_2
536 - const: hs_phy_1
537 - const: hs_phy_2
538 - const: dp_hs_phy_1
539 - const: dm_hs_phy_1
540 - const: dp_hs_phy_2
541 - const: dm_hs_phy_2
542 - const: ss_phy_1
543 - const: ss_phy_2
544
545 - if:
546 properties:
547 compatible:
548 contains:
549 enum:
550 - qcom,sc8280xp-dwc3-mp
551 then:
552 properties:
553 interrupts:
554 minItems: 19
555 maxItems: 19
556 interrupt-names:
557 items:
558 - const: dwc_usb3
559 - const: pwr_event_1
560 - const: pwr_event_2
561 - const: pwr_event_3
562 - const: pwr_event_4
563 - const: hs_phy_1
564 - const: hs_phy_2
565 - const: hs_phy_3
566 - const: hs_phy_4
567 - const: dp_hs_phy_1
568 - const: dm_hs_phy_1
569 - const: dp_hs_phy_2
570 - const: dm_hs_phy_2
571 - const: dp_hs_phy_3
572 - const: dm_hs_phy_3
573 - const: dp_hs_phy_4
574 - const: dm_hs_phy_4
575 - const: ss_phy_1
576 - const: ss_phy_2
577
578 unevaluatedProperties: false
579
580 examples:
581 - |
582 #include <dt-bindings/clock/qcom,gcc-sdm845.h>
583 #include <dt-bindings/interrupt-controller/arm-gic.h>
584 #include <dt-bindings/interrupt-controller/irq.h>
585 soc {
586 #address-cells = <2>;
587 #size-cells = <2>;
588
589 usb@a600000 {
590 compatible = "qcom,sdm845-dwc3", "qcom,snps-dwc3";
591 reg = <0 0x0a600000 0 0x100000>;
592
593 clocks = <&gcc GCC_CFG_NOC_USB3_PRIM_AXI_CLK>,
594 <&gcc GCC_USB30_PRIM_MASTER_CLK>,
595 <&gcc GCC_AGGRE_USB3_PRIM_AXI_CLK>,
596 <&gcc GCC_USB30_PRIM_SLEEP_CLK>,
597 <&gcc GCC_USB30_PRIM_MOCK_UTMI_CLK>;
598 clock-names = "cfg_noc",
599 "core",
600 "iface",
601 "sleep",
602 "mock_utmi";
603
604 assigned-clocks = <&gcc GCC_USB30_PRIM_MOCK_UTMI_CLK>,
605 <&gcc GCC_USB30_PRIM_MASTER_CLK>;
606 assigned-clock-rates = <19200000>, <150000000>;
607
608 interrupts = <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>,
609 <GIC_SPI 130 IRQ_TYPE_LEVEL_HIGH>,
610 <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
611 <GIC_SPI 489 IRQ_TYPE_EDGE_BOTH>,
612 <GIC_SPI 488 IRQ_TYPE_EDGE_BOTH>,
613 <GIC_SPI 486 IRQ_TYPE_LEVEL_HIGH>;
614 interrupt-names = "dwc_usb3", "pwr_event", "hs_phy_irq",
615 "dp_hs_phy_irq", "dm_hs_phy_irq", "ss_phy_irq";
616
617 power-domains = <&gcc USB30_PRIM_GDSC>;
618
619 resets = <&gcc GCC_USB30_PRIM_BCR>;
620
621 iommus = <&apps_smmu 0x740 0>;
622 snps,dis_u2_susphy_quirk;
623 snps,dis_enblslpm_quirk;
624 phys = <&usb_1_hsphy>, <&usb_1_ssphy>;
625 phy-names = "usb2-phy", "usb3-phy";
626 };
627 };
628 ...
629

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

Qualcomm/Synopsys combined DWC3

1-22

GPL-2.0 또는 BSD-2-Clause로 배포되는 이 schema는 Synopsys DWC3에 기반한 Qualcomm SuperSpeed USB SoC controller를 정의합니다. 관리자는 Wesley Cheng입니다.

선택 조건은 `compatible` 배열에 결합형 fallback `qcom,snps-dwc3`가 포함된 node입니다.

45개 SoC variant와 combined fallback

23-73

`compatible`은 IPQ, Milos, MSM, QCM, QCS, QDU, SA, SAR, SC, SDM, SDX, SM, X1E 계열의 열거된 45개 SoC-specific 문자열 중 하나와 `qcom,snps-dwc3`를 순서대로 사용합니다. `-mp` suffix는 multi-port controller variant입니다.

properties:
  compatible:
    items:
      - enum:
          - qcom,ipq4019-dwc3
          - qcom,ipq5018-dwc3
          - qcom,ipq5332-dwc3
          - qcom,ipq5424-dwc3
          - qcom,ipq6018-dwc3
          - qcom,ipq8064-dwc3
          - qcom,ipq8074-dwc3
          - qcom,ipq9574-dwc3
          - qcom,milos-dwc3
          - qcom,msm8953-dwc3
          - qcom,msm8994-dwc3
          - qcom,msm8996-dwc3
          - qcom,msm8998-dwc3
          - qcom,qcm2290-dwc3
          - qcom,qcs404-dwc3
          - qcom,qcs615-dwc3
          - qcom,qcs8300-dwc3
          - qcom,qdu1000-dwc3
          - qcom,sa8775p-dwc3
          - qcom,sar2130p-dwc3
          - qcom,sc7180-dwc3
          - qcom,sc7280-dwc3
          - qcom,sc8180x-dwc3
          - qcom,sc8180x-dwc3-mp
          - qcom,sc8280xp-dwc3
          - qcom,sc8280xp-dwc3-mp
          - qcom,sdm660-dwc3
          - qcom,sdm670-dwc3
          - qcom,sdm845-dwc3
          - qcom,sdx55-dwc3
          - qcom,sdx65-dwc3
          - qcom,sdx75-dwc3
          - qcom,sm4250-dwc3
          - qcom,sm6115-dwc3
          - qcom,sm6125-dwc3
          - qcom,sm6350-dwc3
          - qcom,sm6375-dwc3
          - qcom,sm8150-dwc3
          - qcom,sm8250-dwc3
          - qcom,sm8350-dwc3
          - qcom,sm8450-dwc3
          - qcom,sm8550-dwc3
          - qcom,sm8650-dwc3
          - qcom,x1e80100-dwc3
          - qcom,x1e80100-dwc3-mp
      - const: qcom,snps-dwc3

Register, DMA, clock와 interconnect

74-116

`reg`, power domain, required OPP, IOMMU, reset은 각각 하나입니다. `dma-coherent`를 지원합니다.

variant에 따라 clock 1~9개를 사용합니다. 대표 이름은 System Config NOC `cfg_noc`, SS에서 최소 125 MHz·HS에서 최소 60 MHz인 master/core `core`, system AXI `iface`, U3 wakeup용 `sleep`, host ITP/SOF 생성을 위한 19.2 MHz `mock_utmi`입니다.

interconnect는 최대 두 개이고 이름은 DDR 경로 `usb-ddr`, application 경로 `apps-usb` 순서입니다.

reg:
  maxItems: 1

power-domains:
  maxItems: 1

required-opps:
  maxItems: 1

clocks:
  description: |
    Several clocks are used, depending on the variant. Typical ones are::
     - cfg_noc:: System Config NOC clock.
     - core:: Master/Core clock, has to be >= 125 MHz for SS operation and >=
              60MHz for HS operation.
     - iface:: System bus AXI clock.
     - sleep:: Sleep clock, used for wakeup when USB3 core goes into low
               power mode (U3).
     - mock_utmi:: Mock utmi clock needed for ITP/SOF generation in host
                   mode. Its frequency should be 19.2MHz.
  minItems: 1
  maxItems: 9

clock-names:
  minItems: 1
  maxItems: 9

dma-coherent: true

iommus:
  maxItems: 1

resets:
  maxItems: 1

interconnects:
  maxItems: 2

interconnect-names:
  items:
    - const: usb-ddr
    - const: apps-usb

Core·PHY wakeup interrupt

117-153

interrupt는 3~19개입니다. `dwc_usb3`는 DWC3 core interrupt, `pwr_event`는 기타 power event wakeup입니다. `hs_phy_irq`는 DP/DM 또는 QUSB2 PHY interrupt와 상호 배타적입니다.

QUSB2 target은 별도 DP/DM IRQ 대신 `qusb2_phy` 하나를 사용하고 `QUSB2PHY_INTR_CTRL`에서 DPSE/DMSE를 구성합니다. `dp_hs_phy_irq`와 `dm_hs_phy_irq`는 DP/DM pad 변화를 직접 반영하며 비-QUSB2 target wakeup에 쓰이지만 SDM670, SDM845, SM6350은 예외입니다. `ss_phy_irq`는 SuperSpeed remote wakeup용입니다.

`qcom,select-utmi-as-pipe-clk`는 SSPHY 없이 HS/FS/LS만 쓸 때 USB3 `pipe_clk` 요구를 끕니다. controller는 wakeup source가 될 수 있습니다.

  interrupts:
    description: |
      Different types of interrupts are used based on HS PHY used on target:
        - dwc_usb3: Core DWC3 interrupt
        - pwr_event: Used for wakeup based on other power events.
        - hs_phy_irq: Apart from DP/DM/QUSB2 PHY interrupts, there is
                       hs_phy_irq which is not triggered by default and its
                       functionality is mutually exclusive to that of
                       {dp/dm}_hs_phy_irq and qusb2_phy_irq.
        - qusb2_phy: SoCs with QUSB2 PHY do not have separate DP/DM IRQs and
                      expose only a single IRQ whose behavior can be modified
                      by the QUSB2PHY_INTR_CTRL register. The required DPSE/
                      DMSE configuration is done in QUSB2PHY_INTR_CTRL register
                      of PHY address space.
        - {dp/dm}_hs_phy_irq: These IRQ's directly reflect changes on the DP/
                               DM pads of the SoC. These are used for wakeup
                               only on SoCs with non-QUSB2 targets with
                               exception of SDM670/SDM845/SM6350.
        - ss_phy_irq: Used for remote wakeup in Super Speed mode of operation.
    minItems: 3
    maxItems: 19

  interrupt-names:
    minItems: 3
    maxItems: 19

  qcom,select-utmi-as-pipe-clk:
    description:
      If present, disable USB3 pipe_clk requirement.
      Used when dwc3 operates without SSPHY and only
      HS/FS/LS modes are supported.
    type: boolean

  wakeup-source: true

# Required child node:

여섯 필수 속성과 공통 DWC3 schema

154-163

필수 속성은 `compatible`, `reg`, `clocks`, `clock-names`, `interrupts`, `interrupt-names`의 여섯 개입니다. 공통 `snps,dwc3-common.yaml`을 직접 상속하고 이후 compatible별 배열 제약을 적용합니다.

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - interrupts
  - interrupt-names

allOf:
  - $ref: snps,dwc3-common.yaml#

IPQ4019·5332·8064 clock

164-196

IPQ4019과 IPQ5332는 최대 세 clock을 `core`, `sleep`, `mock_utmi` 순서로 사용합니다. IPQ8064는 `core` 하나만 사용하며 SS에는 최소 125 MHz, HS에는 최소 60 MHz가 필요합니다.

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,ipq4019-dwc3
            - qcom,ipq5332-dwc3
  then:
    properties:
      clocks:
        maxItems: 3
      clock-names:
        items:
          - const: core
          - const: sleep
          - const: mock_utmi

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,ipq8064-dwc3
  then:
    properties:
      clocks:
        items:
          - description: Master/Core clock, has to be >= 125 MHz
              for SS operation and >= 60MHz for HS operation.
      clock-names:
        items:
          - const: core

5-clock 계열과 IPQ6018

197-250

IPQ9574, MSM8953/8996/8998, QCS8300, SA8775P, SC7180/7280, SDM670/845, SDX55/65/75, SM6350은 최대 다섯 clock을 `cfg_noc`, `core`, `iface`, `sleep`, `mock_utmi` 순서로 사용합니다.

IPQ6018은 3~4개입니다. 세 항목은 `core`, `sleep`, `mock_utmi`, 네 항목은 맨 앞에 `cfg_noc`을 추가합니다.

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,ipq9574-dwc3
            - qcom,msm8953-dwc3
            - qcom,msm8996-dwc3
            - qcom,msm8998-dwc3
            - qcom,qcs8300-dwc3
            - qcom,sa8775p-dwc3
            - qcom,sc7180-dwc3
            - qcom,sc7280-dwc3
            - qcom,sdm670-dwc3
            - qcom,sdm845-dwc3
            - qcom,sdx55-dwc3
            - qcom,sdx65-dwc3
            - qcom,sdx75-dwc3
            - qcom,sm6350-dwc3
  then:
    properties:
      clocks:
        maxItems: 5
      clock-names:
        items:
          - const: cfg_noc
          - const: core
          - const: iface
          - const: sleep
          - const: mock_utmi

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,ipq6018-dwc3
  then:
    properties:
      clocks:
        minItems: 3
        maxItems: 4
      clock-names:
        oneOf:
          - items:
              - const: core
              - const: sleep
              - const: mock_utmi
          - items:
              - const: cfg_noc
              - const: core
              - const: sleep
              - const: mock_utmi

두 종류 4-clock 배열

251-287

IPQ8074와 QDU1000은 최대 네 clock을 `cfg_noc`, `core`, `sleep`, `mock_utmi` 순서로 사용합니다.

IPQ5018, MSM8994, QCS404도 최대 네 개지만 `core`, `iface`, `sleep`, `mock_utmi` 순서입니다.

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,ipq8074-dwc3
            - qcom,qdu1000-dwc3
  then:
    properties:
      clocks:
        maxItems: 4
      clock-names:
        items:
          - const: cfg_noc
          - const: core
          - const: sleep
          - const: mock_utmi

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,ipq5018-dwc3
            - qcom,msm8994-dwc3
            - qcom,qcs404-dwc3
  then:
    properties:
      clocks:
        maxItems: 4
      clock-names:
        items:
          - const: core
          - const: iface
          - const: sleep
          - const: mock_utmi

9-clock NOC와 SDM660

288-337

SC8280XP·X1E80100의 single-port 및 multi-port variant는 최대 아홉 clock을 `cfg_noc`, `core`, `iface`, `sleep`, `mock_utmi`, `noc_aggr`, `noc_aggr_north`, `noc_aggr_south`, `noc_sys` 순서로 사용합니다.

SDM660은 4~5개입니다. 다섯 항목은 `cfg_noc`, `core`, `iface`, `sleep`, `mock_utmi`, 네 항목은 여기서 `iface`를 뺀 배열입니다.

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,sc8280xp-dwc3
            - qcom,sc8280xp-dwc3-mp
            - qcom,x1e80100-dwc3
            - qcom,x1e80100-dwc3-mp
  then:
    properties:
      clocks:
        maxItems: 9
      clock-names:
        items:
          - const: cfg_noc
          - const: core
          - const: iface
          - const: sleep
          - const: mock_utmi
          - const: noc_aggr
          - const: noc_aggr_north
          - const: noc_aggr_south
          - const: noc_sys

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,sdm660-dwc3
  then:
    properties:
      clocks:
        minItems: 4
        maxItems: 5
      clock-names:
        oneOf:
          - items:
              - const: cfg_noc
              - const: core
              - const: iface
              - const: sleep
              - const: mock_utmi
          - items:
              - const: cfg_noc
              - const: core
              - const: sleep
              - const: mock_utmi

Milos·XO clock 계열과 SM8350

338-389

Milos, QCM2290, QCS615, SAR2130P, SC8180X single/multi-port, SM6115/6125/8150/8250/8450/8550/8650은 최소 여섯 clock을 사용하며 기본 순서는 `cfg_noc`, `core`, `iface`, `sleep`, `mock_utmi`, `xo`입니다.

SM8350은 5~6개 clock을 사용합니다. 첫 다섯 이름은 `cfg_noc`, `core`, `iface`, `sleep`, `mock_utmi`이고 여섯째 `xo`는 선택적입니다.

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,milos-dwc3
            - qcom,qcm2290-dwc3
            - qcom,qcs615-dwc3
            - qcom,sar2130p-dwc3
            - qcom,sc8180x-dwc3
            - qcom,sc8180x-dwc3-mp
            - qcom,sm6115-dwc3
            - qcom,sm6125-dwc3
            - qcom,sm8150-dwc3
            - qcom,sm8250-dwc3
            - qcom,sm8450-dwc3
            - qcom,sm8550-dwc3
            - qcom,sm8650-dwc3
  then:
    properties:
      clocks:
        minItems: 6
      clock-names:
        items:
          - const: cfg_noc
          - const: core
          - const: iface
          - const: sleep
          - const: mock_utmi
          - const: xo

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,sm8350-dwc3
  then:
    properties:
      clocks:
        minItems: 5
        maxItems: 6
      clock-names:
        minItems: 5
        items:
          - const: cfg_noc
          - const: core
          - const: iface
          - const: sleep
          - const: mock_utmi
          - const: xo

Core가 포함된 QUSB2 interrupt 배열

390-436

IPQ5018/6018/8074, MSM8953/8998은 3~4개 interrupt를 `dwc_usb3`, `pwr_event`, `qusb2_phy`, 선택 `ss_phy_irq` 순서로 사용합니다.

MSM8996, QCS404, SDM660, SM6115/6125는 4~5개를 `dwc_usb3`, `pwr_event`, `qusb2_phy`, `hs_phy_irq`, 선택 `ss_phy_irq` 순서로 사용합니다.

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,ipq5018-dwc3
            - qcom,ipq6018-dwc3
            - qcom,ipq8074-dwc3
            - qcom,msm8953-dwc3
            - qcom,msm8998-dwc3
  then:
    properties:
      interrupts:
        minItems: 3
        maxItems: 4
      interrupt-names:
        minItems: 3
        items:
          - const: dwc_usb3
          - const: pwr_event
          - const: qusb2_phy
          - const: ss_phy_irq

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,msm8996-dwc3
            - qcom,qcs404-dwc3
            - qcom,sdm660-dwc3
            - qcom,sm6115-dwc3
            - qcom,sm6125-dwc3
  then:
    properties:
      interrupts:
        minItems: 4
        maxItems: 5
      interrupt-names:
        minItems: 4
        items:
          - const: dwc_usb3
          - const: pwr_event
          - const: qusb2_phy
          - const: hs_phy_irq
          - const: ss_phy_irq

Core가 포함된 DP/DM interrupt 배열

437-474

IPQ5332는 최대 네 interrupt를 `dwc_usb3`, `pwr_event`, `dp_hs_phy_irq`, `dm_hs_phy_irq` 순서로 사용합니다.

Milos와 single-port X1E80100은 4~5개를 `dwc_usb3`, `pwr_event`, `dp_hs_phy_irq`, `dm_hs_phy_irq`, 선택 `ss_phy_irq` 순서로 사용합니다.

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,ipq5332-dwc3
  then:
    properties:
      interrupts:
        maxItems: 4
      interrupt-names:
        items:
          - const: dwc_usb3
          - const: pwr_event
          - const: dp_hs_phy_irq
          - const: dm_hs_phy_irq

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,milos-dwc3
            - qcom,x1e80100-dwc3
  then:
    properties:
      interrupts:
        minItems: 4
        maxItems: 5
      interrupt-names:
        minItems: 4
        items:
          - const: dwc_usb3
          - const: pwr_event
          - const: dp_hs_phy_irq
          - const: dm_hs_phy_irq
          - const: ss_phy_irq

5~6개 core·wakeup interrupt

475-518

열거된 IPQ4019/8064, MSM8994, QCS615/8300, QDU1000, SA8775P, SC7180/7280/8180X/8280XP, SDM670/845, SDX55/65/75, SM4250/6350/8150/8250/8350/8450/8550/8650은 5~6개 interrupt를 사용합니다.

이름은 `dwc_usb3`, `pwr_event`, `hs_phy_irq`, `dp_hs_phy_irq`, `dm_hs_phy_irq`, 선택 `ss_phy_irq` 순서입니다.

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,ipq4019-dwc3
            - qcom,ipq8064-dwc3
            - qcom,msm8994-dwc3
            - qcom,qcs615-dwc3
            - qcom,qcs8300-dwc3
            - qcom,qdu1000-dwc3
            - qcom,sa8775p-dwc3
            - qcom,sc7180-dwc3
            - qcom,sc7280-dwc3
            - qcom,sc8180x-dwc3
            - qcom,sc8280xp-dwc3
            - qcom,sdm670-dwc3
            - qcom,sdm845-dwc3
            - qcom,sdx55-dwc3
            - qcom,sdx65-dwc3
            - qcom,sdx75-dwc3
            - qcom,sm4250-dwc3
            - qcom,sm6350-dwc3
            - qcom,sm8150-dwc3
            - qcom,sm8250-dwc3
            - qcom,sm8350-dwc3
            - qcom,sm8450-dwc3
            - qcom,sm8550-dwc3
            - qcom,sm8650-dwc3
  then:
    properties:
      interrupts:
        minItems: 5
        maxItems: 6
      interrupt-names:
        minItems: 5
        items:
          - const: dwc_usb3
          - const: pwr_event
          - const: hs_phy_irq
          - const: dp_hs_phy_irq
          - const: dm_hs_phy_irq
          - const: ss_phy_irq

Multi-port 11개·19개 interrupt

519-577

SC8180X-MP와 X1E80100-MP는 정확히 11개 interrupt를 사용합니다. `dwc_usb3` 뒤에 두 port의 `pwr_event`, `hs_phy`, 각 port DP/DM pair, 두 `ss_phy`가 이어집니다.

SC8280XP-MP는 정확히 19개입니다. `dwc_usb3` 뒤에 port 1~4의 `pwr_event`, `hs_phy`, DP/DM pair 8개, `ss_phy_1`, `ss_phy_2`가 이어집니다.

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,sc8180x-dwc3-mp
            - qcom,x1e80100-dwc3-mp
  then:
    properties:
      interrupts:
        minItems: 11
        maxItems: 11
      interrupt-names:
        items:
          - const: dwc_usb3
          - const: pwr_event_1
          - const: pwr_event_2
          - const: hs_phy_1
          - const: hs_phy_2
          - const: dp_hs_phy_1
          - const: dm_hs_phy_1
          - const: dp_hs_phy_2
          - const: dm_hs_phy_2
          - const: ss_phy_1
          - const: ss_phy_2

- if:
    properties:
      compatible:
        contains:
          enum:
            - qcom,sc8280xp-dwc3-mp
  then:
    properties:
      interrupts:
        minItems: 19
        maxItems: 19
      interrupt-names:
        items:
          - const: dwc_usb3
          - const: pwr_event_1
          - const: pwr_event_2
          - const: pwr_event_3
          - const: pwr_event_4
          - const: hs_phy_1
          - const: hs_phy_2
          - const: hs_phy_3
          - const: hs_phy_4
          - const: dp_hs_phy_1
          - const: dm_hs_phy_1
          - const: dp_hs_phy_2
          - const: dm_hs_phy_2
          - const: dp_hs_phy_3
          - const: dm_hs_phy_3
          - const: dp_hs_phy_4
          - const: dm_hs_phy_4
          - const: ss_phy_1
          - const: ss_phy_2

SDM845 combined DWC3 예제

578-628

평가되지 않은 추가 속성은 허용하지 않습니다. 예제 `usb@a600000`은 `qcom,sdm845-dwc3`, `qcom,snps-dwc3`와 0x100000-byte register 영역을 사용합니다.

clock은 `cfg_noc`, `core`, `iface`, `sleep`, `mock_utmi`이고 mock UTMI는 19.2 MHz, master는 150 MHz입니다. interrupt는 GIC SPI 133 `dwc_usb3`, 130 `pwr_event`, 131 `hs_phy_irq`, 489 `dp_hs_phy_irq`, 488 `dm_hs_phy_irq`, 486 `ss_phy_irq` 순서입니다.

USB30 primary power domain·reset, Apps SMMU stream 0x740을 연결하고 U2 suspend PHY와 LPM quirk를 끕니다. USB2·USB3 PHY 이름은 `usb2-phy`, `usb3-phy`입니다.

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/clock/qcom,gcc-sdm845.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    soc {
        #address-cells = <2>;
        #size-cells = <2>;

        usb@a600000 {
            compatible = "qcom,sdm845-dwc3", "qcom,snps-dwc3";
            reg = <0 0x0a600000 0 0x100000>;

            clocks = <&gcc GCC_CFG_NOC_USB3_PRIM_AXI_CLK>,
                     <&gcc GCC_USB30_PRIM_MASTER_CLK>,
                     <&gcc GCC_AGGRE_USB3_PRIM_AXI_CLK>,
                     <&gcc GCC_USB30_PRIM_SLEEP_CLK>,
                     <&gcc GCC_USB30_PRIM_MOCK_UTMI_CLK>;
            clock-names = "cfg_noc",
                          "core",
                          "iface",
                          "sleep",
                          "mock_utmi";

            assigned-clocks = <&gcc GCC_USB30_PRIM_MOCK_UTMI_CLK>,
                          <&gcc GCC_USB30_PRIM_MASTER_CLK>;
            assigned-clock-rates = <19200000>, <150000000>;

            interrupts = <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 130 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 489 IRQ_TYPE_EDGE_BOTH>,
                         <GIC_SPI 488 IRQ_TYPE_EDGE_BOTH>,
                         <GIC_SPI 486 IRQ_TYPE_LEVEL_HIGH>;
            interrupt-names = "dwc_usb3", "pwr_event", "hs_phy_irq",
                          "dp_hs_phy_irq", "dm_hs_phy_irq", "ss_phy_irq";

            power-domains = <&gcc USB30_PRIM_GDSC>;

            resets = <&gcc GCC_USB30_PRIM_BCR>;

            iommus = <&apps_smmu 0x740 0>;
            snps,dis_u2_susphy_quirk;
            snps,dis_enblslpm_quirk;
            phys = <&usb_1_hsphy>, <&usb_1_ssphy>;
            phy-names = "usb2-phy", "usb3-phy";
        };
    };
...