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