# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/gpu/apple,agx.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Apple SoC GPU

maintainers:
  - Sasha Finkelstein <fnkl.kernel@gmail.com>

properties:
  compatible:
    oneOf:
      - enum:
          - apple,agx-g13g
          - apple,agx-g13s
          - apple,agx-g14g
      - items:
          - enum:
              - apple,agx-g13c
              - apple,agx-g13d
          - const: apple,agx-g13s

  reg:
    items:
      - description: GPU coprocessor control registers
      - description: GPU block MMIO registers

  reg-names:
    items:
      - const: asc
      - const: sgx

  power-domains:
    maxItems: 1

  mboxes:
    maxItems: 1

  memory-region:
    items:
      - description: Region containing GPU MMU TTBs
      - description: Region containing GPU MMU page tables
      - description:
          Region containing a shared handoff structure for VM
          management coordination
      - description: Calibration blob. Mostly power-related configuration
      - description: Calibration blob. Mostly GPU-related configuration
      - description: Shared global variables with GPU firmware

  memory-region-names:
    items:
      - const: ttbs
      - const: pagetables
      - const: handoff
      - const: hw-cal-a
      - const: hw-cal-b
      - const: globals

  apple,firmware-abi:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 3
    description:
      macOS version the current firmware is paired with, used to pick
      the version of firmware ABI to be used.
      Bootloader will overwrite this

required:
  - compatible
  - reg
  - mboxes
  - memory-region
  - apple,firmware-abi

additionalProperties: false

examples:
  - |
    gpu@6400000 {
        compatible = "apple,agx-g13g";
        reg = <0x6400000 0x40000>,
              <0x4000000 0x1000000>;
        reg-names = "asc", "sgx";
        mboxes = <&agx_mbox>;
        power-domains = <&ps_gfx>;
        memory-region = <&uat_ttbs>, <&uat_pagetables>, <&uat_handoff>,
                        <&gpu_hw_cal_a>, <&gpu_hw_cal_b>, <&gpu_globals>;
        memory-region-names = "ttbs", "pagetables", "handoff",
                              "hw-cal-a", "hw-cal-b", "globals";

        apple,firmware-abi = <0 0 0>;
    };
...
