1 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
4 $id: http://devicetree.org/schemas/remoteproc/qcom,rpm-proc.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
7 title: Qualcomm Resource Power Manager (RPM) Processor/Subsystem
10 - Bjorn Andersson <andersson@kernel.org>
11 - Konrad Dybcio <konradybcio@kernel.org>
12 - Stephan Gerhold <stephan@gerhold.net>
15 Resource Power Manager (RPM) subsystem found in various Qualcomm platforms:
17 +--------------------------------------------+
18 | RPM subsystem (qcom,rpm-proc) |
20 reset | +---------------+ +-----+ +-----+ |
21 --------->| | | MPM | | CPR | ... |
22 IPC interrupts | | ARM Cortex-M3 |--- +-----+ +-----+ |
23 ----------------->| | | | | |
24 | +---------------+ |---------------------- |
25 | +---------------+ | |
26 | | Code RAM |--| +------------------+ |
27 | +---------------+ | | | |
28 | +---------------+ |--| Message RAM | |
29 | | Data RAM |--| | | |
30 | +---------------+ | +------------------+ |
31 +--------------------|-----------------------+
35 The firmware running on the processor inside the RPM subsystem allows each
36 component in the system to vote for state of the system resources, such as
37 clocks, regulators and bus frequencies. It implements multiple separate
38 communication interfaces that are described in subnodes, e.g. SMD and MPM:
40 +------------------------------+
42 | | +------------------------------+
43 | +--------------------------+ | | Message RAM |
44 | | RPM firmware | | | |
45 IPC IRQ 0 | | +----------------------+ | | | +--------------------------+ |
46 -------------->| SMD server |<------->| SMD data structures | |
47 | | | +--------------+ | | | | | +--------------+ | |
48 | | | | rpm_requests | ... | | | | | | rpm_requests | ... | |
49 | | | +--------------+ | | | | | +--------------+ | |
50 IPC IRQ 1 | | +----------------------+ | | | +--------------------------+ |
51 -------------->| MPM virtualization |<--------| MPM register copy (vMPM) | |
52 | | +----------------------+ | | | +--------------------------+ |
54 | +--------------------|-----+ | +------------------------------+
55 +----------------------|-------+
61 The services provided by the firmware are only available after the firmware
62 has been loaded and the processor has been released from reset. Usually this
63 happens early in the boot process before the operating system is started.
69 - qcom,apq8084-rpm-proc
70 - qcom,ipq6018-rpm-proc
71 - qcom,ipq9574-rpm-proc
72 - qcom,mdm9607-rpm-proc
73 - qcom,msm8226-rpm-proc
74 - qcom,msm8610-rpm-proc
75 - qcom,msm8909-rpm-proc
76 - qcom,msm8916-rpm-proc
77 - qcom,msm8917-rpm-proc
78 - qcom,msm8936-rpm-proc
79 - qcom,msm8937-rpm-proc
80 - qcom,msm8952-rpm-proc
81 - qcom,msm8953-rpm-proc
82 - qcom,msm8974-rpm-proc
83 - qcom,msm8976-rpm-proc
84 - qcom,msm8994-rpm-proc
85 - qcom,msm8996-rpm-proc
86 - qcom,msm8998-rpm-proc
87 - qcom,qcm2290-rpm-proc
88 - qcom,qcs404-rpm-proc
89 - qcom,sdm660-rpm-proc
90 - qcom,sm6115-rpm-proc
91 - qcom,sm6125-rpm-proc
92 - qcom,sm6375-rpm-proc
93 - const: qcom,rpm-proc
96 $ref: /schemas/remoteproc/qcom,smd-edge.yaml#
98 Qualcomm Shared Memory subnode which represents communication edge,
99 channels and devices related to the RPM subsystem.
102 $ref: /schemas/remoteproc/qcom,glink-rpm-edge.yaml#
104 Qualcomm G-Link subnode which represents communication edge,
105 channels and devices related to the RPM subsystem.
107 interrupt-controller:
109 $ref: /schemas/interrupt-controller/qcom,mpm.yaml#
111 MSM Power Manager (MPM) interrupt controller that monitors interrupts
112 when the system is asleep.
115 $ref: /schemas/soc/qcom/qcom,rpm-master-stats.yaml#
117 Subsystem-level low-power mode statistics provided by RPM.
128 additionalProperties: false
133 #include <dt-bindings/interrupt-controller/arm-gic.h>
134 #include <dt-bindings/interrupt-controller/irq.h>
137 compatible = "qcom,msm8916-rpm-proc", "qcom,rpm-proc";
140 interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
141 qcom,ipc = <&apcs 8 0>;
142 qcom,smd-edge = <15>;
145 compatible = "qcom,rpm-msm8916", "qcom,smd-rpm";
146 qcom,smd-channels = "rpm_requests";
153 #include <dt-bindings/interrupt-controller/arm-gic.h>
154 #include <dt-bindings/interrupt-controller/irq.h>
157 compatible = "qcom,qcm2290-rpm-proc", "qcom,rpm-proc";
160 compatible = "qcom,glink-rpm";
161 interrupts = <GIC_SPI 194 IRQ_TYPE_EDGE_RISING>;
162 qcom,rpm-msg-ram = <&rpm_msg_ram>;
163 mboxes = <&apcs_glb 0>;
166 compatible = "qcom,rpm-qcm2290", "qcom,glink-smd-rpm";
167 qcom,glink-channels = "rpm_requests";