Code can now include <rtos/wait.h> and uses native Zephyr 64
cycle API instead of SOF version.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
No runtime semantic change. Use C library when RTOS uses
C library otherwise use own C library calls.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
No functional runtime change, but changes to rtos partitioning and the
layout of headers .
This patch creates RTOS specifc header paths and updates spinlock.h
and kernel.h to show the new usage. Other headers will incrementally follow.
It reuses the current zephyr topleve directory and creates a new
toplevel xtos directory for xtos specific files.
Due to the mixing of RTOS, driver and library headers at the top level include
directory it was necessary to create rtos specific header directories i.e.
src/include/rtos-xtos
src/include/rtos-zephyr
These RTOS include directories will eventually contain RTOS specific headers
whilst common logic and structures will be placed in non RTOS directories.
This will also mean
"#include <sof/spinlock.h>"
will become
"#include <rtos/spinlock.h>"
and will allow easier visualisation of where and why RTOS headers are being used.
This will help to eliminate cross usage of headers between RTOSes.
Subsequqnt patches will move more headers and rtos specific wrppaer
source files into rtos specific locations.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
This patch adds cmocka test cases for window functions library.
The calculated windows are compared with RMS error criteria
to Matlab calculated windows in header files. The header files
are directly generated by script ref_window.m.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This patch adds tests for 16-bit FFT library version. The test SNR
is improved by using sine frequency that matches with length of FFT.
It allows to get highest SNR in transform without need for window
functions in test and attenuation in the signal.
The 32 bit FFT tests are updated to use the same signal generator.
With this criteria the minimum SNRs for 32 bit to pass could be
increased to 95 - 132 dB.
Also tests were added for 512 size FFT in addition to 256 and 1024.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This patch adds lower RAM and lower MCPS consuming FFT
for 16 bit data. The twiddle factors save from .bss
4096 bytes. For e.g. 512 bin FFT the saving for runtime is
additional 4096 bytes.
The previous fft.c has been split to fft_common.c and fft_32.c for
32 bits version. The new 16 bit version is in fft_16.c. The name
of previous fft_execute() is changed to fft_execute_32(). Common
function fft_plan_new() takes FFT word length 16 or 32 as new
last argument.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Add hifi3 & hifi4 version implementation of mixer processing functions.
The hifi version functions can save at least 47% cycles than C version.
Signed-off-by: Andrula Song <xiaoyuan.song@intel.com>
NUMBERS_GCD was removed in commit 9611d126ba. We should not be
selecting or buildign with an undefined Kconfig.
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
Use the module interface instead of the comp drv interface for the
EQ IIR component.
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Instead of acquiring and releasing buffers locally multiple times,
do that once for .copy() and .prepare() methods.
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
comp_make_shared() only makes sense and is only called in multi-core
configurations. In such configurations components are allocated from
uncached memory, from the SOF_MEM_ZONE_RUNTIME_SHARED zone. So they
are always uncached and there is no need to flush cached or relink
lists. We only need to set a flag, indicating, that this component
is used on multiple cores.
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Move the volume component inside the module_adapter folder and use the
module interface API instead of the component driver interface. Also fix
the volume cmocka tests to use the modified scale_vol function.
Also, add kconfig option for keeping the legacy comp_drv interface for platforms
that are limited in text region memory size, such as
BYT/CHT/APL/JSL/ICL.
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
The data blob handler functionality is quite independent from the rest
of the generic component code. The component.c and component.h are
already too big so it is better to split the data blob handler
functionality out before adding more features to it.
Signed-off-by: Jyri Sarha <jyri.sarha@intel.com>
Replaced sof timer related functions with Zephyr alternative.
Signed-off-by: Adrian Warecki <adrianx.warecki@intel.com>
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Waiting for a certain time has been simplified by adding a functions
wait_delay_ms and wait_delay_us. Previously now, its required a conversion
between time to ticks using clock_ms_to_ticks.
Signed-off-by: Adrian Warecki <adrianx.warecki@intel.com>
Added the const specifier to protect the message passed to
ipc_platform_send_msg and ipc_prepare_to_send functions. The deletion of
the message from the list has been moved to ipc_send_queued_msg function.
Signed-off-by: Adrian Warecki <adrianx.warecki@intel.com>
fixpoint math log() and log10() function. logarithm of a
number is the power or exponent by which another value
must be raised to produce an equivalent value of the given number
fix point log10(x) is a derivative of log2(x)/log2(10)
and loge(x) is log2(x)/log2(e)
Signed-off-by: Shriram Shastry <malladi.sastry@intel.com>
Align the SOF spinlock API with Zephyr spinlock API.
Currently SOF spinlock has two locking variants: with and without
disabling local IRQs. Since taking a spinlock potentially puts the
CPU into busy-looping, periods of time for holding spinlocks should
be kept as short as possible. This also means, that usually the CPU,
holding a spinlock shouldn't be interrupted. So usually spinlocks
should be taken in atomic contexts. Therefore using the version, not
locking local IRQs should only be done when IRQs are already
disabled. This then saves several CPU cycles, avoiding reading and
writing CPU status again. However, this should be only done with
extreme care and it introduces potential for current and future bugs,
including dead-locks.
Zephyr spinlock API always disables local IRQs. This makes it simpler
and less error prone. Switching to it potentially wastes several CPU
cycles in some locations, but makes the code more robust.
This is first part of work for spinlock Zephyr alignment, subsequent
updates will align headers and associated splinlock dependecies.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
The DF2T IIR core has been moved earlier to library but the
helper functions for configuring it were left to EQ component.
This patch eases use of IIR core from other components. The
file src/audio/eq_iir/iir.c is moved to src/math. There are no
changes except of remove iir.h since the contents specific
for DF2T type were merged to iir_df2t.h
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Processing continuous data. Asking a 8-byte aligned memory
to store volume gain 4 times, using 2-way or 4-way pipeline
operations of xtensa intrinsics. This method can reduce about
40% MCPS than the original one.
Signed-off-by: Andrula Song <xiaoyuan.song@intel.com>
The C header file malloc.h does not exist on
some Xtensa processor configurations or host OSes,
include stdlib.h instead because they both provide
the prototype for 'malloc' function.
Fixes: #5102
Signed-off-by: Chao Song <chao.song@linux.intel.com>
This patch moves functions audio_stream_copy(),
audio_stream_copy_from_linear(), and audio_stream_copy_to_linear()
into component.c. The functions are not changed.
There is no measurable code execution time
increase. In a test build this change saved about 800 bytes.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
fix point math square function having positive number y as input and
return the positive number x multiplied by itself (squared)
Signed-off-by: Shriram Shastry <malladi.sastry@intel.com>
Sample output:
[ 97%] Built target acos_32b_fixed
[ 98%] Linking C executable volume_process
[ 98%] Built target volume_process
[100%] Linking C executable strcheck
[100%] Built target strcheck
========= Building cmocka tests for broadwell_defconfig ======
+ cmake -DINIT_CONFIG=broadwell_defconfig -S /srv/mherber2/SOFub20/sof
-B build_ut_defs/broadwell_defconfig -DBUILD_UNIT_TESTS=ON
-DBUILD_UNIT_TESTS_HOST=ON
-- version.cmake starting SOF build at 2021-12-17T01:09:44Z UTC
-- Building git commit with parent(s):
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
fix point math power function having negative and positive values
of base and exponent as function argument. power_int32() support
only integer base and exponential value and it does not support
fractional values for base and exponent.
fix point math base 2 logarithm function using a short lookup
tables
Signed-off-by: ShriramShastry <malladi.sastry@intel.com>
Safer and fixes the following GCC11 warning
In file included from /home/lrg/work/sof/sof/src/include/sof/string.h:11,
from /home/lrg/work/sof/sof/src/include/sof/debug/debug.h:17,
from /home/lrg/work/sof/sof/src/platform/baytrail/platform.c:9:
/home/lrg/work/sof/sof/src/platform/baytrail/platform.c: In function 'platform_init':
/home/lrg/work/sof/sof/src/arch/xtensa/include/arch/string.h:22:9: error: 'memset' offset [0, 4095] is out of the bounds [0, 0] [-Werror=array-bounds]
22 | memset(ptr, 0, size)
| ^~~~~~~~~~~~~~~~~~~~
/home/lrg/work/sof/sof/src/include/sof/lib/alloc.h:160:9: note: in expansion of macro 'arch_bzero'
160 | arch_bzero(ptr, size)
| ^~~~~~~~~~
/home/lrg/work/sof/sof/src/platform/baytrail/platform.c:198:9: note: in expansion of macro 'bzero'
198 | bzero((void *)MAILBOX_BASE, MAILBOX_SIZE);
| ^~~~~
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
This patch adds src/math/Kconfig with items CORDIC_TRIGONOMETRY_FIXED,
NUMBERS_GCD, NUMBERS_NORM, NUMBERS_VECTOR_FIND, MATH_DECIBELS, MATH_FFT,
MATH_FIR, and MATH_IIR_DF2T.
Configuration FIR and FFT were previously in src/audio/Kconfig but they
were moved to new math location for simplicity.
The build of trig.c was simplified by remove of unused UNIT_CORDIC_TEST
and CONFIG_CORDIC_TRIGONOMETRY_FIXED.
All but build details of numbers.c are handled by src/math/CMakeList.txt
if(CONFIG_X) additions. There was need to add "-DCONFIG_NUMBERS_x" into
target_compile_definitions() in test/cmocka/CMakeLists.txt because
the platforms those drop most features e.g. BYT would fail in test
case build.
Tone generator build is disabled for all platforms. It avoids select of
triginometric functions and saves RAM.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This patch adds for the IIR equalized component a test with
comparison 100 ms of Octave generated output to output of the
component. The test signal is a full scale chirp signal. The
IIR response is both amplifying and attenuating to trigger as
much as possible issues with internal overflows.
All test data was generated by Octave script
cmocka_data_eq_iir.m. Re-run of script updates the used header
files the in cmocka tests directory.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
ipc_platform_complete_cmd() and ipc_platform_do_cmd() aren't called
as callbacks any longer, we can use strong argument types with both.
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
From deep down trace.c:va_tracelog() up to the _log_message() level.
Also rename va_tracelog() to the more specific dma_tracelog()
Preparation to support the DMA trace in Zephyr.
The only functional change in this commit is that DMA messages copied to
the shared memory are not de-duplicated any more (a.k.a "adaptive rate
limiting" or CONFIG_TRACE_FILTERING_ADAPTIVE). These are generally
supposed to be high level hence rare enough; otherwise there is probably
a "bigger problem".
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
We have limited buffer zone which can't afford as big as 200KB+
allocation request on platforms like APL, remove the case.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
Align to the new heap memory map and allocator, smaller SYSTEM and
RUNTIME zones are used on apollolake now.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
Some DAI devices need a delay between their PRE_START and START
trigger commands, and similarly between PRE_RELEASE and RELEASE.
Add a DAI driver operation to get that delay time and use it between
the two commands.
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
We need to split the START trigger command into two commands because
some components have a long delay inside their START handling. This
patch introduces two new trigger commands: PRE_START and
PRE_RELEASE and a new state PRE_ACTIVE to prepare for that split.
For simmetry POST_STOP and POST_PAUSE are also added, however they
aren't used yet.
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
From deep down trace.c:va_tracelog() up to the _log_message() level.
Also rename va_tracelog() to the more specific dma_tracelog()
Preparation to support the DMA trace in Zephyr.
The only functional change in this commit is that DMA messages copied to
the shared memory are not de-duplicated any more (a.k.a "adaptive rate
limiting" or CONFIG_TRACE_FILTERING_ADAPTIVE). These are generally
supposed to be high level hence rare enough; otherwise there is probably
a "bigger problem".
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
It is failing and skipped only when compiled on the host, runs fine with
xt-run.
This is temporarily needed to add host-based unit tests to CI now and
catch any regression in any other test now.
Signed-off-by: Marc Herbert <marc.herbert@intel.com>
Fixes 'no previous prototype for trace_log_filtered' -Werr and
redefinition of ‘trace_flush_dma_to_mbox’ error.
Signed-off-by: Marc Herbert <marc.herbert@intel.com>