Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TEST][DNM] make 3 components modular #9296

Closed
wants to merge 12 commits into from
7 changes: 5 additions & 2 deletions app/boards/intel_adsp_ace15_mtpm.conf
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ CONFIG_MM_DRV_INTEL_ADSP_TLB_REMAP_UNUSED_RAM=y
CONFIG_AMS=y
CONFIG_COUNTER=y
CONFIG_SOF_TELEMETRY=y
CONFIG_SOF_TELEMETRY_PERFORMANCE_MEASUREMENTS=y

CONFIG_HEAP_MEM_POOL_SIZE=8192
CONFIG_L3_HEAP=y
Expand Down Expand Up @@ -88,6 +87,10 @@ CONFIG_LLEXT=y
CONFIG_LLEXT_STORAGE_WRITABLE=y
CONFIG_MODULES=y

CONFIG_COMP_MIXIN_MIXOUT=m
CONFIG_COMP_IIR=m
CONFIG_SAMPLE_SMART_AMP=m

# Temporary disabled options
CONFIG_TRACE=n
CONFIG_COMP_KPB=y
Expand All @@ -106,4 +109,4 @@ CONFIG_LOG_TIMESTAMP_64BIT=y
CONFIG_COMP_GOOGLE_RTC_AUDIO_PROCESSING=y
CONFIG_COMP_STUBS=y

CONFIG_KCPS_DYNAMIC_CLOCK_CONTROL=y
CONFIG_KCPS_DYNAMIC_CLOCK_CONTROL=n
1 change: 0 additions & 1 deletion app/boards/intel_adsp_ace20_lnl.conf
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ CONFIG_MM_DRV_INTEL_ADSP_TLB_REMAP_UNUSED_RAM=y
CONFIG_AMS=y
CONFIG_COUNTER=y
CONFIG_SOF_TELEMETRY=y
CONFIG_SOF_TELEMETRY_PERFORMANCE_MEASUREMENTS=y

CONFIG_HEAP_MEM_POOL_SIZE=8192
CONFIG_L3_HEAP=y
Expand Down
1 change: 1 addition & 0 deletions app/overlays/repro-build.conf
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
CONFIG_OUTPUT_DISASSEMBLY=y
CONFIG_OUTPUT_DISASSEMBLY_WITH_SOURCE=n
CONFIG_MODULES=n
14 changes: 13 additions & 1 deletion scripts/xtensa-build-zephyr.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import gzip
import dataclasses
import concurrent.futures as concurrent
import re

from west import configuration as west_config

Expand Down Expand Up @@ -945,7 +946,18 @@ def install_lib(sof_lib_dir, abs_build_dir, platform_wconfig):
llext_input = entry_path / (llext_base + '.llext')
llext_output = entry_path / (llext_file + '.ri')

sign_cmd = [platform_wconfig.get("rimage.path"), "-o", str(llext_output),
# on Windows platform_wconfig.get("rimage.path") returns a string
# with multiple nested single and double quotes, which then break
# execution:
# In dir: D:\a\sof\sof\workspace; running command:
# ''"'"'D:\a\sof\sof\workspace\build-rimage\rimage.EXE'"'"'' -o
# 'D:\a\sof\sof\workspace\build-mtl\zephyr\eq_iir_llext\eq_iir.llext.ri' -e
# -c 'D:\a\sof\sof\workspace\build-mtl\zephyr\eq_iir_llext\rimage_config.toml'
# -k 'D:\a\sof\sof\workspace\sof\keys\otc_private_key_3k.pem' -l
# -r 'D:\a\sof\sof\workspace\build-mtl\zephyr\eq_iir_llext\eq_iir.llext'
# The regex below cleans them up
rimage_cmd = re.sub(r"[\"']", "", platform_wconfig.get("rimage.path"))
sign_cmd = [rimage_cmd, "-o", str(llext_output),
"-e", "-c", str(rimage_cfg),
"-k", str(signing_key), "-l", "-r",
str(llext_input)]
Expand Down
2 changes: 1 addition & 1 deletion src/audio/base_fw.c
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ static int basefw_pipeline_list_info_get(uint32_t *data_offset, char *data)

int set_perf_meas_state(const char *data)
{
#ifdef CONFIG_SOF_TELEMETRY
#if CONFIG_SOF_TELEMETRY && CONFIG_SOF_TELEMETRY_PERFORMANCE_MEASUREMENTS
enum ipc4_perf_measurements_state_set state = *data;

switch (state) {
Expand Down
6 changes: 1 addition & 5 deletions src/audio/eq_iir/eq_iir.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,6 @@ static int eq_iir_free(struct processing_module *mod)
{
struct comp_data *cd = module_get_private_data(mod);

comp_info(mod->dev, "eq_iir_free()");

eq_iir_free_delaylines(cd);
comp_data_blob_handler_free(cd->model_handler);

Expand Down Expand Up @@ -232,8 +230,6 @@ static int eq_iir_reset(struct processing_module *mod)
struct comp_data *cd = module_get_private_data(mod);
int i;

comp_info(mod->dev, "eq_iir_reset()");

eq_iir_free_delaylines(cd);

cd->eq_iir_func = NULL;
Expand Down Expand Up @@ -269,7 +265,7 @@ SOF_MODULE_INIT(eq_iir, sys_comp_module_eq_iir_interface_init);
SOF_LLEXT_MOD_ENTRY(eq_iir, &eq_iir_interface);

static const struct sof_man_module_manifest mod_manifest __section(".module") __used =
SOF_LLEXT_MODULE_MANIFEST("EQIIR", eq_iir_llext_entry, 1, UUID_EQIIR);
SOF_LLEXT_MODULE_MANIFEST("EQIIR", eq_iir_llext_entry, 1, UUID_EQIIR, 40);

SOF_LLEXT_BUILDINFO;

Expand Down
12 changes: 2 additions & 10 deletions src/audio/mixin_mixout/mixin_mixout.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,17 +173,14 @@ static int mixout_init(struct processing_module *mod)
static int mixin_free(struct processing_module *mod)
{
struct mixin_data *md = module_get_private_data(mod);
struct comp_dev *dev = mod->dev;

comp_dbg(dev, "mixin_free()");
rfree(md);

return 0;
}

static int mixout_free(struct processing_module *mod)
{
comp_dbg(mod->dev, "mixout_free()");
rfree(module_get_private_data(mod));

return 0;
Expand Down Expand Up @@ -554,9 +551,6 @@ static int mixout_process(struct processing_module *mod,
static int mixin_reset(struct processing_module *mod)
{
struct mixin_data *mixin_data = module_get_private_data(mod);
struct comp_dev *dev = mod->dev;

comp_dbg(dev, "mixin_reset()");

mixin_data->mix = NULL;
mixin_data->gain_mix = NULL;
Expand All @@ -568,8 +562,6 @@ static int mixout_reset(struct processing_module *mod)
{
struct comp_dev *dev = mod->dev;

comp_dbg(dev, "mixout_reset()");

/* FIXME: move this to module_adapter_reset() */
if (dev->pipeline->source_comp->direction == SOF_IPC_STREAM_PLAYBACK) {
int i;
Expand Down Expand Up @@ -980,8 +972,8 @@ SOF_LLEXT_MOD_ENTRY(mixout, &mixout_interface);

static const struct sof_man_module_manifest mod_manifest[] __section(".module") __used =
{
SOF_LLEXT_MODULE_MANIFEST("MIXIN", mixin_llext_entry, 1, UUID_MIXIN),
SOF_LLEXT_MODULE_MANIFEST("MIXOUT", mixout_llext_entry, 1, UUID_MIXOUT),
SOF_LLEXT_MODULE_MANIFEST("MIXIN", mixin_llext_entry, 1, UUID_MIXIN, 30),
SOF_LLEXT_MODULE_MANIFEST("MIXOUT", mixout_llext_entry, 1, UUID_MIXOUT, 30),
};

SOF_LLEXT_BUILDINFO;
Expand Down
13 changes: 13 additions & 0 deletions src/audio/pipeline/pipeline-stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -344,11 +344,18 @@ static int pipeline_calc_cps_consumption(struct comp_dev *current,

if (cd->cpc == 0) {
/* Use maximum clock budget, assume 1ms chunk size */
if (!ppl_data->kcps_acc[comp_core])
ppl_data->kcps_acc[comp_core] = ppl_data->kcps[comp_core];
ppl_data->kcps[comp_core] = CLK_MAX_CPU_HZ / 1000;
tr_warn(pipe,
"0 CPS requested for module: %#x, core: %d using safe max KCPS: %u",
current->ipc_config.id, comp_core, ppl_data->kcps[comp_core]);

/*
* This return code indicates to the caller, that the kcps calue
* shouldn't be used for slowing down the clock when terminating
* the pipeline
*/
return PPL_STATUS_PATH_STOP;
} else {
kcps = cd->cpc * 1000 / current->period;
Expand Down Expand Up @@ -430,6 +437,12 @@ int pipeline_trigger(struct pipeline *p, struct comp_dev *host, int cmd)
ret = walk_ctx.comp_func(p->source_comp, NULL, &walk_ctx, PPL_DIR_DOWNSTREAM);

for (int i = 0; i < arch_num_cpus(); i++) {
if (ret == PPL_STATUS_PATH_STOP) {
/* Restore the value before maximization */
data.kcps[i] -= data.kcps_acc[i];
data.kcps_acc[i] = 0;
}

if (data.kcps[i] > 0) {
core_kcps_adjust(i, -data.kcps[i]);
tr_info(pipe, "Sum of KCPS consumption: %d, core: %d", core_kcps_get(i), i);
Expand Down
3 changes: 2 additions & 1 deletion src/include/module/module/llext.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@
#ifndef MODULE_LLEXT_H
#define MODULE_LLEXT_H

#define SOF_LLEXT_MODULE_MANIFEST(manifest_name, entry, affinity, mod_uuid) \
#define SOF_LLEXT_MODULE_MANIFEST(manifest_name, entry, affinity, mod_uuid, instances) \
{ \
.module = { \
.name = manifest_name, \
.uuid = {mod_uuid}, \
.entry_point = (uint32_t)(entry), \
.instance_max_count = instances, \
.type = { \
.load_type = SOF_MAN_MOD_TYPE_LLEXT, \
.domain_ll = 1, \
Expand Down
1 change: 1 addition & 0 deletions src/include/sof/audio/pipeline.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ struct pipeline_data {
uint32_t delay_ms; /* between PRE_{START,RELEASE} and {START,RELEASE} */
#if CONFIG_KCPS_DYNAMIC_CLOCK_CONTROL
uint32_t kcps[CONFIG_CORE_COUNT]; /**< the max count of KCPS */
uint32_t kcps_acc[CONFIG_CORE_COUNT]; /**< accumulated KCPS before maximization */
#endif
};

Expand Down
10 changes: 5 additions & 5 deletions src/ipc/ipc4/helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -946,11 +946,11 @@ const struct comp_driver *ipc4_get_drv(const uint8_t *uuid)
}
}

tr_err(&comp_tr, "get_drv(): the provided UUID (%08x %08x %08x %08x) can't be found!",
*(uint32_t *)(&uuid[0]),
*(uint32_t *)(&uuid[4]),
*(uint32_t *)(&uuid[8]),
*(uint32_t *)(&uuid[12]));
tr_warn(&comp_tr, "get_drv(): the provided UUID (%08x %08x %08x %08x) can't be found!",
*(uint32_t *)(&uuid[0]),
*(uint32_t *)(&uuid[4]),
*(uint32_t *)(&uuid[8]),
*(uint32_t *)(&uuid[12]));

out:
irq_local_enable(flags);
Expand Down
38 changes: 19 additions & 19 deletions src/samples/audio/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,27 @@

menu "Audio component samples"

config SAMPLE_SMART_AMP
tristate "Smart amplifier test component"
default y
help
Select for test smart amplifier component
config SAMPLE_SMART_AMP
tristate "Smart amplifier test component"
default y
help
Select for test smart amplifier component

config SAMPLE_KEYPHRASE
config SAMPLE_KEYPHRASE
depends on CAVS || IMX || ACE
bool "Keyphrase test component"
default y
help
Select for Keyphrase test component.
Provides basic functionality for use in testing of keyphrase detection pipelines.
bool "Keyphrase test component"
default y
help
Select for Keyphrase test component.
Provides basic functionality for use in testing of keyphrase detection pipelines.

config KWD_NN_SAMPLE_KEYPHRASE
depends on IMX
bool "KWD NN Keyphrase test component"
default n
help
Select for KWD NN Keyphrase test component based on neural network.
Provides ML functionality for use in testing of keyphrase detection pipelines.
Use KWD based on NN as alternative to the default KWD component.
Provides neural network as a library.
depends on IMX
bool "KWD NN Keyphrase test component"
default n
help
Select for KWD NN Keyphrase test component based on neural network.
Provides ML functionality for use in testing of keyphrase detection pipelines.
Use KWD based on NN as alternative to the default KWD component.
Provides neural network as a library.
endmenu
5 changes: 1 addition & 4 deletions src/samples/audio/smart_amp_test_ipc4.c
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,6 @@ static inline int smart_amp_get_config(struct processing_module *mod,

static int smart_amp_free(struct processing_module *mod)
{
LOG_DBG("smart_amp_free()");

#ifndef __SOF_MODULE_SERVICE_BUILD__
struct smart_amp_data *sad = module_get_private_data(mod);

Expand Down Expand Up @@ -320,8 +318,6 @@ static int smart_amp_process(struct processing_module *mod,

static int smart_amp_reset(struct processing_module *mod)
{
LOG_DBG("smart_amp_reset()");

return 0;
}

Expand Down Expand Up @@ -415,6 +411,7 @@ static const struct sof_man_module_manifest main_manifest __section(".module") _
.uuid = {0x1E, 0x96, 0x7A, 0x16, 0xE4, 0x8A, 0xEA, 0x11,
0x89, 0xF1, 0x00, 0x0C, 0x29, 0xCE, 0x16, 0x35},
.entry_point = (uint32_t)smart_amp_test_llext_entry,
.instance_max_count = 1,
.type = {
#ifdef __SOF_MODULE_SERVICE_BUILD__
.load_type = SOF_MAN_MOD_TYPE_MODULE,
Expand Down
4 changes: 1 addition & 3 deletions tools/rimage/src/manifest.c
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ static int man_get_module_manifest(struct image *image, struct manifest_module *
memcpy(man_module->name, sof_mod->module.name, SOF_MAN_MOD_NAME_LEN);
memcpy(man_module->uuid, sof_mod->module.uuid, 16);
man_module->affinity_mask = sof_mod->module.affinity_mask;
man_module->instance_max_count = sof_mod->module.instance_max_count;
man_module->type.auto_start = sof_mod->module.type.auto_start;
man_module->type.domain_dp = sof_mod->module.type.domain_dp;
man_module->type.domain_ll = sof_mod->module.type.domain_ll;
Expand Down Expand Up @@ -464,9 +465,6 @@ static int man_module_create_reloc(struct image *image, struct manifest_module *
/* stack size ??? convert sizes to PAGES */
man_module->instance_bss_size = 1;

/* max number of instances of this module ?? */
man_module->instance_max_count = 1;

module_print_zones(&module->file);

/* main module */
Expand Down
2 changes: 1 addition & 1 deletion zephyr/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ function(sof_llext_build module)
get_target_property(proc_out_file ${module} pkg_input)
add_llext_command(TARGET ${module}
POST_BUILD
COMMAND ${SOF_BASE}scripts/llext_link_helper.py
COMMAND ${PYTHON_EXECUTABLE} ${SOF_BASE}scripts/llext_link_helper.py
--text-addr="${SOF_LLEXT_TEXT_ADDR}" -f ${proc_in_file} ${CMAKE_C_COMPILER} --
-o ${proc_out_file} ${EXTRA_LINKER_PARAMS}
$<TARGET_OBJECTS:${module}_llext_lib>
Expand Down
Loading