# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
%YAML 1.2
---

$id: http://devicetree.org/schemas/display/msm/qcom,adreno-rgmu.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: RGMU attached to certain Adreno GPUs

maintainers:
  - Rob Clark <robin.clark@oss.qualcomm.com>

description:
  RGMU (Reduced Graphics Management Unit) IP is present in some GPUs that
  belong to Adreno A6xx family. It is a small state machine that helps to
  toggle the GX GDSC (connected to CX rail) to implement IFPC feature and save
  power.

properties:
  compatible:
    items:
      - const: qcom,adreno-rgmu-612.0
      - const: qcom,adreno-rgmu

  reg:
    items:
      - description: Core RGMU registers

  clocks:
    items:
      - description: GMU clock
      - description: GPU CX clock
      - description: GPU AXI clock
      - description: GPU MEMNOC clock
      - description: GPU SMMU vote clock

  clock-names:
    items:
      - const: gmu
      - const: cxo
      - const: axi
      - const: memnoc
      - const: smmu_vote

  power-domains:
    items:
      - description: CX GDSC power domain
      - description: GX GDSC power domain

  power-domain-names:
    items:
      - const: cx
      - const: gx

  interrupts:
    items:
      - description: GMU OOB interrupt
      - description: GMU interrupt

  interrupt-names:
    items:
      - const: oob
      - const: gmu

  operating-points-v2: true
  opp-table:
    type: object

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - power-domains
  - power-domain-names
  - interrupts
  - interrupt-names
  - operating-points-v2

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/qcom,qcs615-gpucc.h>
    #include <dt-bindings/clock/qcom,qcs615-gcc.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/power/qcom,rpmhpd.h>

    gmu@506a000 {
        compatible = "qcom,adreno-rgmu-612.0", "qcom,adreno-rgmu";

        reg = <0x05000000 0x90000>;

        clocks = <&gpucc GPU_CC_CX_GMU_CLK>,
                 <&gpucc GPU_CC_CXO_CLK>,
                 <&gcc GCC_DDRSS_GPU_AXI_CLK>,
                 <&gcc GCC_GPU_MEMNOC_GFX_CLK>,
                 <&gpucc GPU_CC_HLOS1_VOTE_GPU_SMMU_CLK>;
        clock-names = "gmu",
                      "cxo",
                      "axi",
                      "memnoc",
                      "smmu_vote";

        power-domains = <&gpucc CX_GDSC>,
                        <&gpucc GX_GDSC>;
        power-domain-names = "cx",
                             "gx";

        interrupts = <GIC_SPI 304 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 305 IRQ_TYPE_LEVEL_HIGH>;
        interrupt-names = "oob",
                          "gmu";

        operating-points-v2 = <&gmu_opp_table>;

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

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