# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright (c) 2023 Imagination Technologies Ltd.
%YAML 1.2
---
$id: http://devicetree.org/schemas/gpu/img,powervr-rogue.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Imagination Technologies PowerVR and IMG Rogue GPUs

maintainers:
  - Alessio Belle <alessio.belle@imgtec.com>
  - Luigi Santivetti <luigi.santivetti@imgtec.com>

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - mediatek,mt8173-gpu
              - renesas,r8a7796-gpu
              - renesas,r8a77961-gpu
          - const: img,img-gx6250
          - const: img,img-rogue
      - items:
          - enum:
              - renesas,r8a77965-gpu
              - renesas,r8a779a0-gpu
          - const: img,img-ge7800
          - const: img,img-rogue
      - items:
          - enum:
              - ti,am62-gpu
          - const: img,img-axe-1-16m
          # This deprecated element must be kept around to allow old kernels to
          # work with newer dts.
          - const: img,img-axe
          - const: img,img-rogue
      - items:
          - enum:
              - thead,th1520-gpu
          - const: img,img-bxm-4-64
          - const: img,img-rogue
      - items:
          - enum:
              - ti,am62p-gpu
              - ti,j721s2-gpu
          - const: img,img-bxs-4-64
          - const: img,img-rogue

      # This legacy combination of compatible strings was introduced early on
      # before the more specific GPU identifiers were used.
      - items:
          - enum:
              - ti,am62-gpu
          - const: img,img-axe
        deprecated: true

  reg:
    maxItems: 1

  clocks:
    minItems: 1
    maxItems: 3

  clock-names:
    items:
      - const: core
      - const: mem
      - const: sys
    minItems: 1

  interrupts:
    maxItems: 1

  power-domains:
    minItems: 1
    maxItems: 2

  power-domain-names:
    items:
      - const: a
      - const: b
    minItems: 1

  dma-coherent: true

  resets:
    maxItems: 1

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - interrupts

additionalProperties: false

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - ti,am62-gpu
              - ti,am62p-gpu
              - ti,j721s2-gpu
    then:
      properties:
        clocks:
          maxItems: 1

  - if:
      properties:
        compatible:
          contains:
            enum:
              - img,img-ge7800
              - img,img-gx6250
              - thead,th1520-gpu
    then:
      properties:
        clocks:
          minItems: 3
        clock-names:
          minItems: 3

  - if:
      properties:
        compatible:
          contains:
            const: img,img-axe-1-16m
    then:
      properties:
        power-domains:
          maxItems: 1
        power-domain-names:
          maxItems: 1
      required:
        - power-domains
        - power-domain-names

  - if:
      properties:
        compatible:
          contains:
            enum:
              - img,img-bxs-4-64
              - img,img-ge7800
              - img,img-gx6250
    then:
      properties:
        power-domains:
          minItems: 2
        power-domain-names:
          minItems: 2
      required:
        - power-domains
        - power-domain-names

  - if:
      properties:
        compatible:
          contains:
            const: thead,th1520-gpu
    then:
      properties:
        power-domains:
          items:
            - description: The single, unified power domain for the GPU on the
                TH1520 SoC, integrating all internal IP power domains.
        power-domain-names: false
      required:
        - power-domains

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/soc/ti,sci_pm_domain.h>

    gpu@fd00000 {
        compatible = "ti,am62-gpu", "img,img-axe-1-16m", "img,img-axe",
                     "img,img-rogue";
        reg = <0x0fd00000 0x20000>;
        clocks = <&k3_clks 187 0>;
        clock-names = "core";
        interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
        power-domains = <&k3_pds 187 TI_SCI_PD_EXCLUSIVE>;
        power-domain-names = "a";
    };