xref: /freebsd/sys/contrib/device-tree/Bindings/arm/cci.txt (revision c66ec88fed842fbaad62c30d510644ceb7bd2d71)
1*c66ec88fSEmmanuel Vadot=======================================================
2*c66ec88fSEmmanuel VadotARM CCI cache coherent interconnect binding description
3*c66ec88fSEmmanuel Vadot=======================================================
4*c66ec88fSEmmanuel Vadot
5*c66ec88fSEmmanuel VadotARM multi-cluster systems maintain intra-cluster coherency through a
6*c66ec88fSEmmanuel Vadotcache coherent interconnect (CCI) that is capable of monitoring bus
7*c66ec88fSEmmanuel Vadottransactions and manage coherency, TLB invalidations and memory barriers.
8*c66ec88fSEmmanuel Vadot
9*c66ec88fSEmmanuel VadotIt allows snooping and distributed virtual memory message broadcast across
10*c66ec88fSEmmanuel Vadotclusters, through memory mapped interface, with a global control register
11*c66ec88fSEmmanuel Vadotspace and multiple sets of interface control registers, one per slave
12*c66ec88fSEmmanuel Vadotinterface.
13*c66ec88fSEmmanuel Vadot
14*c66ec88fSEmmanuel Vadot* CCI interconnect node
15*c66ec88fSEmmanuel Vadot
16*c66ec88fSEmmanuel Vadot	Description: Describes a CCI cache coherent Interconnect component
17*c66ec88fSEmmanuel Vadot
18*c66ec88fSEmmanuel Vadot	Node name must be "cci".
19*c66ec88fSEmmanuel Vadot	Node's parent must be the root node /, and the address space visible
20*c66ec88fSEmmanuel Vadot	through the CCI interconnect is the same as the one seen from the
21*c66ec88fSEmmanuel Vadot	root node (ie from CPUs perspective as per DT standard).
22*c66ec88fSEmmanuel Vadot	Every CCI node has to define the following properties:
23*c66ec88fSEmmanuel Vadot
24*c66ec88fSEmmanuel Vadot	- compatible
25*c66ec88fSEmmanuel Vadot		Usage: required
26*c66ec88fSEmmanuel Vadot		Value type: <string>
27*c66ec88fSEmmanuel Vadot		Definition: must contain one of the following:
28*c66ec88fSEmmanuel Vadot			    "arm,cci-400"
29*c66ec88fSEmmanuel Vadot			    "arm,cci-500"
30*c66ec88fSEmmanuel Vadot			    "arm,cci-550"
31*c66ec88fSEmmanuel Vadot
32*c66ec88fSEmmanuel Vadot	- reg
33*c66ec88fSEmmanuel Vadot		Usage: required
34*c66ec88fSEmmanuel Vadot		Value type: Integer cells. A register entry, expressed as a pair
35*c66ec88fSEmmanuel Vadot			    of cells, containing base and size.
36*c66ec88fSEmmanuel Vadot		Definition: A standard property. Specifies base physical
37*c66ec88fSEmmanuel Vadot			    address of CCI control registers common to all
38*c66ec88fSEmmanuel Vadot			    interfaces.
39*c66ec88fSEmmanuel Vadot
40*c66ec88fSEmmanuel Vadot	- ranges:
41*c66ec88fSEmmanuel Vadot		Usage: required
42*c66ec88fSEmmanuel Vadot		Value type: Integer cells. An array of range entries, expressed
43*c66ec88fSEmmanuel Vadot			    as a tuple of cells, containing child address,
44*c66ec88fSEmmanuel Vadot			    parent address and the size of the region in the
45*c66ec88fSEmmanuel Vadot			    child address space.
46*c66ec88fSEmmanuel Vadot		Definition: A standard property. Follow rules in the Devicetree
47*c66ec88fSEmmanuel Vadot			    Specification for hierarchical bus addressing. CCI
48*c66ec88fSEmmanuel Vadot			    interfaces addresses refer to the parent node
49*c66ec88fSEmmanuel Vadot			    addressing scheme to declare their register bases.
50*c66ec88fSEmmanuel Vadot
51*c66ec88fSEmmanuel Vadot	CCI interconnect node can define the following child nodes:
52*c66ec88fSEmmanuel Vadot
53*c66ec88fSEmmanuel Vadot	- CCI control interface nodes
54*c66ec88fSEmmanuel Vadot
55*c66ec88fSEmmanuel Vadot		Node name must be "slave-if".
56*c66ec88fSEmmanuel Vadot		Parent node must be CCI interconnect node.
57*c66ec88fSEmmanuel Vadot
58*c66ec88fSEmmanuel Vadot		A CCI control interface node must contain the following
59*c66ec88fSEmmanuel Vadot		properties:
60*c66ec88fSEmmanuel Vadot
61*c66ec88fSEmmanuel Vadot		- compatible
62*c66ec88fSEmmanuel Vadot			Usage: required
63*c66ec88fSEmmanuel Vadot			Value type: <string>
64*c66ec88fSEmmanuel Vadot			Definition: must be set to
65*c66ec88fSEmmanuel Vadot				    "arm,cci-400-ctrl-if"
66*c66ec88fSEmmanuel Vadot
67*c66ec88fSEmmanuel Vadot		- interface-type:
68*c66ec88fSEmmanuel Vadot			Usage: required
69*c66ec88fSEmmanuel Vadot			Value type: <string>
70*c66ec88fSEmmanuel Vadot			Definition: must be set to one of {"ace", "ace-lite"}
71*c66ec88fSEmmanuel Vadot				    depending on the interface type the node
72*c66ec88fSEmmanuel Vadot				    represents.
73*c66ec88fSEmmanuel Vadot
74*c66ec88fSEmmanuel Vadot		- reg:
75*c66ec88fSEmmanuel Vadot			Usage: required
76*c66ec88fSEmmanuel Vadot			Value type: Integer cells. A register entry, expressed
77*c66ec88fSEmmanuel Vadot				    as a pair of cells, containing base and
78*c66ec88fSEmmanuel Vadot				    size.
79*c66ec88fSEmmanuel Vadot			Definition: the base address and size of the
80*c66ec88fSEmmanuel Vadot				    corresponding interface programming
81*c66ec88fSEmmanuel Vadot				    registers.
82*c66ec88fSEmmanuel Vadot
83*c66ec88fSEmmanuel Vadot	- CCI PMU node
84*c66ec88fSEmmanuel Vadot
85*c66ec88fSEmmanuel Vadot		Parent node must be CCI interconnect node.
86*c66ec88fSEmmanuel Vadot
87*c66ec88fSEmmanuel Vadot		A CCI pmu node must contain the following properties:
88*c66ec88fSEmmanuel Vadot
89*c66ec88fSEmmanuel Vadot		- compatible
90*c66ec88fSEmmanuel Vadot			Usage: required
91*c66ec88fSEmmanuel Vadot			Value type: <string>
92*c66ec88fSEmmanuel Vadot			Definition: Must contain one of:
93*c66ec88fSEmmanuel Vadot				 "arm,cci-400-pmu,r0"
94*c66ec88fSEmmanuel Vadot				 "arm,cci-400-pmu,r1"
95*c66ec88fSEmmanuel Vadot				 "arm,cci-400-pmu"  - DEPRECATED, permitted only where OS has
96*c66ec88fSEmmanuel Vadot						      secure access to CCI registers
97*c66ec88fSEmmanuel Vadot				 "arm,cci-500-pmu,r0"
98*c66ec88fSEmmanuel Vadot				 "arm,cci-550-pmu,r0"
99*c66ec88fSEmmanuel Vadot		- reg:
100*c66ec88fSEmmanuel Vadot			Usage: required
101*c66ec88fSEmmanuel Vadot			Value type: Integer cells. A register entry, expressed
102*c66ec88fSEmmanuel Vadot				    as a pair of cells, containing base and
103*c66ec88fSEmmanuel Vadot				    size.
104*c66ec88fSEmmanuel Vadot			Definition: the base address and size of the
105*c66ec88fSEmmanuel Vadot				    corresponding interface programming
106*c66ec88fSEmmanuel Vadot				    registers.
107*c66ec88fSEmmanuel Vadot
108*c66ec88fSEmmanuel Vadot		- interrupts:
109*c66ec88fSEmmanuel Vadot			Usage: required
110*c66ec88fSEmmanuel Vadot			Value type: Integer cells. Array of interrupt specifier
111*c66ec88fSEmmanuel Vadot				    entries, as defined in
112*c66ec88fSEmmanuel Vadot				    ../interrupt-controller/interrupts.txt.
113*c66ec88fSEmmanuel Vadot			Definition: list of counter overflow interrupts, one per
114*c66ec88fSEmmanuel Vadot				    counter. The interrupts must be specified
115*c66ec88fSEmmanuel Vadot				    starting with the cycle counter overflow
116*c66ec88fSEmmanuel Vadot				    interrupt, followed by counter0 overflow
117*c66ec88fSEmmanuel Vadot				    interrupt, counter1 overflow interrupt,...
118*c66ec88fSEmmanuel Vadot				    ,counterN overflow interrupt.
119*c66ec88fSEmmanuel Vadot
120*c66ec88fSEmmanuel Vadot				    The CCI PMU has an interrupt signal for each
121*c66ec88fSEmmanuel Vadot				    counter. The number of interrupts must be
122*c66ec88fSEmmanuel Vadot				    equal to the number of counters.
123*c66ec88fSEmmanuel Vadot
124*c66ec88fSEmmanuel Vadot* CCI interconnect bus masters
125*c66ec88fSEmmanuel Vadot
126*c66ec88fSEmmanuel Vadot	Description: masters in the device tree connected to a CCI port
127*c66ec88fSEmmanuel Vadot		     (inclusive of CPUs and their cpu nodes).
128*c66ec88fSEmmanuel Vadot
129*c66ec88fSEmmanuel Vadot	A CCI interconnect bus master node must contain the following
130*c66ec88fSEmmanuel Vadot	properties:
131*c66ec88fSEmmanuel Vadot
132*c66ec88fSEmmanuel Vadot	- cci-control-port:
133*c66ec88fSEmmanuel Vadot		Usage: required
134*c66ec88fSEmmanuel Vadot		Value type: <phandle>
135*c66ec88fSEmmanuel Vadot		Definition: a phandle containing the CCI control interface node
136*c66ec88fSEmmanuel Vadot			    the master is connected to.
137*c66ec88fSEmmanuel Vadot
138*c66ec88fSEmmanuel VadotExample:
139*c66ec88fSEmmanuel Vadot
140*c66ec88fSEmmanuel Vadot	cpus {
141*c66ec88fSEmmanuel Vadot		#size-cells = <0>;
142*c66ec88fSEmmanuel Vadot		#address-cells = <1>;
143*c66ec88fSEmmanuel Vadot
144*c66ec88fSEmmanuel Vadot		CPU0: cpu@0 {
145*c66ec88fSEmmanuel Vadot			device_type = "cpu";
146*c66ec88fSEmmanuel Vadot			compatible = "arm,cortex-a15";
147*c66ec88fSEmmanuel Vadot			cci-control-port = <&cci_control1>;
148*c66ec88fSEmmanuel Vadot			reg = <0x0>;
149*c66ec88fSEmmanuel Vadot		};
150*c66ec88fSEmmanuel Vadot
151*c66ec88fSEmmanuel Vadot		CPU1: cpu@1 {
152*c66ec88fSEmmanuel Vadot			device_type = "cpu";
153*c66ec88fSEmmanuel Vadot			compatible = "arm,cortex-a15";
154*c66ec88fSEmmanuel Vadot			cci-control-port = <&cci_control1>;
155*c66ec88fSEmmanuel Vadot			reg = <0x1>;
156*c66ec88fSEmmanuel Vadot		};
157*c66ec88fSEmmanuel Vadot
158*c66ec88fSEmmanuel Vadot		CPU2: cpu@100 {
159*c66ec88fSEmmanuel Vadot			device_type = "cpu";
160*c66ec88fSEmmanuel Vadot			compatible = "arm,cortex-a7";
161*c66ec88fSEmmanuel Vadot			cci-control-port = <&cci_control2>;
162*c66ec88fSEmmanuel Vadot			reg = <0x100>;
163*c66ec88fSEmmanuel Vadot		};
164*c66ec88fSEmmanuel Vadot
165*c66ec88fSEmmanuel Vadot		CPU3: cpu@101 {
166*c66ec88fSEmmanuel Vadot			device_type = "cpu";
167*c66ec88fSEmmanuel Vadot			compatible = "arm,cortex-a7";
168*c66ec88fSEmmanuel Vadot			cci-control-port = <&cci_control2>;
169*c66ec88fSEmmanuel Vadot			reg = <0x101>;
170*c66ec88fSEmmanuel Vadot		};
171*c66ec88fSEmmanuel Vadot
172*c66ec88fSEmmanuel Vadot	};
173*c66ec88fSEmmanuel Vadot
174*c66ec88fSEmmanuel Vadot	dma0: dma@3000000 {
175*c66ec88fSEmmanuel Vadot		compatible = "arm,pl330", "arm,primecell";
176*c66ec88fSEmmanuel Vadot		cci-control-port = <&cci_control0>;
177*c66ec88fSEmmanuel Vadot		reg = <0x0 0x3000000 0x0 0x1000>;
178*c66ec88fSEmmanuel Vadot		interrupts = <10>;
179*c66ec88fSEmmanuel Vadot		#dma-cells = <1>;
180*c66ec88fSEmmanuel Vadot		#dma-channels = <8>;
181*c66ec88fSEmmanuel Vadot		#dma-requests = <32>;
182*c66ec88fSEmmanuel Vadot	};
183*c66ec88fSEmmanuel Vadot
184*c66ec88fSEmmanuel Vadot	cci@2c090000 {
185*c66ec88fSEmmanuel Vadot		compatible = "arm,cci-400";
186*c66ec88fSEmmanuel Vadot		#address-cells = <1>;
187*c66ec88fSEmmanuel Vadot		#size-cells = <1>;
188*c66ec88fSEmmanuel Vadot		reg = <0x0 0x2c090000 0 0x1000>;
189*c66ec88fSEmmanuel Vadot		ranges = <0x0 0x0 0x2c090000 0x10000>;
190*c66ec88fSEmmanuel Vadot
191*c66ec88fSEmmanuel Vadot		cci_control0: slave-if@1000 {
192*c66ec88fSEmmanuel Vadot			compatible = "arm,cci-400-ctrl-if";
193*c66ec88fSEmmanuel Vadot			interface-type = "ace-lite";
194*c66ec88fSEmmanuel Vadot			reg = <0x1000 0x1000>;
195*c66ec88fSEmmanuel Vadot		};
196*c66ec88fSEmmanuel Vadot
197*c66ec88fSEmmanuel Vadot		cci_control1: slave-if@4000 {
198*c66ec88fSEmmanuel Vadot			compatible = "arm,cci-400-ctrl-if";
199*c66ec88fSEmmanuel Vadot			interface-type = "ace";
200*c66ec88fSEmmanuel Vadot			reg = <0x4000 0x1000>;
201*c66ec88fSEmmanuel Vadot		};
202*c66ec88fSEmmanuel Vadot
203*c66ec88fSEmmanuel Vadot		cci_control2: slave-if@5000 {
204*c66ec88fSEmmanuel Vadot			compatible = "arm,cci-400-ctrl-if";
205*c66ec88fSEmmanuel Vadot			interface-type = "ace";
206*c66ec88fSEmmanuel Vadot			reg = <0x5000 0x1000>;
207*c66ec88fSEmmanuel Vadot		};
208*c66ec88fSEmmanuel Vadot
209*c66ec88fSEmmanuel Vadot		pmu@9000 {
210*c66ec88fSEmmanuel Vadot			 compatible = "arm,cci-400-pmu";
211*c66ec88fSEmmanuel Vadot			 reg = <0x9000 0x5000>;
212*c66ec88fSEmmanuel Vadot			 interrupts = <0 101 4>,
213*c66ec88fSEmmanuel Vadot				      <0 102 4>,
214*c66ec88fSEmmanuel Vadot				      <0 103 4>,
215*c66ec88fSEmmanuel Vadot				      <0 104 4>,
216*c66ec88fSEmmanuel Vadot				      <0 105 4>;
217*c66ec88fSEmmanuel Vadot		};
218*c66ec88fSEmmanuel Vadot	};
219*c66ec88fSEmmanuel Vadot
220*c66ec88fSEmmanuel VadotThis CCI node corresponds to a CCI component whose control registers sits
221*c66ec88fSEmmanuel Vadotat address 0x000000002c090000.
222*c66ec88fSEmmanuel VadotCCI slave interface @0x000000002c091000 is connected to dma controller dma0.
223*c66ec88fSEmmanuel VadotCCI slave interface @0x000000002c094000 is connected to CPUs {CPU0, CPU1};
224*c66ec88fSEmmanuel VadotCCI slave interface @0x000000002c095000 is connected to CPUs {CPU2, CPU3};
225