1# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/soc/qcom/qcom,smd.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm Shared Memory Driver
8
9maintainers:
10  - Andy Gross <agross@kernel.org>
11  - Bjorn Andersson <bjorn.andersson@linaro.org>
12  - Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
13
14description:
15  The Qualcomm Shared Memory Driver is a FIFO based communication channel for
16  sending data between the various subsystems in Qualcomm platforms.
17
18properties:
19  compatible:
20    const: qcom,smd
21
22patternProperties:
23  "^.*-edge|rpm$":
24    type: object
25    description:
26      Each subnode of the SMD node represents a remote subsystem or a remote
27      processor of some sort - or in SMD language an "edge". The name of the
28      edges are not important.
29
30    properties:
31      interrupts:
32        maxItems: 1
33
34      label:
35        $ref: /schemas/types.yaml#/definitions/string
36        description:
37          Name of the edge, used for debugging and identification purposes. The
38          node name will be used if this is not present.
39
40      mboxes:
41        maxItems: 1
42        description:
43          Reference to the mailbox representing the outgoing doorbell in APCS for
44          this client.
45
46      qcom,ipc:
47        $ref: /schemas/types.yaml#/definitions/phandle-array
48        items:
49          - items:
50              - description: phandle to a syscon node representing the APCS registers
51              - description: u32 representing offset to the register within the syscon
52              - description: u32 representing the ipc bit within the register
53        description:
54          Three entries specifying the outgoing ipc bit used for signaling the
55          remote processor.
56
57      qcom,smd-edge:
58        $ref: /schemas/types.yaml#/definitions/uint32
59        description:
60          The identifier of the remote processor in the smd channel allocation
61          table.
62
63      qcom,remote-pid:
64        $ref: /schemas/types.yaml#/definitions/uint32
65        description:
66          The identifier for the remote processor as known by the rest of the
67          system.
68
69      rpm-requests:
70        type: object
71        description:
72          In turn, subnodes of the "edges" represent devices tied to SMD
73          channels on that "edge". The names of the devices are not
74          important. The properties of these nodes are defined by the
75          individual bindings for the SMD devices.
76
77        properties:
78          qcom,smd-channels:
79            $ref: /schemas/types.yaml#/definitions/string-array
80            minItems: 1
81            maxItems: 32
82            description:
83              A list of channels tied to this device, used for matching the
84              device to channels.
85
86        required:
87          - compatible
88          - qcom,smd-channels
89
90        additionalProperties: true
91
92    required:
93      - interrupts
94      - qcom,smd-edge
95
96    oneOf:
97      - required:
98          - mboxes
99      - required:
100          - qcom,ipc
101
102    additionalProperties: false
103
104required:
105  - compatible
106
107additionalProperties: false
108
109examples:
110  # The following example represents a smd node, with one edge representing the
111  # "rpm" subsystem. For the "rpm" subsystem we have a device tied to the
112  # "rpm_request" channel.
113  - |
114    #include <dt-bindings/interrupt-controller/arm-gic.h>
115
116    shared-memory {
117        compatible = "qcom,smd";
118
119        rpm {
120            interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
121            qcom,ipc = <&apcs 8 0>;
122            qcom,smd-edge = <15>;
123
124            rpm-requests {
125                compatible = "qcom,rpm-msm8974";
126                qcom,smd-channels = "rpm_requests";
127
128                clock-controller {
129                    compatible = "qcom,rpmcc-msm8974", "qcom,rpmcc";
130                    #clock-cells = <1>;
131                };
132
133            };
134        };
135    };
136