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

title: Qualcomm ADSP Peripheral Image Loader binding

maintainers:
  - Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

description:
  This document defines the binding for a component that loads and boots
  firmware on the Qualcomm ADSP Hexagon core.

properties:
  compatible:
    enum:
      - qcom,msm8974-adsp-pil
      - qcom,msm8996-adsp-pil
      - qcom,msm8996-slpi-pil
      - qcom,msm8998-adsp-pas
      - qcom,msm8998-slpi-pas
      - qcom,qcs404-adsp-pas
      - qcom,qcs404-cdsp-pas
      - qcom,qcs404-wcss-pas
      - qcom,sc7180-mpss-pas
      - qcom,sc8180x-adsp-pas
      - qcom,sc8180x-cdsp-pas
      - qcom,sc8180x-mpss-pas
      - qcom,sdm845-adsp-pas
      - qcom,sdm845-cdsp-pas
      - qcom,sdx55-mpss-pas
      - qcom,sm8150-adsp-pas
      - qcom,sm8150-cdsp-pas
      - qcom,sm8150-mpss-pas
      - qcom,sm8150-slpi-pas
      - qcom,sm8250-adsp-pas
      - qcom,sm8250-cdsp-pas
      - qcom,sm8250-slpi-pas
      - qcom,sm8350-adsp-pas
      - qcom,sm8350-cdsp-pas
      - qcom,sm8350-slpi-pas
      - qcom,sm8350-mpss-pas
      - qcom,waipio-adsp-pas
      - qcom,waipio-cdsp-pas
      - qcom,waipio-slpi-pas
      - qcom,waipio-modem-pas

  reg:
    maxItems: 1

  clocks:
    minItems: 1
    maxItems: 8

  clock-names:
    minItems: 1
    maxItems: 8

  interrupts:
    minItems: 5
    maxItems: 6

  interrupt-names:
    minItems: 5
    maxItems: 6

  resets:
    minItems: 1
    maxItems: 3

  reset-names:
    minItems: 1
    maxItems: 3

  cx-supply:
    description: Phandle to the CX regulator

  px-supply:
    description: Phandle to the PX regulator

  power-domains:
    minItems: 1
    maxItems: 3

  power-domain-names:
    minItems: 1
    maxItems: 3

  firmware-name:
    $ref: /schemas/types.yaml#/definitions/string
    description: Firmware name for the Hexagon core

  memory-region:
    maxItems: 1
    description: Reference to the reserved-memory for the Hexagon core

  qcom,smem-states:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    description: States used by the AP to signal the Hexagon core
    items:
      - description: Stop the modem

  qcom,smem-state-names:
    $ref: /schemas/types.yaml#/definitions/string-array
    description: The names of the state bits used for SMP2P output
    items:
      - const: stop

  qcom,halt-regs:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    description:
      Phandle reference to a syscon representing TCSR followed by the
      three offsets within syscon for q6, modem and nc halt registers.

  smd-edge:
    type: object
    description:
      Qualcomm Shared Memory subnode which represents communication edge,
      channels and devices related to the ADSP.

  glink-edge:
    type: object
    description:
      Qualcomm G-Link subnode which represents communication edge, channels
      and devices related to the ADSP.

required:
  - compatible
  - clocks
  - clock-names
  - interrupts
  - interrupt-names
  - memory-region
  - qcom,smem-states
  - qcom,smem-state-names

additionalProperties: false

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,msm8974-adsp-pil
              - qcom,msm8996-adsp-pil
              - qcom,msm8996-slpi-pil
              - qcom,msm8998-adsp-pas
              - qcom,qcs404-adsp-pas
              - qcom,qcs404-wcss-pas
              - qcom,sc8180x-adsp-pas
              - qcom,sc8180x-cdsp-pas
              - qcom,sc8180x-mpss-pas
              - qcom,sdm845-adsp-pas
              - qcom,sdm845-cdsp-pas
              - qcom,sm8150-adsp-pas
              - qcom,sm8150-cdsp-pas
              - qcom,sm8150-mpss-pas
              - qcom,sm8150-slpi-pas
              - qcom,sm8250-adsp-pas
              - qcom,sm8250-cdsp-pas
              - qcom,sm8250-slpi-pas
              - qcom,sm8350-adsp-pas
              - qcom,sm8350-cdsp-pas
              - qcom,sm8350-slpi-pas
              - qcom,sm8350-mpss-pas
    then:
      properties:
        clocks:
          items:
            - description: XO clock
        clock-names:
          items:
            - const: xo

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,msm8998-slpi-pas
    then:
      properties:
        clocks:
          items:
            - description: XO clock
            - description: AGGRE2 clock
        clock-names:
          items:
            - const: xo
            - const: aggre2

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,qcs404-cdsp-pas
    then:
      properties:
        clocks:
          items:
            - description: XO clock
            - description: SWAY clock
            - description: TBU clock
            - description: BIMC clock
            - description: AHB AON clock
            - description: Q6SS SLAVE clock
            - description: Q6SS MASTER clock
            - description: Q6 AXIM clock
        clock-names:
          items:
            - const: xo
            - const: sway
            - const: tbu
            - const: bimc
            - const: ahb_aon
            - const: q6ss_slave
            - const: q6ss_master
            - const: q6_axim

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sc7180-mpss-pas
    then:
      properties:
        clocks:
          items:
            - description: XO clock
            - description: IFACE clock
            - description: BUS clock
            - description: NAC clock
            - description: SNOC AXI clock
            - description: MNOC AXI clock
        clock-names:
          items:
            - const: xo
            - const: iface
            - const: bus
            - const: nav
            - const: snoc_axi
            - const: mnoc_axi

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,msm8974-adsp-pil
              - qcom,msm8996-adsp-pil
              - qcom,msm8996-slpi-pil
              - qcom,msm8998-adsp-pas
              - qcom,msm8998-slpi-pas
              - qcom,qcs404-adsp-pas
              - qcom,qcs404-cdsp-pas
              - qcom,qcs404-wcss-pas
              - qcom,sc8180x-adsp-pas
              - qcom,sc8180x-cdsp-pas
              - qcom,sdm845-adsp-pas
              - qcom,sdm845-cdsp-pas
              - qcom,sm8150-adsp-pas
              - qcom,sm8150-cdsp-pas
              - qcom,sm8150-slpi-pas
              - qcom,sm8250-adsp-pas
              - qcom,sm8250-cdsp-pas
              - qcom,sm8250-slpi-pas
              - qcom,sm8350-adsp-pas
              - qcom,sm8350-cdsp-pas
              - qcom,sm8350-slpi-pas
    then:
      properties:
        interrupts:
          items:
            - description: Watchdog interrupt
            - description: Fatal interrupt
            - description: Ready interrupt
            - description: Handover interrupt
            - description: Stop acknowledge interrupt
        interrupt-names:
          items:
            - const: wdog
            - const: fatal
            - const: ready
            - const: handover
            - const: stop-ack

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sc7180-mpss-pas
              - qcom,sc8180x-mpss-pas
              - qcom,sdx55-mpss-pas
              - qcom,sm8150-mpss-pas
              - qcom,sm8350-mpss-pas
    then:
      properties:
        interrupts:
          items:
            - description: Watchdog interrupt
            - description: Fatal interrupt
            - description: Ready interrupt
            - description: Handover interrupt
            - description: Stop acknowledge interrupt
            - description: Shutdown acknowledge interrupt
        interrupt-names:
          items:
            - const: wdog
            - const: fatal
            - const: ready
            - const: handover
            - const: stop-ack
            - const: shutdown-ack

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,msm8974-adsp-pil
    then:
      required:
        - cx-supply

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,msm8996-adsp-pil
              - qcom,msm8998-adsp-pas
    then:
      properties:
        power-domains:
          items:
            - description: CX power domain
        power-domain-names:
          items:
            - const: cx

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,msm8996-slpi-pil
              - qcom,msm8998-slpi-pas
    then:
      properties:
        power-domains:
          items:
            - description: SSC-CX power domain
        power-domain-names:
          items:
            - const: ssc_cx
      required:
        - px-supply

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sc7180-mpss-pas
    then:
      properties:
        power-domains:
          items:
            - description: Load State power domain
            - description: CX power domain
            - description: MX power domain
            - description: MSS power domain
        power-domain-names:
          items:
            - const: load_state
            - const: cx
            - const: mx
            - const: mss

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sm8150-adsp-pas
              - qcom,sm8150-cdsp-pas
    then:
      properties:
        power-domains:
          items:
            - description: Load State power domain
            - description: CX power domain
        power-domain-names:
          items:
            - const: load_state
            - const: cx

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sm8150-mpss-pas
              - qcom,sm8350-mpss-pas
    then:
      properties:
        power-domains:
          items:
            - description: Load State power domain
            - description: CX power domain
            - description: MSS power domain
        power-domain-names:
          items:
            - const: load_state
            - const: cx
            - const: mss

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sdx55-mpss-pas
    then:
      properties:
        power-domains:
          items:
            - description: CX power domain
            - description: MSS power domain
        power-domain-names:
          items:
            - const: cx
            - const: mss

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sc8180x-adsp-pas
              - qcom,sc8180x-cdsp-pas
              - qcom,sm8150-slpi-pas
              - qcom,sm8250-adsp-pas
              - qcom,sm8250-slpi-pas
              - qcom,sm8350-adsp-pas
              - qcom,sm8350-slpi-pas
    then:
      properties:
        power-domains:
          items:
            - description: Load State power domain
            - description: LCX power domain
            - description: LMX power domain
        power-domain-names:
          items:
            - const: load_state
            - const: lcx
            - const: lmx

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sm8350-cdsp-pas
    then:
      properties:
        power-domains:
          items:
            - description: Load State power domain
            - description: CX power domain
            - description: MXC power domain
        power-domain-names:
          items:
            - const: load_state
            - const: cx
            - const: mxc

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,qcs404-cdsp-pas
    then:
      properties:
        resets:
          items:
            - description: CDSP restart
        reset-names:
          items:
            - const: restart

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sc7180-mpss-pas
    then:
      properties:
        resets:
          items:
            - description: MSS restart
            - description: PDC reset
        reset-names:
          items:
            - const: mss_restart
            - const: pdc_reset

examples:
  - |
    #include <dt-bindings/clock/qcom,rpmcc.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    adsp {
        compatible = "qcom,msm8974-adsp-pil";

        interrupts-extended = <&intc 0 162 IRQ_TYPE_EDGE_RISING>,
                      <&adsp_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
                      <&adsp_smp2p_in 1 IRQ_TYPE_EDGE_RISING>,
                      <&adsp_smp2p_in 2 IRQ_TYPE_EDGE_RISING>,
                      <&adsp_smp2p_in 3 IRQ_TYPE_EDGE_RISING>;
        interrupt-names = "wdog",
                  "fatal",
                  "ready",
                  "handover",
                  "stop-ack";

        clocks = <&rpmcc RPM_CXO_CLK>;
        clock-names = "xo";

        cx-supply = <&pm8841_s2>;

        memory-region = <&adsp_region>;

        qcom,smem-states = <&adsp_smp2p_out 0>;
        qcom,smem-state-names = "stop";

        smd-edge {
            interrupts = <0 156 IRQ_TYPE_EDGE_RISING>;

            qcom,ipc = <&apcs 8 8>;
            qcom,smd-edge = <1>;
        };
    };
