blob: 4682f991a5c818e7116f02e85754fb4aa6dee1e3 [file] [log] [blame]
Maxime Ripardddf6cc92021-09-01 11:18:06 +02001# 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...