# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright (c) 2023 Imagination Technologies Ltd.
# Copyright (C) 2024 Texas Instruments Incorporated - https://www.ti.com/
%YAML 1.2
---
$id: http://devicetree.org/schemas/gpu/img,powervr-sgx.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Imagination Technologies PowerVR SGX GPUs

maintainers:
  - Frank Binns <frank.binns@imgtec.com>

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - ti,omap3430-gpu # Rev 121
              - ti,omap3630-gpu # Rev 125
          - const: img,powervr-sgx530
      - items:
          - enum:
              - ingenic,jz4780-gpu # Rev 130
              - ti,omap4430-gpu # Rev 120
          - const: img,powervr-sgx540
      - items:
          - enum:
              - allwinner,sun6i-a31-gpu # MP2 Rev 115
              - ti,omap4470-gpu # MP1 Rev 112
              - ti,omap5432-gpu # MP2 Rev 105
              - ti,am5728-gpu # MP2 Rev 116
              - ti,am6548-gpu # MP1 Rev 117
          - const: img,powervr-sgx544

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    minItems: 1
    maxItems: 3

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

  power-domains:
    maxItems: 1

required:
  - compatible
  - reg
  - interrupts

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: ti,am6548-gpu
    then:
      required:
        - power-domains
    else:
      properties:
        power-domains: false
  - if:
      properties:
        compatible:
          contains:
            enum:
              - allwinner,sun6i-a31-gpu
              - ingenic,jz4780-gpu
    then:
      required:
        - clocks
        - clock-names
    else:
      properties:
        clocks: false
        clock-names: false
  - if:
      properties:
        compatible:
          contains:
            const: allwinner,sun6i-a31-gpu
    then:
      properties:
        clocks:
          minItems: 2
          maxItems: 2
        clock-names:
          minItems: 2
          maxItems: 2
  - if:
      properties:
        compatible:
          contains:
            const: ingenic,jz4780-gpu
    then:
      properties:
        clocks:
          maxItems: 1
        clock-names:
          maxItems: 1

additionalProperties: false

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@7000000 {
        compatible = "ti,am6548-gpu", "img,powervr-sgx544";
        reg = <0x7000000 0x10000>;
        interrupts = <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>;
        power-domains = <&k3_pds 65 TI_SCI_PD_EXCLUSIVE>;
    };

  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    gpu: gpu@1c40000 {
        compatible = "allwinner,sun6i-a31-gpu", "img,powervr-sgx544";
        reg = <0x01c40000 0x10000>;
        interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&ccu 1>, <&ccu 2>;
        clock-names = "core", "mem";
    };
