summaryrefslogtreecommitdiff
path: root/Documentation/devicetree/bindings/soc/qcom/qcom,smp2p.yaml
blob: 58500529b90fb960c0ce476d0ecd8dead97e7053 (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
139
140
141
142
143
144
145
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/soc/qcom/qcom,smp2p.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm Shared Memory Point 2 Point

maintainers:
  - Andy Gross <agross@kernel.org>
  - Bjorn Andersson <bjorn.andersson@linaro.org>
  - Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

description:
  The Shared Memory Point to Point (SMP2P) protocol facilitates communication
  of a single 32-bit value between two processors.  Each value has a single
  writer (the local side) and a single reader (the remote side).  Values are
  uniquely identified in the system by the directed edge (local processor ID to
  remote processor ID) and a string identifier.

properties:
  compatible:
    const: qcom,smp2p

  interrupts:
    maxItems: 1

  mboxes:
    maxItems: 1
    description:
      Reference to the mailbox representing the outgoing doorbell in APCS for
      this client.

  qcom,ipc:
    $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
      remote end of the smp2p edge.

  qcom,local-pid:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      The identifier of the local endpoint of this edge.

  qcom,remote-pid:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      The identifier of the remote endpoint of this edge.

  qcom,smem:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    items:
      maxItems: 2
    description:
      Two identifiers of the inbound and outbound smem items used for this edge.

patternProperties:
  "^master-kernel|slave-kernel|ipa-ap-to-modem|ipa-modem-to-ap|wlan-ap-to-wpss|wlan-wpss-to-ap$":
    type: object
    description:
      Each SMP2P pair contain a set of inbound and outbound entries, these are
      described in subnodes of the smp2p device node. The node names are not
      important.

    properties:
      interrupt-controller:
        description:
          Marks the entry as inbound; the node should be specified as a two
          cell interrupt-controller.  If not specified this node will denote
          the outgoing entry.

      '#interrupt-cells':
        const: 2

      qcom,entry-name:
        $ref: /schemas/types.yaml#/definitions/string
        description:
          The name of this entry, for inbound entries this will be used to
          match against the remotely allocated entry and for outbound entries
          this name is used for allocating entries.

      '#qcom,smem-state-cells':
        $ref: /schemas/types.yaml#/definitions/uint32
        const: 1
        description:
          Required for outgoing entries.

    required:
      - qcom,entry-name

    oneOf:
      - required:
          - interrupt-controller
          - '#interrupt-cells'
      - required:
          - '#qcom,smem-state-cells'

    additionalProperties: false

required:
  - compatible
  - interrupts
  - qcom,local-pid
  - qcom,remote-pid
  - qcom,smem

oneOf:
  - required:
      - mboxes
  - required:
      - qcom,ipc

additionalProperties: false

examples:
  # The following example shows the SMP2P setup with the wireless processor,
  # defined from the 8974 apps processor's point-of-view. It encompasses one
  # inbound and one outbound entry.
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    shared-memory {
        compatible = "qcom,smp2p";
        qcom,smem = <431>, <451>;
        interrupts = <GIC_SPI 143 IRQ_TYPE_EDGE_RISING>;
        qcom,ipc = <&apcs 8 18>;
        qcom,local-pid = <0>;
        qcom,remote-pid = <4>;

        wcnss_smp2p_out: master-kernel {
            qcom,entry-name = "master-kernel";
            #qcom,smem-state-cells = <1>;
        };

        wcnss_smp2p_in: slave-kernel {
            qcom,entry-name = "slave-kernel";
            interrupt-controller;
            #interrupt-cells = <2>;
        };
    };