Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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,sm7150-mdss.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm SM7150 Display MDSS
8
9maintainers:
10 - Danila Tikhonov <danila@jiaxyga.com>
11
12description:
13 SM7150 MSM Mobile Display Subsystem(MDSS), which encapsulates sub-blocks like
14 DPU display controller, DSI and DP interfaces etc.
15
16$ref: /schemas/display/msm/mdss-common.yaml#
17
18properties:
19 compatible:
20 const: qcom,sm7150-mdss
21
22 clocks:
23 items:
24 - description: Display ahb clock from gcc
25 - description: Display hf axi clock
26 - description: Display sf axi clock
27 - description: Display core clock
28
29 clock-names:
30 items:
31 - const: iface
32 - const: bus
33 - const: nrt_bus
34 - const: core
35
36 iommus:
37 maxItems: 1
38
39 interconnects:
40 items:
41 - description: Interconnect path from mdp0 port to the data bus
42 - description: Interconnect path from mdp1 port to the data bus
43 - description: Interconnect path from CPU to the reg bus
44
45 interconnect-names:
46 items:
47 - const: mdp0-mem
48 - const: mdp1-mem
49 - const: cpu-cfg
50
51patternProperties:
52 "^display-controller@[0-9a-f]+$":
53 type: object
54 additionalProperties: true
55 properties:
56 compatible:
57 const: qcom,sm7150-dpu
58
59 "^displayport-controller@[0-9a-f]+$":
60 type: object
61 additionalProperties: true
62 properties:
63 compatible:
64 const: qcom,sm7150-dp
65
66 "^dsi@[0-9a-f]+$":
67 type: object
68 additionalProperties: true
69 properties:
70 compatible:
71 items:
72 - const: qcom,sm7150-dsi-ctrl
73 - const: qcom,mdss-dsi-ctrl
74
75 "^phy@[0-9a-f]+$":
76 type: object
77 additionalProperties: true
78 properties:
79 compatible:
80 const: qcom,dsi-phy-10nm
81
82required:
83 - compatible
84
85unevaluatedProperties: false
86
87examples:
88 - |
89 #include <dt-bindings/clock/qcom,rpmh.h>
90 #include <dt-bindings/interconnect/qcom,icc.h>
91 #include <dt-bindings/interconnect/qcom,sm7150-rpmh.h>
92 #include <dt-bindings/interrupt-controller/arm-gic.h>
93 #include <dt-bindings/power/qcom,rpmhpd.h>
94
95 display-subsystem@ae00000 {
96 compatible = "qcom,sm7150-mdss";
97 reg = <0x0ae00000 0x1000>;
98 reg-names = "mdss";
99
100 power-domains = <&dispcc_mdss_gdsc>;
101
102 clocks = <&dispcc_mdss_ahb_clk>,
103 <&gcc_disp_hf_axi_clk>,
104 <&gcc_disp_sf_axi_clk>,
105 <&dispcc_mdss_mdp_clk>;
106 clock-names = "iface",
107 "bus",
108 "nrt_bus",
109 "core";
110
111 interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
112 interrupt-controller;
113 #interrupt-cells = <1>;
114
115 interconnects = <&mmss_noc MASTER_MDP_PORT0 QCOM_ICC_TAG_ALWAYS
116 &mc_virt SLAVE_EBI_CH0 QCOM_ICC_TAG_ALWAYS>,
117 <&mmss_noc MASTER_MDP_PORT1 QCOM_ICC_TAG_ALWAYS
118 &mc_virt SLAVE_EBI_CH0 QCOM_ICC_TAG_ALWAYS>,
119 <&gem_noc MASTER_AMPSS_M0 QCOM_ICC_TAG_ACTIVE_ONLY
120 &config_noc SLAVE_DISPLAY_CFG QCOM_ICC_TAG_ACTIVE_ONLY>;
121 interconnect-names = "mdp0-mem",
122 "mdp1-mem",
123 "cpu-cfg";
124
125 iommus = <&apps_smmu 0x800 0x440>;
126
127 #address-cells = <1>;
128 #size-cells = <1>;
129 ranges;
130
131 display-controller@ae01000 {
132 compatible = "qcom,sm7150-dpu";
133 reg = <0x0ae01000 0x8f000>,
134 <0x0aeb0000 0x2008>;
135 reg-names = "mdp", "vbif";
136
137 clocks = <&gcc_disp_hf_axi_clk>,
138 <&dispcc_mdss_ahb_clk>,
139 <&dispcc_mdss_rot_clk>,
140 <&dispcc_mdss_mdp_lut_clk>,
141 <&dispcc_mdss_mdp_clk>,
142 <&dispcc_mdss_vsync_clk>;
143 clock-names = "bus",
144 "iface",
145 "rot",
146 "lut",
147 "core",
148 "vsync";
149
150 assigned-clocks = <&dispcc_mdss_vsync_clk>;
151 assigned-clock-rates = <19200000>;
152
153 operating-points-v2 = <&mdp_opp_table>;
154 power-domains = <&rpmhpd RPMHPD_CX>;
155
156 interrupt-parent = <&mdss>;
157 interrupts = <0>;
158
159 ports {
160 #address-cells = <1>;
161 #size-cells = <0>;
162
163 port@0 {
164 reg = <0>;
165 dpu_intf1_out: endpoint {
166 remote-endpoint = <&mdss_dsi0_in>;
167 };
168 };
169
170 port@1 {
171 reg = <1>;
172 dpu_intf2_out: endpoint {
173 remote-endpoint = <&mdss_dsi1_in>;
174 };
175 };
176
177 port@2 {
178 reg = <2>;
179 dpu_intf0_out: endpoint {
180 remote-endpoint = <&dp_in>;
181 };
182 };
183 };
184
185 mdp_opp_table: opp-table {
186 compatible = "operating-points-v2";
187
188 opp-19200000 {
189 opp-hz = /bits/ 64 <19200000>;
190 required-opps = <&rpmhpd_opp_min_svs>;
191 };
192
193 opp-200000000 {
194 opp-hz = /bits/ 64 <200000000>;
195 required-opps = <&rpmhpd_opp_low_svs>;
196 };
197
198 opp-300000000 {
199 opp-hz = /bits/ 64 <300000000>;
200 required-opps = <&rpmhpd_opp_svs>;
201 };
202
203 opp-344000000 {
204 opp-hz = /bits/ 64 <344000000>;
205 required-opps = <&rpmhpd_opp_svs_l1>;
206 };
207
208 opp-430000000 {
209 opp-hz = /bits/ 64 <430000000>;
210 required-opps = <&rpmhpd_opp_nom>;
211 };
212 };
213 };
214
215 dsi@ae94000 {
216 compatible = "qcom,sm7150-dsi-ctrl",
217 "qcom,mdss-dsi-ctrl";
218 reg = <0x0ae94000 0x400>;
219 reg-names = "dsi_ctrl";
220
221 interrupt-parent = <&mdss>;
222 interrupts = <4>;
223
224 clocks = <&dispcc_mdss_byte0_clk>,
225 <&dispcc_mdss_byte0_intf_clk>,
226 <&dispcc_mdss_pclk0_clk>,
227 <&dispcc_mdss_esc0_clk>,
228 <&dispcc_mdss_ahb_clk>,
229 <&gcc_disp_hf_axi_clk>;
230 clock-names = "byte",
231 "byte_intf",
232 "pixel",
233 "core",
234 "iface",
235 "bus";
236
237 assigned-clocks = <&dispcc_mdss_byte0_clk_src>,
238 <&dispcc_mdss_pclk0_clk_src>;
239 assigned-clock-parents = <&mdss_dsi0_phy 0>,
240 <&mdss_dsi0_phy 1>;
241
242 operating-points-v2 = <&dsi_opp_table>;
243 power-domains = <&rpmhpd RPMHPD_CX>;
244
245 phys = <&mdss_dsi0_phy>;
246 phy-names = "dsi";
247
248 #address-cells = <1>;
249 #size-cells = <0>;
250
251 ports {
252 #address-cells = <1>;
253 #size-cells = <0>;
254
255 port@0 {
256 reg = <0>;
257 mdss_dsi0_in: endpoint {
258 remote-endpoint = <&dpu_intf1_out>;
259 };
260 };
261
262 port@1 {
263 reg = <1>;
264 mdss_dsi0_out: endpoint {
265 };
266 };
267 };
268
269 dsi_opp_table: opp-table {
270 compatible = "operating-points-v2";
271
272 opp-180000000 {
273 opp-hz = /bits/ 64 <180000000>;
274 required-opps = <&rpmhpd_opp_low_svs>;
275 };
276
277 opp-275000000 {
278 opp-hz = /bits/ 64 <275000000>;
279 required-opps = <&rpmhpd_opp_svs>;
280 };
281
282 opp-358000000 {
283 opp-hz = /bits/ 64 <358000000>;
284 required-opps = <&rpmhpd_opp_svs_l1>;
285 };
286 };
287 };
288
289 mdss_dsi0_phy: phy@ae94400 {
290 compatible = "qcom,dsi-phy-10nm";
291 reg = <0x0ae94400 0x200>,
292 <0x0ae94600 0x280>,
293 <0x0ae94a00 0x1e0>;
294 reg-names = "dsi_phy",
295 "dsi_phy_lane",
296 "dsi_pll";
297
298 #clock-cells = <1>;
299 #phy-cells = <0>;
300
301 clocks = <&dispcc_mdss_ahb_clk>,
302 <&rpmhcc RPMH_CXO_CLK>;
303 clock-names = "iface", "ref";
304 vdds-supply = <&vdda_mipi_dsi0_pll>;
305 };
306
307 dsi@ae96000 {
308 compatible = "qcom,sm7150-dsi-ctrl",
309 "qcom,mdss-dsi-ctrl";
310 reg = <0x0ae96000 0x400>;
311 reg-names = "dsi_ctrl";
312
313 interrupt-parent = <&mdss>;
314 interrupts = <5>;
315
316 clocks = <&dispcc_mdss_byte1_clk>,
317 <&dispcc_mdss_byte1_intf_clk>,
318 <&dispcc_mdss_pclk1_clk>,
319 <&dispcc_mdss_esc1_clk>,
320 <&dispcc_mdss_ahb_clk>,
321 <&gcc_disp_hf_axi_clk>;
322 clock-names = "byte",
323 "byte_intf",
324 "pixel",
325 "core",
326 "iface",
327 "bus";
328
329 assigned-clocks = <&dispcc_mdss_byte1_clk_src>,
330 <&dispcc_mdss_pclk1_clk_src>;
331 assigned-clock-parents = <&mdss_dsi1_phy 0>,
332 <&mdss_dsi1_phy 1>;
333
334 operating-points-v2 = <&dsi_opp_table>;
335 power-domains = <&rpmhpd RPMHPD_CX>;
336
337 phys = <&mdss_dsi1_phy>;
338 phy-names = "dsi";
339
340 #address-cells = <1>;
341 #size-cells = <0>;
342
343 ports {
344 #address-cells = <1>;
345 #size-cells = <0>;
346
347 port@0 {
348 reg = <0>;
349 mdss_dsi1_in: endpoint {
350 remote-endpoint = <&dpu_intf2_out>;
351 };
352 };
353
354 port@1 {
355 reg = <1>;
356 mdss_dsi1_out: endpoint {
357 };
358 };
359 };
360 };
361
362 mdss_dsi1_phy: phy@ae96400 {
363 compatible = "qcom,dsi-phy-10nm";
364 reg = <0x0ae96400 0x200>,
365 <0x0ae96600 0x280>,
366 <0x0ae96a00 0x1e0>;
367 reg-names = "dsi_phy",
368 "dsi_phy_lane",
369 "dsi_pll";
370
371 #clock-cells = <1>;
372 #phy-cells = <0>;
373
374 clocks = <&dispcc_mdss_ahb_clk>,
375 <&rpmhcc RPMH_CXO_CLK>;
376 clock-names = "iface", "ref";
377 vdds-supply = <&vdda_mipi_dsi1_pll>;
378 };
379
380 displayport-controller@ae90000 {
381 compatible = "qcom,sm7150-dp";
382 reg = <0xae90000 0x200>,
383 <0xae90200 0x200>,
384 <0xae90400 0xc00>,
385 <0xae91000 0x400>,
386 <0xae91400 0x400>;
387
388 interrupt-parent = <&mdss>;
389 interrupts = <12>;
390
391 clocks = <&dispcc_mdss_ahb_clk>,
392 <&dispcc_mdss_dp_aux_clk>,
393 <&dispcc_mdss_dp_link_clk>,
394 <&dispcc_mdss_dp_link_intf_clk>,
395 <&dispcc_mdss_dp_pixel_clk>;
396 clock-names = "core_iface",
397 "core_aux",
398 "ctrl_link",
399 "ctrl_link_iface",
400 "stream_pixel";
401
402 assigned-clocks = <&dispcc_mdss_dp_link_clk_src>,
403 <&dispcc_mdss_dp_pixel_clk_src>;
404 assigned-clock-parents = <&dp_phy 0>,
405 <&dp_phy 1>;
406
407 operating-points-v2 = <&dp_opp_table>;
408 power-domains = <&rpmhpd RPMHPD_CX>;
409
410 phys = <&dp_phy>;
411 phy-names = "dp";
412
413 #sound-dai-cells = <0>;
414
415 ports {
416 #address-cells = <1>;
417 #size-cells = <0>;
418
419 port@0 {
420 reg = <0>;
421 dp_in: endpoint {
422 remote-endpoint = <&dpu_intf0_out>;
423 };
424 };
425
426 port@1 {
427 reg = <1>;
428 dp_out: endpoint {
429 };
430 };
431 };
432
433 dp_opp_table: opp-table {
434 compatible = "operating-points-v2";
435
436 opp-160000000 {
437 opp-hz = /bits/ 64 <160000000>;
438 required-opps = <&rpmhpd_opp_low_svs>;
439 };
440
441 opp-270000000 {
442 opp-hz = /bits/ 64 <270000000>;
443 required-opps = <&rpmhpd_opp_svs>;
444 };
445
446 opp-540000000 {
447 opp-hz = /bits/ 64 <540000000>;
448 required-opps = <&rpmhpd_opp_svs_l1>;
449 };
450
451 opp-810000000 {
452 opp-hz = /bits/ 64 <810000000>;
453 required-opps = <&rpmhpd_opp_nom>;
454 };
455 };
456 };
457 };
458...