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