xref: /linux/Documentation/devicetree/bindings/display/msm/qcom,sc7280-mdss.yaml (revision 6f17ab9a63e670bd62a287f95e3982f99eafd77e)
1# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/display/msm/qcom,sc7280-mdss.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm SC7280 Display MDSS
8
9maintainers:
10  - Krishna Manikandan <quic_mkrishn@quicinc.com>
11
12description:
13  Device tree bindings for MSM Mobile Display Subsystem (MDSS) that encapsulates
14  sub-blocks like DPU display controller, DSI and DP interfaces etc. Device tree
15  bindings of MDSS are mentioned for SC7280.
16
17$ref: /schemas/display/msm/mdss-common.yaml#
18
19properties:
20  compatible:
21    const: qcom,sc7280-mdss
22
23  clocks:
24    items:
25      - description: Display AHB clock from gcc
26      - description: Display AHB clock from dispcc
27      - description: Display core clock
28
29  clock-names:
30    items:
31      - const: iface
32      - const: ahb
33      - const: core
34
35  iommus:
36    maxItems: 1
37
38  interconnects:
39    items:
40      - description: Interconnect path from mdp0 port to the data bus
41      - description: Interconnect path from CPU to the reg bus
42
43  interconnect-names:
44    items:
45      - const: mdp0-mem
46      - const: cpu-cfg
47
48patternProperties:
49  "^display-controller@[0-9a-f]+$":
50    type: object
51    additionalProperties: true
52
53    properties:
54      compatible:
55        const: qcom,sc7280-dpu
56
57  "^displayport-controller@[0-9a-f]+$":
58    type: object
59    additionalProperties: true
60
61    properties:
62      compatible:
63        const: qcom,sc7280-dp
64
65  "^dsi@[0-9a-f]+$":
66    type: object
67    additionalProperties: true
68
69    properties:
70      compatible:
71        items:
72          - const: qcom,sc7280-dsi-ctrl
73          - const: qcom,mdss-dsi-ctrl
74
75  "^edp@[0-9a-f]+$":
76    type: object
77    additionalProperties: true
78
79    properties:
80      compatible:
81        const: qcom,sc7280-edp
82
83  "^phy@[0-9a-f]+$":
84    type: object
85    additionalProperties: true
86
87    properties:
88      compatible:
89        enum:
90          - qcom,sc7280-dsi-phy-7nm
91          - qcom,sc7280-edp-phy
92
93required:
94  - compatible
95
96unevaluatedProperties: false
97
98examples:
99  - |
100    #include <dt-bindings/clock/qcom,dispcc-sc7280.h>
101    #include <dt-bindings/clock/qcom,gcc-sc7280.h>
102    #include <dt-bindings/clock/qcom,rpmh.h>
103    #include <dt-bindings/interrupt-controller/arm-gic.h>
104    #include <dt-bindings/interconnect/qcom,sc7280.h>
105    #include <dt-bindings/power/qcom-rpmpd.h>
106
107    display-subsystem@ae00000 {
108        #address-cells = <1>;
109        #size-cells = <1>;
110        compatible = "qcom,sc7280-mdss";
111        reg = <0xae00000 0x1000>;
112        reg-names = "mdss";
113        power-domains = <&dispcc DISP_CC_MDSS_CORE_GDSC>;
114        clocks = <&gcc GCC_DISP_AHB_CLK>,
115                 <&dispcc DISP_CC_MDSS_AHB_CLK>,
116                 <&dispcc DISP_CC_MDSS_MDP_CLK>;
117        clock-names = "iface",
118                      "ahb",
119                      "core";
120
121        interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
122        interrupt-controller;
123        #interrupt-cells = <1>;
124
125        interconnects = <&mmss_noc MASTER_MDP0 &mc_virt SLAVE_EBI1>,
126                        <&gem_noc MASTER_APPSS_PROC &cnoc2 SLAVE_DISPLAY_CFG>;
127        interconnect-names = "mdp0-mem",
128                             "cpu-cfg";
129
130        iommus = <&apps_smmu 0x900 0x402>;
131        ranges;
132
133        display-controller@ae01000 {
134            compatible = "qcom,sc7280-dpu";
135            reg = <0x0ae01000 0x8f000>,
136                  <0x0aeb0000 0x2008>;
137
138            reg-names = "mdp", "vbif";
139
140            clocks = <&gcc GCC_DISP_HF_AXI_CLK>,
141                     <&gcc GCC_DISP_SF_AXI_CLK>,
142                     <&dispcc DISP_CC_MDSS_AHB_CLK>,
143                     <&dispcc DISP_CC_MDSS_MDP_LUT_CLK>,
144                     <&dispcc DISP_CC_MDSS_MDP_CLK>,
145                     <&dispcc DISP_CC_MDSS_VSYNC_CLK>;
146            clock-names = "bus",
147                          "nrt_bus",
148                          "iface",
149                          "lut",
150                          "core",
151                          "vsync";
152
153            interrupt-parent = <&mdss>;
154            interrupts = <0>;
155            power-domains = <&rpmhpd SC7280_CX>;
156            operating-points-v2 = <&mdp_opp_table>;
157
158            ports {
159                #address-cells = <1>;
160                #size-cells = <0>;
161
162                port@0 {
163                    reg = <0>;
164                    dpu_intf1_out: endpoint {
165                        remote-endpoint = <&dsi0_in>;
166                    };
167                };
168
169                port@1 {
170                    reg = <1>;
171                    dpu_intf5_out: endpoint {
172                        remote-endpoint = <&edp_in>;
173                    };
174                };
175
176                port@2 {
177                    reg = <2>;
178                    dpu_intf0_out: endpoint {
179                        remote-endpoint = <&dp_in>;
180                    };
181                };
182            };
183        };
184
185        dsi@ae94000 {
186            compatible = "qcom,sc7280-dsi-ctrl", "qcom,mdss-dsi-ctrl";
187            reg = <0x0ae94000 0x400>;
188            reg-names = "dsi_ctrl";
189
190            interrupt-parent = <&mdss>;
191            interrupts = <4>;
192
193            clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK>,
194                     <&dispcc DISP_CC_MDSS_BYTE0_INTF_CLK>,
195                     <&dispcc DISP_CC_MDSS_PCLK0_CLK>,
196                     <&dispcc DISP_CC_MDSS_ESC0_CLK>,
197                     <&dispcc DISP_CC_MDSS_AHB_CLK>,
198                     <&gcc GCC_DISP_HF_AXI_CLK>;
199            clock-names = "byte",
200                          "byte_intf",
201                          "pixel",
202                          "core",
203                          "iface",
204                          "bus";
205
206            assigned-clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK_SRC>,
207                              <&dispcc DISP_CC_MDSS_PCLK0_CLK_SRC>;
208            assigned-clock-parents = <&mdss_dsi_phy 0>, <&mdss_dsi_phy 1>;
209
210            operating-points-v2 = <&dsi_opp_table>;
211            power-domains = <&rpmhpd SC7280_CX>;
212
213            phys = <&mdss_dsi_phy>;
214            phy-names = "dsi";
215
216            #address-cells = <1>;
217            #size-cells = <0>;
218
219            ports {
220                #address-cells = <1>;
221                #size-cells = <0>;
222
223                port@0 {
224                    reg = <0>;
225                    dsi0_in: endpoint {
226                        remote-endpoint = <&dpu_intf1_out>;
227                    };
228                };
229
230                port@1 {
231                    reg = <1>;
232                    dsi0_out: endpoint {
233                    };
234                };
235            };
236
237            dsi_opp_table: opp-table {
238                compatible = "operating-points-v2";
239
240                opp-187500000 {
241                    opp-hz = /bits/ 64 <187500000>;
242                    required-opps = <&rpmhpd_opp_low_svs>;
243                };
244
245                opp-300000000 {
246                    opp-hz = /bits/ 64 <300000000>;
247                    required-opps = <&rpmhpd_opp_svs>;
248                };
249
250                opp-358000000 {
251                    opp-hz = /bits/ 64 <358000000>;
252                    required-opps = <&rpmhpd_opp_svs_l1>;
253                };
254            };
255        };
256
257        mdss_dsi_phy: phy@ae94400 {
258            compatible = "qcom,sc7280-dsi-phy-7nm";
259            reg = <0x0ae94400 0x200>,
260                  <0x0ae94600 0x280>,
261                  <0x0ae94900 0x280>;
262            reg-names = "dsi_phy",
263                        "dsi_phy_lane",
264                        "dsi_pll";
265
266            #clock-cells = <1>;
267            #phy-cells = <0>;
268
269            clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
270                     <&rpmhcc RPMH_CXO_CLK>;
271            clock-names = "iface", "ref";
272
273            vdds-supply = <&vreg_dsi_supply>;
274        };
275
276        edp@aea0000 {
277            compatible = "qcom,sc7280-edp";
278            pinctrl-names = "default";
279            pinctrl-0 = <&edp_hot_plug_det>;
280
281            reg = <0xaea0000 0x200>,
282                  <0xaea0200 0x200>,
283                  <0xaea0400 0xc00>,
284                  <0xaea1000 0x400>,
285                  <0xaea1400 0x400>;
286
287            interrupt-parent = <&mdss>;
288            interrupts = <14>;
289
290            clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
291                     <&dispcc DISP_CC_MDSS_EDP_AUX_CLK>,
292                     <&dispcc DISP_CC_MDSS_EDP_LINK_CLK>,
293                     <&dispcc DISP_CC_MDSS_EDP_LINK_INTF_CLK>,
294                     <&dispcc DISP_CC_MDSS_EDP_PIXEL_CLK>;
295            clock-names = "core_iface",
296                          "core_aux",
297                          "ctrl_link",
298                          "ctrl_link_iface",
299                          "stream_pixel";
300            assigned-clocks = <&dispcc DISP_CC_MDSS_EDP_LINK_CLK_SRC>,
301                              <&dispcc DISP_CC_MDSS_EDP_PIXEL_CLK_SRC>;
302            assigned-clock-parents = <&mdss_edp_phy 0>, <&mdss_edp_phy 1>;
303
304            phys = <&mdss_edp_phy>;
305            phy-names = "dp";
306
307            operating-points-v2 = <&edp_opp_table>;
308            power-domains = <&rpmhpd SC7280_CX>;
309
310            ports {
311                #address-cells = <1>;
312                #size-cells = <0>;
313
314                port@0 {
315                    reg = <0>;
316                    edp_in: endpoint {
317                        remote-endpoint = <&dpu_intf5_out>;
318                    };
319                };
320
321                port@1 {
322                    reg = <1>;
323                    mdss_edp_out: endpoint { };
324                };
325            };
326
327            edp_opp_table: opp-table {
328                compatible = "operating-points-v2";
329
330                opp-160000000 {
331                    opp-hz = /bits/ 64 <160000000>;
332                    required-opps = <&rpmhpd_opp_low_svs>;
333                };
334
335                opp-270000000 {
336                    opp-hz = /bits/ 64 <270000000>;
337                    required-opps = <&rpmhpd_opp_svs>;
338                };
339
340                opp-540000000 {
341                    opp-hz = /bits/ 64 <540000000>;
342                    required-opps = <&rpmhpd_opp_nom>;
343                };
344
345                opp-810000000 {
346                    opp-hz = /bits/ 64 <810000000>;
347                    required-opps = <&rpmhpd_opp_nom>;
348                };
349            };
350        };
351
352        mdss_edp_phy: phy@aec2a00 {
353            compatible = "qcom,sc7280-edp-phy";
354
355            reg = <0xaec2a00 0x19c>,
356                  <0xaec2200 0xa0>,
357                  <0xaec2600 0xa0>,
358                  <0xaec2000 0x1c0>;
359
360            clocks = <&rpmhcc RPMH_CXO_CLK>,
361                     <&gcc GCC_EDP_CLKREF_EN>;
362            clock-names = "aux",
363                          "cfg_ahb";
364
365            #clock-cells = <1>;
366            #phy-cells = <0>;
367        };
368
369        displayport-controller@ae90000 {
370            compatible = "qcom,sc7280-dp";
371
372            reg = <0xae90000 0x200>,
373                  <0xae90200 0x200>,
374                  <0xae90400 0xc00>,
375                  <0xae91000 0x400>,
376                  <0xae91400 0x400>;
377
378            interrupt-parent = <&mdss>;
379            interrupts = <12>;
380
381            clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
382                     <&dispcc DISP_CC_MDSS_DP_AUX_CLK>,
383                     <&dispcc DISP_CC_MDSS_DP_LINK_CLK>,
384                     <&dispcc DISP_CC_MDSS_DP_LINK_INTF_CLK>,
385                     <&dispcc DISP_CC_MDSS_DP_PIXEL_CLK>;
386            clock-names = "core_iface",
387                          "core_aux",
388                          "ctrl_link",
389                          "ctrl_link_iface",
390                          "stream_pixel";
391            assigned-clocks = <&dispcc DISP_CC_MDSS_DP_LINK_CLK_SRC>,
392                              <&dispcc DISP_CC_MDSS_DP_PIXEL_CLK_SRC>;
393            assigned-clock-parents = <&dp_phy 0>, <&dp_phy 1>;
394            phys = <&dp_phy>;
395            phy-names = "dp";
396
397            operating-points-v2 = <&dp_opp_table>;
398            power-domains = <&rpmhpd SC7280_CX>;
399
400            #sound-dai-cells = <0>;
401
402            ports {
403                #address-cells = <1>;
404                #size-cells = <0>;
405
406                port@0 {
407                    reg = <0>;
408                    dp_in: endpoint {
409                        remote-endpoint = <&dpu_intf0_out>;
410                    };
411                };
412
413                port@1 {
414                    reg = <1>;
415                    dp_out: endpoint { };
416                };
417            };
418
419            dp_opp_table: opp-table {
420                compatible = "operating-points-v2";
421
422                opp-160000000 {
423                    opp-hz = /bits/ 64 <160000000>;
424                    required-opps = <&rpmhpd_opp_low_svs>;
425                };
426
427                opp-270000000 {
428                    opp-hz = /bits/ 64 <270000000>;
429                    required-opps = <&rpmhpd_opp_svs>;
430                };
431
432                opp-540000000 {
433                    opp-hz = /bits/ 64 <540000000>;
434                    required-opps = <&rpmhpd_opp_svs_l1>;
435                };
436
437                opp-810000000 {
438                    opp-hz = /bits/ 64 <810000000>;
439                    required-opps = <&rpmhpd_opp_nom>;
440                };
441            };
442        };
443    };
444...
445