Add overlay to build debug_stream protocol over a debug window slot,
make room for the slot, and send thread info data through it.
Signed-off-by: Jyri Sarha <jyri.sarha@linux.intel.com>
Access debug slot directly using cavstool.py, by specifying the debug
slot number where the debug_stream data is transferred.
Adds one command line parameter for selecting the debug slot directly
and adds an alternative mainloop for polling the slot through
cavstool.py direct access.
The commit also adds quite a few data consistency checks and error
handling improvements as with the direct memory access its much more
likely to get inconsistent data when the DSP is booting up, and code
needs to be robust enough not to crash in such a situation. Also the
logging messages about those checks failing has been lowered so that
they are not too noisy.
Signed-off-by: Jyri Sarha <jyri.sarha@linux.intel.com>
The only accepted format for aria is S24_4LE while it was assumed
to be S32_LE. This change enables Aria topologies to be loaded again
after commit 1cc7a4c5b1 ("aria: change to S24_LE format processing").
There was also a mistake with capture pipeline index that caused
failure with capture. Same pipeline 3 index was used in both playback
and capture direction.
The impacted topologies are sof-hda-benchmark-aria24.tplg and
sof-hda-benchmark-generic.tplg.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
There is currently no default.conf, so the default is set to
passthrough.conf.
This patch also changes IIR topology build default response to
"loudness" for better higher workload and easier to measure
when checking that it's correct. This prepares for process_test.m
components verification with ipc4 testbench.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Enable gain for DMIC interface. Configure gain feature with
parameters received in DMIC BLOB.
Add support for runtime DMIC gain parameters update using
DMA Control IPC.
Signed-off-by: Ievgen Ganakov <ievgen.ganakov@intel.com>
This means modifying 'xtensa-build-zephyr.py' to allow
building the new platform and adding a new toml file for
the platform.
Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
Add topology for the imx95 platform.
The pipeline is:
HOST ----> VOLUME (optional, may be passthrough) ----> DAI
Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
This module is required by the Cortex-M architecture so
update west.yml to pull in this module as well.
Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
This change fixes for testbench support for topologies where
widgets have more than one format. Without this change if not
all e.g. count = 8 tokens are found but e.g. count = 7 the
tokens are applied to the format array but the index (offset)
to next format (of num_sets) is not advanced. So the first
entry will be written again for all found formats. The found
tokens count can be less than 8 if the optional
SOF_TKN_CAVS_AUDIO_FORMAT_INPUT_PIN_INDEX or
SOF_TKN_CAVS_AUDIO_FORMAT_OUTPUT_PIN_INDEX are not set.
As fix the offset should be advanced when one or more of tokens
is found from topology. The total is incremented by count for
the loop end condition check.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Enable bluetooth offload for power saving since the SKU
has the cnvi module enabled.
Add deepbuffer pipeline support on I2S Speaker playback.
Note: The headset deepbuffer has enabled in I2S/HD-A/SDW conf.
Signed-off-by: Mac Chiang <mac.chiang@intel.com>
The include of dai-zephyr.h causes IPC4 testbench build to
fail due to further include of Zephyr headers. Since the
copier_generic.c build is not needing it, it can be removed.
The HiFi build version copier_hifi.c is already without
this include.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The new copier gain feature needs this structure. The added
member is copied directly from dai-zephyr.h. Testbench IPC4
is using legacy DAI definitions instead of Zephyr DAI to avoid
to include a lot of difficult dependencies. Build of testbench
fails if dai-legacy.h does not contain this.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Includes the following changes potentially relevant to SOF:
155f3f3ba688 west_commands: sign: add imx95 to target list
01754956de29 boards: nxp: imx95_evk: add rimage support for m7 ddr variant
848907c0f81d soc: imx: imx95: enable cache management for M7
f3e870dfa5d4 boards: nxp: imx95_evk: add edma and sai nodes
Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com>
This commit makes all components use API for accessing
the previous/next component
pipeline code, like module adapter or ipc helpers was
omitted intentionally
Signed-off-by: Marcin Szkudlinski <marcin.szkudlinski@intel.com>
This commit makes all components use API for accessing
the previous/next component
pipeline code, like module adapter or ipc helpers was
omitted intentionally
Signed-off-by: Marcin Szkudlinski <marcin.szkudlinski@intel.com>
A typical action for a component is to check if a
prev/next component exists and is ready to provide/consume data:
if (buf->sink && buf->sink.state == STATE_....)
In pipeline 2.0 it should be done by a state
of sink/src API, but for now a helper for the operation
is provided by this commit.
In case the component does not exists, a special state
COMP_STATE_NOT_EXIST is introduced
Signed-off-by: Marcin Szkudlinski <marcin.szkudlinski@intel.com>
Fix silent overflow in the fuzzer. 255 is clearly << 65536 so that means
we are not able to exercise the full buffer. But upon further inspection
its clear that numbers are a minimum truncated if not rolling over based
on the code in the size_t to uint8_t conversions.
This was validated by converting the type temporarily to signed and
observing the fuzzer using a negative index.
Signed-off-by: Curtis Malainey <cujomalainey@chromium.org>
All fuzzing infra has moved to the posix platform. The corpus is not
being deployed, and is soon to be modified anyways. Its also missing
IPC4 in the corpus.
Signed-off-by: Curtis Malainey <cujomalainey@chromium.org>
Always append the UUID to the end of the module init IPC data and use
that to look up the component driver instead of using the hardcoded UUID
map. This will make it easier to support new processing elements with
the plugin/testbench. Also, modify the get/set_large_config handlers to
use the component driver set in the dev instead of looking it up again.
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Sometimes it can help to see how the chunks arrive from firmware when
comparing logs with the kernel for example.
The --mark-chunks flag will add a marker for each new chunk that is printed
with a running number and the size of the given chunk, for example:
--- Chunk #604 start (size: 652) ---
[ 0.000000] <inf> init: print_version_banner: FW ABI 0x301d001 DBG ABI 0x5003000 tags SOF:v2.5-stable-branch-2772-g76e650e56598-dirty zephyr:v3.7.0-2127-ge7c84756087f src hash 0x4ff3fd64 (ref hash 0x4ff3fd64)
*** Booting Zephyr OS build v3.7.0-2127-ge7c84756087f ***
[ 0.000000] <inf> main: sof_app_main: SOF on intel_adsp
[ 0.000000] <inf> main: sof_app_main: SOF initialized
[ 0.000000] <inf> ipc: ipc_cmd: rx : 0x44000000|0x31400008
[11896.403666] <inf> ipc: ipc_cmd: tx-reply : 0x64000000|0x31400008
[11896.404076] <inf> ipc: ipc_cmd: rx : 0x44000000|0x3060004c
[11896.404093] <inf> ipc: ipc_cmd: tx-reply : 0x64000000|0x3060004c
--- Chunk #605 start (size: 196) ---
[11896.969658] <inf> ipc: ipc_cmd: rx : 0x11000005|0x0
[11896.969671] <inf> pipe: pipeline_new: pipeline new pipe_id 0 priority 0
[11896.969685] <inf> ipc: ipc_cmd: tx-reply : 0xb1000000|0x0
--- Chunk #606 start (size: 2236) ---
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
This commit addresses the limitation in the schedulers_info_get function
where scheduler information could only be retrieved for the primary
core. The updated implementation now validates the core_id against the
number of configured cores (CONFIG_CORE_COUNT) and initiates an IPC
process on the requested core if it is not the current core.
Changes include:
- Adding a check to ensure the core_id is within the valid range.
- Calling ipc4_process_on_core to handle IPC processing on secondary
cores.
- Returning appropriate IPC4 error codes based on the result of
ipc4_process_on_core.
Signed-off-by: Tomasz Leman <tomasz.m.leman@intel.com>
Add methods to update gain coefficients in runtime by handling
DMA CONTROL IPC message being sent to specific dai device based
on provided node id.
Check for unity gain flag.
Signed-off-by: Ievgen Ganakov <ievgen.ganakov@intel.com>
This patch addresses the issue of inconsistent error code usage in the
base_fw.c file, where a mix of POSIX and IPC4 error codes was previously
present.
The IPC4 error codes are now used consistently throughout the file,
ensuring that the error handling is aligned with the IPC4 protocol
expectations. The changes include replacing POSIX error codes such as 0,
-EINVAL, and -ENOMEM with their corresponding IPC4 status codes
IPC4_SUCCESS, IPC4_ERROR_INVALID_PARAM, and IPC4_OUT_OF_MEMORY,
respectively. This standardization helps to avoid confusion and
potential bugs that can arise from the mixed usage of different error
code conventions.
Signed-off-by: Tomasz Leman <tomasz.m.leman@intel.com>
Since with module adapter the component type from init IPC
is no more SOF_COMP_MUX or SOF_COMP_DEMUX but
SOF_COMP_MODULE_ADAPTER, the mux mode check needs to be change.
The type is set in init() based on which init function was
used.
All checks for dev->ipc_config.type are changed to check of
cd->comp_type. The set of type in mux_ipc4.c is removed.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The change done in commit b53573a15c
("ipc3: override type field once comp_driver found") expects
the component type via init IPC to be the same as module
register sets (SOF_COMP_MODULE_ADAPTER).
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
On initialization we use rzalloc which 0s out all fields. We later call
audio_stream_recalc_align which uses the frame_bytes to align the buffer.
This is problematic as clz() is passed the size of the frame size which
is 0 since channel is 0 and passing 0 to clz is undefined behaviour.
Signed-off-by: Curtis Malainey <cujomalainey@chromium.org>
The SOF perf_cnt.h provides a simple performance counter interface that
is used in SOF to track performance at audio module and pipeline level.
Majority of the implementation is RTOS agnostic, relying on
sof_cycle_get_64() to sample platform clock, and timer_get_system() for
CPU clock, both defined in rtos/timer.h. There is however some
conditional rules for Zephyr to use timing_counter_get() if SOF is built
with CONFIG_TIMING_FUNCTIONS=y.
The amount of RTOS variation does not seem to warrant branching the
whole perf_cnt.h to RTOS layer. Move perf_cnt.h back to application
interface, so the single implementation can be shared.
Link: https://github.com/thesofproject/sof/issues/9015
Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Implements a gui and tui that can be used to easily demonstrate SOF
on target HW. See README and README-dev for more information on
functionality and purpose.
Signed-off-by: Alexander Brown <alex.brown.3103@gmail.com>
The utils is a better description of the purpose of the functions
in these files. There's no change to functionality.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This patch adds topology parsing and common functions versions
for IPC4.
Due to dai_get_init_delay_ms() implementation in IPC4 build
the file component is changed internally to copier to provide
the DAI data struct. The change is common for both IPC3 and IPC4
though copier is not usually used with IPC3 systems. Since it
works the same solution is used. The file state retrieve is changed
because the file component data is placed deeper into the
structures.
Due to IPC4 scheduling of pipelines the file component is added
a timeout. A file component sets timeout status if there has
been three copy operations with no data to process. The timeout
and EOF are used to end cleanly the test run.
The library_defconfig still has CONFIG_IPC_MAJOR_4=n. The add
of build type select to scripts/rebuild-testbench.sh is further
work. Also the IPC4 testbench in this state is not well usable
with only one component supported as process component and
without byte control set up algorithms.
Test run with DC blocker is possible this way:
tools/testbench/build_testbench/install/bin/testbench
-r 48000 -R 48000 -c 2 -n 2 -b S32_LE -p 1,2
-t tools/build_tools/topology/topology2/development/
sof-hda-benchmark-dcblock32.tplg
-i in.raw -o out.raw
Also sof-hda-benchmark-gain32.tplg can be run.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This change avoids a segfault. Topologies may contain
non-supported PCMs such as HDMI and if pipelines are not
restricted with -p A,B,C,.. option file might get set up
without filename.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The helper functions are moved from testbench.c to common_test.c
and common_test_ipc3.c as preparation to add IPC4 support.
The file components are looked up in test setup to arrays to ease
finding them in test run and control ending the test.
The parse string for command getopt() is fixed to match the
supported options.
The testbench parameter struct is changed to dynamically allocated
and zeroed by calloc(). It also avoids issues found with valgrind
about uninitialized.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Prefix macros with TB and add TESTBENCH to headers single time
include control macros. Especially ifndef _TRACE_H is in risk
to conflict with possible other headers.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>