1# SPDX-License-Identifier: GPL-2.0
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/arm/arm,cci-400.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: ARM CCI Cache Coherent Interconnect
8
9maintainers:
10  - Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
11
12description: >
13  ARM multi-cluster systems maintain intra-cluster coherency through a cache
14  coherent interconnect (CCI) that is capable of monitoring bus transactions
15  and manage coherency, TLB invalidations and memory barriers.
16
17  It allows snooping and distributed virtual memory message broadcast across
18  clusters, through memory mapped interface, with a global control register
19  space and multiple sets of interface control registers, one per slave
20  interface.
21
22properties:
23  $nodename:
24    pattern: "^cci(@[0-9a-f]+)?$"
25
26  compatible:
27    enum:
28      - arm,cci-400
29      - arm,cci-500
30      - arm,cci-550
31
32  reg:
33    maxItems: 1
34    description: >
35      Specifies base physical address of CCI control registers common to all
36      interfaces.
37
38  "#address-cells": true
39  "#size-cells": true
40  ranges: true
41
42patternProperties:
43  "^slave-if@[0-9a-f]+$":
44    type: object
45
46    properties:
47      compatible:
48        const: arm,cci-400-ctrl-if
49
50      interface-type:
51        enum:
52          - ace
53          - ace-lite
54
55      reg:
56        maxItems: 1
57
58    required:
59      - compatible
60      - interface-type
61      - reg
62
63    additionalProperties: false
64
65  "^pmu@[0-9a-f]+$":
66    type: object
67
68    properties:
69      compatible:
70        oneOf:
71          - const: arm,cci-400-pmu,r0
72          - const: arm,cci-400-pmu,r1
73          - const: arm,cci-400-pmu
74            deprecated: true
75            description: >
76              Permitted only where OS has secure access to CCI registers
77          - const: arm,cci-500-pmu,r0
78          - const: arm,cci-550-pmu,r0
79
80      interrupts:
81        minItems: 1
82        maxItems: 8
83        description: >
84          List of counter overflow interrupts, one per counter. The interrupts
85          must be specified starting with the cycle counter overflow interrupt,
86          followed by counter0 overflow interrupt, counter1 overflow
87          interrupt,...  ,counterN overflow interrupt.
88
89          The CCI PMU has an interrupt signal for each counter. The number of
90          interrupts must be equal to the number of counters.
91
92      reg:
93        maxItems: 1
94
95    required:
96      - compatible
97      - interrupts
98      - reg
99
100    additionalProperties: false
101
102required:
103  - "#address-cells"
104  - "#size-cells"
105  - compatible
106  - ranges
107  - reg
108
109additionalProperties: false
110
111examples:
112  - |
113      / {
114          #address-cells = <2>;
115          #size-cells = <2>;
116
117          compatible = "arm,vexpress,v2p-ca15_a7", "arm,vexpress";
118          model = "V2P-CA15_CA7";
119          arm,hbi = <0x249>;
120          interrupt-parent = <&gic>;
121
122          gic: interrupt-controller {
123              interrupt-controller;
124              #interrupt-cells = <3>;
125          };
126
127          /*
128           * This CCI node corresponds to a CCI component whose control
129           * registers sits at address 0x000000002c090000.
130           *
131           * CCI slave interface @0x000000002c091000 is connected to dma
132           * controller dma0.
133           *
134           * CCI slave interface @0x000000002c094000 is connected to CPUs
135           * {CPU0, CPU1};
136           *
137           * CCI slave interface @0x000000002c095000 is connected to CPUs
138           * {CPU2, CPU3};
139           */
140
141          cpus {
142              #size-cells = <0>;
143              #address-cells = <1>;
144
145              CPU0: cpu@0 {
146                  device_type = "cpu";
147                  compatible = "arm,cortex-a15";
148                  cci-control-port = <&cci_control1>;
149                  reg = <0x0>;
150              };
151
152              CPU1: cpu@1 {
153                  device_type = "cpu";
154                  compatible = "arm,cortex-a15";
155                  cci-control-port = <&cci_control1>;
156                  reg = <0x1>;
157              };
158
159              CPU2: cpu@100 {
160                  device_type = "cpu";
161                  compatible = "arm,cortex-a7";
162                  cci-control-port = <&cci_control2>;
163                  reg = <0x100>;
164              };
165
166              CPU3: cpu@101 {
167                  device_type = "cpu";
168                  compatible = "arm,cortex-a7";
169                  cci-control-port = <&cci_control2>;
170                  reg = <0x101>;
171              };
172          };
173
174          cci@2c090000 {
175              compatible = "arm,cci-400";
176              #address-cells = <1>;
177              #size-cells = <1>;
178              reg = <0x0 0x2c090000 0 0x1000>;
179              ranges = <0x0 0x0 0x2c090000 0x10000>;
180
181              cci_control0: slave-if@1000 {
182                  compatible = "arm,cci-400-ctrl-if";
183                  interface-type = "ace-lite";
184                  reg = <0x1000 0x1000>;
185              };
186
187              cci_control1: slave-if@4000 {
188                  compatible = "arm,cci-400-ctrl-if";
189                  interface-type = "ace";
190                  reg = <0x4000 0x1000>;
191              };
192
193              cci_control2: slave-if@5000 {
194                  compatible = "arm,cci-400-ctrl-if";
195                  interface-type = "ace";
196                  reg = <0x5000 0x1000>;
197              };
198
199              pmu@9000 {
200                  compatible = "arm,cci-400-pmu";
201                  reg = <0x9000 0x5000>;
202                  interrupts = <0 101 4>,
203                    <0 102 4>,
204                    <0 103 4>,
205                    <0 104 4>,
206                    <0 105 4>;
207              };
208          };
209      };
210
211...
212