172 lines
6.2 KiB
YAML
172 lines
6.2 KiB
YAML
# 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";
|
|
/* ... */
|
|
};
|
|
};
|
|
};
|