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