xref: /linux/Documentation/devicetree/bindings/display/msm/qcom,milos-mdss.yaml (revision 637315cb400eed1dbe721954fea437a61a2d65b2)
1*1bfae9f5SLuca Weiss# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2*1bfae9f5SLuca Weiss%YAML 1.2
3*1bfae9f5SLuca Weiss---
4*1bfae9f5SLuca Weiss$id: http://devicetree.org/schemas/display/msm/qcom,milos-mdss.yaml#
5*1bfae9f5SLuca Weiss$schema: http://devicetree.org/meta-schemas/core.yaml#
6*1bfae9f5SLuca Weiss
7*1bfae9f5SLuca Weisstitle: Qualcomm Milos Display MDSS
8*1bfae9f5SLuca Weiss
9*1bfae9f5SLuca Weissmaintainers:
10*1bfae9f5SLuca Weiss  - Luca Weiss <luca.weiss@fairphone.com>
11*1bfae9f5SLuca Weiss
12*1bfae9f5SLuca Weissdescription:
13*1bfae9f5SLuca Weiss  Milos MSM Mobile Display Subsystem(MDSS), which encapsulates sub-blocks like
14*1bfae9f5SLuca Weiss  DPU display controller, DSI and DP interfaces etc.
15*1bfae9f5SLuca Weiss
16*1bfae9f5SLuca Weiss$ref: /schemas/display/msm/mdss-common.yaml#
17*1bfae9f5SLuca Weiss
18*1bfae9f5SLuca Weissproperties:
19*1bfae9f5SLuca Weiss  compatible:
20*1bfae9f5SLuca Weiss    const: qcom,milos-mdss
21*1bfae9f5SLuca Weiss
22*1bfae9f5SLuca Weiss  clocks:
23*1bfae9f5SLuca Weiss    items:
24*1bfae9f5SLuca Weiss      - description: Display AHB
25*1bfae9f5SLuca Weiss      - description: Display hf AXI
26*1bfae9f5SLuca Weiss      - description: Display core
27*1bfae9f5SLuca Weiss
28*1bfae9f5SLuca Weiss  iommus:
29*1bfae9f5SLuca Weiss    maxItems: 1
30*1bfae9f5SLuca Weiss
31*1bfae9f5SLuca Weiss  interconnects:
32*1bfae9f5SLuca Weiss    items:
33*1bfae9f5SLuca Weiss      - description: Interconnect path from mdp0 port to the data bus
34*1bfae9f5SLuca Weiss      - description: Interconnect path from CPU to the reg bus
35*1bfae9f5SLuca Weiss
36*1bfae9f5SLuca Weiss  interconnect-names:
37*1bfae9f5SLuca Weiss    items:
38*1bfae9f5SLuca Weiss      - const: mdp0-mem
39*1bfae9f5SLuca Weiss      - const: cpu-cfg
40*1bfae9f5SLuca Weiss
41*1bfae9f5SLuca WeisspatternProperties:
42*1bfae9f5SLuca Weiss  "^display-controller@[0-9a-f]+$":
43*1bfae9f5SLuca Weiss    type: object
44*1bfae9f5SLuca Weiss    additionalProperties: true
45*1bfae9f5SLuca Weiss    properties:
46*1bfae9f5SLuca Weiss      compatible:
47*1bfae9f5SLuca Weiss        const: qcom,milos-dpu
48*1bfae9f5SLuca Weiss
49*1bfae9f5SLuca Weiss  "^displayport-controller@[0-9a-f]+$":
50*1bfae9f5SLuca Weiss    type: object
51*1bfae9f5SLuca Weiss    additionalProperties: true
52*1bfae9f5SLuca Weiss    properties:
53*1bfae9f5SLuca Weiss      compatible:
54*1bfae9f5SLuca Weiss        const: qcom,milos-dp
55*1bfae9f5SLuca Weiss
56*1bfae9f5SLuca Weiss  "^dsi@[0-9a-f]+$":
57*1bfae9f5SLuca Weiss    type: object
58*1bfae9f5SLuca Weiss    additionalProperties: true
59*1bfae9f5SLuca Weiss    properties:
60*1bfae9f5SLuca Weiss      compatible:
61*1bfae9f5SLuca Weiss        contains:
62*1bfae9f5SLuca Weiss          const: qcom,milos-dsi-ctrl
63*1bfae9f5SLuca Weiss
64*1bfae9f5SLuca Weiss  "^phy@[0-9a-f]+$":
65*1bfae9f5SLuca Weiss    type: object
66*1bfae9f5SLuca Weiss    additionalProperties: true
67*1bfae9f5SLuca Weiss    properties:
68*1bfae9f5SLuca Weiss      compatible:
69*1bfae9f5SLuca Weiss        const: qcom,milos-dsi-phy-4nm
70*1bfae9f5SLuca Weiss
71*1bfae9f5SLuca Weissrequired:
72*1bfae9f5SLuca Weiss  - compatible
73*1bfae9f5SLuca Weiss
74*1bfae9f5SLuca WeissunevaluatedProperties: false
75*1bfae9f5SLuca Weiss
76*1bfae9f5SLuca Weissexamples:
77*1bfae9f5SLuca Weiss  - |
78*1bfae9f5SLuca Weiss    #include <dt-bindings/clock/qcom,dsi-phy-28nm.h>
79*1bfae9f5SLuca Weiss    #include <dt-bindings/clock/qcom,milos-dispcc.h>
80*1bfae9f5SLuca Weiss    #include <dt-bindings/clock/qcom,milos-gcc.h>
81*1bfae9f5SLuca Weiss    #include <dt-bindings/clock/qcom,rpmh.h>
82*1bfae9f5SLuca Weiss    #include <dt-bindings/interconnect/qcom,icc.h>
83*1bfae9f5SLuca Weiss    #include <dt-bindings/interconnect/qcom,milos-rpmh.h>
84*1bfae9f5SLuca Weiss    #include <dt-bindings/interrupt-controller/arm-gic.h>
85*1bfae9f5SLuca Weiss    #include <dt-bindings/power/qcom,rpmhpd.h>
86*1bfae9f5SLuca Weiss
87*1bfae9f5SLuca Weiss    display-subsystem@ae00000 {
88*1bfae9f5SLuca Weiss        compatible = "qcom,milos-mdss";
89*1bfae9f5SLuca Weiss        reg = <0x0ae00000 0x1000>;
90*1bfae9f5SLuca Weiss        reg-names = "mdss";
91*1bfae9f5SLuca Weiss
92*1bfae9f5SLuca Weiss        interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH 0>;
93*1bfae9f5SLuca Weiss
94*1bfae9f5SLuca Weiss        clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
95*1bfae9f5SLuca Weiss                 <&gcc GCC_DISP_HF_AXI_CLK>,
96*1bfae9f5SLuca Weiss                 <&dispcc DISP_CC_MDSS_MDP_CLK>;
97*1bfae9f5SLuca Weiss
98*1bfae9f5SLuca Weiss        resets = <&dispcc DISP_CC_MDSS_CORE_BCR>;
99*1bfae9f5SLuca Weiss
100*1bfae9f5SLuca Weiss        interconnects = <&mmss_noc MASTER_MDP QCOM_ICC_TAG_ALWAYS
101*1bfae9f5SLuca Weiss                         &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>,
102*1bfae9f5SLuca Weiss                        <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_ONLY
103*1bfae9f5SLuca Weiss                         &cnoc_main SLAVE_DISPLAY_CFG QCOM_ICC_TAG_ACTIVE_ONLY>;
104*1bfae9f5SLuca Weiss        interconnect-names = "mdp0-mem",
105*1bfae9f5SLuca Weiss                             "cpu-cfg";
106*1bfae9f5SLuca Weiss
107*1bfae9f5SLuca Weiss        power-domains = <&dispcc DISP_CC_MDSS_CORE_GDSC>;
108*1bfae9f5SLuca Weiss
109*1bfae9f5SLuca Weiss        iommus = <&apps_smmu 0x1c00 0x2>;
110*1bfae9f5SLuca Weiss
111*1bfae9f5SLuca Weiss        interrupt-controller;
112*1bfae9f5SLuca Weiss        #interrupt-cells = <1>;
113*1bfae9f5SLuca Weiss
114*1bfae9f5SLuca Weiss        #address-cells = <1>;
115*1bfae9f5SLuca Weiss        #size-cells = <1>;
116*1bfae9f5SLuca Weiss        ranges;
117*1bfae9f5SLuca Weiss
118*1bfae9f5SLuca Weiss        display-controller@ae01000 {
119*1bfae9f5SLuca Weiss            compatible = "qcom,milos-dpu";
120*1bfae9f5SLuca Weiss            reg = <0x0ae01000 0x8f000>,
121*1bfae9f5SLuca Weiss                  <0x0aeb0000 0x3000>;
122*1bfae9f5SLuca Weiss            reg-names = "mdp",
123*1bfae9f5SLuca Weiss                        "vbif";
124*1bfae9f5SLuca Weiss
125*1bfae9f5SLuca Weiss            interrupts-extended = <&mdss 0>;
126*1bfae9f5SLuca Weiss
127*1bfae9f5SLuca Weiss            clocks = <&gcc GCC_DISP_HF_AXI_CLK>,
128*1bfae9f5SLuca Weiss                     <&dispcc DISP_CC_MDSS_AHB_CLK>,
129*1bfae9f5SLuca Weiss                     <&dispcc DISP_CC_MDSS_MDP_LUT_CLK>,
130*1bfae9f5SLuca Weiss                     <&dispcc DISP_CC_MDSS_MDP_CLK>,
131*1bfae9f5SLuca Weiss                     <&dispcc DISP_CC_MDSS_VSYNC_CLK>;
132*1bfae9f5SLuca Weiss            clock-names = "nrt_bus",
133*1bfae9f5SLuca Weiss                          "iface",
134*1bfae9f5SLuca Weiss                          "lut",
135*1bfae9f5SLuca Weiss                          "core",
136*1bfae9f5SLuca Weiss                          "vsync";
137*1bfae9f5SLuca Weiss
138*1bfae9f5SLuca Weiss            assigned-clocks = <&dispcc DISP_CC_MDSS_VSYNC_CLK>;
139*1bfae9f5SLuca Weiss            assigned-clock-rates = <19200000>;
140*1bfae9f5SLuca Weiss
141*1bfae9f5SLuca Weiss            operating-points-v2 = <&mdp_opp_table>;
142*1bfae9f5SLuca Weiss
143*1bfae9f5SLuca Weiss            power-domains = <&rpmhpd RPMHPD_CX>;
144*1bfae9f5SLuca Weiss
145*1bfae9f5SLuca Weiss            ports {
146*1bfae9f5SLuca Weiss                #address-cells = <1>;
147*1bfae9f5SLuca Weiss                #size-cells = <0>;
148*1bfae9f5SLuca Weiss
149*1bfae9f5SLuca Weiss                port@0 {
150*1bfae9f5SLuca Weiss                    reg = <0>;
151*1bfae9f5SLuca Weiss
152*1bfae9f5SLuca Weiss                    dpu_intf1_out: endpoint {
153*1bfae9f5SLuca Weiss                        remote-endpoint = <&mdss_dsi0_in>;
154*1bfae9f5SLuca Weiss                    };
155*1bfae9f5SLuca Weiss                };
156*1bfae9f5SLuca Weiss            };
157*1bfae9f5SLuca Weiss
158*1bfae9f5SLuca Weiss            mdp_opp_table: opp-table {
159*1bfae9f5SLuca Weiss                compatible = "operating-points-v2";
160*1bfae9f5SLuca Weiss
161*1bfae9f5SLuca Weiss                opp-200000000 {
162*1bfae9f5SLuca Weiss                    opp-hz = /bits/ 64 <200000000>;
163*1bfae9f5SLuca Weiss                    required-opps = <&rpmhpd_opp_low_svs>;
164*1bfae9f5SLuca Weiss                };
165*1bfae9f5SLuca Weiss
166*1bfae9f5SLuca Weiss                opp-342000000 {
167*1bfae9f5SLuca Weiss                    opp-hz = /bits/ 64 <342000000>;
168*1bfae9f5SLuca Weiss                    required-opps = <&rpmhpd_opp_svs>;
169*1bfae9f5SLuca Weiss                };
170*1bfae9f5SLuca Weiss
171*1bfae9f5SLuca Weiss                opp-402000000 {
172*1bfae9f5SLuca Weiss                    opp-hz = /bits/ 64 <402000000>;
173*1bfae9f5SLuca Weiss                    required-opps = <&rpmhpd_opp_svs_l1>;
174*1bfae9f5SLuca Weiss                };
175*1bfae9f5SLuca Weiss
176*1bfae9f5SLuca Weiss                opp-535000000 {
177*1bfae9f5SLuca Weiss                    opp-hz = /bits/ 64 <535000000>;
178*1bfae9f5SLuca Weiss                    required-opps = <&rpmhpd_opp_nom>;
179*1bfae9f5SLuca Weiss                };
180*1bfae9f5SLuca Weiss
181*1bfae9f5SLuca Weiss                opp-600000000 {
182*1bfae9f5SLuca Weiss                    opp-hz = /bits/ 64 <600000000>;
183*1bfae9f5SLuca Weiss                    required-opps = <&rpmhpd_opp_nom_l1>;
184*1bfae9f5SLuca Weiss                };
185*1bfae9f5SLuca Weiss
186*1bfae9f5SLuca Weiss                opp-630000000 {
187*1bfae9f5SLuca Weiss                    opp-hz = /bits/ 64 <630000000>;
188*1bfae9f5SLuca Weiss                    required-opps = <&rpmhpd_opp_turbo>;
189*1bfae9f5SLuca Weiss                };
190*1bfae9f5SLuca Weiss            };
191*1bfae9f5SLuca Weiss        };
192*1bfae9f5SLuca Weiss
193*1bfae9f5SLuca Weiss        dsi@ae94000 {
194*1bfae9f5SLuca Weiss            compatible = "qcom,milos-dsi-ctrl", "qcom,mdss-dsi-ctrl";
195*1bfae9f5SLuca Weiss            reg = <0x0ae94000 0x1000>;
196*1bfae9f5SLuca Weiss            reg-names = "dsi_ctrl";
197*1bfae9f5SLuca Weiss
198*1bfae9f5SLuca Weiss            interrupts-extended = <&mdss 4>;
199*1bfae9f5SLuca Weiss
200*1bfae9f5SLuca Weiss            clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK>,
201*1bfae9f5SLuca Weiss                     <&dispcc DISP_CC_MDSS_BYTE0_INTF_CLK>,
202*1bfae9f5SLuca Weiss                     <&dispcc DISP_CC_MDSS_PCLK0_CLK>,
203*1bfae9f5SLuca Weiss                     <&dispcc DISP_CC_MDSS_ESC0_CLK>,
204*1bfae9f5SLuca Weiss                     <&dispcc DISP_CC_MDSS_AHB_CLK>,
205*1bfae9f5SLuca Weiss                     <&gcc GCC_DISP_HF_AXI_CLK>;
206*1bfae9f5SLuca Weiss            clock-names = "byte",
207*1bfae9f5SLuca Weiss                          "byte_intf",
208*1bfae9f5SLuca Weiss                          "pixel",
209*1bfae9f5SLuca Weiss                          "core",
210*1bfae9f5SLuca Weiss                          "iface",
211*1bfae9f5SLuca Weiss                          "bus";
212*1bfae9f5SLuca Weiss
213*1bfae9f5SLuca Weiss            assigned-clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK_SRC>,
214*1bfae9f5SLuca Weiss                              <&dispcc DISP_CC_MDSS_PCLK0_CLK_SRC>;
215*1bfae9f5SLuca Weiss            assigned-clock-parents = <&mdss_dsi0_phy DSI_BYTE_PLL_CLK>,
216*1bfae9f5SLuca Weiss                                     <&mdss_dsi0_phy DSI_PIXEL_PLL_CLK>;
217*1bfae9f5SLuca Weiss
218*1bfae9f5SLuca Weiss            operating-points-v2 = <&mdss_dsi_opp_table>;
219*1bfae9f5SLuca Weiss
220*1bfae9f5SLuca Weiss            power-domains = <&rpmhpd RPMHPD_CX>;
221*1bfae9f5SLuca Weiss
222*1bfae9f5SLuca Weiss            phys = <&mdss_dsi0_phy>;
223*1bfae9f5SLuca Weiss            phy-names = "dsi";
224*1bfae9f5SLuca Weiss
225*1bfae9f5SLuca Weiss            #address-cells = <1>;
226*1bfae9f5SLuca Weiss            #size-cells = <0>;
227*1bfae9f5SLuca Weiss
228*1bfae9f5SLuca Weiss            ports {
229*1bfae9f5SLuca Weiss                #address-cells = <1>;
230*1bfae9f5SLuca Weiss                #size-cells = <0>;
231*1bfae9f5SLuca Weiss
232*1bfae9f5SLuca Weiss                port@0 {
233*1bfae9f5SLuca Weiss                    reg = <0>;
234*1bfae9f5SLuca Weiss
235*1bfae9f5SLuca Weiss                    mdss_dsi0_in: endpoint {
236*1bfae9f5SLuca Weiss                        remote-endpoint = <&dpu_intf1_out>;
237*1bfae9f5SLuca Weiss                    };
238*1bfae9f5SLuca Weiss                };
239*1bfae9f5SLuca Weiss
240*1bfae9f5SLuca Weiss                port@1 {
241*1bfae9f5SLuca Weiss                    reg = <1>;
242*1bfae9f5SLuca Weiss
243*1bfae9f5SLuca Weiss                    mdss_dsi0_out: endpoint {
244*1bfae9f5SLuca Weiss                    };
245*1bfae9f5SLuca Weiss                };
246*1bfae9f5SLuca Weiss            };
247*1bfae9f5SLuca Weiss
248*1bfae9f5SLuca Weiss            mdss_dsi_opp_table: opp-table {
249*1bfae9f5SLuca Weiss                compatible = "operating-points-v2";
250*1bfae9f5SLuca Weiss
251*1bfae9f5SLuca Weiss                opp-187500000 {
252*1bfae9f5SLuca Weiss                    opp-hz = /bits/ 64 <187500000>;
253*1bfae9f5SLuca Weiss                    required-opps = <&rpmhpd_opp_low_svs>;
254*1bfae9f5SLuca Weiss                };
255*1bfae9f5SLuca Weiss
256*1bfae9f5SLuca Weiss                opp-300000000 {
257*1bfae9f5SLuca Weiss                    opp-hz = /bits/ 64 <300000000>;
258*1bfae9f5SLuca Weiss                    required-opps = <&rpmhpd_opp_svs>;
259*1bfae9f5SLuca Weiss                };
260*1bfae9f5SLuca Weiss
261*1bfae9f5SLuca Weiss                opp-358000000 {
262*1bfae9f5SLuca Weiss                    opp-hz = /bits/ 64 <358000000>;
263*1bfae9f5SLuca Weiss                    required-opps = <&rpmhpd_opp_svs_l1>;
264*1bfae9f5SLuca Weiss                };
265*1bfae9f5SLuca Weiss            };
266*1bfae9f5SLuca Weiss        };
267*1bfae9f5SLuca Weiss
268*1bfae9f5SLuca Weiss        mdss_dsi0_phy: phy@ae95000 {
269*1bfae9f5SLuca Weiss            compatible = "qcom,milos-dsi-phy-4nm";
270*1bfae9f5SLuca Weiss            reg = <0x0ae95000 0x200>,
271*1bfae9f5SLuca Weiss                  <0x0ae95200 0x300>,
272*1bfae9f5SLuca Weiss                  <0x0ae95500 0x400>;
273*1bfae9f5SLuca Weiss            reg-names = "dsi_phy",
274*1bfae9f5SLuca Weiss                        "dsi_phy_lane",
275*1bfae9f5SLuca Weiss                        "dsi_pll";
276*1bfae9f5SLuca Weiss
277*1bfae9f5SLuca Weiss            clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
278*1bfae9f5SLuca Weiss                     <&rpmhcc RPMH_CXO_CLK>;
279*1bfae9f5SLuca Weiss            clock-names = "iface",
280*1bfae9f5SLuca Weiss                          "ref";
281*1bfae9f5SLuca Weiss
282*1bfae9f5SLuca Weiss            #clock-cells = <1>;
283*1bfae9f5SLuca Weiss            #phy-cells = <0>;
284*1bfae9f5SLuca Weiss        };
285*1bfae9f5SLuca Weiss    };
286*1bfae9f5SLuca Weiss...
287