summaryrefslogtreecommitdiff
path: root/Documentation/devicetree/bindings/soc/qcom/qcom,smsm.yaml
blob: db67cf043256145aae41ae35782d3766d8879234 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# 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>;
        };
    };