blob: e27eb3ed1d47991be7573d320eb6b5cae2f6a608 [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001/*
2 * Spreadtrum SC9860 SoC
3 *
4 * Copyright (C) 2016, Spreadtrum Communications Inc.
5 *
6 * SPDX-License-Identifier: (GPL-2.0+ OR MIT)
7 */
8
9#include <dt-bindings/interrupt-controller/arm-gic.h>
10#include <dt-bindings/input/input.h>
11#include <dt-bindings/gpio/gpio.h>
12#include "whale2.dtsi"
13
14/ {
15 cpus {
16 #address-cells = <2>;
17 #size-cells = <0>;
18
19 cpu-map {
20 cluster0 {
21 core0 {
22 cpu = <&CPU0>;
23 };
24 core1 {
25 cpu = <&CPU1>;
26 };
27 core2 {
28 cpu = <&CPU2>;
29 };
30 core3 {
31 cpu = <&CPU3>;
32 };
33 };
34
35 cluster1 {
36 core0 {
37 cpu = <&CPU4>;
38 };
39 core1 {
40 cpu = <&CPU5>;
41 };
42 core2 {
43 cpu = <&CPU6>;
44 };
45 core3 {
46 cpu = <&CPU7>;
47 };
48 };
49 };
50
51 CPU0: cpu@530000 {
52 device_type = "cpu";
53 compatible = "arm,cortex-a53";
54 reg = <0x0 0x530000>;
55 enable-method = "psci";
56 cpu-idle-states = <&CORE_PD &CLUSTER_PD>;
57 };
58
59 CPU1: cpu@530001 {
60 device_type = "cpu";
61 compatible = "arm,cortex-a53";
62 reg = <0x0 0x530001>;
63 enable-method = "psci";
64 cpu-idle-states = <&CORE_PD &CLUSTER_PD>;
65 };
66
67 CPU2: cpu@530002 {
68 device_type = "cpu";
69 compatible = "arm,cortex-a53";
70 reg = <0x0 0x530002>;
71 enable-method = "psci";
72 cpu-idle-states = <&CORE_PD &CLUSTER_PD>;
73 };
74
75 CPU3: cpu@530003 {
76 device_type = "cpu";
77 compatible = "arm,cortex-a53";
78 reg = <0x0 0x530003>;
79 enable-method = "psci";
80 cpu-idle-states = <&CORE_PD &CLUSTER_PD>;
81 };
82
83 CPU4: cpu@530100 {
84 device_type = "cpu";
85 compatible = "arm,cortex-a53";
86 reg = <0x0 0x530100>;
87 enable-method = "psci";
88 cpu-idle-states = <&CORE_PD &CLUSTER_PD>;
89 };
90
91 CPU5: cpu@530101 {
92 device_type = "cpu";
93 compatible = "arm,cortex-a53";
94 reg = <0x0 0x530101>;
95 enable-method = "psci";
96 cpu-idle-states = <&CORE_PD &CLUSTER_PD>;
97 };
98
99 CPU6: cpu@530102 {
100 device_type = "cpu";
101 compatible = "arm,cortex-a53";
102 reg = <0x0 0x530102>;
103 enable-method = "psci";
104 cpu-idle-states = <&CORE_PD &CLUSTER_PD>;
105 };
106
107 CPU7: cpu@530103 {
108 device_type = "cpu";
109 compatible = "arm,cortex-a53";
110 reg = <0x0 0x530103>;
111 enable-method = "psci";
112 cpu-idle-states = <&CORE_PD &CLUSTER_PD>;
113 };
114 };
115
116 idle-states{
117 entry-method = "psci";
118
119 CORE_PD: core_pd {
120 compatible = "arm,idle-state";
121 entry-latency-us = <1000>;
122 exit-latency-us = <700>;
123 min-residency-us = <2500>;
124 local-timer-stop;
125 arm,psci-suspend-param = <0x00010002>;
126 };
127
128 CLUSTER_PD: cluster_pd {
129 compatible = "arm,idle-state";
130 entry-latency-us = <1000>;
131 exit-latency-us = <1000>;
132 min-residency-us = <3000>;
133 local-timer-stop;
134 arm,psci-suspend-param = <0x01010003>;
135 };
136 };
137
138 gic: interrupt-controller@12001000 {
139 compatible = "arm,gic-400";
140 reg = <0 0x12001000 0 0x1000>,
141 <0 0x12002000 0 0x2000>,
142 <0 0x12004000 0 0x2000>,
143 <0 0x12006000 0 0x2000>;
144 #interrupt-cells = <3>;
145 interrupt-controller;
146 interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(8)
147 | IRQ_TYPE_LEVEL_HIGH)>;
148 };
149
150 psci {
151 compatible = "arm,psci-0.2";
152 method = "smc";
153 };
154
155 timer {
156 compatible = "arm,armv8-timer";
157 interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8)
158 | IRQ_TYPE_LEVEL_LOW)>,
159 <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8)
160 | IRQ_TYPE_LEVEL_LOW)>,
161 <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8)
162 | IRQ_TYPE_LEVEL_LOW)>,
163 <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8)
164 | IRQ_TYPE_LEVEL_LOW)>;
165 };
166
167 pmu {
168 compatible = "arm,cortex-a53-pmu", "arm,armv8-pmuv3";
169 interrupts = <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
170 <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
171 <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>,
172 <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>,
173 <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>,
174 <GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>,
175 <GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>,
176 <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
177 interrupt-affinity = <&CPU0>,
178 <&CPU1>,
179 <&CPU2>,
180 <&CPU3>,
181 <&CPU4>,
182 <&CPU5>,
183 <&CPU6>,
184 <&CPU7>;
185 };
186
187 soc {
188 pmu_gate: pmu-gate {
189 compatible = "sprd,sc9860-pmu-gate";
190 sprd,syscon = <&pmu_regs>; /* 0x402b0000 */
191 clocks = <&ext_26m>;
192 #clock-cells = <1>;
193 };
194
195 pll: pll {
196 compatible = "sprd,sc9860-pll";
197 sprd,syscon = <&ana_regs>; /* 0x40400000 */
198 clocks = <&pmu_gate 0>;
199 #clock-cells = <1>;
200 };
201
202 ap_clk: clock-controller@20000000 {
203 compatible = "sprd,sc9860-ap-clk";
204 reg = <0 0x20000000 0 0x400>;
205 clocks = <&ext_26m>, <&pll 0>,
206 <&pmu_gate 0>;
207 #clock-cells = <1>;
208 };
209
210 aon_prediv: aon-prediv {
211 compatible = "sprd,sc9860-aon-prediv";
212 reg = <0 0x402d0000 0 0x400>;
213 clocks = <&ext_26m>, <&pll 0>,
214 <&pmu_gate 0>;
215 #clock-cells = <1>;
216 };
217
218 apahb_gate: apahb-gate {
219 compatible = "sprd,sc9860-apahb-gate";
220 sprd,syscon = <&ap_ahb_regs>; /* 0x20210000 */
221 clocks = <&aon_prediv 0>;
222 #clock-cells = <1>;
223 };
224
225 aon_gate: aon-gate {
226 compatible = "sprd,sc9860-aon-gate";
227 sprd,syscon = <&aon_regs>; /* 0x402e0000 */
228 clocks = <&aon_prediv 0>;
229 #clock-cells = <1>;
230 };
231
232 aonsecure_clk: clock-controller@40880000 {
233 compatible = "sprd,sc9860-aonsecure-clk";
234 reg = <0 0x40880000 0 0x400>;
235 clocks = <&ext_26m>, <&pll 0>;
236 #clock-cells = <1>;
237 };
238
239 agcp_gate: agcp-gate {
240 compatible = "sprd,sc9860-agcp-gate";
241 sprd,syscon = <&agcp_regs>; /* 0x415e0000 */
242 clocks = <&aon_prediv 0>;
243 #clock-cells = <1>;
244 };
245
246 gpu_clk: clock-controller@60200000 {
247 compatible = "sprd,sc9860-gpu-clk";
248 reg = <0 0x60200000 0 0x400>;
249 clocks = <&pll 0>;
250 #clock-cells = <1>;
251 };
252
253 vsp_clk: clock-controller@61000000 {
254 compatible = "sprd,sc9860-vsp-clk";
255 reg = <0 0x61000000 0 0x400>;
256 clocks = <&ext_26m>, <&pll 0>;
257 #clock-cells = <1>;
258 };
259
260 vsp_gate: vsp-gate {
261 compatible = "sprd,sc9860-vsp-gate";
262 sprd,syscon = <&vsp_regs>; /* 0x61100000 */
263 clocks = <&vsp_clk 0>;
264 #clock-cells = <1>;
265 };
266
267 cam_clk: clock-controller@62000000 {
268 compatible = "sprd,sc9860-cam-clk";
269 reg = <0 0x62000000 0 0x4000>;
270 clocks = <&ext_26m>, <&pll 0>;
271 #clock-cells = <1>;
272 };
273
274 cam_gate: cam-gate {
275 compatible = "sprd,sc9860-cam-gate";
276 sprd,syscon = <&cam_regs>; /* 0x62100000 */
277 clocks = <&cam_clk 0>;
278 #clock-cells = <1>;
279 };
280
281 disp_clk: clock-controller@63000000 {
282 compatible = "sprd,sc9860-disp-clk";
283 reg = <0 0x63000000 0 0x400>;
284 clocks = <&ext_26m>, <&pll 0>;
285 #clock-cells = <1>;
286 };
287
288 disp_gate: disp-gate {
289 compatible = "sprd,sc9860-disp-gate";
290 sprd,syscon = <&disp_regs>; /* 0x63100000 */
291 clocks = <&disp_clk 0>;
292 #clock-cells = <1>;
293 };
294
295 apapb_gate: apapb-gate {
296 compatible = "sprd,sc9860-apapb-gate";
297 sprd,syscon = <&ap_apb_regs>; /* 0x70b00000 */
298 clocks = <&ap_clk 0>;
299 #clock-cells = <1>;
300 };
301
302 funnel@10001000 { /* SoC Funnel */
303 compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
304 reg = <0 0x10001000 0 0x1000>;
305 clocks = <&ext_26m>;
306 clock-names = "apb_pclk";
307 out-ports {
308 port {
309 soc_funnel_out_port: endpoint {
310 remote-endpoint = <&etb_in>;
311 };
312 };
313 };
314
315 in-ports {
316 #address-cells = <1>;
317 #size-cells = <0>;
318
319 port@0 {
320 reg = <0>;
321 soc_funnel_in_port0: endpoint {
322 remote-endpoint =
323 <&main_funnel_out_port>;
324 };
325 };
326
327 port@4 {
328 reg = <4>;
329 soc_funnel_in_port1: endpoint {
330 remote-endpoint =
331 <&stm_out_port>;
332 };
333 };
334 };
335 };
336
337 etb@10003000 {
338 compatible = "arm,coresight-tmc", "arm,primecell";
339 reg = <0 0x10003000 0 0x1000>;
340 clocks = <&ext_26m>;
341 clock-names = "apb_pclk";
342 out-ports {
343 port {
344 etb_in: endpoint {
345 remote-endpoint =
346 <&soc_funnel_out_port>;
347 };
348 };
349 };
350 };
351
352 stm@10006000 {
353 compatible = "arm,coresight-stm", "arm,primecell";
354 reg = <0 0x10006000 0 0x1000>,
355 <0 0x01000000 0 0x180000>;
356 reg-names = "stm-base", "stm-stimulus-base";
357 clocks = <&ext_26m>;
358 clock-names = "apb_pclk";
359 out-ports {
360 port {
361 stm_out_port: endpoint {
362 remote-endpoint =
363 <&soc_funnel_in_port1>;
364 };
365 };
366 };
367 };
368
369 funnel@11001000 { /* Cluster0 Funnel */
370 compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
371 reg = <0 0x11001000 0 0x1000>;
372 clocks = <&ext_26m>;
373 clock-names = "apb_pclk";
374 out-ports {
375 port {
376 cluster0_funnel_out_port: endpoint {
377 remote-endpoint =
378 <&cluster0_etf_in>;
379 };
380 };
381 };
382
383 in-ports {
384 #address-cells = <1>;
385 #size-cells = <0>;
386
387 port@0 {
388 reg = <0>;
389 cluster0_funnel_in_port0: endpoint {
390 remote-endpoint = <&etm0_out>;
391 };
392 };
393
394 port@1 {
395 reg = <1>;
396 cluster0_funnel_in_port1: endpoint {
397 remote-endpoint = <&etm1_out>;
398 };
399 };
400
401 port@2 {
402 reg = <2>;
403 cluster0_funnel_in_port2: endpoint {
404 remote-endpoint = <&etm2_out>;
405 };
406 };
407
408 port@4 {
409 reg = <4>;
410 cluster0_funnel_in_port3: endpoint {
411 remote-endpoint = <&etm3_out>;
412 };
413 };
414 };
415 };
416
417 funnel@11002000 { /* Cluster1 Funnel */
418 compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
419 reg = <0 0x11002000 0 0x1000>;
420 clocks = <&ext_26m>;
421 clock-names = "apb_pclk";
422 out-ports {
423 port {
424 cluster1_funnel_out_port: endpoint {
425 remote-endpoint =
426 <&cluster1_etf_in>;
427 };
428 };
429 };
430
431 in-ports {
432 #address-cells = <1>;
433 #size-cells = <0>;
434
435 port@0 {
436 reg = <0>;
437 cluster1_funnel_in_port0: endpoint {
438 remote-endpoint = <&etm4_out>;
439 };
440 };
441
442 port@1 {
443 reg = <1>;
444 cluster1_funnel_in_port1: endpoint {
445 remote-endpoint = <&etm5_out>;
446 };
447 };
448
449 port@2 {
450 reg = <2>;
451 cluster1_funnel_in_port2: endpoint {
452 remote-endpoint = <&etm6_out>;
453 };
454 };
455
456 port@3 {
457 reg = <3>;
458 cluster1_funnel_in_port3: endpoint {
459 remote-endpoint = <&etm7_out>;
460 };
461 };
462 };
463 };
464
465 etf@11003000 { /* ETF on Cluster0 */
466 compatible = "arm,coresight-tmc", "arm,primecell";
467 reg = <0 0x11003000 0 0x1000>;
468 clocks = <&ext_26m>;
469 clock-names = "apb_pclk";
470
471 out-ports {
472 port {
473 cluster0_etf_out: endpoint {
474 remote-endpoint =
475 <&main_funnel_in_port0>;
476 };
477 };
478 };
479
480 in-ports {
481 port {
482 cluster0_etf_in: endpoint {
483 remote-endpoint =
484 <&cluster0_funnel_out_port>;
485 };
486 };
487 };
488 };
489
490 etf@11004000 { /* ETF on Cluster1 */
491 compatible = "arm,coresight-tmc", "arm,primecell";
492 reg = <0 0x11004000 0 0x1000>;
493 clocks = <&ext_26m>;
494 clock-names = "apb_pclk";
495
496 out-ports {
497 port {
498 cluster1_etf_out: endpoint {
499 remote-endpoint =
500 <&main_funnel_in_port1>;
501 };
502 };
503 };
504
505 in-ports {
506 port {
507 cluster1_etf_in: endpoint {
508 remote-endpoint =
509 <&cluster1_funnel_out_port>;
510 };
511 };
512 };
513 };
514
515 funnel@11005000 { /* Main Funnel */
516 compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
517 reg = <0 0x11005000 0 0x1000>;
518 clocks = <&ext_26m>;
519 clock-names = "apb_pclk";
520
521 out-ports {
522 port {
523 main_funnel_out_port: endpoint {
524 remote-endpoint =
525 <&soc_funnel_in_port0>;
526 };
527 };
528 };
529
530 in-ports {
531 #address-cells = <1>;
532 #size-cells = <0>;
533
534 port@0 {
535 reg = <0>;
536 main_funnel_in_port0: endpoint {
537 remote-endpoint =
538 <&cluster0_etf_out>;
539 };
540 };
541
542 port@1 {
543 reg = <1>;
544 main_funnel_in_port1: endpoint {
545 remote-endpoint =
546 <&cluster1_etf_out>;
547 };
548 };
549 };
550 };
551
552 etm@11440000 {
553 compatible = "arm,coresight-etm4x", "arm,primecell";
554 reg = <0 0x11440000 0 0x1000>;
555 cpu = <&CPU0>;
556 clocks = <&ext_26m>;
557 clock-names = "apb_pclk";
558
559 out-ports {
560 port {
561 etm0_out: endpoint {
562 remote-endpoint =
563 <&cluster0_funnel_in_port0>;
564 };
565 };
566 };
567 };
568
569 etm@11540000 {
570 compatible = "arm,coresight-etm4x", "arm,primecell";
571 reg = <0 0x11540000 0 0x1000>;
572 cpu = <&CPU1>;
573 clocks = <&ext_26m>;
574 clock-names = "apb_pclk";
575
576 out-ports {
577 port {
578 etm1_out: endpoint {
579 remote-endpoint =
580 <&cluster0_funnel_in_port1>;
581 };
582 };
583 };
584 };
585
586 etm@11640000 {
587 compatible = "arm,coresight-etm4x", "arm,primecell";
588 reg = <0 0x11640000 0 0x1000>;
589 cpu = <&CPU2>;
590 clocks = <&ext_26m>;
591 clock-names = "apb_pclk";
592
593 out-ports {
594 port {
595 etm2_out: endpoint {
596 remote-endpoint =
597 <&cluster0_funnel_in_port2>;
598 };
599 };
600 };
601 };
602
603 etm@11740000 {
604 compatible = "arm,coresight-etm4x", "arm,primecell";
605 reg = <0 0x11740000 0 0x1000>;
606 cpu = <&CPU3>;
607 clocks = <&ext_26m>;
608 clock-names = "apb_pclk";
609
610 out-ports {
611 port {
612 etm3_out: endpoint {
613 remote-endpoint =
614 <&cluster0_funnel_in_port3>;
615 };
616 };
617 };
618 };
619
620 etm@11840000 {
621 compatible = "arm,coresight-etm4x", "arm,primecell";
622 reg = <0 0x11840000 0 0x1000>;
623 cpu = <&CPU4>;
624 clocks = <&ext_26m>;
625 clock-names = "apb_pclk";
626
627 out-ports {
628 port {
629 etm4_out: endpoint {
630 remote-endpoint =
631 <&cluster1_funnel_in_port0>;
632 };
633 };
634 };
635 };
636
637 etm@11940000 {
638 compatible = "arm,coresight-etm4x", "arm,primecell";
639 reg = <0 0x11940000 0 0x1000>;
640 cpu = <&CPU5>;
641 clocks = <&ext_26m>;
642 clock-names = "apb_pclk";
643
644 out-ports {
645 port {
646 etm5_out: endpoint {
647 remote-endpoint =
648 <&cluster1_funnel_in_port1>;
649 };
650 };
651 };
652 };
653
654 etm@11a40000 {
655 compatible = "arm,coresight-etm4x", "arm,primecell";
656 reg = <0 0x11a40000 0 0x1000>;
657 cpu = <&CPU6>;
658 clocks = <&ext_26m>;
659 clock-names = "apb_pclk";
660
661 out-ports {
662 port {
663 etm6_out: endpoint {
664 remote-endpoint =
665 <&cluster1_funnel_in_port2>;
666 };
667 };
668 };
669 };
670
671 etm@11b40000 {
672 compatible = "arm,coresight-etm4x", "arm,primecell";
673 reg = <0 0x11b40000 0 0x1000>;
674 cpu = <&CPU7>;
675 clocks = <&ext_26m>;
676 clock-names = "apb_pclk";
677
678 out-ports {
679 port {
680 etm7_out: endpoint {
681 remote-endpoint =
682 <&cluster1_funnel_in_port3>;
683 };
684 };
685 };
686 };
687
688 gpio-keys {
689 compatible = "gpio-keys";
690
691 key-volumedown {
692 label = "Volume Down Key";
693 linux,code = <KEY_VOLUMEDOWN>;
694 gpios = <&eic_debounce 2 GPIO_ACTIVE_LOW>;
695 debounce-interval = <2>;
696 wakeup-source;
697 };
698
699 key-volumeup {
700 label = "Volume Up Key";
701 linux,code = <KEY_VOLUMEUP>;
702 gpios = <&pmic_eic 10 GPIO_ACTIVE_HIGH>;
703 debounce-interval = <2>;
704 wakeup-source;
705 };
706
707 key-power {
708 label = "Power Key";
709 linux,code = <KEY_POWER>;
710 gpios = <&pmic_eic 1 GPIO_ACTIVE_HIGH>;
711 debounce-interval = <2>;
712 wakeup-source;
713 };
714 };
715 };
716};