Skip to main content

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.
The recommendations focus on island placement, shared-pool sizing, configuration review, and end-to-end validation. The example sizes in this note are configuration-specific and must not be treated as universal defaults.

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.
Hierarchy of ADSP Island TCM, which branches into QURTOS_VA_ISLAND_POOL and TCM_PHYSPOOL, leading to the SVA/Sound Trigger Engine and the Custom VA Engine respectively, for concurrent voice-engine operation.
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:
In the documented configuration, only approximately 16 KB remained in 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

Review pp_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.
After removing unnecessary island placement, the documented configuration increased available VA island space from approximately 16 KB to 28 KB. Move additional unused modules out of island memory if you need more headroom. Example concept in pp_libs_cfg.json:
Do not move a module out of island memory solely to follow this example. Confirm that the module is unused, or that its non-island placement is supported by the target configuration.

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 used TCM_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:
  1. Measure the island and TCM footprint of each voice wake-up engine, including the small and large custom models.
  2. Identify the worst-case simultaneous activation scenario.
  3. Account for fixed platform reservations and any modules placed in island memory.
  4. Allocate QURTOS_VA_ISLAND_POOL and TCM_PHYSPOOL so the combined peak demand fits within the fixed physical island TCM budget.
  5. Retain practical headroom for allocator overhead and configuration growth.
At minimum, the sizing decision should cover SVA-only, custom-engine-only, and SVA-plus-custom-engine operation.

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.