xref: /linux/Documentation/devicetree/bindings/arm/arm,coresight-cti.yaml (revision db4a3f0fbedb0398f77b9047e8b8bb2b49f355bb)
1# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2# Copyright 2019 Linaro Ltd.
3%YAML 1.2
4---
5$id: http://devicetree.org/schemas/arm/arm,coresight-cti.yaml#
6$schema: http://devicetree.org/meta-schemas/core.yaml#
7
8title: ARM Coresight Cross Trigger Interface (CTI) device.
9
10description: |
11  The CoreSight Embedded Cross Trigger (ECT) consists of CTI devices connected
12  to one or more CoreSight components and/or a CPU, with CTIs interconnected in
13  a star topology via the Cross Trigger Matrix (CTM), which is not programmable.
14  The ECT components are not part of the trace generation data path and are thus
15  not part of the CoreSight graph.
16
17  The CTI component properties define the connections between the individual
18  CTI and the components it is directly connected to, consisting of input and
19  output hardware trigger signals. CTIs can have a maximum number of input and
20  output hardware trigger signals (8 each for v1 CTI, 32 each for v2 CTI). The
21  number is defined at design time, the maximum of each defined in the DEVID
22  register.
23
24  CTIs are interconnected in a star topology via the CTM, using a number of
25  programmable channels, usually 4, but again implementation defined and
26  described in the DEVID register. The star topology is not required to be
27  described in the bindings as the actual connections are software
28  programmable.
29
30  In general the connections between CTI and components via the trigger signals
31  are implementation defined, except when the CTI is connected to an ARM v8
32  architecture core and optional ETM.
33
34  In this case the ARM v8 architecture defines the required signal connections
35  between CTI and the CPU core and ETM if present. In the case of a v8
36  architecturally connected CTI an additional compatible string is used to
37  indicate this feature (arm,coresight-cti-v8-arch).
38
39  When CTI trigger connection information is unavailable then a minimal driver
40  binding can be declared with no explicit trigger signals. This will result
41  the driver detecting the maximum available triggers and channels from the
42  DEVID register and make them all available for use as a single default
43  connection. Any user / client application will require additional information
44  on the connections between the CTI and other components for correct operation.
45  This information might be found by enabling the Integration Test registers in
46  the driver (set CONFIG_CORESIGHT_CTI_INTEGRATION_TEST in Kernel
47  configuration). These registers may be used to explore the trigger connections
48  between CTI and other CoreSight components.
49
50  Certain triggers between CoreSight devices and the CTI have specific types
51  and usages. These can be defined along with the signal indexes with the
52  constants defined in <dt-bindings/arm/coresight-cti-dt.h>
53
54  For example a CTI connected to a core will usually have a DBGREQ signal. This
55  is defined in the binding as type PE_EDBGREQ. These types will appear in an
56  optional array alongside the signal indexes. Omitting types will default all
57  signals to GEN_IO.
58
59  Note that some hardware trigger signals can be connected to non-CoreSight
60  components (e.g. UART etc) depending on hardware implementation.
61
62maintainers:
63  - Mike Leach <mike.leach@linaro.org>
64
65allOf:
66  - $ref: /schemas/arm/primecell.yaml#
67
68# Need a custom select here or 'arm,primecell' will match on lots of nodes
69select:
70  properties:
71    compatible:
72      contains:
73        enum:
74          - arm,coresight-cti
75  required:
76    - compatible
77
78properties:
79  $nodename:
80    pattern: "^cti(@[0-9a-f]+)$"
81  compatible:
82    oneOf:
83      - items:
84          - const: arm,coresight-cti
85          - const: arm,primecell
86      - items:
87          - const: arm,coresight-cti-v8-arch
88          - const: arm,coresight-cti
89          - const: arm,primecell
90
91  reg:
92    maxItems: 1
93
94  cpu:
95    description:
96      Handle to cpu this CTI is associated with.
97
98  power-domains:
99    maxItems: 1
100
101  label:
102    description:
103      Description of a coresight device.
104
105  arm,cti-ctm-id:
106    $ref: /schemas/types.yaml#/definitions/uint32
107    description:
108      Defines the CTM this CTI is connected to, in large systems with multiple
109      separate CTI/CTM nets. Typically multi-socket systems where the CTM is
110      propagated between sockets.
111
112  arm,cs-dev-assoc:
113    $ref: /schemas/types.yaml#/definitions/phandle
114    description:
115      defines a phandle reference to an associated CoreSight trace device.
116      When the associated trace device is enabled, then the respective CTI
117      will be enabled. Use in CTI base node when compatible string
118      arm,coresight-cti-v8-arch used. If the associated device has not been
119      registered then the node name will be stored as the connection name for
120      later resolution. If the associated device is not a CoreSight device or
121      not registered then the node name will remain the connection name and
122      automatic enabling will not occur.
123
124  # size cells and address cells required if trig-conns node present.
125  "#size-cells":
126    const: 0
127
128  "#address-cells":
129    const: 1
130
131patternProperties:
132  '^trig-conns@([0-9]+)$':
133    type: object
134    additionalProperties: false
135
136    description:
137      A trigger connections child node which describes the trigger signals
138      between this CTI and another hardware device. This device may be a CPU,
139      CoreSight device, any other hardware device or simple external IO lines.
140      The connection may have both input and output triggers, or only one or the
141      other.
142
143    properties:
144      reg:
145        maxItems: 1
146
147      cpu:
148        description:
149          Handle to cpu this trigger connection is associated with.
150
151      arm,cs-dev-assoc:
152        $ref: /schemas/types.yaml#/definitions/phandle
153        description:
154          defines a phandle reference to an associated CoreSight trace device.
155          When the associated trace device is enabled, then the respective CTI
156          will be enabled. If the associated device has not been registered
157          then the node name will be stored as the connection name for later
158          resolution. If the associated device is not a CoreSight device or
159          not registered then the node name will remain the connection name
160          and automatic enabling will not occur.
161
162      arm,trig-in-sigs:
163        $ref: /schemas/types.yaml#/definitions/uint32-array
164        minItems: 1
165        maxItems: 32
166        description:
167          List of CTI trigger in signal numbers in use by a trig-conns node.
168
169      arm,trig-in-types:
170        $ref: /schemas/types.yaml#/definitions/uint32-array
171        minItems: 1
172        maxItems: 32
173        description:
174          List of constants representing the types for the CTI trigger in
175          signals. Types in this array match to the corresponding signal in the
176          arm,trig-in-sigs array. If the -types array is smaller, or omitted
177          completely, then the types will default to GEN_IO.
178
179      arm,trig-out-sigs:
180        $ref: /schemas/types.yaml#/definitions/uint32-array
181        minItems: 1
182        maxItems: 32
183        description:
184          List of CTI trigger out signal numbers in use by a trig-conns node.
185
186      arm,trig-out-types:
187        $ref: /schemas/types.yaml#/definitions/uint32-array
188        minItems: 1
189        maxItems: 32
190        description:
191          List of constants representing the types for the CTI trigger out
192          signals. Types in this array match to the corresponding signal
193          in the arm,trig-out-sigs array. If the "-types" array is smaller,
194          or omitted completely, then the types will default to GEN_IO.
195
196      arm,trig-filters:
197        $ref: /schemas/types.yaml#/definitions/uint32-array
198        minItems: 1
199        maxItems: 32
200        description:
201          List of CTI trigger out signals that will be blocked from becoming
202          active, unless filtering is disabled on the driver.
203
204      arm,trig-conn-name:
205        $ref: /schemas/types.yaml#/definitions/string
206        description:
207          Defines a connection name that will be displayed, if the cpu or
208          arm,cs-dev-assoc properties are not being used in this connection.
209          Principle use for CTI that are connected to non-CoreSight devices, or
210          external IO.
211
212    anyOf:
213      - required:
214          - arm,trig-in-sigs
215      - required:
216          - arm,trig-out-sigs
217    oneOf:
218      - required:
219          - arm,trig-conn-name
220      - required:
221          - cpu
222      - required:
223          - arm,cs-dev-assoc
224    required:
225      - reg
226
227required:
228  - compatible
229  - reg
230  - clocks
231  - clock-names
232
233if:
234  properties:
235    compatible:
236      contains:
237        const: arm,coresight-cti-v8-arch
238
239then:
240  required:
241    - cpu
242
243unevaluatedProperties: false
244
245examples:
246  # minimum CTI definition. DEVID register used to set number of triggers.
247  - |
248    cti@20020000 {
249      compatible = "arm,coresight-cti", "arm,primecell";
250      reg = <0x20020000 0x1000>;
251
252      clocks = <&soc_smc50mhz>;
253      clock-names = "apb_pclk";
254    };
255  #  v8 architecturally defined CTI - CPU + ETM connections generated by the
256  #  driver according to the v8 architecture specification.
257  - |
258    cti@859000 {
259      compatible = "arm,coresight-cti-v8-arch", "arm,coresight-cti",
260                   "arm,primecell";
261      reg = <0x859000 0x1000>;
262
263      clocks = <&soc_smc50mhz>;
264      clock-names = "apb_pclk";
265
266      cpu = <&CPU1>;
267      arm,cs-dev-assoc = <&etm1>;
268    };
269  # Implementation defined CTI - CPU + ETM connections explicitly defined..
270  # Shows use of type constants from dt-bindings/arm/coresight-cti-dt.h
271  # #size-cells and #address-cells are required if trig-conns@ nodes present.
272  - |
273    #include <dt-bindings/arm/coresight-cti-dt.h>
274
275    cti@858000 {
276      compatible = "arm,coresight-cti", "arm,primecell";
277      reg = <0x858000 0x1000>;
278
279      clocks = <&soc_smc50mhz>;
280      clock-names = "apb_pclk";
281
282      arm,cti-ctm-id = <1>;
283
284      #address-cells = <1>;
285      #size-cells = <0>;
286
287      trig-conns@0 {
288            reg = <0>;
289            arm,trig-in-sigs = <4 5 6 7>;
290            arm,trig-in-types = <ETM_EXTOUT
291                                 ETM_EXTOUT
292                                 ETM_EXTOUT
293                                 ETM_EXTOUT>;
294            arm,trig-out-sigs = <4 5 6 7>;
295            arm,trig-out-types = <ETM_EXTIN
296                                  ETM_EXTIN
297                                  ETM_EXTIN
298                                  ETM_EXTIN>;
299            arm,cs-dev-assoc = <&etm0>;
300      };
301
302      trig-conns@1 {
303            reg = <1>;
304            cpu = <&CPU0>;
305            arm,trig-in-sigs = <0 1>;
306            arm,trig-in-types = <PE_DBGTRIGGER
307                                 PE_PMUIRQ>;
308            arm,trig-out-sigs = <0 1 2 >;
309            arm,trig-out-types = <PE_EDBGREQ
310                                  PE_DBGRESTART
311                                  PE_CTIIRQ>;
312
313            arm,trig-filters = <0>;
314      };
315    };
316  # Implementation defined CTI - non CoreSight component connections.
317  - |
318    cti@20110000 {
319      compatible = "arm,coresight-cti", "arm,primecell";
320      reg = <0x20110000 0x1000>;
321
322      clocks = <&soc_smc50mhz>;
323      clock-names = "apb_pclk";
324
325      #address-cells = <1>;
326      #size-cells = <0>;
327
328      trig-conns@0 {
329        reg = <0>;
330        arm,trig-in-sigs = <0>;
331        arm,trig-in-types = <GEN_INTREQ>;
332        arm,trig-out-sigs = <0>;
333        arm,trig-out-types = <GEN_HALTREQ>;
334        arm,trig-conn-name = "sys_profiler";
335      };
336
337      trig-conns@1 {
338        reg = <1>;
339        arm,trig-out-sigs = <2 3>;
340        arm,trig-out-types = <GEN_HALTREQ GEN_RESTARTREQ>;
341        arm,trig-conn-name = "watchdog";
342      };
343
344      trig-conns@2 {
345        reg = <2>;
346        arm,trig-in-sigs = <1 6>;
347        arm,trig-in-types = <GEN_HALTREQ GEN_RESTARTREQ>;
348        arm,trig-conn-name = "g_counter";
349      };
350    };
351
352...
353