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

title: Qualcomm IP Accelerator (IPA)

maintainers:
  - Alex Elder <elder@kernel.org>

description:
  This binding describes the Qualcomm IPA.  The IPA is capable of offloading
  certain network processing tasks (e.g. filtering, routing, and NAT) from
  the main processor.

  The IPA sits between multiple independent "execution environments,"
  including the Application Processor (AP) and the modem.  The IPA presents
  a Generic Software Interface (GSI) to each execution environment.
  The GSI is an integral part of the IPA, but it is logically isolated
  and has a distinct interrupt and a separately-defined address space.

  See also soc/qcom/qcom,smp2p.txt and interconnect/interconnect.txt.  See
  iommu/iommu.txt and iommu/arm,smmu.yaml for more information about SMMU
  bindings.


  - |
    --------             ---------
    |      |             |       |
    |  AP  +<---.   .----+ Modem |
    |      +--. |   | .->+       |
    |      |  | |   | |  |       |
    --------  | |   | |  ---------
              v |   v |
            --+-+---+-+--
            |    GSI    |
            |-----------|
            |           |
            |    IPA    |
            |           |
            -------------

properties:
  compatible:
    const: "qcom,sdm845-ipa"

  reg:
    items:
      - description: IPA registers
      - description: IPA shared memory
      - description: GSI registers

  reg-names:
    items:
      - const: ipa-reg
      - const: ipa-shared
      - const: gsi

  iommus:
    maxItems: 1

  clocks:
    maxItems: 1

  clock-names:
    const: core

  interrupts:
    items:
      - description: IPA interrupt (hardware IRQ)
      - description: GSI interrupt (hardware IRQ)
      - description: Modem clock query interrupt (smp2p interrupt)
      - description: Modem setup ready interrupt (smp2p interrupt)

  interrupt-names:
    items:
      - const: ipa
      - const: gsi
      - const: ipa-clock-query
      - const: ipa-setup-ready

  interconnects:
    items:
      - description: Interconnect path between IPA and main memory
      - description: Interconnect path between IPA and internal memory
      - description: Interconnect path between IPA and the AP subsystem

  interconnect-names:
    items:
      - const: memory
      - const: imem
      - const: config

  qcom,smem-states:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    description: State bits used in by the AP to signal the modem.
    items:
      - description: Whether the "ipa-clock-enabled" state bit is valid
      - description: Whether the IPA clock is enabled (if valid)

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

  modem-init:
    type: boolean
    description:
      If present, it indicates that the modem is responsible for
      performing early IPA initialization, including loading and
      validating firwmare used by the GSI.

  modem-remoteproc:
    $ref: /schemas/types.yaml#definitions/phandle
    description:
      This defines the phandle to the remoteproc node representing
      the modem subsystem.  This is requied so the IPA driver can
      receive and act on notifications of modem up/down events.

  memory-region:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    maxItems: 1
    description:
      If present, a phandle for a reserved memory area that holds
      the firmware passed to Trust Zone for authentication.  Required
      when Trust Zone (not the modem) performs early initialization.

required:
  - compatible
  - iommus
  - reg
  - clocks
  - interrupts
  - interconnects
  - qcom,smem-states
  - modem-remoteproc

oneOf:
  - required:
      - modem-init
  - required:
      - memory-region

additionalProperties: false

examples:
  - |
        #include <dt-bindings/interrupt-controller/irq.h>
        #include <dt-bindings/clock/qcom,rpmh.h>
        #include <dt-bindings/interconnect/qcom,sdm845.h>

        smp2p-mpss {
                compatible = "qcom,smp2p";
                ipa_smp2p_out: ipa-ap-to-modem {
                        qcom,entry-name = "ipa";
                        #qcom,smem-state-cells = <1>;
                };

                ipa_smp2p_in: ipa-modem-to-ap {
                        qcom,entry-name = "ipa";
                        interrupt-controller;
                        #interrupt-cells = <2>;
                };
        };
        ipa@1e40000 {
                compatible = "qcom,sdm845-ipa";

                modem-init;
                modem-remoteproc = <&mss_pil>;

                iommus = <&apps_smmu 0x720 0x3>;
                reg = <0x1e40000 0x7000>,
                        <0x1e47000 0x2000>,
                        <0x1e04000 0x2c000>;
                reg-names = "ipa-reg",
                            "ipa-shared",
                            "gsi";

                interrupts-extended = <&intc 0 311 IRQ_TYPE_EDGE_RISING>,
                                      <&intc 0 432 IRQ_TYPE_LEVEL_HIGH>,
                                      <&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
                                      <&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>;
                interrupt-names = "ipa",
                                  "gsi",
                                  "ipa-clock-query",
                                  "ipa-setup-ready";

                clocks = <&rpmhcc RPMH_IPA_CLK>;
                clock-names = "core";

                interconnects =
                        <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_EBI1>,
                        <&rsc_hlos MASTER_IPA &rsc_hlos SLAVE_IMEM>,
                        <&rsc_hlos MASTER_APPSS_PROC &rsc_hlos SLAVE_IPA_CFG>;
                interconnect-names = "memory",
                                     "imem",
                                     "config";

                qcom,smem-states = <&ipa_smp2p_out 0>,
                                   <&ipa_smp2p_out 1>;
                qcom,smem-state-names = "ipa-clock-enabled-valid",
                                        "ipa-clock-enabled";
        };
