Linux Audio

Check our new training course

Loading...
/*
 * Copyright (c) 2022 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <xtensa/xtensa.dtsi>
#include <mem.h>

/ {
	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		cpu0: cpu@0 {
			device_type = "cpu";
			compatible = "cdns,tensilica-xtensa-lx7";
			reg = <0>;
			cpu-power-states = <&d0i3 &d3>;
		};

		cpu1: cpu@1 {
			device_type = "cpu";
			compatible = "cdns,tensilica-xtensa-lx7";
			reg = <1>;
			cpu-power-states = <&d0i3 &d3>;
		};

		cpu2: cpu@2 {
			device_type = "cpu";
			compatible = "cdns,tensilica-xtensa-lx7";
			reg = <2>;
			cpu-power-states = <&d0i3 &d3>;
		};
	};

	power-states {
		d0i3: idle {
			compatible = "zephyr,power-state";
			power-state-name = "runtime-idle";
			min-residency-us = <200>;
			exit-latency-us = <100>;
		};
		/* PM_STATE_SOFT_OFF can be entered only by calling pm_state_force.
		 * The procedure is triggered by IPC from the HOST (SET_DX).
		 */
		d3: off {
			compatible = "zephyr,power-state";
			power-state-name = "soft-off";
			min-residency-us = <2147483647>;
			exit-latency-us = <0>;
		};
	};

	sram0: memory@a0020000 {
		device_type = "memory";
		compatible = "mmio-sram";
		reg = <0xa0020000 DT_SIZE_K(2816)>;
	};

	sram1: memory@a0000000 {
		device_type = "memory";
		compatible = "mmio-sram";
		reg = <0xa0000000 DT_SIZE_K(64)>;
	};

	sysclk: system-clock {
		compatible = "fixed-clock";
		clock-frequency = <38400000>;
		#clock-cells = <0>;
	};

	audioclk: audio-clock {
		compatible = "fixed-clock";
		clock-frequency = <24576000>;
		#clock-cells = <0>;
	};

	pllclk: pll-clock {
		compatible = "fixed-clock";
		clock-frequency = <96000000>;
		#clock-cells = <0>;
	};

	IMR1: memory@A1000000 {
		compatible = "intel,adsp-imr";
		reg = <0xA1000000 DT_SIZE_M(16)>;
		block-size = <0x1000>;
		zephyr,memory-region = "IMR1";
	};

	soc {
		core_intc: core_intc@0 {
			compatible = "cdns,xtensa-core-intc";
			reg = <0x00 0x400>;
			interrupt-controller;
			#interrupt-cells = <3>;
		};

		adsp_host_ipc: ace_host_ipc@73000 {
			compatible = "intel,adsp-host-ipc";
			status = "okay";
			reg = <0x73000 0x30>;
			interrupts = <0 0 0>;
			interrupt-parent = <&ace_intc>;
		};

		adsp_idc: ace_idc@70400 {
			compatible = "intel,adsp-idc";
			reg = <0x70400 0x0400>;
			interrupts = <24 0 0>;
			interrupt-parent = <&ace_intc>;
		};

		/* This is actually an array of per-core designware
		 * controllers, but the special setup and extra
		 * masking layer makes it easier for MTL to handle
		 * this internally.
		 */
		ace_intc: ace_intc@7ac00  {
			compatible = "intel,ace-intc";
			reg = <0x7ac00 0xc00>;
			interrupt-controller;
			#interrupt-cells = <3>;
			interrupts = <4 0 0>;
			num-irqs = <28>;
			interrupt-parent = <&core_intc>;
		};

		ace_timestamp: ace_timestamp@72040 {
			compatible = "intel,ace-timestamp";
			reg = <0x72040 0x0032>;
		};

		ace_art_counter: ace_art_counter@72058 {
			compatible = "intel,ace-art-counter";
			reg = <0x72058 0x0064>;
		};

		ace_rtc_counter: ace_rtc_counter@72008 {
			compatible = "intel,ace-rtc-counter";
			reg = <0x72008 0x0064>;
		};

		shim: shim@71f00 {
			compatible = "intel,adsp-shim";
			reg = <0x71f00 0x100>;
		};

		lps: lps@71ac0 {
			compatible = "intel,adsp-lps";
			reg = <0x00071ac0 0x100>;
		};

		sspbase: ssp_base@28800 {
			compatible = "intel,ssp-sspbase";
			reg = <0x28800 0x1000>;
		};

		win: win@70200 {
			compatible = "intel,cavs-win";
			reg = <0x70200 0x30>;
		};

		tlb: tlb@17e000 {
			compatible = "intel,adsp-mtl-tlb";
			reg = <0x17e000 0x1000>;
			paddr-size = <12>;
			exec-bit-idx = <14>;
			write-bit-idx= <15>;
		};

		lpgpdma0: dma@7c000 {
			compatible = "intel,adsp-gpdma";
			#dma-cells = <1>;
			reg = <0x0007c000 0x1000>;
			shim = <0x0007c800 0x1000>;
			interrupts = <0x10 0 0>;
			interrupt-parent = <&core_intc>;
			status = "okay";
		};

		lpgpdma1: dma@7d000 {
			compatible = "intel,adsp-gpdma";
			#dma-cells = <1>;
			reg = <0x0007d000 0x1000>;
			shim = <0x0007d800 0x1000>;
			interrupts = <0x20 0 0>;
			interrupt-parent = <&core_intc>;
			status = "okay";
		};

		ssp0:ssp@28000 {
			compatible = "intel,ssp-dai";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x00028000 0x1000
				   0x00079C00 0x200>;
			interrupts = <0x00 0 0>;
			interrupt-parent = <&ace_intc>;
			dmas = <&lpgpdma0 2
					&lpgpdma0 3>;
			dma-names = "tx", "rx";
			power-domain = <&io0_domain>;
			status = "okay";
		};

		ssp1:ssp@29000 {
			compatible = "intel,ssp-dai";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x00029000 0x1000
				   0x00079C00 0x200>;
			interrupts = <0x01 0 0>;
			interrupt-parent = <&ace_intc>;
			dmas = <&lpgpdma0 4
					&lpgpdma0 5>;
			dma-names = "tx", "rx";
			power-domain = <&io0_domain>;
			status = "okay";
		};

		ssp2:ssp@2a000 {
			compatible = "intel,ssp-dai";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x0002a000 0x1000
				   0x00079C00 0x200>;
			interrupts = <0x02 0 0>;
			interrupt-parent = <&ace_intc>;
			dmas = <&lpgpdma0 6
					&lpgpdma0 7>;
			dma-names = "tx", "rx";
			power-domain = <&io0_domain>;
			status = "okay";
		};

		ssp3:ssp@2b000 {
			compatible = "intel,ssp-dai";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x0002b000 0x1000
				   0x00079C00 0x200>;
			interrupts = <0x03 0 0>;
			interrupt-parent = <&ace_intc>;
			dmas = <&lpgpdma0 8
					&lpgpdma0 9>;
			dma-names = "tx", "rx";
			power-domain = <&io0_domain>;
			status = "okay";
		};

		ssp4:ssp@2c000 {
			compatible = "intel,ssp-dai";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x0002c000 0x1000
				   0x00079C00 0x200>;
			interrupts = <0x04 0 0>;
			interrupt-parent = <&ace_intc>;
			dmas = <&lpgpdma0 10
					&lpgpdma0 11>;
			dma-names = "tx", "rx";
			power-domain = <&io0_domain>;
			status = "okay";
		};

		ssp5:ssp@2d000 {
			compatible = "intel,ssp-dai";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x0002d000 0x1000
				   0x00079C00 0x200>;
			interrupts = <0x04 0 0>;
			interrupt-parent = <&ace_intc>;
			dmas = <&lpgpdma0 12
					&lpgpdma0 13>;
			dma-names = "tx", "rx";
			power-domain = <&io0_domain>;
			status = "okay";
		};

		hda_host_out: dma@72800 {
			compatible = "intel,adsp-hda-host-out";
			#dma-cells = <1>;
			reg = <0x00072800 0x40>;
			dma-channels = <9>;
			dma-buf-alignment = <128>;
			status = "okay";
		};

		hda_host_in: dma@72c00 {
			compatible = "intel,adsp-hda-host-in";
			#dma-cells = <1>;
			reg = <0x00072c00 0x40>;
			dma-channels = <10>;
			dma-buf-alignment = <128>;
			status = "okay";
		};

		hda_link_out: dma@72400 {
			compatible = "intel,adsp-hda-link-out";
			#dma-cells = <1>;
			reg = <0x00072400 0x20>;
			dma-channels = <9>;
			dma-buf-alignment = <128>;
			status = "okay";
		};

		hda_link_in: dma@72600 {
			compatible = "intel,adsp-hda-link-in";
			#dma-cells = <1>;
			reg = <0x00072600 0x20>;
			dma-channels = <10>;
			dma-buf-alignment = <128>;
			status = "okay";
		};

		hub_ulp_domain: hub_ulp_domain {
			compatible = "intel,adsp-power-domain";
			lps = <&lps>;
			bit-position = <15>;
		};
		hub_hp_domain: hub_hpp_domain {
			compatible = "intel,adsp-power-domain";
			lps = <&lps>;
			bit-position = <6>;
		};
		io0_domain: io0_domain {
			compatible = "intel,adsp-power-domain";
			lps = <&lps>;
			bit-position = <8>;
		};
		io1_domain: io1_domain {
			compatible = "intel,adsp-power-domain";
			lps = <&lps>;
			bit-position = <9>;
		};
		io2_domain: io2_domain {
			compatible = "intel,adsp-power-domain";
			lps = <&lps>;
			bit-position = <10>;
		};
		io3_domain: io3_domain {
			compatible = "intel,adsp-power-domain";
			lps = <&lps>;
			bit-position = <11>;
		};
		hst_domain: hst_domain {
			compatible = "intel,adsp-power-domain";
			lps = <&lps>;
			bit-position = <4>;
		};
		ml0_domain: ml0_domain {
			compatible = "intel,adsp-power-domain";
			lps = <&lps>;
			bit-position = <12>;
		};
		ml1_domain: ml1_domain {
			compatible = "intel,adsp-power-domain";
			lps = <&lps>;
			bit-position = <13>;
		};
	};
};