Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
27cc77f
(---section submitted PRs START)
kv2019i Mar 23, 2026
9ac3f79
app: add CONFIG_SOF_OS_LINUX_COMPAT_PRIORITY
kv2019i Apr 1, 2026
cec6caf
audio: base_fw_intel: do not access UAOL hw in Linux compat mode
kv2019i Apr 1, 2026
16aff9d
(---section submitted PRs STOP)
kv2019i Mar 23, 2026
80be60c
(---section: user LL infra START)
kv2019i Mar 27, 2026
a4deff6
ipc: move standalone-test check later in ipc_init()
kv2019i Feb 10, 2026
0f8d0e0
audio: component: add comp_grant_access_to_thread()
kv2019i Feb 13, 2026
f82b4a4
pipeline: protect component connections with a mutex
kv2019i Feb 12, 2026
5eeb3f6
rtos: alloc.h: add sof_sys_user_heap_get()
kv2019i Mar 18, 2026
f6b682c
zephyr: rtos: userspace_helper.h: add sysuser memory partition
kv2019i Mar 26, 2026
4eb0b53
zephyr: lib: make sof_heap_alloc/free system calls
kv2019i Feb 13, 2026
5b768a5
schedule: zephyr_ll_user: make the heap accessible from user-space
kv2019i Feb 13, 2026
6b68976
schedule: zephyr_ll: convert pdata->sem into a dynamic object
kv2019i Feb 13, 2026
c523cb9
schedule: zephyr_ll_user: move user accessible heap to common partition
kv2019i Feb 13, 2026
7eb5ad4
dma: dma_sg: allocate on specific heap
kv2019i Feb 16, 2026
0256dfb
buffer: extend ability to allocate on specific heap to all functions
kv2019i Feb 16, 2026
12bf6c0
(---section: user LL infra STOP)
kv2019i Mar 27, 2026
08f57ac
(---section host-zephyr START)
kv2019i Feb 19, 2026
c181391
zephyr: userspace: sof_dma: allow circular SG lists
kv2019i Feb 19, 2026
f8815df
zephyr: lib: dma: make DMA platform data available to user-space
kv2019i Feb 13, 2026
76fde30
audio: host-zephyr: select heap when allocating host buffers
kv2019i Feb 13, 2026
b86b910
audio: host-zephyr: rework calls to DMA driver, remove channel pointer
kv2019i Feb 16, 2026
b41df96
audio: host-zephyr: pass component heap to dma_sg_alloc
kv2019i Feb 16, 2026
4efbc52
alloc.h: remove rbrelloac() and rbrealloc_align()
kv2019i Feb 16, 2026
4f843e1
audio: host-zephyr: ensure host data heap is set
kv2019i Feb 16, 2026
71a53f0
audio: host-zephyr: make component usable from user-space
kv2019i Mar 27, 2026
b260e66
(---section host-zephyr STOP)
kv2019i Feb 19, 2026
cca2666
(---section dai-zephyr START)
kv2019i Feb 19, 2026
2b048fa
audio: pcm_converter: make global tables available to user-space
kv2019i Feb 17, 2026
0cdc9b2
audio: buffer: replace notifier events with direct probe callbacks
kv2019i Feb 17, 2026
b33e16b
audio: dai-zephyr: make memory allocations user-space compatible
kv2019i Feb 17, 2026
f990bb3
lib: dai: make dai_get() and dai_put() compatible with user-space
kv2019i Feb 17, 2026
9aa176c
audio: dai-zephyr: rework calls to DMA driver, remove channel pointer
kv2019i Feb 17, 2026
2dbd1ad
audio: dai-zephyr: convert spinlock into mutex for properties
kv2019i Feb 17, 2026
a006d2a
audio: dai-zephyr: migrate to use dai_get_properties_copy()
kv2019i Feb 18, 2026
5b4c619
(---section dai-zephyr STOP)
kv2019i Feb 19, 2026
c7d57fa
(---section audio module infra START)
kv2019i Mar 3, 2026
d63bff6
audio: module_adapter: alloc from LL user heap if LL run in user
kv2019i Feb 12, 2026
def00d1
audio: copier: export copier endpoint ops to user-space
kv2019i Feb 26, 2026
7bd86a1
(---section schduler changes START)
kv2019i Mar 3, 2026
8632932
schedule: zephyr_ll: add zephyr_ll_task_free()
kv2019i Feb 26, 2026
46253b3
schedule: zephyr_ll: add zephyr_ll_grant_access()
kv2019i Feb 26, 2026
ec6f63f
schedule: zephyr_ll_user: make double-mapping conditional
kv2019i Mar 4, 2026
86976b3
schedule: allocate the scheduler objects with sof_heap_alloc
kv2019i Feb 26, 2026
5979a97
WIP: schedule: limit user-LL to core0
kv2019i Feb 26, 2026
0e6ebc3
zephyr: schedule: allow user-space to access scheduler list
kv2019i Feb 26, 2026
2975a30
zephyr: wrapper: modify platform_dai_wallclock() for user-space
kv2019i Feb 26, 2026
752623f
schedule: add scheduler_init_context() and scheduler_free_context()
kv2019i Feb 27, 2026
694d8b5
schedule: zephyr_ll: implement scheduler_init_context()
kv2019i Feb 26, 2026
908be6c
schedule: ll_schedule_domain: add domain_thread_init/free ops
kv2019i Mar 4, 2026
40c3510
schedule: zephyr_ll: implement thread_init/free domain ops
kv2019i Mar 4, 2026
2e7d197
(---section schduler changes END)
kv2019i Mar 3, 2026
1f48066
(---section audio-user PRs START)
kv2019i Mar 25, 2026
5526aac
schedule: zephyr_domain: use a different thread name for user LL
kv2019i Mar 24, 2026
8e9b323
WIP: audio: dai-zephyr: temporary solution to give access to mutex
kv2019i Mar 20, 2026
88344a4
WIP: audio: module_adapter: use correct heap when freeing
kv2019i Mar 20, 2026
3b0e074
WIP: audio: pipeline-graph: do not use mutex, can be reverted?
kv2019i Mar 20, 2026
7096447
coherent: disable core debug checks for user-space builds
kv2019i Mar 20, 2026
6f1442f
audio: place component driver list in user-space accessible partition
kv2019i Mar 24, 2026
d69f4fd
audio: module_adapter: make adapter buffering user-space compatible
kv2019i Mar 24, 2026
3263340
audio: pipeline: use LL scheduler mutex for userspace pipeline triggers
kv2019i Feb 26, 2026
3f765bc
audio: buffer: move dp_heap_user lifecycle to IPC and module adapter
kv2019i Feb 17, 2026
6c90f0b
audio: host-zepher: add HOST_DMA_IPC_POSITION_UPDATES Kconfig
kv2019i Mar 31, 2026
ad16fab
(---section audio user PRs STOP)
kv2019i Mar 25, 2026
0fb5565
(---section: IPC user support START)
kv2019i Mar 17, 2026
0908042
userspace: split ipc files into user and kernel features. REVISIT memcpy
kv2019i Apr 1, 2026
be70f41
ipc4: helper: use LL scheduler lock for userspace builds
kv2019i Mar 26, 2026
a12521f
WIP: ipc: implement user-space IPC handling
kv2019i Mar 12, 2026
2a29050
ipc: make IPC stack thread size configurable
Apr 1, 2026
def699a
ipc: ipc4: use sof_heap_alloc in ipc4_add_comp_dev()
kv2019i Mar 19, 2026
887947b
ipc: turn ipc_msg_reply() into a system call
kv2019i Mar 30, 2026
c39c399
ipc: ipc4: use correct API to get DMA status
kv2019i Mar 19, 2026
b2a77f3
ipc: use application heap for IPC pipeline and component allocations
kv2019i Mar 20, 2026
b30f4f5
(---section: IPC user support STOP)
kv2019i Mar 27, 2026
8b4b652
(---section test-case START)
kv2019i Feb 19, 2026
8afbb82
zephyr: test: userspace: add pipeline_two_components test
kv2019i Feb 9, 2026
a64d1c0
zephyr: test: userspace: add ipc4_create_pipeline_check
kv2019i Mar 13, 2026
a1f8d73
(---section WIP mandatory changes START)
kv2019i Feb 19, 2026
81f434b
audio: pipeline: enable position reporting for user-space pipelines
kv2019i Mar 17, 2026
ad359d6
HACK: audio: collection of feature limitations to run LL in user
kv2019i Feb 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Kconfig.sof
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,14 @@ config FAST_GET
counting. Source is src/lib/fast-get.c. The option should be selected
on platforms, where __cold_rodata is supported.

config SOF_OS_LINUX_COMPAT_PRIORITY
bool "Prioritize backwards compatibility for old Linux kernels"
help
Build option to maintain maximal backwards compatibility with old
versions of Linux SOF driver. When this is not set, firmware may
require newer version of host, and/or use features that are not
available in stable Linux kernel trees.

rsource "Kconfig.xtos"

rsource "src/Kconfig"
Expand Down
6 changes: 6 additions & 0 deletions app/os_linux_overlay.conf
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
# with SOF driver in Linux kernel
#

# As general rule, update of SOF firmware shall never
# break existing systems by depending on Linux kernel patches
# that have been upstreamed after commercial availability
# of a product.
CONFIG_SOF_OS_LINUX_COMPAT_PRIORITY=y

# SOF Linux driver does not require FW to retain its
# state, so context save can be disabled
CONFIG_ADSP_IMR_CONTEXT_SAVE=n
Expand Down
24 changes: 1 addition & 23 deletions posix/include/rtos/alloc.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,29 +97,6 @@ static inline void *rballoc(uint32_t flags, size_t bytes)
return rballoc_align(flags, bytes, PLATFORM_DCACHE_ALIGN);
}

/**
* Changes size of the memory block allocated.
* @param ptr Address of the block to resize.
* @param flags Flags, see SOF_MEM_FLAG_...
* @param bytes New size in bytes.
* @param old_bytes Old size in bytes.
* @param alignment Alignment in bytes.
* @return Pointer to the resized memory of NULL if failed.
*/
void *rbrealloc_align(void *ptr, uint32_t flags, size_t bytes,
size_t old_bytes, uint32_t alignment);

/**
* Similar to rballoc_align(), returns resized buffer aligned to
* PLATFORM_DCACHE_ALIGN.
*/
static inline void *rbrealloc(void *ptr, uint32_t flags,
size_t bytes, size_t old_bytes)
{
return rbrealloc_align(ptr, flags, bytes, old_bytes,
PLATFORM_DCACHE_ALIGN);
}

/**
* Frees the memory block.
* @param ptr Pointer to the memory block.
Expand All @@ -141,6 +118,7 @@ void *sof_heap_alloc(struct k_heap *heap, uint32_t flags, size_t bytes,
size_t alignment);
void sof_heap_free(struct k_heap *heap, void *addr);
struct k_heap *sof_sys_heap_get(void);
struct k_heap *sof_sys_user_heap_get(void);

/**
* Calculates length of the null-terminated string.
Expand Down
6 changes: 4 additions & 2 deletions posix/include/sof/lib/dma.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@

struct comp_buffer;
struct comp_dev;
struct k_heap;

/** \addtogroup sof_dma_drivers DMA Drivers
* DMA Drivers API specification.
Expand Down Expand Up @@ -511,13 +512,14 @@ static inline void dma_sg_init(struct dma_sg_elem_array *ea)
ea->elems = NULL;
}

int dma_sg_alloc(struct dma_sg_elem_array *ea,
int dma_sg_alloc(struct k_heap *heap,
struct dma_sg_elem_array *ea,
uint32_t flags,
uint32_t direction,
uint32_t buffer_count, uint32_t buffer_bytes,
uintptr_t dma_buffer_addr, uintptr_t external_addr);

void dma_sg_free(struct dma_sg_elem_array *ea);
void dma_sg_free(struct k_heap *heap, struct dma_sg_elem_array *ea);

/**
* \brief Get the total size of SG buffer
Expand Down
8 changes: 8 additions & 0 deletions src/audio/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,14 @@ config HOST_DMA_STREAM_SYNCHRONIZATION
for each group, different than the default one determined by the system tick frequency.
This feature will allow host lower power consumption in scenarios with deep buffering.

config HOST_DMA_IPC_POSITION_UPDATES
bool "Support for stream position updates via IPC messages"
default y if IPC_MAJOR_3
help
Support firmware functionality to report stream position updates
by sending a IPC message whenever one period of audio is transfferred.
Most platforms provide more efficient ways to query the DMA status.

config COMP_CHAIN_DMA
bool "Chain DMA component"
depends on IPC_MAJOR_4
Expand Down
6 changes: 5 additions & 1 deletion src/audio/base_fw_intel.c
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,11 @@ __cold int basefw_vendor_hw_config(uint32_t *data_offset, char *data)
tlv_value_set(tuple, IPC4_INTEL_MIC_PRIVACY_CAPS_HW_CFG, sizeof(priv_caps), &priv_caps);
#endif

#if CONFIG_UAOL_INTEL_ADSP
/* Linux 7.0 and older do not enable UAOL for any Intel
* hardware, so beloe capability check will lead to a DSP
* panic. In strict compatibility mode, bypass the capability
* check. */
#if !defined(CONFIG_SOF_OS_LINUX_COMPAT_PRIORITY) && defined(CONFIG_UAOL_INTEL_ADSP)
tuple = tlv_next(tuple);
tlv_value_set_uaol_caps(tuple, IPC4_UAOL_CAPS_HW_CFG);
#endif
Expand Down
104 changes: 39 additions & 65 deletions src/audio/buffers/comp_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
#include <rtos/interrupt.h>
#include <rtos/alloc.h>
#include <rtos/cache.h>
#include <sof/lib/notifier.h>
#include <sof/list.h>
#include <sof/schedule/dp_schedule.h>
#include <rtos/spinlock.h>
Expand Down Expand Up @@ -147,28 +146,17 @@ static void comp_buffer_free(struct sof_audio_buffer *audio_buffer)

struct comp_buffer *buffer = container_of(audio_buffer, struct comp_buffer, audio_buffer);

struct buffer_cb_free cb_data = {
.buffer = buffer,
};

buf_dbg(buffer, "buffer_free()");

notifier_event(buffer, NOTIFIER_ID_BUFFER_FREE,
NOTIFIER_TARGET_CORE_LOCAL, &cb_data, sizeof(cb_data));

/* In case some listeners didn't unregister from buffer's callbacks */
notifier_unregister_all(NULL, buffer);
#if CONFIG_PROBE
if (buffer->probe_cb_free)
buffer->probe_cb_free(buffer->probe_cb_arg);
#endif

struct k_heap *heap = buffer->audio_buffer.heap;

rfree(buffer->stream.addr);
sof_heap_free(heap, buffer->stream.addr);
sof_heap_free(heap, buffer);
if (heap) {
struct dp_heap_user *mod_heap_user = container_of(heap, struct dp_heap_user, heap);

if (!--mod_heap_user->client_count)
rfree(mod_heap_user);
}
}

APP_TASK_DATA static const struct source_ops comp_buffer_source_ops = {
Expand Down Expand Up @@ -218,6 +206,7 @@ static struct comp_buffer *buffer_alloc_struct(struct k_heap *heap,

memset(buffer, 0, sizeof(*buffer));

buffer->heap = heap;
buffer->flags = flags;
/* Force channels to 2 for init to prevent bad call to clz in buffer_init_stream */
buffer->stream.runtime_stream_params.channels = 2;
Expand Down Expand Up @@ -254,7 +243,7 @@ struct comp_buffer *buffer_alloc(struct k_heap *heap, size_t size, uint32_t flag
return NULL;
}

stream_addr = rballoc_align(flags, size, align);
stream_addr = sof_heap_alloc(heap, flags, size, align);
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the commit, that is mentioned in the commit message, only moved buffer context objects to particular heaps. This commit moves actual data buffers to them too, which is different and (arguably) more risky

if (!stream_addr) {
tr_err(&buffer_tr, "could not alloc size = %zu bytes of flags = 0x%x",
size, flags);
Expand All @@ -264,9 +253,11 @@ struct comp_buffer *buffer_alloc(struct k_heap *heap, size_t size, uint32_t flag
buffer = buffer_alloc_struct(heap, stream_addr, size, flags, is_shared);
if (!buffer) {
tr_err(&buffer_tr, "could not alloc buffer structure");
rfree(stream_addr);
sof_heap_free(heap, stream_addr);
}

buffer->heap = heap;

return buffer;
}

Expand All @@ -292,7 +283,7 @@ struct comp_buffer *buffer_alloc_range(struct k_heap *heap, size_t preferred_siz
preferred_size += minimum_size - preferred_size % minimum_size;

for (size = preferred_size; size >= minimum_size; size -= minimum_size) {
stream_addr = rballoc_align(flags, size, align);
stream_addr = sof_heap_alloc(heap, flags, size, align);
if (stream_addr)
break;
}
Expand All @@ -308,9 +299,11 @@ struct comp_buffer *buffer_alloc_range(struct k_heap *heap, size_t preferred_siz
buffer = buffer_alloc_struct(heap, stream_addr, size, flags, is_shared);
if (!buffer) {
tr_err(&buffer_tr, "could not alloc buffer structure");
rfree(stream_addr);
sof_heap_free(heap, stream_addr);
}

buffer->heap = heap;

return buffer;
}

Expand Down Expand Up @@ -341,14 +334,8 @@ int buffer_set_size(struct comp_buffer *buffer, uint32_t size, uint32_t alignmen
if (size == audio_stream_get_size(&buffer->stream))
return 0;

if (!alignment)
new_ptr = rbrealloc(audio_stream_get_addr(&buffer->stream),
buffer->flags | SOF_MEM_FLAG_NO_COPY,
size, audio_stream_get_size(&buffer->stream));
else
new_ptr = rbrealloc_align(audio_stream_get_addr(&buffer->stream),
buffer->flags | SOF_MEM_FLAG_NO_COPY, size,
audio_stream_get_size(&buffer->stream), alignment);
new_ptr = sof_heap_alloc(buffer->heap, buffer->flags, size, alignment);

/* we couldn't allocate bigger chunk */
if (!new_ptr && size > audio_stream_get_size(&buffer->stream)) {
buf_err(buffer, "resize can't alloc %u bytes of flags 0x%x",
Expand All @@ -357,8 +344,10 @@ int buffer_set_size(struct comp_buffer *buffer, uint32_t size, uint32_t alignmen
}

/* use bigger chunk, else just use the old chunk but set smaller */
if (new_ptr)
if (new_ptr) {
sof_heap_free(buffer->heap, audio_stream_get_addr(&buffer->stream));
buffer->stream.addr = new_ptr;
}

buffer_init_stream(buffer, size);

Expand Down Expand Up @@ -389,22 +378,11 @@ int buffer_set_size_range(struct comp_buffer *buffer, size_t preferred_size, siz
if (preferred_size == actual_size)
return 0;

if (!alignment) {
for (new_size = preferred_size; new_size >= minimum_size;
new_size -= minimum_size) {
new_ptr = rbrealloc(ptr, buffer->flags | SOF_MEM_FLAG_NO_COPY,
new_size, actual_size);
if (new_ptr)
break;
}
} else {
for (new_size = preferred_size; new_size >= minimum_size;
new_size -= minimum_size) {
new_ptr = rbrealloc_align(ptr, buffer->flags | SOF_MEM_FLAG_NO_COPY,
new_size, actual_size, alignment);
if (new_ptr)
break;
}
for (new_size = preferred_size; new_size >= minimum_size;
new_size -= minimum_size) {
new_ptr = sof_heap_alloc(buffer->heap, buffer->flags, new_size, alignment);
if (new_ptr)
break;
}

/* we couldn't allocate bigger chunk */
Expand All @@ -415,8 +393,10 @@ int buffer_set_size_range(struct comp_buffer *buffer, size_t preferred_size, siz
}

/* use bigger chunk, else just use the old chunk but set smaller */
if (new_ptr)
if (new_ptr) {
sof_heap_free(buffer->heap, audio_stream_get_addr(&buffer->stream));
buffer->stream.addr = new_ptr;
}

buffer_init_stream(buffer, new_size);

Expand Down Expand Up @@ -478,12 +458,6 @@ bool buffer_params_match(struct comp_buffer *buffer,

void comp_update_buffer_produce(struct comp_buffer *buffer, uint32_t bytes)
{
struct buffer_cb_transact cb_data = {
.buffer = buffer,
.transaction_amount = bytes,
.transaction_begin_address = audio_stream_get_wptr(&buffer->stream),
};

/* return if no bytes */
if (!bytes) {
#if CONFIG_SOF_LOG_DBG_BUFFER
Expand All @@ -499,10 +473,19 @@ void comp_update_buffer_produce(struct comp_buffer *buffer, uint32_t bytes)
return;
}

audio_stream_produce(&buffer->stream, bytes);
#if CONFIG_PROBE
if (buffer->probe_cb_produce) {
struct buffer_cb_transact cb_data = {
.buffer = buffer,
.transaction_amount = bytes,
.transaction_begin_address = audio_stream_get_wptr(&buffer->stream),
};

notifier_event(buffer, NOTIFIER_ID_BUFFER_PRODUCE,
NOTIFIER_TARGET_CORE_LOCAL, &cb_data, sizeof(cb_data));
buffer->probe_cb_produce(buffer->probe_cb_arg, &cb_data);
}
#endif

audio_stream_produce(&buffer->stream, bytes);

#if CONFIG_SOF_LOG_DBG_BUFFER
buf_dbg(buffer, "((buffer->avail << 16) | buffer->free) = %08x, ((buffer->id << 16) | buffer->size) = %08x",
Expand All @@ -519,12 +502,6 @@ void comp_update_buffer_produce(struct comp_buffer *buffer, uint32_t bytes)

void comp_update_buffer_consume(struct comp_buffer *buffer, uint32_t bytes)
{
struct buffer_cb_transact cb_data = {
.buffer = buffer,
.transaction_amount = bytes,
.transaction_begin_address = audio_stream_get_rptr(&buffer->stream),
};

CORE_CHECK_STRUCT(&buffer->audio_buffer);

/* return if no bytes */
Expand All @@ -544,9 +521,6 @@ void comp_update_buffer_consume(struct comp_buffer *buffer, uint32_t bytes)

audio_stream_consume(&buffer->stream, bytes);

notifier_event(buffer, NOTIFIER_ID_BUFFER_CONSUME,
NOTIFIER_TARGET_CORE_LOCAL, &cb_data, sizeof(cb_data));

#if CONFIG_SOF_LOG_DBG_BUFFER
buf_dbg(buffer, "(buffer->avail << 16) | buffer->free = %08x, (buffer->id << 16) | buffer->size = %08x, (buffer->r_ptr - buffer->addr) << 16 | (buffer->w_ptr - buffer->addr)) = %08x",
(audio_stream_get_avail_bytes(&buffer->stream) << 16) |
Expand Down
10 changes: 9 additions & 1 deletion src/audio/component.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@

LOG_MODULE_REGISTER(component, CONFIG_SOF_LOG_LEVEL);

static SHARED_DATA struct comp_driver_list cd;
static APP_SYSUSER_BSS SHARED_DATA struct comp_driver_list cd;

SOF_DEFINE_REG_UUID(component);

Expand Down Expand Up @@ -699,3 +699,11 @@ void comp_update_ibs_obs_cpc(struct comp_dev *dev)
#endif
}

#ifdef CONFIG_SOF_USERSPACE_LL
void comp_grant_access_to_thread(const struct comp_dev *dev, struct k_thread *th)
{
assert(dev->list_mutex);
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

description a bit confusing - this is only granting access to a mutex. Also list_mutex is only added to comp_dev in the next commit.

tr_dbg(&ipc_tr, "grant access to mutex %p for thread %p", dev->list_mutex, th);
k_thread_access_grant(th, dev->list_mutex);
}
#endif
4 changes: 2 additions & 2 deletions src/audio/copier/copier.c
Original file line number Diff line number Diff line change
Expand Up @@ -1189,7 +1189,7 @@ __cold static int copier_unbind(struct processing_module *mod, struct bind_info
return 0;
}

static struct module_endpoint_ops copier_endpoint_ops = {
static APP_TASK_DATA const struct module_endpoint_ops copier_endpoint_ops = {
.get_total_data_processed = copier_get_processed_data,
.position = copier_position,
.dai_ts_config = copier_dai_ts_config_op,
Expand All @@ -1200,7 +1200,7 @@ static struct module_endpoint_ops copier_endpoint_ops = {
.trigger = copier_comp_trigger
};

static const struct module_interface copier_interface = {
static APP_TASK_DATA const struct module_interface copier_interface = {
.init = copier_init,
.prepare = copier_prepare,
.process_audio_stream = copier_process,
Expand Down
2 changes: 2 additions & 0 deletions src/audio/copier/copier_dai.c
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,8 @@ __cold static int copier_dai_init(struct comp_dev *dev,
if (!dd)
return -ENOMEM;
memset(dd, 0, sizeof(*dd));
dd->chan_index = -1;
comp_info(dev, "dd %p initialized, index %d", dd, dd->chan_index);

ret = dai_common_new(dd, dev, dai);
if (ret < 0)
Expand Down
Loading
Loading