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,sdm670-mdss.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm SDM670 Display MDSS
8
9maintainers:
10  - Richard Acayan <mailingradian@gmail.com>
11
12description:
13  SDM670 MSM Mobile Display Subsystem (MDSS), which encapsulates sub-blocks
14  like DPU display controller, DSI and DP interfaces etc.
15
16$ref: /schemas/display/msm/mdss-common.yaml#
17
18properties:
19  compatible:
20    const: qcom,sdm670-mdss
21
22  clocks:
23    items:
24      - description: Display AHB clock from gcc
25      - description: Display core clock
26
27  clock-names:
28    items:
29      - const: iface
30      - const: core
31
32  iommus:
33    maxItems: 2
34
35  interconnects:
36    maxItems: 2
37
38  interconnect-names:
39    maxItems: 2
40
41patternProperties:
42  "^display-controller@[0-9a-f]+$":
43    type: object
44    additionalProperties: true
45
46    properties:
47      compatible:
48        const: qcom,sdm670-dpu
49
50  "^displayport-controller@[0-9a-f]+$":
51    type: object
52    additionalProperties: true
53
54    properties:
55      compatible:
56        const: qcom,sdm670-dp
57
58  "^dsi@[0-9a-f]+$":
59    type: object
60    additionalProperties: true
61
62    properties:
63      compatible:
64        contains:
65          const: qcom,sdm670-dsi-ctrl
66
67  "^phy@[0-9a-f]+$":
68    type: object
69    additionalProperties: true
70
71    properties:
72      compatible:
73        const: qcom,dsi-phy-10nm
74
75required:
76  - compatible
77
78unevaluatedProperties: false
79
80examples:
81  - |
82    #include <dt-bindings/clock/qcom,dispcc-sdm845.h>
83    #include <dt-bindings/clock/qcom,gcc-sdm845.h>
84    #include <dt-bindings/clock/qcom,rpmh.h>
85    #include <dt-bindings/interconnect/qcom,sdm670-rpmh.h>
86    #include <dt-bindings/interrupt-controller/arm-gic.h>
87    #include <dt-bindings/power/qcom-rpmpd.h>
88
89    display-subsystem@ae00000 {
90        compatible = "qcom,sdm670-mdss";
91        reg = <0x0ae00000 0x1000>;
92        reg-names = "mdss";
93        power-domains = <&dispcc MDSS_GDSC>;
94
95        clocks = <&gcc GCC_DISP_AHB_CLK>,
96                 <&dispcc DISP_CC_MDSS_MDP_CLK>;
97        clock-names = "iface", "core";
98
99        interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
100        interrupt-controller;
101        #interrupt-cells = <1>;
102
103        interconnects = <&mmss_noc MASTER_MDP_PORT0 0 &mem_noc SLAVE_EBI_CH0 0>,
104                        <&mmss_noc MASTER_MDP_PORT1 0 &mem_noc SLAVE_EBI_CH0 0>;
105        interconnect-names = "mdp0-mem", "mdp1-mem";
106
107        iommus = <&apps_smmu 0x880 0x8>,
108                 <&apps_smmu 0xc80 0x8>;
109
110        #address-cells = <1>;
111        #size-cells = <1>;
112        ranges;
113
114        display-controller@ae01000 {
115            compatible = "qcom,sdm670-dpu";
116            reg = <0x0ae01000 0x8f000>,
117                  <0x0aeb0000 0x2008>;
118            reg-names = "mdp", "vbif";
119
120            clocks = <&gcc GCC_DISP_AXI_CLK>,
121                     <&dispcc DISP_CC_MDSS_AHB_CLK>,
122                     <&dispcc DISP_CC_MDSS_AXI_CLK>,
123                     <&dispcc DISP_CC_MDSS_MDP_CLK>,
124                     <&dispcc DISP_CC_MDSS_VSYNC_CLK>;
125            clock-names = "gcc-bus", "iface", "bus", "core", "vsync";
126
127            interrupt-parent = <&mdss>;
128            interrupts = <0>;
129            power-domains = <&rpmhpd SDM670_CX>;
130            operating-points-v2 = <&mdp_opp_table>;
131
132            ports {
133                #address-cells = <1>;
134                #size-cells = <0>;
135
136                port@0 {
137                    reg = <0>;
138                    dpu_intf1_out: endpoint {
139                        remote-endpoint = <&mdss_dsi0_in>;
140                    };
141                };
142
143                port@1 {
144                    reg = <1>;
145                    dpu_intf2_out: endpoint {
146                        remote-endpoint = <&mdss_dsi1_in>;
147                    };
148                };
149            };
150        };
151
152        dsi@ae94000 {
153            compatible = "qcom,sdm670-dsi-ctrl", "qcom,mdss-dsi-ctrl";
154            reg = <0x0ae94000 0x400>;
155            reg-names = "dsi_ctrl";
156
157            interrupt-parent = <&mdss>;
158            interrupts = <4>;
159
160            clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK>,
161                     <&dispcc DISP_CC_MDSS_BYTE0_INTF_CLK>,
162                     <&dispcc DISP_CC_MDSS_PCLK0_CLK>,
163                     <&dispcc DISP_CC_MDSS_ESC0_CLK>,
164                     <&dispcc DISP_CC_MDSS_AHB_CLK>,
165                     <&dispcc DISP_CC_MDSS_AXI_CLK>;
166            clock-names = "byte",
167                          "byte_intf",
168                          "pixel",
169                          "core",
170                          "iface",
171                          "bus";
172            assigned-clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK_SRC>,
173                              <&dispcc DISP_CC_MDSS_PCLK0_CLK_SRC>;
174            assigned-clock-parents = <&mdss_dsi0_phy 0>, <&mdss_dsi0_phy 1>;
175
176            operating-points-v2 = <&dsi_opp_table>;
177            power-domains = <&rpmhpd SDM670_CX>;
178
179            phys = <&mdss_dsi0_phy>;
180            phy-names = "dsi";
181
182            #address-cells = <1>;
183            #size-cells = <0>;
184
185            ports {
186                #address-cells = <1>;
187                #size-cells = <0>;
188
189                port@0 {
190                    reg = <0>;
191                    mdss_dsi0_in: endpoint {
192                        remote-endpoint = <&dpu_intf1_out>;
193                    };
194                };
195
196                port@1 {
197                    reg = <1>;
198                    mdss_dsi0_out: endpoint {
199                    };
200                };
201            };
202        };
203
204        mdss_dsi0_phy: phy@ae94400 {
205            compatible = "qcom,dsi-phy-10nm";
206            reg = <0x0ae94400 0x200>,
207                  <0x0ae94600 0x280>,
208                  <0x0ae94a00 0x1e0>;
209            reg-names = "dsi_phy",
210                        "dsi_phy_lane",
211                        "dsi_pll";
212
213            #clock-cells = <1>;
214            #phy-cells = <0>;
215
216            clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
217                     <&rpmhcc RPMH_CXO_CLK>;
218            clock-names = "iface", "ref";
219            vdds-supply = <&vreg_dsi_phy>;
220        };
221
222        dsi@ae96000 {
223            compatible = "qcom,sdm670-dsi-ctrl", "qcom,mdss-dsi-ctrl";
224            reg = <0x0ae96000 0x400>;
225            reg-names = "dsi_ctrl";
226
227            interrupt-parent = <&mdss>;
228            interrupts = <5>;
229
230            clocks = <&dispcc DISP_CC_MDSS_BYTE1_CLK>,
231                     <&dispcc DISP_CC_MDSS_BYTE1_INTF_CLK>,
232                     <&dispcc DISP_CC_MDSS_PCLK1_CLK>,
233                     <&dispcc DISP_CC_MDSS_ESC1_CLK>,
234                     <&dispcc DISP_CC_MDSS_AHB_CLK>,
235                     <&dispcc DISP_CC_MDSS_AXI_CLK>;
236            clock-names = "byte",
237                          "byte_intf",
238                          "pixel",
239                          "core",
240                          "iface",
241                          "bus";
242            assigned-clocks = <&dispcc DISP_CC_MDSS_BYTE1_CLK_SRC>,
243                              <&dispcc DISP_CC_MDSS_PCLK1_CLK_SRC>;
244            assigned-clock-parents = <&dsi1_phy 0>, <&dsi1_phy 1>;
245
246            operating-points-v2 = <&dsi_opp_table>;
247            power-domains = <&rpmhpd SDM670_CX>;
248
249            phys = <&dsi1_phy>;
250            phy-names = "dsi";
251
252            #address-cells = <1>;
253            #size-cells = <0>;
254
255            ports {
256                #address-cells = <1>;
257                #size-cells = <0>;
258
259                port@0 {
260                    reg = <0>;
261                    mdss_dsi1_in: endpoint {
262                        remote-endpoint = <&dpu_intf2_out>;
263                    };
264                };
265
266                port@1 {
267                    reg = <1>;
268                    mdss_dsi1_out: endpoint {
269                    };
270                };
271            };
272        };
273
274        mdss_dsi1_phy: phy@ae96400 {
275            compatible = "qcom,dsi-phy-10nm";
276            reg = <0x0ae96400 0x200>,
277                  <0x0ae96600 0x280>,
278                  <0x0ae96a00 0x10e>;
279            reg-names = "dsi_phy",
280                        "dsi_phy_lane",
281                        "dsi_pll";
282
283            #clock-cells = <1>;
284            #phy-cells = <0>;
285
286            clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
287                     <&rpmhcc RPMH_CXO_CLK>;
288            clock-names = "iface", "ref";
289            vdds-supply = <&vreg_dsi_phy>;
290        };
291    };
292...
293