blob: 514be453dbaf6713cdf4ad5a5d653488297ebb83 [file] [log] [blame]
Kongyang Liuad9c1432024-12-15 13:02:41 +08001// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
2/*
3 * Copyright (C) 2024 Yangyu Chen <cyy@cyyself.name>
4 */
5
6/dts-v1/;
7/ {
8 #address-cells = <2>;
9 #size-cells = <2>;
10 model = "SpacemiT K1";
11 compatible = "spacemit,k1";
12
13 aliases {
14 serial0 = &uart0;
15 serial1 = &uart2;
16 serial2 = &uart3;
17 serial3 = &uart4;
18 serial4 = &uart5;
19 serial5 = &uart6;
20 serial6 = &uart7;
21 serial7 = &uart8;
22 serial8 = &uart9;
23 };
24
25 cpus {
26 #address-cells = <1>;
27 #size-cells = <0>;
28 timebase-frequency = <24000000>;
29
30 cpu-map {
31 cluster0 {
32 core0 {
33 cpu = <&cpu_0>;
34 };
35 core1 {
36 cpu = <&cpu_1>;
37 };
38 core2 {
39 cpu = <&cpu_2>;
40 };
41 core3 {
42 cpu = <&cpu_3>;
43 };
44 };
45
46 cluster1 {
47 core0 {
48 cpu = <&cpu_4>;
49 };
50 core1 {
51 cpu = <&cpu_5>;
52 };
53 core2 {
54 cpu = <&cpu_6>;
55 };
56 core3 {
57 cpu = <&cpu_7>;
58 };
59 };
60 };
61
62 cpu_0: cpu@0 {
63 compatible = "spacemit,x60", "riscv";
64 device_type = "cpu";
65 reg = <0>;
66 riscv,isa = "rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_zkt_zvfh_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt";
67 riscv,isa-base = "rv64i";
68 riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "v", "zicbom",
69 "zicbop", "zicboz", "zicntr", "zicond", "zicsr",
70 "zifencei", "zihintpause", "zihpm", "zfh", "zba",
71 "zbb", "zbc", "zbs", "zkt", "zvfh", "zvkt",
72 "sscofpmf", "sstc", "svinval", "svnapot", "svpbmt";
73 riscv,cbom-block-size = <64>;
74 riscv,cbop-block-size = <64>;
75 riscv,cboz-block-size = <64>;
76 i-cache-block-size = <64>;
77 i-cache-size = <32768>;
78 i-cache-sets = <128>;
79 d-cache-block-size = <64>;
80 d-cache-size = <32768>;
81 d-cache-sets = <128>;
82 next-level-cache = <&cluster0_l2_cache>;
83 mmu-type = "riscv,sv39";
84
85 cpu0_intc: interrupt-controller {
86 compatible = "riscv,cpu-intc";
87 interrupt-controller;
88 #interrupt-cells = <1>;
89 };
90 };
91
92 cpu_1: cpu@1 {
93 compatible = "spacemit,x60", "riscv";
94 device_type = "cpu";
95 reg = <1>;
96 riscv,isa = "rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_zkt_zvfh_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt";
97 riscv,isa-base = "rv64i";
98 riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "v", "zicbom",
99 "zicbop", "zicboz", "zicntr", "zicond", "zicsr",
100 "zifencei", "zihintpause", "zihpm", "zfh", "zba",
101 "zbb", "zbc", "zbs", "zkt", "zvfh", "zvkt",
102 "sscofpmf", "sstc", "svinval", "svnapot", "svpbmt";
103 riscv,cbom-block-size = <64>;
104 riscv,cbop-block-size = <64>;
105 riscv,cboz-block-size = <64>;
106 i-cache-block-size = <64>;
107 i-cache-size = <32768>;
108 i-cache-sets = <128>;
109 d-cache-block-size = <64>;
110 d-cache-size = <32768>;
111 d-cache-sets = <128>;
112 next-level-cache = <&cluster0_l2_cache>;
113 mmu-type = "riscv,sv39";
114
115 cpu1_intc: interrupt-controller {
116 compatible = "riscv,cpu-intc";
117 interrupt-controller;
118 #interrupt-cells = <1>;
119 };
120 };
121
122 cpu_2: cpu@2 {
123 compatible = "spacemit,x60", "riscv";
124 device_type = "cpu";
125 reg = <2>;
126 riscv,isa = "rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_zkt_zvfh_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt";
127 riscv,isa-base = "rv64i";
128 riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "v", "zicbom",
129 "zicbop", "zicboz", "zicntr", "zicond", "zicsr",
130 "zifencei", "zihintpause", "zihpm", "zfh", "zba",
131 "zbb", "zbc", "zbs", "zkt", "zvfh", "zvkt",
132 "sscofpmf", "sstc", "svinval", "svnapot", "svpbmt";
133 riscv,cbom-block-size = <64>;
134 riscv,cbop-block-size = <64>;
135 riscv,cboz-block-size = <64>;
136 i-cache-block-size = <64>;
137 i-cache-size = <32768>;
138 i-cache-sets = <128>;
139 d-cache-block-size = <64>;
140 d-cache-size = <32768>;
141 d-cache-sets = <128>;
142 next-level-cache = <&cluster0_l2_cache>;
143 mmu-type = "riscv,sv39";
144
145 cpu2_intc: interrupt-controller {
146 compatible = "riscv,cpu-intc";
147 interrupt-controller;
148 #interrupt-cells = <1>;
149 };
150 };
151
152 cpu_3: cpu@3 {
153 compatible = "spacemit,x60", "riscv";
154 device_type = "cpu";
155 reg = <3>;
156 riscv,isa = "rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_zkt_zvfh_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt";
157 riscv,isa-base = "rv64i";
158 riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "v", "zicbom",
159 "zicbop", "zicboz", "zicntr", "zicond", "zicsr",
160 "zifencei", "zihintpause", "zihpm", "zfh", "zba",
161 "zbb", "zbc", "zbs", "zkt", "zvfh", "zvkt",
162 "sscofpmf", "sstc", "svinval", "svnapot", "svpbmt";
163 riscv,cbom-block-size = <64>;
164 riscv,cbop-block-size = <64>;
165 riscv,cboz-block-size = <64>;
166 i-cache-block-size = <64>;
167 i-cache-size = <32768>;
168 i-cache-sets = <128>;
169 d-cache-block-size = <64>;
170 d-cache-size = <32768>;
171 d-cache-sets = <128>;
172 next-level-cache = <&cluster0_l2_cache>;
173 mmu-type = "riscv,sv39";
174
175 cpu3_intc: interrupt-controller {
176 compatible = "riscv,cpu-intc";
177 interrupt-controller;
178 #interrupt-cells = <1>;
179 };
180 };
181
182 cpu_4: cpu@4 {
183 compatible = "spacemit,x60", "riscv";
184 device_type = "cpu";
185 reg = <4>;
186 riscv,isa = "rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_zkt_zvfh_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt";
187 riscv,isa-base = "rv64i";
188 riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "v", "zicbom",
189 "zicbop", "zicboz", "zicntr", "zicond", "zicsr",
190 "zifencei", "zihintpause", "zihpm", "zfh", "zba",
191 "zbb", "zbc", "zbs", "zkt", "zvfh", "zvkt",
192 "sscofpmf", "sstc", "svinval", "svnapot", "svpbmt";
193 riscv,cbom-block-size = <64>;
194 riscv,cbop-block-size = <64>;
195 riscv,cboz-block-size = <64>;
196 i-cache-block-size = <64>;
197 i-cache-size = <32768>;
198 i-cache-sets = <128>;
199 d-cache-block-size = <64>;
200 d-cache-size = <32768>;
201 d-cache-sets = <128>;
202 next-level-cache = <&cluster1_l2_cache>;
203 mmu-type = "riscv,sv39";
204
205 cpu4_intc: interrupt-controller {
206 compatible = "riscv,cpu-intc";
207 interrupt-controller;
208 #interrupt-cells = <1>;
209 };
210 };
211
212 cpu_5: cpu@5 {
213 compatible = "spacemit,x60", "riscv";
214 device_type = "cpu";
215 reg = <5>;
216 riscv,isa = "rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_zkt_zvfh_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt";
217 riscv,isa-base = "rv64i";
218 riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "v", "zicbom",
219 "zicbop", "zicboz", "zicntr", "zicond", "zicsr",
220 "zifencei", "zihintpause", "zihpm", "zfh", "zba",
221 "zbb", "zbc", "zbs", "zkt", "zvfh", "zvkt",
222 "sscofpmf", "sstc", "svinval", "svnapot", "svpbmt";
223 riscv,cbom-block-size = <64>;
224 riscv,cbop-block-size = <64>;
225 riscv,cboz-block-size = <64>;
226 i-cache-block-size = <64>;
227 i-cache-size = <32768>;
228 i-cache-sets = <128>;
229 d-cache-block-size = <64>;
230 d-cache-size = <32768>;
231 d-cache-sets = <128>;
232 next-level-cache = <&cluster1_l2_cache>;
233 mmu-type = "riscv,sv39";
234
235 cpu5_intc: interrupt-controller {
236 compatible = "riscv,cpu-intc";
237 interrupt-controller;
238 #interrupt-cells = <1>;
239 };
240 };
241
242 cpu_6: cpu@6 {
243 compatible = "spacemit,x60", "riscv";
244 device_type = "cpu";
245 reg = <6>;
246 riscv,isa = "rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_zkt_zvfh_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt";
247 riscv,isa-base = "rv64i";
248 riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "v", "zicbom",
249 "zicbop", "zicboz", "zicntr", "zicond", "zicsr",
250 "zifencei", "zihintpause", "zihpm", "zfh", "zba",
251 "zbb", "zbc", "zbs", "zkt", "zvfh", "zvkt",
252 "sscofpmf", "sstc", "svinval", "svnapot", "svpbmt";
253 riscv,cbom-block-size = <64>;
254 riscv,cbop-block-size = <64>;
255 riscv,cboz-block-size = <64>;
256 i-cache-block-size = <64>;
257 i-cache-size = <32768>;
258 i-cache-sets = <128>;
259 d-cache-block-size = <64>;
260 d-cache-size = <32768>;
261 d-cache-sets = <128>;
262 next-level-cache = <&cluster1_l2_cache>;
263 mmu-type = "riscv,sv39";
264
265 cpu6_intc: interrupt-controller {
266 compatible = "riscv,cpu-intc";
267 interrupt-controller;
268 #interrupt-cells = <1>;
269 };
270 };
271
272 cpu_7: cpu@7 {
273 compatible = "spacemit,x60", "riscv";
274 device_type = "cpu";
275 reg = <7>;
276 riscv,isa = "rv64imafdcv_zicbom_zicbop_zicboz_zicntr_zicond_zicsr_zifencei_zihintpause_zihpm_zfh_zba_zbb_zbc_zbs_zkt_zvfh_zvkt_sscofpmf_sstc_svinval_svnapot_svpbmt";
277 riscv,isa-base = "rv64i";
278 riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "v", "zicbom",
279 "zicbop", "zicboz", "zicntr", "zicond", "zicsr",
280 "zifencei", "zihintpause", "zihpm", "zfh", "zba",
281 "zbb", "zbc", "zbs", "zkt", "zvfh", "zvkt",
282 "sscofpmf", "sstc", "svinval", "svnapot", "svpbmt";
283 riscv,cbom-block-size = <64>;
284 riscv,cbop-block-size = <64>;
285 riscv,cboz-block-size = <64>;
286 i-cache-block-size = <64>;
287 i-cache-size = <32768>;
288 i-cache-sets = <128>;
289 d-cache-block-size = <64>;
290 d-cache-size = <32768>;
291 d-cache-sets = <128>;
292 next-level-cache = <&cluster1_l2_cache>;
293 mmu-type = "riscv,sv39";
294
295 cpu7_intc: interrupt-controller {
296 compatible = "riscv,cpu-intc";
297 interrupt-controller;
298 #interrupt-cells = <1>;
299 };
300 };
301
302 cluster0_l2_cache: l2-cache0 {
303 compatible = "cache";
304 cache-block-size = <64>;
305 cache-level = <2>;
306 cache-size = <524288>;
307 cache-sets = <512>;
308 cache-unified;
309 };
310
311 cluster1_l2_cache: l2-cache1 {
312 compatible = "cache";
313 cache-block-size = <64>;
314 cache-level = <2>;
315 cache-size = <524288>;
316 cache-sets = <512>;
317 cache-unified;
318 };
319 };
320
321 soc {
322 compatible = "simple-bus";
323 interrupt-parent = <&plic>;
324 #address-cells = <2>;
325 #size-cells = <2>;
326 dma-noncoherent;
327 ranges;
328
329 uart0: serial@d4017000 {
330 compatible = "spacemit,k1-uart", "snps,dw-apb-uart";
331 reg = <0x0 0xd4017000 0x0 0x100>;
332 interrupts = <42>;
333 clock-frequency = <14857000>;
334 reg-shift = <2>;
335 reg-io-width = <4>;
336 status = "disabled";
337 };
338
339 uart2: serial@d4017100 {
340 compatible = "spacemit,k1-uart", "snps,dw-apb-uart";
341 reg = <0x0 0xd4017100 0x0 0x100>;
342 interrupts = <44>;
343 clock-frequency = <14857000>;
344 reg-shift = <2>;
345 reg-io-width = <4>;
346 status = "disabled";
347 };
348
349 uart3: serial@d4017200 {
350 compatible = "spacemit,k1-uart", "snps,dw-apb-uart";
351 reg = <0x0 0xd4017200 0x0 0x100>;
352 interrupts = <45>;
353 clock-frequency = <14857000>;
354 reg-shift = <2>;
355 reg-io-width = <4>;
356 status = "disabled";
357 };
358
359 uart4: serial@d4017300 {
360 compatible = "spacemit,k1-uart", "snps,dw-apb-uart";
361 reg = <0x0 0xd4017300 0x0 0x100>;
362 interrupts = <46>;
363 clock-frequency = <14857000>;
364 reg-shift = <2>;
365 reg-io-width = <4>;
366 status = "disabled";
367 };
368
369 uart5: serial@d4017400 {
370 compatible = "spacemit,k1-uart", "snps,dw-apb-uart";
371 reg = <0x0 0xd4017400 0x0 0x100>;
372 interrupts = <47>;
373 clock-frequency = <14857000>;
374 reg-shift = <2>;
375 reg-io-width = <4>;
376 status = "disabled";
377 };
378
379 uart6: serial@d4017500 {
380 compatible = "spacemit,k1-uart", "snps,dw-apb-uart";
381 reg = <0x0 0xd4017500 0x0 0x100>;
382 interrupts = <48>;
383 clock-frequency = <14857000>;
384 reg-shift = <2>;
385 reg-io-width = <4>;
386 status = "disabled";
387 };
388
389 uart7: serial@d4017600 {
390 compatible = "spacemit,k1-uart", "snps,dw-apb-uart";
391 reg = <0x0 0xd4017600 0x0 0x100>;
392 interrupts = <49>;
393 clock-frequency = <14857000>;
394 reg-shift = <2>;
395 reg-io-width = <4>;
396 status = "disabled";
397 };
398
399 uart8: serial@d4017700 {
400 compatible = "spacemit,k1-uart", "snps,dw-apb-uart";
401 reg = <0x0 0xd4017700 0x0 0x100>;
402 interrupts = <50>;
403 clock-frequency = <14857000>;
404 reg-shift = <2>;
405 reg-io-width = <4>;
406 status = "disabled";
407 };
408
409 uart9: serial@d4017800 {
410 compatible = "spacemit,k1-uart", "snps,dw-apb-uart";
411 reg = <0x0 0xd4017800 0x0 0x100>;
412 interrupts = <51>;
413 clock-frequency = <14857000>;
414 reg-shift = <2>;
415 reg-io-width = <4>;
416 status = "disabled";
417 };
418
419 plic: interrupt-controller@e0000000 {
420 compatible = "spacemit,k1-plic", "sifive,plic-1.0.0";
421 reg = <0x0 0xe0000000 0x0 0x4000000>;
422 interrupts-extended = <&cpu0_intc 11>, <&cpu0_intc 9>,
423 <&cpu1_intc 11>, <&cpu1_intc 9>,
424 <&cpu2_intc 11>, <&cpu2_intc 9>,
425 <&cpu3_intc 11>, <&cpu3_intc 9>,
426 <&cpu4_intc 11>, <&cpu4_intc 9>,
427 <&cpu5_intc 11>, <&cpu5_intc 9>,
428 <&cpu6_intc 11>, <&cpu6_intc 9>,
429 <&cpu7_intc 11>, <&cpu7_intc 9>;
430 interrupt-controller;
431 #address-cells = <0>;
432 #interrupt-cells = <1>;
433 riscv,ndev = <159>;
434 };
435
436 clint: timer@e4000000 {
437 compatible = "spacemit,k1-clint", "sifive,clint0";
438 reg = <0x0 0xe4000000 0x0 0x10000>;
439 interrupts-extended = <&cpu0_intc 3>, <&cpu0_intc 7>,
440 <&cpu1_intc 3>, <&cpu1_intc 7>,
441 <&cpu2_intc 3>, <&cpu2_intc 7>,
442 <&cpu3_intc 3>, <&cpu3_intc 7>,
443 <&cpu4_intc 3>, <&cpu4_intc 7>,
444 <&cpu5_intc 3>, <&cpu5_intc 7>,
445 <&cpu6_intc 3>, <&cpu6_intc 7>,
446 <&cpu7_intc 3>, <&cpu7_intc 7>;
447 };
448
449 sec_uart1: serial@f0612000 {
450 compatible = "spacemit,k1-uart", "snps,dw-apb-uart";
451 reg = <0x0 0xf0612000 0x0 0x100>;
452 interrupts = <43>;
453 clock-frequency = <14857000>;
454 reg-shift = <2>;
455 reg-io-width = <4>;
456 status = "reserved"; /* for TEE usage */
457 };
458 };
459};