Skip to content

Commit bfdab16

Browse files
tmlemanjhedberg
authored andcommitted
intel_adsp: Introduce ACE 4.0 architecture with NVL/NVL-S platforms
Introduce the ACE 4.0 architecture, along with support for the NVL and NVL-S platforms within the Intel ADSP framework in the Zephyr project. This update includes: - Addition of ACE 4.0 architecture configurations in Kconfig and Kconfig.intel_adsp. - Inclusion of device tree source files for NVL and NVL-S platforms, defining CPU, memory, and peripheral configurations. - Updates to driver files to support ACE 4.0 specific features, including DMIC and SSP configurations. - Introduction of new header files for ACE 4.0, detailing boot, interrupt, IPC, power, and shim functionalities. - Modifications to the CMakeLists.txt to include ACE 4.0 MMU support. - Addition of default configurations for NVL and NVL-S platforms in Kconfig.defconfig.ace40. The NVL and NVL-S platforms are part of the Nova Lake series, targeting advanced audio processing capabilities. ACE 4.0 introduces enhanced DSP capabilities and advanced power management features, improving audio stream handling and synchronization compared to ACE 3.0. Signed-off-by: Flavio Ceolin <[email protected]> Signed-off-by: Daniel Leung <[email protected]> Signed-off-by: Serhiy Katsyuba <[email protected]> Signed-off-by: Anas Nashif <[email protected]> Signed-off-by: Tomasz Leman <[email protected]>
1 parent 3fc27e7 commit bfdab16

30 files changed

+1702
-12
lines changed

boards/intel/adsp/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ config RIMAGE_TARGET
1010
default "lnl" if BOARD_INTEL_ADSP_ACE20_LNL || BOARD_INTEL_ADSP_ACE20_LNL_SIM
1111
default "ptl" if BOARD_INTEL_ADSP_ACE30_PTL || BOARD_INTEL_ADSP_ACE30_PTL_SIM
1212
default "wcl" if BOARD_INTEL_ADSP_ACE30_WCL || BOARD_INTEL_ADSP_ACE30_WCL_SIM
13+
default "nvl" if BOARD_INTEL_ADSP_ACE40_NVL || BOARD_INTEL_ADSP_ACE40_NVL_SIM || BOARD_INTEL_ADSP_ACE40_NVLS

boards/intel/adsp/Kconfig.intel_adsp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,6 @@ config BOARD_INTEL_ADSP
1212
select SOC_INTEL_ACE30 if BOARD_INTEL_ADSP_ACE30_PTL_SIM
1313
select SOC_INTEL_ACE30 if BOARD_INTEL_ADSP_ACE30_WCL
1414
select SOC_INTEL_ACE30 if BOARD_INTEL_ADSP_ACE30_WCL_SIM
15+
select SOC_INTEL_ACE40 if BOARD_INTEL_ADSP_ACE40_NVL
16+
select SOC_INTEL_ACE40 if BOARD_INTEL_ADSP_ACE40_NVL_SIM
17+
select SOC_INTEL_ACE40 if BOARD_INTEL_ADSP_ACE40_NVLS

boards/intel/adsp/board.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,9 @@ boards:
2020
- name: 'wcl'
2121
variants:
2222
- name: 'sim'
23+
- name: ace40
24+
variants:
25+
- name: 'nvl'
26+
variants:
27+
- name: 'sim'
28+
- name: 'nvls'
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* Copyright (c) 2025 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
/dts-v1/;
8+
9+
#include <intel/intel_adsp_ace40_nvl.dtsi>
10+
11+
/ {
12+
model = "intel_adsp_ace40_nvl";
13+
compatible = "intel";
14+
15+
chosen {
16+
zephyr,sram = &sram0;
17+
zephyr,console = &mem_window3;
18+
};
19+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
CONFIG_MAIN_STACK_SIZE=4096
4+
5+
CONFIG_GEN_ISR_TABLES=y
6+
CONFIG_GEN_IRQ_VECTOR_TABLE=n
7+
8+
CONFIG_BUILD_OUTPUT_BIN=n
9+
10+
CONFIG_DAI_SSP_HAS_POWER_CONTROL=y
11+
12+
CONFIG_DCACHE_LINE_SIZE=64
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
CONFIG_MAIN_STACK_SIZE=2048
4+
5+
CONFIG_INTEL_ADSP_SIM=y
6+
7+
CONFIG_GEN_ISR_TABLES=y
8+
CONFIG_GEN_IRQ_VECTOR_TABLE=n
9+
10+
CONFIG_BUILD_OUTPUT_BIN=n
11+
12+
CONFIG_DAI_SSP_HAS_POWER_CONTROL=y
13+
14+
CONFIG_DCACHE_LINE_SIZE=64
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* Copyright (c) 2025 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
/dts-v1/;
8+
9+
#include <intel/intel_adsp_ace40_nvls.dtsi>
10+
11+
/ {
12+
model = "intel_adsp_ace40_nvls";
13+
compatible = "intel";
14+
15+
chosen {
16+
zephyr,sram = &sram0;
17+
zephyr,console = &mem_window3;
18+
};
19+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
CONFIG_MAIN_STACK_SIZE=4096
4+
5+
CONFIG_GEN_ISR_TABLES=y
6+
CONFIG_GEN_IRQ_VECTOR_TABLE=n
7+
8+
CONFIG_BUILD_OUTPUT_BIN=n
9+
10+
CONFIG_DAI_SSP_HAS_POWER_CONTROL=y
11+
12+
CONFIG_DCACHE_LINE_SIZE=64

boards/intel/adsp/twister.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,23 @@ variants:
5656
- zephyr
5757
testing:
5858
timeout_multiplier: 8
59+
intel_adsp/ace40/nvls:
60+
toolchain:
61+
- xt-clang
62+
intel_adsp/ace40/nvl:
63+
toolchain:
64+
- xt-clang
65+
intel_adsp/ace40/nvl/sim:
66+
type: sim
67+
toolchain:
68+
- xt-clang
69+
simulation:
70+
- name: custom
71+
exec: acesim
72+
testing:
73+
timeout_multiplier: 8
74+
intel_adsp/ace40:
75+
twister: false
5976
intel_adsp/cavs25:
6077
toolchain:
6178
- xcc

drivers/dai/intel/dmic/dmic.c

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,8 @@ static inline void dai_dmic_release_ownership(const struct dai_intel_dmic *dmic)
162162

163163
static inline uint32_t dai_dmic_base(const struct dai_intel_dmic *dmic)
164164
{
165-
#if defined(CONFIG_SOC_INTEL_ACE20_LNL) || defined(CONFIG_SOC_INTEL_ACE30)
165+
#if defined(CONFIG_SOC_INTEL_ACE20_LNL) || defined(CONFIG_SOC_INTEL_ACE30) || \
166+
defined(CONFIG_SOC_INTEL_ACE40)
166167
return dmic->hdamldmic_base;
167168
#else
168169
return dmic->shim_base;
@@ -175,7 +176,8 @@ static inline void dai_dmic_set_sync_period(uint32_t period, const struct dai_in
175176
uint32_t val = CONFIG_DAI_DMIC_HW_IOCLK / period - 1;
176177
uint32_t base = dai_dmic_base(dmic);
177178
/* DMIC Change sync period */
178-
#if defined(CONFIG_SOC_INTEL_ACE20_LNL) || defined(CONFIG_SOC_INTEL_ACE30)
179+
#if defined(CONFIG_SOC_INTEL_ACE20_LNL) || defined(CONFIG_SOC_INTEL_ACE30) || \
180+
defined(CONFIG_SOC_INTEL_ACE40)
179181
sys_write32(sys_read32(base + DMICSYNC_OFFSET) | FIELD_PREP(DMICSYNC_SYNCPRD, val),
180182
base + DMICSYNC_OFFSET);
181183
sys_write32(sys_read32(base + DMICSYNC_OFFSET) | DMICSYNC_SYNCPU,
@@ -262,7 +264,8 @@ static void dai_dmic_stop_fifo_packers(struct dai_intel_dmic *dmic,
262264
static inline void dai_dmic_dis_clk_gating(const struct dai_intel_dmic *dmic)
263265
{
264266
/* Disable DMIC clock gating */
265-
#if (CONFIG_SOC_INTEL_ACE20_LNL || CONFIG_SOC_INTEL_ACE30)
267+
#if defined(CONFIG_SOC_INTEL_ACE20_LNL) || defined(CONFIG_SOC_INTEL_ACE30) || \
268+
defined(CONFIG_SOC_INTEL_ACE40)
266269
sys_write32((sys_read32(dmic->vshim_base + DMICLVSCTL_OFFSET) | DMICLVSCTL_DCGD),
267270
dmic->vshim_base + DMICLVSCTL_OFFSET);
268271
#else
@@ -274,7 +277,8 @@ static inline void dai_dmic_dis_clk_gating(const struct dai_intel_dmic *dmic)
274277
static inline void dai_dmic_en_clk_gating(const struct dai_intel_dmic *dmic)
275278
{
276279
/* Enable DMIC clock gating */
277-
#if (CONFIG_SOC_INTEL_ACE20_LNL || CONFIG_SOC_INTEL_ACE30)
280+
#if defined(CONFIG_SOC_INTEL_ACE20_LNL) || defined(CONFIG_SOC_INTEL_ACE30) || \
281+
defined(CONFIG_SOC_INTEL_ACE40)
278282
sys_write32((sys_read32(dmic->vshim_base + DMICLVSCTL_OFFSET) & ~DMICLVSCTL_DCGD),
279283
dmic->vshim_base + DMICLVSCTL_OFFSET);
280284
#else /* All other CAVS and ACE platforms */
@@ -288,7 +292,8 @@ static inline void dai_dmic_program_channel_map(const struct dai_intel_dmic *dmi
288292
const struct dai_config *cfg,
289293
uint32_t index)
290294
{
291-
#if defined(CONFIG_SOC_INTEL_ACE20_LNL) || defined(CONFIG_SOC_INTEL_ACE30)
295+
#if defined(CONFIG_SOC_INTEL_ACE20_LNL) || defined(CONFIG_SOC_INTEL_ACE30) || \
296+
defined(CONFIG_SOC_INTEL_ACE40)
292297
uint16_t pcmsycm = cfg->link_config;
293298
uint32_t reg_add = dmic->shim_base + DMICXPCMSyCM_OFFSET + 0x0004*index;
294299

@@ -297,7 +302,7 @@ static inline void dai_dmic_program_channel_map(const struct dai_intel_dmic *dmi
297302
ARG_UNUSED(dmic);
298303
ARG_UNUSED(cfg);
299304
ARG_UNUSED(index);
300-
#endif /* defined(CONFIG_SOC_INTEL_ACE20_LNL) || defined(CONFIG_SOC_INTEL_ACE30) */
305+
#endif /* CONFIG_SOC_INTEL_ACE20_LNL || CONFIG_SOC_INTEL_ACE30 || CONFIG_SOC_INTEL_ACE40 */
301306
}
302307

303308
static inline void dai_dmic_en_power(const struct dai_intel_dmic *dmic)
@@ -307,7 +312,8 @@ static inline void dai_dmic_en_power(const struct dai_intel_dmic *dmic)
307312
sys_write32((sys_read32(base + DMICLCTL_OFFSET) | DMICLCTL_SPA),
308313
base + DMICLCTL_OFFSET);
309314

310-
#if defined(CONFIG_SOC_INTEL_ACE20_LNL) || defined(CONFIG_SOC_INTEL_ACE30)
315+
#if defined(CONFIG_SOC_INTEL_ACE20_LNL) || defined(CONFIG_SOC_INTEL_ACE30) || \
316+
defined(CONFIG_SOC_INTEL_ACE40)
311317
while (!(sys_read32(base + DMICLCTL_OFFSET) & DMICLCTL_CPA)) {
312318
k_sleep(K_USEC(100));
313319
}

0 commit comments

Comments
 (0)