1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/display/renesas,du.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Renesas R-Car Display Unit (DU)
8
9maintainers:
10  - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
11
12description: |
13  These DT bindings describe the Display Unit embedded in the Renesas R-Car
14  Gen1, R-Car Gen2, R-Car Gen3, RZ/G1 and RZ/G2 SoCs.
15
16properties:
17  compatible:
18    enum:
19      - renesas,du-r8a7742 # for RZ/G1H compatible DU
20      - renesas,du-r8a7743 # for RZ/G1M compatible DU
21      - renesas,du-r8a7744 # for RZ/G1N compatible DU
22      - renesas,du-r8a7745 # for RZ/G1E compatible DU
23      - renesas,du-r8a77470 # for RZ/G1C compatible DU
24      - renesas,du-r8a774a1 # for RZ/G2M compatible DU
25      - renesas,du-r8a774b1 # for RZ/G2N compatible DU
26      - renesas,du-r8a774c0 # for RZ/G2E compatible DU
27      - renesas,du-r8a774e1 # for RZ/G2H compatible DU
28      - renesas,du-r8a7779 # for R-Car H1 compatible DU
29      - renesas,du-r8a7790 # for R-Car H2 compatible DU
30      - renesas,du-r8a7791 # for R-Car M2-W compatible DU
31      - renesas,du-r8a7792 # for R-Car V2H compatible DU
32      - renesas,du-r8a7793 # for R-Car M2-N compatible DU
33      - renesas,du-r8a7794 # for R-Car E2 compatible DU
34      - renesas,du-r8a7795 # for R-Car H3 compatible DU
35      - renesas,du-r8a7796 # for R-Car M3-W compatible DU
36      - renesas,du-r8a77961 # for R-Car M3-W+ compatible DU
37      - renesas,du-r8a77965 # for R-Car M3-N compatible DU
38      - renesas,du-r8a77970 # for R-Car V3M compatible DU
39      - renesas,du-r8a77980 # for R-Car V3H compatible DU
40      - renesas,du-r8a77990 # for R-Car E3 compatible DU
41      - renesas,du-r8a77995 # for R-Car D3 compatible DU
42      - renesas,du-r8a779a0 # for R-Car V3U compatible DU
43
44  reg:
45    maxItems: 1
46
47  # See compatible-specific constraints below.
48  clocks: true
49  clock-names: true
50  interrupts:
51    description: Interrupt specifiers, one per DU channel
52  resets: true
53  reset-names: true
54
55  power-domains:
56    maxItems: 1
57
58  ports:
59    $ref: /schemas/graph.yaml#/properties/ports
60    description: |
61      The connections to the DU output video ports are modeled using the OF
62      graph bindings specified in Documentation/devicetree/bindings/graph.txt.
63      The number of ports and their assignment are model-dependent. Each port
64      shall have a single endpoint.
65
66    patternProperties:
67      "^port@[0-3]$":
68        $ref: /schemas/graph.yaml#/properties/port
69        unevaluatedProperties: false
70
71    required:
72      - port@0
73      - port@1
74
75    unevaluatedProperties: false
76
77  renesas,cmms:
78    $ref: "/schemas/types.yaml#/definitions/phandle-array"
79    items:
80      maxItems: 1
81    description:
82      A list of phandles to the CMM instances present in the SoC, one for each
83      available DU channel.
84
85  renesas,vsps:
86    $ref: "/schemas/types.yaml#/definitions/phandle-array"
87    items:
88      items:
89        - description: phandle to VSP instance that serves the DU channel
90        - description: Channel index identifying the LIF instance in that VSP
91    description:
92      A list of phandle and channel index tuples to the VSPs that handle the
93      memory interfaces for the DU channels.
94
95required:
96  - compatible
97  - reg
98  - clocks
99  - interrupts
100  - ports
101
102allOf:
103  - if:
104      properties:
105        compatible:
106          contains:
107            const: renesas,du-r8a7779
108    then:
109      properties:
110        clocks:
111          minItems: 1
112          items:
113            - description: Functional clock
114            - description: DU_DOTCLKIN0 input clock
115            - description: DU_DOTCLKIN1 input clock
116
117        clock-names:
118          minItems: 1
119          items:
120            - const: du.0
121            - pattern: '^dclkin\.[01]$'
122            - pattern: '^dclkin\.[01]$'
123
124        interrupts:
125          maxItems: 1
126
127        resets:
128          maxItems: 1
129
130        ports:
131          properties:
132            port@0:
133              description: DPAD 0
134            port@1:
135              description: DPAD 1
136            # port@2 is TCON, not supported yet
137            port@2: false
138            port@3: false
139
140          required:
141            - port@0
142            - port@1
143
144      required:
145        - interrupts
146
147  - if:
148      properties:
149        compatible:
150          contains:
151            enum:
152              - renesas,du-r8a7743
153              - renesas,du-r8a7744
154              - renesas,du-r8a7791
155              - renesas,du-r8a7793
156    then:
157      properties:
158        clocks:
159          minItems: 2
160          items:
161            - description: Functional clock for DU0
162            - description: Functional clock for DU1
163            - description: DU_DOTCLKIN0 input clock
164            - description: DU_DOTCLKIN1 input clock
165
166        clock-names:
167          minItems: 2
168          items:
169            - const: du.0
170            - const: du.1
171            - pattern: '^dclkin\.[01]$'
172            - pattern: '^dclkin\.[01]$'
173
174        interrupts:
175          maxItems: 2
176
177        resets:
178          maxItems: 1
179
180        reset-names:
181          items:
182            - const: du.0
183
184        ports:
185          properties:
186            port@0:
187              description: DPAD 0
188            port@1:
189              description: LVDS 0
190            # port@2 is TCON, not supported yet
191            port@2: false
192            port@3: false
193
194          required:
195            - port@0
196            - port@1
197
198      required:
199        - clock-names
200        - interrupts
201        - resets
202        - reset-names
203
204  - if:
205      properties:
206        compatible:
207          contains:
208            enum:
209              - renesas,du-r8a7745
210              - renesas,du-r8a7792
211    then:
212      properties:
213        clocks:
214          minItems: 2
215          items:
216            - description: Functional clock for DU0
217            - description: Functional clock for DU1
218            - description: DU_DOTCLKIN0 input clock
219            - description: DU_DOTCLKIN1 input clock
220
221        clock-names:
222          minItems: 2
223          items:
224            - const: du.0
225            - const: du.1
226            - pattern: '^dclkin\.[01]$'
227            - pattern: '^dclkin\.[01]$'
228
229        interrupts:
230          maxItems: 2
231
232        resets:
233          maxItems: 1
234
235        reset-names:
236          items:
237            - const: du.0
238
239        ports:
240          properties:
241            port@0:
242              description: DPAD 0
243            port@1:
244              description: DPAD 1
245            port@2: false
246            port@3: false
247
248          required:
249            - port@0
250            - port@1
251
252      required:
253        - clock-names
254        - interrupts
255        - resets
256        - reset-names
257
258  - if:
259      properties:
260        compatible:
261          contains:
262            enum:
263              - renesas,du-r8a7794
264    then:
265      properties:
266        clocks:
267          minItems: 2
268          items:
269            - description: Functional clock for DU0
270            - description: Functional clock for DU1
271            - description: DU_DOTCLKIN0 input clock
272            - description: DU_DOTCLKIN1 input clock
273
274        clock-names:
275          minItems: 2
276          items:
277            - const: du.0
278            - const: du.1
279            - pattern: '^dclkin\.[01]$'
280            - pattern: '^dclkin\.[01]$'
281
282        interrupts:
283          maxItems: 2
284
285        resets:
286          maxItems: 1
287
288        reset-names:
289          items:
290            - const: du.0
291
292        ports:
293          properties:
294            port@0:
295              description: DPAD 0
296            port@1:
297              description: DPAD 1
298            # port@2 is TCON, not supported yet
299            port@2: false
300            port@3: false
301
302          required:
303            - port@0
304            - port@1
305
306      required:
307        - clock-names
308        - interrupts
309        - resets
310        - reset-names
311
312  - if:
313      properties:
314        compatible:
315          contains:
316            enum:
317              - renesas,du-r8a77470
318    then:
319      properties:
320        clocks:
321          minItems: 2
322          items:
323            - description: Functional clock for DU0
324            - description: Functional clock for DU1
325            - description: DU_DOTCLKIN0 input clock
326            - description: DU_DOTCLKIN1 input clock
327
328        clock-names:
329          minItems: 2
330          items:
331            - const: du.0
332            - const: du.1
333            - pattern: '^dclkin\.[01]$'
334            - pattern: '^dclkin\.[01]$'
335
336        interrupts:
337          maxItems: 2
338
339        resets:
340          maxItems: 1
341
342        reset-names:
343          items:
344            - const: du.0
345
346        ports:
347          properties:
348            port@0:
349              description: DPAD 0
350            port@1:
351              description: DPAD 1
352            port@2:
353              description: LVDS 0
354            # port@3 is DVENC, not supported yet
355            port@3: false
356
357          required:
358            - port@0
359            - port@1
360            - port@2
361
362      required:
363        - clock-names
364        - interrupts
365        - resets
366        - reset-names
367
368  - if:
369      properties:
370        compatible:
371          contains:
372            enum:
373              - renesas,du-r8a7742
374              - renesas,du-r8a7790
375    then:
376      properties:
377        clocks:
378          minItems: 3
379          items:
380            - description: Functional clock for DU0
381            - description: Functional clock for DU1
382            - description: Functional clock for DU2
383            - description: DU_DOTCLKIN0 input clock
384            - description: DU_DOTCLKIN1 input clock
385            - description: DU_DOTCLKIN2 input clock
386
387        clock-names:
388          minItems: 3
389          items:
390            - const: du.0
391            - const: du.1
392            - const: du.2
393            - pattern: '^dclkin\.[012]$'
394            - pattern: '^dclkin\.[012]$'
395            - pattern: '^dclkin\.[012]$'
396
397        interrupts:
398          maxItems: 3
399
400        resets:
401          maxItems: 1
402
403        reset-names:
404          items:
405            - const: du.0
406
407        ports:
408          properties:
409            port@0:
410              description: DPAD 0
411            port@1:
412              description: LVDS 0
413            port@2:
414              description: LVDS 1
415            # port@3 is TCON, not supported yet
416            port@3: false
417
418          required:
419            - port@0
420            - port@1
421            - port@2
422
423      required:
424        - clock-names
425        - interrupts
426        - resets
427        - reset-names
428
429  - if:
430      properties:
431        compatible:
432          contains:
433            enum:
434              - renesas,du-r8a7795
435    then:
436      properties:
437        clocks:
438          minItems: 4
439          items:
440            - description: Functional clock for DU0
441            - description: Functional clock for DU1
442            - description: Functional clock for DU2
443            - description: Functional clock for DU4
444            - description: DU_DOTCLKIN0 input clock
445            - description: DU_DOTCLKIN1 input clock
446            - description: DU_DOTCLKIN2 input clock
447            - description: DU_DOTCLKIN3 input clock
448
449        clock-names:
450          minItems: 4
451          items:
452            - const: du.0
453            - const: du.1
454            - const: du.2
455            - const: du.3
456            - pattern: '^dclkin\.[0123]$'
457            - pattern: '^dclkin\.[0123]$'
458            - pattern: '^dclkin\.[0123]$'
459            - pattern: '^dclkin\.[0123]$'
460
461        interrupts:
462          maxItems: 4
463
464        resets:
465          maxItems: 2
466
467        reset-names:
468          items:
469            - const: du.0
470            - const: du.2
471
472        ports:
473          properties:
474            port@0:
475              description: DPAD 0
476            port@1:
477              description: HDMI 0
478            port@2:
479              description: HDMI 1
480            port@3:
481              description: LVDS 0
482
483          required:
484            - port@0
485            - port@1
486            - port@2
487            - port@3
488
489        renesas,cmms:
490          minItems: 4
491
492        renesas,vsps:
493          minItems: 4
494
495      required:
496        - clock-names
497        - interrupts
498        - resets
499        - reset-names
500        - renesas,vsps
501
502  - if:
503      properties:
504        compatible:
505          contains:
506            enum:
507              - renesas,du-r8a774a1
508              - renesas,du-r8a7796
509              - renesas,du-r8a77961
510    then:
511      properties:
512        clocks:
513          minItems: 3
514          items:
515            - description: Functional clock for DU0
516            - description: Functional clock for DU1
517            - description: Functional clock for DU2
518            - description: DU_DOTCLKIN0 input clock
519            - description: DU_DOTCLKIN1 input clock
520            - description: DU_DOTCLKIN2 input clock
521
522        clock-names:
523          minItems: 3
524          items:
525            - const: du.0
526            - const: du.1
527            - const: du.2
528            - pattern: '^dclkin\.[012]$'
529            - pattern: '^dclkin\.[012]$'
530            - pattern: '^dclkin\.[012]$'
531
532        interrupts:
533          maxItems: 3
534
535        resets:
536          maxItems: 2
537
538        reset-names:
539          items:
540            - const: du.0
541            - const: du.2
542
543        ports:
544          properties:
545            port@0:
546              description: DPAD 0
547            port@1:
548              description: HDMI 0
549            port@2:
550              description: LVDS 0
551            port@3: false
552
553          required:
554            - port@0
555            - port@1
556            - port@2
557
558        renesas,cmms:
559          minItems: 3
560
561        renesas,vsps:
562          minItems: 3
563
564      required:
565        - clock-names
566        - interrupts
567        - resets
568        - reset-names
569        - renesas,vsps
570
571  - if:
572      properties:
573        compatible:
574          contains:
575            enum:
576              - renesas,du-r8a774b1
577              - renesas,du-r8a774e1
578              - renesas,du-r8a77965
579    then:
580      properties:
581        clocks:
582          minItems: 3
583          items:
584            - description: Functional clock for DU0
585            - description: Functional clock for DU1
586            - description: Functional clock for DU3
587            - description: DU_DOTCLKIN0 input clock
588            - description: DU_DOTCLKIN1 input clock
589            - description: DU_DOTCLKIN3 input clock
590
591        clock-names:
592          minItems: 3
593          items:
594            - const: du.0
595            - const: du.1
596            - const: du.3
597            - pattern: '^dclkin\.[013]$'
598            - pattern: '^dclkin\.[013]$'
599            - pattern: '^dclkin\.[013]$'
600
601        interrupts:
602          maxItems: 3
603
604        resets:
605          maxItems: 2
606
607        reset-names:
608          items:
609            - const: du.0
610            - const: du.3
611
612        ports:
613          properties:
614            port@0:
615              description: DPAD 0
616            port@1:
617              description: HDMI 0
618            port@2:
619              description: LVDS 0
620            port@3: false
621
622          required:
623            - port@0
624            - port@1
625            - port@2
626
627        renesas,cmms:
628          minItems: 3
629
630        renesas,vsps:
631          minItems: 3
632
633      required:
634        - clock-names
635        - interrupts
636        - resets
637        - reset-names
638        - renesas,vsps
639
640  - if:
641      properties:
642        compatible:
643          contains:
644            enum:
645              - renesas,du-r8a77970
646              - renesas,du-r8a77980
647    then:
648      properties:
649        clocks:
650          minItems: 1
651          items:
652            - description: Functional clock for DU0
653            - description: DU_DOTCLKIN0 input clock
654
655        clock-names:
656          minItems: 1
657          items:
658            - const: du.0
659            - const: dclkin.0
660
661        interrupts:
662          maxItems: 1
663
664        resets:
665          maxItems: 1
666
667        reset-names:
668          items:
669            - const: du.0
670
671        ports:
672          properties:
673            port@0:
674              description: DPAD 0
675            port@1:
676              description: LVDS 0
677            port@2: false
678            port@3: false
679
680          required:
681            - port@0
682            - port@1
683
684        renesas,vsps:
685          minItems: 1
686
687      required:
688        - clock-names
689        - interrupts
690        - resets
691        - reset-names
692        - renesas,vsps
693
694  - if:
695      properties:
696        compatible:
697          contains:
698            enum:
699              - renesas,du-r8a774c0
700              - renesas,du-r8a77990
701              - renesas,du-r8a77995
702    then:
703      properties:
704        clocks:
705          minItems: 2
706          items:
707            - description: Functional clock for DU0
708            - description: Functional clock for DU1
709            - description: DU_DOTCLKIN0 input clock
710            - description: DU_DOTCLKIN1 input clock
711
712        clock-names:
713          minItems: 2
714          items:
715            - const: du.0
716            - const: du.1
717            - pattern: '^dclkin\.[01]$'
718            - pattern: '^dclkin\.[01]$'
719
720        interrupts:
721          maxItems: 2
722
723        resets:
724          maxItems: 1
725
726        reset-names:
727          items:
728            - const: du.0
729
730        ports:
731          properties:
732            port@0:
733              description: DPAD 0
734            port@1:
735              description: LVDS 0
736            port@2:
737              description: LVDS 1
738            # port@3 is TCON, not supported yet
739            port@3: false
740
741          required:
742            - port@0
743            - port@1
744            - port@2
745
746        renesas,cmms:
747          minItems: 2
748
749        renesas,vsps:
750          minItems: 2
751
752      required:
753        - clock-names
754        - interrupts
755        - resets
756        - reset-names
757        - renesas,vsps
758
759  - if:
760      properties:
761        compatible:
762          contains:
763            enum:
764              - renesas,du-r8a779a0
765    then:
766      properties:
767        clocks:
768          items:
769            - description: Functional clock
770
771        clock-names:
772          items:
773            - const: du.0
774
775        interrupts:
776          maxItems: 2
777
778        resets:
779          maxItems: 1
780
781        reset-names:
782          items:
783            - const: du.0
784
785        ports:
786          properties:
787            port@0:
788              description: DSI 0
789            port@1:
790              description: DSI 1
791            port@2: false
792            port@3: false
793
794          required:
795            - port@0
796            - port@1
797
798        renesas,vsps:
799          minItems: 2
800
801      required:
802        - clock-names
803        - interrupts
804        - resets
805        - reset-names
806        - renesas,vsps
807
808additionalProperties: false
809
810examples:
811  # R-Car H3 ES2.0 DU
812  - |
813    #include <dt-bindings/clock/renesas-cpg-mssr.h>
814    #include <dt-bindings/interrupt-controller/arm-gic.h>
815
816    display@feb00000 {
817        compatible = "renesas,du-r8a7795";
818        reg = <0xfeb00000 0x80000>;
819        interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
820                     <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>,
821                     <GIC_SPI 269 IRQ_TYPE_LEVEL_HIGH>,
822                     <GIC_SPI 270 IRQ_TYPE_LEVEL_HIGH>;
823        clocks = <&cpg CPG_MOD 724>,
824                 <&cpg CPG_MOD 723>,
825                 <&cpg CPG_MOD 722>,
826                 <&cpg CPG_MOD 721>;
827        clock-names = "du.0", "du.1", "du.2", "du.3";
828        resets = <&cpg 724>, <&cpg 722>;
829        reset-names = "du.0", "du.2";
830
831        renesas,cmms = <&cmm0>, <&cmm1>, <&cmm2>, <&cmm3>;
832        renesas,vsps = <&vspd0 0>, <&vspd1 0>, <&vspd2 0>, <&vspd0 1>;
833
834        ports {
835            #address-cells = <1>;
836            #size-cells = <0>;
837
838            port@0 {
839                reg = <0>;
840                endpoint {
841                    remote-endpoint = <&adv7123_in>;
842                };
843            };
844            port@1 {
845                reg = <1>;
846                endpoint {
847                    remote-endpoint = <&dw_hdmi0_in>;
848                };
849            };
850            port@2 {
851                reg = <2>;
852                endpoint {
853                    remote-endpoint = <&dw_hdmi1_in>;
854                };
855            };
856            port@3 {
857                reg = <3>;
858                endpoint {
859                    remote-endpoint = <&lvds0_in>;
860                };
861            };
862        };
863    };
864
865...
866