139 lines
3.7 KiB
YAML
139 lines
3.7 KiB
YAML
|
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||
|
%YAML 1.2
|
||
|
---
|
||
|
$id: http://devicetree.org/schemas/soc/qcom/qcom,smsm.yaml#
|
||
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||
|
|
||
|
title: Qualcomm Shared Memory State Machine
|
||
|
|
||
|
maintainers:
|
||
|
- Andy Gross <agross@kernel.org>
|
||
|
- Bjorn Andersson <bjorn.andersson@linaro.org>
|
||
|
- Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
|
||
|
|
||
|
description:
|
||
|
The Shared Memory State Machine facilitates broadcasting of single bit state
|
||
|
information between the processors in a Qualcomm SoC. Each processor is
|
||
|
assigned 32 bits of state that can be modified. A processor can through a
|
||
|
matrix of bitmaps signal subscription of notifications upon changes to a
|
||
|
certain bit owned by a certain remote processor.
|
||
|
|
||
|
properties:
|
||
|
compatible:
|
||
|
const: qcom,smsm
|
||
|
|
||
|
'#address-cells':
|
||
|
const: 1
|
||
|
|
||
|
qcom,local-host:
|
||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||
|
default: 0
|
||
|
description:
|
||
|
Identifier of the local processor in the list of hosts, or in other words
|
||
|
specifier of the column in the subscription matrix representing the local
|
||
|
processor.
|
||
|
|
||
|
'#size-cells':
|
||
|
const: 0
|
||
|
|
||
|
patternProperties:
|
||
|
"^qcom,ipc-[1-4]$":
|
||
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
||
|
items:
|
||
|
- items:
|
||
|
- description: phandle to a syscon node representing the APCS registers
|
||
|
- description: u32 representing offset to the register within the syscon
|
||
|
- description: u32 representing the ipc bit within the register
|
||
|
description:
|
||
|
Three entries specifying the outgoing ipc bit used for signaling the N:th
|
||
|
remote processor.
|
||
|
|
||
|
"@[0-9a-f]$":
|
||
|
type: object
|
||
|
description:
|
||
|
Each processor's state bits are described by a subnode of the SMSM device
|
||
|
node. Nodes can either be flagged as an interrupt-controller to denote a
|
||
|
remote processor's state bits or the local processors bits. The node
|
||
|
names are not important.
|
||
|
|
||
|
properties:
|
||
|
reg:
|
||
|
maxItems: 1
|
||
|
|
||
|
interrupt-controller:
|
||
|
description:
|
||
|
Marks the entry as a interrupt-controller and the state bits to
|
||
|
belong to a remote processor.
|
||
|
|
||
|
'#interrupt-cells':
|
||
|
const: 2
|
||
|
|
||
|
interrupts:
|
||
|
maxItems: 1
|
||
|
description:
|
||
|
One entry specifying remote IRQ used by the remote processor to
|
||
|
signal changes of its state bits.
|
||
|
|
||
|
'#qcom,smem-state-cells':
|
||
|
$ref: /schemas/types.yaml#/definitions/uint32
|
||
|
const: 1
|
||
|
description:
|
||
|
Required for local entry. Denotes bit number.
|
||
|
|
||
|
required:
|
||
|
- reg
|
||
|
|
||
|
oneOf:
|
||
|
- required:
|
||
|
- '#qcom,smem-state-cells'
|
||
|
- required:
|
||
|
- interrupt-controller
|
||
|
- '#interrupt-cells'
|
||
|
- interrupts
|
||
|
|
||
|
additionalProperties: false
|
||
|
|
||
|
required:
|
||
|
- compatible
|
||
|
- '#address-cells'
|
||
|
- '#size-cells'
|
||
|
|
||
|
anyOf:
|
||
|
- required:
|
||
|
- qcom,ipc-1
|
||
|
- required:
|
||
|
- qcom,ipc-2
|
||
|
- required:
|
||
|
- qcom,ipc-3
|
||
|
- required:
|
||
|
- qcom,ipc-4
|
||
|
|
||
|
additionalProperties: false
|
||
|
|
||
|
examples:
|
||
|
# The following example shows the SMEM setup for controlling properties of
|
||
|
# the wireless processor, defined from the 8974 apps processor's
|
||
|
# point-of-view. It encompasses one outbound entry and the outgoing interrupt
|
||
|
# for the wireless processor.
|
||
|
- |
|
||
|
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||
|
|
||
|
shared-memory {
|
||
|
compatible = "qcom,smsm";
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <0>;
|
||
|
qcom,ipc-3 = <&apcs 8 19>;
|
||
|
|
||
|
apps_smsm: apps@0 {
|
||
|
reg = <0>;
|
||
|
#qcom,smem-state-cells = <1>;
|
||
|
};
|
||
|
|
||
|
wcnss_smsm: wcnss@7 {
|
||
|
reg = <7>;
|
||
|
interrupts = <GIC_SPI 144 IRQ_TYPE_EDGE_RISING>;
|
||
|
interrupt-controller;
|
||
|
#interrupt-cells = <2>;
|
||
|
};
|
||
|
};
|