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