From 7ae656e47b104b22dc625bbda98727665c0185a7 Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Wed, 11 Sep 2024 10:07:31 +0200 Subject: [PATCH 1/3] [DNM] west.yml: use private fork of Zephyr with new LLEXT API --- west.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/west.yml b/west.yml index 81c9f6c06d03..4ec09e03cfbe 100644 --- a/west.yml +++ b/west.yml @@ -7,6 +7,8 @@ manifest: remote: thesofproject remotes: + - name: pillo79 + url-base: https://github.com/pillo79 - name: thesofproject url-base: https://github.com/thesofproject - name: zephyrproject @@ -43,8 +45,8 @@ manifest: - name: zephyr repo-path: zephyr - revision: 218de8dc676c424d81c3402e6262e5e326b84b28 - remote: zephyrproject + revision: pr-llext-storage + remote: pillo79 # Import some projects listed in zephyr/west.yml@revision # From 839d94d6f6e2dfe7373eee8e2d39d5342130bf1a Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Mon, 24 Feb 2025 12:52:04 +0100 Subject: [PATCH 2/3] [DNM] load volume with llext Build 'volume' as a module to test the new API on an extension with detached sections. Signed-off-by: Luca Burelli --- app/boards/intel_adsp_ace20_lnl.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/app/boards/intel_adsp_ace20_lnl.conf b/app/boards/intel_adsp_ace20_lnl.conf index acc26e09462a..8e32d176bc89 100644 --- a/app/boards/intel_adsp_ace20_lnl.conf +++ b/app/boards/intel_adsp_ace20_lnl.conf @@ -13,6 +13,7 @@ CONFIG_COMP_KPB=y CONFIG_COMP_TESTER=m CONFIG_COMP_SRC_IPC4_FULL_MATRIX=y CONFIG_COMP_UP_DOWN_MIXER=y +CONFIG_COMP_VOLUME=m CONFIG_COMP_VOLUME_WINDOWS_FADE=y CONFIG_FORMAT_CONVERT_HIFI3=n CONFIG_PCM_CONVERTER_FORMAT_S16_C16_AND_S16_C32=y From d8d6b1c05d34b9e17fe2deb671136208e731010f Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Wed, 26 Feb 2025 10:56:50 +0100 Subject: [PATCH 3/3] [DNM] add debug prints --- src/library_manager/llext_manager.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/library_manager/llext_manager.c b/src/library_manager/llext_manager.c index e7f6487740af..e5918595b89a 100644 --- a/src/library_manager/llext_manager.c +++ b/src/library_manager/llext_manager.c @@ -110,6 +110,10 @@ static int llext_manager_load_data_from_storage(const struct llext_loader *ldr, (uintptr_t)shdr->sh_addr >= (uintptr_t)vma + size) continue; + tr_info(&lib_manager_tr, "reg %i: sect %u, %p <- %p, %u", region, i, + (void *)shdr->sh_addr, + (void *)((uintptr_t)region_addr + s_offset), shdr->sh_size); + ret = memcpy_s((__sparse_force void *)shdr->sh_addr, size - s_offset, (const uint8_t *)region_addr + s_offset, shdr->sh_size); if (ret < 0) @@ -263,6 +267,8 @@ static int llext_manager_link(const char *name, const elf_shdr_t *hdr; int ret; + tr_info(&lib_manager_tr, "%s: reloc %i mapped %i", name, !*llext, mctx->mapped); + if (*llext && !mctx->mapped) { /* * All module instances have been terminated, so we freed SRAM, @@ -297,27 +303,27 @@ static int llext_manager_link(const char *name, mctx->segment[LIB_MANAGER_TEXT].addr = hdr->sh_addr; mctx->segment[LIB_MANAGER_TEXT].size = hdr->sh_size; - tr_dbg(&lib_manager_tr, ".text: start: %#lx size %#x", - mctx->segment[LIB_MANAGER_TEXT].addr, - mctx->segment[LIB_MANAGER_TEXT].size); + tr_info(&lib_manager_tr, ".text: start: %#lx size %#x", + mctx->segment[LIB_MANAGER_TEXT].addr, + mctx->segment[LIB_MANAGER_TEXT].size); /* All read-only data sections */ llext_get_region_info(ldr, *llext, LLEXT_MEM_RODATA, &hdr, NULL, NULL); mctx->segment[LIB_MANAGER_RODATA].addr = hdr->sh_addr; mctx->segment[LIB_MANAGER_RODATA].size = hdr->sh_size; - tr_dbg(&lib_manager_tr, ".rodata: start: %#lx size %#x", - mctx->segment[LIB_MANAGER_RODATA].addr, - mctx->segment[LIB_MANAGER_RODATA].size); + tr_info(&lib_manager_tr, ".rodata: start: %#lx size %#x", + mctx->segment[LIB_MANAGER_RODATA].addr, + mctx->segment[LIB_MANAGER_RODATA].size); /* All writable data sections */ llext_get_region_info(ldr, *llext, LLEXT_MEM_DATA, &hdr, NULL, NULL); mctx->segment[LIB_MANAGER_DATA].addr = hdr->sh_addr; mctx->segment[LIB_MANAGER_DATA].size = hdr->sh_size; - tr_dbg(&lib_manager_tr, ".data: start: %#lx size %#x", - mctx->segment[LIB_MANAGER_DATA].addr, - mctx->segment[LIB_MANAGER_DATA].size); + tr_info(&lib_manager_tr, ".data: start: %#lx size %#x", + mctx->segment[LIB_MANAGER_DATA].addr, + mctx->segment[LIB_MANAGER_DATA].size); /* Writable uninitialized data section */ llext_get_region_info(ldr, *llext, LLEXT_MEM_BSS, &hdr, NULL, NULL); @@ -652,6 +658,9 @@ int llext_manager_free_module(const uint32_t component_id) */ int ret = llext_unload(&mctx->llext); + tr_info(&lib_manager_tr, + "mod_id: %#x: llext_unload(): %d", + component_id, ret); if (ret <= 0) { tr_err(&lib_manager_tr, "mod_id: %#x: invalid return code from llext_unload(): %d",