# 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

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,msm8226-adsp-pil
      - 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,sc7280-mpss-pas
      - qcom,sc8180x-adsp-pas
      - qcom,sc8180x-cdsp-pas
      - qcom,sc8180x-mpss-pas
      - qcom,sc8280xp-adsp-pas
      - qcom,sc8280xp-nsp0-pas
      - qcom,sc8280xp-nsp1-pas
      - qcom,sdm660-adsp-pas
      - qcom,sdm845-adsp-pas
      - qcom,sdm845-cdsp-pas
      - qcom,sdx55-mpss-pas
      - qcom,sm6350-adsp-pas
      - qcom,sm6350-cdsp-pas
      - qcom,sm6350-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,sm8450-adsp-pas
      - qcom,sm8450-cdsp-pas
      - qcom,sm8450-mpss-pas
      - qcom,sm8450-slpi-pas

  reg:
    maxItems: 1

  clocks:
    minItems: 1
    maxItems: 8

  clock-names:
    minItems: 1
    maxItems: 8

  interconnects:
    maxItems: 1

  interrupts:
    minItems: 5
    items:
      - description: Watchdog interrupt
      - description: Fatal interrupt
      - description: Ready interrupt
      - description: Handover interrupt
      - description: Stop acknowledge interrupt
      - description: Shutdown acknowledge interrupt

  interrupt-names:
    minItems: 5
    items:
      - const: wdog
      - const: fatal
      - const: ready
      - const: handover
      - const: stop-ack
      - const: shutdown-ack

  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,qmp:
    $ref: /schemas/types.yaml#/definitions/phandle
    description: Reference to the AOSS side-channel message RAM.

  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:
    description: The names of the state bits used for SMP2P output
    items:
      - const: stop

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

  smd-edge:
    $ref: /schemas/remoteproc/qcom,smd-edge.yaml#
    description:
      Qualcomm Shared Memory subnode which represents communication edge,
      channels and devices related to the ADSP.
    unevaluatedProperties: false

  glink-edge:
    $ref: /schemas/remoteproc/qcom,glink-edge.yaml#
    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,msm8226-adsp-pil
              - 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,sc7280-mpss-pas
              - qcom,sc8180x-adsp-pas
              - qcom,sc8180x-cdsp-pas
              - qcom,sc8180x-mpss-pas
              - qcom,sc8280xp-adsp-pas
              - qcom,sc8280xp-nsp0-pas
              - qcom,sc8280xp-nsp1-pas
              - qcom,sdm845-adsp-pas
              - qcom,sdm845-cdsp-pas
              - qcom,sm6350-adsp-pas
              - qcom,sm6350-cdsp-pas
              - qcom,sm6350-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,sm8450-adsp-pas
              - qcom,sm8450-cdsp-pas
              - qcom,sm8450-slpi-pas
              - qcom,sm8450-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,msm8226-adsp-pil
              - 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,sc8280xp-adsp-pas
              - qcom,sc8280xp-nsp0-pas
              - qcom,sc8280xp-nsp1-pas
              - qcom,sdm845-adsp-pas
              - qcom,sdm845-cdsp-pas
              - qcom,sm6350-adsp-pas
              - qcom,sm6350-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
              - qcom,sm8450-adsp-pas
              - qcom,sm8450-cdsp-pas
              - qcom,sm8450-slpi-pas
    then:
      properties:
        interrupts:
          maxItems: 5
        interrupt-names:
          maxItems: 5

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sc7180-mpss-pas
              - qcom,sc7280-mpss-pas
              - qcom,sc8180x-mpss-pas
              - qcom,sdx55-mpss-pas
              - qcom,sm6350-mpss-pas
              - qcom,sm8150-mpss-pas
              - qcom,sm8350-mpss-pas
              - qcom,sm8450-mpss-pas
    then:
      properties:
        interrupts:
          minItems: 6
        interrupt-names:
          minItems: 6

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

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,msm8226-adsp-pil
              - qcom,msm8996-adsp-pil
              - qcom,msm8998-adsp-pas
              - qcom,sm8150-adsp-pas
              - qcom,sm8150-cdsp-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: CX power domain
            - description: MX power domain
            - description: MSS power domain
        power-domain-names:
          items:
            - const: cx
            - const: mx
            - const: mss

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sm6350-cdsp-pas
    then:
      properties:
        power-domains:
          items:
            - description: CX power domain
            - description: MX power domain
        power-domain-names:
          items:
            - const: cx
            - const: mx

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sc7280-mpss-pas
              - qcom,sdx55-mpss-pas
              - qcom,sm6350-mpss-pas
              - qcom,sm8150-mpss-pas
              - qcom,sm8350-mpss-pas
              - qcom,sm8450-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,sc8280xp-adsp-pas
              - qcom,sm6350-adsp-pas
              - qcom,sm8150-slpi-pas
              - qcom,sm8250-adsp-pas
              - qcom,sm8250-slpi-pas
              - qcom,sm8350-adsp-pas
              - qcom,sm8350-slpi-pas
              - qcom,sm8450-adsp-pas
              - qcom,sm8450-slpi-pas
    then:
      properties:
        power-domains:
          items:
            - description: LCX power domain
            - description: LMX power domain
        power-domain-names:
          items:
            - const: lcx
            - const: lmx

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

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sc8280xp-nsp0-pas
              - qcom,sc8280xp-nsp1-pas
    then:
      properties:
        power-domains:
          items:
            - description: NSP power domain
        power-domain-names:
          items:
            - const: nsp

  - 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
              - qcom,sc7280-mpss-pas
    then:
      properties:
        resets:
          items:
            - description: MSS restart
            - description: PDC reset
        reset-names:
          items:
            - const: mss_restart
            - const: pdc_reset

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,msm8226-adsp-pil
              - 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,sdm660-adsp-pas
              - qcom,sdx55-mpss-pas
    then:
      properties:
        qcom,qmp: false

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

        interrupts-extended = <&intc GIC_SPI 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 = <GIC_SPI 156 IRQ_TYPE_EDGE_RISING>;

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