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

title: TI CPU OPP (Operating Performance Points)

description:
  TI SoCs, like those in the AM335x, AM437x, AM57xx, AM62x, and DRA7xx
  families, the CPU frequencies subset and the voltage value of each
  OPP vary based on the silicon variant used. The data sheet sections
  corresponding to "Operating Performance Points" describe the frequency
  and voltage values based on device type and speed bin information
  blown in corresponding eFuse bits as referred to by the Technical
  Reference Manual.

  This document extends the operating-points-v2 binding by providing
  the hardware description for the scheme mentioned above.

maintainers:
  - Dhruva Gole <d-gole@ti.com>

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

properties:
  compatible:
    const: operating-points-v2-ti-cpu

  syscon:
    $ref: /schemas/types.yaml#/definitions/phandle
    description: |
      points to syscon node representing the control module
      register space of the SoC.

  opp-shared: true

patternProperties:
  '^opp(-?[0-9]+)*$':
    type: object
    additionalProperties: false

    properties:
      clock-latency-ns: true
      opp-hz: true
      opp-microvolt: true
      opp-supported-hw: true
      opp-suspend: true
      turbo-mode: true

    required:
      - opp-hz
      - opp-supported-hw

required:
  - compatible
  - syscon

additionalProperties: false

examples:
  - |
    opp-table {
        compatible = "operating-points-v2-ti-cpu";
        syscon = <&scm_conf>;

        opp-300000000 {
            opp-hz = /bits/ 64 <300000000>;
            opp-microvolt = <1100000 1078000 1122000>;
            opp-supported-hw = <0x06 0x0020>;
            opp-suspend;
        };

        opp-500000000 {
            opp-hz = /bits/ 64 <500000000>;
            opp-microvolt = <1100000 1078000 1122000>;
            opp-supported-hw = <0x01 0xFFFF>;
        };

        opp-600000000 {
            opp-hz = /bits/ 64 <600000000>;
            opp-microvolt = <1100000 1078000 1122000>;
            opp-supported-hw = <0x06 0x0040>;
        };

        opp-1000000000 {
            opp-hz = /bits/ 64 <1000000000>;
            opp-microvolt = <1325000 1298500 1351500>;
            opp-supported-hw = <0x04 0x0200>;
        };
    };
