# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/opp/opp-v2-qcom-adreno.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm Adreno compatible OPP supply

description:
  Adreno GPUs present in Qualcomm's Snapdragon chipsets uses an OPP specific
  ACD related information tailored for the specific chipset. This binding
  provides the information needed to describe such a hardware value.

maintainers:
  - Rob Clark <robdclark@gmail.com>

allOf:
  - $ref: opp-v2-base.yaml#

properties:
  compatible:
    contains:
      const: operating-points-v2-adreno

patternProperties:
  '^opp(-[0-9]+){1,2}$':
    type: object
    additionalProperties: false

    properties:
      opp-hz: true

      opp-level: true

      opp-peak-kBps: true

      opp-supported-hw: true

      qcom,opp-acd-level:
        description: |
          A positive value representing the ACD (Adaptive Clock Distribution,
          a fancy name for clk throttling during voltage droop) level associated
          with this OPP node. This value is shared to a co-processor inside GPU
          (called Graphics Management Unit a.k.a GMU) during wake up. It may not
          be present for some OPPs and GMU will disable ACD while transitioning
          to that OPP. This value encodes a voltage threshold, delay cycles &
          calibration margins which are identified by characterization of the
          SoC. So, it doesn't have any unit. This data is passed to GMU firmware
          via 'HFI_H2F_MSG_ACD' packet.
        $ref: /schemas/types.yaml#/definitions/uint32

    required:
      - opp-hz
      - opp-level

required:
  - compatible

additionalProperties: false

examples:
  - |
    #include <dt-bindings/power/qcom-rpmpd.h>

    gpu_opp_table: opp-table {
        compatible = "operating-points-v2-adreno", "operating-points-v2";

        opp-687000000 {
            opp-hz = /bits/ 64 <687000000>;
            opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>;
            opp-peak-kBps = <8171875>;
            qcom,opp-acd-level = <0x882e5ffd>;
        };

        opp-550000000 {
            opp-hz = /bits/ 64 <550000000>;
            opp-level = <RPMH_REGULATOR_LEVEL_SVS>;
            opp-peak-kBps = <6074219>;
            qcom,opp-acd-level = <0xc0285ffd>;
        };

        opp-390000000 {
            opp-hz = /bits/ 64 <390000000>;
            opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>;
            opp-peak-kBps = <3000000>;
            qcom,opp-acd-level = <0xc0285ffd>;
        };

        opp-300000000 {
            opp-hz = /bits/ 64 <300000000>;
            opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D1>;
            opp-peak-kBps = <2136719>;
            /* Intentionally left out qcom,opp-acd-level property here */
        };

    };
