From d725d3b2dd2ea1e848ebb21b21178709ab956b01 Mon Sep 17 00:00:00 2001 From: Adrian Warecki Date: Wed, 26 Oct 2022 12:02:19 +0200 Subject: [PATCH 1/9] dmic workaround Signed-off-by: Adrian Warecki --- src/audio/dai-zephyr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/audio/dai-zephyr.c b/src/audio/dai-zephyr.c index 5a85dd14514d..c90016ae6d52 100644 --- a/src/audio/dai-zephyr.c +++ b/src/audio/dai-zephyr.c @@ -1234,7 +1234,7 @@ static int dai_copy(struct comp_dev *dev) return ret; } - dai_dma_position_update(dev); + //dai_dma_position_update(dev); return ret; } From fb63108c54d46dd12842e634965ca4e4e9dc4775 Mon Sep 17 00:00:00 2001 From: Arsen Eloglian Date: Thu, 18 Aug 2022 01:13:16 +0200 Subject: [PATCH 2/9] mtl: enable comp up down mixer Enable flag configures up down mixer. Signed-off-by: Arsen Eloglian --- app/boards/intel_adsp_ace15_mtpm.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/app/boards/intel_adsp_ace15_mtpm.conf b/app/boards/intel_adsp_ace15_mtpm.conf index 7c6066928820..6093554d5599 100644 --- a/app/boards/intel_adsp_ace15_mtpm.conf +++ b/app/boards/intel_adsp_ace15_mtpm.conf @@ -41,6 +41,7 @@ CONFIG_LOG=y CONFIG_LOG_MODE_DEFERRED=y CONFIG_LOG_FUNC_NAME_PREFIX_INF=y CONFIG_COMP_VOLUME_WINDOWS_FADE=y +CONFIG_COMP_UP_DOWN_MIXER=y CONFIG_SYS_CLOCK_TICKS_PER_SEC=12000 CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=38400000 From 4fd043de8139500a1fd4c9faf7e187dc25dc3cbd Mon Sep 17 00:00:00 2001 From: "Kwasowiec, Fabiola" Date: Thu, 1 Sep 2022 12:58:46 +0200 Subject: [PATCH 3/9] src:change error to warning when checking buffer PR to change the error into a warning is a good quick compromise until a better limit is figured out Signed-off-by: Kwasowiec, Fabiola --- src/audio/src/src.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/audio/src/src.c b/src/audio/src/src.c index 5d9970a93597..fa18b9fb414e 100644 --- a/src/audio/src/src.c +++ b/src/audio/src/src.c @@ -946,16 +946,14 @@ static int src_check_buffer_sizes(struct comp_data *cd, n = audio_stream_frame_bytes(source_stream) * (blk_in + cd->source_frames); if (source_stream->size < n) { - comp_cl_err(&comp_src, "Source size %d is less than required %d", - source_stream->size, n); - return -ENOBUFS; + comp_cl_warn(&comp_src, "Source size %d is less than required %d", + source_stream->size, n); } n = audio_stream_frame_bytes(sink_stream) * (blk_out + cd->sink_frames); if (sink_stream->size < n) { - comp_cl_err(&comp_src, "Sink size %d is less than required %d", - sink_stream->size, n); - return -ENOBUFS; + comp_cl_warn(&comp_src, "Sink size %d is less than required %d", + sink_stream->size, n); } return 0; From 0714872cbd70666fae13147d405172bf5bfbde9e Mon Sep 17 00:00:00 2001 From: Kai Vehmanen Date: Thu, 3 Nov 2022 14:15:28 +0200 Subject: [PATCH 4/9] audio: up_down_mixer: fix build warnings on discarding const Fix compiler warnings on discarding const when passing arguments to init_up_down_mixer [-Werror=discarded-qualifiers]. Signed-off-by: Kai Vehmanen --- src/audio/up_down_mixer/up_down_mixer.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/audio/up_down_mixer/up_down_mixer.c b/src/audio/up_down_mixer/up_down_mixer.c index ddce90531c4e..c25e071bbd46 100644 --- a/src/audio/up_down_mixer/up_down_mixer.c +++ b/src/audio/up_down_mixer/up_down_mixer.c @@ -337,9 +337,10 @@ static void up_down_mixer_free(struct comp_dev *dev) rfree(dev); } -static int init_up_down_mixer(struct comp_dev *dev, struct comp_ipc_config *config, void *spec) +static int init_up_down_mixer(struct comp_dev *dev, const struct comp_ipc_config *config, + const void *spec) { - struct ipc4_up_down_mixer_module_cfg *up_down_mixer = spec; + const struct ipc4_up_down_mixer_module_cfg *up_down_mixer = spec; struct up_down_mixer_data *cd; int ret; From 9fbcce13d9b8e42d2ca25fb5ea61f82181cf627f Mon Sep 17 00:00:00 2001 From: Adrian Bonislawski Date: Sat, 5 Nov 2022 08:52:40 +0100 Subject: [PATCH 5/9] west: update to newer Zephyr baseline Update Zephyr co commit a27ac688779b from mtl-002-drop-stable branch Signed-off-by: Adrian Bonislawski --- west.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/west.yml b/west.yml index 7eb486fbcfde..f7d72bf59d59 100644 --- a/west.yml +++ b/west.yml @@ -43,8 +43,8 @@ manifest: - name: zephyr repo-path: zephyr - revision: ed661a6c6909b338035b026cfc101ddda65ab8eb - remote: zephyrproject + revision: a27ac688779b073cc732f7a950bf295a9cb22988 + remote: thesofproject # Import some projects listed in zephyr/west.yml@revision # # Warning: changes to zephyr/west.yml or to any other _imported_ From c24359a3af3ecbafe2305135d57f8964395075ee Mon Sep 17 00:00:00 2001 From: Ranjani Sridharan Date: Sat, 5 Nov 2022 20:04:13 -0700 Subject: [PATCH 6/9] lib: dma: free dma channels when ref count is 0 Free the memory allocated for DMA channels when the ref count is 0 when using native zephyr drivers. Signed-off-by: Ranjani Sridharan --- src/lib/dma.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/dma.c b/src/lib/dma.c index d8df3855442b..6f677c9fcfd1 100644 --- a/src/lib/dma.c +++ b/src/lib/dma.c @@ -128,7 +128,10 @@ void dma_put(struct dma *dma) k_spinlock_key_t key; key = k_spin_lock(&dma->lock); - --dma->sref; + if (--dma->sref == 0) { + rfree(dma->chan); + dma->chan = NULL; + } tr_info(&dma_tr, "dma_put(), dma = %p, sref = %d", dma, dma->sref); From 071f46c544a0352cfd1f9cca519ad3acfda47e18 Mon Sep 17 00:00:00 2001 From: Ranjani Sridharan Date: Sun, 6 Nov 2022 14:24:14 -0800 Subject: [PATCH 7/9] lib: dma: return NULL when DMA init fails Return NULL when dma_init() fails. Signed-off-by: Ranjani Sridharan --- src/lib/dma.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lib/dma.c b/src/lib/dma.c index 6f677c9fcfd1..58aa64dc841e 100644 --- a/src/lib/dma.c +++ b/src/lib/dma.c @@ -110,17 +110,18 @@ struct dma *dma_get(uint32_t dir, uint32_t cap, uint32_t dev, uint32_t flags) if (ret < 0) { tr_err(&dma_tr, "dma_get(): dma-probe failed id = %d, ret = %d", dmin->plat_data.id, ret); + goto out; } } - if (!ret) - dmin->sref++; + + dmin->sref++; tr_info(&dma_tr, "dma_get() ID %d sref = %d busy channels %ld", dmin->plat_data.id, dmin->sref, atomic_read(&dmin->num_channels_busy)); - +out: k_spin_unlock(&dmin->lock, key); - return dmin; + return !ret ? dmin : NULL; } void dma_put(struct dma *dma) From 3216d4543937e3e43f69537675ef2b40fb2a6f9b Mon Sep 17 00:00:00 2001 From: Ranjani Sridharan Date: Sun, 6 Nov 2022 08:14:58 -0800 Subject: [PATCH 8/9] dai-zephyr: Free DMA config block during reset This prevents memory leaks during repeated PCM start/stop tests. Signed-off-by: Ranjani Sridharan --- src/audio/dai-zephyr.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/audio/dai-zephyr.c b/src/audio/dai-zephyr.c index c90016ae6d52..4759445a00d6 100644 --- a/src/audio/dai-zephyr.c +++ b/src/audio/dai-zephyr.c @@ -934,6 +934,7 @@ static int dai_reset(struct comp_dev *dev) dai_dma_release(dev); dma_sg_free(&config->elem_array); + rfree(dd->z_config->head_block); rfree(dd->z_config); if (dd->dma_buffer) { From 79289e0f551f92754d129ea5e717f6ef18ea1d71 Mon Sep 17 00:00:00 2001 From: Piotr Makaruk Date: Mon, 7 Nov 2022 12:28:05 +0100 Subject: [PATCH 9/9] hda: Add chain dma management remove sw support for hda chain add hw chain dma support Signed-off-by: Piotr Makaruk --- src/audio/pipeline/CMakeLists.txt | 1 + src/audio/pipeline/chain_dma.c | 80 +++++++++++++++++++++ src/include/ipc/topology.h | 1 + src/include/ipc4/error_status.h | 3 + src/include/sof/audio/chain_dma.h | 35 ++++++++++ src/include/sof/audio/component.h | 4 ++ src/include/sof/ipc/topology.h | 1 + src/ipc/ipc4/handler.c | 112 ++++++++++++++++++++++++------ src/ipc/ipc4/helper.c | 40 +++++++++++ zephyr/CMakeLists.txt | 1 + 10 files changed, 255 insertions(+), 23 deletions(-) create mode 100644 src/audio/pipeline/chain_dma.c create mode 100644 src/include/sof/audio/chain_dma.h diff --git a/src/audio/pipeline/CMakeLists.txt b/src/audio/pipeline/CMakeLists.txt index 242ace4b2a69..55b0d0ae90c3 100644 --- a/src/audio/pipeline/CMakeLists.txt +++ b/src/audio/pipeline/CMakeLists.txt @@ -6,4 +6,5 @@ add_local_sources(sof pipeline-params.c pipeline-xrun.c pipeline-schedule.c + chain_dma.c ) diff --git a/src/audio/pipeline/chain_dma.c b/src/audio/pipeline/chain_dma.c new file mode 100644 index 000000000000..2b824d5765bc --- /dev/null +++ b/src/audio/pipeline/chain_dma.c @@ -0,0 +1,80 @@ +#include +#include +#include + +/* 6a0a274f-27cc-4afb-a3e7-3444723f432e */ +DECLARE_SOF_RT_UUID("chain_dma", chain_dma_uuid, 0x6a0a274f, 0x27cc, 0x4afb, + 0xa3, 0xe7, 0x34, 0x44, 0x72, 0x3f, 0x43, 0x2e); +DECLARE_TR_CTX(chain_dma_tr, SOF_UUID(chain_dma_uuid), LOG_LEVEL_INFO); + +int chain_dma_start(struct comp_dev *dev, uint8_t host_dma_id) +{ + return IPC4_SUCCESS; +} + +int chain_dma_pause(struct comp_dev *dev, uint8_t host_dma_id) +{ + return IPC4_SUCCESS; +} + +int chain_dma_trigger(struct comp_dev *dev, int cmd) +{ + switch (cmd) { + case COMP_TRIGGER_START: + chain_dma_start(dev, cmd); + break; + case COMP_TRIGGER_PAUSE: + chain_dma_pause(dev, cmd); + break; + default: + return 0; + } + return IPC4_SUCCESS; +} + +int chain_dma_remove(struct comp_dev *dev, uint8_t host_dma_id) +{ + return IPC4_SUCCESS; +} + +int chain_dma_create(const struct comp_driver *drv, uint8_t host_dma_id, uint8_t link_dma_id, uint32_t fifo_size, bool scs) +{ + struct comp_dev *dev; + + dev = comp_alloc(drv, sizeof(*dev)); + if (!dev) + return IPC4_INVALID_REQUEST; + + int comp_id = IPC4_COMP_ID(host_dma_id + IPC4_MAX_MODULE_COUNT, + link_dma_id); + + struct chain_dma_data *cd = comp_get_drvdata(dev); + size_t size = sizeof(*cd); + cd = rzalloc(SOF_MEM_ZONE_RUNTIME, 0, SOF_MEM_CAPS_RAM, size); + return IPC4_SUCCESS; +} + + + +static const struct comp_driver comp_chain_dma = { + .type = SOF_COMP_CHAIN_DMA, + .uid = SOF_RT_UUID(chain_dma_uuid), + .tctx = &chain_dma_tr, + .ops = { + .chain_dma_create = chain_dma_create, + .trigger = chain_dma_trigger, + .free = chain_dma_remove, + }, +}; + +static SHARED_DATA struct comp_driver_info comp_chain_dma_info = { + .drv = &comp_chain_dma, +}; + +static void sys_comp_chain_dma_init(void) +{ + comp_register(platform_shared_get(&comp_chain_dma_info, + sizeof(comp_chain_dma_info))); +} + +DECLARE_MODULE(sys_comp_chain_dma_init); diff --git a/src/include/ipc/topology.h b/src/include/ipc/topology.h index 06c719018e36..1557df13340b 100644 --- a/src/include/ipc/topology.h +++ b/src/include/ipc/topology.h @@ -28,6 +28,7 @@ enum sof_comp_type { SOF_COMP_NONE = 0, SOF_COMP_HOST, SOF_COMP_DAI, + SOF_COMP_CHAIN_DMA, SOF_COMP_SG_HOST, /**< scatter gather variant */ SOF_COMP_SG_DAI, /**< scatter gather variant */ SOF_COMP_VOLUME, diff --git a/src/include/ipc4/error_status.h b/src/include/ipc4/error_status.h index 14eede02a3b7..c3ad27bf2a61 100644 --- a/src/include/ipc4/error_status.h +++ b/src/include/ipc4/error_status.h @@ -124,6 +124,9 @@ enum ipc4_status { /**< Reverted for ULP purposes */ IPC4_PIPELINE_STATE_NOT_SET = 164, + /**< HDA chained gateways wrong state transition*/ + IPC4_INVALID_CHAIN_STATE_TRANSITION = 3018, + IPC4_MAX_STATUS = ((1 << IPC4_IXC_STATUS_BITS) - 1) }; #endif diff --git a/src/include/sof/audio/chain_dma.h b/src/include/sof/audio/chain_dma.h new file mode 100644 index 000000000000..33ccecb4e36f --- /dev/null +++ b/src/include/sof/audio/chain_dma.h @@ -0,0 +1,35 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +static const uint32_t MAX_CHAIN_NUMBER = DAI_NUM_HDA_OUT + DAI_NUM_HDA_IN; + +/* chain dma component private data */ +struct chain_dma_data { + bool first_data_received_; + //! Node id of host HD/A DMA + uint32_t output_node_id_; + //! Node id of link HD/A DMA + uint32_t input_node_id_; + uint32_t* hw_buffer_; + bool under_over_run_notification_sent_; +}; + +int chain_dma_create(const struct comp_driver *drv, uint8_t host_dma_id, uint8_t link_dma_id, uint32_t fifo_size, bool scs); + +int chain_dma_start(struct comp_dev *dev, uint8_t host_dma_id); + +int chain_dma_pause(struct comp_dev *dev, uint8_t host_dma_id); + +int chain_dma_remove(struct comp_dev *dev, uint8_t host_dma_id); + +int chain_dma_trigger(struct comp_dev *dev, int cmd); + +void SetReadPointer(uint32_t read_pointer); + +void SetWritePointer(uint32_t write_pointer); diff --git a/src/include/sof/audio/component.h b/src/include/sof/audio/component.h index 793de5e4700b..ff97353750e2 100644 --- a/src/include/sof/audio/component.h +++ b/src/include/sof/audio/component.h @@ -307,6 +307,10 @@ struct comp_ops { const struct comp_ipc_config *ipc_config, const void *ipc_specific_config); + struct comp_dev *(*chain_dma_create)(const struct comp_driver *drv, + uint8_t host_dma_id, uint8_t link_dma_id, + uint32_t fifo_size, bool scs); + /** * Called to delete the specified component device. * @param dev Component device to be deleted. diff --git a/src/include/sof/ipc/topology.h b/src/include/sof/ipc/topology.h index 789b2f497478..da087b21271d 100644 --- a/src/include/sof/ipc/topology.h +++ b/src/include/sof/ipc/topology.h @@ -50,6 +50,7 @@ const struct comp_driver *ipc4_get_comp_drv(int module_id); struct comp_dev *ipc4_get_comp_dev(uint32_t comp_id); int ipc4_add_comp_dev(struct comp_dev *dev); const struct comp_driver *ipc4_get_drv(uint8_t *uuid); +int ipc4_create_io_driver_for_chain(struct ipc4_chain_dma *cdma); int ipc4_create_chain_dma(struct ipc *ipc, struct ipc4_chain_dma *cdma); int ipc4_trigger_chain_dma(struct ipc *ipc, struct ipc4_chain_dma *cdma); #else diff --git a/src/ipc/ipc4/handler.c b/src/ipc/ipc4/handler.c index ff6330294baa..5d57763e4280 100644 --- a/src/ipc/ipc4/handler.c +++ b/src/ipc/ipc4/handler.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -458,36 +459,101 @@ static int ipc4_load_library(struct ipc4_message_request *ipc4) } #endif +#include "sof/mem_win_debug.h" static int ipc4_process_chain_dma(struct ipc4_message_request *ipc4) { + struct sof_uuid uuid = {0x6a0a274f, 0x27cc, 0x4afb, {0xa3, 0xe7, 0x34, + 0x44, 0x72, 0x3f, 0x43, 0x2e}}; struct ipc4_chain_dma cdma; struct ipc *ipc = ipc_get(); - int ret; + int ret = IPC4_INVALID_REQUEST; memcpy_s(&cdma, sizeof(cdma), ipc4, sizeof(cdma)); - if (cdma.primary.r.allocate && cdma.extension.r.fifo_size) { - ret = ipc4_create_chain_dma(ipc, &cdma); - if (ret) { - tr_err(&ipc_tr, "failed to create chain dma %d", ret); - return ret; - } - - /* if enable is not set, chain dma pipeline is not going to be triggered */ - if (!cdma.primary.r.enable) - return ret; - } - - atomic_set(&msg_data.delayed_reply, 1); - ret = ipc4_trigger_chain_dma(ipc, &cdma); - /* it is not scheduled in another thread */ - if (ret != PPL_STATUS_SCHEDULED) { - atomic_set(&msg_data.delayed_reply, 0); - msg_data.delayed_error = 0; - } else { - ret = 0; - } - + const uint8_t link_dma_id = cdma.primary.r.link_dma_id; + const uint8_t host_dma_id = cdma.primary.r.host_dma_id; + + const uint32_t fifo_size = cdma.extension.r.fifo_size; + const bool allocate = cdma.primary.r.allocate; + const bool enable = cdma.primary.r.enable; + const bool scs = cdma.primary.r.scs; + + MEM_WIN_DEBUG0(0xaaa0,0,0,0); + int comp_id = IPC4_COMP_ID(host_dma_id + IPC4_MAX_MODULE_COUNT, + link_dma_id); + + if (allocate) + { + ret = ipc4_create_io_driver_for_chain(&cdma); + struct ipc_comp_dev* cdma_comp = ipc_get_comp_by_id(ipc, comp_id); + MEM_WIN_DEBUG0(0xaab0,cdma_comp,0,0); + assert(cdma_comp != NULL); + if(ret == IPC4_SUCCESS || ret == IPC4_INVALID_CHAIN_STATE_TRANSITION) + { + // valid ret code. + } + else + { + return IPC4_INVALID_REQUEST; + } + const struct comp_driver *drv; + drv = ipc4_get_drv((uint8_t *)&uuid); + MEM_WIN_DEBUG0(0xaab1,drv,0,0); + assert(drv != NULL); + if (enable) + { + drv->ops.trigger(cdma_comp->cd, COMP_TRIGGER_START); + } + else + { + drv->ops.trigger(cdma_comp->cd, COMP_TRIGGER_PAUSE); + } + MEM_WIN_DEBUG0(0xaab2,drv,0,0); + } + else + { + const struct comp_driver *drv; + drv = ipc4_get_drv((uint8_t *)&uuid); + struct ipc_comp_dev* cdma_comp = ipc_get_comp_by_id(ipc, comp_id); + if (enable) + { + return IPC4_INVALID_REQUEST; + } + else + { + //ret = chain_dma_mgr->PauseChain(host_dma_id); + drv->ops.trigger(cdma_comp->cd, COMP_TRIGGER_PAUSE); + } + if (ret == IPC4_SUCCESS) + { + //ret = chain_dma_mgr->RemoveChain(host_dma_id); + drv->ops.free(cdma_comp->cd); + } + } + + //PREVIOUS IMPLEMENTATION + // if (cdma.primary.r.allocate && cdma.extension.r.fifo_size) { + // ret = ipc4_create_chain_dma(ipc, &cdma); + // if (ret) { + // tr_err(&ipc_tr, "failed to create chain dma %d", ret); + // return ret; + // } + + // /* if enable is not set, chain dma pipeline is not going to be triggered */ + // if (!cdma.primary.r.enable) + // return ret; + // } + + // atomic_set(&msg_data.delayed_reply, 1); + // ret = ipc4_trigger_chain_dma(ipc, &cdma); + // /* it is not scheduled in another thread */ + // if (ret != PPL_STATUS_SCHEDULED) { + // atomic_set(&msg_data.delayed_reply, 0); + // msg_data.delayed_error = 0; + // } else { + // ret = 0; + // } + MEM_WIN_DEBUG0(0xaaa1,0,0,0); return ret; } diff --git a/src/ipc/ipc4/helper.c b/src/ipc/ipc4/helper.c index 2d1d6577f284..401b9a839634 100644 --- a/src/ipc/ipc4/helper.c +++ b/src/ipc/ipc4/helper.c @@ -590,6 +590,43 @@ static int construct_config(struct ipc4_copier_module_cfg *copier_cfg, uint32_t return IPC4_SUCCESS; } +#include "sof/mem_win_debug.h" +int ipc4_create_io_driver_for_chain(struct ipc4_chain_dma *cdma) +{ + struct sof_uuid uuid = {0x6a0a274f, 0x27cc, 0x4afb, {0xa3, 0xe7, 0x34, + 0x44, 0x72, 0x3f, 0x43, 0x2e}}; + + const struct comp_driver *drv; + struct comp_dev *dev; + uint32_t dir, host_chan, link_chan; + int ret; + + drv = ipc4_get_drv((uint8_t *)&uuid); + MEM_WIN_DEBUG0(0xbbb0,drv,0,0); + if (!drv) + return IPC4_INVALID_RESOURCE_ID; + + ret = process_dma_index(cdma->primary.r.host_dma_id, &dir, &host_chan); + if (ret != IPC4_SUCCESS) + return ret; + + ret = process_dma_index(cdma->primary.r.link_dma_id, &dir, &link_chan); + if (ret != IPC4_SUCCESS) + return ret; + + dev = drv->ops.chain_dma_create(drv, (uint8_t)host_chan, (uint8_t)link_chan, + cdma->extension.r.fifo_size, cdma->primary.r.scs); + + if (!dev) + return NULL; + + ipc4_add_comp_dev(dev); + //dev->ipc_config.id + + return IPC4_SUCCESS; +} + +//deprecated int ipc4_create_chain_dma(struct ipc *ipc, struct ipc4_chain_dma *cdma) { struct ipc4_copier_module_cfg copier_cfg; @@ -723,6 +760,7 @@ int ipc4_create_chain_dma(struct ipc *ipc, struct ipc4_chain_dma *cdma) return ret; } +//deprecated int ipc4_trigger_chain_dma(struct ipc *ipc, struct ipc4_chain_dma *cdma) { struct ipc_comp_dev *ipc_pipe; @@ -793,6 +831,7 @@ int ipc4_trigger_chain_dma(struct ipc *ipc, struct ipc4_chain_dma *cdma) return IPC4_SUCCESS; } +#include "mem_win_debug.h" const struct comp_driver *ipc4_get_drv(uint8_t *uuid) { struct comp_driver_list *drivers = comp_drivers_get(); @@ -807,6 +846,7 @@ const struct comp_driver *ipc4_get_drv(uint8_t *uuid) list_for_item(clist, &drivers->list) { info = container_of(clist, struct comp_driver_info, list); + MEM_WIN_DEBUG0(0x01d01d, info->drv->uid->a, info->drv->uid->b, 0); if (!memcmp(info->drv->uid, uuid, UUID_SIZE)) { tr_dbg(&comp_tr, "found type %d, uuid %pU", diff --git a/zephyr/CMakeLists.txt b/zephyr/CMakeLists.txt index 8ec0ead87a10..d3fa176b3303 100644 --- a/zephyr/CMakeLists.txt +++ b/zephyr/CMakeLists.txt @@ -564,6 +564,7 @@ zephyr_library_sources( ${SOF_AUDIO_PATH}/pipeline/pipeline-schedule.c ${SOF_AUDIO_PATH}/pipeline/pipeline-stream.c ${SOF_AUDIO_PATH}/pipeline/pipeline-xrun.c + ${SOF_AUDIO_PATH}/pipeline/chain_dma.c # SOF core infrastructure - runs on top of Zephyr ${SOF_SRC_PATH}/init/init.c