mirror of
https://github.com/torvalds/linux.git
synced 2026-04-19 07:13:56 -04:00
On Qualcomm platforms, most subsystems (e.g. audio/modem DSP) are described as remote processors in the device tree, with a dedicated node where properties and services related to them can be described. The Resource Power Manager (RPM) is also such a subsystem, with a remote processor that is running a special firmware. Unfortunately, the RPM never got a dedicated node representing it properly in the device tree. Most of the RPM services are described below a top-level /smd or /rpm-glink node. However, SMD/GLINK is just one of the communication channels to the RPM firmware. For example, the MPM interrupt functionality provided by the RPM does not use SMD/GLINK but writes directly to a special memory region allocated by the RPM firmware in combination with a mailbox. Currently there is no good place in the device tree to describe this functionality. It doesn't belong below SMD/GLINK but it's not an independent top-level device either. Introduce a new "qcom,rpm-proc" compatible that allows describing the RPM as a remote processor/subsystem like all others. The SMD/GLINK node is moved to a "smd-edge"/"glink-edge" subnode consistent with other existing bindings. Additional subnodes (e.g. interrupt-controller for MPM, rpm-master-stats) can be also added there. Deprecate using the old top-level /smd node since all SMD edges are now specified as subnodes of the remote processor. Signed-off-by: Stephan Gerhold <stephan@gerhold.net> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Link: https://lore.kernel.org/r/20230531-rpm-rproc-v3-6-a07dcdefd918@gerhold.net Signed-off-by: Bjorn Andersson <andersson@kernel.org>
70 lines
2.0 KiB
YAML
70 lines
2.0 KiB
YAML
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
|
%YAML 1.2
|
|
---
|
|
$id: http://devicetree.org/schemas/soc/qcom/qcom,smd.yaml#
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
title: Qualcomm Shared Memory Driver
|
|
|
|
maintainers:
|
|
- Andy Gross <agross@kernel.org>
|
|
- Bjorn Andersson <bjorn.andersson@linaro.org>
|
|
- Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
|
|
|
description:
|
|
The Qualcomm Shared Memory Driver is a FIFO based communication channel for
|
|
sending data between the various subsystems in Qualcomm platforms.
|
|
|
|
Using the top-level SMD node is deprecated. Instead, the SMD edges are defined
|
|
directly below the device node representing the respective remote subsystem
|
|
or remote processor.
|
|
|
|
deprecated: true
|
|
|
|
properties:
|
|
compatible:
|
|
const: qcom,smd
|
|
|
|
patternProperties:
|
|
"^smd-edge|rpm$":
|
|
$ref: /schemas/remoteproc/qcom,smd-edge.yaml#
|
|
unevaluatedProperties: false
|
|
description:
|
|
Each subnode of the SMD node represents a remote subsystem or a remote
|
|
processor of some sort - or in SMD language an "edge". The name of the
|
|
edges are not important.
|
|
|
|
required:
|
|
- compatible
|
|
|
|
additionalProperties: false
|
|
|
|
examples:
|
|
# The following example represents a smd node, with one edge representing the
|
|
# "rpm" subsystem. For the "rpm" subsystem we have a device tied to the
|
|
# "rpm_request" channel.
|
|
# NOTE: This is deprecated, represent the RPM using "qcom,rpm-proc" instead.
|
|
- |
|
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
|
|
|
shared-memory {
|
|
compatible = "qcom,smd";
|
|
|
|
rpm {
|
|
interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
|
|
qcom,ipc = <&apcs 8 0>;
|
|
qcom,smd-edge = <15>;
|
|
|
|
rpm-requests {
|
|
compatible = "qcom,rpm-msm8974";
|
|
qcom,smd-channels = "rpm_requests";
|
|
|
|
clock-controller {
|
|
compatible = "qcom,rpmcc-msm8974", "qcom,rpmcc";
|
|
#clock-cells = <1>;
|
|
};
|
|
|
|
};
|
|
};
|
|
};
|