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,sa8775p-mdss.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm Technologies, Inc. SA87755P Display MDSS
8
9maintainers:
10  - Mahadevan <[email protected]>
11
12description:
13  SA8775P MSM Mobile Display Subsystem(MDSS), which encapsulates sub-blocks like
14  DPU display controller, DP interfaces and EDP etc.
15
16$ref: /schemas/display/msm/mdss-common.yaml#
17
18properties:
19  compatible:
20    const: qcom,sa8775p-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    maxItems: 3
33
34  interconnect-names:
35    maxItems: 3
36
37patternProperties:
38  "^display-controller@[0-9a-f]+$":
39    type: object
40    additionalProperties: true
41
42    properties:
43      compatible:
44        const: qcom,sa8775p-dpu
45
46  "^displayport-controller@[0-9a-f]+$":
47    type: object
48    additionalProperties: true
49
50    properties:
51      compatible:
52        items:
53          - const: qcom,sa8775p-dp
54
55required:
56  - compatible
57
58unevaluatedProperties: false
59
60examples:
61  - |
62    #include <dt-bindings/interconnect/qcom,icc.h>
63    #include <dt-bindings/interrupt-controller/arm-gic.h>
64    #include <dt-bindings/clock/qcom,sa8775p-gcc.h>
65    #include <dt-bindings/interconnect/qcom,sa8775p-rpmh.h>
66    #include <dt-bindings/power/qcom,rpmhpd.h>
67    #include <dt-bindings/power/qcom-rpmpd.h>
68
69    display-subsystem@ae00000 {
70        compatible = "qcom,sa8775p-mdss";
71        reg = <0x0ae00000 0x1000>;
72        reg-names = "mdss";
73
74        interconnects = <&mmss_noc MASTER_MDP0 &mc_virt SLAVE_EBI1>,
75                        <&mmss_noc MASTER_MDP1 &mc_virt SLAVE_EBI1>,
76                        <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_DISPLAY_CFG>;
77        interconnect-names = "mdp0-mem",
78                             "mdp1-mem",
79                             "cpu-cfg";
80
81        resets = <&dispcc_core_bcr>;
82        power-domains = <&dispcc_gdsc>;
83
84        clocks = <&dispcc_ahb_clk>,
85                 <&gcc GCC_DISP_HF_AXI_CLK>,
86                 <&dispcc_mdp_clk>;
87
88        interrupts = <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>;
89        interrupt-controller;
90        #interrupt-cells = <1>;
91
92        iommus = <&apps_smmu 0x1000 0x402>;
93
94        #address-cells = <1>;
95        #size-cells = <1>;
96        ranges;
97
98        display-controller@ae01000 {
99            compatible = "qcom,sa8775p-dpu";
100            reg = <0x0ae01000 0x8f000>,
101                  <0x0aeb0000 0x2008>;
102            reg-names = "mdp", "vbif";
103
104            clocks = <&gcc GCC_DISP_HF_AXI_CLK>,
105                     <&dispcc_ahb_clk>,
106                     <&dispcc_mdp_lut_clk>,
107                     <&dispcc_mdp_clk>,
108                     <&dispcc_mdp_vsync_clk>;
109            clock-names = "nrt_bus",
110                          "iface",
111                          "lut",
112                          "core",
113                          "vsync";
114
115            assigned-clocks = <&dispcc_mdp_vsync_clk>;
116            assigned-clock-rates = <19200000>;
117
118            operating-points-v2 = <&mdss0_mdp_opp_table>;
119            power-domains = <&rpmhpd RPMHPD_MMCX>;
120
121            interrupt-parent = <&mdss0>;
122            interrupts = <0>;
123
124            ports {
125                #address-cells = <1>;
126                #size-cells = <0>;
127
128                port@0 {
129                    reg = <0>;
130                    dpu_intf0_out: endpoint {
131                        remote-endpoint = <&mdss0_dp0_in>;
132                    };
133                };
134            };
135
136            mdss0_mdp_opp_table: opp-table {
137                compatible = "operating-points-v2";
138
139                opp-375000000 {
140                    opp-hz = /bits/ 64 <375000000>;
141                    required-opps = <&rpmhpd_opp_svs_l1>;
142                };
143
144                opp-500000000 {
145                    opp-hz = /bits/ 64 <500000000>;
146                    required-opps = <&rpmhpd_opp_nom>;
147                };
148
149                opp-575000000 {
150                    opp-hz = /bits/ 64 <575000000>;
151                    required-opps = <&rpmhpd_opp_turbo>;
152                };
153
154                opp-650000000 {
155                    opp-hz = /bits/ 64 <650000000>;
156                    required-opps = <&rpmhpd_opp_turbo_l1>;
157                };
158            };
159        };
160
161        displayport-controller@af54000 {
162            compatible = "qcom,sa8775p-dp";
163
164            pinctrl-0 = <&dp_hot_plug_det>;
165            pinctrl-names = "default";
166
167            reg = <0xaf54000 0x104>,
168                  <0xaf54200 0x0c0>,
169                  <0xaf55000 0x770>,
170                  <0xaf56000 0x09c>,
171                  <0xaf57000 0x09c>;
172
173            interrupt-parent = <&mdss0>;
174            interrupts = <12>;
175
176            clocks = <&dispcc_mdss_ahb_clk>,
177                     <&dispcc_dptx0_aux_clk>,
178                     <&dispcc_dptx0_link_clk>,
179                     <&dispcc_dptx0_link_intf_clk>,
180                     <&dispcc_dptx0_pixel0_clk>;
181            clock-names = "core_iface",
182                          "core_aux",
183                          "ctrl_link",
184                          "ctrl_link_iface",
185                          "stream_pixel";
186
187            assigned-clocks = <&dispcc_mdss_dptx0_link_clk_src>,
188                              <&dispcc_mdss_dptx0_pixel0_clk_src>;
189            assigned-clock-parents = <&mdss0_edp_phy 0>, <&mdss0_edp_phy 1>;
190
191            phys = <&mdss0_edp_phy>;
192            phy-names = "dp";
193
194            operating-points-v2 = <&dp_opp_table>;
195            power-domains = <&rpmhpd SA8775P_MMCX>;
196
197            #sound-dai-cells = <0>;
198
199            ports {
200                #address-cells = <1>;
201                #size-cells = <0>;
202
203                port@0 {
204                    reg = <0>;
205                    mdss0_dp0_in: endpoint {
206                        remote-endpoint = <&dpu_intf0_out>;
207                    };
208                };
209
210                port@1 {
211                    reg = <1>;
212                    mdss0_dp_out: endpoint { };
213                };
214            };
215
216            dp_opp_table: opp-table {
217                compatible = "operating-points-v2";
218
219                opp-160000000 {
220                    opp-hz = /bits/ 64 <160000000>;
221                    required-opps = <&rpmhpd_opp_low_svs>;
222                };
223
224                opp-270000000 {
225                    opp-hz = /bits/ 64 <270000000>;
226                    required-opps = <&rpmhpd_opp_svs>;
227                };
228
229                opp-540000000 {
230                    opp-hz = /bits/ 64 <540000000>;
231                    required-opps = <&rpmhpd_opp_svs_l1>;
232                };
233
234                opp-810000000 {
235                    opp-hz = /bits/ 64 <810000000>;
236                    required-opps = <&rpmhpd_opp_nom>;
237                };
238            };
239        };
240    };
241...
242