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,sm8450-mdss.yaml# 5$schema: http://devicetree.org/meta-schemas/core.yaml# 6 7title: Qualcomm SM8450 Display MDSS 8 9maintainers: 10 - Dmitry Baryshkov <dmitry.baryshkov@linaro.org> 11 12description: 13 SM8450 MSM Mobile Display Subsystem(MDSS), which encapsulates sub-blocks like 14 DPU display controller, DSI and DP interfaces etc. 15 16$ref: /schemas/display/msm/mdss-common.yaml# 17 18properties: 19 compatible: 20 const: qcom,sm8450-mdss 21 22 clocks: 23 items: 24 - description: Display AHB 25 - description: Display hf AXI 26 - description: Display sf AXI 27 - description: Display core 28 29 iommus: 30 maxItems: 1 31 32 interconnects: 33 maxItems: 3 34 35 interconnect-names: 36 maxItems: 3 37 38patternProperties: 39 "^display-controller@[0-9a-f]+$": 40 type: object 41 additionalProperties: true 42 43 properties: 44 compatible: 45 const: qcom,sm8450-dpu 46 47 "^displayport-controller@[0-9a-f]+$": 48 type: object 49 additionalProperties: true 50 51 properties: 52 compatible: 53 items: 54 - const: qcom,sm8450-dp 55 - const: qcom,sm8350-dp 56 57 "^dsi@[0-9a-f]+$": 58 type: object 59 additionalProperties: true 60 61 properties: 62 compatible: 63 items: 64 - const: qcom,sm8450-dsi-ctrl 65 - const: qcom,mdss-dsi-ctrl 66 67 "^phy@[0-9a-f]+$": 68 type: object 69 additionalProperties: true 70 71 properties: 72 compatible: 73 const: qcom,sm8450-dsi-phy-5nm 74 75required: 76 - compatible 77 78unevaluatedProperties: false 79 80examples: 81 - | 82 #include <dt-bindings/clock/qcom,sm8450-dispcc.h> 83 #include <dt-bindings/clock/qcom,gcc-sm8450.h> 84 #include <dt-bindings/clock/qcom,rpmh.h> 85 #include <dt-bindings/interrupt-controller/arm-gic.h> 86 #include <dt-bindings/interconnect/qcom,sm8450.h> 87 #include <dt-bindings/power/qcom,rpmhpd.h> 88 89 display-subsystem@ae00000 { 90 compatible = "qcom,sm8450-mdss"; 91 reg = <0x0ae00000 0x1000>; 92 reg-names = "mdss"; 93 94 interconnects = <&mmss_noc MASTER_MDP_DISP &mc_virt SLAVE_EBI1_DISP>, 95 <&mmss_noc MASTER_MDP_DISP &mc_virt SLAVE_EBI1_DISP>, 96 <&gem_noc MASTER_APPSS_PROC &config_noc SLAVE_DISPLAY_CFG>; 97 interconnect-names = "mdp0-mem", 98 "mdp1-mem", 99 "cpu-cfg"; 100 101 resets = <&dispcc DISP_CC_MDSS_CORE_BCR>; 102 103 power-domains = <&dispcc MDSS_GDSC>; 104 105 clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 106 <&gcc GCC_DISP_HF_AXI_CLK>, 107 <&gcc GCC_DISP_SF_AXI_CLK>, 108 <&dispcc DISP_CC_MDSS_MDP_CLK>; 109 clock-names = "iface", "bus", "nrt_bus", "core"; 110 111 interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>; 112 interrupt-controller; 113 #interrupt-cells = <1>; 114 115 iommus = <&apps_smmu 0x2800 0x402>; 116 117 #address-cells = <1>; 118 #size-cells = <1>; 119 ranges; 120 121 display-controller@ae01000 { 122 compatible = "qcom,sm8450-dpu"; 123 reg = <0x0ae01000 0x8f000>, 124 <0x0aeb0000 0x2008>; 125 reg-names = "mdp", "vbif"; 126 127 clocks = <&gcc GCC_DISP_HF_AXI_CLK>, 128 <&gcc GCC_DISP_SF_AXI_CLK>, 129 <&dispcc DISP_CC_MDSS_AHB_CLK>, 130 <&dispcc DISP_CC_MDSS_MDP_LUT_CLK>, 131 <&dispcc DISP_CC_MDSS_MDP_CLK>, 132 <&dispcc DISP_CC_MDSS_VSYNC_CLK>; 133 clock-names = "bus", 134 "nrt_bus", 135 "iface", 136 "lut", 137 "core", 138 "vsync"; 139 140 assigned-clocks = <&dispcc DISP_CC_MDSS_VSYNC_CLK>; 141 assigned-clock-rates = <19200000>; 142 143 operating-points-v2 = <&mdp_opp_table>; 144 power-domains = <&rpmhpd RPMHPD_MMCX>; 145 146 interrupt-parent = <&mdss>; 147 interrupts = <0>; 148 149 ports { 150 #address-cells = <1>; 151 #size-cells = <0>; 152 153 port@0 { 154 reg = <0>; 155 dpu_intf1_out: endpoint { 156 remote-endpoint = <&dsi0_in>; 157 }; 158 }; 159 160 port@1 { 161 reg = <1>; 162 dpu_intf2_out: endpoint { 163 remote-endpoint = <&dsi1_in>; 164 }; 165 }; 166 }; 167 168 mdp_opp_table: opp-table { 169 compatible = "operating-points-v2"; 170 171 opp-172000000{ 172 opp-hz = /bits/ 64 <172000000>; 173 required-opps = <&rpmhpd_opp_low_svs_d1>; 174 }; 175 176 opp-200000000 { 177 opp-hz = /bits/ 64 <200000000>; 178 required-opps = <&rpmhpd_opp_low_svs>; 179 }; 180 181 opp-325000000 { 182 opp-hz = /bits/ 64 <325000000>; 183 required-opps = <&rpmhpd_opp_svs>; 184 }; 185 186 opp-375000000 { 187 opp-hz = /bits/ 64 <375000000>; 188 required-opps = <&rpmhpd_opp_svs_l1>; 189 }; 190 191 opp-500000000 { 192 opp-hz = /bits/ 64 <500000000>; 193 required-opps = <&rpmhpd_opp_nom>; 194 }; 195 }; 196 }; 197 198 dsi@ae94000 { 199 compatible = "qcom,sm8450-dsi-ctrl", "qcom,mdss-dsi-ctrl"; 200 reg = <0x0ae94000 0x400>; 201 reg-names = "dsi_ctrl"; 202 203 interrupt-parent = <&mdss>; 204 interrupts = <4>; 205 206 clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK>, 207 <&dispcc DISP_CC_MDSS_BYTE0_INTF_CLK>, 208 <&dispcc DISP_CC_MDSS_PCLK0_CLK>, 209 <&dispcc DISP_CC_MDSS_ESC0_CLK>, 210 <&dispcc DISP_CC_MDSS_AHB_CLK>, 211 <&gcc GCC_DISP_HF_AXI_CLK>; 212 clock-names = "byte", 213 "byte_intf", 214 "pixel", 215 "core", 216 "iface", 217 "bus"; 218 219 assigned-clocks = <&dispcc DISP_CC_MDSS_BYTE0_CLK_SRC>, 220 <&dispcc DISP_CC_MDSS_PCLK0_CLK_SRC>; 221 assigned-clock-parents = <&dsi0_phy 0>, <&dsi0_phy 1>; 222 223 operating-points-v2 = <&dsi_opp_table>; 224 power-domains = <&rpmhpd RPMHPD_MMCX>; 225 226 phys = <&dsi0_phy>; 227 phy-names = "dsi"; 228 229 #address-cells = <1>; 230 #size-cells = <0>; 231 232 ports { 233 #address-cells = <1>; 234 #size-cells = <0>; 235 236 port@0 { 237 reg = <0>; 238 dsi0_in: endpoint { 239 remote-endpoint = <&dpu_intf1_out>; 240 }; 241 }; 242 243 port@1 { 244 reg = <1>; 245 dsi0_out: endpoint { 246 }; 247 }; 248 }; 249 250 dsi_opp_table: opp-table { 251 compatible = "operating-points-v2"; 252 253 opp-160310000{ 254 opp-hz = /bits/ 64 <160310000>; 255 required-opps = <&rpmhpd_opp_low_svs_d1>; 256 }; 257 258 opp-187500000 { 259 opp-hz = /bits/ 64 <187500000>; 260 required-opps = <&rpmhpd_opp_low_svs>; 261 }; 262 263 opp-300000000 { 264 opp-hz = /bits/ 64 <300000000>; 265 required-opps = <&rpmhpd_opp_svs>; 266 }; 267 268 opp-358000000 { 269 opp-hz = /bits/ 64 <358000000>; 270 required-opps = <&rpmhpd_opp_svs_l1>; 271 }; 272 }; 273 }; 274 275 dsi0_phy: phy@ae94400 { 276 compatible = "qcom,sm8450-dsi-phy-5nm"; 277 reg = <0x0ae94400 0x200>, 278 <0x0ae94600 0x280>, 279 <0x0ae94900 0x260>; 280 reg-names = "dsi_phy", 281 "dsi_phy_lane", 282 "dsi_pll"; 283 284 #clock-cells = <1>; 285 #phy-cells = <0>; 286 287 clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 288 <&rpmhcc RPMH_CXO_CLK>; 289 clock-names = "iface", "ref"; 290 vdds-supply = <&vreg_dsi_phy>; 291 }; 292 293 dsi@ae96000 { 294 compatible = "qcom,sm8450-dsi-ctrl", "qcom,mdss-dsi-ctrl"; 295 reg = <0x0ae96000 0x400>; 296 reg-names = "dsi_ctrl"; 297 298 interrupt-parent = <&mdss>; 299 interrupts = <5>; 300 301 clocks = <&dispcc DISP_CC_MDSS_BYTE1_CLK>, 302 <&dispcc DISP_CC_MDSS_BYTE1_INTF_CLK>, 303 <&dispcc DISP_CC_MDSS_PCLK1_CLK>, 304 <&dispcc DISP_CC_MDSS_ESC1_CLK>, 305 <&dispcc DISP_CC_MDSS_AHB_CLK>, 306 <&gcc GCC_DISP_HF_AXI_CLK>; 307 clock-names = "byte", 308 "byte_intf", 309 "pixel", 310 "core", 311 "iface", 312 "bus"; 313 314 assigned-clocks = <&dispcc DISP_CC_MDSS_BYTE1_CLK_SRC>, 315 <&dispcc DISP_CC_MDSS_PCLK1_CLK_SRC>; 316 assigned-clock-parents = <&dsi1_phy 0>, <&dsi1_phy 1>; 317 318 operating-points-v2 = <&dsi_opp_table>; 319 power-domains = <&rpmhpd RPMHPD_MMCX>; 320 321 phys = <&dsi1_phy>; 322 phy-names = "dsi"; 323 324 #address-cells = <1>; 325 #size-cells = <0>; 326 327 ports { 328 #address-cells = <1>; 329 #size-cells = <0>; 330 331 port@0 { 332 reg = <0>; 333 dsi1_in: endpoint { 334 remote-endpoint = <&dpu_intf2_out>; 335 }; 336 }; 337 338 port@1 { 339 reg = <1>; 340 dsi1_out: endpoint { 341 }; 342 }; 343 }; 344 }; 345 346 dsi1_phy: phy@ae96400 { 347 compatible = "qcom,sm8450-dsi-phy-5nm"; 348 reg = <0x0ae96400 0x200>, 349 <0x0ae96600 0x280>, 350 <0x0ae96900 0x260>; 351 reg-names = "dsi_phy", 352 "dsi_phy_lane", 353 "dsi_pll"; 354 355 #clock-cells = <1>; 356 #phy-cells = <0>; 357 358 clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 359 <&rpmhcc RPMH_CXO_CLK>; 360 clock-names = "iface", "ref"; 361 vdds-supply = <&vreg_dsi_phy>; 362 }; 363 }; 364... 365