Repository navigation
audio: arbiter, kbp, mfcc, microwakeword: Backport wov-upstream plus add SDW single wov-topologies - #11413
Conversation
The "flags" argument of notifier_register() is unused, remove it. Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com> (cherry picked from commit 9820953)
When comp_prepare() returns a negative error code in pipeline_comp_prepare(), emit a pipe_err message including the component ID and error code. This greatly accelerates diagnosing topology and IPC parameter configuration failures during pipeline setup. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
In copier_dai_free(), guard cd->dd[i] against NULL before accessing cd->dd[i]->gain_data and calling dai_common_free(). This prevents a NULL pointer dereference if endpoint allocation failed during initialization or during teardown of partially configured copier instances. Also reset pointers to NULL after freeing. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
In dai_common_free() and dai_free(), guard dd, dd->dai, dd->dma, and dd->dai_spec_config against NULL before dereferencing or releasing channels, and reset pointers to NULL after freeing. Also add NULL pointer guards to dai_put() and sof_dma_put(). This prevents NULL pointer dereferences and duplicate frees during teardown of partially configured or failed DAI pipelines. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
When pipelines are cancelled via pipeline_schedule_cancel() during pause or stop triggers, sa_set_panic_on_delay() is called to enable panic on delay. In host testbench and library builds, the system agent timer is not initialized, leaving the sa pointer NULL. Add a NULL check in sa_set_panic_on_delay() before dereferencing the sa pointer so host testbench runs do not crash with a segmentation fault. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
When a capture stream is starved or waiting for detection audio, logging every 20 ms floods the trace buffer and causes diagnostic log messages to be dropped. Increase SOF_MIN_NO_BYTES_INTERVAL_MS from 20 ms to 1000 ms so that trace transport bandwidth is conserved during idle capture periods. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
When freeing an EDF scheduled task, ensure any pending delayed work associated with the task is cancelled before marking the task free and clearing callbacks. This prevents delayed work from triggering on freed task data during pipeline resets or teardown. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
CONFIG_ZEPHYR_DP_SCHEDULER can be enabled on cAVS, but only the ACE platform_init() registered the DP scheduler. Creating a DP module on cAVS then failed with "unable to bind scheduler to task (type 3)" and module init returned -ENODEV. Call scheduler_dp_init() after the LL scheduler is set up, as ACE does. Co-developed-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
The DP lock is taken by the LL thread on every tick in scheduler_dp_ll_tick() and by each DP thread after every run. It was a k_sem, which has no priority inheritance: when a DP thread holding it was preempted by other DP threads, the cooperative high priority LL thread blocked until the holder got CPU time again. With several busy DP modules (3 MFCC + 3 MWW on cAVS 2.5) single LL ticks took up to ~40 ms, overrunning the DMIC DMAs of unrelated streams. With a k_mutex the holder inherits the LL priority: LL max drops from ~1.5M to <30k timer cycles, with no LL overruns or DMA xruns. Co-developed-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
notifier_event() sends events to other cores as non-blocking IDC messages. Each target core has a single notify_data slot and the IDC work item is reused, so two events sent back to back to the same core, such as the MWW detection followed by the KPB drain request, can overwrite the first event's data or resubmit a work item that is still queued. Send remote notifications as blocking IDC so the next event to the same core is not issued before the previous one has been handled. This adds latency on the notifying core, as it now waits for the remote callback to complete. Verified on PTL with WoV detection on core 1 notifying the arbiter and KPB on core 0. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Add PCAN (Per-Channel AGC Normalization) fixed-point math library for normalizing mel filterbank energies. PCAN estimates per-channel noise background, applies non-linear wide-dynamic-range AGC compression with fixed-point LUT gain lookup, and delivers scaled features for streaming keyword-spotting networks. Include ztest test suite with MATLAB reference models covering gain lookup, noise estimation, dynamic shrinking, stream processing, and corner cases. Co-developed-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Extend MFCC (Mel-Frequency Cepstral Coefficients) audio component with 8-bit Per-Channel AGC Normalization (PCAN) feature extraction: - Add CONFIG_COMP_MFCC_PCAN Kconfig option and CMake configuration. - Implement 8-bit quantized PCAN feature extraction paths alongside standard 16-bit cepstral outputs. - Add Topology2 component definition macros for 40-mel and 80-mel PCAN compressed feature extraction. - Lower high-frequency PCAN tracing to debug level to prevent IPC trace buffer saturation during continuous listening. Co-developed-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Add NOTIFIER_ID_D0IX_STATE to notify registered DSP components when the host changes the DSP D0 substate via SOF_IPC4_MOD_SET_D0IX. Components such as microWakeWord that keep running while the host sleeps in S0iX / D0i3 can use this event to adjust telemetry reporting or power characteristics. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Support scheduling and execution for hostless pipelines on IPC4: - In ipc4/handler-user.c, support pipelines that have no host gateway copier (such as DMIC DAI capture feeding ECNS and KPB in hardware listening mode). - Handle COMP_STATE_PREPARE properly in pipeline triggering and state transitions. - Guard against NULL module_data in ipc4_comp_connect(). - In ipc-helper.c, reset component before freeing if not in ready state. Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Support DP-to-DP component binding and terminal virtual detect sinks: - Add CONFIG_DP_TO_DP_BIND to gate binding between two Data Processing (DP) scheduled components via intermediate secondary ring buffers. - Allow attaching a single shared secondary ring_buffer on both input and output of a comp_buffer when CONFIG_DP_TO_DP_BIND is enabled. - In audio_buffer_reset(), safely reset distinct secondary source buffers. - Pass SIZE_MAX to audio_buffer_sync_secondary_buffer() during ring buffer synchronization. - Skip sinks without audio format (zero frame bytes or rate) during DP period calculation to prevent divide-by-zero for detection components. - In module_adapter_prepare(), set buffer params on DP consumers that leave them unset at bind, and allow virtual detect sinks without downstream consumers. - Declare sys_comp_ecns_init() and sys_comp_wov_arbiter_init() in component.h. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Co-developed-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
… fixes Enhance the Keyphrase Buffer (KPB) component for multi-slot Wake-on-Voice: - Add KP_BUF_CFG_BUFF_TIME_MS IPC4 configuration parameter in ipc4/kpb.h to dynamically configure ring-buffer duration per pipeline. - Implement multi-client downstream notification and draining logic. - Support 32-bit audio sample history formatting alongside 16-bit. - Optimize pre-roll audio drain paths to prevent buffer starvation on wake. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Introduce the Wake-on-Voice (WOV) arbiter component for multi-keyword detection: - Routes between up to 3 concurrent KPB drain client streams and a single host capture PCM copier. - Listens for keyword detection events from downstream MWW/detect components, determines the winning slot, routes the buffered KPB audio to the host, and notifies other detector slots to pause. - Exposes 'wov_active_slot' ALSA enum mixer control and automatically resets it back to 0 upon stream teardown. - Sends PHRASE_DETECTED notifications via AMS once per detection event, rate-limiting IPC traffic during active copy streaming. - Supports mixed sample formats (16-bit and 32-bit). Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Introduce the Echo Cancellation and Noise Suppression (ECNS) Data
Processing (DP) component:
- Add src/include/sof/audio/ecns.h defining pin bindings, periods, and
initialization prototypes.
- Runs in the DP domain with a 20ms period to process 4 DMIC channels
(2 microphones + 2 echo references).
- Provides dual-rate output streams:
- Pin 0: Clean downmixed 16 kHz mono to KPB and keyword detectors with
integrated 100 Hz highpass filter (+20 dB gain).
- Pin 1: Clean 48 kHz stereo to Host Capture.
- Supports both 16-bit and 32-bit sample formats and single-producer fallback.
- Optimizes inner copy loops using audio_stream_frames_without_wrap() to
minimize buffer boundary wrapping overhead.
- Includes CONFIG_ECNS_TEST_SIGNAL Kconfig option to gate the monotonic
counter test signal generator on the KPB mono pin for automated CI
and continuity validation.
Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
fixup ecns.c cd declaration
Add west submanifest for TensorFlow Lite Micro (TFLM) to integrate ML inference directly into the SOF build tree and replace obsolete out-of-tree tensorflow-clone.sh script. Co-developed-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Co-developed-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Export essential C++ runtime symbols for loadable LLEXT extensions: - In src/lib/cpp_new_export.cpp: export operator new, operator delete, __cxa_pure_virtual, and __assert_no_args so LLEXT modules linking C++ code (such as TensorFlow Lite Micro) can resolve runtime support symbols against the base firmware image. - Gate cpp_new_export.cpp behind CONFIG_CPP in src/lib/CMakeLists.txt. Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Replace hardcoded compiler versions and toolchain paths with dynamic toolchain discovery for MicroWakeWord (MWW): - Query target C compiler for libc.a and derive sysroot and include paths dynamically across GCC, Clang, and xt-clang. - Discover target C++ standard library headers under include/c++/*. - Add scripts/mww_shim_flatten.py to generate flattened libc shims for LLEXT linking. - Add -ffunction-sections and -fdata-sections to mww_tflm_lib to ensure literals are placed on a per-function basis in mirrored RAM. - Use XTENSA_CROSS_PREFIX gcc for LLEXT linking when available, allowing Clang Xtensa builds to link LLEXT modules without host ld incompatibility. - Add check=True to subprocess.run in llext_link_helper.py to propagate linker failure exit codes properly. Co-developed-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Co-developed-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Integrate the MicroWakeWord (MWW) audio component with multi-slot keyword detection, D0i3 low-power listening, and PCAN feature extraction: - Implement multi-slot keyword detection architecture running up to 3 concurrent wake-word models (Hey Jarvis, OK Google, Alexa, and fruit evaluation models). - Support 8-bit quantized PCAN feature streams from upstream MFCC. - Use static storage for TFLM op resolver and interpreter instances to eliminate DSP heap fragmentation and memory leaks across stream lifecycles. - Track host and DSP power transitions via D0ix power state notifier to support low-power D0i3 background listening. - Add volatile 'wovdebug_10*' switch kcontrols armed with a 5000 ms countdown timer to trigger synthetic keyword detection during automated hardware S0 and D0i3 validation suites. - Align IPC4 slot identification with reverse DAPM widget instance allocation (2 - (IPC4_INST_ID % 3)). - Provide dataset preparation, training, and mtrace tuning scripts. Co-developed-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Co-developed-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Naveen Manohar <naveen.m@intel.com> Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> mww: add dcache writeback for cross-core kpb event data
…CAVS 2.5 Enable Wake-on-Voice components and tune heap configurations: - Enable COMP_KPB, COMP_WOV_ARBITER, COMP_ECNS, and COMP_MICROWAKEWORD across Panther Lake, Wildcat Lake, and cAVS 2.5 target configurations. - In intel_adsp_cavs25_tgph.conf, enable CONFIG_COMP_MFCC_PCAN and set CONFIG_IDC_TIMEOUT_US=100000. - In zephyr/Kconfig, tune SOF_ZEPHYR_HEAP_SIZE and VIRTUAL_HEAP_EXTENDED to accommodate multi-slot ML model buffering. Co-developed-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Naveen Manohar <naveen.m@intel.com> Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Provide Topology2 component definition macros and widget structures for Echo Cancellation and Noise Suppression (ECNS) and Wake-on-Voice (WOV) Arbiter: - ecns.conf: ECNS processing component definition with dual output pins. - wov-arbiter.conf: Wake-on-Voice arbiter widget definition and active slot kcontrol enum mapping. - common_definitions.conf: Define default KPB_BUFF_TIME_MS. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Add Topology2 component definitions for MicroWakeWord (MWW): - In microwakeword.conf: define Class.Widget.microwakeword with UUID, control definitions, and pipeline attributes. - In mfcc.conf: invert switch widget polarity for proper ALSA mixer control semantics. Co-developed-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Co-developed-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
…multi-slot WoV Implement the dual-rate DMIC topology architecture with multi-slot Wake-on-Voice: - Provide dual PDM DAI endpoints: - dmic01 on PDM0: 48 kHz stereo 16-bit capture. - dmic16k on PDM1: 16 kHz stereo 16-bit detection. - Feed ECNS directly from the DMIC DAI copiers, eliminating redundant mixins and mixouts between DMIC, ECNS, and KPB. - Connect ECNS output pin 0 (16k mono clean with internal 100 Hz HPF) to KPB and multi-slot MWW detectors (slots 1, 2, 3), feeding WoV Arbiter and Host Copier PCM 11 / PCM 12. - Connect ECNS output pin 1 (48k stereo clean) to Host Copier PCM 11. - Replace WoV mixouts with copiers and run ECNS, MFCC, and MWW in the DP domain. - Add multi-slot WoV manifests for Panther Lake (PTL), Wildcat Lake (WCL), and generic CAVS platforms. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Co-developed-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Integrate multi-slot Wake-on-Voice pipelines and feature inclusion into SoundWire and HDA topologies: - Wire multi-slot WoV features into cavs-sdw.conf, cavs-rt5682.conf, sdw-dmic-generic.conf, and sof-hda-generic.conf. - Add sof-hda-generic-wov-manifest.conf manifest. - Add CMake topology build targets for Panther Lake (PTL) ACE 3.0, Wildcat Lake (WCL), and Tiger Lake (TGL) with multi-slot WoV SoundWire and HDA targets in production CMake files. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Co-developed-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
The dmic01 DAI copier formats and the ECNS Pin 1 input buffer size were hardcoded for 4 channels. Use the WOVHOST channel definitions and a new ECNS_PIN1_IN_IBS that follow DMIC_WOV_DAI_CHANNELS, so the topology also builds correctly for a 2-channel DMIC. The channel config and map in the DET16K and WOVHOST defines are now literal values. The references to the CHANNEL_* defines resolved to 0, so the DAI copiers got channel map 0 and remapped every output channel from channel 0. This also fixes the dmic16k detection path, which had been delivering channel 0 on all channels. Add the sof-adl-max98357a-rt5682-2ch-wov-multi development target that uses only the PDM0 stereo microphones on Google Brya. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Add 2-channel PCH DMIC variants of the PTL and WCL rt721 and rt722 multi-wov topologies for devices with only the PDM0 microphone pair. All of them embed the NHLT so the dmic16k DAI finds its blob. cavs-sdw.conf enables the PDM1 microphones by default, so the 2ch targets set PDM1_MIC_A_ENABLE=0, PDM1_MIC_B_ENABLE=0 and DMIC_WOV_DAI_CHANNELS=2 explicitly. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The dmic16k DAI copier advertised both 32-bit and 16-bit input formats. With the 16-bit format available the DMIC gateway on PTL was set up so that the DMA write position advanced erratically and the detector path received only about 87% of the expected 16 kHz frame rate, starving the MFCC and MWW slots. Advertise only the 32-bit format, as the other DMIC copiers do. The dmic16k path now delivers exactly 16000 frames per second end to end through ECNS and KPB. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
platform/intel/wcl.conf was a verbatim copy of ptl.conf and the WCL
manifests only differed from the PTL ones by PLATFORM="wcl". WCL is an
ACE3 platform exactly like PTL; the SOF topology layer does not need a
separate platform key for it, as the existing sof-wcl-dmic-*-id* symlinks
already show.
Remove wcl.conf and the "wcl" IncludeByKey.PLATFORM entries, delete the
duplicated WCL DMIC multi-WoV manifests and generate sof-wcl-dmic-wov-multi
and sof-wcl-dmic-wov-multi-4ch as symlinks to the PTL topologies instead.
The WCL RT722 targets were the only ones enabling INCLUDE_SDW_JACK_WOV;
PTL and WCL are identical from the topology's point of view, so enable
it on the PTL RT722 targets and turn the WCL ones into symlinks as well.
Update the README to match, including the stale
sof-{ptl,wcl}-hda-generic-4ch-wov-multi target names which were renamed
to sof-hda-generic-ace3-4ch-wov-multi earlier.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
The ECNS high-pass filters support switching between boosted (+30 dB Pin 0,
+20 dB Pin 1) and 0 dB responses via the "ECNS capture boost" control.
Also support enabling test signal on KPB mono output pin (Pin 0).
In wov-multi topologies, instantiate unique per-instance controls
("DMIC ECNS boost" / "Jack In ECNS boost" and "DMIC ecns_kpb_test_signal" /
"Jack In ecns_kpb_test_signal") so a topology with both DMIC and Jack
inputs has distinct control names.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
…rase Detect ID When both DMIC and SoundWire headset WoV paths are instantiated in the same topology (e.g. rt722 wov-multi), both wov-arbiter widgets previously generated an ALSA mixer enum control with the identical name 'wov_active_slot', causing a naming collision in the mixer. Disambiguate the active slot controls per input path: - Change default wov-arbiter enum name to 'DMIC Phrase Detect ID'. - Override wov-arbiter enum name in sdw-jack-wov-multi.conf to 'Jack In Phrase Detect ID'. - Update integration guides and documentation accordingly. Co-developed-by: Naveen Manohar <naveen.m@intel.com> Signed-off-by: Naveen Manohar <naveen.m@intel.com> Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Enhance sample keyword detector for multi-slot Wake-on-Voice testing: - Support multi-slot keyword detection with dedicated DP worker threads for 20ms audio batch processing. - Subscribe to NOTIFIER_ID_WOV_CTRL notifications from the WoV arbiter to pause and resume detection based on slot arbitration. - In detect_test.toml: increase instance count to 4. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
…lidation suite Add hardware test utilities for validating multi-slot Wake-on-Voice capture and D0i3 power transitions: - wov_blocking_read.c: ALSA capture utility configuring software avail_min to ensure prompt poll() wakeups on no-period-wakeup streams. - wov_blocking_read_tinyalsa.c: TinyALSA variant with period wakeup handling. - run_wov_10x.py: Automated 20-run hardware test suite (10x S0 and 10x D0i3 idle delay wake tests) with mathematical sample continuity verification. - test_wov_no_irq.py, wov_capture_app.c, wov_daemon.py, wov_multi_slot_test.py. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> tools: wov_capture: wait for keyword-gated PCM readiness Poll for capture data before reading a keyword-gated PCM endpoint. Propagate poll & read failures instead of reporting empty captures as successful and handle interruption during requested shutdown. Test: Verified on WCL with a 3sec 16kHz 48kHz capture. ./wov_capture_app \ -D 0 -d 12 -c 1 -r 16000 -f S16_LE \ -t 3 -n 1 -F /data/local/tmp/wov_pcm12.wav -v Signed-off-by: Naveen Manohar <naveen.m@intel.com> tools: wov_capture: align wov_capture_app options with tinycap wov_capture_app used -c for the card and -C for the channel count, while tinycap (and arecord) use -D for the card/device and -c for the channel count. The subtle difference made it easy to pass the card number as the channel count and vice versa when switching between the tools. Switch to -D CARD and -c CHANS to match tinycap, and update the usage examples and the wov_arbiter README accordingly. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Support unique phrase detect control names across the automated test harnesses and validation utilities: - In run_wov_10x.py, test_wov_no_irq.py, and wov_multi_slot_test.py: add find_active_slot_control() to auto-detect 'DMIC Phrase Detect ID', 'Jack In Phrase Detect ID', or fallback to 'wov_active_slot'. - In wov_multi_slot_test.py, add --control parameter to allow selecting a specific phrase detect control when multiple interfaces are present. - In wov_blocking_read.c, probe 'DMIC Phrase Detect ID', 'Jack In Phrase Detect ID', and 'wov_active_slot'. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
… Lake Add Panther Lake ACE 3.0 Intel OTC debug key modulus and exponent mapping in sof_ri_info.py to support manifest and signature decoding on PTL binaries. Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
…i3 verification Document multi-slot Wake-on-Voice architecture and reproduction procedures: - Update tools/topology/topology2/README.md with comprehensive hardware reproduction guide, NHLT requirements, tinyalsa capture commands, and power benchmark procedures across PTL, WCL, and TGL. - Update top-level README.md referencing the WoV test documentation, required kernel/firmware branches, and 20/20 test results. Co-developed-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com> Co-developed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Add single-detector SoundWire DMIC Wake-on-Voice topology support for Panther Lake with Realtek RT713 headset jack and RT1320 smart amplifiers. The capture pipeline downmixes SoundWire microphone audio through micsel, resamples to 16 kHz with SRC, and feeds a 2000 ms KPB ring buffer. KPB pin 0 feeds the detector copier directly, which converts the 32-bit samples to 16-bit for the DP MFCC and microWakeWord modules. KPB pin 1 feeds the WoV arbiter, which forwards the drained 32-bit history to the host capture copier on PCM 12. Also add the sof-sdw-wov feature topology build target with this pipeline, for dynamic feature loading alongside SoundWire base topologies such as sof-ptl-rt713-l3-rt1320-l12.tplg. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Add a Kconfig choice COMP_MWW_MODEL to select the built-in wake word model. The default choice is COMP_MWW_MODEL_PIPELINE_ID, which preserves the default behavior of selecting models dynamically via pipeline ID (compiling all default model headers into the firmware image). Add Kconfig options to force a single built-in keyword model at build time, omitting all other model headers from the build to reduce firmware footprint: - COMP_MWW_MODEL_HI_INTEL (mww_model_data_hi_intel.h) - COMP_MWW_MODEL_HEY_JARVIS (mww_model_data_hey_jarvis.h) - COMP_MWW_MODEL_STRAWBERRY (mww_model_data_strawberry.h) - COMP_MWW_MODEL_ORANGE (mww_model_data_orange.h) - COMP_MWW_MODEL_BANANA (mww_model_data_banana.h) Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
…build Align intel_adsp_ace40_nvl.conf with the static build configuration of intel_adsp_ace30_ptl.conf. This enables the static modules needed for Wake-on-Voice and audio feature processing (WOV Arbiter, KPB, ECNS with test signal, MFCC with PCAN, microWakeWord with PCAN and debug trace, DRC, Multiband DRC, TDFB, Aria, MUX, S24_3LE converter). Disables HiFi4 nnlib acceleration for microWakeWord (CONFIG_COMP_MWW_HIFI_NNLIB=n) to fall back to portable TFLM kernels on the HiFi5 DSP core. Disables LLEXT and the dynamic library manager in favor of a static build. Expands heap and malloc arena sizes, sets early P4WQ init for core 0 IDC worker threads, sets 100ms IDC timeout, enables telemetry, and configures DMA LLI pool and L2 MMU tables while preserving Nova Lake specific settings. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Include module toml configurations for WOV arbiter, ECNS, and microWakeWord (MWW) when enabled by Kconfig or when forcing all modular builds. This allows rimage to populate the module entries in the firmware manifest for Nova Lake (NVL) and prevents firmware load failures. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Add the lean SSP0 NoCodec Wake-on-Voice topology sof-ptl-nocodec-wov.tplg
(and sof-tgl-nocodec-wov.tplg) defined in cavs-nocodec-wov.conf based on
the single-slot WoV pipeline from sdw-dmic-wov-single.conf.
The topology provides:
- Playback (passthrough): PCM 0 ("Port0", 2ch, 48 kHz, S16_LE / S32_LE) ->
host-copier -> dai-copier -> SSP0 with LBM mode (quirk 64) enabled.
- Capture (Wake-on-Voice): SSP0 DAI copier (loopback, 48 kHz 2ch S16_LE) ->
micsel (stereo downmix to mono 48 kHz 16-bit) -> SRC (48 kHz to 16 kHz
mono 16-bit) -> KPB (2000 ms 16 kHz mono 16-bit).
- Detection slot: KPB pin 0 -> detector copier (16-bit pass-through) ->
MFCC (10 ms hop PCAN) -> microWakeWord (MWW) -> WOV Arbiter pin 1.
- History drain: KPB pin 1 -> WOV Arbiter pin 0 (16-bit) -> host-copier
(PCM 12, 16 kHz mono S16_LE, D0i3-compatible).
This enables automated stress tests and keyword recognition accuracy testing
by playing audio into the SSP0 playback stream and receiving the looped-back
signal on the keyword detection and WoV capture path.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
All builds, topologies and models use the int8 Mel features from MFCC, so the int32 Q9.23 input path with the in-component soft AGC and int8 requantization is not used anymore. Remove it together with the COMP_MWW_PCAN option that selected between the two paths. The soft AGC will be added to MFCC as an alternative int8 output mode to PCAN, so MWW only needs to copy the int8 features to the model. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
MWW accepts only int8 Mel features, so the MWW_PCAN=false choice of 32-bit Mel frames does not work anymore. Replace the true/false switch with MWW_FEATURES that names the int8 feature type from MFCC, for now only "pcan". This makes it possible to add other int8 feature types later. The generated WoV topologies are binary identical before and after the change. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Add an output mode to the MFCC state that is set once in setup from the configuration blob: cepstral coefficients, int32 Mel or int8 PCAN Mel. The output preparation and the output sample size now use it instead of checking the PCAN enable flag under the Kconfig option in several places. This prepares adding more output data types. The output is bit-exact with the previous version for the cepstral, Mel and PCAN benchmark topologies in testbench. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Add AGC8, an int8 Mel output mode that is a light alternative to PCAN. A single gain is added to all Q9.23 Mel log values of a hop. It attacks instantly to keep the hop peak at or below +1.0 and releases towards a target, slower when the VAD reports speech. The values are then clamped and converted to int8 Q1.7. It needs no per-channel noise estimate and no tflite-micro code, and is always built, so one MFCC build supports cepstral, int32 Mel, PCAN and AGC8 output. The algorithm is moved from the removed microwakeword int32 input path and is bit-exact with it. AGC8 is enabled with the new enable_agc8 blob flag and tuned with agc_target, agc_floor, agc_release and agc_release_speech, which take the previously reserved blob space. Zero values select the defaults, so the blob size and existing blobs are unchanged. Setup rejects a blob that enables both PCAN and AGC8, or either of them with cepstral output. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Add the mel40_10ms_agc8_compress blob for microwakeword: 40 Mel bins with 10 ms hop, soft AGC int8 output, and VAD enabled for the AGC release and the MWW gating. The blob uses log10 Mel with scale 0.4, so the int8 range covers 50 dB below the AGC normalized peak, and a 3.0 gain target, so quiet input is boosted. The release in silence is 3 dB/s to recover quickly after loud sounds, and 0.1 dB/s during speech. With these settings the features of keywords in background noise are the same for input peak levels from -50 to -6 dBFS. Add the "agc8" choice for MWW_FEATURES in the WoV topologies. The default stays "pcan" and the WoV topologies are binary identical with it. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
EXPORT_SYMBOL() is defined in zephyr/llext/symbol.h. Without LLEXT nothing includes it indirectly, so a static build with the debug stream text messages fails. Include the header directly; the macro is a no-op when LLEXT is disabled. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The model output is a LOGISTIC with the fixed scale 1/256, so the probability is the raw output minus the zero point in Q0.8. Use that directly for the detection average, threshold and the live score instead of a float probability. The detection decisions and the logged values are identical to the float version. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Twister rejects the space separated tags string in the PCAN test case description, so the test could not be run. Use a YAML list like the other math unit tests. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The PCAN strength and offset were passed as floats only to be converted back to Q1.15 and Q8.7 inside the gain lookup function. The MFCC component in turn converted its Q1.15 and Q8.7 blob values to float to call the library. Change the PCAN configuration and the LUT computation API to take the fixed-point values directly. This removes the last floating point use from the MFCC and PCAN code. The output is bit-exact with the previous version. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The size field of the struct sof_abi_hdr in front of a model from the bytes control was used without checking it against the received blob size. A too large value made the model parser read beyond the blob. Reject the blob when the size exceeds the received payload. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The model blob was a bare TFLite flatbuffer with no information about the model. Add struct sof_mww_model_hdr in front of the flatbuffer, for both the built-in models and the bytes control. It has a version and header size for later additions, the model size and CRC32 that are checked before the model is used, the keyword name, the feature type and geometry that are checked against the component, and the trigger threshold and averaging length, so each model carries its own trigger tuning. The arena size field lets a model that needs more than the static tensor arena be rejected, and reserved words leave room for future use. A bare flatbuffer is still accepted and uses the previous default trigger settings. crc32() in numbers.c is exported for this, so that the check also works when the component is built as a loadable module. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Retrain the hi intel, strawberry, orange and banana models, and store all built-in models and sof-ctl blobs, including the upstream hey jarvis model, with the struct sof_mww_model_hdr model header. The models use int8 PCAN features and int8 streaming state, which removes 18 dequantize and quantize operations per inference and makes the models about 10 kB smaller. The trigger settings in the headers are threshold 0.5 and average of 4 probabilities. The hi intel model is trained with negative class weight 3.0 and about 6000 Mozilla Common Voice clips as continuous speech negatives. Keyword recall stays at 99.8 % while false triggers on the Common Voice clips drop from 59.4 % to 2.4 %. It triggers on one of the 11 held-out ODAQ dialog clips, where the previous model triggered on 10 of them. The strawberry and orange models use a new TTS speaker for every clip, the other fruit words as unknown speech, about 6000 Common Voice clips as speech negatives, and augmented recordings of a few real speakers as additional positives. On 120 held-out LibriTTS-R speakers at -40..-10 dBFS strawberry detection is 99-100 % and orange 96-100 %. Orange does not trigger on the other fruits in 960 clips and strawberry triggers on 10 of them. False triggers on the Common Voice clips are 0.3 % for strawberry and 1.4 % for orange. The banana model also uses Whisper screening of the TTS clips, which raises its detection from 82-86 % to 95-98 %. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Add native_sim unit tests for the MFCC soft AGC int8 output: default and blob parameter init, Q1.7 conversion and rounding, attack with saturation, the gain floor, the silence and speech release steps and the release stop at the target gain. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The MWW component selects its built-in model from the pipeline ID, with pipeline 111 as strawberry, 112 as hi intel and 113 as orange. Move the single detector slot of the SoundWire DMIC WoV topology from pipeline 111 to 112 to use the hi intel model. The Phrase Detect ID control reports "Slot 2" when the keyword is detected, since the slot number follows the pipeline ID. Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved critical issues include unsafe component teardown and notification payload lifetimes, configuration-dependent link failures, and a microphone topology with an unresolved route and no input.
6 open issues
Propagate reset errors before freeing the component · New Stop the pipeline before freeing an active component · New Handle IDC timeouts without reusing pending notification data · New Select SQRT_FIXED for the 32-bit mel filterbank · New Provide the SoundWire microphone source when SDW_DMIC is disabled · New Pass mixer control names as single arguments and report failures · New
What changed in this PR
This PR backports Wake-on-Voice support into SOF, adds multi-slot DMIC and single-slot SoundWire topologies, and extends MFCC feature processing for microWakeWord.
Changes:
- Integrate WoV arbitration, ECNS, microWakeWord, PCAN, and AGC8 through module metadata, build wiring, and platform configuration.
- Extend topology classes, production targets, controls, and audio-processing presets.
- Update scheduling, notifications, buffering, and component cleanup; add capture tooling and unit-test infrastructure.
This pull request requires changes.
Approval blockers include unsafe component teardown and reset-result handling, remote-notification payload lifetime, a missing square-root build dependency, and an unresolved SoundWire microphone route. Additional findings concern KPB platform defaults and duration selection, ineffective PCAN smoothing configuration, capture-control handling, and missing linear-Mel reference tests.
| File | Description |
|---|---|
zephyr/lib/vregion.c |
Include LLEXT symbol definitions. |
zephyr/Kconfig |
Add DP-to-DP binding configuration. |
zephyr/edf_schedule.c |
Cancel delayed work during task freeing. |
zephyr/CMakeLists.txt |
Adjust extension linking and Xtensa compilation flags. |
uuid-registry.txt |
Register ECNS, MWW, and WoV arbiter UUIDs. |
tools/wov_capture/wov_blocking_read_tinyalsa.c |
Add a tinyalsa blocking-capture utility. |
tools/wov_capture/Makefile |
Add capture-tool build and installation targets. |
tools/topology/topology2/sof-hda-generic.conf |
Include WoV classes and conditional MFCC support. |
tools/topology/topology2/production/tplg-targets-sdca-generic.cmake |
Register a single-slot SoundWire WoV target. |
tools/topology/topology2/production/tplg-targets-hda-generic.cmake |
Register an ACE3 multi-slot WoV target. |
tools/topology/topology2/production/tplg-targets-cavs25.cmake |
Register a four-channel TGL WoV target. |
tools/topology/topology2/platform/intel/dmic-generic.conf |
Add multi-slot selection and adjust capture-object gating. |
tools/topology/topology2/platform/intel/dmic-default.conf |
Define the WoV DAI channel-count default. |
tools/topology/topology2/include/pipelines/cavs/wov-kpb-be.conf |
Add a configurable KPB pipeline class. |
tools/topology/topology2/include/pipelines/cavs/dai-mixin-be.conf |
Add a configurable DAI capture pipeline class. |
tools/topology/topology2/include/pipelines/cavs/dai-kpb-be.conf |
Add DMIC defaults, formats, and KPB routing. |
tools/topology/topology2/include/components/wov.conf |
Replace initialization bytes with switches and add an output pin. |
tools/topology/topology2/include/components/wov-arbiter.conf |
Define the arbiter widget and active-slot control. |
tools/topology/topology2/include/components/mww/score_enum.conf |
Define probability-score enum labels. |
tools/topology/topology2/include/components/mww.conf |
Define the MWW widget and fake-wake switch. |
tools/topology/topology2/include/components/mfcc/mel80.conf |
Refresh the 80-band Mel preset. |
tools/topology/topology2/include/components/mfcc/mel80_pcan_compress.conf |
Add compressed 80-band PCAN features. |
tools/topology/topology2/include/components/mfcc/mel80_compress.conf |
Refresh compressed 80-band features. |
tools/topology/topology2/include/components/mfcc/mel80_compress_dtx.conf |
Refresh the 80-band compression/DTX preset. |
tools/topology/topology2/include/components/mfcc/mel40.conf |
Add a 40-band Mel preset. |
tools/topology/topology2/include/components/mfcc/mel40_compress.conf |
Add compressed 40-band features. |
tools/topology/topology2/include/components/mfcc/mel40_10ms.conf |
Add a 10-ms-hop Mel preset. |
tools/topology/topology2/include/components/mfcc/mel40_10ms_pcan_compress.conf |
Add streaming PCAN features with VAD. |
tools/topology/topology2/include/components/mfcc/mel40_10ms_compress.conf |
Add streaming compressed Mel features. |
tools/topology/topology2/include/components/mfcc/mel40_10ms_agc8_compress.conf |
Add streaming AGC8 features with VAD. |
tools/topology/topology2/include/components/mfcc/default.conf |
Refresh default MFCC parameters. |
tools/topology/topology2/include/components/mfcc/ceps13_compress_dtx.conf |
Refresh the cepstral compression/DTX preset. |
tools/topology/topology2/include/components/mfcc.conf |
Change VAD switch inversion. |
tools/topology/topology2/include/components/kpb.conf |
Add history-duration controls and a static IPC4 UUID. |
tools/topology/topology2/include/components/host-copier.conf |
Document D0i3 capture compatibility. |
tools/topology/topology2/include/components/eqiir/highpass_50hz_40db_48khz.conf |
Add a 50-Hz, 40-dB, 48-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_50hz_40db_16khz.conf |
Add a 50-Hz, 40-dB, 16-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_50hz_30db_48khz.conf |
Add a 50-Hz, 30-dB, 48-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_50hz_30db_16khz.conf |
Add a 50-Hz, 30-dB, 16-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_40hz_40db_48khz.conf |
Add a 40-Hz, 40-dB, 48-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_40hz_40db_16khz.conf |
Add a 40-Hz, 40-dB, 16-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_40hz_30db_48khz.conf |
Add a 40-Hz, 30-dB, 48-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_40hz_30db_16khz.conf |
Add a 40-Hz, 30-dB, 16-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_30hz_40db_48khz.conf |
Add a 30-Hz, 40-dB, 48-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_30hz_40db_16khz.conf |
Add a 30-Hz, 40-dB, 16-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_30hz_30db_48khz.conf |
Add a 30-Hz, 30-dB, 48-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_30hz_30db_16khz.conf |
Add a 30-Hz, 30-dB, 16-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_20hz_40db_48khz.conf |
Add a 20-Hz, 40-dB, 48-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_20hz_40db_16khz.conf |
Add a 20-Hz, 40-dB, 16-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_20hz_30db_48khz.conf |
Add a 20-Hz, 30-dB, 48-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_20hz_30db_16khz.conf |
Add a 20-Hz, 30-dB, 16-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_100hz_40db_48khz.conf |
Add a 100-Hz, 40-dB, 48-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_100hz_40db_16khz.conf |
Add a 100-Hz, 40-dB, 16-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_100hz_30db_48khz.conf |
Add a 100-Hz, 30-dB, 48-kHz filter preset. |
tools/topology/topology2/include/components/eqiir/highpass_100hz_30db_16khz.conf |
Add a 100-Hz, 30-dB, 16-kHz filter preset. |
tools/topology/topology2/include/components/ecns.conf |
Define the ECNS widget and boost/test controls. |
tools/topology/topology2/include/common/common_definitions.conf |
Add SoundWire WoV and KPB defaults. |
tools/topology/topology2/cavs-sdw.conf |
Include WoV classes and single-slot feature support. |
tools/topology/topology2/cavs-rt5682.conf |
Include multi-slot WoV component classes. |
tools/rimage/config/wcl.toml.h |
Include new component manifests for WCL. |
tools/rimage/config/tgl.toml.h |
Include new component manifests for TGL. |
tools/rimage/config/ptl.toml.h |
Include new component manifests for PTL. |
tools/rimage/config/nvl.toml.h |
Include new component manifests for NVL. |
test/ztest/unit/math/advanced/pcan/testcase.yaml |
Register native-simulation PCAN tests. |
test/ztest/unit/math/advanced/pcan/ref_pcan_lut.h |
Add reference gain lookup tables. |
test/ztest/unit/math/advanced/pcan/ref_pcan_func.h |
Add function reference vectors. |
test/ztest/unit/math/advanced/pcan/ref_pcan_corners.h |
Add boundary-case reference vectors. |
test/ztest/unit/math/advanced/pcan/prj.conf |
Configure the standalone PCAN test application. |
test/ztest/unit/math/advanced/pcan/pcan_wide_dynamic_func.m |
Model fixed-point gain interpolation. |
test/ztest/unit/math/advanced/pcan/pcan_shrink.m |
Model piecewise compression. |
test/ztest/unit/math/advanced/pcan/pcan_process.m |
Model frame-level PCAN processing. |
test/ztest/unit/math/advanced/pcan/pcan_noise_estimate.m |
Model temporal noise smoothing. |
test/ztest/unit/math/advanced/pcan/pcan_gain_lookup.m |
Generate reference gain tables. |
test/ztest/unit/math/advanced/pcan/CMakeLists.txt |
Build PCAN tests with microfrontend sources. |
test/ztest/unit/audio/mfcc_agc8/testcase.yaml |
Register native-simulation AGC8 tests. |
test/ztest/unit/audio/mfcc_agc8/prj.conf |
Configure the standalone AGC8 test application. |
test/ztest/unit/audio/mfcc_agc8/CMakeLists.txt |
Build AGC8 unit tests. |
test/cmocka/src/notifier_mocks.c |
Update the notifier mock signature. |
test/cmocka/src/math/auditory/CMakeLists.txt |
Link square-root support into auditory tests. |
submanifests/tflm.yml |
Pin machine-learning workspace dependencies. |
src/schedule/zephyr_dp_schedule.c |
Replace DP semaphores with mutexes. |
src/schedule/ll_schedule_xtos.c |
Update notifier registration arguments. |
src/schedule/dma_single_chan_domain.c |
Update notifier registration arguments. |
src/samples/audio/detect_test.toml |
Increase detector instance capacity. |
src/platform/intel/cavs/platform.c |
Initialize the DP scheduler when enabled. |
src/math/pcan/CMakeLists.txt |
Integrate PCAN and microfrontend sources. |
src/math/numbers.c |
Export CRC32 for extensions. |
src/math/Kconfig |
Add the PCAN math-library option. |
src/math/CMakeLists.txt |
Conditionally build the PCAN library. |
src/math/auditory/mel_filterbank_32.c |
Add linear Mel magnitude output. |
src/lib/notifier.c |
Simplify registration and change remote notification delivery. |
src/lib/dma.c |
Make DMA release tolerate NULL. |
src/lib/dai.c |
Make DAI release tolerate NULL. |
src/lib/cpp_new_export.cpp |
Export C++ allocation and runtime-support wrappers. |
src/lib/CMakeLists.txt |
Build C++ runtime exports. |
src/ipc/ipc4/handler-kernel.c |
Broadcast D0ix state notifications. |
src/ipc/ipc-helper.c |
Attempt stop/reset before component destruction. |
src/include/user/mww.h |
Define the model-blob ABI and feature metadata. |
src/include/user/mfcc.h |
Add PCAN and AGC8 configuration fields. |
src/include/sof/math/auditory.h |
Declare the linear Mel output API. |
src/include/sof/lib/notifier.h |
Add WoV/D0ix events and simplify registration. |
src/include/sof/lib/ams_msg.h |
Add whitespace only. |
src/include/sof/lib/agent.h |
Guard an uninitialized system agent. |
src/include/sof/audio/wov_arbiter.h |
Define arbiter controls and notification payloads. |
src/include/sof/audio/pipeline.h |
Expose pipeline scheduling cancellation. |
src/include/sof/audio/mfcc/mfcc_vad.h |
Adjust VAD thresholds and noise-floor adaptation. |
src/include/sof/audio/mfcc/mfcc_comp.h |
Add output modes and PCAN/AGC8 processing state. |
src/include/sof/audio/mfcc/mfcc_agc8.h |
Define the soft-AGC interface and defaults. |
src/include/sof/audio/kpb.h |
Make history duration and client capacity configurable. |
src/include/sof/audio/ecns.h |
Define ECNS pins, frame sizes, and channel maps. |
src/include/sof/audio/component.h |
Declare new component initialization functions. |
src/include/sof/audio/audio_buffer.h |
Avoid resetting shared secondary buffers twice. |
src/include/ipc4/kpb.h |
Add the history-duration configuration parameter. |
src/include/ipc4/detect_test.h |
Add a trailing enum comma. |
src/drivers/dw/dma.c |
Update notifier registration arguments. |
src/debug/debug_stream/debug_stream_text_msg.c |
Include LLEXT symbol definitions. |
src/audio/wov_arbiter/wov_arbiter.toml |
Define the arbiter module manifest. |
src/audio/wov_arbiter/CMakeLists.txt |
Add arbiter build integration. |
src/audio/pipeline/pipeline-schedule.c |
Expose cancellation and guard missing tasks. |
src/audio/pipeline/pipeline-params.c |
Log component preparation failures. |
src/audio/module_adapter/module_adapter.c |
Adjust DP preparation and buffer synchronization. |
src/audio/microwakeword/mww.toml |
Define the microWakeWord module manifest. |
src/audio/microwakeword/mww_model.h |
Declare classifier and model-management APIs. |
src/audio/microwakeword/llext/llext.toml.h |
Define the loadable MWW manifest. |
src/audio/microwakeword/Kconfig |
Add model, tracing, profiling, and test options. |
src/audio/mfcc/mfcc_agc8.c |
Implement soft AGC and int8 quantization. |
src/audio/mfcc/llext/CMakeLists.txt |
Include AGC8 in loadable MFCC builds. |
src/audio/mfcc/Kconfig |
Add PCAN and tracing options. |
src/audio/mfcc/CMakeLists.txt |
Integrate PCAN headers and AGC8 sources. |
src/audio/kpb.toml |
Expand KPB instances and declare both output pins. |
src/audio/Kconfig |
Add arbiter/ECNS options and configurable KPB sizing. |
src/audio/host-zephyr.c |
Reduce repetitive no-data logging. |
src/audio/host-legacy.c |
Update notifier registration arguments. |
src/audio/ecns/ecns.toml |
Define the ECNS module manifest. |
src/audio/ecns/CMakeLists.txt |
Add ECNS build integration. |
src/audio/dai-zephyr.c |
Update registration and harden partial-initialization cleanup. |
src/audio/dai-legacy.c |
Update notifier registration arguments. |
src/audio/copier/copier.c |
Update microphone-privacy notifier registration. |
src/audio/copier/copier_dai.c |
Guard endpoint cleanup and clear released pointers. |
src/audio/CMakeLists.txt |
Include new audio component directories. |
src/audio/buffers/ring_buffer.c |
Release retained virtual-region references. |
src/audio/buffers/audio_buffer.c |
Support shared DP-to-DP secondary buffers. |
src/arch/host/configs/library_defconfig |
Enable PCAN in host-library builds. |
scripts/tensorflow-clone.sh |
Remove the standalone dependency-cloning script. |
scripts/mww_shim_flatten.py |
Rename shim ELF sections to reduce Xtensa call distances. |
scripts/llext_link_helper.py |
Propagate linker and objcopy failures. |
scripts/host-testbench.sh |
Clear GTK_PATH before host testing. |
README.md |
Link WoV hardware-verification instructions. |
app/wov-d0i3-fake-wake.conf |
Add a synthetic-wake test overlay. |
app/configs/wcl/modules.conf |
Add WCL modular-component settings. |
app/configs/ptl/modules.conf |
Add PTL modular-component settings. |
app/boards/intel_adsp_cavs25.conf |
Enable WoV components and adjust memory/logging settings. |
app/boards/intel_adsp_cavs25_tgph.conf |
Enable PCAN and extend the IDC timeout. |
app/boards/intel_adsp_ace40_nvl.conf |
Enable WoV and revise module/resource defaults. |
app/boards/intel_adsp_ace30_wcl.conf |
Enable WoV and revise module/resource defaults. |
app/boards/intel_adsp_ace30_ptl.conf |
Enable WoV and revise module/userspace defaults. |
Review effort: Balanced
| comp_reset(icd->cd); | ||
| comp_set_state(icd->cd, COMP_TRIGGER_RESET); |
| /* check state: if not ready, stop and reset to release resources before freeing */ | ||
| if (icd->cd->state != COMP_STATE_READY) { | ||
| if (icd->cd->state == COMP_STATE_ACTIVE) | ||
| comp_trigger(icd->cd, COMP_TRIGGER_STOP); | ||
| comp_reset(icd->cd); | ||
| comp_set_state(icd->cd, COMP_TRIGGER_RESET); | ||
| } |
| /* Wait for completion: back-to-back events to the same core would | ||
| * otherwise reuse a queued IDC work item and overwrite notify_data. | ||
| */ | ||
| idc_send_msg(¬ify_msg, IDC_BLOCKING); |
| /* sofm_sqrt_int32 treats input as Q2.30, returning sqrt(n)*2^15. | ||
| * Scale down by 2^15 with rounding to obtain integer sqrt(num). | ||
| */ | ||
| return (uint32_t)((sofm_sqrt_int32((int32_t)num) + (1 << 14)) >> 15); |
| "cavs-sdw\;sof-sdw-wov\;SDW_JACK=false,SDW_DMIC=0,NUM_HDMIS=0,\ | ||
| SDW_DMIC_WOV_SINGLE=true" |
| if (ctl) { | ||
| char cmd[128]; | ||
| snprintf(cmd, sizeof(cmd), | ||
| "tinymix -D %u set %s 1 >/dev/null 2>&1 || amixer -c %u cset name=%s 1 >/dev/null 2>&1", | ||
| card, ctl, card, ctl); | ||
| system(cmd); | ||
| } |


No description provided.