xref: /linux/Documentation/devicetree/bindings/remoteproc/qcom,rpm-proc.yaml (revision 42b16d3ac371a2fac9b6f08fd75f23f34ba3955a)
19a2c674eSStephan Gerhold# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
29a2c674eSStephan Gerhold%YAML 1.2
39a2c674eSStephan Gerhold---
49a2c674eSStephan Gerhold$id: http://devicetree.org/schemas/remoteproc/qcom,rpm-proc.yaml#
59a2c674eSStephan Gerhold$schema: http://devicetree.org/meta-schemas/core.yaml#
69a2c674eSStephan Gerhold
79a2c674eSStephan Gerholdtitle: Qualcomm Resource Power Manager (RPM) Processor/Subsystem
89a2c674eSStephan Gerhold
99a2c674eSStephan Gerholdmaintainers:
109a2c674eSStephan Gerhold  - Bjorn Andersson <andersson@kernel.org>
11*0710c3d3SKonrad Dybcio  - Konrad Dybcio <konradybcio@kernel.org>
129a2c674eSStephan Gerhold  - Stephan Gerhold <stephan@gerhold.net>
139a2c674eSStephan Gerhold
149a2c674eSStephan Gerholddescription: |
159a2c674eSStephan Gerhold  Resource Power Manager (RPM) subsystem found in various Qualcomm platforms:
169a2c674eSStephan Gerhold
179a2c674eSStephan Gerhold                  +--------------------------------------------+
189a2c674eSStephan Gerhold                  |       RPM subsystem (qcom,rpm-proc)        |
199a2c674eSStephan Gerhold                  |                                            |
209a2c674eSStephan Gerhold            reset | +---------------+     +-----+  +-----+     |
219a2c674eSStephan Gerhold          --------->|               |     | MPM |  | CPR | ... |
229a2c674eSStephan Gerhold   IPC interrupts | | ARM Cortex-M3 |---  +-----+  +-----+     |
239a2c674eSStephan Gerhold  ----------------->|               |  |     |        |        |
249a2c674eSStephan Gerhold                  | +---------------+  |---------------------- |
259a2c674eSStephan Gerhold                  | +---------------+  |                       |
269a2c674eSStephan Gerhold                  | |   Code RAM    |--|  +------------------+ |
279a2c674eSStephan Gerhold                  | +---------------+  |  |                  | |
289a2c674eSStephan Gerhold                  | +---------------+  |--|   Message RAM    | |
299a2c674eSStephan Gerhold                  | |   Data RAM    |--|  |                  | |
309a2c674eSStephan Gerhold                  | +---------------+  |  +------------------+ |
319a2c674eSStephan Gerhold                  +--------------------|-----------------------+
329a2c674eSStephan Gerhold                                       v
339a2c674eSStephan Gerhold                                      NoC
349a2c674eSStephan Gerhold
359a2c674eSStephan Gerhold  The firmware running on the processor inside the RPM subsystem allows each
369a2c674eSStephan Gerhold  component in the system to vote for state of the system resources, such as
379a2c674eSStephan Gerhold  clocks, regulators and bus frequencies. It implements multiple separate
389a2c674eSStephan Gerhold  communication interfaces that are described in subnodes, e.g. SMD and MPM:
399a2c674eSStephan Gerhold
409a2c674eSStephan Gerhold             +------------------------------+
419a2c674eSStephan Gerhold             |        ARM Cortex-M3         |
429a2c674eSStephan Gerhold             |                              |   +------------------------------+
439a2c674eSStephan Gerhold             | +--------------------------+ |   |          Message RAM         |
449a2c674eSStephan Gerhold             | |  RPM firmware            | |   |                              |
459a2c674eSStephan Gerhold   IPC IRQ 0 | | +----------------------+ | |   | +--------------------------+ |
469a2c674eSStephan Gerhold  -------------->| SMD server           |<------->| SMD data structures      | |
479a2c674eSStephan Gerhold             | | | +--------------+     | | |   | | +--------------+         | |
489a2c674eSStephan Gerhold             | | | | rpm_requests | ... | | |   | | | rpm_requests |   ...   | |
499a2c674eSStephan Gerhold             | | | +--------------+     | | |   | | +--------------+         | |
509a2c674eSStephan Gerhold   IPC IRQ 1 | | +----------------------+ | |   | +--------------------------+ |
519a2c674eSStephan Gerhold  -------------->| MPM virtualization   |<--------| MPM register copy (vMPM) | |
529a2c674eSStephan Gerhold             | | +----------------------+ | |   | +--------------------------+ |
539a2c674eSStephan Gerhold             | |           ...      |     | |   |              ...             |
549a2c674eSStephan Gerhold             | +--------------------|-----+ |   +------------------------------+
559a2c674eSStephan Gerhold             +----------------------|-------+
569a2c674eSStephan Gerhold                                    v
579a2c674eSStephan Gerhold                             +--------------+
589a2c674eSStephan Gerhold                             | MPM Hardware |
599a2c674eSStephan Gerhold                             +--------------+
609a2c674eSStephan Gerhold
619a2c674eSStephan Gerhold  The services provided by the firmware are only available after the firmware
629a2c674eSStephan Gerhold  has been loaded and the processor has been released from reset. Usually this
639a2c674eSStephan Gerhold  happens early in the boot process before the operating system is started.
649a2c674eSStephan Gerhold
659a2c674eSStephan Gerholdproperties:
669a2c674eSStephan Gerhold  compatible:
679a2c674eSStephan Gerhold    items:
689a2c674eSStephan Gerhold      - enum:
699a2c674eSStephan Gerhold          - qcom,apq8084-rpm-proc
709a2c674eSStephan Gerhold          - qcom,ipq6018-rpm-proc
719a2c674eSStephan Gerhold          - qcom,ipq9574-rpm-proc
729a2c674eSStephan Gerhold          - qcom,mdm9607-rpm-proc
739a2c674eSStephan Gerhold          - qcom,msm8226-rpm-proc
749a2c674eSStephan Gerhold          - qcom,msm8610-rpm-proc
759a2c674eSStephan Gerhold          - qcom,msm8909-rpm-proc
769a2c674eSStephan Gerhold          - qcom,msm8916-rpm-proc
779a2c674eSStephan Gerhold          - qcom,msm8917-rpm-proc
789a2c674eSStephan Gerhold          - qcom,msm8936-rpm-proc
799a2c674eSStephan Gerhold          - qcom,msm8937-rpm-proc
809a2c674eSStephan Gerhold          - qcom,msm8952-rpm-proc
819a2c674eSStephan Gerhold          - qcom,msm8953-rpm-proc
829a2c674eSStephan Gerhold          - qcom,msm8974-rpm-proc
839a2c674eSStephan Gerhold          - qcom,msm8976-rpm-proc
849a2c674eSStephan Gerhold          - qcom,msm8994-rpm-proc
859a2c674eSStephan Gerhold          - qcom,msm8996-rpm-proc
869a2c674eSStephan Gerhold          - qcom,msm8998-rpm-proc
879a2c674eSStephan Gerhold          - qcom,qcm2290-rpm-proc
889a2c674eSStephan Gerhold          - qcom,qcs404-rpm-proc
899a2c674eSStephan Gerhold          - qcom,sdm660-rpm-proc
909a2c674eSStephan Gerhold          - qcom,sm6115-rpm-proc
919a2c674eSStephan Gerhold          - qcom,sm6125-rpm-proc
929a2c674eSStephan Gerhold          - qcom,sm6375-rpm-proc
939a2c674eSStephan Gerhold      - const: qcom,rpm-proc
949a2c674eSStephan Gerhold
959a2c674eSStephan Gerhold  smd-edge:
969a2c674eSStephan Gerhold    $ref: /schemas/remoteproc/qcom,smd-edge.yaml#
979a2c674eSStephan Gerhold    description:
989a2c674eSStephan Gerhold      Qualcomm Shared Memory subnode which represents communication edge,
999a2c674eSStephan Gerhold      channels and devices related to the RPM subsystem.
1009a2c674eSStephan Gerhold
1019a2c674eSStephan Gerhold  glink-edge:
1029a2c674eSStephan Gerhold    $ref: /schemas/remoteproc/qcom,glink-rpm-edge.yaml#
1039a2c674eSStephan Gerhold    description:
1049a2c674eSStephan Gerhold      Qualcomm G-Link subnode which represents communication edge,
1059a2c674eSStephan Gerhold      channels and devices related to the RPM subsystem.
1069a2c674eSStephan Gerhold
1079a2c674eSStephan Gerhold  interrupt-controller:
1089a2c674eSStephan Gerhold    type: object
1099a2c674eSStephan Gerhold    $ref: /schemas/interrupt-controller/qcom,mpm.yaml#
1109a2c674eSStephan Gerhold    description:
1119a2c674eSStephan Gerhold      MSM Power Manager (MPM) interrupt controller that monitors interrupts
1129a2c674eSStephan Gerhold      when the system is asleep.
1139a2c674eSStephan Gerhold
1149a2c674eSStephan Gerhold  master-stats:
1159a2c674eSStephan Gerhold    $ref: /schemas/soc/qcom/qcom,rpm-master-stats.yaml#
1169a2c674eSStephan Gerhold    description:
1179a2c674eSStephan Gerhold      Subsystem-level low-power mode statistics provided by RPM.
1189a2c674eSStephan Gerhold
1199a2c674eSStephan Gerholdrequired:
1209a2c674eSStephan Gerhold  - compatible
1219a2c674eSStephan Gerhold
1229a2c674eSStephan GerholdoneOf:
1239a2c674eSStephan Gerhold  - required:
1249a2c674eSStephan Gerhold      - smd-edge
1259a2c674eSStephan Gerhold  - required:
1269a2c674eSStephan Gerhold      - glink-edge
1279a2c674eSStephan Gerhold
1289a2c674eSStephan GerholdadditionalProperties: false
1299a2c674eSStephan Gerhold
1309a2c674eSStephan Gerholdexamples:
1319a2c674eSStephan Gerhold  # SMD
1329a2c674eSStephan Gerhold  - |
1339a2c674eSStephan Gerhold    #include <dt-bindings/interrupt-controller/arm-gic.h>
1349a2c674eSStephan Gerhold    #include <dt-bindings/interrupt-controller/irq.h>
1359a2c674eSStephan Gerhold
1369a2c674eSStephan Gerhold    remoteproc {
1379a2c674eSStephan Gerhold      compatible = "qcom,msm8916-rpm-proc", "qcom,rpm-proc";
1389a2c674eSStephan Gerhold
1399a2c674eSStephan Gerhold      smd-edge {
1409a2c674eSStephan Gerhold        interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
1419a2c674eSStephan Gerhold        qcom,ipc = <&apcs 8 0>;
1429a2c674eSStephan Gerhold        qcom,smd-edge = <15>;
1439a2c674eSStephan Gerhold
1449a2c674eSStephan Gerhold        rpm-requests {
1459a2c674eSStephan Gerhold          compatible = "qcom,rpm-msm8916", "qcom,smd-rpm";
1469a2c674eSStephan Gerhold          qcom,smd-channels = "rpm_requests";
1479a2c674eSStephan Gerhold          /* ... */
1489a2c674eSStephan Gerhold        };
1499a2c674eSStephan Gerhold      };
1509a2c674eSStephan Gerhold    };
1519a2c674eSStephan Gerhold  # GLINK
1529a2c674eSStephan Gerhold  - |
1539a2c674eSStephan Gerhold    #include <dt-bindings/interrupt-controller/arm-gic.h>
1549a2c674eSStephan Gerhold    #include <dt-bindings/interrupt-controller/irq.h>
1559a2c674eSStephan Gerhold
1569a2c674eSStephan Gerhold    remoteproc {
1579a2c674eSStephan Gerhold      compatible = "qcom,qcm2290-rpm-proc", "qcom,rpm-proc";
1589a2c674eSStephan Gerhold
1599a2c674eSStephan Gerhold      glink-edge {
1609a2c674eSStephan Gerhold        compatible = "qcom,glink-rpm";
1619a2c674eSStephan Gerhold        interrupts = <GIC_SPI 194 IRQ_TYPE_EDGE_RISING>;
1629a2c674eSStephan Gerhold        qcom,rpm-msg-ram = <&rpm_msg_ram>;
1639a2c674eSStephan Gerhold        mboxes = <&apcs_glb 0>;
1649a2c674eSStephan Gerhold
1659a2c674eSStephan Gerhold        rpm-requests {
1669a2c674eSStephan Gerhold          compatible = "qcom,rpm-qcm2290", "qcom,glink-smd-rpm";
1679a2c674eSStephan Gerhold          qcom,glink-channels = "rpm_requests";
1689a2c674eSStephan Gerhold          /* ... */
1699a2c674eSStephan Gerhold        };
1709a2c674eSStephan Gerhold      };
1719a2c674eSStephan Gerhold    };
172