1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Unisoc SC9863A SoC DTS file
4 *
5 * Copyright (C) 2019, Unisoc Inc.
6 */
7
8#include <dt-bindings/clock/sprd,sc9863a-clk.h>
9#include <dt-bindings/interrupt-controller/arm-gic.h>
10#include "sharkl3.dtsi"
11
12/ {
13	cpus {
14		#address-cells = <2>;
15		#size-cells = <0>;
16
17		cpu-map {
18			cluster0 {
19				core0 {
20					cpu = <&CPU0>;
21				};
22				core1 {
23					cpu = <&CPU1>;
24				};
25				core2 {
26					cpu = <&CPU2>;
27				};
28				core3 {
29					cpu = <&CPU3>;
30				};
31				core4 {
32					cpu = <&CPU4>;
33				};
34				core5 {
35					cpu = <&CPU5>;
36				};
37				core6 {
38					cpu = <&CPU6>;
39				};
40				core7 {
41					cpu = <&CPU7>;
42				};
43			};
44		};
45
46		CPU0: cpu@0 {
47			device_type = "cpu";
48			compatible = "arm,cortex-a55";
49			reg = <0x0 0x0>;
50			enable-method = "psci";
51			cpu-idle-states = <&CORE_PD>;
52		};
53
54		CPU1: cpu@100 {
55			device_type = "cpu";
56			compatible = "arm,cortex-a55";
57			reg = <0x0 0x100>;
58			enable-method = "psci";
59			cpu-idle-states = <&CORE_PD>;
60		};
61
62		CPU2: cpu@200 {
63			device_type = "cpu";
64			compatible = "arm,cortex-a55";
65			reg = <0x0 0x200>;
66			enable-method = "psci";
67			cpu-idle-states = <&CORE_PD>;
68		};
69
70		CPU3: cpu@300 {
71			device_type = "cpu";
72			compatible = "arm,cortex-a55";
73			reg = <0x0 0x300>;
74			enable-method = "psci";
75			cpu-idle-states = <&CORE_PD>;
76		};
77
78		CPU4: cpu@400 {
79			device_type = "cpu";
80			compatible = "arm,cortex-a55";
81			reg = <0x0 0x400>;
82			enable-method = "psci";
83			cpu-idle-states = <&CORE_PD>;
84		};
85
86		CPU5: cpu@500 {
87			device_type = "cpu";
88			compatible = "arm,cortex-a55";
89			reg = <0x0 0x500>;
90			enable-method = "psci";
91			cpu-idle-states = <&CORE_PD>;
92		};
93
94		CPU6: cpu@600 {
95			device_type = "cpu";
96			compatible = "arm,cortex-a55";
97			reg = <0x0 0x600>;
98			enable-method = "psci";
99			cpu-idle-states = <&CORE_PD>;
100		};
101
102		CPU7: cpu@700 {
103			device_type = "cpu";
104			compatible = "arm,cortex-a55";
105			reg = <0x0 0x700>;
106			enable-method = "psci";
107			cpu-idle-states = <&CORE_PD>;
108		};
109	};
110
111	idle-states {
112		entry-method = "psci";
113		CORE_PD: core-pd {
114			compatible = "arm,idle-state";
115			entry-latency-us = <4000>;
116			exit-latency-us = <4000>;
117			min-residency-us = <10000>;
118			local-timer-stop;
119			arm,psci-suspend-param = <0x00010000>;
120		};
121	};
122
123	psci {
124		compatible = "arm,psci-0.2";
125		method = "smc";
126	};
127
128	timer {
129		compatible = "arm,armv8-timer";
130		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>, /* Physical Secure PPI */
131			     <GIC_PPI 14 IRQ_TYPE_LEVEL_HIGH>, /* Physical Non-Secure PPI */
132			     <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>, /* Virtual PPI */
133			     <GIC_PPI 10 IRQ_TYPE_LEVEL_HIGH>; /* Hipervisor PPI */
134	};
135
136	pmu {
137		compatible = "arm,armv8-pmuv3";
138		interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>,
139			     <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>,
140			     <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>,
141			     <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>,
142			     <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>,
143			     <GIC_SPI 149 IRQ_TYPE_LEVEL_HIGH>,
144			     <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>,
145			     <GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>;
146	};
147
148	soc {
149		gic: interrupt-controller@14000000 {
150			compatible = "arm,gic-v3";
151			#interrupt-cells = <3>;
152			#address-cells = <2>;
153			#size-cells = <2>;
154			ranges;
155			redistributor-stride = <0x0 0x20000>;	/* 128KB stride */
156			#redistributor-regions = <1>;
157			interrupt-controller;
158			reg = <0x0 0x14000000 0 0x20000>,	/* GICD */
159			      <0x0 0x14040000 0 0x100000>;	/* GICR */
160			interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
161		};
162
163		ap_clk: clock-controller@21500000 {
164			compatible = "sprd,sc9863a-ap-clk";
165			reg = <0 0x21500000 0 0x1000>;
166			clocks = <&ext_32k>, <&ext_26m>;
167			clock-names = "ext-32k", "ext-26m";
168			#clock-cells = <1>;
169		};
170
171		aon_clk: clock-controller@402d0000 {
172			compatible = "sprd,sc9863a-aon-clk";
173			reg = <0 0x402d0000 0 0x1000>;
174			clocks = <&ext_26m>, <&rco_100m>,
175				 <&ext_32k>, <&ext_4m>;
176			clock-names = "ext-26m", "rco-100m",
177				      "ext-32k", "ext-4m";
178			#clock-cells = <1>;
179		};
180
181		mm_clk: clock-controller@60900000 {
182			compatible = "sprd,sc9863a-mm-clk";
183			reg = <0 0x60900000 0 0x1000>;
184			#clock-cells = <1>;
185		};
186
187		funnel@10001000 {
188			compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
189			reg = <0 0x10001000 0 0x1000>;
190			clocks = <&ext_26m>;
191			clock-names = "apb_pclk";
192
193			out-ports {
194				port {
195					funnel_soc_out_port: endpoint {
196						remote-endpoint = <&etb_in>;
197					};
198				};
199			};
200
201			in-ports {
202				port {
203					funnel_soc_in_port: endpoint {
204						remote-endpoint =
205						<&funnel_ca55_out_port>;
206					};
207				};
208			};
209		};
210
211		etb@10003000 {
212			compatible = "arm,coresight-tmc", "arm,primecell";
213			reg = <0 0x10003000 0 0x1000>;
214			clocks = <&ext_26m>;
215			clock-names = "apb_pclk";
216
217			in-ports {
218				port {
219					etb_in: endpoint {
220						remote-endpoint =
221						<&funnel_soc_out_port>;
222					};
223				};
224			};
225		};
226
227		funnel@12001000 {
228			compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
229			reg = <0 0x12001000 0 0x1000>;
230			clocks = <&ext_26m>;
231			clock-names = "apb_pclk";
232
233			out-ports {
234				port {
235					funnel_little_out_port: endpoint {
236						remote-endpoint =
237						<&etf_little_in>;
238					};
239				};
240			};
241
242			in-ports {
243				#address-cells = <1>;
244				#size-cells = <0>;
245
246				port@0 {
247					reg = <0>;
248					funnel_little_in_port0: endpoint {
249						remote-endpoint = <&etm0_out>;
250					};
251				};
252
253				port@1 {
254					reg = <1>;
255					funnel_little_in_port1: endpoint {
256						remote-endpoint = <&etm1_out>;
257					};
258				};
259
260				port@2 {
261					reg = <2>;
262					funnel_little_in_port2: endpoint {
263						remote-endpoint = <&etm2_out>;
264					};
265				};
266
267				port@3 {
268					reg = <3>;
269					funnel_little_in_port3: endpoint {
270						remote-endpoint = <&etm3_out>;
271					};
272				};
273			};
274		};
275
276		etf@12002000 {
277			compatible = "arm,coresight-tmc", "arm,primecell";
278			reg = <0 0x12002000 0 0x1000>;
279			clocks = <&ext_26m>;
280			clock-names = "apb_pclk";
281
282			out-ports {
283				port {
284					etf_little_out: endpoint {
285						remote-endpoint =
286						<&funnel_ca55_in_port0>;
287					};
288				};
289			};
290
291			in-port {
292				port {
293					etf_little_in: endpoint {
294						remote-endpoint =
295						<&funnel_little_out_port>;
296					};
297				};
298			};
299		};
300
301		etf@12003000 {
302			compatible = "arm,coresight-tmc", "arm,primecell";
303			reg = <0 0x12003000 0 0x1000>;
304			clocks = <&ext_26m>;
305			clock-names = "apb_pclk";
306
307			out-ports {
308				port {
309					etf_big_out: endpoint {
310						remote-endpoint =
311						<&funnel_ca55_in_port1>;
312					};
313				};
314			};
315
316			in-ports {
317				port {
318					etf_big_in: endpoint {
319						remote-endpoint =
320						<&funnel_big_out_port>;
321					};
322				};
323			};
324		};
325
326		funnel@12004000 {
327			compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
328			reg = <0 0x12004000 0 0x1000>;
329			clocks = <&ext_26m>;
330			clock-names = "apb_pclk";
331
332			out-ports {
333				port {
334					funnel_ca55_out_port: endpoint {
335						remote-endpoint =
336						<&funnel_soc_in_port>;
337					};
338				};
339			};
340
341			in-ports {
342				#address-cells = <1>;
343				#size-cells = <0>;
344
345				port@0 {
346					reg = <0>;
347					funnel_ca55_in_port0: endpoint {
348						remote-endpoint =
349						<&etf_little_out>;
350					};
351				};
352
353				port@1 {
354					reg = <1>;
355					funnel_ca55_in_port1: endpoint {
356						remote-endpoint =
357						<&etf_big_out>;
358					};
359				};
360			};
361		};
362
363		funnel@12005000 {
364			compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
365			reg = <0 0x12005000 0 0x1000>;
366			clocks = <&ext_26m>;
367			clock-names = "apb_pclk";
368
369			out-ports {
370				port {
371					funnel_big_out_port: endpoint {
372						remote-endpoint =
373						<&etf_big_in>;
374					};
375				};
376			};
377
378			in-ports {
379				#address-cells = <1>;
380				#size-cells = <0>;
381
382				port@0 {
383					reg = <0>;
384					funnel_big_in_port0: endpoint {
385						remote-endpoint = <&etm4_out>;
386					};
387				};
388
389				port@1 {
390					reg = <1>;
391					funnel_big_in_port1: endpoint {
392						remote-endpoint = <&etm5_out>;
393					};
394				};
395
396				port@2 {
397					reg = <2>;
398					funnel_big_in_port2: endpoint {
399						remote-endpoint = <&etm6_out>;
400					};
401				};
402
403				port@3 {
404					reg = <3>;
405					funnel_big_in_port3: endpoint {
406						remote-endpoint = <&etm7_out>;
407					};
408				};
409			};
410		};
411
412		etm@13040000 {
413			compatible = "arm,coresight-etm4x", "arm,primecell";
414			reg = <0 0x13040000 0 0x1000>;
415			cpu = <&CPU0>;
416			clocks = <&ext_26m>;
417			clock-names = "apb_pclk";
418
419			out-ports {
420				port {
421					etm0_out: endpoint {
422						remote-endpoint =
423						<&funnel_little_in_port0>;
424					};
425				};
426			};
427		};
428
429		etm@13140000 {
430			compatible = "arm,coresight-etm4x", "arm,primecell";
431			reg = <0 0x13140000 0 0x1000>;
432			cpu = <&CPU1>;
433			clocks = <&ext_26m>;
434			clock-names = "apb_pclk";
435
436			out-ports {
437				port {
438					etm1_out: endpoint {
439						remote-endpoint =
440						<&funnel_little_in_port1>;
441					};
442				};
443			};
444		};
445
446		etm@13240000 {
447			compatible = "arm,coresight-etm4x", "arm,primecell";
448			reg = <0 0x13240000 0 0x1000>;
449			cpu = <&CPU2>;
450			clocks = <&ext_26m>;
451			clock-names = "apb_pclk";
452
453			out-ports {
454				port {
455					etm2_out: endpoint {
456						remote-endpoint =
457						<&funnel_little_in_port2>;
458					};
459				};
460			};
461		};
462
463		etm@13340000 {
464			compatible = "arm,coresight-etm4x", "arm,primecell";
465			reg = <0 0x13340000 0 0x1000>;
466			cpu = <&CPU3>;
467			clocks = <&ext_26m>;
468			clock-names = "apb_pclk";
469
470			out-ports {
471				port {
472					etm3_out: endpoint {
473						remote-endpoint =
474						<&funnel_little_in_port3>;
475					};
476				};
477			};
478		};
479
480		etm@13440000 {
481			compatible = "arm,coresight-etm4x", "arm,primecell";
482			reg = <0 0x13440000 0 0x1000>;
483			cpu = <&CPU4>;
484			clocks = <&ext_26m>;
485			clock-names = "apb_pclk";
486
487			out-ports {
488				port {
489					etm4_out: endpoint {
490						remote-endpoint =
491						<&funnel_big_in_port0>;
492					};
493				};
494			};
495		};
496
497		etm@13540000 {
498			compatible = "arm,coresight-etm4x", "arm,primecell";
499			reg = <0 0x13540000 0 0x1000>;
500			cpu = <&CPU5>;
501			clocks = <&ext_26m>;
502			clock-names = "apb_pclk";
503
504			out-ports {
505				port {
506					etm5_out: endpoint {
507						remote-endpoint =
508						<&funnel_big_in_port1>;
509					};
510				};
511			};
512		};
513
514		etm@13640000 {
515			compatible = "arm,coresight-etm4x", "arm,primecell";
516			reg = <0 0x13640000 0 0x1000>;
517			cpu = <&CPU6>;
518			clocks = <&ext_26m>;
519			clock-names = "apb_pclk";
520
521			out-ports {
522				port {
523					etm6_out: endpoint {
524						remote-endpoint =
525						<&funnel_big_in_port2>;
526					};
527				};
528			};
529		};
530
531		etm@13740000 {
532			compatible = "arm,coresight-etm4x", "arm,primecell";
533			reg = <0 0x13740000 0 0x1000>;
534			cpu = <&CPU7>;
535			clocks = <&ext_26m>;
536			clock-names = "apb_pclk";
537
538			out-ports {
539				port {
540					etm7_out: endpoint {
541						remote-endpoint =
542						<&funnel_big_in_port3>;
543					};
544				};
545			};
546		};
547
548		ap-ahb {
549			compatible = "simple-bus";
550			#address-cells = <2>;
551			#size-cells = <2>;
552			ranges;
553
554			sdio0: sdio@20300000 {
555				compatible = "sprd,sdhci-r11";
556				reg = <0 0x20300000 0 0x1000>;
557				interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
558
559				clock-names = "sdio", "enable";
560				clocks = <&aon_clk CLK_SDIO0_2X>,
561					 <&apahb_gate CLK_SDIO0_EB>;
562				assigned-clocks = <&aon_clk CLK_SDIO0_2X>;
563				assigned-clock-parents = <&rpll CLK_RPLL_390M>;
564
565				bus-width = <4>;
566				no-sdio;
567				no-mmc;
568			};
569
570			sdio3: sdio@20600000 {
571				compatible = "sprd,sdhci-r11";
572				reg = <0 0x20600000 0 0x1000>;
573				interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
574
575				clock-names = "sdio", "enable";
576				clocks = <&aon_clk CLK_EMMC_2X>,
577					 <&apahb_gate CLK_EMMC_EB>;
578				assigned-clocks = <&aon_clk CLK_EMMC_2X>;
579				assigned-clock-parents = <&rpll CLK_RPLL_390M>;
580
581				bus-width = <8>;
582				non-removable;
583				no-sdio;
584				no-sd;
585				cap-mmc-hw-reset;
586			};
587		};
588	};
589};
590