Overview
This application note describes how to configure and validate ADSP island TCM memory when Qualcomm SVA (Sound Trigger Engine) and a custom voice activation or hotword engine are integrated in the same ADSP image. It addresses two related failure modes:- Build-time out-of-memory (OOM) failures while creating the ADSP image.
- Runtime TCM allocation failures or ADSP panics when SVA and the custom engine are active concurrently.
Scope
This note is intended for engineers who integrate, configure, build, and validate concurrent voice wake-up engines on all Qualcomm ADSP-based platforms. Readers should be familiar with ADSP image generation, island-memory placement,pp_libs_cfg.json, cust_config.xml, and ADSP runtime-log analysis.
ADSP island TCM memory architecture
The relevant island TCM is partitioned into two logical pools. Both pools use the same fixed physical island TCM budget; therefore, increasing one pool requires reducing the other.
The total island TCM available is fixed by the hardware and software configuration. Evaluate pool sizes, module placement, and model footprints together.
Build-time OOM during custom VA integration
Symptom
Adding the custom voice activation module can fail during ADSP image creation with an error similar to:QURTOS_VA_ISLAND_POOL, while the custom engine required approximately 37,000 bytes for the small model and 46,080 bytes for the large model.
Root cause
Modules that were not required by the target configuration were still placed in island memory. Their reserved space reduced the headroom available for the custom hotword module.Resolution
Reviewpp_libs_cfg.json and set island: False for unused modules. The documented example includes:
voice_wakeup_v2_module, when Qualcomm voice activation is not used in that configuration.stage1_pdk_module, when it is not required by the target configuration.
pp_libs_cfg.json:
Runtime failure with concurrent voice activations
Symptom
When SVA is enabled first and the custom keyword engine is enabled afterward, the ADSP may report a TCM allocation failure such as:Root cause
The documented configuration usedTCM_PHYSPOOL = 0x40000 (256 KB). This was insufficient for the custom engine’s approximately 46 KB runtime allocation after SVA had already consumed part of the shared island TCM budget. The issue appears only in the concurrent-use case, because the combined peak demand exceeds the available partition.
Example pool rebalancing
The 64 KB transfer is an example validated for the documented configuration. Reevaluate it if the platform, ADSP image, SVA configuration, custom engine, model, or module placement changes.
Reducing
QURTOS_VA_ISLAND_POOL provides additional memory for TCM_PHYSPOOL, but reduces the memory available to SVA and other VA-island users. If the remaining pool is insufficient, or lacks a suitably sized aligned free block, SVA initialization, runtime allocation, dynamic mapping, or concurrent voice operation may fail.
This change is configuration-specific. Validate it through build checks, pool-usage analysis, and SVA/custom VA concurrent testing before production use.
Memory sizing method
Use the following procedure before finalizing pool sizes:- Measure the island and TCM footprint of each voice wake-up engine, including the small and large custom models.
- Identify the worst-case simultaneous activation scenario.
- Account for fixed platform reservations and any modules placed in island memory.
- Allocate
QURTOS_VA_ISLAND_POOLandTCM_PHYSPOOLso the combined peak demand fits within the fixed physical island TCM budget. - Retain practical headroom for allocator overhead and configuration growth.
Configuration files
Record the exact branch, platform, configuration revision, and model revision used when validating a pool-size change.
Validation
Summary
Size the shared island TCM partition for the worst-case concurrent voice wake-up workload, remove unnecessary island placement, and complete build plus runtime validation before production deployment.

