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