.. _xtensa_developer_guide: Xtensa Developer Guide ###################### Overview ******** This page contains information on certain aspects when developing for Xtensa-based platforms. HiFi Audio Engine DSP ********************* The kernel allows threads to use the HiFi Audio Engine DSP registers on boards that support these registers. The kernel only supports the use of the HiFi registers by threads and not ISRs. .. note:: Presently, only the Intel ADSP ACE hardware platforms are configured for HiFi support by default. Concepts ======== The kernel can be configured for an application to leverage the services provided by the Xtensa HiFi Audio Engine DSP. Three modes of operation are supported, which are described below. No HiFi registers mode ---------------------- This mode is used when the application has no threads that use the HiFi registers. It is the kernel's default HiFi services mode. Unshared HiFi registers mode ---------------------------- This mode is used when the application has only a single thread that uses the HiFi registers. The HiFi registers are left unchanged whenever a context switch occurs. .. note:: The behavior is undefined, if two or more threads attempt to use the HiFi registers, as the kernel does not attempt to detect (nor prevent) multiple threads from using these registers. Shared HiFi registers mode -------------------------- This mode is used when the application has two or more threads that use HiFi registers. When enabled, the kernel automatically allows all threads to use the HiFi registers. During each thread context switch, the kernel saves the outgoing thread's HiFi registers and loads the incoming thread's HiFi registers, regardless of whether the thread utilizes them or not. Additional stack space may be required for each thread to account for the extra registers that must be saved. Configuration Options ===================== The unshared HiFi registers mode is selected when configuration option :kconfig:option:`CONFIG_XTENSA_HIFI_SHARING` is disabled but configuration options :kconfig:option:`CONFIG_XTENSA_HIFI3` and/or :kconfig:option:`CONFIG_XTENSA_HIFI4` are enabled. The shared HiFi registers mode is selected when the configuration option :kconfig:option:`CONFIG_XTENSA_HIFI_SHARING` is enabled in addition to configuration options :kconfig:option:`CONFIG_XTENSA_HIFI3` and/or :kconfig:option:`CONFIG_XTENSA_HIFI4`. Threads must have sufficient stack space for saving the HiFi register values during context switches as described above.