# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/firmware/intel,stratix10-svc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Intel Service Layer Driver for Stratix10 SoC

maintainers:
  - Dinh Nguyen <dinguyen@kernel.org>
  - Mahesh Rao <mahesh.rao@altera.com>

description: >
  Intel Stratix10 SoC is composed of a 64 bit quad-core ARM Cortex A53 hard
  processor system (HPS) and Secure Device Manager (SDM). When the FPGA is
  configured from HPS, there needs to be a way for HPS to notify SDM the
  location and size of the configuration data. Then SDM will get the
  configuration data from that location and perform the FPGA configuration.

  To meet the whole system security needs and support virtual machine requesting
  communication with SDM, only the secure world of software (EL3, Exception
  Layer 3) can interface with SDM. All software entities running on other
  exception layers must channel through the EL3 software whenever it needs
  service from SDM.

  Intel Stratix10 service layer driver, running at privileged exception level
  (EL1, Exception Layer 1), interfaces with the service providers and provides
  the services for FPGA configuration, QSPI, Crypto and warm reset. Service layer
  driver also manages secure monitor call (SMC) to communicate with secure monitor
  code running in EL3.

properties:
  compatible:
    enum:
      - intel,stratix10-svc
      - intel,agilex-svc
      - intel,agilex5-svc

  method:
    description: |
      Supervisory call method to be used to communicate with the
      secure service layer.
      Permitted values are:
      - "smc" : SMC #0, following the SMCCC
      - "hvc" : HVC #0, following the SMCCC

    $ref: /schemas/types.yaml#/definitions/string-array
    enum:
      - smc
      - hvc

  memory-region:
    maxItems: 1
    description:
      reserved memory region for the service layer driver to
      communicate with the secure device manager.

  iommus:
    maxItems: 1

  fpga-mgr:
    $ref: /schemas/fpga/intel,stratix10-soc-fpga-mgr.yaml
    description: Optional child node for fpga manager to perform fabric configuration.

required:
  - compatible
  - method
  - memory-region

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - intel,agilex5-svc
    then:
      required:
        - iommus

additionalProperties: false

examples:
  - |
    reserved-memory {
      #address-cells = <2>;
      #size-cells = <2>;

      service_reserved: svcbuffer@0 {
              compatible = "shared-dma-pool";
              reg = <0x0 0x0 0x0 0x1000000>;
              alignment = <0x1000>;
              no-map;
      };
    };

    firmware {
      svc {
        compatible = "intel,stratix10-svc";
        method = "smc";
        memory-region = <&service_reserved>;

        fpga-mgr {
          compatible = "intel,stratix10-soc-fpga-mgr";
        };
      };
    };

