From 92a2be0f359dbc8a36bfa9f2b603c1f639fe564a Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Fri, 9 Jan 2026 12:56:48 +0100 Subject: [PATCH 1/6] dp: application: restore double mapping for userspace Since Zephyr has removed double mapping per Kconfig switch we need to restore it in SOF. Next we should try to optimize mappings to only use the ones we really need. Signed-off-by: Guennadi Liakhovetski --- src/schedule/zephyr_dp_schedule.h | 2 ++ src/schedule/zephyr_dp_schedule_application.c | 14 +++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/schedule/zephyr_dp_schedule.h b/src/schedule/zephyr_dp_schedule.h index 8c0557ced7fc..2df6f2a83f62 100644 --- a/src/schedule/zephyr_dp_schedule.h +++ b/src/schedule/zephyr_dp_schedule.h @@ -25,7 +25,9 @@ struct scheduler_dp_data { enum sof_dp_part_type { SOF_DP_PART_HEAP, + SOF_DP_PART_HEAP_CACHE, SOF_DP_PART_CFG, + SOF_DP_PART_CFG_CACHE, SOF_DP_PART_TYPE_COUNT, }; diff --git a/src/schedule/zephyr_dp_schedule_application.c b/src/schedule/zephyr_dp_schedule_application.c index 521c32b4af1d..ea42498ebf5d 100644 --- a/src/schedule/zephyr_dp_schedule_application.c +++ b/src/schedule/zephyr_dp_schedule_application.c @@ -391,7 +391,9 @@ static void scheduler_dp_domain_free(struct task_dp_pdata *pdata) llext_manager_rm_domain(pmod->dev->ipc_config.id, mdom); k_mem_domain_remove_partition(mdom, pdata->mpart + SOF_DP_PART_HEAP); + k_mem_domain_remove_partition(mdom, pdata->mpart + SOF_DP_PART_HEAP_CACHE); k_mem_domain_remove_partition(mdom, pdata->mpart + SOF_DP_PART_CFG); + k_mem_domain_remove_partition(mdom, pdata->mpart + SOF_DP_PART_CFG_CACHE); pmod->mdom = NULL; objpool_free(&dp_mdom_head, mdom); @@ -534,12 +536,22 @@ int scheduler_dp_task_init(struct task **task, const struct sof_uuid_entry *uid, .size = size, .attr = K_MEM_PARTITION_P_RW_U_RW, }; + pdata->mpart[SOF_DP_PART_HEAP_CACHE] = (struct k_mem_partition){ + .start = (uintptr_t)sys_cache_cached_ptr_get((void *)start), + .size = size, + .attr = K_MEM_PARTITION_P_RW_U_RW | XTENSA_MMU_CACHED_WB, + }; /* Host mailbox partition for additional IPC parameters: read-only */ pdata->mpart[SOF_DP_PART_CFG] = (struct k_mem_partition){ - .start = (uintptr_t)MAILBOX_HOSTBOX_BASE, + .start = (uintptr_t)sys_cache_uncached_ptr_get((void *)MAILBOX_HOSTBOX_BASE), .size = 4096, .attr = K_MEM_PARTITION_P_RO_U_RO, }; + pdata->mpart[SOF_DP_PART_CFG_CACHE] = (struct k_mem_partition){ + .start = (uintptr_t)MAILBOX_HOSTBOX_BASE, + .size = 4096, + .attr = K_MEM_PARTITION_P_RO_U_RO | XTENSA_MMU_CACHED_WB, + }; for (pidx = 0; pidx < SOF_DP_PART_TYPE_COUNT; pidx++) { ret = k_mem_domain_add_partition(mdom, pdata->mpart + pidx); From d52aeb1add58772c7c74bbf20ae42c6e4b3ff845 Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Tue, 13 Jan 2026 15:09:40 +0100 Subject: [PATCH 2/6] dp: don't schedule paused tasks DP tasks don't need to be rescheduled when pause is released. Default handling works correctly in that case too. Signed-off-by: Guennadi Liakhovetski --- src/include/sof/audio/component_ext.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/sof/audio/component_ext.h b/src/include/sof/audio/component_ext.h index f0a1ad7e8512..d2bbf87a7764 100644 --- a/src/include/sof/audio/component_ext.h +++ b/src/include/sof/audio/component_ext.h @@ -158,9 +158,9 @@ static inline int comp_trigger_local(struct comp_dev *dev, int cmd) /* schedule or cancel task */ switch (cmd) { case COMP_TRIGGER_START: - case COMP_TRIGGER_RELEASE: ret = schedule_task(dev->task, 0, dev->period); break; + case COMP_TRIGGER_RELEASE: case COMP_TRIGGER_XRUN: case COMP_TRIGGER_PAUSE: case COMP_TRIGGER_STOP: From 23b0a00fa1e5e913028d799fa8c91e961520c9a9 Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Thu, 22 Jan 2026 10:29:10 +0100 Subject: [PATCH 3/6] objpool: fix flag initialisation We compare flags on repeated allocations from an existing pool, but initialisation got forgotten in the process. Restore it. Fixes: d6e6ac57a626 ("Add a object pool allocator") Signed-off-by: Guennadi Liakhovetski --- src/lib/objpool.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/objpool.c b/src/lib/objpool.c index 76a5b20a6594..e99825f0ccfa 100644 --- a/src/lib/objpool.c +++ b/src/lib/objpool.c @@ -94,6 +94,7 @@ void *objpool_alloc(struct objpool_head *head, size_t size, uint32_t flags) unsigned int new_n; if (list_is_empty(&head->list)) { + head->flags = flags; new_n = 2; } else { /* Check the last one */ From 85323f94f4912a2923d3ee58d08f07b6545524d6 Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Thu, 22 Jan 2026 10:34:23 +0100 Subject: [PATCH 4/6] dp: user: fix objpool allocation error handling When an objpool allocation fails an error should be returned. Fix the missing error code assignment. Fixes: fc73f9dde25d ("sp: application: switch memory domains to object pools") Signed-off-by: Guennadi Liakhovetski --- src/schedule/zephyr_dp_schedule_application.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/schedule/zephyr_dp_schedule_application.c b/src/schedule/zephyr_dp_schedule_application.c index ea42498ebf5d..3c063559a9a6 100644 --- a/src/schedule/zephyr_dp_schedule_application.c +++ b/src/schedule/zephyr_dp_schedule_application.c @@ -518,8 +518,11 @@ int scheduler_dp_task_init(struct task **task, const struct sof_uuid_entry *uid, struct k_mem_domain *mdom = objpool_alloc(&dp_mdom_head, sizeof(*mdom), SOF_MEM_FLAG_COHERENT); - if (!mdom) + if (!mdom) { + tr_err(&dp_tr, "objpool allocation failed"); + ret = -ENOMEM; goto e_thread; + } mod->mdom = mdom; From c8576548d321afaee2676e2b364b67fd2d63e9ba Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Fri, 6 Feb 2026 12:04:08 +0100 Subject: [PATCH 5/6] audio: module-adapter: fix SRC DP regression A recent module-adapter feature addition broke SRC DP support. Fix it by adding a test for incomplete initialization data. Signed-off-by: Guennadi Liakhovetski --- src/audio/module_adapter/module_adapter_ipc4.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/audio/module_adapter/module_adapter_ipc4.c b/src/audio/module_adapter/module_adapter_ipc4.c index a6fab69bbd86..37184a5a5587 100644 --- a/src/audio/module_adapter/module_adapter_ipc4.c +++ b/src/audio/module_adapter/module_adapter_ipc4.c @@ -159,7 +159,8 @@ int module_adapter_init_data(struct comp_dev *dev, } } - if (!config->ipc_extended_init) { + if (!config->ipc_extended_init || + (!dst->ext_data->dp_data && !dst->ext_data->module_data)) { dst->init_data = cfg; /* legacy API */ dst->avail = true; } From 46c2d84e54153bf0a4c8751a4be6923553736ba6 Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Tue, 6 Jan 2026 16:27:24 +0100 Subject: [PATCH 6/6] dp: nocodec: switch SRC to DP by default Switch both SRC instances in the nocodec topology on PTL to DP mode by default. Signed-off-by: Guennadi Liakhovetski --- tools/topology/topology2/development/tplg-targets.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/topology/topology2/development/tplg-targets.cmake b/tools/topology/topology2/development/tplg-targets.cmake index 7986eb2bad11..b382dc1b4bc1 100644 --- a/tools/topology/topology2/development/tplg-targets.cmake +++ b/tools/topology/topology2/development/tplg-targets.cmake @@ -60,9 +60,9 @@ NHLT_BIN=nhlt-sof-lnl-nocodec-fpga-4ch.bin,PASSTHROUGH=true,DMIC_IO_CLK=19200000 # HDA topology with passthrough analog codec pipelines using CHAIN_DMA "sof-hda-generic\;sof-hda-passthrough-chain-dma\;HDA_CONFIG=passthrough,CODEC_HDA_CHAIN_DMA=true" -# SSP topology for PTL +# SSP topology for PTL, includes Data Processing SRC "cavs-nocodec\;sof-ptl-nocodec\;PLATFORM=ptl,NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,\ -PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-ptl-nocodec.bin" +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-ptl-nocodec.bin,SRC_DOMAIN=DP" # SSP topology for PTL with 96 kHz DMIC "cavs-nocodec\;sof-ptl-nocodec-dmic-4ch-96k\;PLATFORM=ptl,NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,\ @@ -310,9 +310,9 @@ PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-mtl-nocodec.bin,SRC_DOMAIN=DP" # SSP test topology for Data Processing SRC on LNL "cavs-nocodec\;sof-lnl-nocodec-dp-test\;PLATFORM=lnl,NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,\ PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-lnl-nocodec.bin,SRC_DOMAIN=DP" -# SSP test topology for Data Processing SRC on PTL +# SSP test topology for PTL with no DP "cavs-nocodec\;sof-ptl-nocodec-dp-test\;PLATFORM=ptl,NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,\ -PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-ptl-nocodec.bin,SRC_DOMAIN=DP" +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-ptl-nocodec.bin" # SSP test topology for Data Processing on core 1 SRC for MTL "cavs-nocodec\;sof-mtl-nocodec-dp-core-test\;PLATFORM=mtl,NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,\