xref: /linux/Documentation/devicetree/bindings/display/msm/qcom,sm8250-mdss.yaml (revision 4db102dcb0396a4ccf89b1eac0f4eb3fd167a080)
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,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
55  "^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
65  "^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...
351