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..bdddb5d68e8b --- /dev/null +++ b/src/audio/volume/Kconfig.simd @@ -0,0 +1,34 @@ +# 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" + depends on COMP_VOLUME + default VOLUME_HIFI_MAX + + config VOLUME_HIFI_MAX + 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_HIFI_4 + prompt "choose HIFI4 intrinsic optimized volume module" + bool + help + This option used to build HIFI4 optimized volume code + + config VOLUME_HIFI_3 + prompt "choose HIFI3 intrinsic optimized volume module" + bool + help + This option used to build HIFI3 intrinsic optimized volume code + + config VOLUME_HIFI_NONE + prompt "choose generic C volume module, no HIFI 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..2bb5c2a5842d 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 SOF_USE_HIFI(4, VOLUME) || SOF_USE_HIFI(5, VOLUME) memset(cd->peak_vol, 0, sizeof(int32_t) * SOF_IPC_MAX_CHANNELS * 4); #endif } @@ -622,7 +622,7 @@ static vol_zc_func vol_get_zc_function(struct comp_dev *dev, static void volume_set_alignment(struct audio_stream *source, struct audio_stream *sink) { -#if XCHAL_HAVE_HIFI3 || XCHAL_HAVE_HIFI4 +#if SOF_USE_HIFI(3, VOLUME) || SOF_USE_HIFI(4, VOLUME) || SOF_USE_HIFI(5, VOLUME) /* Both source and sink buffer in HiFi 3 or HiFi4 processing version, * xtensa intrinsics ask for 8-byte aligned. 5.1 format SSE audio * requires 16-byte aligned. diff --git a/src/audio/volume/volume.h b/src/audio/volume/volume.h index 5e8f46a54389..2076412549b6 100644 --- a/src/audio/volume/volume.h +++ b/src/audio/volume/volume.h @@ -34,19 +34,6 @@ struct comp_buffer; struct sof_ipc_ctrl_value_chan; -#if defined(__XCC__) -# include -# if XCHAL_HAVE_HIFI4 -# define VOLUME_HIFI4 -# elif XCHAL_HAVE_HIFI3 -# define VOLUME_HIFI3 -# else -# define VOLUME_GENERIC -# endif -#else -# define VOLUME_GENERIC -#endif - /** * \brief In IPC3 volume is in Q8.16 format, in IPC4 in Q1.31, but is converted * by firmware to Q1.23 format. diff --git a/src/audio/volume/volume_generic.c b/src/audio/volume/volume_generic.c index 30498bc992eb..0830677c7c94 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 SOF_USE_HIFI(NONE, VOLUME) #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..2f257d2ef742 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 SOF_USE_HIFI(NONE, VOLUME) #if CONFIG_COMP_PEAK_VOL diff --git a/src/audio/volume/volume_hifi3.c b/src/audio/volume/volume_hifi3.c index e32b8551c775..3a919cae6266 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 SOF_USE_HIFI(3, VOLUME) #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..f645c5a903a1 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 SOF_USE_HIFI(3, VOLUME) #if CONFIG_COMP_PEAK_VOL diff --git a/src/audio/volume/volume_hifi4.c b/src/audio/volume/volume_hifi4.c index d0d114dcfc5d..ea346b1a9069 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 SOF_USE_HIFI(4, VOLUME) || SOF_USE_HIFI(5, VOLUME) #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..56e86d13b07b 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 SOF_USE_HIFI(4, VOLUME) || SOF_USE_HIFI(5, VOLUME) #if CONFIG_COMP_PEAK_VOL #include