xref: /aosp_15_r20/external/arm-trusted-firmware/fdts/fvp-defs-dynamiq.dtsi (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park/*
2*54fd6939SJiyong Park * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park *
4*54fd6939SJiyong Park * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park */
6*54fd6939SJiyong Park
7*54fd6939SJiyong Park#ifndef	FVP_DEFS_DYNAMIQ_DTSI
8*54fd6939SJiyong Park#define	FVP_DEFS_DYNAMIQ_DTSI
9*54fd6939SJiyong Park
10*54fd6939SJiyong Park/* Set default topology values if not passed from platform's makefile */
11*54fd6939SJiyong Park#ifdef	FVP_CLUSTER_COUNT
12*54fd6939SJiyong Park#define	CLUSTER_COUNT		FVP_CLUSTER_COUNT
13*54fd6939SJiyong Park#else
14*54fd6939SJiyong Park#define	CLUSTER_COUNT		1
15*54fd6939SJiyong Park#endif
16*54fd6939SJiyong Park
17*54fd6939SJiyong Park#ifdef FVP_MAX_CPUS_PER_CLUSTER
18*54fd6939SJiyong Park#define	CPUS_PER_CLUSTER	FVP_MAX_CPUS_PER_CLUSTER
19*54fd6939SJiyong Park#else
20*54fd6939SJiyong Park#define	CPUS_PER_CLUSTER	8
21*54fd6939SJiyong Park#endif
22*54fd6939SJiyong Park
23*54fd6939SJiyong Park#define CONCAT(x, y)	x##y
24*54fd6939SJiyong Park#define CONC(x, y)	CONCAT(x, y)
25*54fd6939SJiyong Park
26*54fd6939SJiyong Park/*
27*54fd6939SJiyong Park * n - CPU number
28*54fd6939SJiyong Park * r - MPID
29*54fd6939SJiyong Park */
30*54fd6939SJiyong Park#define	CPU(n, r)			\
31*54fd6939SJiyong Park	CPU##n:cpu@r## {		\
32*54fd6939SJiyong Park	device_type = "cpu";		\
33*54fd6939SJiyong Park	compatible = "arm,armv8";	\
34*54fd6939SJiyong Park	reg = <0x0 0x##r>;		\
35*54fd6939SJiyong Park	enable-method = "psci";		\
36*54fd6939SJiyong Park	cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;	\
37*54fd6939SJiyong Park	next-level-cache = <&L2_0>;	\
38*54fd6939SJiyong Park	};
39*54fd6939SJiyong Park
40*54fd6939SJiyong Park#if (PE_PER_CPU == 2)
41*54fd6939SJiyong Park#define THREAD(n)		\
42*54fd6939SJiyong Park	thread##n {		\
43*54fd6939SJiyong Park		cpu = <&CONC(CPU, __COUNTER__)>;	\
44*54fd6939SJiyong Park	};
45*54fd6939SJiyong Park
46*54fd6939SJiyong Park#define	CORE(n)			\
47*54fd6939SJiyong Park	core##n {		\
48*54fd6939SJiyong Park		THREAD(0)	\
49*54fd6939SJiyong Park		THREAD(1)	\
50*54fd6939SJiyong Park	};
51*54fd6939SJiyong Park
52*54fd6939SJiyong Park#else	/* PE_PER_CPU == 1 */
53*54fd6939SJiyong Park#define	CORE(n)			\
54*54fd6939SJiyong Park	core##n {		\
55*54fd6939SJiyong Park		cpu = <&CPU##n>;\
56*54fd6939SJiyong Park	};
57*54fd6939SJiyong Park#endif	/* PE_PER_CORE */
58*54fd6939SJiyong Park
59*54fd6939SJiyong Park#if (CPUS_PER_CLUSTER == 1)
60*54fd6939SJiyong Park#if (PE_PER_CPU == 1)
61*54fd6939SJiyong Park#define	CPUS		\
62*54fd6939SJiyong Park	CPU(0, 0)
63*54fd6939SJiyong Park#else
64*54fd6939SJiyong Park#define	CPUS		\
65*54fd6939SJiyong Park	CPU(0, 0)	\
66*54fd6939SJiyong Park	CPU(1, 1)
67*54fd6939SJiyong Park#endif
68*54fd6939SJiyong Park#define	CLUSTER(n)	\
69*54fd6939SJiyong Park	cluster##n {	\
70*54fd6939SJiyong Park		CORE(0)	\
71*54fd6939SJiyong Park	};
72*54fd6939SJiyong Park
73*54fd6939SJiyong Park#elif (CPUS_PER_CLUSTER == 2)
74*54fd6939SJiyong Park#if (PE_PER_CPU == 1)
75*54fd6939SJiyong Park#define	CPUS		\
76*54fd6939SJiyong Park	CPU(0, 0)	\
77*54fd6939SJiyong Park	CPU(1, 100)
78*54fd6939SJiyong Park#else
79*54fd6939SJiyong Park#define	CPUS		\
80*54fd6939SJiyong Park	CPU(0, 0)	\
81*54fd6939SJiyong Park	CPU(1, 1)	\
82*54fd6939SJiyong Park	CPU(2, 100)	\
83*54fd6939SJiyong Park	CPU(3, 101)
84*54fd6939SJiyong Park#endif
85*54fd6939SJiyong Park#define	CLUSTER(n)	\
86*54fd6939SJiyong Park	cluster##n {	\
87*54fd6939SJiyong Park		CORE(0)	\
88*54fd6939SJiyong Park		CORE(1)	\
89*54fd6939SJiyong Park	};
90*54fd6939SJiyong Park
91*54fd6939SJiyong Park#elif (CPUS_PER_CLUSTER == 3)
92*54fd6939SJiyong Park#if (PE_PER_CPU == 1)
93*54fd6939SJiyong Park#define	CPUS		\
94*54fd6939SJiyong Park	CPU(0, 0)	\
95*54fd6939SJiyong Park	CPU(1, 100)	\
96*54fd6939SJiyong Park	CPU(2, 200)
97*54fd6939SJiyong Park#else
98*54fd6939SJiyong Park#define	CPUS		\
99*54fd6939SJiyong Park	CPU(0, 0)	\
100*54fd6939SJiyong Park	CPU(1, 1)	\
101*54fd6939SJiyong Park	CPU(2, 100)	\
102*54fd6939SJiyong Park	CPU(3, 101)	\
103*54fd6939SJiyong Park	CPU(4, 200)	\
104*54fd6939SJiyong Park	CPU(5, 201)
105*54fd6939SJiyong Park#endif
106*54fd6939SJiyong Park#define	CLUSTER(n)	\
107*54fd6939SJiyong Park	cluster##n {	\
108*54fd6939SJiyong Park		CORE(0)	\
109*54fd6939SJiyong Park		CORE(1)	\
110*54fd6939SJiyong Park		CORE(2)	\
111*54fd6939SJiyong Park	};
112*54fd6939SJiyong Park
113*54fd6939SJiyong Park#elif (CPUS_PER_CLUSTER == 4)
114*54fd6939SJiyong Park#if (PE_PER_CPU == 1)
115*54fd6939SJiyong Park#define	CPUS		\
116*54fd6939SJiyong Park	CPU(0, 0)	\
117*54fd6939SJiyong Park	CPU(1, 100)	\
118*54fd6939SJiyong Park	CPU(2, 200)	\
119*54fd6939SJiyong Park	CPU(3, 300)
120*54fd6939SJiyong Park#else
121*54fd6939SJiyong Park#define	CPUS		\
122*54fd6939SJiyong Park	CPU(0, 0)	\
123*54fd6939SJiyong Park	CPU(1, 1)	\
124*54fd6939SJiyong Park	CPU(2, 100)	\
125*54fd6939SJiyong Park	CPU(3, 101)	\
126*54fd6939SJiyong Park	CPU(4, 200)	\
127*54fd6939SJiyong Park	CPU(5, 201)	\
128*54fd6939SJiyong Park	CPU(6, 300)	\
129*54fd6939SJiyong Park	CPU(7, 301)
130*54fd6939SJiyong Park#endif
131*54fd6939SJiyong Park#define	CLUSTER(n)	\
132*54fd6939SJiyong Park	cluster##n {	\
133*54fd6939SJiyong Park		CORE(0)	\
134*54fd6939SJiyong Park		CORE(1)	\
135*54fd6939SJiyong Park		CORE(2)	\
136*54fd6939SJiyong Park		CORE(3)	\
137*54fd6939SJiyong Park	};
138*54fd6939SJiyong Park
139*54fd6939SJiyong Park#elif (CPUS_PER_CLUSTER == 5)
140*54fd6939SJiyong Park#if (PE_PER_CPU == 1)
141*54fd6939SJiyong Park#define	CPUS		\
142*54fd6939SJiyong Park	CPU(0, 0)	\
143*54fd6939SJiyong Park	CPU(1, 100)	\
144*54fd6939SJiyong Park	CPU(2, 200)	\
145*54fd6939SJiyong Park	CPU(3, 300)	\
146*54fd6939SJiyong Park	CPU(4, 400)
147*54fd6939SJiyong Park#else
148*54fd6939SJiyong Park#define	CPUS		\
149*54fd6939SJiyong Park	CPU(0, 0)	\
150*54fd6939SJiyong Park	CPU(1, 1)	\
151*54fd6939SJiyong Park	CPU(2, 100)	\
152*54fd6939SJiyong Park	CPU(3, 101)	\
153*54fd6939SJiyong Park	CPU(4, 200)	\
154*54fd6939SJiyong Park	CPU(5, 201)	\
155*54fd6939SJiyong Park	CPU(6, 300)	\
156*54fd6939SJiyong Park	CPU(7, 301)	\
157*54fd6939SJiyong Park	CPU(8, 400)	\
158*54fd6939SJiyong Park	CPU(9, 401)
159*54fd6939SJiyong Park#endif
160*54fd6939SJiyong Park#define	CLUSTER(n)	\
161*54fd6939SJiyong Park	cluster##n {	\
162*54fd6939SJiyong Park		CORE(0)	\
163*54fd6939SJiyong Park		CORE(1)	\
164*54fd6939SJiyong Park		CORE(2)	\
165*54fd6939SJiyong Park		CORE(3)	\
166*54fd6939SJiyong Park		CORE(4)	\
167*54fd6939SJiyong Park	};
168*54fd6939SJiyong Park
169*54fd6939SJiyong Park#elif (CPUS_PER_CLUSTER == 6)
170*54fd6939SJiyong Park#if (PE_PER_CPU == 1)
171*54fd6939SJiyong Park#define	CPUS		\
172*54fd6939SJiyong Park	CPU(0, 0)	\
173*54fd6939SJiyong Park	CPU(1, 100)	\
174*54fd6939SJiyong Park	CPU(2, 200)	\
175*54fd6939SJiyong Park	CPU(3, 300)	\
176*54fd6939SJiyong Park	CPU(4, 400)	\
177*54fd6939SJiyong Park	CPU(5, 500)
178*54fd6939SJiyong Park#else
179*54fd6939SJiyong Park#define	CPUS		\
180*54fd6939SJiyong Park	CPU(0, 0)	\
181*54fd6939SJiyong Park	CPU(1, 1)	\
182*54fd6939SJiyong Park	CPU(2, 100)	\
183*54fd6939SJiyong Park	CPU(3, 101)	\
184*54fd6939SJiyong Park	CPU(4, 200)	\
185*54fd6939SJiyong Park	CPU(5, 201)	\
186*54fd6939SJiyong Park	CPU(6, 300)	\
187*54fd6939SJiyong Park	CPU(7, 301)	\
188*54fd6939SJiyong Park	CPU(8, 400)	\
189*54fd6939SJiyong Park	CPU(9, 401)	\
190*54fd6939SJiyong Park	CPU(10, 500)	\
191*54fd6939SJiyong Park	CPU(11, 501)
192*54fd6939SJiyong Park#endif
193*54fd6939SJiyong Park#define	CLUSTER(n)	\
194*54fd6939SJiyong Park	cluster##n {	\
195*54fd6939SJiyong Park		CORE(0)	\
196*54fd6939SJiyong Park		CORE(1)	\
197*54fd6939SJiyong Park		CORE(2)	\
198*54fd6939SJiyong Park		CORE(3)	\
199*54fd6939SJiyong Park		CORE(4)	\
200*54fd6939SJiyong Park		CORE(5)	\
201*54fd6939SJiyong Park	};
202*54fd6939SJiyong Park
203*54fd6939SJiyong Park#elif (CPUS_PER_CLUSTER == 7)
204*54fd6939SJiyong Park#if (PE_PER_CPU == 1)
205*54fd6939SJiyong Park#define	CPUS		\
206*54fd6939SJiyong Park	CPU(0, 0)	\
207*54fd6939SJiyong Park	CPU(1, 100)	\
208*54fd6939SJiyong Park	CPU(2, 200)	\
209*54fd6939SJiyong Park	CPU(3, 300)	\
210*54fd6939SJiyong Park	CPU(4, 400)	\
211*54fd6939SJiyong Park	CPU(5, 500)	\
212*54fd6939SJiyong Park	CPU(6, 600)
213*54fd6939SJiyong Park#else
214*54fd6939SJiyong Park#define	CPUS		\
215*54fd6939SJiyong Park	CPU(0, 0)	\
216*54fd6939SJiyong Park	CPU(1, 1)	\
217*54fd6939SJiyong Park	CPU(2, 100)	\
218*54fd6939SJiyong Park	CPU(3, 101)	\
219*54fd6939SJiyong Park	CPU(4, 200)	\
220*54fd6939SJiyong Park	CPU(5, 201)	\
221*54fd6939SJiyong Park	CPU(6, 300)	\
222*54fd6939SJiyong Park	CPU(7, 301)	\
223*54fd6939SJiyong Park	CPU(8, 400)	\
224*54fd6939SJiyong Park	CPU(9, 401)	\
225*54fd6939SJiyong Park	CPU(10, 500)	\
226*54fd6939SJiyong Park	CPU(11, 501)	\
227*54fd6939SJiyong Park	CPU(12, 600)	\
228*54fd6939SJiyong Park	CPU(13, 601)
229*54fd6939SJiyong Park#endif
230*54fd6939SJiyong Park#define	CLUSTER(n)	\
231*54fd6939SJiyong Park	cluster##n {	\
232*54fd6939SJiyong Park		CORE(0)	\
233*54fd6939SJiyong Park		CORE(1)	\
234*54fd6939SJiyong Park		CORE(2)	\
235*54fd6939SJiyong Park		CORE(3)	\
236*54fd6939SJiyong Park		CORE(4)	\
237*54fd6939SJiyong Park		CORE(5)	\
238*54fd6939SJiyong Park		CORE(6)	\
239*54fd6939SJiyong Park	};
240*54fd6939SJiyong Park
241*54fd6939SJiyong Park#else
242*54fd6939SJiyong Park#if (PE_PER_CPU == 1)
243*54fd6939SJiyong Park#define	CPUS		\
244*54fd6939SJiyong Park	CPU(0, 0)	\
245*54fd6939SJiyong Park	CPU(1, 100)	\
246*54fd6939SJiyong Park	CPU(2, 200)	\
247*54fd6939SJiyong Park	CPU(3, 300)	\
248*54fd6939SJiyong Park	CPU(4, 400)	\
249*54fd6939SJiyong Park	CPU(5, 500)	\
250*54fd6939SJiyong Park	CPU(6, 600)	\
251*54fd6939SJiyong Park	CPU(7, 700)
252*54fd6939SJiyong Park#else
253*54fd6939SJiyong Park#define	CPUS		\
254*54fd6939SJiyong Park	CPU(0, 0)	\
255*54fd6939SJiyong Park	CPU(1, 1)	\
256*54fd6939SJiyong Park	CPU(2, 100)	\
257*54fd6939SJiyong Park	CPU(3, 101)	\
258*54fd6939SJiyong Park	CPU(4, 200)	\
259*54fd6939SJiyong Park	CPU(5, 201)	\
260*54fd6939SJiyong Park	CPU(6, 300)	\
261*54fd6939SJiyong Park	CPU(7, 301)	\
262*54fd6939SJiyong Park	CPU(8, 400)	\
263*54fd6939SJiyong Park	CPU(9, 401)	\
264*54fd6939SJiyong Park	CPU(10, 500)	\
265*54fd6939SJiyong Park	CPU(11, 501)	\
266*54fd6939SJiyong Park	CPU(12, 600)	\
267*54fd6939SJiyong Park	CPU(13, 601)	\
268*54fd6939SJiyong Park	CPU(14, 700)	\
269*54fd6939SJiyong Park	CPU(15, 701)
270*54fd6939SJiyong Park#endif
271*54fd6939SJiyong Park#define	CLUSTER(n)	\
272*54fd6939SJiyong Park	cluster##n {	\
273*54fd6939SJiyong Park		CORE(0)	\
274*54fd6939SJiyong Park		CORE(1)	\
275*54fd6939SJiyong Park		CORE(2)	\
276*54fd6939SJiyong Park		CORE(3)	\
277*54fd6939SJiyong Park		CORE(4)	\
278*54fd6939SJiyong Park		CORE(5)	\
279*54fd6939SJiyong Park		CORE(6)	\
280*54fd6939SJiyong Park		CORE(7)	\
281*54fd6939SJiyong Park	};
282*54fd6939SJiyong Park#endif	/* CPUS_PER_CLUSTER */
283*54fd6939SJiyong Park
284*54fd6939SJiyong Park#define	CPU_MAP			\
285*54fd6939SJiyong Park	cpu-map {		\
286*54fd6939SJiyong Park		CLUSTER(0)	\
287*54fd6939SJiyong Park	};
288*54fd6939SJiyong Park
289*54fd6939SJiyong Park#endif	/* FVP_DEFS_DYNAMIQ_DTSI */
290