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 Device Tree Binding
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          /*
123           * This CCI node corresponds to a CCI component whose control
124           * registers sits at address 0x000000002c090000.
125           *
126           * CCI slave interface @0x000000002c091000 is connected to dma
127           * controller dma0.
128           *
129           * CCI slave interface @0x000000002c094000 is connected to CPUs
130           * {CPU0, CPU1};
131           *
132           * CCI slave interface @0x000000002c095000 is connected to CPUs
133           * {CPU2, CPU3};
134           */
135
136          cpus {
137              #size-cells = <0>;
138              #address-cells = <1>;
139
140              CPU0: cpu@0 {
141                  device_type = "cpu";
142                  compatible = "arm,cortex-a15";
143                  cci-control-port = <&cci_control1>;
144                  reg = <0x0>;
145              };
146
147              CPU1: cpu@1 {
148                  device_type = "cpu";
149                  compatible = "arm,cortex-a15";
150                  cci-control-port = <&cci_control1>;
151                  reg = <0x1>;
152              };
153
154              CPU2: cpu@100 {
155                  device_type = "cpu";
156                  compatible = "arm,cortex-a7";
157                  cci-control-port = <&cci_control2>;
158                  reg = <0x100>;
159              };
160
161              CPU3: cpu@101 {
162                  device_type = "cpu";
163                  compatible = "arm,cortex-a7";
164                  cci-control-port = <&cci_control2>;
165                  reg = <0x101>;
166              };
167          };
168
169          dma0: dma@3000000 {
170              /* compatible = "arm,pl330", "arm,primecell"; */
171              cci-control-port = <&cci_control0>;
172              reg = <0x0 0x3000000 0x0 0x1000>;
173              interrupts = <10>;
174              #dma-cells = <1>;
175              #dma-channels = <8>;
176              #dma-requests = <32>;
177          };
178
179          cci@2c090000 {
180              compatible = "arm,cci-400";
181              #address-cells = <1>;
182              #size-cells = <1>;
183              reg = <0x0 0x2c090000 0 0x1000>;
184              ranges = <0x0 0x0 0x2c090000 0x10000>;
185
186              cci_control0: slave-if@1000 {
187                  compatible = "arm,cci-400-ctrl-if";
188                  interface-type = "ace-lite";
189                  reg = <0x1000 0x1000>;
190              };
191
192              cci_control1: slave-if@4000 {
193                  compatible = "arm,cci-400-ctrl-if";
194                  interface-type = "ace";
195                  reg = <0x4000 0x1000>;
196              };
197
198              cci_control2: slave-if@5000 {
199                  compatible = "arm,cci-400-ctrl-if";
200                  interface-type = "ace";
201                  reg = <0x5000 0x1000>;
202              };
203
204              pmu@9000 {
205                  compatible = "arm,cci-400-pmu";
206                  reg = <0x9000 0x5000>;
207                  interrupts = <0 101 4>,
208                    <0 102 4>,
209                    <0 103 4>,
210                    <0 104 4>,
211                    <0 105 4>;
212              };
213          };
214      };
215
216...
217