| # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/remoteproc/qcom,rpm-proc.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Qualcomm Resource Power Manager (RPM) Processor/Subsystem |
| |
| maintainers: |
| - Bjorn Andersson <andersson@kernel.org> |
| - Konrad Dybcio <konradybcio@kernel.org> |
| - Stephan Gerhold <stephan@gerhold.net> |
| |
| description: | |
| Resource Power Manager (RPM) subsystem found in various Qualcomm platforms: |
| |
| +--------------------------------------------+ |
| | RPM subsystem (qcom,rpm-proc) | |
| | | |
| reset | +---------------+ +-----+ +-----+ | |
| --------->| | | MPM | | CPR | ... | |
| IPC interrupts | | ARM Cortex-M3 |--- +-----+ +-----+ | |
| ----------------->| | | | | | |
| | +---------------+ |---------------------- | |
| | +---------------+ | | |
| | | Code RAM |--| +------------------+ | |
| | +---------------+ | | | | |
| | +---------------+ |--| Message RAM | | |
| | | Data RAM |--| | | | |
| | +---------------+ | +------------------+ | |
| +--------------------|-----------------------+ |
| v |
| NoC |
| |
| The firmware running on the processor inside the RPM subsystem allows each |
| component in the system to vote for state of the system resources, such as |
| clocks, regulators and bus frequencies. It implements multiple separate |
| communication interfaces that are described in subnodes, e.g. SMD and MPM: |
| |
| +------------------------------+ |
| | ARM Cortex-M3 | |
| | | +------------------------------+ |
| | +--------------------------+ | | Message RAM | |
| | | RPM firmware | | | | |
| IPC IRQ 0 | | +----------------------+ | | | +--------------------------+ | |
| -------------->| SMD server |<------->| SMD data structures | | |
| | | | +--------------+ | | | | | +--------------+ | | |
| | | | | rpm_requests | ... | | | | | | rpm_requests | ... | | |
| | | | +--------------+ | | | | | +--------------+ | | |
| IPC IRQ 1 | | +----------------------+ | | | +--------------------------+ | |
| -------------->| MPM virtualization |<--------| MPM register copy (vMPM) | | |
| | | +----------------------+ | | | +--------------------------+ | |
| | | ... | | | | ... | |
| | +--------------------|-----+ | +------------------------------+ |
| +----------------------|-------+ |
| v |
| +--------------+ |
| | MPM Hardware | |
| +--------------+ |
| |
| The services provided by the firmware are only available after the firmware |
| has been loaded and the processor has been released from reset. Usually this |
| happens early in the boot process before the operating system is started. |
| |
| properties: |
| compatible: |
| items: |
| - enum: |
| - qcom,apq8084-rpm-proc |
| - qcom,ipq6018-rpm-proc |
| - qcom,ipq9574-rpm-proc |
| - qcom,mdm9607-rpm-proc |
| - qcom,msm8226-rpm-proc |
| - qcom,msm8610-rpm-proc |
| - qcom,msm8909-rpm-proc |
| - qcom,msm8916-rpm-proc |
| - qcom,msm8917-rpm-proc |
| - qcom,msm8936-rpm-proc |
| - qcom,msm8937-rpm-proc |
| - qcom,msm8952-rpm-proc |
| - qcom,msm8953-rpm-proc |
| - qcom,msm8974-rpm-proc |
| - qcom,msm8976-rpm-proc |
| - qcom,msm8994-rpm-proc |
| - qcom,msm8996-rpm-proc |
| - qcom,msm8998-rpm-proc |
| - qcom,qcm2290-rpm-proc |
| - qcom,qcs404-rpm-proc |
| - qcom,sdm660-rpm-proc |
| - qcom,sm6115-rpm-proc |
| - qcom,sm6125-rpm-proc |
| - qcom,sm6375-rpm-proc |
| - const: qcom,rpm-proc |
| |
| smd-edge: |
| $ref: /schemas/remoteproc/qcom,smd-edge.yaml# |
| description: |
| Qualcomm Shared Memory subnode which represents communication edge, |
| channels and devices related to the RPM subsystem. |
| |
| glink-edge: |
| $ref: /schemas/remoteproc/qcom,glink-rpm-edge.yaml# |
| description: |
| Qualcomm G-Link subnode which represents communication edge, |
| channels and devices related to the RPM subsystem. |
| |
| interrupt-controller: |
| type: object |
| $ref: /schemas/interrupt-controller/qcom,mpm.yaml# |
| description: |
| MSM Power Manager (MPM) interrupt controller that monitors interrupts |
| when the system is asleep. |
| |
| master-stats: |
| $ref: /schemas/soc/qcom/qcom,rpm-master-stats.yaml# |
| description: |
| Subsystem-level low-power mode statistics provided by RPM. |
| |
| required: |
| - compatible |
| |
| oneOf: |
| - required: |
| - smd-edge |
| - required: |
| - glink-edge |
| |
| additionalProperties: false |
| |
| examples: |
| # SMD |
| - | |
| #include <dt-bindings/interrupt-controller/arm-gic.h> |
| #include <dt-bindings/interrupt-controller/irq.h> |
| |
| remoteproc { |
| compatible = "qcom,msm8916-rpm-proc", "qcom,rpm-proc"; |
| |
| smd-edge { |
| interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>; |
| qcom,ipc = <&apcs 8 0>; |
| qcom,smd-edge = <15>; |
| |
| rpm-requests { |
| compatible = "qcom,rpm-msm8916", "qcom,smd-rpm"; |
| qcom,smd-channels = "rpm_requests"; |
| /* ... */ |
| }; |
| }; |
| }; |
| # GLINK |
| - | |
| #include <dt-bindings/interrupt-controller/arm-gic.h> |
| #include <dt-bindings/interrupt-controller/irq.h> |
| |
| remoteproc { |
| compatible = "qcom,qcm2290-rpm-proc", "qcom,rpm-proc"; |
| |
| glink-edge { |
| compatible = "qcom,glink-rpm"; |
| interrupts = <GIC_SPI 194 IRQ_TYPE_EDGE_RISING>; |
| qcom,rpm-msg-ram = <&rpm_msg_ram>; |
| mboxes = <&apcs_glb 0>; |
| |
| rpm-requests { |
| compatible = "qcom,rpm-qcm2290", "qcom,glink-smd-rpm"; |
| qcom,glink-channels = "rpm_requests"; |
| /* ... */ |
| }; |
| }; |
| }; |