17b0b0191SHector Martin// SPDX-License-Identifier: GPL-2.0+ OR MIT
27b0b0191SHector Martin/*
37b0b0191SHector Martin * Common Apple T6000 / T6001 / T6002 "M1 Pro/Max/Ultra" SoC
47b0b0191SHector Martin *
57b0b0191SHector Martin * Other names: H13J, "Jade Chop", "Jade", "Jade 2C"
67b0b0191SHector Martin *
77b0b0191SHector Martin * Copyright The Asahi Linux Contributors
87b0b0191SHector Martin */
97b0b0191SHector Martin
107b0b0191SHector Martin/ {
117b0b0191SHector Martin	#address-cells = <2>;
127b0b0191SHector Martin	#size-cells = <2>;
137b0b0191SHector Martin
147b0b0191SHector Martin	cpus {
157b0b0191SHector Martin		#address-cells = <2>;
167b0b0191SHector Martin		#size-cells = <0>;
177b0b0191SHector Martin
18*d32c1530SHector Martin		cpu-map {
19*d32c1530SHector Martin			cluster0 {
20*d32c1530SHector Martin				core0 {
21*d32c1530SHector Martin					cpu = <&cpu_e00>;
22*d32c1530SHector Martin				};
23*d32c1530SHector Martin				core1 {
24*d32c1530SHector Martin					cpu = <&cpu_e01>;
25*d32c1530SHector Martin				};
26*d32c1530SHector Martin			};
27*d32c1530SHector Martin
28*d32c1530SHector Martin			cluster1 {
29*d32c1530SHector Martin				core0 {
30*d32c1530SHector Martin					cpu = <&cpu_p00>;
31*d32c1530SHector Martin				};
32*d32c1530SHector Martin				core1 {
33*d32c1530SHector Martin					cpu = <&cpu_p01>;
34*d32c1530SHector Martin				};
35*d32c1530SHector Martin				core2 {
36*d32c1530SHector Martin					cpu = <&cpu_p02>;
37*d32c1530SHector Martin				};
38*d32c1530SHector Martin				core3 {
39*d32c1530SHector Martin					cpu = <&cpu_p03>;
40*d32c1530SHector Martin				};
41*d32c1530SHector Martin			};
42*d32c1530SHector Martin
43*d32c1530SHector Martin			cluster2 {
44*d32c1530SHector Martin				core0 {
45*d32c1530SHector Martin					cpu = <&cpu_p10>;
46*d32c1530SHector Martin				};
47*d32c1530SHector Martin				core1 {
48*d32c1530SHector Martin					cpu = <&cpu_p11>;
49*d32c1530SHector Martin				};
50*d32c1530SHector Martin				core2 {
51*d32c1530SHector Martin					cpu = <&cpu_p12>;
52*d32c1530SHector Martin				};
53*d32c1530SHector Martin				core3 {
54*d32c1530SHector Martin					cpu = <&cpu_p13>;
55*d32c1530SHector Martin				};
56*d32c1530SHector Martin			};
57*d32c1530SHector Martin		};
58*d32c1530SHector Martin
597b0b0191SHector Martin		cpu_e00: cpu@0 {
607b0b0191SHector Martin			compatible = "apple,icestorm";
617b0b0191SHector Martin			device_type = "cpu";
627b0b0191SHector Martin			reg = <0x0 0x0>;
637b0b0191SHector Martin			enable-method = "spin-table";
647b0b0191SHector Martin			cpu-release-addr = <0 0>; /* To be filled by loader */
6583fb5b55SRob Herring			next-level-cache = <&l2_cache_0>;
6683fb5b55SRob Herring			i-cache-size = <0x20000>;
6783fb5b55SRob Herring			d-cache-size = <0x10000>;
68*d32c1530SHector Martin			operating-points-v2 = <&icestorm_opp>;
69*d32c1530SHector Martin			capacity-dmips-mhz = <714>;
70*d32c1530SHector Martin			performance-domains = <&cpufreq_e>;
717b0b0191SHector Martin		};
727b0b0191SHector Martin
737b0b0191SHector Martin		cpu_e01: cpu@1 {
747b0b0191SHector Martin			compatible = "apple,icestorm";
757b0b0191SHector Martin			device_type = "cpu";
767b0b0191SHector Martin			reg = <0x0 0x1>;
777b0b0191SHector Martin			enable-method = "spin-table";
787b0b0191SHector Martin			cpu-release-addr = <0 0>; /* To be filled by loader */
7983fb5b55SRob Herring			next-level-cache = <&l2_cache_0>;
8083fb5b55SRob Herring			i-cache-size = <0x20000>;
8183fb5b55SRob Herring			d-cache-size = <0x10000>;
82*d32c1530SHector Martin			operating-points-v2 = <&icestorm_opp>;
83*d32c1530SHector Martin			capacity-dmips-mhz = <714>;
84*d32c1530SHector Martin			performance-domains = <&cpufreq_e>;
857b0b0191SHector Martin		};
867b0b0191SHector Martin
877b0b0191SHector Martin		cpu_p00: cpu@10100 {
887b0b0191SHector Martin			compatible = "apple,firestorm";
897b0b0191SHector Martin			device_type = "cpu";
907b0b0191SHector Martin			reg = <0x0 0x10100>;
917b0b0191SHector Martin			enable-method = "spin-table";
927b0b0191SHector Martin			cpu-release-addr = <0 0>; /* To be filled by loader */
9383fb5b55SRob Herring			next-level-cache = <&l2_cache_1>;
9483fb5b55SRob Herring			i-cache-size = <0x30000>;
9583fb5b55SRob Herring			d-cache-size = <0x20000>;
96*d32c1530SHector Martin			operating-points-v2 = <&firestorm_opp>;
97*d32c1530SHector Martin			capacity-dmips-mhz = <1024>;
98*d32c1530SHector Martin			performance-domains = <&cpufreq_p0>;
997b0b0191SHector Martin		};
1007b0b0191SHector Martin
1017b0b0191SHector Martin		cpu_p01: cpu@10101 {
1027b0b0191SHector Martin			compatible = "apple,firestorm";
1037b0b0191SHector Martin			device_type = "cpu";
1047b0b0191SHector Martin			reg = <0x0 0x10101>;
1057b0b0191SHector Martin			enable-method = "spin-table";
1067b0b0191SHector Martin			cpu-release-addr = <0 0>; /* To be filled by loader */
10783fb5b55SRob Herring			next-level-cache = <&l2_cache_1>;
10883fb5b55SRob Herring			i-cache-size = <0x30000>;
10983fb5b55SRob Herring			d-cache-size = <0x20000>;
110*d32c1530SHector Martin			operating-points-v2 = <&firestorm_opp>;
111*d32c1530SHector Martin			capacity-dmips-mhz = <1024>;
112*d32c1530SHector Martin			performance-domains = <&cpufreq_p0>;
1137b0b0191SHector Martin		};
1147b0b0191SHector Martin
1157b0b0191SHector Martin		cpu_p02: cpu@10102 {
1167b0b0191SHector Martin			compatible = "apple,firestorm";
1177b0b0191SHector Martin			device_type = "cpu";
1187b0b0191SHector Martin			reg = <0x0 0x10102>;
1197b0b0191SHector Martin			enable-method = "spin-table";
1207b0b0191SHector Martin			cpu-release-addr = <0 0>; /* To be filled by loader */
12183fb5b55SRob Herring			next-level-cache = <&l2_cache_1>;
12283fb5b55SRob Herring			i-cache-size = <0x30000>;
12383fb5b55SRob Herring			d-cache-size = <0x20000>;
124*d32c1530SHector Martin			operating-points-v2 = <&firestorm_opp>;
125*d32c1530SHector Martin			capacity-dmips-mhz = <1024>;
126*d32c1530SHector Martin			performance-domains = <&cpufreq_p0>;
1277b0b0191SHector Martin		};
1287b0b0191SHector Martin
1297b0b0191SHector Martin		cpu_p03: cpu@10103 {
1307b0b0191SHector Martin			compatible = "apple,firestorm";
1317b0b0191SHector Martin			device_type = "cpu";
1327b0b0191SHector Martin			reg = <0x0 0x10103>;
1337b0b0191SHector Martin			enable-method = "spin-table";
1347b0b0191SHector Martin			cpu-release-addr = <0 0>; /* To be filled by loader */
13583fb5b55SRob Herring			next-level-cache = <&l2_cache_1>;
13683fb5b55SRob Herring			i-cache-size = <0x30000>;
13783fb5b55SRob Herring			d-cache-size = <0x20000>;
138*d32c1530SHector Martin			operating-points-v2 = <&firestorm_opp>;
139*d32c1530SHector Martin			capacity-dmips-mhz = <1024>;
140*d32c1530SHector Martin			performance-domains = <&cpufreq_p0>;
1417b0b0191SHector Martin		};
1427b0b0191SHector Martin
1437b0b0191SHector Martin		cpu_p10: cpu@10200 {
1447b0b0191SHector Martin			compatible = "apple,firestorm";
1457b0b0191SHector Martin			device_type = "cpu";
1467b0b0191SHector Martin			reg = <0x0 0x10200>;
1477b0b0191SHector Martin			enable-method = "spin-table";
1487b0b0191SHector Martin			cpu-release-addr = <0 0>; /* To be filled by loader */
14983fb5b55SRob Herring			next-level-cache = <&l2_cache_2>;
15083fb5b55SRob Herring			i-cache-size = <0x30000>;
15183fb5b55SRob Herring			d-cache-size = <0x20000>;
152*d32c1530SHector Martin			operating-points-v2 = <&firestorm_opp>;
153*d32c1530SHector Martin			capacity-dmips-mhz = <1024>;
154*d32c1530SHector Martin			performance-domains = <&cpufreq_p1>;
1557b0b0191SHector Martin		};
1567b0b0191SHector Martin
1577b0b0191SHector Martin		cpu_p11: cpu@10201 {
1587b0b0191SHector Martin			compatible = "apple,firestorm";
1597b0b0191SHector Martin			device_type = "cpu";
1607b0b0191SHector Martin			reg = <0x0 0x10201>;
1617b0b0191SHector Martin			enable-method = "spin-table";
1627b0b0191SHector Martin			cpu-release-addr = <0 0>; /* To be filled by loader */
16383fb5b55SRob Herring			next-level-cache = <&l2_cache_2>;
16483fb5b55SRob Herring			i-cache-size = <0x30000>;
16583fb5b55SRob Herring			d-cache-size = <0x20000>;
166*d32c1530SHector Martin			operating-points-v2 = <&firestorm_opp>;
167*d32c1530SHector Martin			capacity-dmips-mhz = <1024>;
168*d32c1530SHector Martin			performance-domains = <&cpufreq_p1>;
1697b0b0191SHector Martin		};
1707b0b0191SHector Martin
1717b0b0191SHector Martin		cpu_p12: cpu@10202 {
1727b0b0191SHector Martin			compatible = "apple,firestorm";
1737b0b0191SHector Martin			device_type = "cpu";
1747b0b0191SHector Martin			reg = <0x0 0x10202>;
1757b0b0191SHector Martin			enable-method = "spin-table";
1767b0b0191SHector Martin			cpu-release-addr = <0 0>; /* To be filled by loader */
17783fb5b55SRob Herring			next-level-cache = <&l2_cache_2>;
17883fb5b55SRob Herring			i-cache-size = <0x30000>;
17983fb5b55SRob Herring			d-cache-size = <0x20000>;
180*d32c1530SHector Martin			operating-points-v2 = <&firestorm_opp>;
181*d32c1530SHector Martin			capacity-dmips-mhz = <1024>;
182*d32c1530SHector Martin			performance-domains = <&cpufreq_p1>;
1837b0b0191SHector Martin		};
1847b0b0191SHector Martin
1857b0b0191SHector Martin		cpu_p13: cpu@10203 {
1867b0b0191SHector Martin			compatible = "apple,firestorm";
1877b0b0191SHector Martin			device_type = "cpu";
1887b0b0191SHector Martin			reg = <0x0 0x10203>;
1897b0b0191SHector Martin			enable-method = "spin-table";
1907b0b0191SHector Martin			cpu-release-addr = <0 0>; /* To be filled by loader */
19183fb5b55SRob Herring			next-level-cache = <&l2_cache_2>;
19283fb5b55SRob Herring			i-cache-size = <0x30000>;
19383fb5b55SRob Herring			d-cache-size = <0x20000>;
194*d32c1530SHector Martin			operating-points-v2 = <&firestorm_opp>;
195*d32c1530SHector Martin			capacity-dmips-mhz = <1024>;
196*d32c1530SHector Martin			performance-domains = <&cpufreq_p1>;
19783fb5b55SRob Herring		};
19883fb5b55SRob Herring
19983fb5b55SRob Herring		l2_cache_0: l2-cache-0 {
20083fb5b55SRob Herring			compatible = "cache";
20183fb5b55SRob Herring			cache-level = <2>;
20283fb5b55SRob Herring			cache-unified;
20383fb5b55SRob Herring			cache-size = <0x400000>;
20483fb5b55SRob Herring		};
20583fb5b55SRob Herring
20683fb5b55SRob Herring		l2_cache_1: l2-cache-1 {
20783fb5b55SRob Herring			compatible = "cache";
20883fb5b55SRob Herring			cache-level = <2>;
20983fb5b55SRob Herring			cache-unified;
21083fb5b55SRob Herring			cache-size = <0xc00000>;
21183fb5b55SRob Herring		};
21283fb5b55SRob Herring
21383fb5b55SRob Herring		l2_cache_2: l2-cache-2 {
21483fb5b55SRob Herring			compatible = "cache";
21583fb5b55SRob Herring			cache-level = <2>;
21683fb5b55SRob Herring			cache-unified;
21783fb5b55SRob Herring			cache-size = <0xc00000>;
2187b0b0191SHector Martin		};
2197b0b0191SHector Martin	};
2207b0b0191SHector Martin
221*d32c1530SHector Martin	icestorm_opp: opp-table-0 {
222*d32c1530SHector Martin		compatible = "operating-points-v2";
223*d32c1530SHector Martin
224*d32c1530SHector Martin		opp01 {
225*d32c1530SHector Martin			opp-hz = /bits/ 64 <600000000>;
226*d32c1530SHector Martin			opp-level = <1>;
227*d32c1530SHector Martin			clock-latency-ns = <7500>;
228*d32c1530SHector Martin		};
229*d32c1530SHector Martin		opp02 {
230*d32c1530SHector Martin			opp-hz = /bits/ 64 <972000000>;
231*d32c1530SHector Martin			opp-level = <2>;
232*d32c1530SHector Martin			clock-latency-ns = <23000>;
233*d32c1530SHector Martin		};
234*d32c1530SHector Martin		opp03 {
235*d32c1530SHector Martin			opp-hz = /bits/ 64 <1332000000>;
236*d32c1530SHector Martin			opp-level = <3>;
237*d32c1530SHector Martin			clock-latency-ns = <29000>;
238*d32c1530SHector Martin		};
239*d32c1530SHector Martin		opp04 {
240*d32c1530SHector Martin			opp-hz = /bits/ 64 <1704000000>;
241*d32c1530SHector Martin			opp-level = <4>;
242*d32c1530SHector Martin			clock-latency-ns = <40000>;
243*d32c1530SHector Martin		};
244*d32c1530SHector Martin		opp05 {
245*d32c1530SHector Martin			opp-hz = /bits/ 64 <2064000000>;
246*d32c1530SHector Martin			opp-level = <5>;
247*d32c1530SHector Martin			clock-latency-ns = <50000>;
248*d32c1530SHector Martin		};
249*d32c1530SHector Martin	};
250*d32c1530SHector Martin
251*d32c1530SHector Martin	firestorm_opp: opp-table-1 {
252*d32c1530SHector Martin		compatible = "operating-points-v2";
253*d32c1530SHector Martin
254*d32c1530SHector Martin		opp01 {
255*d32c1530SHector Martin			opp-hz = /bits/ 64 <600000000>;
256*d32c1530SHector Martin			opp-level = <1>;
257*d32c1530SHector Martin			clock-latency-ns = <8000>;
258*d32c1530SHector Martin		};
259*d32c1530SHector Martin		opp02 {
260*d32c1530SHector Martin			opp-hz = /bits/ 64 <828000000>;
261*d32c1530SHector Martin			opp-level = <2>;
262*d32c1530SHector Martin			clock-latency-ns = <18000>;
263*d32c1530SHector Martin		};
264*d32c1530SHector Martin		opp03 {
265*d32c1530SHector Martin			opp-hz = /bits/ 64 <1056000000>;
266*d32c1530SHector Martin			opp-level = <3>;
267*d32c1530SHector Martin			clock-latency-ns = <19000>;
268*d32c1530SHector Martin		};
269*d32c1530SHector Martin		opp04 {
270*d32c1530SHector Martin			opp-hz = /bits/ 64 <1296000000>;
271*d32c1530SHector Martin			opp-level = <4>;
272*d32c1530SHector Martin			clock-latency-ns = <23000>;
273*d32c1530SHector Martin		};
274*d32c1530SHector Martin		opp05 {
275*d32c1530SHector Martin			opp-hz = /bits/ 64 <1524000000>;
276*d32c1530SHector Martin			opp-level = <5>;
277*d32c1530SHector Martin			clock-latency-ns = <24000>;
278*d32c1530SHector Martin		};
279*d32c1530SHector Martin		opp06 {
280*d32c1530SHector Martin			opp-hz = /bits/ 64 <1752000000>;
281*d32c1530SHector Martin			opp-level = <6>;
282*d32c1530SHector Martin			clock-latency-ns = <28000>;
283*d32c1530SHector Martin		};
284*d32c1530SHector Martin		opp07 {
285*d32c1530SHector Martin			opp-hz = /bits/ 64 <1980000000>;
286*d32c1530SHector Martin			opp-level = <7>;
287*d32c1530SHector Martin			clock-latency-ns = <31000>;
288*d32c1530SHector Martin		};
289*d32c1530SHector Martin		opp08 {
290*d32c1530SHector Martin			opp-hz = /bits/ 64 <2208000000>;
291*d32c1530SHector Martin			opp-level = <8>;
292*d32c1530SHector Martin			clock-latency-ns = <45000>;
293*d32c1530SHector Martin		};
294*d32c1530SHector Martin		opp09 {
295*d32c1530SHector Martin			opp-hz = /bits/ 64 <2448000000>;
296*d32c1530SHector Martin			opp-level = <9>;
297*d32c1530SHector Martin			clock-latency-ns = <49000>;
298*d32c1530SHector Martin		};
299*d32c1530SHector Martin		opp10 {
300*d32c1530SHector Martin			opp-hz = /bits/ 64 <2676000000>;
301*d32c1530SHector Martin			opp-level = <10>;
302*d32c1530SHector Martin			clock-latency-ns = <53000>;
303*d32c1530SHector Martin		};
304*d32c1530SHector Martin		opp11 {
305*d32c1530SHector Martin			opp-hz = /bits/ 64 <2904000000>;
306*d32c1530SHector Martin			opp-level = <11>;
307*d32c1530SHector Martin			clock-latency-ns = <56000>;
308*d32c1530SHector Martin		};
309*d32c1530SHector Martin		opp12 {
310*d32c1530SHector Martin			opp-hz = /bits/ 64 <3036000000>;
311*d32c1530SHector Martin			opp-level = <12>;
312*d32c1530SHector Martin			clock-latency-ns = <56000>;
313*d32c1530SHector Martin		};
314*d32c1530SHector Martin		/* Not available until CPU deep sleep is implemented
315*d32c1530SHector Martin		opp13 {
316*d32c1530SHector Martin			opp-hz = /bits/ 64 <3132000000>;
317*d32c1530SHector Martin			opp-level = <13>;
318*d32c1530SHector Martin			clock-latency-ns = <56000>;
319*d32c1530SHector Martin			turbo-mode;
320*d32c1530SHector Martin		};
321*d32c1530SHector Martin		opp14 {
322*d32c1530SHector Martin			opp-hz = /bits/ 64 <3168000000>;
323*d32c1530SHector Martin			opp-level = <14>;
324*d32c1530SHector Martin			clock-latency-ns = <56000>;
325*d32c1530SHector Martin			turbo-mode;
326*d32c1530SHector Martin		};
327*d32c1530SHector Martin		opp15 {
328*d32c1530SHector Martin			opp-hz = /bits/ 64 <3228000000>;
329*d32c1530SHector Martin			opp-level = <15>;
330*d32c1530SHector Martin			clock-latency-ns = <56000>;
331*d32c1530SHector Martin			turbo-mode;
332*d32c1530SHector Martin		};
333*d32c1530SHector Martin		*/
334*d32c1530SHector Martin	};
335*d32c1530SHector Martin
3367b0b0191SHector Martin	pmu-e {
3377b0b0191SHector Martin		compatible = "apple,icestorm-pmu";
3387b0b0191SHector Martin		interrupt-parent = <&aic>;
3397b0b0191SHector Martin		interrupts = <AIC_FIQ 0 AIC_CPU_PMU_E IRQ_TYPE_LEVEL_HIGH>;
3407b0b0191SHector Martin	};
3417b0b0191SHector Martin
3427b0b0191SHector Martin	pmu-p {
3437b0b0191SHector Martin		compatible = "apple,firestorm-pmu";
3447b0b0191SHector Martin		interrupt-parent = <&aic>;
3457b0b0191SHector Martin		interrupts = <AIC_FIQ 0 AIC_CPU_PMU_P IRQ_TYPE_LEVEL_HIGH>;
3467b0b0191SHector Martin	};
3477b0b0191SHector Martin
3487b0b0191SHector Martin	timer {
3497b0b0191SHector Martin		compatible = "arm,armv8-timer";
3507b0b0191SHector Martin		interrupt-parent = <&aic>;
3517b0b0191SHector Martin		interrupt-names = "phys", "virt", "hyp-phys", "hyp-virt";
3527b0b0191SHector Martin		interrupts = <AIC_FIQ 0 AIC_TMR_GUEST_PHYS IRQ_TYPE_LEVEL_HIGH>,
3537b0b0191SHector Martin			     <AIC_FIQ 0 AIC_TMR_GUEST_VIRT IRQ_TYPE_LEVEL_HIGH>,
3547b0b0191SHector Martin			     <AIC_FIQ 0 AIC_TMR_HV_PHYS IRQ_TYPE_LEVEL_HIGH>,
3557b0b0191SHector Martin			     <AIC_FIQ 0 AIC_TMR_HV_VIRT IRQ_TYPE_LEVEL_HIGH>;
3567b0b0191SHector Martin	};
3577b0b0191SHector Martin
3587b0b0191SHector Martin	clkref: clock-ref {
3597b0b0191SHector Martin		compatible = "fixed-clock";
3607b0b0191SHector Martin		#clock-cells = <0>;
3617b0b0191SHector Martin		clock-frequency = <24000000>;
3627b0b0191SHector Martin		clock-output-names = "clkref";
3637b0b0191SHector Martin	};
3647b0b0191SHector Martin
36551979fbbSJanne Grunau	/*
36651979fbbSJanne Grunau	 * This is a fabulated representation of the input clock
36751979fbbSJanne Grunau	 * to NCO since we don't know the true clock tree.
36851979fbbSJanne Grunau	 */
36951979fbbSJanne Grunau	nco_clkref: clock-ref-nco {
37051979fbbSJanne Grunau		compatible = "fixed-clock";
37151979fbbSJanne Grunau		#clock-cells = <0>;
37251979fbbSJanne Grunau		clock-output-names = "nco_ref";
37351979fbbSJanne Grunau	};
3747b0b0191SHector Martin};
375