xref: /arm-trusted-firmware/fdts/fvp-defs.dtsi (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu/*
2*91f16700Schasinglulu * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu *
4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu */
6*91f16700Schasinglulu
7*91f16700Schasinglulu#ifndef	FVP_DEFS_DTSI
8*91f16700Schasinglulu#define	FVP_DEFS_DTSI
9*91f16700Schasinglulu
10*91f16700Schasinglulu/* Set default topology values if not passed from platform's makefile */
11*91f16700Schasinglulu#ifndef	CLUSTER_COUNT
12*91f16700Schasinglulu#ifdef	FVP_CLUSTER_COUNT
13*91f16700Schasinglulu#define	CLUSTER_COUNT		FVP_CLUSTER_COUNT
14*91f16700Schasinglulu#else
15*91f16700Schasinglulu#define	CLUSTER_COUNT		2
16*91f16700Schasinglulu#endif
17*91f16700Schasinglulu#endif	/* CLUSTER_COUNT */
18*91f16700Schasinglulu
19*91f16700Schasinglulu#ifndef CPUS_PER_CLUSTER
20*91f16700Schasinglulu#ifdef FVP_MAX_CPUS_PER_CLUSTER
21*91f16700Schasinglulu#define	CPUS_PER_CLUSTER	FVP_MAX_CPUS_PER_CLUSTER
22*91f16700Schasinglulu#else
23*91f16700Schasinglulu#define	CPUS_PER_CLUSTER	4
24*91f16700Schasinglulu#endif
25*91f16700Schasinglulu#endif	/* CPUS_PER_CLUSTER */
26*91f16700Schasinglulu
27*91f16700Schasinglulu/* Get platform's topology */
28*91f16700Schasinglulu#define	CPUS_COUNT		(CLUSTER_COUNT * CPUS_PER_CLUSTER)
29*91f16700Schasinglulu
30*91f16700Schasinglulu#define CONCAT(x, y)	x##y
31*91f16700Schasinglulu#define CONC(x, y)	CONCAT(x, y)
32*91f16700Schasinglulu
33*91f16700Schasinglulu/* CPU's cluster */
34*91f16700Schasinglulu#define	CLS(n)	(n / CPUS_PER_CLUSTER)
35*91f16700Schasinglulu
36*91f16700Schasinglulu/* CPU's position in cluster */
37*91f16700Schasinglulu#define	POS(n)	(n % CPUS_PER_CLUSTER)
38*91f16700Schasinglulu
39*91f16700Schasinglulu#define	ADR(n, c, p)	\
40*91f16700Schasinglulu	CPU##n:cpu@CONC(c, CONC(p, AFF)) {
41*91f16700Schasinglulu
42*91f16700Schasinglulu#define	PRE			\
43*91f16700Schasinglulu	device_type = "cpu";	\
44*91f16700Schasinglulu	compatible = "arm,armv8";
45*91f16700Schasinglulu
46*91f16700Schasinglulu#define	POST				\
47*91f16700Schasinglulu	enable-method = "psci";		\
48*91f16700Schasinglulu	cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;	\
49*91f16700Schasinglulu	next-level-cache = <&L2_0>;	\
50*91f16700Schasinglulu	};
51*91f16700Schasinglulu
52*91f16700Schasinglulu#define	CPU_0		\
53*91f16700Schasinglulu	CPU0:cpu@0 {	\
54*91f16700Schasinglulu	PRE		\
55*91f16700Schasinglulu	reg = <0x0 0x0>;\
56*91f16700Schasinglulu	POST
57*91f16700Schasinglulu
58*91f16700Schasinglulu/*
59*91f16700Schasinglulu * n - CPU number
60*91f16700Schasinglulu */
61*91f16700Schasinglulu#define	CPU(n, c, p)	\
62*91f16700Schasinglulu	ADR(n, c, p)	\
63*91f16700Schasinglulu	PRE		\
64*91f16700Schasinglulu	reg = <0x0 CONC(0x, CONC(c, CONC(p, AFF)))>;	\
65*91f16700Schasinglulu	POST
66*91f16700Schasinglulu
67*91f16700Schasinglulu/* 2 CPUs */
68*91f16700Schasinglulu#if (CPUS_COUNT > 1)
69*91f16700Schasinglulu#if (CLS(1) == 0)
70*91f16700Schasinglulu#define c1
71*91f16700Schasinglulu#define	p1	1
72*91f16700Schasinglulu#else
73*91f16700Schasinglulu#define	c1	10
74*91f16700Schasinglulu#define p1	0
75*91f16700Schasinglulu#endif
76*91f16700Schasinglulu
77*91f16700Schasinglulu#define	CPU_1	CPU(1, c1, p1)	/* CPU1: 0.1; 1.0 */
78*91f16700Schasinglulu
79*91f16700Schasinglulu/* 3 CPUs */
80*91f16700Schasinglulu#if (CPUS_COUNT > 2)
81*91f16700Schasinglulu#if (CLS(2) == 0)
82*91f16700Schasinglulu#define c2
83*91f16700Schasinglulu#define p2	2
84*91f16700Schasinglulu#elif (CLS(2) == 1)
85*91f16700Schasinglulu#define	c2	10
86*91f16700Schasinglulu#define p2	0
87*91f16700Schasinglulu#else
88*91f16700Schasinglulu#define	c2	20
89*91f16700Schasinglulu#define p2	0
90*91f16700Schasinglulu#endif
91*91f16700Schasinglulu
92*91f16700Schasinglulu#define	CPU_2	CPU(2, c2, p2)	/* CPU2: 0.2; 1.0; 2.0 */
93*91f16700Schasinglulu
94*91f16700Schasinglulu/* 4 CPUs */
95*91f16700Schasinglulu#if (CPUS_COUNT > 3)
96*91f16700Schasinglulu#if (CLS(3) == 0)
97*91f16700Schasinglulu#define c3
98*91f16700Schasinglulu#elif (CLS(3) == 1)
99*91f16700Schasinglulu#define	c3	10
100*91f16700Schasinglulu#else
101*91f16700Schasinglulu#define	c3	30
102*91f16700Schasinglulu#endif
103*91f16700Schasinglulu
104*91f16700Schasinglulu#if (POS(3) == 0)
105*91f16700Schasinglulu#define p3	0
106*91f16700Schasinglulu#elif (POS(3) == 1)
107*91f16700Schasinglulu#define	p3	1
108*91f16700Schasinglulu#else
109*91f16700Schasinglulu#define	p3	3
110*91f16700Schasinglulu#endif
111*91f16700Schasinglulu
112*91f16700Schasinglulu#define	CPU_3	CPU(3, c3, p3)	/* CPU3: 0.3; 1.0; 1.1; 3.0 */
113*91f16700Schasinglulu
114*91f16700Schasinglulu/* 6 CPUs */
115*91f16700Schasinglulu#if (CPUS_COUNT > 4)
116*91f16700Schasinglulu#if (CLS(4) == 1)
117*91f16700Schasinglulu#define	c4	10
118*91f16700Schasinglulu#else
119*91f16700Schasinglulu#define	c4	20
120*91f16700Schasinglulu#endif
121*91f16700Schasinglulu
122*91f16700Schasinglulu#if (POS(4) == 0)
123*91f16700Schasinglulu#define p4	0
124*91f16700Schasinglulu#else
125*91f16700Schasinglulu#define	p4	1
126*91f16700Schasinglulu#endif
127*91f16700Schasinglulu
128*91f16700Schasinglulu#if (CLS(5) == 1)
129*91f16700Schasinglulu#define	c5	10
130*91f16700Schasinglulu#else
131*91f16700Schasinglulu#define	c5	20
132*91f16700Schasinglulu#endif
133*91f16700Schasinglulu
134*91f16700Schasinglulu#if (POS(5) == 1)
135*91f16700Schasinglulu#define	p5	1
136*91f16700Schasinglulu#else
137*91f16700Schasinglulu#define	p5	2
138*91f16700Schasinglulu#endif
139*91f16700Schasinglulu
140*91f16700Schasinglulu#define	CPU_4	CPU(4, c4, p4)	/* CPU4: 1.0; 1.1; 2.0 */
141*91f16700Schasinglulu#define	CPU_5	CPU(5, c5, p5)	/* CPU5: 1.1; 1.2; 2.1 */
142*91f16700Schasinglulu
143*91f16700Schasinglulu/* 8 CPUs */
144*91f16700Schasinglulu#if (CPUS_COUNT > 6)
145*91f16700Schasinglulu#if (CLS(6) == 1)
146*91f16700Schasinglulu#define	c6	10
147*91f16700Schasinglulu#define	p6	2
148*91f16700Schasinglulu#elif (CLS(6) == 2)
149*91f16700Schasinglulu#define	c6	20
150*91f16700Schasinglulu#define	p6	0
151*91f16700Schasinglulu#else
152*91f16700Schasinglulu#define	c6	30
153*91f16700Schasinglulu#define	p6	0
154*91f16700Schasinglulu#endif
155*91f16700Schasinglulu
156*91f16700Schasinglulu#if (CLS(7) == 1)
157*91f16700Schasinglulu#define	c7	10
158*91f16700Schasinglulu#define	p7	3
159*91f16700Schasinglulu#elif (CLS(7) == 2)
160*91f16700Schasinglulu#define	c7	20
161*91f16700Schasinglulu#define	p7	1
162*91f16700Schasinglulu#else
163*91f16700Schasinglulu#define	c7	30
164*91f16700Schasinglulu#define	p7	1
165*91f16700Schasinglulu#endif
166*91f16700Schasinglulu
167*91f16700Schasinglulu#define	CPU_6	CPU(6, c6, p6)	/* CPU6: 1.2; 2.0; 3.0 */
168*91f16700Schasinglulu#define	CPU_7	CPU(7, c7, p7)	/* CPU7: 1.3; 2.1; 3.1 */
169*91f16700Schasinglulu
170*91f16700Schasinglulu/* 9 CPUs */
171*91f16700Schasinglulu#if (CPUS_COUNT > 8)
172*91f16700Schasinglulu#if (POS(8) == 0)
173*91f16700Schasinglulu#define	p8	0
174*91f16700Schasinglulu#else
175*91f16700Schasinglulu#define	p8	2
176*91f16700Schasinglulu#endif
177*91f16700Schasinglulu
178*91f16700Schasinglulu#define	CPU_8	CPU(8, 20, p8)	/* CPU8: 2.0; 2.2 */
179*91f16700Schasinglulu
180*91f16700Schasinglulu/* 12 CPUs */
181*91f16700Schasinglulu#if (CPUS_COUNT > 9)
182*91f16700Schasinglulu#if (CLS(9) == 2)
183*91f16700Schasinglulu#define	c9	20
184*91f16700Schasinglulu#define	p9	1
185*91f16700Schasinglulu#else
186*91f16700Schasinglulu#define	c9	30
187*91f16700Schasinglulu#define	p9	0
188*91f16700Schasinglulu#endif
189*91f16700Schasinglulu
190*91f16700Schasinglulu#if (CLS(10) == 2)
191*91f16700Schasinglulu#define	c10	20
192*91f16700Schasinglulu#define	p10	2
193*91f16700Schasinglulu#else
194*91f16700Schasinglulu#define	c10	30
195*91f16700Schasinglulu#define	p10	1
196*91f16700Schasinglulu#endif
197*91f16700Schasinglulu
198*91f16700Schasinglulu#if (CLS(11) == 2)
199*91f16700Schasinglulu#define	c11	20
200*91f16700Schasinglulu#define	p11	3
201*91f16700Schasinglulu#else
202*91f16700Schasinglulu#define	c11	30
203*91f16700Schasinglulu#define	p11	2
204*91f16700Schasinglulu#endif
205*91f16700Schasinglulu
206*91f16700Schasinglulu#define	CPU_9	CPU(9, c9, p9)		/* CPU9:  2.1; 3.0 */
207*91f16700Schasinglulu#define	CPU_10	CPU(10, c10, p10)	/* CPU10: 2.2; 3.1 */
208*91f16700Schasinglulu#define	CPU_11	CPU(11, c11, p11)	/* CPU11: 2.3; 3.2 */
209*91f16700Schasinglulu
210*91f16700Schasinglulu/* 16 CPUs */
211*91f16700Schasinglulu#if (CPUS_COUNT > 12)
212*91f16700Schasinglulu#define	CPU_12	CPU(12, 30, 0)		/* CPU12: 3.0 */
213*91f16700Schasinglulu#define	CPU_13	CPU(13, 30, 1)		/* CPU13: 3.1 */
214*91f16700Schasinglulu#define	CPU_14	CPU(14, 30, 2)		/* CPU14: 3.2 */
215*91f16700Schasinglulu#define	CPU_15	CPU(15, 30, 3)		/* CPU15: 3.3 */
216*91f16700Schasinglulu#endif	/* > 12 */
217*91f16700Schasinglulu#endif	/* > 9 */
218*91f16700Schasinglulu#endif	/* > 8 */
219*91f16700Schasinglulu#endif	/* > 6 */
220*91f16700Schasinglulu#endif	/* > 4 */
221*91f16700Schasinglulu#endif	/* > 3 */
222*91f16700Schasinglulu#endif	/* > 2 */
223*91f16700Schasinglulu#endif	/* > 1 */
224*91f16700Schasinglulu
225*91f16700Schasinglulu#if (CPUS_COUNT == 1)
226*91f16700Schasinglulu#define	CPUS	\
227*91f16700Schasinglulu	CPU_0
228*91f16700Schasinglulu
229*91f16700Schasinglulu#elif (CPUS_COUNT == 2)
230*91f16700Schasinglulu#define	CPUS	\
231*91f16700Schasinglulu	CPU_0	\
232*91f16700Schasinglulu	CPU_1
233*91f16700Schasinglulu
234*91f16700Schasinglulu#elif (CPUS_COUNT == 3)
235*91f16700Schasinglulu#define	CPUS	\
236*91f16700Schasinglulu	CPU_0	\
237*91f16700Schasinglulu	CPU_1	\
238*91f16700Schasinglulu	CPU_2
239*91f16700Schasinglulu
240*91f16700Schasinglulu#elif (CPUS_COUNT == 4)
241*91f16700Schasinglulu#define	CPUS	\
242*91f16700Schasinglulu	CPU_0	\
243*91f16700Schasinglulu	CPU_1	\
244*91f16700Schasinglulu	CPU_2	\
245*91f16700Schasinglulu	CPU_3
246*91f16700Schasinglulu
247*91f16700Schasinglulu#elif (CPUS_COUNT == 6)
248*91f16700Schasinglulu#define	CPUS	\
249*91f16700Schasinglulu	CPU_0	\
250*91f16700Schasinglulu	CPU_1	\
251*91f16700Schasinglulu	CPU_2	\
252*91f16700Schasinglulu	CPU_3	\
253*91f16700Schasinglulu	CPU_4	\
254*91f16700Schasinglulu	CPU_5
255*91f16700Schasinglulu
256*91f16700Schasinglulu#elif (CPUS_COUNT == 8)
257*91f16700Schasinglulu#define	CPUS	\
258*91f16700Schasinglulu	CPU_0	\
259*91f16700Schasinglulu	CPU_1	\
260*91f16700Schasinglulu	CPU_2	\
261*91f16700Schasinglulu	CPU_3	\
262*91f16700Schasinglulu	CPU_4	\
263*91f16700Schasinglulu	CPU_5	\
264*91f16700Schasinglulu	CPU_6	\
265*91f16700Schasinglulu	CPU_7
266*91f16700Schasinglulu
267*91f16700Schasinglulu#elif (CPUS_COUNT == 9)
268*91f16700Schasinglulu#define	CPUS	\
269*91f16700Schasinglulu	CPU_0	\
270*91f16700Schasinglulu	CPU_1	\
271*91f16700Schasinglulu	CPU_2	\
272*91f16700Schasinglulu	CPU_3	\
273*91f16700Schasinglulu	CPU_4	\
274*91f16700Schasinglulu	CPU_5	\
275*91f16700Schasinglulu	CPU_6	\
276*91f16700Schasinglulu	CPU_7	\
277*91f16700Schasinglulu	CPU_8
278*91f16700Schasinglulu
279*91f16700Schasinglulu#elif (CPUS_COUNT == 12)
280*91f16700Schasinglulu#define	CPUS	\
281*91f16700Schasinglulu	CPU_0	\
282*91f16700Schasinglulu	CPU_1	\
283*91f16700Schasinglulu	CPU_2	\
284*91f16700Schasinglulu	CPU_3	\
285*91f16700Schasinglulu	CPU_4	\
286*91f16700Schasinglulu	CPU_5	\
287*91f16700Schasinglulu	CPU_6	\
288*91f16700Schasinglulu	CPU_7	\
289*91f16700Schasinglulu	CPU_8	\
290*91f16700Schasinglulu	CPU_9	\
291*91f16700Schasinglulu	CPU_10	\
292*91f16700Schasinglulu	CPU_11
293*91f16700Schasinglulu
294*91f16700Schasinglulu#else
295*91f16700Schasinglulu#define	CPUS	\
296*91f16700Schasinglulu	CPU_0	\
297*91f16700Schasinglulu	CPU_1	\
298*91f16700Schasinglulu	CPU_2	\
299*91f16700Schasinglulu	CPU_3	\
300*91f16700Schasinglulu	CPU_4	\
301*91f16700Schasinglulu	CPU_5	\
302*91f16700Schasinglulu	CPU_6	\
303*91f16700Schasinglulu	CPU_7	\
304*91f16700Schasinglulu	CPU_8	\
305*91f16700Schasinglulu	CPU_9	\
306*91f16700Schasinglulu	CPU_10	\
307*91f16700Schasinglulu	CPU_11	\
308*91f16700Schasinglulu	CPU_12	\
309*91f16700Schasinglulu	CPU_13	\
310*91f16700Schasinglulu	CPU_14	\
311*91f16700Schasinglulu	CPU_15
312*91f16700Schasinglulu#endif	/* CPUS_COUNT */
313*91f16700Schasinglulu
314*91f16700Schasinglulu#define	CORE(n)		\
315*91f16700Schasinglulu	core##n {	\
316*91f16700Schasinglulu		cpu = <&CONC(CPU, __COUNTER__)>;	\
317*91f16700Schasinglulu	};
318*91f16700Schasinglulu
319*91f16700Schasinglulu/* Max 4 CPUs per cluster */
320*91f16700Schasinglulu#if (CPUS_PER_CLUSTER == 1)
321*91f16700Schasinglulu#define	CLUSTER(n)		\
322*91f16700Schasinglulu	cluster##n {		\
323*91f16700Schasinglulu		CORE(0)		\
324*91f16700Schasinglulu	};
325*91f16700Schasinglulu#elif (CPUS_PER_CLUSTER == 2)
326*91f16700Schasinglulu#define	CLUSTER(n)		\
327*91f16700Schasinglulu	cluster##n {		\
328*91f16700Schasinglulu		CORE(0)		\
329*91f16700Schasinglulu		CORE(1)		\
330*91f16700Schasinglulu	};
331*91f16700Schasinglulu
332*91f16700Schasinglulu#elif (CPUS_PER_CLUSTER == 3)
333*91f16700Schasinglulu#define	CLUSTER(n)		\
334*91f16700Schasinglulu	cluster##n {		\
335*91f16700Schasinglulu		CORE(0)		\
336*91f16700Schasinglulu		CORE(1)		\
337*91f16700Schasinglulu		CORE(2)		\
338*91f16700Schasinglulu	};
339*91f16700Schasinglulu
340*91f16700Schasinglulu#else
341*91f16700Schasinglulu#define	CLUSTER(n)		\
342*91f16700Schasinglulu	cluster##n {		\
343*91f16700Schasinglulu		CORE(0)		\
344*91f16700Schasinglulu		CORE(1)		\
345*91f16700Schasinglulu		CORE(2)		\
346*91f16700Schasinglulu		CORE(3)		\
347*91f16700Schasinglulu	};
348*91f16700Schasinglulu#endif	/* CPUS_PER_CLUSTER */
349*91f16700Schasinglulu
350*91f16700Schasinglulu/* Max 4 clusters */
351*91f16700Schasinglulu#if (CLUSTER_COUNT == 1)
352*91f16700Schasinglulu#define	CPU_MAP			\
353*91f16700Schasinglulu	cpu-map {		\
354*91f16700Schasinglulu		CLUSTER(0)	\
355*91f16700Schasinglulu	};
356*91f16700Schasinglulu
357*91f16700Schasinglulu#elif (CLUSTER_COUNT == 2)
358*91f16700Schasinglulu#define	CPU_MAP			\
359*91f16700Schasinglulu	cpu-map {		\
360*91f16700Schasinglulu		CLUSTER(0)	\
361*91f16700Schasinglulu		CLUSTER(1)	\
362*91f16700Schasinglulu	};
363*91f16700Schasinglulu
364*91f16700Schasinglulu#elif (CLUSTER_COUNT == 3)
365*91f16700Schasinglulu#define	CPU_MAP			\
366*91f16700Schasinglulu	cpu-map {		\
367*91f16700Schasinglulu		CLUSTER(0)	\
368*91f16700Schasinglulu		CLUSTER(1)	\
369*91f16700Schasinglulu		CLUSTER(2)	\
370*91f16700Schasinglulu	};
371*91f16700Schasinglulu
372*91f16700Schasinglulu#else
373*91f16700Schasinglulu#define	CPU_MAP			\
374*91f16700Schasinglulu	cpu-map {		\
375*91f16700Schasinglulu		CLUSTER(0)	\
376*91f16700Schasinglulu		CLUSTER(1)	\
377*91f16700Schasinglulu		CLUSTER(2)	\
378*91f16700Schasinglulu		CLUSTER(3)	\
379*91f16700Schasinglulu	};
380*91f16700Schasinglulu#endif	/* CLUSTER_COUNT */
381*91f16700Schasinglulu
382*91f16700Schasinglulu#endif	/* FVP_DEFS_DTSI */
383