blob: 51368cda7b2fe764aed4cbf815d18f5476045cff [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# 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,sm8250-mdss.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm SM8250 Display MDSS
8
9maintainers:
10 - Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
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 SM8250 target.
16
17$ref: /schemas/display/msm/mdss-common.yaml#
18
19properties:
20 compatible:
21 const: qcom,sm8250-mdss
22
23 clocks:
24 items:
25 - description: Display AHB clock from gcc
26 - description: Display hf axi clock
27 - description: Display sf axi clock
28 - description: Display core clock
29
30 clock-names:
31 items:
32 - const: iface
33 - const: bus
34 - const: nrt_bus
35 - const: core
36
37 iommus:
38 maxItems: 1
39
40 interconnects:
41 maxItems: 2
42
43 interconnect-names:
44 maxItems: 2
45
46patternProperties:
47 "^display-controller@[0-9a-f]+$":
48 type: object
49 additionalProperties: true
50
51 properties:
52 compatible:
53 const: qcom,sm8250-dpu
54
Tom Rini93743d22024-04-01 09:08:13 -040055 "^displayport-controller@[0-9a-f]+$":
56 type: object
57 additionalProperties: true
58
59 properties:
60 compatible:
61 items:
62 - const: qcom,sm8250-dp
63 - const: qcom,sm8350-dp
64
Tom Rini53633a82024-02-29 12:33:36 -050065 "^dsi@[0-9a-f]+$":
66 type: object
67 additionalProperties: true
68
69 properties:
70 compatible:
71 items:
72 - const: qcom,sm8250-dsi-ctrl
73 - const: qcom,mdss-dsi-ctrl
74
75 "^phy@[0-9a-f]+$":
76 type: object
77 additionalProperties: true
78
79 properties:
80 compatible:
81 const: qcom,dsi-phy-7nm
82
83required:
84 - compatible
85
86unevaluatedProperties: false
87
88examples:
89 - |
90 #include <dt-bindings/clock/qcom,dispcc-sm8250.h>
91 #include <dt-bindings/clock/qcom,gcc-sm8250.h>
92 #include <dt-bindings/clock/qcom,rpmh.h>
93 #include <dt-bindings/interrupt-controller/arm-gic.h>
94 #include <dt-bindings/interconnect/qcom,sm8250.h>
95 #include <dt-bindings/power/qcom,rpmhpd.h>
96
97 display-subsystem@ae00000 {
98 compatible = "qcom,sm8250-mdss";
99 reg = <0x0ae00000 0x1000>;
100 reg-names = "mdss";
101
102 interconnects = <&mmss_noc MASTER_MDP_PORT0 &mc_virt SLAVE_EBI_CH0>,
103 <&mmss_noc MASTER_MDP_PORT1 &mc_virt SLAVE_EBI_CH0>;
104 interconnect-names = "mdp0-mem", "mdp1-mem";
105
106 power-domains = <&dispcc MDSS_GDSC>;
107
108 clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
109 <&gcc GCC_DISP_HF_AXI_CLK>,
110 <&gcc GCC_DISP_SF_AXI_CLK>,
111 <&dispcc DISP_CC_MDSS_MDP_CLK>;
112 clock-names = "iface", "bus", "nrt_bus", "core";
113
114 interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
115 interrupt-controller;
116 #interrupt-cells = <1>;
117
118 iommus = <&apps_smmu 0x820 0x402>;
119
120 #address-cells = <1>;
121 #size-cells = <1>;
122 ranges;
123
124 display-controller@ae01000 {
125 compatible = "qcom,sm8250-dpu";
126 reg = <0x0ae01000 0x8f000>,
127 <0x0aeb0000 0x2008>;
128 reg-names = "mdp", "vbif";
129
130 clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
131 <&gcc GCC_DISP_HF_AXI_CLK>,
132 <&dispcc DISP_CC_MDSS_MDP_CLK>,
133 <&dispcc DISP_CC_MDSS_VSYNC_CLK>;
134 clock-names = "iface", "bus", "core", "vsync";
135
136 assigned-clocks = <&dispcc DISP_CC_MDSS_VSYNC_CLK>;
137 assigned-clock-rates = <19200000>;
138
139 operating-points-v2 = <&mdp_opp_table>;
140 power-domains = <&rpmhpd RPMHPD_MMCX>;
141
142 interrupt-parent = <&mdss>;
143 interrupts = <0>;
144
145 ports {
146 #address-cells = <1>;
147 #size-cells = <0>;
148
149 port@0 {
150 reg = <0>;
151 dpu_intf1_out: endpoint {
152 remote-endpoint = <&dsi0_in>;
153 };
154 };
155
156 port@1 {
157 reg = <1>;
158 dpu_intf2_out: endpoint {
159 remote-endpoint = <&dsi1_in>;
160 };
161 };
162 };
163
164 mdp_opp_table: opp-table {
165 compatible = "operating-points-v2";
166
167 opp-200000000 {
168 opp-hz = /bits/ 64 <200000000>;
169 required-opps = <&rpmhpd_opp_low_svs>;
170 };
171
172 opp-300000000 {
173 opp-hz = /bits/ 64 <300000000>;
174 required-opps = <&rpmhpd_opp_svs>;
175 };
176
177 opp-345000000 {
178 opp-hz = /bits/ 64 <345000000>;
179 required-opps = <&rpmhpd_opp_svs_l1>;
180 };
181
182 opp-460000000 {
183 opp-hz = /bits/ 64 <460000000>;
184 required-opps = <&rpmhpd_opp_nom>;
185 };
186 };
187 };
188
189 dsi@ae94000 {
190 compatible = "qcom,sm8250-dsi-ctrl", "qcom,mdss-dsi-ctrl";
191 reg = <0x0ae94000 0x400>;
192 reg-names = "dsi_ctrl";
193
194 interrupt-parent = <&mdss>;
195 interrupts = <4>;
196
197 clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK>,
198 <&dispcc DISP_CC_MDSS_BYTE0_INTF_CLK>,
199 <&dispcc DISP_CC_MDSS_PCLK0_CLK>,
200 <&dispcc DISP_CC_MDSS_ESC0_CLK>,
201 <&dispcc DISP_CC_MDSS_AHB_CLK>,
202 <&gcc GCC_DISP_HF_AXI_CLK>;
203 clock-names = "byte",
204 "byte_intf",
205 "pixel",
206 "core",
207 "iface",
208 "bus";
209
210 assigned-clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK_SRC>,
211 <&dispcc DISP_CC_MDSS_PCLK0_CLK_SRC>;
212 assigned-clock-parents = <&dsi0_phy 0>, <&dsi0_phy 1>;
213
214 operating-points-v2 = <&dsi_opp_table>;
215 power-domains = <&rpmhpd RPMHPD_MMCX>;
216
217 phys = <&dsi0_phy>;
218 phy-names = "dsi";
219
220 #address-cells = <1>;
221 #size-cells = <0>;
222
223 ports {
224 #address-cells = <1>;
225 #size-cells = <0>;
226
227 port@0 {
228 reg = <0>;
229 dsi0_in: endpoint {
230 remote-endpoint = <&dpu_intf1_out>;
231 };
232 };
233
234 port@1 {
235 reg = <1>;
236 dsi0_out: endpoint {
237 };
238 };
239 };
240
241 dsi_opp_table: opp-table {
242 compatible = "operating-points-v2";
243
244 opp-187500000 {
245 opp-hz = /bits/ 64 <187500000>;
246 required-opps = <&rpmhpd_opp_low_svs>;
247 };
248
249 opp-300000000 {
250 opp-hz = /bits/ 64 <300000000>;
251 required-opps = <&rpmhpd_opp_svs>;
252 };
253
254 opp-358000000 {
255 opp-hz = /bits/ 64 <358000000>;
256 required-opps = <&rpmhpd_opp_svs_l1>;
257 };
258 };
259 };
260
261 dsi0_phy: phy@ae94400 {
262 compatible = "qcom,dsi-phy-7nm";
263 reg = <0x0ae94400 0x200>,
264 <0x0ae94600 0x280>,
265 <0x0ae94900 0x260>;
266 reg-names = "dsi_phy",
267 "dsi_phy_lane",
268 "dsi_pll";
269
270 #clock-cells = <1>;
271 #phy-cells = <0>;
272
273 clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
274 <&rpmhcc RPMH_CXO_CLK>;
275 clock-names = "iface", "ref";
276 vdds-supply = <&vreg_dsi_phy>;
277 };
278
279 dsi@ae96000 {
280 compatible = "qcom,sm8250-dsi-ctrl", "qcom,mdss-dsi-ctrl";
281 reg = <0x0ae96000 0x400>;
282 reg-names = "dsi_ctrl";
283
284 interrupt-parent = <&mdss>;
285 interrupts = <5>;
286
287 clocks = <&dispcc DISP_CC_MDSS_BYTE1_CLK>,
288 <&dispcc DISP_CC_MDSS_BYTE1_INTF_CLK>,
289 <&dispcc DISP_CC_MDSS_PCLK1_CLK>,
290 <&dispcc DISP_CC_MDSS_ESC1_CLK>,
291 <&dispcc DISP_CC_MDSS_AHB_CLK>,
292 <&gcc GCC_DISP_HF_AXI_CLK>;
293 clock-names = "byte",
294 "byte_intf",
295 "pixel",
296 "core",
297 "iface",
298 "bus";
299
300 assigned-clocks = <&dispcc DISP_CC_MDSS_BYTE1_CLK_SRC>,
301 <&dispcc DISP_CC_MDSS_PCLK1_CLK_SRC>;
302 assigned-clock-parents = <&dsi1_phy 0>, <&dsi1_phy 1>;
303
304 operating-points-v2 = <&dsi_opp_table>;
305 power-domains = <&rpmhpd RPMHPD_MMCX>;
306
307 phys = <&dsi1_phy>;
308 phy-names = "dsi";
309
310 #address-cells = <1>;
311 #size-cells = <0>;
312
313 ports {
314 #address-cells = <1>;
315 #size-cells = <0>;
316
317 port@0 {
318 reg = <0>;
319 dsi1_in: endpoint {
320 remote-endpoint = <&dpu_intf2_out>;
321 };
322 };
323
324 port@1 {
325 reg = <1>;
326 dsi1_out: endpoint {
327 };
328 };
329 };
330 };
331
332 dsi1_phy: phy@ae96400 {
333 compatible = "qcom,dsi-phy-7nm";
334 reg = <0x0ae96400 0x200>,
335 <0x0ae96600 0x280>,
336 <0x0ae96900 0x260>;
337 reg-names = "dsi_phy",
338 "dsi_phy_lane",
339 "dsi_pll";
340
341 #clock-cells = <1>;
342 #phy-cells = <0>;
343
344 clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
345 <&rpmhcc RPMH_CXO_CLK>;
346 clock-names = "iface", "ref";
347 vdds-supply = <&vreg_dsi_phy>;
348 };
349 };
350...