1/*
2 * Copyright (c) 2022 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#include <xtensa/xtensa.dtsi>
8#include <mem.h>
9
10/ {
11	cpus {
12		#address-cells = <1>;
13		#size-cells = <0>;
14
15		cpu0: cpu@0 {
16			device_type = "cpu";
17			compatible = "cdns,tensilica-xtensa-lx7";
18			reg = <0>;
19			cpu-power-states = <&d0i3 &d3>;
20			i-cache-line-size = <64>;
21			d-cache-line-size = <64>;
22		};
23
24		cpu1: cpu@1 {
25			device_type = "cpu";
26			compatible = "cdns,tensilica-xtensa-lx7";
27			reg = <1>;
28			cpu-power-states = <&d0i3 &d3>;
29		};
30
31		cpu2: cpu@2 {
32			device_type = "cpu";
33			compatible = "cdns,tensilica-xtensa-lx7";
34			reg = <2>;
35			cpu-power-states = <&d0i3 &d3>;
36		};
37
38		power-states {
39			d0i3: idle {
40				compatible = "zephyr,power-state";
41				power-state-name = "runtime-idle";
42				min-residency-us = <200>;
43				exit-latency-us = <100>;
44			};
45			/* PM_STATE_SOFT_OFF can be entered only by calling pm_state_force.
46			 * The procedure is triggered by IPC from the HOST (SET_DX).
47			 */
48			d3: off {
49				compatible = "zephyr,power-state";
50				power-state-name = "soft-off";
51				min-residency-us = <2147483647>;
52				exit-latency-us = <0>;
53			};
54		};
55	};
56
57	sram0: memory@a0020000 {
58		device_type = "memory";
59		compatible = "mmio-sram";
60		reg = <0xa0020000 DT_SIZE_K(2816)>;
61	};
62
63	sram0virtual: virtualmemory@a0020000 {
64		device_type = "memory";
65		compatible = "mmio-sram";
66		reg = <0xa0020000 DT_SIZE_K(8192)>;
67	};
68
69	sram1: memory@a0000000 {
70		device_type = "memory";
71		compatible = "mmio-sram";
72		reg = <0xa0000000 DT_SIZE_K(64)>;
73	};
74
75	sysclk: system-clock {
76		compatible = "fixed-clock";
77		clock-frequency = <38400000>;
78		#clock-cells = <0>;
79	};
80
81	clkctl: clkctl {
82		compatible = "intel,adsp-shim-clkctl";
83		adsp-clkctl-clk-wovcro = <0>;
84		adsp-clkctl-clk-ipll = <1>;
85		adsp-clkctl-freq-enc = <0xc 0x4>;
86		adsp-clkctl-freq-mask = <0x0 0x0>;
87		adsp-clkctl-freq-default = <1>;
88		adsp-clkctl-freq-lowest = <0>;
89		wovcro-supported;
90	};
91
92	audioclk: audio-clock {
93		compatible = "fixed-clock";
94		clock-frequency = <24576000>;
95		#clock-cells = <0>;
96	};
97
98	pllclk: pll-clock {
99		compatible = "fixed-clock";
100		clock-frequency = <96000000>;
101		#clock-cells = <0>;
102	};
103
104	IMR1: memory@A1000000 {
105		compatible = "intel,adsp-imr";
106		reg = <0xA1000000 DT_SIZE_M(16)>;
107		block-size = <0x1000>;
108		zephyr,memory-region = "IMR1";
109	};
110
111	soc {
112		core_intc: core_intc@0 {
113			compatible = "cdns,xtensa-core-intc";
114			reg = <0x00 0x400>;
115			interrupt-controller;
116			#interrupt-cells = <3>;
117		};
118
119		dmic0: dmic0@10000 {
120			compatible = "intel,dai-dmic";
121			reg = <0x10000 0x8000>;
122			shim = <0xC000>;
123			fifo = <0x0008>;
124			interrupts = <0x08 0 0>;
125			interrupt-parent = <&ace_intc>;
126			power-domain = <&hub_ulp_domain>;
127		};
128
129		dmic1: dmic1@10000 {
130			compatible = "intel,dai-dmic";
131			reg = <0x10000 0x8000>;
132			shim = <0xC000>;
133			fifo = <0x0108>;
134			interrupts = <0x09 0 0>;
135			interrupt-parent = <&ace_intc>;
136			power-domain = <&hub_ulp_domain>;
137		};
138
139		/*
140		 * FIXME this is modeling individual alh channels/instances
141		 * with node labels, which has problems. A better representation
142		 * is discussed here:
143		 *
144		 * https://github.com/zephyrproject-rtos/zephyr/pull/50287#discussion_r974591009
145		 *
146		 * The hardware actually supports 16 ALH streams/FIFOs. Below description does
147		 * not fully represent hardware capabilities and is expected to be modified.
148		 */
149		alh0: alh0@24400 {
150			compatible = "intel,alh-dai";
151			reg = <0x00024400 0x00024600>;
152			status = "okay";
153		};
154
155		alh1: alh1@24400 {
156			compatible = "intel,alh-dai";
157			reg = <0x00024400 0x00024600>;
158			status = "okay";
159		};
160
161		alh2: alh2@24400 {
162			compatible = "intel,alh-dai";
163			reg = <0x00024400 0x00024600>;
164			status = "okay";
165		};
166
167		alh3: alh3@24400 {
168			compatible = "intel,alh-dai";
169			reg = <0x00024400 0x00024600>;
170			status = "okay";
171		};
172
173		alh4: alh4@24400 {
174			compatible = "intel,alh-dai";
175			reg = <0x00024400 0x00024600>;
176			status = "okay";
177		};
178
179		alh5: alh5@24400 {
180			compatible = "intel,alh-dai";
181			reg = <0x00024400 0x00024600>;
182			status = "okay";
183		};
184
185		alh6: alh6@24400 {
186			compatible = "intel,alh-dai";
187			reg = <0x00024400 0x00024600>;
188			status = "okay";
189		};
190
191		alh7: alh7@24400 {
192			compatible = "intel,alh-dai";
193			reg = <0x00024400 0x00024600>;
194			status = "okay";
195		};
196
197		alh8: alh8@24400 {
198			compatible = "intel,alh-dai";
199			reg = <0x00024400 0x00024600>;
200			status = "okay";
201		};
202
203		alh9: alh9@24400 {
204			compatible = "intel,alh-dai";
205			reg = <0x00024400 0x00024600>;
206			status = "okay";
207		};
208
209		alh10: alh10@24400 {
210			compatible = "intel,alh-dai";
211			reg = <0x00024400 0x00024600>;
212			status = "okay";
213		};
214
215		alh11: alh11@24400 {
216			compatible = "intel,alh-dai";
217			reg = <0x00024400 0x00024600>;
218			status = "okay";
219		};
220
221		alh12: alh12@24400 {
222			compatible = "intel,alh-dai";
223			reg = <0x00024400 0x00024600>;
224			status = "okay";
225		};
226
227		alh13: alh13@24400 {
228			compatible = "intel,alh-dai";
229			reg = <0x00024400 0x00024600>;
230			status = "okay";
231		};
232
233		alh14: alh14@24400 {
234			compatible = "intel,alh-dai";
235			reg = <0x00024400 0x00024600>;
236			status = "okay";
237		};
238
239		alh15: alh15@24400 {
240			compatible = "intel,alh-dai";
241			reg = <0x00024400 0x00024600>;
242			status = "okay";
243		};
244
245		ssp0: ssp@28000 {
246			compatible = "intel,ssp-dai";
247			#address-cells = <1>;
248			#size-cells = <0>;
249			reg = <0x00028000 0x1000
250				   0x00079C00 0x200>;
251			interrupts = <0x00 0 0>;
252			interrupt-parent = <&ace_intc>;
253			dmas = <&lpgpdma0 2
254					&lpgpdma0 3>;
255			dma-names = "tx", "rx";
256			power-domain = <&io0_domain>;
257			status = "okay";
258		};
259
260		sspbase: ssp_base@28800 {
261			compatible = "intel,ssp-sspbase";
262			reg = <0x28800 0x1000>;
263		};
264
265		ssp1: ssp@29000 {
266			compatible = "intel,ssp-dai";
267			#address-cells = <1>;
268			#size-cells = <0>;
269			reg = <0x00029000 0x1000
270				   0x00079C00 0x200>;
271			interrupts = <0x01 0 0>;
272			interrupt-parent = <&ace_intc>;
273			dmas = <&lpgpdma0 4
274					&lpgpdma0 5>;
275			dma-names = "tx", "rx";
276			power-domain = <&io0_domain>;
277			status = "okay";
278		};
279
280		ssp2: ssp@2a000 {
281			compatible = "intel,ssp-dai";
282			#address-cells = <1>;
283			#size-cells = <0>;
284			reg = <0x0002a000 0x1000
285				   0x00079C00 0x200>;
286			interrupts = <0x02 0 0>;
287			interrupt-parent = <&ace_intc>;
288			dmas = <&lpgpdma0 6
289					&lpgpdma0 7>;
290			dma-names = "tx", "rx";
291			power-domain = <&io0_domain>;
292			status = "okay";
293		};
294
295		ssp3: ssp@2b000 {
296			compatible = "intel,ssp-dai";
297			#address-cells = <1>;
298			#size-cells = <0>;
299			reg = <0x0002b000 0x1000
300				   0x00079C00 0x200>;
301			interrupts = <0x03 0 0>;
302			interrupt-parent = <&ace_intc>;
303			dmas = <&lpgpdma0 8
304					&lpgpdma0 9>;
305			dma-names = "tx", "rx";
306			power-domain = <&io0_domain>;
307			status = "okay";
308		};
309
310		ssp4: ssp@2c000 {
311			compatible = "intel,ssp-dai";
312			#address-cells = <1>;
313			#size-cells = <0>;
314			reg = <0x0002c000 0x1000
315				   0x00079C00 0x200>;
316			interrupts = <0x04 0 0>;
317			interrupt-parent = <&ace_intc>;
318			dmas = <&lpgpdma0 10
319					&lpgpdma0 11>;
320			dma-names = "tx", "rx";
321			power-domain = <&io0_domain>;
322			status = "okay";
323		};
324
325		ssp5: ssp@2d000 {
326			compatible = "intel,ssp-dai";
327			#address-cells = <1>;
328			#size-cells = <0>;
329			reg = <0x0002d000 0x1000
330				   0x00079C00 0x200>;
331			interrupts = <0x04 0 0>;
332			interrupt-parent = <&ace_intc>;
333			dmas = <&lpgpdma0 12
334					&lpgpdma0 13>;
335			dma-names = "tx", "rx";
336			power-domain = <&io0_domain>;
337			status = "okay";
338		};
339
340		mem_window0: mem_window@70200 {
341			compatible = "intel,adsp-mem-window";
342			reg = <0x70200 0x8>;
343			offset = <0x4000>;
344			memory = <&sram0>;
345			initialize;
346			read-only;
347		};
348
349		mem_window1: mem_window@70208 {
350			compatible = "intel,adsp-mem-window";
351			reg = <0x70208 0x8>;
352			memory = <&sram0>;
353		};
354
355		mem_window2: mem_window@70210 {
356			compatible = "intel,adsp-mem-window";
357			reg = <0x70210 0x8>;
358			memory = <&sram0>;
359		};
360
361		mem_window3: mem_window@70218 {
362			compatible = "intel,adsp-mem-window";
363			reg = <0x70218 0x8>;
364			memory = <&sram0>;
365			read-only;
366		};
367
368		adsp_idc: ace_idc@70400 {
369			compatible = "intel,adsp-idc";
370			reg = <0x70400 0x0400>;
371			interrupts = <24 0 0>;
372			interrupt-parent = <&ace_intc>;
373		};
374
375		dfpmcch: dfpmcch@71ac0 {
376			compatible = "intel,adsp-dfpmcch";
377			reg = <0x00071ac0 0x40>;
378		};
379
380		dfpmccu: dfpmccu@71b00 {
381			compatible = "intel,adsp-dfpmccu";
382			reg = <0x71b00 0x100>;
383
384			hub_ulp_domain: hub_ulp_domain {
385				compatible = "intel,adsp-power-domain";
386				bit-position = <15>;
387			};
388			hub_hp_domain: hub_hp_domain {
389				compatible = "intel,adsp-power-domain";
390				bit-position = <6>;
391			};
392			io0_domain: io0_domain {
393				compatible = "intel,adsp-power-domain";
394				bit-position = <8>;
395			};
396			io1_domain: io1_domain {
397				compatible = "intel,adsp-power-domain";
398				bit-position = <9>;
399			};
400			io2_domain: io2_domain {
401				compatible = "intel,adsp-power-domain";
402				bit-position = <10>;
403			};
404			io3_domain: io3_domain {
405				compatible = "intel,adsp-power-domain";
406				bit-position = <11>;
407			};
408			hst_domain: hst_domain {
409				compatible = "intel,adsp-power-domain";
410				bit-position = <4>;
411			};
412			ml0_domain: ml0_domain {
413				compatible = "intel,adsp-power-domain";
414				bit-position = <12>;
415			};
416			ml1_domain: ml1_domain {
417				compatible = "intel,adsp-power-domain";
418				bit-position = <13>;
419			};
420		};
421
422		ace_comm_widget: ace_comm_widget@71c00 {
423			compatible = "intel,adsp-communication-widget";
424			reg = <0x00071c00 0x100>;
425			interrupts = <0x19 0 0>;
426			interrupt-parent = <&ace_intc>;
427			status = "okay";
428		};
429
430		shim: shim@71f00 {
431			compatible = "intel,adsp-shim";
432			reg = <0x71f00 0x100>;
433		};
434
435		tts: tts@72000 {
436			compatible = "intel,adsp-tts";
437			reg = <0x72000 0x70>;
438			status = "okay";
439		};
440
441		ace_rtc_counter: ace_rtc_counter@72008 {
442			compatible = "intel,ace-rtc-counter";
443			reg = <0x72008 0x0064>;
444		};
445
446		ace_timestamp: ace_timestamp@72040 {
447			compatible = "intel,ace-timestamp";
448			reg = <0x72040 0x0032>;
449		};
450
451		ace_art_counter: ace_art_counter@72058 {
452			compatible = "intel,ace-art-counter";
453			reg = <0x72058 0x0064>;
454		};
455
456		hda_link_out: dma@72400 {
457			compatible = "intel,adsp-hda-link-out";
458			#dma-cells = <1>;
459			reg = <0x00072400 0x20>;
460			dma-channels = <9>;
461			dma-buf-addr-alignment = <128>;
462			dma-buf-size-alignment = <32>;
463			dma-copy-alignment = <32>;
464			power-domain = <&hst_domain>;
465			status = "okay";
466		};
467
468		hda_link_in: dma@72600 {
469			compatible = "intel,adsp-hda-link-in";
470			#dma-cells = <1>;
471			reg = <0x00072600 0x20>;
472			dma-channels = <10>;
473			dma-buf-addr-alignment = <128>;
474			dma-buf-size-alignment = <32>;
475			dma-copy-alignment = <32>;
476			power-domain = <&hst_domain>;
477			status = "okay";
478		};
479
480		hda_host_out: dma@72800 {
481			compatible = "intel,adsp-hda-host-out";
482			#dma-cells = <1>;
483			reg = <0x00072800 0x40>;
484			dma-channels = <9>;
485			dma-buf-addr-alignment = <128>;
486			dma-buf-size-alignment = <32>;
487			dma-copy-alignment = <32>;
488			power-domain = <&hst_domain>;
489			interrupts = <13 0 0>;
490			interrupt-parent = <&ace_intc>;
491			status = "okay";
492		};
493
494		hda_host_in: dma@72c00 {
495			compatible = "intel,adsp-hda-host-in";
496			#dma-cells = <1>;
497			reg = <0x00072c00 0x40>;
498			dma-channels = <10>;
499			dma-buf-addr-alignment = <128>;
500			dma-buf-size-alignment = <32>;
501			dma-copy-alignment = <32>;
502			power-domain = <&hst_domain>;
503			interrupts = <12 0 0>;
504			interrupt-parent = <&ace_intc>;
505			status = "okay";
506		};
507
508		adsp_host_ipc: ace_host_ipc@73000 {
509			compatible = "intel,adsp-host-ipc";
510			status = "okay";
511			reg = <0x73000 0x30>;
512			interrupts = <0 0 0>;
513			interrupt-parent = <&ace_intc>;
514		};
515
516		/* This is actually an array of per-core designware
517		 * controllers, but the special setup and extra
518		 * masking layer makes it easier for MTL to handle
519		 * this internally.
520		 */
521		ace_intc: ace_intc@7ac00  {
522			compatible = "intel,ace-intc";
523			reg = <0x7ac00 0xc00>;
524			interrupt-controller;
525			#interrupt-cells = <3>;
526			interrupts = <4 0 0>;
527			num-irqs = <28>;
528			interrupt-parent = <&core_intc>;
529		};
530
531		lpgpdma0: dma@7c000 {
532			compatible = "intel,adsp-gpdma";
533			#dma-cells = <1>;
534			reg = <0x0007c000 0x1000>;
535			shim = <0x0007c800 0x1000>;
536			interrupts = <17 0 0>;
537			interrupt-parent = <&ace_intc>;
538			dma-buf-size-alignment = <4>;
539			dma-copy-alignment = <4>;
540			status = "okay";
541			power-domain = <&hub_ulp_domain>;
542			zephyr,pm-device-runtime-auto;
543		};
544
545		lpgpdma1: dma@7d000 {
546			compatible = "intel,adsp-gpdma";
547			#dma-cells = <1>;
548			reg = <0x0007d000 0x1000>;
549			shim = <0x0007d800 0x1000>;
550			interrupts = <0x20 0 0>;
551			interrupt-parent = <&core_intc>;
552			dma-buf-size-alignment = <4>;
553			dma-copy-alignment = <4>;
554			status = "okay";
555			power-domain = <&io0_domain>;
556			zephyr,pm-device-runtime-auto;
557		};
558
559		lpgpdma2: dma@7e000 {
560			compatible = "intel,adsp-gpdma";
561			#dma-cells = <1>;
562			reg = <0x0007e000 0x1000>;
563			shim = <0x0007e800 0x1000>;
564			interrupts = <0x25 0 0>;
565			interrupt-parent = <&core_intc>;
566			dma-buf-size-alignment = <4>;
567			dma-copy-alignment = <4>;
568			power-domain = <&io0_domain>;
569			status = "okay";
570			zephyr,pm-device-runtime-auto;
571		};
572
573		sha: adsp-sha@17df00 {
574			compatible = "intel,adsp-sha";
575			reg = <0x17df00 0xd0>;
576		};
577
578		tlb: tlb@17e000 {
579			compatible = "intel,adsp-mtl-tlb";
580			reg = <0x17e000 0x1000>;
581			paddr-size = <12>;
582			exec-bit-idx = <14>;
583			write-bit-idx= <15>;
584		};
585
586		timer: timer {
587			compatible = "intel,adsp-timer";
588			syscon = <&tts>;
589		};
590	};
591
592	hdas {
593		#address-cells = <1>;
594		#size-cells = <0>;
595
596		hda0: hda@0 {
597			compatible = "intel,hda-dai";
598			status = "okay";
599			reg = <0>;
600		};
601		hda1: hda@1 {
602			compatible = "intel,hda-dai";
603			status = "okay";
604			reg = <1>;
605		};
606		hda2: hda@2 {
607			compatible = "intel,hda-dai";
608			status = "okay";
609			reg = <2>;
610		};
611		hda3: hda@3 {
612			compatible = "intel,hda-dai";
613			status = "okay";
614			reg = <3>;
615		};
616		hda4: hda@4 {
617			compatible = "intel,hda-dai";
618			status = "okay";
619			reg = <4>;
620		};
621		hda5: hda@5 {
622			compatible = "intel,hda-dai";
623			status = "okay";
624			reg = <5>;
625		};
626		hda6: hda@6 {
627			compatible = "intel,hda-dai";
628			status = "okay";
629			reg = <6>;
630		};
631		hda7: hda@7 {
632			compatible = "intel,hda-dai";
633			status = "okay";
634			reg = <7>;
635		};
636		hda8: hda@8 {
637			compatible = "intel,hda-dai";
638			status = "okay";
639			reg = <8>;
640		};
641		hda9: hda@9 {
642			compatible = "intel,hda-dai";
643			status = "okay";
644			reg = <9>;
645		};
646		hda10: hda@a {
647			compatible = "intel,hda-dai";
648			status = "okay";
649			reg = <0x0a>;
650		};
651		hda11: hda@b {
652			compatible = "intel,hda-dai";
653			status = "okay";
654			reg = <0x0b>;
655		};
656		hda12: hda@c {
657			compatible = "intel,hda-dai";
658			status = "okay";
659			reg = <0x0c>;
660		};
661		hda13: hda@d {
662			compatible = "intel,hda-dai";
663			status = "okay";
664			reg = <0x0d>;
665		};
666		hda14: hda@e {
667			compatible = "intel,hda-dai";
668			status = "okay";
669			reg = <0x0e>;
670		};
671		hda15: hda@f {
672			compatible = "intel,hda-dai";
673			status = "okay";
674			reg = <0x0f>;
675		};
676		hda16: hda@10 {
677			compatible = "intel,hda-dai";
678			status = "okay";
679			reg = <0x10>;
680		};
681		hda17: hda@11 {
682			compatible = "intel,hda-dai";
683			status = "okay";
684			reg = <0x11>;
685		};
686		hda18: hda@12 {
687			compatible = "intel,hda-dai";
688			status = "okay";
689			reg = <0x12>;
690		};
691	};
692};
693