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,sm8750-mdss.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm SM8750 Display MDSS
8
9maintainers:
10 - Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
11
12description:
13 SM8650 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,sm8750-mdss
21
22 clocks:
23 items:
24 - description: Display AHB
25 - description: Display hf AXI
26 - description: Display core
27
28 iommus:
29 maxItems: 1
30
31 interconnects:
32 items:
33 - description: Interconnect path from mdp0 port to the data bus
34 - description: Interconnect path from CPU to the reg bus
35
36 interconnect-names:
37 items:
38 - const: mdp0-mem
39 - const: cpu-cfg
40
41patternProperties:
42 "^display-controller@[0-9a-f]+$":
43 type: object
44 additionalProperties: true
45 properties:
46 compatible:
47 const: qcom,sm8750-dpu
48
49 "^displayport-controller@[0-9a-f]+$":
50 type: object
51 additionalProperties: true
52 properties:
53 compatible:
54 contains:
55 const: qcom,sm8750-dp
56
57 "^dsi@[0-9a-f]+$":
58 type: object
59 additionalProperties: true
60 properties:
61 compatible:
62 contains:
63 const: qcom,sm8750-dsi-ctrl
64
65 "^phy@[0-9a-f]+$":
66 type: object
67 additionalProperties: true
68 properties:
69 compatible:
70 const: qcom,sm8750-dsi-phy-3nm
71
72required:
73 - compatible
74
75unevaluatedProperties: false
76
77examples:
78 - |
79 #include <dt-bindings/clock/qcom,rpmh.h>
80 #include <dt-bindings/interconnect/qcom,icc.h>
81 #include <dt-bindings/interconnect/qcom,sm8750-rpmh.h>
82 #include <dt-bindings/interrupt-controller/arm-gic.h>
83 #include <dt-bindings/phy/phy-qcom-qmp.h>
84 #include <dt-bindings/power/qcom,rpmhpd.h>
85
86 display-subsystem@ae00000 {
87 compatible = "qcom,sm8750-mdss";
88 reg = <0x0ae00000 0x1000>;
89 reg-names = "mdss";
90
91 interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
92
93 clocks = <&disp_cc_mdss_ahb_clk>,
94 <&gcc_disp_hf_axi_clk>,
95 <&disp_cc_mdss_mdp_clk>;
96
97 interconnects = <&mmss_noc MASTER_MDP QCOM_ICC_TAG_ALWAYS
98 &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
99 <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_ONLY
100 &config_noc SLAVE_DISPLAY_CFG QCOM_ICC_TAG_ACTIVE_ONLY>;
101 interconnect-names = "mdp0-mem",
102 "cpu-cfg";
103
104 resets = <&disp_cc_mdss_core_bcr>;
105
106 power-domains = <&mdss_gdsc>;
107
108 iommus = <&apps_smmu 0x800 0x2>;
109
110 interrupt-controller;
111 #interrupt-cells = <1>;
112
113 #address-cells = <1>;
114 #size-cells = <1>;
115 ranges;
116
117 display-controller@ae01000 {
118 compatible = "qcom,sm8750-dpu";
119 reg = <0x0ae01000 0x93000>,
120 <0x0aeb0000 0x2008>;
121 reg-names = "mdp",
122 "vbif";
123
124 interrupts-extended = <&mdss 0>;
125
126 clocks = <&gcc_disp_hf_axi_clk>,
127 <&disp_cc_mdss_ahb_clk>,
128 <&disp_cc_mdss_mdp_lut_clk>,
129 <&disp_cc_mdss_mdp_clk>,
130 <&disp_cc_mdss_vsync_clk>;
131 clock-names = "nrt_bus",
132 "iface",
133 "lut",
134 "core",
135 "vsync";
136
137 assigned-clocks = <&disp_cc_mdss_vsync_clk>;
138 assigned-clock-rates = <19200000>;
139
140 operating-points-v2 = <&mdp_opp_table>;
141
142 power-domains = <&rpmhpd RPMHPD_MMCX>;
143
144 ports {
145 #address-cells = <1>;
146 #size-cells = <0>;
147
148 port@0 {
149 reg = <0>;
150
151 dpu_intf1_out: endpoint {
152 remote-endpoint = <&mdss_dsi0_in>;
153 };
154 };
155
156 port@1 {
157 reg = <1>;
158
159 dpu_intf2_out: endpoint {
160 remote-endpoint = <&mdss_dsi1_in>;
161 };
162 };
163
164 port@2 {
165 reg = <2>;
166
167 dpu_intf0_out: endpoint {
168 remote-endpoint = <&mdss_dp0_in>;
169 };
170 };
171 };
172
173 mdp_opp_table: opp-table {
174 compatible = "operating-points-v2";
175
176 opp-207000000 {
177 opp-hz = /bits/ 64 <207000000>;
178 required-opps = <&rpmhpd_opp_low_svs>;
179 };
180
181 opp-337000000 {
182 opp-hz = /bits/ 64 <337000000>;
183 required-opps = <&rpmhpd_opp_svs>;
184 };
185
186 opp-417000000 {
187 opp-hz = /bits/ 64 <417000000>;
188 required-opps = <&rpmhpd_opp_svs_l1>;
189 };
190
191 opp-532000000 {
192 opp-hz = /bits/ 64 <532000000>;
193 required-opps = <&rpmhpd_opp_nom>;
194 };
195
196 opp-575000000 {
197 opp-hz = /bits/ 64 <575000000>;
198 required-opps = <&rpmhpd_opp_nom_l1>;
199 };
200 };
201 };
202
203 dsi@ae94000 {
204 compatible = "qcom,sm8750-dsi-ctrl", "qcom,mdss-dsi-ctrl";
205 reg = <0x0ae94000 0x400>;
206 reg-names = "dsi_ctrl";
207
208 interrupts-extended = <&mdss 4>;
209
210 clocks = <&disp_cc_mdss_byte0_clk>,
211 <&disp_cc_mdss_byte0_intf_clk>,
212 <&disp_cc_mdss_pclk0_clk>,
213 <&disp_cc_mdss_esc0_clk>,
214 <&disp_cc_mdss_ahb_clk>,
215 <&gcc_disp_hf_axi_clk>,
216 <&mdss_dsi0_phy 1>,
217 <&mdss_dsi0_phy 0>,
218 <&disp_cc_esync0_clk>,
219 <&disp_cc_osc_clk>,
220 <&disp_cc_mdss_byte0_clk_src>,
221 <&disp_cc_mdss_pclk0_clk_src>;
222 clock-names = "byte",
223 "byte_intf",
224 "pixel",
225 "core",
226 "iface",
227 "bus",
228 "dsi_pll_pixel",
229 "dsi_pll_byte",
230 "esync",
231 "osc",
232 "byte_src",
233 "pixel_src";
234
235 operating-points-v2 = <&mdss_dsi_opp_table>;
236
237 power-domains = <&rpmhpd RPMHPD_MMCX>;
238
239 phys = <&mdss_dsi0_phy>;
240 phy-names = "dsi";
241
242 vdda-supply = <&vreg_l3g_1p2>;
243
244 #address-cells = <1>;
245 #size-cells = <0>;
246
247 ports {
248 #address-cells = <1>;
249 #size-cells = <0>;
250
251 port@0 {
252 reg = <0>;
253
254 mdss_dsi0_in: endpoint {
255 remote-endpoint = <&dpu_intf1_out>;
256 };
257 };
258
259 port@1 {
260 reg = <1>;
261
262 mdss_dsi0_out: endpoint {
263 remote-endpoint = <&panel0_in>;
264 data-lanes = <0 1 2 3>;
265 };
266 };
267 };
268
269 mdss_dsi_opp_table: opp-table {
270 compatible = "operating-points-v2";
271
272 opp-187500000 {
273 opp-hz = /bits/ 64 <187500000>;
274 required-opps = <&rpmhpd_opp_low_svs>;
275 };
276
277 opp-300000000 {
278 opp-hz = /bits/ 64 <300000000>;
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@ae95000 {
290 compatible = "qcom,sm8750-dsi-phy-3nm";
291 reg = <0x0ae95000 0x200>,
292 <0x0ae95200 0x280>,
293 <0x0ae95500 0x400>;
294 reg-names = "dsi_phy",
295 "dsi_phy_lane",
296 "dsi_pll";
297
298 clocks = <&disp_cc_mdss_ahb_clk>,
299 <&rpmhcc RPMH_CXO_CLK>;
300 clock-names = "iface",
301 "ref";
302
303 vdds-supply = <&vreg_l3i_0p88>;
304
305 #clock-cells = <1>;
306 #phy-cells = <0>;
307 };
308
309 dsi@ae96000 {
310 compatible = "qcom,sm8750-dsi-ctrl", "qcom,mdss-dsi-ctrl";
311 reg = <0x0ae96000 0x400>;
312 reg-names = "dsi_ctrl";
313
314 interrupts-extended = <&mdss 5>;
315
316 clocks = <&disp_cc_mdss_byte1_clk>,
317 <&disp_cc_mdss_byte1_intf_clk>,
318 <&disp_cc_mdss_pclk1_clk>,
319 <&disp_cc_mdss_esc1_clk>,
320 <&disp_cc_mdss_ahb_clk>,
321 <&gcc_disp_hf_axi_clk>,
322 <&mdss_dsi1_phy 1>,
323 <&mdss_dsi1_phy 0>,
324 <&disp_cc_esync1_clk>,
325 <&disp_cc_osc_clk>,
326 <&disp_cc_mdss_byte1_clk_src>,
327 <&disp_cc_mdss_pclk1_clk_src>;
328 clock-names = "byte",
329 "byte_intf",
330 "pixel",
331 "core",
332 "iface",
333 "bus",
334 "dsi_pll_pixel",
335 "dsi_pll_byte",
336 "esync",
337 "osc",
338 "byte_src",
339 "pixel_src";
340
341 operating-points-v2 = <&mdss_dsi_opp_table>;
342
343 power-domains = <&rpmhpd RPMHPD_MMCX>;
344
345 phys = <&mdss_dsi1_phy>;
346 phy-names = "dsi";
347
348 #address-cells = <1>;
349 #size-cells = <0>;
350
351 ports {
352 #address-cells = <1>;
353 #size-cells = <0>;
354
355 port@0 {
356 reg = <0>;
357
358 mdss_dsi1_in: endpoint {
359 remote-endpoint = <&dpu_intf2_out>;
360 };
361 };
362
363 port@1 {
364 reg = <1>;
365
366 mdss_dsi1_out: endpoint {
367 };
368 };
369 };
370 };
371
372 mdss_dsi1_phy: phy@ae97000 {
373 compatible = "qcom,sm8750-dsi-phy-3nm";
374 reg = <0x0ae97000 0x200>,
375 <0x0ae97200 0x280>,
376 <0x0ae97500 0x400>;
377 reg-names = "dsi_phy",
378 "dsi_phy_lane",
379 "dsi_pll";
380
381 clocks = <&disp_cc_mdss_ahb_clk>,
382 <&rpmhcc RPMH_CXO_CLK>;
383 clock-names = "iface",
384 "ref";
385
386 #clock-cells = <1>;
387 #phy-cells = <0>;
388 };
389
390 displayport-controller@af54000 {
391 compatible = "qcom,sm8750-dp", "qcom,sm8650-dp";
392 reg = <0xaf54000 0x104>,
393 <0xaf54200 0xc0>,
394 <0xaf55000 0x770>,
395 <0xaf56000 0x9c>,
396 <0xaf57000 0x9c>;
397
398 interrupts-extended = <&mdss 12>;
399
400 clocks = <&disp_cc_mdss_ahb_clk>,
401 <&disp_cc_mdss_dptx0_aux_clk>,
402 <&disp_cc_mdss_dptx0_link_clk>,
403 <&disp_cc_mdss_dptx0_link_intf_clk>,
404 <&disp_cc_mdss_dptx0_pixel0_clk>;
405 clock-names = "core_iface",
406 "core_aux",
407 "ctrl_link",
408 "ctrl_link_iface",
409 "stream_pixel";
410
411 assigned-clocks = <&disp_cc_mdss_dptx0_link_clk_src>,
412 <&disp_cc_mdss_dptx0_pixel0_clk_src>;
413 assigned-clock-parents = <&usb_dp_qmpphy QMP_USB43DP_DP_LINK_CLK>,
414 <&usb_dp_qmpphy QMP_USB43DP_DP_VCO_DIV_CLK>;
415
416 operating-points-v2 = <&dp_opp_table>;
417
418 power-domains = <&rpmhpd RPMHPD_MMCX>;
419
420 phys = <&usb_dp_qmpphy QMP_USB43DP_DP_PHY>;
421 phy-names = "dp";
422
423 #sound-dai-cells = <0>;
424
425 dp_opp_table: opp-table {
426 compatible = "operating-points-v2";
427
428 opp-192000000 {
429 opp-hz = /bits/ 64 <192000000>;
430 required-opps = <&rpmhpd_opp_low_svs_d1>;
431 };
432
433 opp-270000000 {
434 opp-hz = /bits/ 64 <270000000>;
435 required-opps = <&rpmhpd_opp_low_svs>;
436 };
437
438 opp-540000000 {
439 opp-hz = /bits/ 64 <540000000>;
440 required-opps = <&rpmhpd_opp_svs_l1>;
441 };
442
443 opp-810000000 {
444 opp-hz = /bits/ 64 <810000000>;
445 required-opps = <&rpmhpd_opp_nom>;
446 };
447 };
448
449 ports {
450 #address-cells = <1>;
451 #size-cells = <0>;
452
453 port@0 {
454 reg = <0>;
455
456 mdss_dp0_in: endpoint {
457 remote-endpoint = <&dpu_intf0_out>;
458 };
459 };
460
461 port@1 {
462 reg = <1>;
463
464 mdss_dp0_out: endpoint {
465 remote-endpoint = <&usb_dp_qmpphy_dp_in>;
466 };
467 };
468 };
469 };
470 };