162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/remoteproc/qcom,rpm-proc.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Qualcomm Resource Power Manager (RPM) Processor/Subsystem
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Bjorn Andersson <andersson@kernel.org>
1162306a36Sopenharmony_ci  - Konrad Dybcio <konrad.dybcio@linaro.org>
1262306a36Sopenharmony_ci  - Stephan Gerhold <stephan@gerhold.net>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cidescription: |
1562306a36Sopenharmony_ci  Resource Power Manager (RPM) subsystem found in various Qualcomm platforms:
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci                  +--------------------------------------------+
1862306a36Sopenharmony_ci                  |       RPM subsystem (qcom,rpm-proc)        |
1962306a36Sopenharmony_ci                  |                                            |
2062306a36Sopenharmony_ci            reset | +---------------+     +-----+  +-----+     |
2162306a36Sopenharmony_ci          --------->|               |     | MPM |  | CPR | ... |
2262306a36Sopenharmony_ci   IPC interrupts | | ARM Cortex-M3 |---  +-----+  +-----+     |
2362306a36Sopenharmony_ci  ----------------->|               |  |     |        |        |
2462306a36Sopenharmony_ci                  | +---------------+  |---------------------- |
2562306a36Sopenharmony_ci                  | +---------------+  |                       |
2662306a36Sopenharmony_ci                  | |   Code RAM    |--|  +------------------+ |
2762306a36Sopenharmony_ci                  | +---------------+  |  |                  | |
2862306a36Sopenharmony_ci                  | +---------------+  |--|   Message RAM    | |
2962306a36Sopenharmony_ci                  | |   Data RAM    |--|  |                  | |
3062306a36Sopenharmony_ci                  | +---------------+  |  +------------------+ |
3162306a36Sopenharmony_ci                  +--------------------|-----------------------+
3262306a36Sopenharmony_ci                                       v
3362306a36Sopenharmony_ci                                      NoC
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci  The firmware running on the processor inside the RPM subsystem allows each
3662306a36Sopenharmony_ci  component in the system to vote for state of the system resources, such as
3762306a36Sopenharmony_ci  clocks, regulators and bus frequencies. It implements multiple separate
3862306a36Sopenharmony_ci  communication interfaces that are described in subnodes, e.g. SMD and MPM:
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci             +------------------------------+
4162306a36Sopenharmony_ci             |        ARM Cortex-M3         |
4262306a36Sopenharmony_ci             |                              |   +------------------------------+
4362306a36Sopenharmony_ci             | +--------------------------+ |   |          Message RAM         |
4462306a36Sopenharmony_ci             | |  RPM firmware            | |   |                              |
4562306a36Sopenharmony_ci   IPC IRQ 0 | | +----------------------+ | |   | +--------------------------+ |
4662306a36Sopenharmony_ci  -------------->| SMD server           |<------->| SMD data structures      | |
4762306a36Sopenharmony_ci             | | | +--------------+     | | |   | | +--------------+         | |
4862306a36Sopenharmony_ci             | | | | rpm_requests | ... | | |   | | | rpm_requests |   ...   | |
4962306a36Sopenharmony_ci             | | | +--------------+     | | |   | | +--------------+         | |
5062306a36Sopenharmony_ci   IPC IRQ 1 | | +----------------------+ | |   | +--------------------------+ |
5162306a36Sopenharmony_ci  -------------->| MPM virtualization   |<--------| MPM register copy (vMPM) | |
5262306a36Sopenharmony_ci             | | +----------------------+ | |   | +--------------------------+ |
5362306a36Sopenharmony_ci             | |           ...      |     | |   |              ...             |
5462306a36Sopenharmony_ci             | +--------------------|-----+ |   +------------------------------+
5562306a36Sopenharmony_ci             +----------------------|-------+
5662306a36Sopenharmony_ci                                    v
5762306a36Sopenharmony_ci                             +--------------+
5862306a36Sopenharmony_ci                             | MPM Hardware |
5962306a36Sopenharmony_ci                             +--------------+
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci  The services provided by the firmware are only available after the firmware
6262306a36Sopenharmony_ci  has been loaded and the processor has been released from reset. Usually this
6362306a36Sopenharmony_ci  happens early in the boot process before the operating system is started.
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ciproperties:
6662306a36Sopenharmony_ci  compatible:
6762306a36Sopenharmony_ci    items:
6862306a36Sopenharmony_ci      - enum:
6962306a36Sopenharmony_ci          - qcom,apq8084-rpm-proc
7062306a36Sopenharmony_ci          - qcom,ipq6018-rpm-proc
7162306a36Sopenharmony_ci          - qcom,ipq9574-rpm-proc
7262306a36Sopenharmony_ci          - qcom,mdm9607-rpm-proc
7362306a36Sopenharmony_ci          - qcom,msm8226-rpm-proc
7462306a36Sopenharmony_ci          - qcom,msm8610-rpm-proc
7562306a36Sopenharmony_ci          - qcom,msm8909-rpm-proc
7662306a36Sopenharmony_ci          - qcom,msm8916-rpm-proc
7762306a36Sopenharmony_ci          - qcom,msm8917-rpm-proc
7862306a36Sopenharmony_ci          - qcom,msm8936-rpm-proc
7962306a36Sopenharmony_ci          - qcom,msm8937-rpm-proc
8062306a36Sopenharmony_ci          - qcom,msm8952-rpm-proc
8162306a36Sopenharmony_ci          - qcom,msm8953-rpm-proc
8262306a36Sopenharmony_ci          - qcom,msm8974-rpm-proc
8362306a36Sopenharmony_ci          - qcom,msm8976-rpm-proc
8462306a36Sopenharmony_ci          - qcom,msm8994-rpm-proc
8562306a36Sopenharmony_ci          - qcom,msm8996-rpm-proc
8662306a36Sopenharmony_ci          - qcom,msm8998-rpm-proc
8762306a36Sopenharmony_ci          - qcom,qcm2290-rpm-proc
8862306a36Sopenharmony_ci          - qcom,qcs404-rpm-proc
8962306a36Sopenharmony_ci          - qcom,sdm660-rpm-proc
9062306a36Sopenharmony_ci          - qcom,sm6115-rpm-proc
9162306a36Sopenharmony_ci          - qcom,sm6125-rpm-proc
9262306a36Sopenharmony_ci          - qcom,sm6375-rpm-proc
9362306a36Sopenharmony_ci      - const: qcom,rpm-proc
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci  smd-edge:
9662306a36Sopenharmony_ci    $ref: /schemas/remoteproc/qcom,smd-edge.yaml#
9762306a36Sopenharmony_ci    description:
9862306a36Sopenharmony_ci      Qualcomm Shared Memory subnode which represents communication edge,
9962306a36Sopenharmony_ci      channels and devices related to the RPM subsystem.
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci  glink-edge:
10262306a36Sopenharmony_ci    $ref: /schemas/remoteproc/qcom,glink-rpm-edge.yaml#
10362306a36Sopenharmony_ci    description:
10462306a36Sopenharmony_ci      Qualcomm G-Link subnode which represents communication edge,
10562306a36Sopenharmony_ci      channels and devices related to the RPM subsystem.
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci  interrupt-controller:
10862306a36Sopenharmony_ci    type: object
10962306a36Sopenharmony_ci    $ref: /schemas/interrupt-controller/qcom,mpm.yaml#
11062306a36Sopenharmony_ci    description:
11162306a36Sopenharmony_ci      MSM Power Manager (MPM) interrupt controller that monitors interrupts
11262306a36Sopenharmony_ci      when the system is asleep.
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci  master-stats:
11562306a36Sopenharmony_ci    $ref: /schemas/soc/qcom/qcom,rpm-master-stats.yaml#
11662306a36Sopenharmony_ci    description:
11762306a36Sopenharmony_ci      Subsystem-level low-power mode statistics provided by RPM.
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_cirequired:
12062306a36Sopenharmony_ci  - compatible
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_cioneOf:
12362306a36Sopenharmony_ci  - required:
12462306a36Sopenharmony_ci      - smd-edge
12562306a36Sopenharmony_ci  - required:
12662306a36Sopenharmony_ci      - glink-edge
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ciadditionalProperties: false
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ciexamples:
13162306a36Sopenharmony_ci  # SMD
13262306a36Sopenharmony_ci  - |
13362306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
13462306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci    remoteproc {
13762306a36Sopenharmony_ci      compatible = "qcom,msm8916-rpm-proc", "qcom,rpm-proc";
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci      smd-edge {
14062306a36Sopenharmony_ci        interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
14162306a36Sopenharmony_ci        qcom,ipc = <&apcs 8 0>;
14262306a36Sopenharmony_ci        qcom,smd-edge = <15>;
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci        rpm-requests {
14562306a36Sopenharmony_ci          compatible = "qcom,rpm-msm8916";
14662306a36Sopenharmony_ci          qcom,smd-channels = "rpm_requests";
14762306a36Sopenharmony_ci          /* ... */
14862306a36Sopenharmony_ci        };
14962306a36Sopenharmony_ci      };
15062306a36Sopenharmony_ci    };
15162306a36Sopenharmony_ci  # GLINK
15262306a36Sopenharmony_ci  - |
15362306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
15462306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci    remoteproc {
15762306a36Sopenharmony_ci      compatible = "qcom,qcm2290-rpm-proc", "qcom,rpm-proc";
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ci      glink-edge {
16062306a36Sopenharmony_ci        compatible = "qcom,glink-rpm";
16162306a36Sopenharmony_ci        interrupts = <GIC_SPI 194 IRQ_TYPE_EDGE_RISING>;
16262306a36Sopenharmony_ci        qcom,rpm-msg-ram = <&rpm_msg_ram>;
16362306a36Sopenharmony_ci        mboxes = <&apcs_glb 0>;
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ci        rpm-requests {
16662306a36Sopenharmony_ci          compatible = "qcom,rpm-qcm2290";
16762306a36Sopenharmony_ci          qcom,glink-channels = "rpm_requests";
16862306a36Sopenharmony_ci          /* ... */
16962306a36Sopenharmony_ci        };
17062306a36Sopenharmony_ci      };
17162306a36Sopenharmony_ci    };
172