zephyr/dts/xtensa/intel/intel_adsp_ace15_mtpm.dtsi
Damian Nikodem 6205f82d4f intel_adsp: adsp_memory: update mtl memory definitions
This commit updates the device tree and memory header file
for the Intel MTPM 1.5 platform to define the LSBPM and
HSBPM registers.

Changes include:
- Added node definitions for 'lsbpm' and 'hsbpm' in
intel_adsp_ace15_mtpm.dtsi
- Updated adsp_memory.h

Signed-off-by: Damian Nikodem <damian.nikodem@intel.com>
2024-05-01 10:31:52 +02:00

681 lines
14 KiB
Plaintext

/*
* 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>;
i-cache-line-size = <64>;
d-cache-line-size = <64>;
};
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 = <0>;
exit-latency-us = <0>;
status = "disabled";
};
};
};
sram0: memory@a0020000 {
device_type = "memory";
compatible = "mmio-sram";
reg = <0xa0020000 DT_SIZE_K(2816)>;
};
sram0virtual: virtualmemory@a0020000 {
device_type = "memory";
compatible = "mmio-sram";
reg = <0xa0020000 DT_SIZE_K(8192)>;
};
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>;
};
clkctl: clkctl {
compatible = "intel,adsp-shim-clkctl";
adsp-clkctl-clk-wovcro = <0>;
adsp-clkctl-clk-ipll = <1>;
adsp-clkctl-freq-enc = <0xc 0x4>;
adsp-clkctl-freq-mask = <0x0 0x0>;
adsp-clkctl-freq-default = <1>;
adsp-clkctl-freq-lowest = <0>;
wovcro-supported;
};
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 {
lsbpm: lsbpm@71d80 {
compatible = "intel,adsp-lsbpm";
reg = <0x71d80 0x0008>;
};
hsbpm: hsbpm@17a800 {
compatible = "intel,adsp-hsbpm";
reg = <0x17a800 0x0008>;
};
core_intc: core_intc@0 {
compatible = "cdns,xtensa-core-intc";
reg = <0x00 0x400>;
interrupt-controller;
#interrupt-cells = <3>;
};
dmic0: dmic0@10000 {
compatible = "intel,dai-dmic";
reg = <0x10000 0x8000>;
shim = <0xC000>;
fifo = <0x0008>;
interrupts = <0x08 0 0>;
interrupt-parent = <&ace_intc>;
power-domain = <&hub_ulp_domain>;
};
dmic1: dmic1@10000 {
compatible = "intel,dai-dmic";
reg = <0x10000 0x8000>;
shim = <0xC000>;
fifo = <0x0108>;
interrupts = <0x09 0 0>;
interrupt-parent = <&ace_intc>;
power-domain = <&hub_ulp_domain>;
};
/*
* FIXME this is modeling individual alh channels/instances
* with node labels, which has problems. A better representation
* is discussed here:
*
* https://github.com/zephyrproject-rtos/zephyr/pull/50287#discussion_r974591009
*
* The hardware actually supports 16 ALH streams/FIFOs. Below description does
* not fully represent hardware capabilities and is expected to be modified.
*/
alh0: alh0@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh1: alh1@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh2: alh2@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh3: alh3@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh4: alh4@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh5: alh5@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh6: alh6@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh7: alh7@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh8: alh8@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh9: alh9@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh10: alh10@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh11: alh11@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh12: alh12@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh13: alh13@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh14: alh14@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
alh15: alh15@24400 {
compatible = "intel,alh-dai";
reg = <0x00024400 0x00024600>;
status = "okay";
};
sspbase: ssp_base@28800 {
compatible = "intel,ssp-sspbase";
reg = <0x28800 0x1000>;
};
ssp0: ssp@28000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "intel,ssp";
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>;
ssp-index = <0>;
status = "okay";
ssp00: ssp@0 {
compatible = "intel,ssp-dai";
status = "okay";
reg = <0x0>;
};
};
ssp1: ssp@29000 {
compatible = "intel,ssp";
#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>;
ssp-index = <1>;
status = "okay";
ssp10: ssp@10 {
compatible = "intel,ssp-dai";
status = "okay";
reg = <0x10>;
};
};
ssp2: ssp@2a000 {
compatible = "intel,ssp";
#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>;
ssp-index = <2>;
status = "okay";
ssp20: ssp@20 {
compatible = "intel,ssp-dai";
status = "okay";
reg = <0x20>;
};
};
mem_window0: mem_window@70200 {
compatible = "intel,adsp-mem-window";
reg = <0x70200 0x8>;
offset = <0x4000>;
memory = <&sram0>;
initialize;
read-only;
};
mem_window1: mem_window@70208 {
compatible = "intel,adsp-mem-window";
reg = <0x70208 0x8>;
memory = <&sram0>;
};
mem_window2: mem_window@70210 {
compatible = "intel,adsp-mem-window";
reg = <0x70210 0x8>;
memory = <&sram0>;
};
mem_window3: mem_window@70218 {
compatible = "intel,adsp-mem-window";
reg = <0x70218 0x8>;
memory = <&sram0>;
read-only;
};
adsp_idc: ace_idc@70400 {
compatible = "intel,adsp-idc";
reg = <0x70400 0x0400>;
interrupts = <24 0 0>;
interrupt-parent = <&ace_intc>;
};
dfpmcch: dfpmcch@71ac0 {
compatible = "intel,adsp-dfpmcch";
reg = <0x00071ac0 0x40>;
};
dfpmccu: dfpmccu@71b00 {
compatible = "intel,adsp-dfpmccu";
reg = <0x71b00 0x100>;
hub_ulp_domain: hub_ulp_domain {
compatible = "intel,adsp-power-domain";
bit-position = <15>;
};
ml1_domain: ml1_domain {
compatible = "intel,adsp-power-domain";
bit-position = <13>;
};
ml0_domain: ml0_domain {
compatible = "intel,adsp-power-domain";
bit-position = <12>;
};
io3_domain: io3_domain {
compatible = "intel,adsp-power-domain";
bit-position = <11>;
};
io2_domain: io2_domain {
compatible = "intel,adsp-power-domain";
bit-position = <10>;
};
io1_domain: io1_domain {
compatible = "intel,adsp-power-domain";
bit-position = <9>;
};
io0_domain: io0_domain {
compatible = "intel,adsp-power-domain";
bit-position = <8>;
};
hub_hp_domain: hub_hp_domain {
compatible = "intel,adsp-power-domain";
bit-position = <6>;
};
hst_domain: hst_domain {
compatible = "intel,adsp-power-domain";
bit-position = <4>;
};
};
ace_comm_widget: ace_comm_widget@71c00 {
compatible = "intel,adsp-communication-widget";
reg = <0x00071c00 0x100>;
interrupts = <0x19 0 0>;
interrupt-parent = <&ace_intc>;
status = "okay";
};
shim: shim@71f00 {
compatible = "intel,adsp-shim";
reg = <0x71f00 0x100>;
};
tts: tts@72000 {
compatible = "intel,adsp-tts";
reg = <0x72000 0x70>;
status = "okay";
};
ace_rtc_counter: ace_rtc_counter@72008 {
compatible = "intel,ace-rtc-counter";
reg = <0x72008 0x0064>;
};
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>;
};
hda_link_out: dma@72400 {
compatible = "intel,adsp-hda-link-out";
#dma-cells = <1>;
reg = <0x00072400 0x20>;
dma-channels = <9>;
dma-buf-addr-alignment = <128>;
dma-buf-size-alignment = <32>;
dma-copy-alignment = <16>;
power-domain = <&io0_domain>;
status = "okay";
};
hda_link_in: dma@72600 {
compatible = "intel,adsp-hda-link-in";
#dma-cells = <1>;
reg = <0x00072600 0x20>;
dma-channels = <10>;
dma-buf-addr-alignment = <128>;
dma-buf-size-alignment = <32>;
dma-copy-alignment = <16>;
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-addr-alignment = <128>;
dma-buf-size-alignment = <32>;
dma-copy-alignment = <16>;
power-domain = <&hst_domain>;
interrupts = <13 0 0>;
interrupt-parent = <&ace_intc>;
status = "okay";
};
hda_host_in: dma@72c00 {
compatible = "intel,adsp-hda-host-in";
#dma-cells = <1>;
reg = <0x00072c00 0x40>;
dma-channels = <10>;
dma-buf-addr-alignment = <128>;
dma-buf-size-alignment = <32>;
dma-copy-alignment = <16>;
power-domain = <&hst_domain>;
interrupts = <12 0 0>;
interrupt-parent = <&ace_intc>;
status = "okay";
};
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>;
};
/* 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>;
};
lpgpdma0: dma@7c000 {
compatible = "intel,adsp-gpdma";
#dma-cells = <1>;
reg = <0x0007c000 0x1000>;
shim = <0x0007c800 0x1000>;
interrupts = <17 0 0>;
interrupt-parent = <&ace_intc>;
dma-buf-size-alignment = <4>;
dma-copy-alignment = <4>;
status = "okay";
power-domain = <&hub_ulp_domain>;
zephyr,pm-device-runtime-auto;
};
lpgpdma1: dma@7d000 {
compatible = "intel,adsp-gpdma";
#dma-cells = <1>;
reg = <0x0007d000 0x1000>;
shim = <0x0007d800 0x1000>;
interrupts = <0x20 0 0>;
interrupt-parent = <&core_intc>;
dma-buf-size-alignment = <4>;
dma-copy-alignment = <4>;
status = "okay";
power-domain = <&io0_domain>;
zephyr,pm-device-runtime-auto;
};
lpgpdma2: dma@7e000 {
compatible = "intel,adsp-gpdma";
#dma-cells = <1>;
reg = <0x0007e000 0x1000>;
shim = <0x0007e800 0x1000>;
interrupts = <0x25 0 0>;
interrupt-parent = <&core_intc>;
dma-buf-size-alignment = <4>;
dma-copy-alignment = <4>;
power-domain = <&io0_domain>;
status = "okay";
zephyr,pm-device-runtime-auto;
};
sha: adsp-sha@17df00 {
compatible = "intel,adsp-sha";
reg = <0x17df00 0xd0>;
};
tlb: tlb@17e000 {
compatible = "intel,adsp-mtl-tlb";
reg = <0x17e000 0x1000>;
paddr-size = <12>;
exec-bit-idx = <14>;
write-bit-idx= <15>;
};
timer: timer {
compatible = "intel,adsp-timer";
syscon = <&tts>;
};
};
hdas {
#address-cells = <1>;
#size-cells = <0>;
hda0: hda@0 {
compatible = "intel,hda-dai";
status = "okay";
reg = <0>;
};
hda1: hda@1 {
compatible = "intel,hda-dai";
status = "okay";
reg = <1>;
};
hda2: hda@2 {
compatible = "intel,hda-dai";
status = "okay";
reg = <2>;
};
hda3: hda@3 {
compatible = "intel,hda-dai";
status = "okay";
reg = <3>;
};
hda4: hda@4 {
compatible = "intel,hda-dai";
status = "okay";
reg = <4>;
};
hda5: hda@5 {
compatible = "intel,hda-dai";
status = "okay";
reg = <5>;
};
hda6: hda@6 {
compatible = "intel,hda-dai";
status = "okay";
reg = <6>;
};
hda7: hda@7 {
compatible = "intel,hda-dai";
status = "okay";
reg = <7>;
};
hda8: hda@8 {
compatible = "intel,hda-dai";
status = "okay";
reg = <8>;
};
hda9: hda@9 {
compatible = "intel,hda-dai";
status = "okay";
reg = <9>;
};
hda10: hda@a {
compatible = "intel,hda-dai";
status = "okay";
reg = <0x0a>;
};
hda11: hda@b {
compatible = "intel,hda-dai";
status = "okay";
reg = <0x0b>;
};
hda12: hda@c {
compatible = "intel,hda-dai";
status = "okay";
reg = <0x0c>;
};
hda13: hda@d {
compatible = "intel,hda-dai";
status = "okay";
reg = <0x0d>;
};
hda14: hda@e {
compatible = "intel,hda-dai";
status = "okay";
reg = <0x0e>;
};
hda15: hda@f {
compatible = "intel,hda-dai";
status = "okay";
reg = <0x0f>;
};
hda16: hda@10 {
compatible = "intel,hda-dai";
status = "okay";
reg = <0x10>;
};
hda17: hda@11 {
compatible = "intel,hda-dai";
status = "okay";
reg = <0x11>;
};
hda18: hda@12 {
compatible = "intel,hda-dai";
status = "okay";
reg = <0x12>;
};
};
};