diff --git a/src/math/Kconfig b/src/math/Kconfig index b97f87bfe781..191ae7906b7a 100644 --- a/src/math/Kconfig +++ b/src/math/Kconfig @@ -178,8 +178,16 @@ config MATH_FIR filter calculates a convolution of input PCM sample and a configurable impulse response. +config MATH_IIR + tristate "Select IIR filter library build method" + default m if LIBRARY_DEFAULT_MODULAR + default y + help + A helper option for MATH_IIR_DF2T and MATH_IIR_DF1 + config MATH_IIR_DF2T bool "IIR DF2T filter library" + depends on MATH_IIR != "n" default n help Select this to build IIR (Infinite Impulse Response) filter @@ -187,6 +195,7 @@ config MATH_IIR_DF2T config MATH_IIR_DF1 bool "IIR DF1 filter library" + depends on MATH_IIR != "n" default n help Select this to build IIR (Infinite Impulse Response) filter diff --git a/src/math/fir_llext/CMakeLists.txt b/src/math/fir_llext/CMakeLists.txt index 9b8d2531bea3..79e732c46101 100644 --- a/src/math/fir_llext/CMakeLists.txt +++ b/src/math/fir_llext/CMakeLists.txt @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 sof_llext_build("fir" - SOURCES ../fir_common.c + SOURCES fir_common.c ../fir_generic.c ../fir_hifi2ep.c ../fir_hifi3.c diff --git a/src/math/fir_common.c b/src/math/fir_llext/fir_common.c similarity index 100% rename from src/math/fir_common.c rename to src/math/fir_llext/fir_common.c diff --git a/src/math/iir.toml b/src/math/iir.toml new file mode 100644 index 000000000000..145488fcccc9 --- /dev/null +++ b/src/math/iir.toml @@ -0,0 +1,6 @@ + [[module.entry]] + name = "IIR" + uuid = "B0CDCD9E-EF8B-404F-8480-0F287FC9D44D" + load_type = "3" + + index = __COUNTER__ diff --git a/src/math/iir_llext/CMakeLists.txt b/src/math/iir_llext/CMakeLists.txt new file mode 100644 index 000000000000..e3d346cea2e2 --- /dev/null +++ b/src/math/iir_llext/CMakeLists.txt @@ -0,0 +1,21 @@ +# Copyright (c) 2024 Intel Corporation. +# SPDX-License-Identifier: Apache-2.0 + +if(CONFIG_MATH_IIR_DF1) +set(df1 ../iir_df1.c ../iir_df1_generic.c ../iir_df1_hifi3.c ../iir_df1_hifi4.c ../iir_df1_hifi5.c) +else() +set(df1 "") +endif() + +if(CONFIG_MATH_IIR_DF2T) +set(df2t ../iir_df2t.c ../iir_df2t_generic.c ../iir_df2t_hifi3.c) +else() +set(df2t "") +endif() + +if(CONFIG_MATH_IIR_DF1 OR CONFIG_MATH_IIR_DF2T) +sof_llext_build("iir" + SOURCES iir.c ${df1} ${df2t} + LIB openmodules +) +endif() diff --git a/src/math/iir_llext/iir.c b/src/math/iir_llext/iir.c new file mode 100644 index 000000000000..7891bd8fc5b1 --- /dev/null +++ b/src/math/iir_llext/iir.c @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: BSD-3-Clause +// +// Copyright(c) 2025 Intel Corporation. + +/* modular: llext dynamic link */ + +#include +#include +#include +#include +#include + +static const struct sof_man_module_manifest mod_manifest[] __section(".module") __used = { + SOF_LLEXT_AUX_MANIFEST("IIR", NULL, SOF_REG_UUID(iir)), +}; + +SOF_LLEXT_BUILDINFO; diff --git a/src/math/iir_llext/llext.toml.h b/src/math/iir_llext/llext.toml.h new file mode 100644 index 000000000000..89669daea077 --- /dev/null +++ b/src/math/iir_llext/llext.toml.h @@ -0,0 +1,5 @@ +#include +#include "../iir.toml" + +[module] +count = __COUNTER__ diff --git a/uuid-registry.txt b/uuid-registry.txt index f06a9f259a1c..a1459f37bd67 100644 --- a/uuid-registry.txt +++ b/uuid-registry.txt @@ -83,6 +83,7 @@ b780a0a6-269f-466f-b47723dfa05af758 google_rtc_audio_processing a5dacb0e-88dc-415c-a1b53e8df77f1976 idc_cmd_task b90f5a4e-5537-4375-a1df95485472ff9e idc_task 696ae2bc-2877-11eb-adc10242ac120002 igo_nr +b0cdcd9e-ef8b-404f-84800f287fc9d44d iir fa00558c-d653-4851-a03ab21f125a9524 interrupt 2f520e85-49ba-4284-90d83def24af313b intc_mt8196 be60f97d-78df-4796-a0ee435cb56b720a ipc diff --git a/zephyr/CMakeLists.txt b/zephyr/CMakeLists.txt index 567c03e5e5df..9c29c3758d7f 100644 --- a/zephyr/CMakeLists.txt +++ b/zephyr/CMakeLists.txt @@ -697,19 +697,25 @@ elseif(CONFIG_MATH_FIR) ) endif() -zephyr_library_sources_ifdef(CONFIG_MATH_IIR_DF1 - ${SOF_MATH_PATH}/iir_df1_generic.c - ${SOF_MATH_PATH}/iir_df1_hifi3.c - ${SOF_MATH_PATH}/iir_df1_hifi4.c - ${SOF_MATH_PATH}/iir_df1_hifi5.c - ${SOF_MATH_PATH}/iir_df1.c -) +if(CONFIG_MATH_IIR STREQUAL "m") + add_subdirectory(${SOF_MATH_PATH}/iir_llext + ${PROJECT_BINARY_DIR}/iir_llext) + add_dependencies(app fir) +elseif(CONFIG_MATH_IIR) + zephyr_library_sources_ifdef(CONFIG_MATH_IIR_DF1 + ${SOF_MATH_PATH}/iir_df1_generic.c + ${SOF_MATH_PATH}/iir_df1_hifi3.c + ${SOF_MATH_PATH}/iir_df1_hifi4.c + ${SOF_MATH_PATH}/iir_df1_hifi5.c + ${SOF_MATH_PATH}/iir_df1.c + ) -zephyr_library_sources_ifdef(CONFIG_MATH_IIR_DF2T - ${SOF_MATH_PATH}/iir_df2t_generic.c - ${SOF_MATH_PATH}/iir_df2t_hifi3.c - ${SOF_MATH_PATH}/iir_df2t.c -) + zephyr_library_sources_ifdef(CONFIG_MATH_IIR_DF2T + ${SOF_MATH_PATH}/iir_df2t_generic.c + ${SOF_MATH_PATH}/iir_df2t_hifi3.c + ${SOF_MATH_PATH}/iir_df2t.c + ) +endif() if(CONFIG_COMP_ASRC STREQUAL "m") add_subdirectory(${SOF_AUDIO_PATH}/asrc/llext