1/*
2 * Copyright (C) 2022 Google LLC
3 */
4
5#include <dt-bindings/interrupt-controller/arm-gic.h>
6
7// Undefine macros conflicting with our definitions.
8#ifdef linux
9#undef linux
10#endif
11
12#define PLACEHOLDER	0xffffffff
13#define PLACEHOLDER2	PLACEHOLDER PLACEHOLDER
14#define PLACEHOLDER4	PLACEHOLDER2 PLACEHOLDER2
15
16#define PLACEHOLDER_CPU_MAP_CORE(n) core##n { cpu = <PLACEHOLDER>; };
17#define PLACEHOLDER_CPU_MAP_CLUSTER \
18	PLACEHOLDER_CPU_MAP_CORE(0) \
19	PLACEHOLDER_CPU_MAP_CORE(1) \
20	PLACEHOLDER_CPU_MAP_CORE(2) \
21	PLACEHOLDER_CPU_MAP_CORE(3) \
22	PLACEHOLDER_CPU_MAP_CORE(4) \
23	PLACEHOLDER_CPU_MAP_CORE(5) \
24	PLACEHOLDER_CPU_MAP_CORE(6) \
25	PLACEHOLDER_CPU_MAP_CORE(7) \
26	PLACEHOLDER_CPU_MAP_CORE(8) \
27	PLACEHOLDER_CPU_MAP_CORE(9)
28
29#define PLACEHOLDER_OPP_TABLE_ENTRY(n) opp##n { opp-hz = <PLACEHOLDER2>; };
30#define PLACEHOLDER_OPP_TABLE \
31	PLACEHOLDER_OPP_TABLE_ENTRY(1) \
32	PLACEHOLDER_OPP_TABLE_ENTRY(2) \
33	PLACEHOLDER_OPP_TABLE_ENTRY(3) \
34	PLACEHOLDER_OPP_TABLE_ENTRY(4) \
35	PLACEHOLDER_OPP_TABLE_ENTRY(5) \
36	PLACEHOLDER_OPP_TABLE_ENTRY(6) \
37	PLACEHOLDER_OPP_TABLE_ENTRY(7) \
38	PLACEHOLDER_OPP_TABLE_ENTRY(8) \
39	PLACEHOLDER_OPP_TABLE_ENTRY(9) \
40	PLACEHOLDER_OPP_TABLE_ENTRY(10) \
41	PLACEHOLDER_OPP_TABLE_ENTRY(11) \
42	PLACEHOLDER_OPP_TABLE_ENTRY(12) \
43	PLACEHOLDER_OPP_TABLE_ENTRY(13) \
44	PLACEHOLDER_OPP_TABLE_ENTRY(14) \
45	PLACEHOLDER_OPP_TABLE_ENTRY(15) \
46	PLACEHOLDER_OPP_TABLE_ENTRY(16) \
47	PLACEHOLDER_OPP_TABLE_ENTRY(17) \
48	PLACEHOLDER_OPP_TABLE_ENTRY(18) \
49	PLACEHOLDER_OPP_TABLE_ENTRY(19) \
50	PLACEHOLDER_OPP_TABLE_ENTRY(20)
51
52#define IRQ_BASE 4
53
54/dts-v1/;
55
56/ {
57	interrupt-parent = <&intc>;
58	compatible = "linux,dummy-virt";
59	#address-cells = <2>;
60	#size-cells = <2>;
61
62	chosen {
63		stdout-path = "/uart@3f8";
64		linux,pci-probe-only = <1>;
65		kaslr-seed = <PLACEHOLDER2>;
66		avf,strict-boot;
67		avf,new-instance;
68	};
69
70	memory {
71		device_type = "memory";
72		reg = <0x00 0x80000000 PLACEHOLDER2>;
73	};
74
75	reserved-memory {
76		#address-cells = <2>;
77		#size-cells = <2>;
78		ranges;
79		swiotlb: restricted_dma_reserved {
80			compatible = "restricted-dma-pool";
81			reg = <PLACEHOLDER4>;
82			size = <PLACEHOLDER2>;
83			alignment = <PLACEHOLDER2>;
84		};
85
86		dice {
87			compatible = "google,open-dice";
88			no-map;
89			reg = <PLACEHOLDER4>;
90		};
91	};
92
93	cpus {
94		#address-cells = <1>;
95		#size-cells = <0>;
96
97		cpu-map {
98			cluster0 { PLACEHOLDER_CPU_MAP_CLUSTER };
99			cluster1 { PLACEHOLDER_CPU_MAP_CLUSTER };
100			cluster2 { PLACEHOLDER_CPU_MAP_CLUSTER };
101		};
102
103		cpu0: cpu@0 {
104			device_type = "cpu";
105			compatible = "arm,armv8";
106			enable-method = "psci";
107			reg = <0x0>;
108			capacity-dmips-mhz = <PLACEHOLDER>;
109			operating-points-v2 = <&opp_table0>;
110			opp_table0: opp-table-0 {
111				compatible = "operating-points-v2";
112				PLACEHOLDER_OPP_TABLE
113			};
114		};
115		cpu1: cpu@1 {
116			device_type = "cpu";
117			compatible = "arm,armv8";
118			enable-method = "psci";
119			reg = <0x1>;
120			capacity-dmips-mhz = <PLACEHOLDER>;
121			operating-points-v2 = <&opp_table1>;
122			opp_table1: opp-table-1 {
123				compatible = "operating-points-v2";
124				PLACEHOLDER_OPP_TABLE
125			};
126		};
127		cpu2: cpu@2 {
128			device_type = "cpu";
129			compatible = "arm,armv8";
130			enable-method = "psci";
131			reg = <0x2>;
132			capacity-dmips-mhz = <PLACEHOLDER>;
133			operating-points-v2 = <&opp_table2>;
134			opp_table2: opp-table-2 {
135				compatible = "operating-points-v2";
136				PLACEHOLDER_OPP_TABLE
137			};
138		};
139		cpu3: cpu@3 {
140			device_type = "cpu";
141			compatible = "arm,armv8";
142			enable-method = "psci";
143			reg = <0x3>;
144			capacity-dmips-mhz = <PLACEHOLDER>;
145			operating-points-v2 = <&opp_table3>;
146			opp_table3: opp-table-3 {
147				compatible = "operating-points-v2";
148				PLACEHOLDER_OPP_TABLE
149			};
150		};
151		cpu4: cpu@4 {
152			device_type = "cpu";
153			compatible = "arm,armv8";
154			enable-method = "psci";
155			reg = <0x4>;
156			capacity-dmips-mhz = <PLACEHOLDER>;
157			operating-points-v2 = <&opp_table4>;
158			opp_table4: opp-table-4 {
159				compatible = "operating-points-v2";
160				PLACEHOLDER_OPP_TABLE
161			};
162		};
163		cpu5: cpu@5 {
164			device_type = "cpu";
165			compatible = "arm,armv8";
166			enable-method = "psci";
167			reg = <0x5>;
168			capacity-dmips-mhz = <PLACEHOLDER>;
169			operating-points-v2 = <&opp_table5>;
170			opp_table5: opp-table-5 {
171				compatible = "operating-points-v2";
172				PLACEHOLDER_OPP_TABLE
173			};
174		};
175		cpu6: cpu@6 {
176			device_type = "cpu";
177			compatible = "arm,armv8";
178			enable-method = "psci";
179			reg = <0x6>;
180			capacity-dmips-mhz = <PLACEHOLDER>;
181			operating-points-v2 = <&opp_table6>;
182			opp_table6: opp-table-6 {
183				compatible = "operating-points-v2";
184				PLACEHOLDER_OPP_TABLE
185			};
186		};
187		cpu7: cpu@7 {
188			device_type = "cpu";
189			compatible = "arm,armv8";
190			enable-method = "psci";
191			reg = <0x7>;
192			capacity-dmips-mhz = <PLACEHOLDER>;
193			operating-points-v2 = <&opp_table7>;
194			opp_table7: opp-table-7 {
195				compatible = "operating-points-v2";
196				PLACEHOLDER_OPP_TABLE
197			};
198		};
199		cpu8: cpu@8 {
200			device_type = "cpu";
201			compatible = "arm,armv8";
202			enable-method = "psci";
203			reg = <0x8>;
204			capacity-dmips-mhz = <PLACEHOLDER>;
205			operating-points-v2 = <&opp_table8>;
206			opp_table8: opp-table-8 {
207				compatible = "operating-points-v2";
208				PLACEHOLDER_OPP_TABLE
209			};
210		};
211		cpu9: cpu@9 {
212			device_type = "cpu";
213			compatible = "arm,armv8";
214			enable-method = "psci";
215			reg = <0x9>;
216			capacity-dmips-mhz = <PLACEHOLDER>;
217			operating-points-v2 = <&opp_table9>;
218			opp_table9: opp-table-9 {
219				compatible = "operating-points-v2";
220				PLACEHOLDER_OPP_TABLE
221			};
222		};
223		cpu10: cpu@a {
224			device_type = "cpu";
225			compatible = "arm,armv8";
226			enable-method = "psci";
227			reg = <0xa>;
228			capacity-dmips-mhz = <PLACEHOLDER>;
229			operating-points-v2 = <&opp_table10>;
230			opp_table10: opp-table-10 {
231				compatible = "operating-points-v2";
232				PLACEHOLDER_OPP_TABLE
233			};
234		};
235		cpu11: cpu@b {
236			device_type = "cpu";
237			compatible = "arm,armv8";
238			enable-method = "psci";
239			reg = <0xb>;
240			capacity-dmips-mhz = <PLACEHOLDER>;
241			operating-points-v2 = <&opp_table11>;
242			opp_table11: opp-table-11 {
243				compatible = "operating-points-v2";
244				PLACEHOLDER_OPP_TABLE
245			};
246		};
247		cpu12: cpu@c {
248			device_type = "cpu";
249			compatible = "arm,armv8";
250			enable-method = "psci";
251			reg = <0xc>;
252			capacity-dmips-mhz = <PLACEHOLDER>;
253			operating-points-v2 = <&opp_table12>;
254			opp_table12: opp-table-12 {
255				compatible = "operating-points-v2";
256				PLACEHOLDER_OPP_TABLE
257			};
258		};
259		cpu13: cpu@d {
260			device_type = "cpu";
261			compatible = "arm,armv8";
262			enable-method = "psci";
263			reg = <0xd>;
264			capacity-dmips-mhz = <PLACEHOLDER>;
265			operating-points-v2 = <&opp_table13>;
266			opp_table13: opp-table-13 {
267				compatible = "operating-points-v2";
268				PLACEHOLDER_OPP_TABLE
269			};
270		};
271		cpu14: cpu@e {
272			device_type = "cpu";
273			compatible = "arm,armv8";
274			enable-method = "psci";
275			reg = <0xe>;
276			capacity-dmips-mhz = <PLACEHOLDER>;
277			operating-points-v2 = <&opp_table14>;
278			opp_table14: opp-table-14 {
279				compatible = "operating-points-v2";
280				PLACEHOLDER_OPP_TABLE
281			};
282		};
283		cpu15: cpu@f {
284			device_type = "cpu";
285			compatible = "arm,armv8";
286			enable-method = "psci";
287			reg = <0xf>;
288			capacity-dmips-mhz = <PLACEHOLDER>;
289			operating-points-v2 = <&opp_table15>;
290			opp_table15: opp-table-15 {
291				compatible = "operating-points-v2";
292				PLACEHOLDER_OPP_TABLE
293			};
294		};
295	};
296
297	intc: intc {
298		compatible = "arm,gic-v3";
299		#address-cells = <2>;
300		#size-cells = <2>;
301		#interrupt-cells = <3>;
302		interrupt-controller;
303		reg = <0x00 0x3fff0000 0x00 0x10000>, <PLACEHOLDER4>;
304	};
305
306	timer {
307		compatible = "arm,armv8-timer";
308		always-on;
309		/* The IRQ type needs to be OR-ed with the CPU mask */
310		interrupts = <GIC_PPI 0xd IRQ_TYPE_LEVEL_LOW
311		              GIC_PPI 0xe IRQ_TYPE_LEVEL_LOW
312			      GIC_PPI 0xb IRQ_TYPE_LEVEL_LOW
313			      GIC_PPI 0xa IRQ_TYPE_LEVEL_LOW>;
314	};
315
316	uart@3f8 {
317		compatible = "ns16550a";
318		reg = <0x00 0x3f8 0x00 0x8>;
319		clock-frequency = <0x1c2000>;
320		interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>;
321	};
322
323	uart@2f8 {
324		compatible = "ns16550a";
325		reg = <0x00 0x2f8 0x00 0x8>;
326		clock-frequency = <0x1c2000>;
327		interrupts = <GIC_SPI 2 IRQ_TYPE_EDGE_RISING>;
328	};
329
330	uart@3e8 {
331		compatible = "ns16550a";
332		reg = <0x00 0x3e8 0x00 0x8>;
333		clock-frequency = <0x1c2000>;
334		interrupts = <GIC_SPI 0 IRQ_TYPE_EDGE_RISING>;
335	};
336
337	uart@2e8 {
338		compatible = "ns16550a";
339		reg = <0x00 0x2e8 0x00 0x8>;
340		clock-frequency = <0x1c2000>;
341		interrupts = <GIC_SPI 2 IRQ_TYPE_EDGE_RISING>;
342	};
343
344	psci {
345		compatible = "arm,psci-1.0";
346		method = "hvc";
347	};
348
349	pci {
350		compatible = "pci-host-cam-generic";
351		device_type = "pci";
352		#address-cells = <3>;
353		#size-cells = <2>;
354		#interrupt-cells = <1>;
355		dma-coherent;
356		memory-region = <&swiotlb>;
357		ranges = <
358			0x3000000 0x0 0x70000000 0x0 0x70000000 0x00 0x02000000
359			0x3000000 PLACEHOLDER2   PLACEHOLDER2   PLACEHOLDER2
360		>;
361		bus-range = <0x00 0x00>;
362		reg = <0x00 0x72000000 0x00 0x1000000>;
363		interrupt-map = <
364			0x0800 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 0) IRQ_TYPE_LEVEL_HIGH
365			0x1000 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 1) IRQ_TYPE_LEVEL_HIGH
366			0x1800 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 2) IRQ_TYPE_LEVEL_HIGH
367			0x2000 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 3) IRQ_TYPE_LEVEL_HIGH
368			0x2800 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 4) IRQ_TYPE_LEVEL_HIGH
369			0x3000 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 5) IRQ_TYPE_LEVEL_HIGH
370			0x3800 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 6) IRQ_TYPE_LEVEL_HIGH
371			0x4000 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 7) IRQ_TYPE_LEVEL_HIGH
372			0x4800 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 8) IRQ_TYPE_LEVEL_HIGH
373			0x5000 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 9) IRQ_TYPE_LEVEL_HIGH
374			0x5800 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 10) IRQ_TYPE_LEVEL_HIGH
375			0x6000 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 11) IRQ_TYPE_LEVEL_HIGH
376			0x6800 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 12) IRQ_TYPE_LEVEL_HIGH
377			0x7000 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 13) IRQ_TYPE_LEVEL_HIGH
378			0x7800 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 14) IRQ_TYPE_LEVEL_HIGH
379			0x8000 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 15) IRQ_TYPE_LEVEL_HIGH
380		>;
381		interrupt-map-mask = <0xf800 0x0 0x0 0x7
382				      0xf800 0x0 0x0 0x7
383				      0xf800 0x0 0x0 0x7
384				      0xf800 0x0 0x0 0x7
385				      0xf800 0x0 0x0 0x7
386				      0xf800 0x0 0x0 0x7
387				      0xf800 0x0 0x0 0x7
388				      0xf800 0x0 0x0 0x7
389				      0xf800 0x0 0x0 0x7
390				      0xf800 0x0 0x0 0x7
391				      0xf800 0x0 0x0 0x7
392				      0xf800 0x0 0x0 0x7
393				      0xf800 0x0 0x0 0x7
394				      0xf800 0x0 0x0 0x7
395				      0xf800 0x0 0x0 0x7
396				      0xf800 0x0 0x0 0x7>;
397	};
398
399	clk: pclk@3M {
400		compatible = "fixed-clock";
401		clock-frequency = <0x2fefd8>;
402		#clock-cells = <0>;
403	};
404
405	rtc@2000 {
406		compatible = "arm,primecell";
407		arm,primecell-periphid = <0x41030>;
408		reg = <0x00 0x2000 0x00 0x1000>;
409		interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
410		clock-names = "apb_pclk";
411		clocks = <&clk>;
412	};
413
414	vmwdt@3000 {
415		compatible = "qemu,vcpu-stall-detector";
416		reg = <0x00 0x3000 0x00 0x1000>;
417		clock-frequency = <10>;
418		timeout-sec = <8>;
419		interrupts = <GIC_PPI 0xf PLACEHOLDER>;
420	};
421
422	cpufreq {
423		compatible = "virtual,android-v-only-cpufreq";
424		reg = <0x0 0x1040000 PLACEHOLDER2>;
425	};
426
427	// Keep pvIOMMUs at the last for making test happy.
428	// Otherwise, phandle of other nodes are changed when unused pvIOMMU nodes
429	// are removed, so hardcoded phandles in test data would mismatch.
430	pviommu_0: pviommu0 {
431		compatible = "pkvm,pviommu";
432		id = <PLACEHOLDER>;
433		#iommu-cells = <1>;
434	};
435
436	pviommu_1: pviommu1 {
437		compatible = "pkvm,pviommu";
438		id = <PLACEHOLDER>;
439		#iommu-cells = <1>;
440	};
441
442	pviommu_2: pviommu2 {
443		compatible = "pkvm,pviommu";
444		id = <PLACEHOLDER>;
445		#iommu-cells = <1>;
446	};
447
448	pviommu_3: pviommu3 {
449		compatible = "pkvm,pviommu";
450		id = <PLACEHOLDER>;
451		#iommu-cells = <1>;
452	};
453
454	pviommu_4: pviommu4 {
455		compatible = "pkvm,pviommu";
456		id = <PLACEHOLDER>;
457		#iommu-cells = <1>;
458	};
459
460	pviommu_5: pviommu5 {
461		compatible = "pkvm,pviommu";
462		id = <PLACEHOLDER>;
463		#iommu-cells = <1>;
464	};
465
466	pviommu_6: pviommu6 {
467		compatible = "pkvm,pviommu";
468		id = <PLACEHOLDER>;
469		#iommu-cells = <1>;
470	};
471
472	pviommu_7: pviommu7 {
473		compatible = "pkvm,pviommu";
474		id = <PLACEHOLDER>;
475		#iommu-cells = <1>;
476	};
477
478	pviommu_8: pviommu8 {
479		compatible = "pkvm,pviommu";
480		id = <PLACEHOLDER>;
481		#iommu-cells = <1>;
482	};
483
484	pviommu_9: pviommu9 {
485		compatible = "pkvm,pviommu";
486		id = <PLACEHOLDER>;
487		#iommu-cells = <1>;
488	};
489
490	// Do not add new node below
491};
492