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,msm8998-mdss.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm MSM8998 Display MDSS
8
9maintainers:
10  - AngeloGioacchino Del Regno <angelogioacchino.delregno@somainline.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 MSM8998 target.
16
17$ref: /schemas/display/msm/mdss-common.yaml#
18
19properties:
20  compatible:
21    const: qcom,msm8998-mdss
22
23  clocks:
24    items:
25      - description: Display AHB clock
26      - description: Display AXI clock
27      - description: Display core clock
28
29  clock-names:
30    items:
31      - const: iface
32      - const: bus
33      - const: core
34
35  iommus:
36    maxItems: 1
37
38patternProperties:
39  "^display-controller@[0-9a-f]+$":
40    type: object
41    additionalProperties: true
42
43    properties:
44      compatible:
45        const: qcom,msm8998-dpu
46
47  "^dsi@[0-9a-f]+$":
48    type: object
49    additionalProperties: true
50
51    properties:
52      compatible:
53        items:
54          - const: qcom,msm8998-dsi-ctrl
55          - const: qcom,mdss-dsi-ctrl
56
57  "^phy@[0-9a-f]+$":
58    type: object
59    additionalProperties: true
60
61    properties:
62      compatible:
63        const: qcom,dsi-phy-10nm-8998
64
65required:
66  - compatible
67
68unevaluatedProperties: false
69
70examples:
71  - |
72    #include <dt-bindings/clock/qcom,mmcc-msm8998.h>
73    #include <dt-bindings/clock/qcom,rpmcc.h>
74    #include <dt-bindings/interrupt-controller/arm-gic.h>
75    #include <dt-bindings/power/qcom-rpmpd.h>
76
77    display-subsystem@c900000 {
78        compatible = "qcom,msm8998-mdss";
79        reg = <0x0c900000 0x1000>;
80        reg-names = "mdss";
81
82        clocks = <&mmcc MDSS_AHB_CLK>,
83                 <&mmcc MDSS_AXI_CLK>,
84                 <&mmcc MDSS_MDP_CLK>;
85        clock-names = "iface", "bus", "core";
86
87        #address-cells = <1>;
88        #interrupt-cells = <1>;
89        #size-cells = <1>;
90
91        interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
92        interrupt-controller;
93        iommus = <&mmss_smmu 0>;
94
95        power-domains = <&mmcc MDSS_GDSC>;
96        ranges;
97
98        display-controller@c901000 {
99            compatible = "qcom,msm8998-dpu";
100            reg = <0x0c901000 0x8f000>,
101                  <0x0c9a8e00 0xf0>,
102                  <0x0c9b0000 0x2008>,
103                  <0x0c9b8000 0x1040>;
104            reg-names = "mdp", "regdma", "vbif", "vbif_nrt";
105
106            clocks = <&mmcc MDSS_AHB_CLK>,
107                     <&mmcc MDSS_AXI_CLK>,
108                     <&mmcc MNOC_AHB_CLK>,
109                     <&mmcc MDSS_MDP_CLK>,
110                     <&mmcc MDSS_VSYNC_CLK>;
111            clock-names = "iface", "bus", "mnoc", "core", "vsync";
112
113            interrupt-parent = <&mdss>;
114            interrupts = <0>;
115            operating-points-v2 = <&mdp_opp_table>;
116            power-domains = <&rpmpd MSM8998_VDDMX>;
117
118            ports {
119                #address-cells = <1>;
120                #size-cells = <0>;
121
122                port@0 {
123                    reg = <0>;
124                    dpu_intf1_out: endpoint {
125                        remote-endpoint = <&dsi0_in>;
126                    };
127                };
128
129                port@1 {
130                    reg = <1>;
131                    dpu_intf2_out: endpoint {
132                        remote-endpoint = <&dsi1_in>;
133                    };
134                };
135            };
136        };
137
138        dsi@c994000 {
139            compatible = "qcom,msm8998-dsi-ctrl", "qcom,mdss-dsi-ctrl";
140            reg = <0x0c994000 0x400>;
141            reg-names = "dsi_ctrl";
142
143            interrupt-parent = <&mdss>;
144            interrupts = <4>;
145
146            clocks = <&mmcc MDSS_BYTE0_CLK>,
147                     <&mmcc MDSS_BYTE0_INTF_CLK>,
148                     <&mmcc MDSS_PCLK0_CLK>,
149                     <&mmcc MDSS_ESC0_CLK>,
150                     <&mmcc MDSS_AHB_CLK>,
151                     <&mmcc MDSS_AXI_CLK>;
152            clock-names = "byte",
153                          "byte_intf",
154                          "pixel",
155                          "core",
156                          "iface",
157                          "bus";
158            assigned-clocks = <&mmcc BYTE0_CLK_SRC>, <&mmcc PCLK0_CLK_SRC>;
159            assigned-clock-parents = <&dsi0_phy 0>, <&dsi0_phy 1>;
160
161            operating-points-v2 = <&dsi_opp_table>;
162            power-domains = <&rpmpd MSM8998_VDDCX>;
163
164            phys = <&dsi0_phy>;
165            phy-names = "dsi";
166
167            #address-cells = <1>;
168            #size-cells = <0>;
169
170            ports {
171                #address-cells = <1>;
172                #size-cells = <0>;
173
174                port@0 {
175                    reg = <0>;
176                    dsi0_in: endpoint {
177                        remote-endpoint = <&dpu_intf1_out>;
178                    };
179                };
180
181                port@1 {
182                    reg = <1>;
183                    dsi0_out: endpoint {
184                    };
185                };
186            };
187        };
188
189        dsi0_phy: phy@c994400 {
190            compatible = "qcom,dsi-phy-10nm-8998";
191            reg = <0x0c994400 0x200>,
192                  <0x0c994600 0x280>,
193                  <0x0c994a00 0x1e0>;
194            reg-names = "dsi_phy",
195                        "dsi_phy_lane",
196                        "dsi_pll";
197
198            #clock-cells = <1>;
199            #phy-cells = <0>;
200
201            clocks = <&mmcc MDSS_AHB_CLK>,
202                     <&rpmcc RPM_SMD_XO_CLK_SRC>;
203            clock-names = "iface", "ref";
204
205            vdds-supply = <&pm8998_l1>;
206        };
207
208        dsi@c996000 {
209            compatible = "qcom,msm8998-dsi-ctrl", "qcom,mdss-dsi-ctrl";
210            reg = <0x0c996000 0x400>;
211            reg-names = "dsi_ctrl";
212
213            interrupt-parent = <&mdss>;
214            interrupts = <5>;
215
216            clocks = <&mmcc MDSS_BYTE1_CLK>,
217                     <&mmcc MDSS_BYTE1_INTF_CLK>,
218                     <&mmcc MDSS_PCLK1_CLK>,
219                     <&mmcc MDSS_ESC1_CLK>,
220                     <&mmcc MDSS_AHB_CLK>,
221                     <&mmcc MDSS_AXI_CLK>;
222            clock-names = "byte",
223                          "byte_intf",
224                          "pixel",
225                          "core",
226                          "iface",
227                          "bus";
228            assigned-clocks = <&mmcc BYTE1_CLK_SRC>, <&mmcc PCLK1_CLK_SRC>;
229            assigned-clock-parents = <&dsi1_phy 0>, <&dsi1_phy 1>;
230
231            operating-points-v2 = <&dsi_opp_table>;
232            power-domains = <&rpmpd MSM8998_VDDCX>;
233
234            phys = <&dsi1_phy>;
235            phy-names = "dsi";
236
237            #address-cells = <1>;
238            #size-cells = <0>;
239
240            ports {
241                #address-cells = <1>;
242                #size-cells = <0>;
243
244                port@0 {
245                    reg = <0>;
246                    dsi1_in: endpoint {
247                        remote-endpoint = <&dpu_intf2_out>;
248                    };
249                };
250
251                port@1 {
252                    reg = <1>;
253                    dsi1_out: endpoint {
254                    };
255                };
256            };
257        };
258
259        dsi1_phy: phy@c996400 {
260            compatible = "qcom,dsi-phy-10nm-8998";
261            reg = <0x0c996400 0x200>,
262                  <0x0c996600 0x280>,
263                  <0x0c996a00 0x10e>;
264            reg-names = "dsi_phy",
265                        "dsi_phy_lane",
266                        "dsi_pll";
267
268            #clock-cells = <1>;
269            #phy-cells = <0>;
270
271            clocks = <&mmcc MDSS_AHB_CLK>,
272                     <&rpmcc RPM_SMD_XO_CLK_SRC>;
273            clock-names = "iface", "ref";
274
275            vdds-supply = <&pm8998_l1>;
276        };
277    };
278...
279