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