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