From 130f26a6ee4c7095bd87c09634b301f21a237f5c Mon Sep 17 00:00:00 2001 From: Baofeng Tian Date: Tue, 2 Jan 2024 14:15:22 +0800 Subject: [PATCH] Volume: Add volume simd build option Previously, volume simd version selection is based on compiler toolchain, this change keep the original logic as default, if there is no valid simd option was selected. If there is a selection from kconfig, then this option will override compiler build option and be used to build volume module. Signed-off-by: Baofeng Tian --- src/audio/volume/Kconfig | 2 ++ src/audio/volume/Kconfig.simd | 32 +++++++++++++++++++ src/audio/volume/volume.c | 2 +- src/audio/volume/volume.h | 10 +++--- src/audio/volume/volume_generic.c | 2 +- .../volume/volume_generic_with_peakvol.c | 2 +- src/audio/volume/volume_hifi3.c | 2 +- src/audio/volume/volume_hifi3_with_peakvol.c | 2 +- src/audio/volume/volume_hifi4.c | 2 +- src/audio/volume/volume_hifi4_with_peakvol.c | 2 +- 10 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 src/audio/volume/Kconfig.simd diff --git a/src/audio/volume/Kconfig b/src/audio/volume/Kconfig index a0daa89a2940..35f71cd68e05 100644 --- a/src/audio/volume/Kconfig +++ b/src/audio/volume/Kconfig @@ -8,6 +8,8 @@ if COMP_VOLUME +rsource "Kconfig.simd" + config COMP_VOLUME_WINDOWS_FADE bool "Windows Fade shape volume transitions support" help diff --git a/src/audio/volume/Kconfig.simd b/src/audio/volume/Kconfig.simd new file mode 100644 index 000000000000..3394a89af36f --- /dev/null +++ b/src/audio/volume/Kconfig.simd @@ -0,0 +1,32 @@ +# SPDX-License-Identifier: BSD-3-Clause + +comment "volume optimization level select" + +choice "VOLUME_SIMD_LEVEL_SELECT" + prompt "choose which SIMD level used for volume module" + + config VOLUME_SIMD_TOOLCHAIN_SELECT + prompt "SIMD will selected by toolchain pre-defined header" + bool + help + When this was selected, optimization level will be determined + by toolchain pre-defined macros in core isa header file. + + config VOLUME_HIFI3 + prompt "choose HIFI3 intrinsic optimized volume module" + bool + help + This option used to build HIFI3 intrinsic optimized volume code + + config VOLUME_HIFI4 + prompt "choose HIFI4 intrinsic optimized volume module" + bool + help + This option used to build HIFI4 optimized volume code + + config VOLUME_GENERIC + prompt "choose generic C volume module, no SIMD involved" + bool + help + This option used to build volume generic code. +endchoice diff --git a/src/audio/volume/volume.c b/src/audio/volume/volume.c index b9f1d1ddbc5b..c981f6ba6ec8 100644 --- a/src/audio/volume/volume.c +++ b/src/audio/volume/volume.c @@ -587,7 +587,7 @@ static int volume_process(struct processing_module *mod, cd->peak_cnt = 0; peak_vol_update(cd); memset(cd->peak_regs.peak_meter, 0, sizeof(cd->peak_regs.peak_meter)); -#ifdef VOLUME_HIFI4 +#if CONFIG_VOLUME_HIFI4 memset(cd->peak_vol, 0, sizeof(int32_t) * SOF_IPC_MAX_CHANNELS * 4); #endif } diff --git a/src/audio/volume/volume.h b/src/audio/volume/volume.h index 5e8f46a54389..ebb419395a94 100644 --- a/src/audio/volume/volume.h +++ b/src/audio/volume/volume.h @@ -36,15 +36,17 @@ struct sof_ipc_ctrl_value_chan; #if defined(__XCC__) # include +#if CONFIG_VOLUME_SIMD_TOOLCHAIN_SELECT # if XCHAL_HAVE_HIFI4 -# define VOLUME_HIFI4 +# define CONFIG_VOLUME_HIFI4 1 # elif XCHAL_HAVE_HIFI3 -# define VOLUME_HIFI3 +# define CONFIG_VOLUME_HIFI3 1 # else -# define VOLUME_GENERIC +# define CONFIG_VOLUME_GENERIC 1 # endif +#endif #else -# define VOLUME_GENERIC +# define CONFIG_VOLUME_GENERIC 1 #endif /** diff --git a/src/audio/volume/volume_generic.c b/src/audio/volume/volume_generic.c index 30498bc992eb..c71730b95ef1 100644 --- a/src/audio/volume/volume_generic.c +++ b/src/audio/volume/volume_generic.c @@ -27,7 +27,7 @@ LOG_MODULE_DECLARE(volume_generic, CONFIG_SOF_LOG_LEVEL); #include "volume.h" -#ifdef VOLUME_GENERIC +#if CONFIG_VOLUME_GENERIC #if (!CONFIG_COMP_PEAK_VOL) diff --git a/src/audio/volume/volume_generic_with_peakvol.c b/src/audio/volume/volume_generic_with_peakvol.c index 0ef720d78665..1a62c314db57 100644 --- a/src/audio/volume/volume_generic_with_peakvol.c +++ b/src/audio/volume/volume_generic_with_peakvol.c @@ -23,7 +23,7 @@ LOG_MODULE_DECLARE(volume_generic, CONFIG_SOF_LOG_LEVEL); #include "volume.h" -#ifdef VOLUME_GENERIC +#if CONFIG_VOLUME_GENERIC #if CONFIG_COMP_PEAK_VOL diff --git a/src/audio/volume/volume_hifi3.c b/src/audio/volume/volume_hifi3.c index e32b8551c775..a9bbb194cd03 100644 --- a/src/audio/volume/volume_hifi3.c +++ b/src/audio/volume/volume_hifi3.c @@ -21,7 +21,7 @@ LOG_MODULE_DECLARE(volume_hifi3, CONFIG_SOF_LOG_LEVEL); #include "volume.h" -#ifdef VOLUME_HIFI3 +#if CONFIG_VOLUME_HIFI3 #if (!CONFIG_COMP_PEAK_VOL) diff --git a/src/audio/volume/volume_hifi3_with_peakvol.c b/src/audio/volume/volume_hifi3_with_peakvol.c index 9bda00a27bc7..c23460d9cc57 100644 --- a/src/audio/volume/volume_hifi3_with_peakvol.c +++ b/src/audio/volume/volume_hifi3_with_peakvol.c @@ -21,7 +21,7 @@ LOG_MODULE_DECLARE(volume_hifi3, CONFIG_SOF_LOG_LEVEL); #include "volume.h" -#ifdef VOLUME_HIFI3 +#if CONFIG_VOLUME_HIFI3 #if CONFIG_COMP_PEAK_VOL diff --git a/src/audio/volume/volume_hifi4.c b/src/audio/volume/volume_hifi4.c index d0d114dcfc5d..1b8f3b60bd91 100644 --- a/src/audio/volume/volume_hifi4.c +++ b/src/audio/volume/volume_hifi4.c @@ -21,7 +21,7 @@ LOG_MODULE_DECLARE(volume_hifi4, CONFIG_SOF_LOG_LEVEL); #include "volume.h" -#ifdef VOLUME_HIFI4 +#if CONFIG_VOLUME_HIFI4 #if (!CONFIG_COMP_PEAK_VOL) diff --git a/src/audio/volume/volume_hifi4_with_peakvol.c b/src/audio/volume/volume_hifi4_with_peakvol.c index cbb08e297b87..afb2e2654aa2 100644 --- a/src/audio/volume/volume_hifi4_with_peakvol.c +++ b/src/audio/volume/volume_hifi4_with_peakvol.c @@ -21,7 +21,7 @@ LOG_MODULE_DECLARE(volume_hifi4, CONFIG_SOF_LOG_LEVEL); #include "volume.h" -#ifdef VOLUME_HIFI4 +#if CONFIG_VOLUME_HIFI4 #if CONFIG_COMP_PEAK_VOL #include