# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/display/msm/qcom,x1e80100-mdss.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm X1E80100 Display MDSS

maintainers:
  - Abel Vesa <abel.vesa@linaro.org>

description:
  X1E80100 MSM Mobile Display Subsystem(MDSS), which encapsulates sub-blocks like
  DPU display controller, DP interfaces, etc.

$ref: /schemas/display/msm/mdss-common.yaml#

properties:
  compatible:
    const: qcom,x1e80100-mdss

  clocks:
    items:
      - description: Display AHB
      - description: Display hf AXI
      - description: Display core

  iommus:
    maxItems: 1

  interconnects:
    maxItems: 3

  interconnect-names:
    maxItems: 3

patternProperties:
  "^display-controller@[0-9a-f]+$":
    type: object
    additionalProperties: true
    properties:
      compatible:
        const: qcom,x1e80100-dpu

  "^displayport-controller@[0-9a-f]+$":
    type: object
    additionalProperties: true
    properties:
      compatible:
        const: qcom,x1e80100-dp

  "^phy@[0-9a-f]+$":
    type: object
    additionalProperties: true
    properties:
      compatible:
        const: qcom,x1e80100-dp-phy

required:
  - compatible

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/clock/qcom,rpmh.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/interconnect/qcom,x1e80100-rpmh.h>
    #include <dt-bindings/phy/phy-qcom-qmp.h>
    #include <dt-bindings/power/qcom,rpmhpd.h>

    display-subsystem@ae00000 {
        compatible = "qcom,x1e80100-mdss";
        reg = <0x0ae00000 0x1000>;
        reg-names = "mdss";

        interconnects = <&mmss_noc MASTER_MDP 0 &gem_noc SLAVE_LLCC 0>,
                        <&mc_virt MASTER_LLCC 0 &mc_virt SLAVE_EBI1 0>,
                        <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_DISPLAY_CFG 0>;
        interconnect-names = "mdp0-mem", "mdp1-mem", "cpu-cfg";

        resets = <&dispcc_core_bcr>;

        power-domains = <&dispcc_gdsc>;

        clocks = <&dispcc_ahb_clk>,
                 <&gcc_disp_hf_axi_clk>,
                 <&dispcc_mdp_clk>;
        clock-names = "bus", "nrt_bus", "core";

        interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
        interrupt-controller;
        #interrupt-cells = <1>;

        iommus = <&apps_smmu 0x1c00 0x2>;

        #address-cells = <1>;
        #size-cells = <1>;
        ranges;

        display-controller@ae01000 {
            compatible = "qcom,x1e80100-dpu";
            reg = <0x0ae01000 0x8f000>,
                  <0x0aeb0000 0x2008>;
            reg-names = "mdp", "vbif";

            clocks = <&gcc_axi_clk>,
                     <&dispcc_ahb_clk>,
                     <&dispcc_mdp_lut_clk>,
                     <&dispcc_mdp_clk>,
                     <&dispcc_mdp_vsync_clk>;
            clock-names = "nrt_bus",
                          "iface",
                          "lut",
                          "core",
                          "vsync";

            assigned-clocks = <&dispcc_mdp_vsync_clk>;
            assigned-clock-rates = <19200000>;

            operating-points-v2 = <&mdp_opp_table>;
            power-domains = <&rpmhpd RPMHPD_MMCX>;

            interrupt-parent = <&mdss>;
            interrupts = <0>;

            ports {
                #address-cells = <1>;
                #size-cells = <0>;

                port@0 {
                    reg = <0>;
                    dpu_intf1_out: endpoint {
                        remote-endpoint = <&dsi0_in>;
                    };
                };

                port@1 {
                    reg = <1>;
                    dpu_intf2_out: endpoint {
                        remote-endpoint = <&dsi1_in>;
                    };
                };
            };

            mdp_opp_table: opp-table {
                compatible = "operating-points-v2";

                opp-200000000 {
                    opp-hz = /bits/ 64 <200000000>;
                    required-opps = <&rpmhpd_opp_low_svs>;
                };

                opp-325000000 {
                    opp-hz = /bits/ 64 <325000000>;
                    required-opps = <&rpmhpd_opp_svs>;
                };

                opp-375000000 {
                    opp-hz = /bits/ 64 <375000000>;
                    required-opps = <&rpmhpd_opp_svs_l1>;
                };

                opp-514000000 {
                    opp-hz = /bits/ 64 <514000000>;
                    required-opps = <&rpmhpd_opp_nom>;
                };
            };
        };

        displayport-controller@ae90000 {
            compatible = "qcom,x1e80100-dp";
            reg = <0xae90000 0x200>,
                  <0xae90200 0x200>,
                  <0xae90400 0x600>,
                  <0xae91000 0x400>,
                  <0xae91400 0x400>;

            interrupt-parent = <&mdss>;
            interrupts = <12>;

            clocks = <&dispcc_mdss_ahb_clk>,
               <&dispcc_dptx0_aux_clk>,
               <&dispcc_dptx0_link_clk>,
               <&dispcc_dptx0_link_intf_clk>,
               <&dispcc_dptx0_pixel0_clk>,
               <&dispcc_dptx0_pixel1_clk>;
            clock-names = "core_iface", "core_aux",
                    "ctrl_link",
                    "ctrl_link_iface",
                    "stream_pixel",
                    "stream_1_pixel";

            assigned-clocks = <&dispcc_mdss_dptx0_link_clk_src>,
                  <&dispcc_mdss_dptx0_pixel0_clk_src>,
                  <&dispcc_mdss_dptx0_pixel1_clk_src>;
            assigned-clock-parents = <&usb_1_ss0_qmpphy QMP_USB43DP_DP_LINK_CLK>,
                  <&usb_1_ss0_qmpphy QMP_USB43DP_DP_VCO_DIV_CLK>,
                  <&usb_1_ss0_qmpphy QMP_USB43DP_DP_VCO_DIV_CLK>;

            operating-points-v2 = <&mdss_dp0_opp_table>;

            power-domains = <&rpmhpd RPMHPD_MMCX>;

            phys = <&usb_1_ss0_qmpphy QMP_USB43DP_DP_PHY>;
            phy-names = "dp";

            #sound-dai-cells = <0>;

            ports {
              #address-cells = <1>;
              #size-cells = <0>;

              port@0 {
                  reg = <0>;

                  mdss_dp0_in: endpoint {
                    remote-endpoint = <&mdss_intf0_out>;
                  };
              };

              port@1 {
                  reg = <1>;

                  mdss_dp0_out: endpoint {
                  };
              };
            };

            mdss_dp0_opp_table: opp-table {
              compatible = "operating-points-v2";

              opp-160000000 {
                 opp-hz = /bits/ 64 <160000000>;
                 required-opps = <&rpmhpd_opp_low_svs>;
              };

              opp-270000000 {
                 opp-hz = /bits/ 64 <270000000>;
                 required-opps = <&rpmhpd_opp_svs>;
              };

              opp-540000000 {
                 opp-hz = /bits/ 64 <540000000>;
                 required-opps = <&rpmhpd_opp_svs_l1>;
              };

              opp-810000000 {
                 opp-hz = /bits/ 64 <810000000>;
                 required-opps = <&rpmhpd_opp_nom>;
              };
            };
        };
    };
...
