R |... |" color="#C4D600"];
- }
-
- subgraph clusterStr1 {
- label="Stream 1"; fontsize=10; color="#FFA300"
-
- str1_cfg [label="\{ time_slot_group_index=0\}"]
- str1_cfg -> tdm_acpi:acpi0 [style=dotted]
-
- str1 [label="L |R |..." color="#FFA300"]
- }
-
- str [label="<0>R |<1>L |<2> |<3>L |<4>R |<5> |<6> |<7> "]
-
- str0:l -> str:1
- str0:r -> str:0
-
- str1:l -> str:3
- str1:r -> str:4
-
- {rank=min; tdm_acpi}
- {rank=max; str}
-}
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/io_drivers/images/io_drivers_diagram.pu b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/io_drivers/images/io_drivers_diagram.pu
deleted file mode 100644
index 37ce38ce..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/io_drivers/images/io_drivers_diagram.pu
+++ /dev/null
@@ -1,16 +0,0 @@
-frame "SOF" {
- component Gateway
- component GatewayExtension <>
-}
-
-frame "Zephyr" {
- component IoDriver <>
- component DMA
-}
-
-Gateway *-right- GatewayExtension
-
-Gateway -down- IoDriver
-Gateway -down- DMA
-
-GatewayExtension ..> IoDriver
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/io_drivers/index.rst b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/io_drivers/index.rst
deleted file mode 100644
index 52562049..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/io_drivers/index.rst
+++ /dev/null
@@ -1,31 +0,0 @@
-.. _io_drivers:
-
-IO Drivers
-##########
-
-The IO Drivers provide access to an IO HW Interfaces connected to the DSP, e.g.
-I2S, DMIC, etc. and are managed as a part of the Zephyr RTOS. The Audio IO
-Drivers share generic `Zephyr DAI interface `__.
-For a full list of IO drivers available on the specific platform, refer to
-:ref:`platforms`. HW IO is accessed via the `Gateway` interface inside the FW.
-The actual implementation of that interface depends on the underlying HW IO
-mechanism. Gateways use the Zephyr DMA interface to transmit the data to/from
-the represented HW IO. DMA interface implementation depends on the underlying
-DMA method (HDA-DMA, GPDMA, etc.).
-
-**NOTE:** The introduction of Gateways concept to SOF with Zephyr is a work in
-progress. In existing implementation the SOF Host and DAI implementation is
-still in use as a substitute of Gateways.
-
-.. uml:: images/io_drivers_diagram.pu
- :caption: IO Drivers diagram
-
-Drivers
-*******
-
-.. toctree::
- :maxdepth: 1
-
- hda/hda_driver
- i2s/i2s_driver
- dmic/dmic_driver
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/heap_sharing.rst b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/heap_sharing.rst
deleted file mode 100644
index 1b7d0347..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/heap_sharing.rst
+++ /dev/null
@@ -1,58 +0,0 @@
-Heap sharing
-############
-
-The memory heap can be:
-
-- local - used exclusively by a single DSP core,
-- shared - higher level memory shared across all DSP cores
-
-.. uml:: images/heaps.pu
- :caption: Memory Heaps
-
-.. note:: Introduction of MMU will require a separate local application heap per
- isolated domain.
-
-L1 Cache Coherency
-******************
-
-NOTE: This section applies to Intel systems without L1 cache coherency
-
-A local heap is used exclusively by a single DSP core. Therefore operations on
-the allocated memory buffers do not require explicit L1 cache operations nor
-data cache alignment.
-
-All operations performed on a local heap can be executed by the associated DSP
-core only. The *move-to-another-core* operation is not permitted for allocated
-buffers.
-
-A shared heap can be configured in two ways:
-
-1. To provide uncache aliases of buffer addresses to the clients,
-2. To provide cacheable addresses to the clients.
-
-Option #1 is preferred, since does not require explicit L1 cache operations
-when memory is accessed by a DSP core. However, all operations directly access
-L2+ memory therefore it is not suitable for a low latency high performance data
-processing case.
-
-Option #2 provides better performance but requires explicit L1 cache operations,
-which are difficult to maintain and validate, as well as data cache alignment
-for both client buffers and their descriptors, which creates an overhead. This
-configuration should be avoided if possible unless a coherent API is available
-to share the data.
-
-However, a one important exception to the shared memory accessed through uncached
-alias is a data buffer connected between processing components running on
-different cores. Locking and cache operations price could be payed to get much
-better performance of accessing the data in the buffer which may be a
-significant part of light weight LL processing modules DSP cycle budget.
-
-Accessing Shared Memory Pool
-****************************
-
-The data structures needed to manage shared memories are initialized by the
-primary core, structure location in memory map is known at the build time and
-API is protected by the mutex.
-
-The mutex uses atomic operation behind and all processors co-managing this
-memory heap must support atomics.
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/dynamic_module_load.pu b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/dynamic_module_load.pu
deleted file mode 100644
index 02c386d0..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/dynamic_module_load.pu
+++ /dev/null
@@ -1,77 +0,0 @@
-@startuml
-
-box "Host" #LightGreen
- participant "Driver" as host_driver
-end box
-
-box "Media Processing Pipelines Layer" #LightSkyBlue
- participant "Component Manager" as component_manager
- participant "Library Manager" as lib_manager
- participant "MPP Memory Manager" as mpp_memory_manager
-end box
-
-box "Zephyr RTOS" #LightBlue
- participant "Memory Management Driver" as memory_management_driver
-end box
-
-box "Hardware" #LightGrey
- participant "Memory" as hw_memory
-end box
-
-host_driver -> lib_manager: Load Library
- activate lib_manager
- lib_manager -> mpp_memory_manager: rmalloc(MEM_ZONE_RUNTIME, flags=NULL, MEM_CAPS_LOADABLE_LIBRARY, size)
- activate mpp_memory_manager
- return address to store library
- lib_manager --> host_driver
- deactivate lib_manager
-
-host_driver -> lib_manager: Transfer library over DMA\nto given address
-
-host_driver -> component_manager: Instantiate Component
- activate component_manager
-
- opt if Component is Loadable and it is first instance
- component_manager -> lib_manager: Load component
- activate lib_manager
-
- loop repeat for Component TEXT, RODATA
- lib_manager -> lib_manager: read Component virtual address and size from manifest
-
- lib_manager -> memory_management_driver: sys_mm_drv_map_region(virt*, phys=NULL, size, flags=NULL)
- activate memory_management_driver
- memory_management_driver -> memory_management_driver: allocate free phys pages
- opt power up memory banks for allocated phys pages
- memory_management_driver -> hw_memory: power up memory banks
- end
- memory_management_driver --> lib_manager
- deactivate memory_management_driver
-
- lib_manager -> lib_manager: read Component address offset from library manifest
- lib_manager -> lib_manager: mem_copy(virt*, library_store_addr + offset, size)
- lib_manager -> memory_management_driver: sys_mm_drv_update_region(virt*, size, flags= CODE / RODATA)
- activate memory_management_driver
- note right: update region flags to prevent overwrite
- return
-
- end
-
- opt if Component has BSS
- lib_manager -> memory_management_driver: sys_mm_drv_map_region(virt*, phys=NULL, bss_size, flags)
- activate memory_management_driver
- memory_management_driver -> memory_management_driver: allocate free phys pages
- opt power up memory banks for allocated phys pages
- memory_management_driver -> hw_memory: power up memory banks
- end
- memory_management_driver --> lib_manager
- deactivate memory_management_driver
- end
-
- lib_manager --> component_manager
- deactivate lib_manager
- end
-
- component_manager -> component_manager: Instantiate Component
- component_manager --> host_driver
-
-@enduml
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/heaps.pu b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/heaps.pu
deleted file mode 100644
index 582b21bd..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/heaps.pu
+++ /dev/null
@@ -1,31 +0,0 @@
-scale max 1024 width
-
-node "DSP Core #0 Memory Block" as core_0 {
- node "Application Heap (local)" as app_0 #lightgreen {
- component "Pipelines @Core #0" as ppl_0
- component "LL Modules & Tasks @Core #0" as ll_0
- component "DP Modules & Tasks @Core #0" as dp_0
- }
-
- node "Application Heap (shared)" as app_shared_0 #lightyellow {
- component "Shared buffers"
- }
-
- node "System Heap (shared)" as sys_0 #lightblue {
- component "Devices"
- }
-}
-
-ppl_0 -[hidden]down-> ll_0
-ll_0 -[hidden]down-> dp_0
-
-node "DSP Core #1 Memory Block" as core_1 {
- node "Application Heap (local)" as app_1 #lightgreen {
- component "Pipelines @Core #1" as ppl_1
- component "LL Modules & Tasks @Core #1" as ll_1
- component "DP Modules & Tasks @Core #1" as dp_1
- }
-}
-
-ppl_1 -[hidden]down-> ll_1
-ll_1 -[hidden]down-> dp_1
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/memory_allocation.pu b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/memory_allocation.pu
deleted file mode 100644
index 82d84bf0..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/memory_allocation.pu
+++ /dev/null
@@ -1,21 +0,0 @@
-@startuml
-
-box "SOF" #LightBlue
- participant "Component Management" as component_management
- participant "MPP Memory Manager" as mpp_memory_manager
-end box
-
-box "Zephyr" #LightGreen
- participant "Zephyr Memory Manager" as zephyr_memory_manager
-end box
-
-activate component_management
-component_management -> mpp_memory_manager: rmalloc(mem_zone, flags, caps, size)
- activate mpp_memory_manager
-
- mpp_memory_manager -> mpp_memory_manager: find memory heap that\nmatch zone and caps
- mpp_memory_manager -> zephyr_memory_manager: k_heap_alloc (heap, size)
- activate zephyr_memory_manager
- return
- mpp_memory_manager --> component_management
-@enduml
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/memory_allocation_from_memory_driver.pu b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/memory_allocation_from_memory_driver.pu
deleted file mode 100644
index a9d10fd7..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/memory_allocation_from_memory_driver.pu
+++ /dev/null
@@ -1,26 +0,0 @@
-@startuml
-
-box "SOF" #LightBlue
- participant "Library Manager" as library_manager
-end box
-
-box "Zephyr" #LightGreen
- participant "Memory Management Driver" as memory_management_driver
-end box
-
-box "Hardware" #LightGrey
- participant "Memory" as hw_memory
-end box
-
-activate library_manager
-
-library_manager -> memory_management_driver: sys_mm_drv_map_region\n(virt*, phys=NULL, size, flags)
- activate memory_management_driver
- memory_management_driver -> memory_management_driver: allocate memory phys pages
- opt if phys memory pages require power up
- memory_management_driver -> hw_memory: power up memory banks
- end
-
- return
-
-@enduml
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/memory_initialization.pu b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/memory_initialization.pu
deleted file mode 100644
index 666e68b1..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/memory_initialization.pu
+++ /dev/null
@@ -1,42 +0,0 @@
-@startuml
-
-box "SOF" #LightBlue
- participant "MPP Memory Manager" as mpp_memory_manager
-end box
-
-box "Zephyr" #LightGreen
- participant "Memory Manager" as zephyr_memory_manager
- participant "Memory Management Driver" as memory_management_driver
-end box
-
-box "Hardware" #LightGrey
- participant "Memory" as hw_memory
-end box
-
-
--> memory_management_driver: sys_mm_drv_mm_init
- activate memory_management_driver
- memory_management_driver -> memory_management_driver: read unused_main_mem_start_marker\nfrom linker
- note right: The marker is used to\n identify where base firmware\n ends in memory (text, data, bss)
-
- memory_management_driver -> memory_management_driver: sys_mm_drv_unmap_region(unused_main_mem_start, unused_size)
- activate memory_management_driver
- opt If architecture support granular memory banks power control
- memory_management_driver -> hw_memory: power down unused memory banks
- deactivate memory_management_driver
- end
-
- deactivate memory_management_driver
-
--> mpp_memory_manager: mpp_mem_init
- activate mpp_memory_manager
- mpp_memory_manager -> mpp_memory_manager: read memory zones\nbase address and size
- loop for each memory region create heap
- mpp_memory_manager -> zephyr_memory_manager: k_heap_init\n(heap, mem*, size)
- activate zephyr_memory_manager
- return
- end
-
- deactivate mpp_memory_manager
-
-@enduml
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/memory_management_layers.pu b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/memory_management_layers.pu
deleted file mode 100644
index a2218c96..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/images/memory_management_layers.pu
+++ /dev/null
@@ -1,60 +0,0 @@
-@startuml
-
-allowmixing
-
-scale max 1024 width
-
-component SOF {
-
- package "Zephyr" as ZEPHYR_RTOS {
- interface "Zephyr Memory Service interface" as ZMSI
- hide ZMSI methods
- hide ZMSI attributes
-
- package "Drivers" as DRIVERS {
- component "Memory Management Driver" as MEMORY_MGMT_DRIVER
- }
-
- package "Memory Manager" as ZEPHYR_MEM_MANAGER {
- component "Multi Heap" as MULTI_HEAP
- component "Memory Heaps" as MEM_HEAPS
- component "Memory Blocks Allocator" as MEM_BLOCK_ALLOCATOR
- component "Demand Paging" as DEMAND_PAGING
-
- MULTI_HEAP .[hidden]right. MEM_HEAPS
- MEM_HEAPS .[hidden]right. MEM_BLOCK_ALLOCATOR
- MEM_BLOCK_ALLOCATOR .[hidden]right. DEMAND_PAGING
- }
-
- component "Device Tree" as DEV_TREE
-
- ZMSI -[hidden]down- MEM_BLOCK_ALLOCATOR
- ZEPHYR_MEM_MANAGER -[hidden]down- DRIVERS
- DRIVERS -[hidden]right- DEV_TREE
- }
-
- package "Media Processing Pipelines layer" as MPP_LAYER {
- component "Pipeline Manager" as PIPELINE_MANAGER
- component "Communication" as COMMUNICATION
- component "Component Manager" as COMPONENT_MANAGER
- component "MPP Memory Manager" as MPP_MEM_MANAGER
-
- PIPELINE_MANAGER -[hidden]right- COMMUNICATION
- COMMUNICATION -[hidden]right- MPP_MEM_MANAGER
- MPP_MEM_MANAGER -[hidden]right- COMPONENT_MANAGER
-
- }
-
- package "Application layer" as APP_LAYER {
- component "Loadable Components" as LOADABLE_COMPONENTS
- component "Built-in Components" as BUILT_IN_COMPONENTS
-
- BUILT_IN_COMPONENTS -[hidden]right- LOADABLE_COMPONENTS
- }
-
- APP_LAYER -[hidden]down- MPP_LAYER
- MPP_LAYER -[hidden]down- ZEPHYR_RTOS
-
-}
-
-@enduml
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/index.rst b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/index.rst
deleted file mode 100644
index fbaddd30..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/index.rst
+++ /dev/null
@@ -1,52 +0,0 @@
-.. _memory_mgmt:
-
-Memory Management
-#################
-
-Memory Management role is to provide service API for dynamic memory mapping and
-allocation from available memory zones.
-
-Overview
-********
-
-The memory support functionality is delivered at two levels:
-
- - Zephyr Memory Management Service, which provides memory drivers, demand
- paging, allocators, and heap management,
-
- - MPP Memory Management - SOF extension, which provides heaps for virtual
- memory mapped to physical memory on demand, and declaration of SOF specific
- heaps instantiated for various memory zones,
-
-.. uml:: images/memory_management_layers.pu
- :caption: Example of Memory Management layers and interfaces
-
-Memory Hierarchy & Dynamic Paging
-*********************************
-
-SOF manages heterogeneous memory spaces across DSP and host domains:
-
-* **Tightly Coupled Memories (IRAM/DRAM)**: Low-latency memory dedicated to performance-critical DSP interrupt service routines and real-time audio threads.
-* **High-Power / Low-Power SRAM Pools**: Dynamically power-gated SRAM banks utilized to minimize power draw during active playback and low-power idle.
-* **Isolated Memory Regions (IMR) & Dynamic Paging**: For platforms with constrained on-chip SRAM, SOF dynamically pages code and data between host DRAM (IMR) and DSP SRAM, enabling large features (like complex neural networks or large codec libraries) to execute without requiring oversized on-chip SRAM.
-
-Read More
-*********
-
-.. toctree::
- :maxdepth: 1
-
- memory_zones
- mpp_memory_management
- heap_sharing
- memory_management_driver
- memory_management_flows
-
-External Links
-==============
-
-- `Zephyr Memory Management Service `__
-- `Memory Blocks Allocator `__
-- `Memory Management driver `__
-- `Heaps Management `__
-- `Demand Paging `__
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/memory_management_driver.rst b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/memory_management_driver.rst
deleted file mode 100644
index 097c450f..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/memory_management_driver.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-Memory Management Driver
-########################
-
-The Memory Management Driver (MMD) is part of the Zephyr distributed drivers.
-Each SoC may require unique Memory Management driver implementation. The MMD
-shall implement common MMD interface that is exposed to kernel services. This
-allows for explicit allocation and mapping of individual memory hardware pages
-within the physical environment.
-
-All operations within Memory Management Driver are explicit. Hardware page IDs
-represent real physical blocks of hardware memory.
-
-The MMD is responsible for identification what part of the SoC memory is used by
-the base firmware (code, data, bss) and unmap the unused blocks. The unused
-memory will be available for dynamic allocation. Base firmware code, read only
-data and BSS are mapped in the TLB automatically with corresponding flags (CODE,
-RODATA) to prevent incidental modification.
-
-Memory Management Driver can maintain memory power at a granular level if the
-architecture support it. It has possibility to power up selected memory banks on
-map requests and power down on unmap, which is a recommended flow.
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/memory_management_flows.rst b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/memory_management_flows.rst
deleted file mode 100644
index aa90ebb2..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/memory_management_flows.rst
+++ /dev/null
@@ -1,41 +0,0 @@
-Flows
-#####
-
-Memory initialization
-*********************
-
-Main goal of Memory initialization is to unmap unused memory after firmware load
-and create heaps for supported memory zones.
-
-.. uml:: images/memory_initialization.pu
- :caption: Memory initialization flow
-
-Memory allocation
-*****************
-
-The common memory allocation is expected to use one of the available memory
-zones via Zephyr Heap that was created during initialization.
-
-.. uml:: images/memory_allocation.pu
- :caption: Memory allocation example flow
-
-Memory allocation directly using Memory Management Driver
-*********************************************************
-
-In specific use cases (e.g. Dynamic Component Load) it may be required to
-allocate memory directly using Memory Management Driver to control what virtual
-address will be mapped to physical memory.
-
-.. uml:: images/memory_allocation_from_memory_driver.pu
- :caption: Example memory allocation using Memory Management Driver
-
-Dynamic Component Load
-**********************
-
-The loadable components are stored in Loadable Library memory zone and can be
-loaded on instantiate request to System memory. The components load to System
-memory is optional and integrator can indicate if the components can be executed
-directly from the Loadable Library memory zone.
-
-.. uml:: images/dynamic_module_load.pu
- :caption: Dynamic component load and instantiation flow
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/memory_zones.rst b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/memory_zones.rst
deleted file mode 100644
index 5be17be8..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/memory_zones.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-Memory Zones
-############
-
-Depending on the memory use case a different memory zone can be used for
-allocation. Application and MPP layer components are using memory zones and
-capabilities to identify a target memory. The memory zones mapping on physical
-addresses is SoC specific. If the SoC support multiple memory types with
-different characteristics, then it is up to SoC integrator to decide which
-memory will be most suitable for zone mapping. For example, if SoC has access to
-slow but large capacity memory then it can map it for Loadable Library memory
-zone.
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/mpp_memory_management.rst b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/mpp_memory_management.rst
deleted file mode 100644
index 2f079186..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/memory_management/mpp_memory_management.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-MPP Memory Management
-#####################
-
-MPP Memory Management (MPP MM) is a SOF extension running on top of Zephyr
-Memory Manager. The reason to create MPP MM was to add support for memory zones,
-which are not natively supported by Zephyr. Zephyr by default initialize single
-System Heap.
-
-The MPP MM roles:
-
- - initialization of Memory Heaps for supported memory zones,
- - provide allocator API for memory allocation from different memory zones,
-
-Memory Heaps initialization is done based on SoC Memory Map that identify start
-and end addresses of memory zones.
-
-.. note::
- Memory zones are expected to be defined as memory sections in a SoC linker script.
-
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/power_management.rst b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/power_management.rst
deleted file mode 100644
index c394f52c..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/power_management.rst
+++ /dev/null
@@ -1,158 +0,0 @@
-.. _power_mgmt:
-
-Power Management
-################
-
-The Power Manager is responsible for system and device power management. The
-power management behavior can be customized by power policy configuration and
-direct power API requests which allows you to adjust system power savings to the
-current firmware activity.
-
-.. uml:: images/power/power_components.pu
- :caption: Participants of the Firmware power management.
-
-`Zephyr Power Management
-documentation `__
-
-DSP Cores
-*********
-
-Each DSP core can be separately powered up and down.
-
-The assumption is that DSP #0 is a primary core and is responsible for powering
-up all secondary cores. The primary core powers up the secondary cores on Set Dx
-IPC request.
-
-The secondary core shall be powered up prior to any task allocated to it by the SW
-driver.
-
-Power Transitions
-*****************
-
-There are three DSP core power states:
-
-.. list-table::
- :widths: 5 10 20
- :header-rows: 1
-
- * - DSP Power State
- - Zephyr Power State
- - Notes
- * - D0
- - PM_STATE_ACTIVE
- - built-in state, no extra mapping required
- * - D0i3
- - PM_STATE_RUNTIME_IDLE
- - custom mapping in the Device Tree
- *d0i3: idle { power-state-name = "runtime-idle" }*
- * - D3
- - PM_STATE_SOFT_OFF
- - custom mapping in the Device Tree
- *d3: off { power-state-name = "soft-off" }*
-
-A major consumer of power related to the main part of the DSP subsystem
-is a source of the clock that is wired to the DSP core and the DSP core itself.
-Transitions to lower power states focus on this part. Another power consumer,
-a bit less significant, is the L2 SRAM memory embedded in the DSP subsystem.
-
-The clock source and clock gating is managed by the Power Manager according to
-Power Policy configuration settings.
-
-Memory power is controlled by the Memory Management Driver that is responsible
-for memory setup on power state transitions and memory banks power gating on
-map/unmap requests (if it is supported by the SoC).
-
-Other power-related settings are clock gating and power gating of I/Os (I2C,
-I3C, GPIO, SPI, UART, DMIC, etc.) and external DSP accelerators (if supported by
-the hardware).
-
-The low power state transition can be triggered either by Zephyr (on CPU idle)
-or on the Host IPC request through the Zephyr force power state set request. The
-entrance to D0i3 power state can be dynamically locked on SetD0ix IPC request
-that configures the Zephyr Power Policy to prevent a selected power state transition.
-
-More details are in the `Zephyr Power Management
-documentation `__
-
-.. uml:: images/power/dsp_fw_power_states.pu
- :caption: DSP and FW Power States
-
-.. uml:: images/power/dx_state_transitions.pu
- :caption: D3, D0 and D0ix state transitions
-
-Power Up of Secondary Core (D3 to D0 transition)
-================================================
-
-The below diagram shows secondary core boot flow:
-
-.. uml:: images/power/flow_secondary_core_boot.pu
- :caption: DSP Secondary Core Boot flow
-
-Power down of DSP core (D0 to D3 transition)
-============================================
-
-The below diagram shows a primary core power down flow:
-
-.. uml:: images/power/flow_primary_core_power_down.pu
- :caption: DSP Primary Core Power Down flow
-
-Power down of Secondary Core (D0 to D3 transition)
-==================================================
-
-The below diagram shows a secondary core power down flow:
-
-.. uml:: images/power/flow_secondary_core_power_down.pu
- :caption: DSP Secondary Core Power Down flow
-
-Enable D0ix (D0 to D0ix)
-========================
-
-D0ix is enabled on explicit `SET_D0ix` IPC message with prevent_power_gating bit
-set to 0.
-
-.. uml:: images/power/flow_enable_d0i3.pu
- :caption: Enable D0i3 flow
-
-Disable D0ix (D0ix to D0)
-=========================
-
-D0ix is disabled on explicit `SET_D0ix` IPC message with prevent_power_gating
-bit set to 1.
-
-.. uml:: images/power/flow_disable_d0i3.pu
- :caption: Disable D0i3 flow
-
-DSP idle state
-==============
-
-.. uml:: images/power/flow_dsp_idle.pu
- :caption: DSP idle state flow
-
-DSP Cores Clock Gating
-======================
-
-DSP clocks, similar to DSP cores, can be separately gated as well. Clock gating
-shall be enabled by default for all DSP cores unless there is request to prevent
-it.
-
-.. TODO: Create diagram with DSP power state transitions when either DSP clock
- is gate or DSP power is gate.
-
-**NOTE:** Power and clock gating is controlled via `Set D0ix` IPC message.
-
-I/O Power and Clock Gating Management
-*************************************
-
-Zephyr is responsible for I/O devices power and clock management.
-
-The I/O device power is controlled based on usage count. More details can be
-found in `Zephyr Device Runtime Power Management
-documentation `__
-
-The I/O clock gating is configurable in driver power policy. Each driver shall
-request the desired clock and clock power gating if it is necessary for I/O,
-accelerator, etc. to work correctly.
-
-For instance, audio I/Os such as I2S associated with audio domain require a high
-accuracy XTAL clock and may request it. This clock shall be used for as long as
-audio I/Os are active.
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/zephyr_kernel_overview.rst b/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/zephyr_kernel_overview.rst
deleted file mode 100644
index e8e9ada2..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/rtos_layer/zephyr_kernel_overview.rst
+++ /dev/null
@@ -1,372 +0,0 @@
-.. _kernel_overview:
-
-Zephyr based kernel
-###################
-
-Zephyr has been introduced as an IP agnostic solution that replaced existing SOF
-audio specific kernel. The Zephyr base kernel has been complemented with SOF Low
-Level Drivers, SoC HAL and kernel extensions. The new solution continues
-scalable kernel concept and it serves as a generic part of infrastructure that
-can be statically and dynamically customized based on usage, compute, and memory
-constrains, HW configuration etc.
-
-As a result of the kernel customization, a firmware infrastructure is produced.
-This firmware infrastructure can run on a given processor type and it is tuned
-for specified usage.
-
-For more Zephyr kernel details, see `Zephyr Introduction
-documentation `__
-
-The Zephyr based kernel consists of the following components:
-
-- Hardware integration layer: XTHAL,
-- Low Level Drivers,
-
- - DMIC,
- - I2S,
- - SNDW,
- - GPIO,
- - I2C,
- - I3C,
- - timers,
- - GPDMA,
- - IDC,
- - IPC,
- - watchdog,
- - etc.
-
-- SoC HAL,
-
- - OEM SoC specific code,
-
-- Services: shared resource services, communication services, memory manager,
- power manager, interrupt manager, system service, etc.
-- Kernel extensions:
-
- - AVS schedulers,
- - Firmware Manager,
- - Media Processing Pipeline Components,
-
-The Zephyr base kernel expectations:
-
-- it can scale down to meet all KPIs via static and dynamic scaling options,
-- Zephyr itself is IP agnostic and shared across other SW and FW projects,
-- it is available and maintain under open source license,
-
-.. uml:: images/zephyr_kernel_diagram.pu
- :caption: Zephyr Kernel diagram
-
-Scaling Options
-'''''''''''''''
-
-Zephyr kernel offers scaling options to adjust to selected HW configuration,
-scale down to meet aggressive KPIs on a given platform, scale up to meet
-functional requirements.
-
-The scaling is achieved in two ways:
-
-- static, kernel components can be selectively enabled in the build process
-
- - Drivers selected depending on SoC Configuration
- - Services and execution frameworks chosen in Zephyr
-
-- dynamic, not used parts can be unloaded and saved in "backup storage" memory,
- that typically has large capacity and high access latency. They will be
- loaded again once a specific event will happen
-
- - It is only applicable to SoCs that support it.
- - It is achieved via one of the following mechanisms:
-
- - Firmware Paging (if present) - Only currently executing modules are in
- SRAM.
- - Split Firmware into modules - Modules are loaded from "backup storage"
- or unloaded on explicit request. No runtime dynamism.
-
-Handling Project Configuration
-''''''''''''''''''''''''''''''
-
-Zephyr is prepared to be configured via device tree that describe given SoC
-board audio hardware configuration.
-
-A SoC board device tree allows configuring:
-
-* HW configuration
-
- * number of HP DSP cores,
- * types of memories available per cores,
- * supported clocks,
- * number of I/Os,
- * number of IPC and IDC interfaces for DSP cores,
- * etc.
-
- * DSP memory space,
- * IPC mailbox address,
- * etc.
-
-Low Level Drivers
-'''''''''''''''''
-
-SOF is capable to support hardware with several audio I/Os, sensor I/Os, DSP
-accelerators and DMAs which count can be customized per architcture.
-
-HW resources with low level drivers:
-
-* Audio I/Os: I2S, DMIC, SNDW, HD/A,
-* Sensor I/Os: I2C, I3C, GPIO, UART, SPI, ADC, PWM,
-* Common resources: HP GPDMA, IPC, IDC, Timers, SHA-384, Watchdog
-
-**NOTE:** Not all I/Os are supported in each SoC board.
-
-.. TODO: add link to supported audio architectures
-
-Zephyr based firmware provides low level drivers for all these resources. A
-specific driver can be enabled during build process.
-
-SoC HAL
-'''''''
-
-The SoC HAL include implementation and configuration details specific for
-selected SoC architecture. The SoC HAL abstraction allow to seamlesly switch
-between target SoC configuration builds.
-
-More details can be found in Zephyr documentation:
-
-* `Zephyr Board Porting Guide `__
-* `Zephyr Architecture Porting Guide `__
-
-Services
-''''''''
-
-.. uml:: images/kernel_services.pu
- :caption: Example of kernel services
-
-The base Zephyr services provide generic system management functionality for
-memory, interrupts, autonomous power control (clock and power gating, clock
-management).
-
-The SOF specific functionality is exposed in a form of an extended kernel
-services. The extended services utilize Zephyr base services infrastructure and
-low level drivers to supply user space interface for the firmware application
-layer components. The user space separation from hardware and low level drivers
-significantly increase the firmware security and stability.
-
-Firmware Management
--------------------
-
-The firmware manager is a core service that is responsible for:
-
-- reading HW capabilities (number of cores, memory available, etc.),
-- firmware initialization,
-- instantiation and initialization of Low Level drivers for the existing HW
- components,
-
- - memory type drivers initialization with size read form capability
- registers
- - audio drivers for supported interfaces
-
-- instantiate and initialize Extended Kernel Services
-
- - component manager
- - pipeline manager
- - IPC/IDC communication service
- - async messaging service
- - debug service
-
-.. TODO: add other components that require initialization by the firmware manager
-
-Interrupt Management
---------------------
-
-The interrupt handler service allows to:
-
-- enable and disable an interrupt for DSP core,
-- register a callback that will be called once a specified interrupt occur,
-
-For more details, see `Zephyr Interrupts
-documentation `__
-
-Memory Management
------------------
-
-The Memory Manager provides a service to other FW components to allocate a block
-out of available memory pools, it provides high level API, scans for unused
-memory areas, handles physical memory defragmentation, prefetch and cache
-policies. Most of the memory is expected to be paged.
-
-All allocation requests refer to virtual memory address space, which shall be
-continuous. This also applies to DMA buffer allocations, where continuous memory
-is guaranteed by either continuous physical memory or VA/PA translation.
-
-The map of available memory resources is passed to the Memory Manager during
-initialization of Memory Manager via firmware infrastructure.
-
-For more details, see `Zephyr Memory Management
-documentation `__.
-
-Power Management
-----------------
-
-The power management behavior highly depends on platform that firmware runs on,
-and it can be configured during build time. There are platforms that only allow
-clock gating and power gating is not applicable.
-
-The power management interface provides the following functionality:
-
-- allow and prevent power gating,
-- allow and prevent clock gating,
-- allow and prevent slower clock,
-- allow and prevent XTAL shutdown,
-
-In all cases, the implementation relies on atomic counter which is incremented
-every time when prevent function is called and decremented when allow function
-is called.
-
-.. TODO: Add link to SOF Power Management detailed description with flows
-
-`Zephyr Power Management documentation
-`__.
-
-IPC and IDC Service
--------------------
-
-The IPC and IDC Service provides communication channel over IPC or IDC. IPCs are
-used for the external communication with Host, other processors within SoC or
-other subsystems within PCH. IDCs are used for the internal communication
-between processors within SOF subsystem.
-
-The introduction of SOF with Zephyr is followed with new IPC4 interface and
-message formats that replaced IPC3.
-
-The following types of sequences are supported:
-
-- request-response initiated by Host,
-
- - it is synchronous sequence,
- - long-running operations shall queue request and send response immediately.
- The actual completion information should be sent via one-way asynchronous
- notification,
-
-- one-way asynchronous notification,
-
-.. TODO: Add link to Communication section (when ready)
-
-Debugging
----------
-
-The Zephyr based kernel provides a few services that helps with debugging FW.
-
-Logging
-~~~~~~~
-
-The Logger Service provides a lightweight mechanism to push log entries to all
-firmware modules that are based on Zephyr logging infrastructure.
-
-It is a very useful mechanism to do a first level of debugging.
-
-.. TODO: Add link to Logger Service section (when ready)
-.. TODO: Add link to SOF Enable Logs interface
-.. TODO: Add link to SOF status and error codes registers
-
-Zephyr related documentation:
-
-- `Zephyr
- Logging `__
-
-Probes
-~~~~~~
-
-SOF supports injection and extraction probes. The probes are mainly used to
-extract audio data from queues between components.
-
-The other probe use cases include:
-
-- injection of audio data to a component input queue - useful during testing
- and debugging,
-- injection of data to internal probes,
-- extraction of data from internal probes i.e. internal component states,
- intermediate data, debug information,
-- logging - probes can be used as transport for firmware logs,
-
-.. TODO: Add link to Probe configuration interface (when ready)
-
-Performance Measurements
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-The firmware infrastructures support performance measurements to collect
-information about DSP cycles or amount of data moved via interfaces.
-
-.. TODO: Add link to Performance Measurements State firmware interface
-.. TODO: Add link to firmware Global Performance Data description
-
-
-Telemetry
-~~~~~~~~~
-
-Firmware infrastructure supports collection of telemetry events which then can
-be read by the Host Software. The modules running in FW infrastructure can push
-telemetry events via System Services.
-
-If the telemetry collection is started, the telemetry events will be written to
-a common circular buffer.
-
-If the telemetry collection is stopped/disabled, the telemetry events will be
-dropped at telemetry service level and they will not be written to the telemetry
-circular buffer. During transition from started to stopped state, the telemetry
-events that are already in the circular buffer will be dropped.
-
-.. TODO: Add link to SOF Telemetry interface documentation
-
-.. _schedulers_zephyr:
-
-Schedulers
-----------
-
-The scheduling method depends on compute and memory available for firmware
-running on processor as well as type of workloads executed on given domain.
-
-There are following types of schedulers supported in SOF
-
-- AVS scheduling,
-
-.. TODO: Add link to Scheduling detailed section
-
-Async Messaging Service
------------------------
-
-Asynchronous Messaging Service (AMS) is mechanism to exchange asynchronous
-events between components running in the same firmware infrastructure or running
-on the another processor (e.g. between HiFi and Fusion cores).
-
-The Async Messages can be also injected and extracted via Host Async Message
-Gateway module by Host SW.
-
-.. TODO: Add link to Asynchronous Messaging detailed section
-
-System Services
----------------
-
-The FW components do not know location of driver and service functions in base
-firmware library, so they need to access base firmware services via System
-Services.
-
-In SOF with Zephyr the `Zephyr interfaces for
-drivers `__
-were adopted. All newly developed drivers must be compliant to this standard and
-the legacy ones must be ported to it.
-
-In Zephyr based firmware, a driver instance is obtained via
-``device_get_binding`` function call with a name of a driver instance. There is
-no explicit driver initialization call as a driver instance is initialized with
-the first call.
-
-A driver implementation must be ready for using the same hardware instance from
-many modules and from many cores (it must be thread-safe implementation). There
-can be more than one device instance if there is more than 1 instance of a
-hardware (i.e. 2 I2C owner controllers).
-
-The example functionalities that should be exposed via system services:
-
-- IPC and IDC,
-- Logger Service,
-- RTOS scheduler functionalities, like yield,
-- Async Messaging Service,
diff --git a/developer_guides/subsystem_architecture/firmware/sof-zephyr/zephyr_api_integration.rst b/developer_guides/subsystem_architecture/firmware/sof-zephyr/zephyr_api_integration.rst
deleted file mode 100644
index fe351051..00000000
--- a/developer_guides/subsystem_architecture/firmware/sof-zephyr/zephyr_api_integration.rst
+++ /dev/null
@@ -1,86 +0,0 @@
-.. _zephyr-api-integration:
-
-Zephyr API Integration
-######################
-
-Most of the interfaces between the application (audio) layer and the kernel are
-aggregated inside the part of the legacy SOF architecture called "lib". The
-interfaces are exposed by the *lib*, declared in header files in
-*src/include/sof/lib* directory. Implementation is located in the *src/lib*
-except for platform and architecture specific functions that are delegated to
-*platform* and *arch* parts respectively.
-
-.. uml:: images/sof_lib.pu
- :caption: Legacy SOF Lib
-
-Zephyr replaces *lib* and other architecture and platform specific code,
-everything below the *app* & *mpp* layers.
-
-In order to unify the access to the lower parts from the *app* and *mpp*, the
-library header files provides now a definition of unified interface but some
-changes are introduced to the original set of APIs and/or the implementation.
-
-Let's have a look at possible cases.
-
-**Case #1: New Zephyr API replaces 1:1 legacy SOF lib API**
-
-If there is a Zephyr version of a SOF legacy API which provides exactly the same
-functionality as the original function but has a different name, the Zephyr
-function name is used as a replacement in the SOF *app* and *mpp* code. It
-causes direct linking and call into the Zephyr code optimizing FW size and
-performance when SOF is built with Zephyr. Building with legacy SOF *lib*
-requires an implementation or just a simple adapter for the new Zephyr API. It
-may or may not slightly increase the size and decrease the performance of the
-legacy SOF.
-
-.. code-block:: c
-
- // src/include/sof/lib.cpu.h
- #ifdef __ZEPHYR__
- #include
- #else
- // was: static inline int cpu_is_core_enabled(int id)
- static inline bool arch_cpu_active(int id)
- {
- arch_cpu_is_core_enabled(id);
- }
- #endif /* __ZEPHYR__ */
-
-**Case #2: Legacy SOF lib API requires multi-step implementation for Zephyr
-configuration**
-
-There may be a case when SOF legacy API is implemented by a single function
-provided by the *arch* or another package and there is no 1:1 API available in
-Zephyr to replace that. In this case, the API is implemented in the *lib-zephyr*
-part based on the native Zephyr APIs.
-
-.. code-block:: c
-
- // src/include/sof/lib/cpu.h
- #ifdef __ZEPHYR__
- void cpu_disable_core(int id);
- #else
- static inline void cpu_disable_core(int id)
- {
- arch_cpu_disable_core(id);
- }
- #endif /* __ZEPHYR__ */
-
- // src/lib-zephyr/cpu.c
- void cpu_disable_core(int id)
- {
- // ... calls to Zephyr APIs
- }
-
-**Case #3: Legacy SOF lib API is implemented completely inside the lib and does
-not have any replacement in Zephyr**
-
-The agent code might be an example of the library functions that are common and
-must be compiled and linked together with either legacy SOF *lib* or
-*lib-zephyr*.
-
-The dependencies between the SOF *lib*, *lib-zephyr*, and *zephyr* are
-illustrated in the below figure.
-
-.. uml:: images/sof_lib_zephyr.pu
- :caption: SOF Lib + Zephyr
diff --git a/developer_guides/subsystem_architecture/host/index.rst b/developer_guides/subsystem_architecture/host/index.rst
deleted file mode 100644
index 170d0654..00000000
--- a/developer_guides/subsystem_architecture/host/index.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-.. _architecture-host:
-
-Host Architecture
-#################
-
-For the high-level system and software stack architecture, see :ref:`architectures`.
-
-.. toctree::
- :maxdepth: 1
-
- linux_driver/architecture/sof_driver_arch.rst
diff --git a/developer_guides/subsystem_architecture/host/linux_driver/architecture/images/sof-driver-arch-1.png b/developer_guides/subsystem_architecture/host/linux_driver/architecture/images/sof-driver-arch-1.png
deleted file mode 100644
index 4c5ebe9c..00000000
Binary files a/developer_guides/subsystem_architecture/host/linux_driver/architecture/images/sof-driver-arch-1.png and /dev/null differ
diff --git a/developer_guides/subsystem_architecture/host/linux_driver/architecture/images/sof-driver-arch-2.png b/developer_guides/subsystem_architecture/host/linux_driver/architecture/images/sof-driver-arch-2.png
deleted file mode 100644
index bf2246ca..00000000
Binary files a/developer_guides/subsystem_architecture/host/linux_driver/architecture/images/sof-driver-arch-2.png and /dev/null differ
diff --git a/developer_guides/subsystem_architecture/host/linux_driver/architecture/sof_driver_arch.rst b/developer_guides/subsystem_architecture/host/linux_driver/architecture/sof_driver_arch.rst
deleted file mode 100644
index 61f774f9..00000000
--- a/developer_guides/subsystem_architecture/host/linux_driver/architecture/sof_driver_arch.rst
+++ /dev/null
@@ -1,364 +0,0 @@
-.. _sof_driver_arch:
-
-SOF Linux Driver Architecture
-#############################
-
-|SOF| can either operate as a standalone firmware or alongside a host OS
-driver for configuration and control. The |SOF| OS driver is responsible for
-loading firmware, loading configuration and managing firmware use cases.
-Currently |SOF| has a driver for the Linux OS.
-
-The |SOF| driver code is dual licensed GPLv2 and BSD and this means the user
-can choose which licence they want to use (either BSD or GPLv2). The driver
-stack is designed with maximum resuse so that large portions of it can be
-taken and integrated into other OSs or RTOSs.
-
-.. contents::
- :local:
- :depth: 1
-
-Overview
-********
-
-Audio Driver Architecture
-=========================
-
-The Sound Open Firmware (SOF)-based audio driver stack consists of an architecture-independent SOF driver core, an SOF DSP driver for Intel High Definition Audio (HD-Audio) platforms, an ALSA System-on-Chip (ASoC)-compliant audio codec driver, and a hardware-specific machine driver.
-
-.. image:: images/sof-driver-arch-1.png
-
-Sound Open Firmware
-===================
-
-Sound Open Firmware (SOF) is an open source audio Digital Signal Processing (DSP) firmware infrastructure and SDK. SOF provides infrastructure, real-time control pieces, and audio drivers. A generic SOF subsystem is implemented in Linux as a subsystem of ALSA ASoC.
-
-.. image:: images/sof-driver-arch-2.png
-
-ALSA and ASoC
-=============
-
-The Advanced Linux Sound Architecture `(ALSA) `_ provides audio and MIDI functionality to the Linux operating system. The ALSA System-on-Chip `(ASoC) `_ is a subsystem of ALSA. ASoC provides a modular architecture to share audio codec drivers across different SoC implementations, unify the controls provided to applications, and provide a common infrastructure to manage SoC audio component power and clocks.
-
-Related ALSA Drivers
-====================
-
-The upstream Linux kernel has a few drivers that are related to the SOF-based audio driver stack described in this document. These drivers include the Intel AZX HD Audio driver (``linux/sound/pci/hda``) and the Intel SST Audio driver (``linux/sound/soc/intel/``).
-
-The AZX driver is intended to be used with Intel HD Audio PCI hardware when the Audio DSP is disabled (e.g. BIOS configuration). The AZX driver should be used instead of SOF when the DSP is not used.
-
-The SST Audio implements an ASoC-compliant driver for Intel HD Audio hardware, utilizing the Intel SST firmware. SST is primarily used with older generations of Intel processors for which SOF firmware support is not available. The SST driver and firmware should be used when the DSP is enabled and SOF firmware is not available for the platform.
-
-Driver Probe
-************
-
-The probe callback in the SOF PCI/APCI driver is responsible for allocating the platform data that is used to store the machine information including the PCI device ID, name, and the ACPI mach description. For Intel platforms, it uses the ACPI matching tables to determine the correct machine driver to load. The probe callback also sets up the SOF platform driver, initializes the Inter-Process Communication (IPC) to communicate with the DSP, and registers the SOF PCM component driver and the machine driver. Upon completion, it enables the runtime power management for the platform, if supported.
-
-SOF Platform Driver
-*******************
-
-The SOF platform driver is a platform-specific driver that abstracts the low-level platform DSP hardware into a common generic API that is used by the upper layers. This includes code that will initialize the DSP and boot the firmware. The platform driver is responsible for setting up platform-specific ops for the device. The mandatory and optional platform ops are defined in ``struct snd_sof_dsp_ops``. It also describes the chip info the DUT by populating the ``struct sof_intel_dsp_desc`` fields necessary for DSP initialization.
-
-Platform Driver Probe
-=====================
-
-The SOF platform driver detects the presence of a DSP in the platform by checking the PCI ``class/sub-class/prog-id`` information. It sets up the platform devices (ex: HDA device, dmic device), the DSP Base Address Registers, and initializes the streams and the interrupt vectors. Finally, it initializes the DSP capabilities and enables the DSP processing pipe capability interrupts.
-
-Firmware Loading and Booting
-============================
-
-On SKL+ platforms, firmware loading is performed using a dedicated DMA for code loading which is responsible for copying the FW into DSP memory. The DSP cores are powered up in a predetermined sequence and the host driver waits for the appropriate ROM init status to be written into the ROM status register to indicate initialization. This step is attempted a few times until the ROM status registers returns the successful ROM init status. Upon successful completion, the host driver triggers the code loader DMA to start copying the FW into DSP memory and boot it while waiting for the notification from the DSP. When the FW has successfully booted, the DSP sends the firmware-ready IPC message to notify the host. Further details are provided in **IPC Processing**, below.
-
-IPC Processing
-**************
-
-Introduction
-============
-
-The SOF Audio DSP firmware uses IPC to communicate with the host. IPC is also used by the preinstalled DSP ROM, so it is used at least to load and start an SOF image. During that phase, the host communicates with the DSP ROM. Once ROM initialization is complete and the SOF FW has booted, the consequent IPC is performed with the firmware.
-
-IPC is bi-directional; messages can be initiated by the host and then acknowledged by the DSP. Similarly, they can be initiated by the DSP and acknowledged by the host. To indicate the direction of the communication, terms **initiator** and **target** are used.
-
-After SOF completes its boot process, it informs the host that it is ready for operation. Prior to receiving this message from the DSP, the mailbox offsets are not configured. Therefore, the message is read out from the DSP-to-host mailbox configured in the PCI mailbox BAR. Once read out, the message is parsed to determine the exact layout of all the IPC mailbox buffers. After that, the host sends further IPC messages to perform DSP configuration and initialization.
-
-At run-time, IPC is used for streaming control and buffer management, as well as for firmware traces.
-
-IPC Hardware Implementation
-===========================
-
-On most systems, the DSP and the host CPUs can access the same memory, such as where the DSP is implemented as a PCI device on the host system. On other systems, the DSP is implemented as a stand-alone device, connected to the host by a serial bus such as SPI.
-
-Intel IPC
-=========
-
-At the hardware level, IPC support is implemented using a set of doorbell
-registers and mailbox buffers. Details of the implementation can vary between
-architectures. In general, sending an IPC message and replying to it involves
-the following steps:
-
-#. If the IPC message is supposed to contain a payload, which is almost always the case with SOF, the initiator first copies the payload to the respective mailbox buffer.
-#. The initiator sets a BUSY bit in an initiator-side IPC register, which then sets a BUSY bit on the target side.
-#. If configured, this can also generate an interrupt on the target side.
-#. When the target completes processing the received message, it clears the BUSY bit on its own side. This is then reflected to the initiator side, where as a result the BUSY bit is cleared and the DONE bit is set.
-#. Setting the DONE bit can also generate an interrupt on the initiator side.
-#. The initiator processes the reply from the target and clears the DONE bit.
-
-SOF on both the host and the DSP serializes the sending of their IPC messages. Therefore, a new message cannot be initiated before the target has finished processing the previous one. However, both the host and the DSP can initiate their messages simultaneously. This cannot lead to a race because both the host and the DSP have separate target and initiator IPC registers.
-
-.. note:: The IPCCTL register is common for target and initiator operations
- and is used to mask and unmask BUSY and DONE interrupts. Therefore, in
- theory, a race is possible where one context would try to mask or unmask
- one of the bits (e.g. BUSY) while a different context, running on a
- different core, would try to mask or unmask the other bit (DONE). This
- can lead to inconsistent register contents. To avoid this, the software
- has to make sure to lock the read-modify-write operations on the IPCCTL.
-
-SPI
-===
-
-IPC messages have the same structure as in the PCI case, but they are sent and received over an SPI bus. The SPI transfer is always initiated by the SPI provider, which is the host. Therefore, the DSP cannot send asynchronous messages to the host using only the SPI bus. To overcome this limitation, an additional GPIO line is used by the DSP to trigger an interrupt on the host to request it to read out an IPC message. Support for such devices is still experimental in SOF. Details will be added later.
-
-iMX IPC
-=======
-
-Information on this subject matter is forthcoming.
-
-IPC Messages
-============
-
-IPC messages are divided into several groups: global reply, topology, power management, component, stream, DAI, trace, and a separate "firmware ready" message. Multiple messages can also be grouped into a message that belong to a compound group. For all IPC message definitions, see ``include/sound/sof/header.h``. Most messages are sent by the host to the DSP; only the following messages are sent by the DSP to the host:
-
-- firmware ready: sent only once during initialization
-- trace: optional, contains firmware trace data
-- position update: only used if position data cannot be transferred in a memory window or if forced by the kernel configuration
-
-PCM Driver
-**********
-
-The SOF PCM driver creates ALSA PCMs, DAPM, and kcontrols based on the
-:ref:`topology` data loaded at runtime. The PCM driver also allocates
-buffers for DMA and registers with runtime PM. It contains architecture-
-and platform-generic code. The PCM driver implements the low-level
-functions defined by the ALSA PCM middle layer in ``struct
-snd_pcm_ops``. These functions implement the platform-generic parts and
-invoke platform-specific ops to access the hardware.
-
-When the machine driver is probed and the sound card is registered, the SOF PCM component driver gets probed when the dai links in the sound card are bound to the card. The SOF PCM component probe callback loads the topology file for the DUT. The SOF topology defines the audio processing pipelines, FE DAIs, and the BE DAI configuration for the BE dai links defined in the machine driver. Therefore, it is important to make sure that the DAI link IDs for the BE DAIs are identical in the topology and the machine driver. A mismatch in the DAI links ID will cause the sound card registration to fail.
-
-Topology Loading
-================
-
-The SOF PCM component probe invokes ``snd_sof_load_topology()`` to load the topology binary and triggers the parsing and loading of all the defined components. The topology operations pertinent to the loading/unloading of the various topology components are defined in ``struct snd_soc_tplg_ops`` in ``topology.c``. The topology parser invokes these callbacks to perform driver-specific loading operations for each component/widget. The load callback for each type of component in topology performs two main functions:
-
-#. Parse the component specific tokens associated with the component and populate the IPC structure.
-#. Send the IPC to the DSP to set up, configure, and link the components.
-
-The unload callback is responsible for freeing the memory associated with the component and remove it from the list of components. Currently, the SOF driver supports loading only one topology file during boot up. This might be extended in the future to support multiple topologies that can be dynamically loaded/unloaded at runtime.
-
-The topology file also defines the IO callbacks for the kcontrols supported by the SOF topology, namely mixer, enum, and byte controls.
-
-Kcontrol IO
------------
-
-The kcontrol IO callbacks are all defined in ``control.c``. The three types of kcontrol supported by SOF are:
-
-#. Volume: The volume kcontrol put callback is responsible for translating the user setting for volume level to the appropriate dB value and sending the IPC to the DSP. The get callback reads the volume dB value set in the DSP and determines the appropriate user space setting.
-#. Enum: The enum put callback reads the user set value of the enum kcontrol and sends the IPC to the DSP to set the corresponding value in the FW. The get callback reads the enum value from the DSP and updates the user space setting.
-#. Bytes: The byte control put callback is used for passing binary data from the user to the DSP FW. Depending on the size of the binary data being sent, the driver splits the data across multiple IPC messages. The FW is responsible for consolidating the data at the other end when the last segment of the data has been received from the host. The get callback gets the binary data from the DSP and passes it to the user space. As with the put callback, this is accomplished either in a single IPC or multiple IPCs, depending on the size of the binary data being read.
-
-Stream Management
-=================
-
-The SOF PCM driver handles all stream control operations initiated by ALSA such as pcm open, close, hw_params, and trigger start/stop. It includes the code for the generic PCM operations while invoking the platform-specific callbacks to access the hardware.
-
-PCM open/close
---------------
-
-When a pcm is opened, the SOF pcm open ``ioctl`` assigns the stream for the host DMA and the stream is released when the pcm is closed.
-
-PCM HW Params/Free
-------------------
-
-During the hw_params step, the SOF PCM driver performs the following operations:
-
-#. Allocates audio buffer pages.
-#. Invokes the platform-specific stream hw_params op. For SKL+ platforms, this involves decoupling host and link DMA engines, resetting the streams, setting up and programming the BDLs, and enabling the DMA interrupts.
-#. Sends IPC to the FW to set up the stream params in the DSP.
-
-The PCM free ``ioctl`` undoes the operations performed during hw_params.
-
-PCM Trigger
------------
-
-When the trigger ``ioctl`` is invoked, the SOF PCM driver invokes the platform-specific stream trigger operation and then sends the corresponding stream trigger IPC message to the DSP. The platform-specific stream trigger operation is responsible for starting/stopping the stream DMA, depending on the trigger command being invoked.
-
-PCM Prepare
------------
-
-The SOF PCM driver does not advertise ``SNDRV_PCM_INFO_RESUME`` in the runtime configuration for pcm streams. This means that upon resuming from system suspend, the streams that were active prior to suspend will be restarted instead of being resumed. Therefore, when restarting the suspended streams, the hw_params needs to set up again before triggering them. The SOF driver utilizes the prepare ``ioctl`` that is invoked upon resuming to determine if the hw_params needs to set up again or not.
-
-Power Management
-****************
-
-Overview
-========
-
-The SOF framework implements the standard Linux kernel power management interface for devices. The SOF core exports the following standard methods:
-
-- snd_sof_runtime_suspend()
-- snd_sof_runtime_resume()
-- snd_sof_suspend()
-- snd_sof_resume()
-
-On Intel HDA platforms, the PCI device registered in ``linux/sound/soc/sof/sof-pci-dev.c`` uses the above exported symbols to fill the Linux PM struct ``dev_pm_ops``.
-
-SOF is configured to support both system sleep and runtime power management. In a typical configuration, the SOF device is runtime-suspended if no ALSA PCM streams are active and no ALSA mixer controls (kcontrols) are used by user space applications. Currently for Intel platforms, the only two power states supported for the DSP are D0 (DSP is on) and D3 (DSP is powered off).
-
-Suspend Flow
-============
-
-- Firmware trace is released (if enabled).
-- Debugfs state is cached (if enabled, affects debugfs nodes linked to DSP memory that will lose its state in suspend).
-- Context-save IPC (SAVE_CTX) message is sent to firmware to notify the DSP of upcoming D3 entry.
-- DSP-specific suspend flow is run.
-
- - On the Intel HDA; this involves logic to reset the HDA controller, disable IRQs, and power down the DSP cores.
- - Runtime and system suspend flows have their own code paths.
-
-Resume Flow
-===========
-
-- DSP specific resume flow.
-
- - On Intel HDA, this involves logic to take the HDA controller out of reset, power up the DSP cores, and enable IRQs.
- - Runtime and system resume flows have their own code paths.
-
-- Firmware boot
-- Firmware trace is re-enabled (if configured).
-- Existing PCM pipelines are restored to the firmware, using cached data maintained in the SOF driver (see sof_restore_pipelines()).
-- Kcontrol values are restored from the cached data.
-- Resume is completed by notifying the firmware with the Context Restored (CTX_RESTORE) IPC message.
-
-
-Interaction with Codec Drivers
-==============================
-
-The audio codec drivers (compliant with the ALSA ASoC framework) are created as children of the SOF platform device in the Linux device hierarchy. While the codec drivers (located typically under ``linux/sound/soc/codecs/``) manage their power flows independently, the parent-child relationship guarantees ordering between SOF platform device and the codecs. For suspend, the codecs are suspended before the SOF platform device and, similarly for resume, the platform driver is resumed first and then the codec driver.
-
-Intel Drivers
-*************
-
-Intel HDA SOF DSP Platform Driver
-=================================
-
-SOF implementation for Intel platforms is performed by the DSP Platform drivers. A platform driver implements the generic SOF ``struct snd_sof_dsp_ops`` interface, including functions such as doorbell, IPC messages send and receive, firmware load, and power up/down. The platform implements these methods for a given hardware target. The Intel platform drivers are located in the ``linux/sound/soc/sof/intel/`` folder of the Linux kernel tree.
-
-Intel HDA DSP Driver for CNL/CML/WHL
-====================================
-
-The hardware interface for the Cannon Lake, Comet Lake, and Whiskey Lake platforms are defined in the ``linux/sound/soc/sof/intel/cnl.c`` file. For simplicity, all three platforms will be addressed with the CNL acronym in this section. This file defines the DSP ops required for initializing the SOF driver. Most of the DSP ops for the CNL are shared with the other Intel HDA platforms such as APL. The key changes in the CNL DSP driver are the doorbell registers and the corresponding IPC IRQ implementation.
-
-Intel Machine Drivers
-=====================
-
-The ALSA SoC Layer (ASoC) includes machine drivers. A machine driver glues together various software components (e.g. drivers for codecs, platforms, and digital audio interfaces), describes the relationships between the components, and registers the result as an ALSA sound card to the kernel. A machine driver can be generic, handling a family of similar systems, or can be very specific, targeting a single product.
-
-A set of machine drivers is included in the Linux kernel and provides support for a variety of systems with the Intel Audio DSP. These drivers are located in ``linux/soc/intel/boards``. The generic SOF HD-Audio machine driver (``skl_hda_dsp_generic.c``) can handle any system that meets the following criteria:
-
-- HDMI/DP codec in Intel Graphics
-- Optional: 1 external HDA codec
-- Optional: 1 to 4 digital microphones directly connected to PCH (not via codec)
-
-If the system has any I2S audio codecs or MIPI SoundWire codecs, the generic HD-Audio machine driver cannot be used and a dedicated machine driver is required instead.
-
-.. note:: Some existing machine drivers were previously developed for Intel closed source audio firmware (SST firmware, Intel® Smart Sound Technology). The SOF platform driver works with the existing machine drivers and requires no changes. The one big difference, though, is that the SOF PCM driver ignores the FE DAI links defined in the machine driver and overrides them with the ones defined in the SOF topology.
-
-Support for High Definition Audio (HD-Audio)
-********************************************
-
-Generic HD-Audio Support
-========================
-
-The Intel HD Audio controller is the standard audio host controller widely adopted in the PC platform; the industry standard Intel HD Audio driver software is available for Linux-based OSs. This driver is often referred to as the legacy HD-Audio driver. HDA DMA is used to transmit data between the host memory and the HD-A bus, and then to the external HDA codecs.
-
-On Intel’s platforms after Skylake (SKL+ platforms), the HDA controller is converged with the Audio DSP, and the HDA DMA is split into two parts, the host DMA and the link DMA. The host DMA is used to transmit data between the host memory and DSP memory so data can be processed by DSP firmware. The link DMA is used to transmit data between the DSP memory and the ``HDA/iDisp/I2S/SoundWire`` bus (and then to the ``HDA/HDMI/I2S/SoundWire`` codecs). The SOF driver plus firmware can support this HDA DSP-converged architecture.
-
-In the Linux ALSA framework, use of the audio DSP is optional. The common HDA library (hdac library, in ``sound/hda/``) is designed for both legacy HDA and HDA via Audio DSP support. It implements the HDA framework-level support, including the HDA bus, the HDA controller, and the HDA stream management.
-
-In SOF, the HDA driver (``sound/soc/sof/intel/hda*.c``) uses the hdac library to initialize the HDA bus and controller, probe codecs, and add SOF-specific stream management. Please note that HDA controller initialization and stream management are mandatory for Intel SKL+ platforms even if no HDA/HDMI-codec support is required, because the host DMA and stream control registers are part of HDA controller.
-
-The Legacy HD-Audio driver and SOF driver can coexist in one Linux distribution. The ``snd-intel-dspcfg`` kernel driver implements logic to select the correct driver based on ACPI table contents and platform capabilities detected at runtime. For example, if no specific configuration is defined in ACPI tables and digital microphones are directly attached to the PCH (Intel Platform Control Hub), an audio DSP is required and thus the SOF driver is chosen automatically.
-
-HD-Audio Codec Support
-======================
-
-In ASoC, the HD-Audio codec is implemented in ``hdac_hda.c`` in the ``soc/codec`` directory. It reuses the legacy HD-Audio codec driver and implements the features required by ASoC, such as registering the audio codec component driver, dapm routes, and codec dai operators. Three dai links are supported: Analog, Digital, and Alt Analog codec dai. Since power management is implemented in the legacy hda codec driver, there is no PM function in this codec driver.
-
-Display Audio Support
-=====================
-
-SOF also supports the Intel i915 audio codec driver. The Intel HDMI audio codec driver supports HDMI audio, Single Stream Transport (SST) Display Port (DP) audio, and Multi Stream Transport (MST) DP audio. It fully supports 3+ PCM playback streams; it does not support capture streams.
-
-When an HDMI/DP display with audio support is connected, it is attached to a free ALSA PCM node from the pool of nodes reserved for HDMI. The status of HDMI/DP PCM connections is exposed via the ALSA mixer card controls **HDMI/DP,pcm=X Jack**, where X is the PCM device number. When a connection is detected, another ALSA mixer PCM control, **name='ELD',device=X**, describes the connected monitor. This data is formatted as ELD data (**EDID Like Data**, where EDID is Extended Display Identification Data), as defined in the `HDA `_ specification.
-
-Starting with Linux kernel version 5.5, HDMI/DP audio is implemented with an architecture that is similar to other HDA codecs. Implementation of the HDMI/DP codec is in ``snd-hda-codec-hdmi`` (``sound/pci/hda/patch_hdmi.c``).
-
-In older versions of Linux, a dedicated codec driver was used (``sound/soc/codec/hdac_hdmi.c``) but is now deprecated.
-
-Dependency on Intel Graphics Driver (i915)
-------------------------------------------
-
-The HDMI/DP audio codec is integrated in the graphics card. This means the SOF HDMI/DP audio codec driver directly depends on the Intel i915 graphic driver.
-
-The graphics driver and the HDMI/DP audio codec driver use the “component” model to handle the upper communication between the graphics driver and the audio driver. The graphics driver is bound to the audio driver as a component. This interface is used to request power, clocks, get notifications of monitor connection changes, and to get access to auxiliary information about the monitor. The main structure that is used in the graphic and audio communication is ``struct drm_audio_component``. Refer to ``drm_audio_component.h`` for more information on the structure.
-
-The graphics card includes an Audio Power Domain which is dedicated to the audio power setting. Any audio operation on the HDMI/DP audio codec requires the Audio Power Domain to be turned on. After an operation, the audio driver should turn off the Audio Power Domain. The HDMI/DP audio codec clock domain is located in the graphic card. Whenever the audio sample rate/bit rate is changed, the audio driver requires the graphic driver to modify the clock setting correspondingly.
-
-Audio for DisplayPort Multi-Stream Transport (DP-MST)
------------------------------------------------------
-
-The Multi-Stream Transport (DP-MST) feature was first introduced in the DP 1.2 specification. It allows graphics to transfer multiple streams on a single connection. In a typical implementation, the multiplexed stream is terminated at a DP-MST hub which routes the individual streams into separate displays.
-
-The SOF HDMI/DP audio codec driver handles DP-MST audio streams transparently, and a DP-MST is treated in a similar way as any HDMI or DP-SST stream.
-
-.. note:: With Linux kernel versions 5.4 and older, the HDMI/DP implementation is using another codec driver and DP-MST interface to user-space is difference. With the old codec implementation, user-space software can determine the connection matrix between the monitors and the DP-MST port though **Pin#n-Port#m Mux** kcontrols in the alsamixer tool.
-
-Kernel Configuration/Kconfig
-****************************
-
-Refer to the `README `_ file of the SOF kconfig repository.
-
-Debug Options
-*************
-
-SOF provides multiple options to enable developers to quickly bring up new platforms and debug errors/crashes that occur during audio test cases. The most notable ones are as below:
-
-Nocodec Mode
-============
-
-The no-codec mode is specifically meant for speeding up the process of bringing up SOF on new platforms. This mode enables developers to quickly verify basic audio functionality on the available Digital Audio Interfaces (DAI) on the platform. This is also useful to rule out issues due to potential errors in the codec drivers.
-
-Debugfs
-=======
-
-SOF exposes several memory windows to the user space through the kernel debugfs filesystem. Developers can read or dump out the contents of these debugfs entries to infer the state of the DSP in case of a panic or a crash. Some of the most useful debugfs entries SOF exposes are mailbox, exception, and trace.
-
-Firmware Tracing
-================
-
-The tracing feature in the SOF firmware allows the DSP to send trace messages to the host. This tracing feature fills in for the lack of a printf feature while executing firmware code on the DSP. The host configures and sets up the DMA buffer for receiving the trace messages from the DSP. Once the trace DMA triggers, the DSP periodically initiates a DMA transfer to copy over the trace messages to the host. These messages can then be parsed using the sof-logger utility which prints out the messages in chronological order.
-
-More information is available in the firmware debuggability sections for :ref:`dbg-traces` and :ref:`dbg-logger`.
-
-IPC Flooding
-============
-
-The IPC flooding feature is useful to determine the throughput when sending IPCs from the host to the DSP at a very high rate. It is also useful for exposing race conditions which might cause IPC timeouts to occur. Two available options allow the user to either flood the DSP with a specified number of IPCs or flood the DSP with IPCs for the specified duration.
-
-Force IPC Position
-==================
-
-Sending position update IPC from the firmware to the host is a generic method to generate period interrupts to meet the requirement from the ALSA IRQ mode (e.g. ``snd_pcm_period_elapsed()``). On some HDA-integrated platforms (e.g. Intel SKL+ ones), this interrupt can be generated using the `HDA `_ period IOC (interrupt on complete) and the real-time buffer pointers can be read back from the DPIB (DMA Pointer In Buffer). On these platforms, the position update IPC is only the fallback choice and is not used by default.
-
-In order to debug issues with IOC/DPIB, the force IPC position kernel
-debug config can be selected. On Intel SKL- platforms, the stream
-position update IPC is used whether or not this option is selected.
diff --git a/developer_guides/tech/build-cmocka.rst b/developer_guides/tech/build-cmocka.rst
deleted file mode 100644
index 03fee6a2..00000000
--- a/developer_guides/tech/build-cmocka.rst
+++ /dev/null
@@ -1,142 +0,0 @@
-.. _build-cmocka:
-
-Build Cmocka for Xtensa
-#######################
-
-Cmocka for SOF is built automatically by default, however you may need a prebuilt version that can be used with :ref:`CMOCKA_DIRECTORY `.
-
-This article exaplains how to build Cmocka manually.
-Please note that it currently works only for Xtensa xt-* toolchain.
-Xtensa GCC toolchain is not supported yet.
-
-Cmocka fork
-***********
-
-We use our Cmocka fork that adds some options for embedded compilers:
-
-WITH_POSITION_INDEPENDENT_CODE
- Some compilers cannot compile CMake's test program with PIC,
- so you can disable it with this option.
-
-WITH_TINY_CONFIG
- Usually compiler checks are cheap, so configuration is quick.
- However many compilers are expensive to call,
- so this option can be used to minimize checks count.
-
-WITH_SHARED_LIB
- For compilers that cannot build shared libs and still want to
- use make / make install for making prebuilt libs
-
-All changes made to Cmocka are enabled with these options, without them it works just like vanilla Cmocka.
-
-Clone repo and enter its directory, because all examples will be executed there:
-
-.. code-block:: bash
-
- git clone https://github.com/thesofproject/cmocka
- cd cmocka
-
-Simple build on Linux
-*********************
-
-On any system that CMake identifies as `UNIX `_, you can just call following
-commands and it should work:
-
-.. code-block:: bash
-
- mkdir build && cd build
- cmake \
- -DCMAKE_C_COMPILER=xt-xcc \
- -DWITH_STATIC_LIB=ON \
- -DWITH_SHARED_LIB=OFF \
- -DWITH_EXAMPLES=OFF \
- -DWITH_POSITION_INDEPENDENT_CODE=OFF \
- -DCMAKE_INSTALL_PREFIX=install \
- ..
- make install
-
-Arguments used:
-
-CMAKE_C_COMPILER
- We specify "xt-xcc" as compiler that CMake should use
- to compile C files.
-WITH_STATIC_LIB
- By default static lib for Cmocka is not built,
- so we enable it.
-WITH_SHARED_LIB
- By default Cmocka builds shared lib, but we don't want that.
-WITH_EXAMPLES
- Examples don't work without shared lib, so we disable them.
-WITH_POSITION_INDEPENDENT_CODE
- PIC will make CMake's testing programs
- to fail, so disable it.
-CMAKE_INSTALL_PREFIX
- By default, it will go to host system binary files
- (for example /usr/bin), we change it to "install", so **make install**, will
- place output to **build/install** directory. This is the directory that you
- can use as input for :ref:`CMOCKA_DIRECTORY ` in SOF build system.
-
-Cross-platform build
-********************
-
-In order to build Cmocka for generic system, you need to use
-`CMAKE_TOOLCHAIN_FILE `_.
-
-Create **xt-toolchain-for-cmocka.cmake** file with following contents:
-
-.. code-block:: cmake
-
- # Generic because we build for embedded system
- set(CMAKE_SYSTEM_NAME Generic)
- # It should be always set when CMAKE_SYSTEM_NAME is changed
- set(CMAKE_SYSTEM_VERSION 1)
-
- # Make CMake use "xt-xcc" for compiling C files
- set(CMAKE_C_COMPILER xt-xcc)
- # Override ar and ranlib tools that CMake should use for linking lib
- set(CMAKE_AR xt-ar CACHE STRING "")
- set(CMAKE_RANLIB xt-ranlib CACHE STRING "")
-
- # Cmocka is written in C99, but for some reason it sets this flag, only on Posix
- # We set up it here, because our system is Generic
- add_definitions("-std=gnu99")
-
-Now you can build Cmocka using file above (use correct path to your toolchain file):
-
-.. code-block:: bash
-
- mkdir build && cd build
- cmake \
- -DCMAKE_TOOLCHAIN_FILE=/path/to/xt-toolchain-for-cmocka.cmake \
- -DWITH_STATIC_LIB=ON \
- -DWITH_SHARED_LIB=OFF \
- -DWITH_EXAMPLES=OFF \
- -DWITH_POSITION_INDEPENDENT_CODE=OFF \
- -DCMAKE_INSTALL_PREFIX=install \
- ..
- make install
-
-After these commands are successfully completed, the Cmocka's static lib and
-headers should be in **build/install**.
-
-Please note that commands above were for CMake's Make generator.
-If you are using Windows and want to use Ninja, your commands will
-look more like:
-
-.. code-block:: bash
-
- mkdir build && cd build
- cmake \
- -DCMAKE_TOOLCHAIN_FILE=/path/to/xt-toolchain-for-cmocka.cmake \
- -DWITH_STATIC_LIB=ON \
- -DWITH_SHARED_LIB=OFF \
- -DWITH_EXAMPLES=OFF \
- -DWITH_POSITION_INDEPENDENT_CODE=OFF \
- -DCMAKE_INSTALL_PREFIX=install \
- -GNinja \
- ..
- ninja install
-
-.. note::
-
- You can use -DWITH_TINY_CONFIG=ON, if configuration step takes too much time.
diff --git a/developer_guides/firmware/cmake.rst b/developer_guides/tech/cmake.rst
similarity index 100%
rename from developer_guides/firmware/cmake.rst
rename to developer_guides/tech/cmake.rst
diff --git a/faq/index.rst b/faq/index.rst
index 9a134303..5073c3d0 100644
--- a/faq/index.rst
+++ b/faq/index.rst
@@ -9,40 +9,6 @@ This page addresses common architectural, algorithmic, development, and licensin
:local:
:depth: 2
-General & Architecture
-**********************
-
-What is Sound Open Firmware (SOF)?
-==================================
-Sound Open Firmware (SOF) is an open-source, vendor-neutral audio Digital Signal Processing (DSP) firmware infrastructure, SDK, and host driver framework governed under the Linux Foundation. It enables deterministic, ultra-low-latency, power-efficient audio signal processing across personal computers, smartphones, smart speakers, automotive infotainment, and embedded microcontrollers.
-
-How does SOF differ from traditional audio DSP firmware?
-========================================================
-Traditional audio DSP solutions rely on proprietary, closed-source binary blobs supplied by silicon vendors, offering little transparency, rigid pipeline configurations, and high friction for custom audio algorithms. SOF is:
-
-* **Open and Permissive**: Built with transparent BSD 3-Clause and MIT code, allowing developers to inspect, modify, debug, and optimize every line of firmware code.
-* **Architecture-Independent**: Operates seamlessly across Tensilica Xtensa, ARM Cortex-M, and RISC-V DSPs.
-* **Decoupled from Firmware**: Uses dynamic ALSA Topology (Topology 2) rather than hardcoded C pipelines, enabling dynamic runtime graph instantiation.
-* **Upstream First**: Supported natively in upstream Linux kernel releases (``sound/soc/sof/``).
-
-What deployment models does SOF support?
-========================================
-SOF supports two foundational architectures:
-
-* **Host-Based Architecture**: Coupled to a host application processor running **Linux**, **Android**, or **ChromeOS**. The host OS driver stack controls power states (D0ix/D3) and streams PCM audio over DMA windows via IPC (IPC3/IPC4).
-* **Hostless (Standalone / Embedded) Architecture**: Runs autonomously on microcontrollers and embedded DSPs (such as **ESP32-P4** or **Teensy 4.1 / i.MX RT1062**) atop the Zephyr RTOS, streaming audio directly between physical peripherals (I2S, PDM, Bluetooth) using static ROM topologies without requiring a host PC.
-
-Which Real-Time Operating System (RTOS) does SOF use?
-=====================================================
-Modern SOF releases run natively on the **Zephyr RTOS**, providing robust hardware abstraction layers (HAL), POSIX thread synchronization primitives, dynamic device drivers, and real-time scheduling. Legacy deployments also support Cadence Xtensa XTOS.
-
-Which IPC protocols are supported?
-==================================
-SOF supports two Inter-Processor Communication (IPC) protocols:
-
-* **IPC4**: A structured, multi-part messaging protocol designed for modern Intel (cAVS 2.5+, ACE 1.x, ACE 3.x) and AMD platforms. It supports granular pipeline gating, modular dynamic loading, and multi-core scheduling.
-* **IPC3**: A lightweight, mailbox-based message protocol used across earlier Intel CAVS architectures and legacy embedded DSP targets.
-
Audio Processing & Module Development
*************************************
@@ -59,16 +25,9 @@ Yes. Because the SOF firmware core is licensed under the permissive **BSD 3-Clau
What audio processing components are available out-of-the-box?
==============================================================
-SOF includes a rich catalog of production-grade audio processing components:
-
-* **Core Mixing & Routing**: Volume control with smooth volume ramping, multi-channel Mixers, Matrix Mixers, Demux, and Multiplexers.
-* **Sample Rate Conversion**: High-order polyphase fractional and synchronous Sample Rate Converters (SRC).
-* **Acoustic Tuning**: Parametric IIR/FIR Equalizers (EQ) and multi-band Dynamic Range Control (DRC).
-* **Voice & Spatial Processing**: Directional Microphone Beamforming (TDFB), Acoustic Echo Cancellation (AEC), and Wake-on-Voice (WoV).
-* **Hardware-Accelerated Codecs**: MP3 and AAC decoders optimized for Tensilica Vector Floating-Point Units (VFPU).
-* **Spatial Audio**: Valve Steam Audio HRTF 3D binaural spatial rendering.
-
-Refer to the :ref:`Audio Algorithms & Features Catalog ` for technical specifications and testbench instructions.
+For the complete catalog of production-grade audio processing components,
+codecs, filters, and dynamic modules available out-of-the-box in SOF,
+refer to the :ref:`Audio Processing Modules Catalog `.
How are audio signal pipelines defined?
=======================================
@@ -79,13 +38,235 @@ Hardware & Platform Support
Where can I review hardware compatibility?
==========================================
-The living :ref:`Supported Platforms Matrix ` details all supported silicon architectures, core frequencies, memory tiers, audio interfaces, and IPC protocols across:
-
-* **Intel Platforms**: Tiger Lake (TGL / CAVS 2.5), Meteor Lake (MTL / ACE 1.5), Arrow Lake (ARL-S / ACE 1.5), Lunar Lake (LNL / ACE 2.0), and Panther Lake (PTL / ACE 3.0).
-* **AMD Platforms**: Renoir, Rembrandt, Phoenix, and Strix.
-* **NXP Platforms**: i.MX8, i.MX8M, and i.MX9.
-* **MediaTek Platforms**: MT8195 and MT8186.
-* **Embedded Microcontrollers**: NXP i.MX RT1062 (**Teensy 4.1**) and Espressif **ESP32-P4** RISC-V audio bridges.
+Hardware compatibility for SOF is documented across two primary references:
+
+* **SOF Supported Platforms Matrix**: Refer to the :ref:`platforms` page for
+ detailed specifications of all silicon targets, DSP architectures, memory
+ tiers, audio interfaces (SoundWire, I2S, PDM, HDA), and IPC protocols.
+* **Zephyr Project Supported Boards & Platforms**: Because modern SOF firmware
+ is built upon the Zephyr RTOS, it can be ported and executed across any
+ architecture, SoC, or board supported by upstream Zephyr. Refer to the
+ `Zephyr Supported Boards Catalog `_
+ for the complete upstream hardware list.
+
+Why does my audio work on Windows, but not on Linux?
+====================================================
+A frequent point of confusion for users installing Linux on a consumer PC or laptop
+is finding that the internal speakers, headphone jack detection, or microphone array
+do not function out-of-the-box, even though the device worked perfectly on Windows.
+
+To understand why this happens, it is important to recognize that modern PC and laptop
+audio is not a single standardized, plug-and-play device (unlike USB audio devices
+or NVMe drives). Instead, it is an embedded-style subsystem with massive hardware
+differentiation and complex physical interconnects customized by the original equipment
+manufacturer (OEM) for every specific motherboard model:
+
+* **Diverse Audio Codecs**:
+ Laptops incorporate diverse codecs from various vendors—such as Realtek
+ (ALC287, ALC5682, ALC295), Cirrus Logic (CS42L42), Everest Semiconductor
+ (ES8336), Conexant, or ESS.
+* **Smart Speaker Amplifiers**:
+ Internal laptop speakers typically require discrete smart amplifiers—such as
+ Texas Instruments (TAS2781), Cirrus Logic (CS35L41), or Maxim Integrated (MAX98373).
+ These amps communicate over I2C, SPI, or SoundWire and require customized firmware
+ calibration blobs, speaker protection parameters, and real-time voltage/current
+ (Vmon/Imon) feedback monitoring.
+* **Complex Audio Interfaces**:
+ A single laptop design often routes audio across multiple distinct buses:
+ MIPI SoundWire for smart amplifiers, I2S/TDM for the audio codec, PDM for 2-channel
+ or 4-channel digital microphone arrays, and Intel HD-Audio (HDA) for display/HDMI audio.
+* **Multi-Point Clock Trees**:
+ Buses require intricate clock distribution across Main Clocks (MCLK), Bit Clocks (BCLK),
+ Word Clocks (WCLK/FS), and internal PLLs, where either the SoC or the peripheral can act
+ as the clock provider.
+* **SoC and Codec/Amp GPIO Control Lines**:
+ Discrete GPIO pins must be toggled in precise power-up sequences to enable external
+ speaker amplifier power rails, reset smart amplifier ICs, switch speaker mute gates,
+ power microphone bias voltages, and control camera/mic privacy LEDs.
+* **Jack Detection & Impedance Sensing**:
+ The 3.5mm combo audio jack relies on dedicated interrupt lines (GPIOs) and internal
+ comparator circuits to detect jack insertion, differentiate 3-pole TRS headphones
+ from 4-pole TRRS headsets with microphones, and sense multi-button in-line remote
+ presses (volume up/down, hook switch).
+
+.. graphviz::
+ :caption: Figure: Hardware Complexity and the Critical OEM Board Integration Layer
+
+ digraph oem_audio_complexity {
+ rankdir=TB;
+ nodesep=0.35;
+ ranksep=0.45;
+
+ node [fontname="Verdana", fontsize=9, shape=box, style="filled,rounded", height=0.38];
+ edge [fontname="Verdana", fontsize=8];
+
+ // SoC
+ subgraph cluster_soc {
+ label = "Host SoC (Intel / AMD)";
+ style = "filled,rounded";
+ color = "#1f618d";
+ fillcolor = "#ebf5fb";
+ fontname = "Verdana-Bold";
+ fontsize = 10;
+ fontcolor = "#154360";
+
+ soc_dsp [label="Audio DSP Engine\n(SOF / Generic Driver)", fillcolor="#d4e6f1"];
+ soc_buses [label="Audio Buses\n(SoundWire, I2S, PDM, HDA)", fillcolor="#d4e6f1"];
+ soc_clocks [label="Clock Generators\n(MCLK, BCLK, WCLK, PLLs)", fillcolor="#d4e6f1"];
+ soc_gpios [label="SoC GPIO Controller\n(Reset, Enable, IRQs)", fillcolor="#d4e6f1"];
+
+ { rank=same; soc_dsp; soc_buses; soc_clocks; soc_gpios; }
+ }
+
+ // OEM Integration Layer
+ subgraph cluster_integration {
+ label = "The OEM Board Integration Layer (Motherboard Wiring & Mappings)";
+ style = "filled,rounded,dashed";
+ color = "#c0392b";
+ fillcolor = "#fdf2e9";
+ fontname = "Verdana-Bold";
+ fontsize = 10;
+ fontcolor = "#78281f";
+
+ acpi_dsd [label="ACPI _DSD / Platform Mappings\n(Audio Interface Routing, Endpoints)", fillcolor="#fadbd8"];
+ gpio_routing [label="GPIO & Power Routing\n(Amp Power, Reset, Jack IRQ)", fillcolor="#fadbd8"];
+ clock_tree [label="Clock Tree Configuration\n(Provider/Consumer, Frequencies)", fillcolor="#fadbd8"];
+ ucm_quirks [label="ALSA Machine Driver & UCM\n(Channel Maps, Controls, Mixers)", fillcolor="#fadbd8"];
+
+ { rank=same; acpi_dsd; gpio_routing; clock_tree; ucm_quirks; }
+ }
+
+ // Peripherals
+ subgraph cluster_hw {
+ label = "Differentiated Motherboard Hardware";
+ style = "filled,rounded";
+ color = "#27ae60";
+ fillcolor = "#eafaf1";
+ fontname = "Verdana-Bold";
+ fontsize = 10;
+ fontcolor = "#145a32";
+
+ codecs [label="Audio Codecs\n(Realtek, Cirrus, Everest)", fillcolor="#d5f5e3"];
+ smart_amps [label="Smart Amplifiers\n(TI, Maxim, Cirrus + Vmon/Imon)", fillcolor="#d5f5e3"];
+ jack_hw [label="3.5mm Combo Jack\n(Impedance Sense, Mic Bias)", fillcolor="#d5f5e3"];
+ mic_array [label="Digital Mic Array\n(2-ch / 4-ch PDM)", fillcolor="#d5f5e3"];
+ speakers [label="Internal Speakers\n(Woofer / Tweeter Array)", fillcolor="#d5f5e3"];
+
+ { rank=same; codecs; smart_amps; jack_hw; mic_array; speakers; }
+ }
+
+ soc_buses -> acpi_dsd [color="#2980b9", penwidth=1.5];
+ soc_clocks -> clock_tree [color="#2980b9", penwidth=1.5];
+ soc_gpios -> gpio_routing [color="#2980b9", penwidth=1.5];
+ soc_dsp -> ucm_quirks [color="#2980b9", penwidth=1.5];
+
+ acpi_dsd -> codecs [color="#e74c3c", penwidth=1.5];
+ acpi_dsd -> smart_amps [color="#e74c3c", penwidth=1.5];
+ clock_tree -> codecs [color="#e74c3c", penwidth=1.5];
+ clock_tree -> smart_amps [color="#e74c3c", penwidth=1.5];
+ gpio_routing -> smart_amps [color="#e74c3c", penwidth=1.5];
+ gpio_routing -> jack_hw [color="#e74c3c", penwidth=1.5];
+ acpi_dsd -> mic_array [color="#e74c3c", penwidth=1.5];
+ smart_amps -> speakers [color="#27ae60", penwidth=1.5];
+ codecs -> jack_hw [color="#27ae60", penwidth=1.5];
+ }
+
+The Upstream Driver Reality vs. OEM Integration
+-----------------------------------------------
+The CPU vendors (Intel, AMD) and codec/amplifier vendors (Realtek, Cirrus Logic,
+Texas Instruments, etc.) **do provide good quality, battle-tested generic drivers
+upstream in the Linux kernel** (such as ``sound/soc/sof/`` and ``sound/soc/codecs/``).
+
+However, these generic drivers cannot predict how an OEM has physically wired a
+specific laptop. They lack the crucial **OEM board-level integration** that maps:
+
+1. Which specific GPIO lines on the SoC or codec correspond to amplifier resets, power
+ enables, or headset jack interrupts.
+2. Which I2C/SPI bus or SoundWire link ID the smart amplifiers reside on.
+3. Which clock rates and provider/consumer clock modes are wired between the SoC and codec.
+4. How audio channels, speaker volumes, and mixer controls should be configured in
+ the ALSA Use Case Manager (UCM).
+
+OEM vs. User-Installed Operating Systems
+----------------------------------------
+* **Windows & Devices That Ship With Linux**:
+ On Windows, and on commercial laptops that **ship with Linux pre-installed from
+ the factory** (such as Chromebooks, Dell Developer Editions, or certified Lenovo
+ ThinkPads), this hardware integration is performed directly by the OEM/ODM.
+ The manufacturer provides custom ACPI tables (including ``_DSD`` Device-Specific
+ Data properties), firmware calibration tables, and driver mapping configurations
+ designed specifically for that platform.
+
+* **Devices Where Linux Is Installed by the User as a Second OS**:
+ When a user purchases a standard Windows laptop and installs Linux as a dual-boot
+ or secondary OS, **no OEM integration has been done for Linux**. The device's
+ ACPI firmware typically only contains Windows-proprietary AML methods and expects
+ proprietary Windows INF files and registry configurations.
+
+Consequently, when booting generic Linux on an arbitrary consumer laptop, **it is
+purely by luck that driver features work with unknown board configurations**—unless
+the manufacturer happened to follow a standard silicon reference schematic, or
+upstream kernel community developers have manually reverse-engineered the board's
+ACPI tables, submitted DMI machine quirks, or crafted custom ALSA UCM profiles.
+
+Why does ACPI audio data not match my audio hardware?
+=====================================================
+A frequent problem when running Linux as a secondary operating system on consumer
+PCs and laptops is encountering BIOS/ACPI tables whose audio descriptions (such as
+**NHLT**, **DISCO**, and ``_DSD`` tables) contradict the actual motherboard hardware.
+For instance, the ACPI tables might describe four digital microphones when only two are
+physically wired, declare the wrong I2S link format, or list SoundWire endpoints on
+incorrect link IDs.
+
+The Root Cause: The Fast ODM/OEM Development Flow
+-------------------------------------------------
+Original Design Manufacturers (ODMs) and Original Equipment Manufacturers (OEMs)
+operate under extremely aggressive product delivery schedules. When bringing up audio
+on a new laptop model:
+
+1. **BIOS Tables Are Often Stale or Copied**:
+ Motherboard BIOS engineers frequently copy ACPI tables (including Intel/AMD
+ **NHLT** – *Non-HD Audio Link Table*, MIPI **SoundWire DISCO** – *Discovery and
+ Configuration* tables, and device-specific ``_DSD`` properties) from an earlier
+ reference design or older laptop model.
+2. **Hardcoded Windows Driver Workarounds**:
+ Fixing mistakes in the motherboard BIOS requires cross-team firmware engineering
+ cycles, BIOS rebuilding, and extensive validation passes. To meet tight shipping
+ deadlines, **it is significantly faster and easier for the audio integration engineer
+ to simply hardcode the correct hardware parameters into the proprietary Windows driver,
+ INF installation script, or registry settings**.
+3. **Windows Ignores the ACPI Bugs**:
+ Because the customized Windows driver explicitly overrides or bypasses the BIOS
+ tables using its hardcoded model profiles, audio works flawlessly on Windows despite
+ the inaccurate or corrupt ACPI tables underneath.
+
+The Impact on Linux-Based Devices
+---------------------------------
+Unlike proprietary monolithic drivers, **Linux relies strictly on standards-based
+hardware discovery**:
+
+* The upstream Linux kernel audio subsystem (``sound/soc/sof/``, ``sound/soc/intel/``,
+ and ``sound/soc/sdw/``) directly parses the BIOS ACPI data—including **NHLT**
+ endpoints and formats, **SoundWire DISCO** properties, and ``_DSD`` device parameters—to
+ dynamically instantiate the audio machine driver, configure clock dividers, discover
+ peripheral codecs, select matching topologies, and construct a working sound card.
+* When the ACPI, NHLT, or DISCO data is incomplete, outdated, or wrong, Linux creates
+ audio interfaces with wrong bit depths, binds non-existent microphone channels,
+ or fails to enumerate codecs altogether, leading to silence, audio distortion, or
+ failed DSP probing.
+
+How Linux Developers Work Around Broken ACPI Data
+-------------------------------------------------
+Because end-users cannot easily rewrite their motherboard BIOS, upstream Linux audio
+engineers and community contributors must reverse-engineer the actual hardware wiring
+and implement software quirks:
+
+* **DMI Machine Quirks**: The Linux kernel maintains extensive quirk tables
+ (``dmi_system_id``) that match a laptop's manufacturer, product name, and BIOS version
+ to force the correct channel counts, GPIO pin assignments, or SoundWire link mappings.
+* **NHLT & DSD Overrides**: When BIOS tables are irrecoverably broken, Linux audio
+ drivers implement fallback heuristics or load external ACPI DSD/SSDT overlays to
+ substitute correct hardware descriptors.
Can SOF run without a host computer?
====================================
@@ -113,7 +294,7 @@ SOF provides two simulation options:
How do I capture DSP firmware logs and trace data?
==================================================
-SOF uses an efficient string dictionary extraction system (**smex**). Format strings are extracted from firmware ELF binaries during compilation into a dictionary file (``.ldc``), allowing the DSP to transmit compact numeric trace IDs over DMA without CPU overhead. On the host, tools such as **sof-logger** and the **TCP Probe Server** (port 9999) decode these trace packets in real time.
+SOF uses an efficient string dictionary extraction system (**smex**). Format strings are extracted from firmware ELF binaries during compilation into a dictionary file (``.ldc``), allowing the DSP to transmit compact numeric trace IDs over DMA without CPU overhead. On the host, tools such as the **TCP Probe Server** (port 9999), DMA trace probes, and Zephyr log decoders decode these trace packets in real time.
Licensing & Community Governance
********************************
diff --git a/getting_started/index.rst b/getting_started/index.rst
index 65ba0480..49314374 100644
--- a/getting_started/index.rst
+++ b/getting_started/index.rst
@@ -91,7 +91,7 @@ The SOF SDK provides a complete toolkit connecting source code authoring to comp
fontsize = 10;
fontcolor = "#4a235a";
- runtime_diag [label="Live Probing & Telemetry\n(TCP Probe Server 9999, sof-logger)", width=3.3, fixedsize=shape, fillcolor="#d2b4de"];
+ runtime_diag [label="Live Probing & Telemetry\n(TCP Probe Server 9999, DMA Probes)", width=3.3, fixedsize=shape, fillcolor="#d2b4de"];
sim_qemu [label="QEMU DSP Simulators\n(ptl-sim, tgl-sim in CI)", fillcolor="#d7bde2"];
dut_boards [label="Target DUTs & Hardware Boards\n(Spider TGL, Dragon Fly ARL, Aphid PTL, Teensy 4.1)", width=3.3, fixedsize=shape, fillcolor="#d2b4de"];
@@ -137,7 +137,7 @@ Core SDK Ingredients
* **Firmware Packaging & Signing (`rimage`)**: Converts compiled ELF binaries into platform-specific signed manifests with optional security headers.
-* **Trace & Log Decoding (`smex` & `sof-logger`)**: Extracts format strings from ELF binaries into a dictionary file (``.ldc``), allowing the DSP to transmit compressed numeric trace IDs decoded in real time on the host. SOF also integrates natively with **Zephyr logging and tracing capabilities** (including Zephyr log backends and dictionary-based logging) for unified system and driver diagnostics.
+* **Trace & Log Decoding (`smex` & DMA Probes)**: Extracts format strings from ELF binaries into a dictionary file (``.ldc``), allowing the DSP to transmit compressed numeric trace IDs decoded in real time on the host. SOF also integrates natively with **Zephyr logging and tracing capabilities** (including Zephyr log backends and dictionary-based logging) for unified system and driver diagnostics.
* **Real-Time Telemetry & Probing**: The TCP probe server captures raw, multi-channel DMA audio stream taps at runtime over TCP port 9999 without interrupting pipeline execution.
diff --git a/index.rst b/index.rst
index cd3aebe7..6d0a285a 100644
--- a/index.rst
+++ b/index.rst
@@ -29,7 +29,6 @@ Sound Open Firmware Documentation
release.rst
contribute/index.rst
tsc/index.rst
- maintainers/index.rst
api/index.rst
presentations/index.rst
faq/index.rst
diff --git a/maintainers/admin.rst b/maintainers/admin.rst
deleted file mode 100644
index 450bc783..00000000
--- a/maintainers/admin.rst
+++ /dev/null
@@ -1,28 +0,0 @@
-.. _admin:
-
-SOF admin
-#########
-
-Given the size of the project, maintainer rights are granted
-to multiple contributors:
-
-+---------------+-------------------+---------------+
-| Intel | Lech Betlej | @lbetlej |
-+---------------+-------------------+---------------+
-| Intel | Liam Girdwood | @lgirdwood |
-+---------------+-------------------+---------------+
-| Intel | Marcin Maka | @mmaka1 |
-+---------------+-------------------+---------------+
-| Intel | Ranjani Sridharan | @ranj063 |
-+---------------+-------------------+---------------+
-| NXP | Daniel Baluta | @dbaluta |
-+---------------+-------------------+---------------+
-| Google | Johny Lin | @johnylin76 |
-+---------------+-------------------+---------------+
-
-Administrators may override specific merge rules, for example merge a
-PR even if it does not meet all criteria defined by a repository, but
-will only do so for exceptional cases.
-
-Administrators can add new contributors to the project, define their
-contributor levels and assign them to specific teams.
diff --git a/maintainers/code_owners.rst b/maintainers/code_owners.rst
deleted file mode 100644
index 13305699..00000000
--- a/maintainers/code_owners.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-.. _code_owners:
-
-
-SOF code owners
-###############
-
-Each repository defines its own CODE_OWNER file, which identifies key
-contributors and experts in each area of the SOF project.
-
-Code owners will be notified of each change to their respective
-domains, and are encouraged to approve or provide feedback on
-contributions being reviewed.
-
-Each repository in the SOF project may define their own rules, but the
-general expectation is that Pull Requests are approved by 2 or more
-code owners, maintainers or admin.
diff --git a/maintainers/index.rst b/maintainers/index.rst
deleted file mode 100644
index 0a7ed6bb..00000000
--- a/maintainers/index.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-.. _maintainers:
-
-
-SOF admin, maintainers and code owners
-######################################
-
-The SOF project defines administrators, grants key contributors merge
-rights and defines code owners for each subsystem and technical area.
-
-.. toctree::
- :maxdepth: 1
-
- admin.rst
- merge_rights.rst
- code_owners.rst
diff --git a/maintainers/merge_rights.rst b/maintainers/merge_rights.rst
deleted file mode 100644
index 72a2c105..00000000
--- a/maintainers/merge_rights.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. _merge_rights:
-
-Merge rights
-############
-
-For the firmware tree, additional key contributors have merge rights
-into the master branch:
-
-+---------------+-------------------+---------------+
-| Intel | Tomasz Lauda | @tlauda |
-+---------------+-------------------+---------------+
-| Intel | Janusz Jankowski | @jajanusz |
-+---------------+-------------------+---------------+
diff --git a/release.rst b/release.rst
index 1b52522d..0305c88f 100644
--- a/release.rst
+++ b/release.rst
@@ -72,6 +72,7 @@ SOF binary releases follow a **Calendar Versioning (CalVer)** scheme: ``vYYYY.MM
* **Major Releases** (``vYYYY.MM``): Published periodically (aligned with upstream Linux kernel and Zephyr LTS releases).
* **Maintenance & Patch Releases** (``vYYYY.MM.patch``): Critical bug fixes, hardware workarounds, and topology updates published from dedicated stable branches (e.g. ``stable-v2025.12``).
+* **Binary vs. Firmware Versioning**: Binary packages use CalVer (e.g. ``v2025.12.2``) and package specific upstream SOF firmware releases (e.g. ``v2.14.3``) along with matching topologies and kernel compatibility scripts.
* **Daily CI Builds**: In addition to tagged releases, the `sof-bin main branch `_ is updated daily with verified builds from the firmware development tree.
.. seealso::
diff --git a/scripts/generate_matrices.py b/scripts/generate_matrices.py
index 5c5da31d..16a698c5 100644
--- a/scripts/generate_matrices.py
+++ b/scripts/generate_matrices.py
@@ -17,6 +17,7 @@
"""
import json
+import re
import sys
import urllib.request
from pathlib import Path
@@ -157,6 +158,21 @@ def generate_modules_table():
print(f"Generated {out_file} ({len(modules)} modules)")
+def parse_fw_version(body):
+ if not body:
+ return "N/A"
+ matches = re.findall(r'SOF\s*(v?\d+\.\d+(?:\.\d+)?)', body, re.IGNORECASE)
+ matches += re.findall(r'https://github.com/thesofproject/sof/releases/tag/(v\d+\.\d+(?:\.\d+)?)', body)
+ normalized = []
+ for m in matches:
+ norm = m if m.startswith('v') else 'v' + m
+ if norm not in normalized:
+ normalized.append(norm)
+ if normalized:
+ normalized.sort(key=lambda v: [int(x) for x in v.lstrip('v').split('.')], reverse=True)
+ return normalized[0]
+ return "N/A"
+
def generate_sof_bin_releases():
cache_file = DATA_DIR / "sof_bin_releases.json"
releases = []
@@ -177,9 +193,11 @@ def generate_sof_bin_releases():
asset_url = a["browser_download_url"]
asset_size_mb = round(a["size"] / (1024 * 1024), 1)
break
+ fw_ver = parse_fw_version(r.get("body", ""))
releases.append({
"tag_name": r.get("tag_name"),
"name": r.get("name") or r.get("tag_name"),
+ "fw_version": fw_ver,
"published_at": r.get("published_at", "")[:10],
"html_url": r.get("html_url"),
"asset_name": asset_name,
@@ -207,27 +225,48 @@ def generate_sof_bin_releases():
out_file = DOCS_DIR / "_generated_sof_bin_releases.rst"
latest = releases[0]
+ latest_fw = latest.get("fw_version", "N/A")
with open(out_file, "w", encoding="utf-8") as f:
# Latest Release Hero Card
+ fw_badge = ""
+ if latest_fw != "N/A":
+ fw_link = f"https://github.com/thesofproject/sof/releases/tag/{latest_fw}"
+ fw_badge = (
+ f''
+ f'Firmware {latest_fw} ↗'
+ )
+
f.write(".. raw:: html\n\n")
f.write(' \n')
f.write('
\n')
- f.write('
\n')
+ f.write('
\n')
f.write(' Latest Binary Release: \n')
f.write(f' {latest["tag_name"]}\n')
+ if fw_badge:
+ f.write(f' {fw_badge}\n')
f.write('
\n')
f.write(f'
Published on {latest["published_at"]}
\n')
f.write('
\n')
- f.write('
Official pre-built and signed firmware binaries, compiled topologies, and install scripts for Intel, AMD, and NXP platforms.
\n')
+ if latest_fw != "N/A":
+ f.write(f'
Official pre-built and signed firmware binaries (bundled with SOF Firmware {latest_fw}), compiled topologies, and install scripts for Intel, AMD, and NXP platforms.
\n')
+ else:
+ f.write('
Official pre-built and signed firmware binaries, compiled topologies, and install scripts for Intel, AMD, and NXP platforms.
\n')
f.write('
\n')
f.write('
\n\n')
@@ -236,21 +275,24 @@ def generate_sof_bin_releases():
f.write("Recent Binary Releases\n")
f.write("**********************\n\n")
f.write(".. csv-table::\n")
- f.write(' :header: "Release Tag", "Release Date", "Binary Archive", "Archive Size", "GitHub Notes"\n')
- f.write(" :widths: 16, 15, 30, 14, 25\n\n")
+ f.write(' :header: "Release Tag", "Firmware Version", "Release Date", "Binary Archive", "Archive Size", "GitHub Notes"\n')
+ f.write(" :widths: 15, 15, 14, 28, 13, 20\n\n")
for r in releases:
tag = r["tag_name"]
+ fw_ver = r.get("fw_version", "N/A")
date = r["published_at"]
asset_name = r["asset_name"]
asset_url = r["asset_url"]
size_str = f"{r['asset_size_mb']} MB" if r["asset_size_mb"] else "N/A"
notes_url = r["html_url"]
+ tag_cell = f'`{tag} <{notes_url}>`_'
+ fw_cell = f'`{fw_ver}
`_' if fw_ver != "N/A" else "N/A"
download_cell = f'`{asset_name} <{asset_url}>`_' if asset_name != "N/A" else "N/A"
notes_cell = f'`Release Notes <{notes_url}>`_'
- f.write(f' "`{tag} <{notes_url}>`_", "{date}", "{download_cell}", "{size_str}", "{notes_cell}"\n')
+ f.write(f' "{tag_cell}", "{fw_cell}", "{date}", "{download_cell}", "{size_str}", "{notes_cell}"\n')
f.write("\n")
diff --git a/static/sof-custom.css b/static/sof-custom.css
index a6c278a7..027010b0 100644
--- a/static/sof-custom.css
+++ b/static/sof-custom.css
@@ -353,3 +353,60 @@ html[data-mode="dark"] button.copybtn {
}
}
+/* -- Breathe C API middle content pane styling (PyData theme) ------------- */
+
+.bd-article p.breathe-sectiondef-title {
+ font-size: 1.25rem;
+ font-weight: 700;
+ margin-top: 1.8rem;
+ margin-bottom: 0.8rem;
+ padding-bottom: 0.3rem;
+ border-bottom: 1px solid var(--pst-color-border, #e5e7eb);
+ color: var(--pst-color-text-base);
+}
+
+.bd-article dl.c.function,
+.bd-article dl.c.struct,
+.bd-article dl.c.enum,
+.bd-article dl.c.macro,
+.bd-article dl.c.type {
+ margin: 1.25rem 0;
+ padding: 0.75rem 1rem;
+ border: 1px solid var(--pst-color-border, #e5e7eb);
+ border-radius: 6px;
+ background-color: var(--pst-color-surface, #f8f9fa);
+}
+
+.bd-article dl.c > dt.sig {
+ font-family: var(--pst-font-family-monospace, monospace);
+ font-size: 0.92rem;
+ font-weight: 600;
+ padding: 0.4rem 0.6rem;
+ margin: -0.75rem -1rem 0.75rem -1rem;
+ border-bottom: 1px solid var(--pst-color-border, #e5e7eb);
+ background-color: rgba(0, 0, 0, 0.03);
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ overflow-x: auto;
+}
+
+html[data-theme="dark"] .bd-article dl.c > dt.sig,
+html[data-mode="dark"] .bd-article dl.c > dt.sig {
+ background-color: rgba(255, 255, 255, 0.04);
+}
+
+.bd-article dl.c > dd {
+ margin-left: 0.5rem;
+ margin-bottom: 0;
+}
+
+.bd-article dl.c .field-list {
+ margin-top: 0.75rem;
+ margin-bottom: 0.5rem;
+}
+
+.bd-article dl.c .field-list dt {
+ font-weight: 600;
+ color: var(--pst-color-text-muted, #6c757d);
+}
+
diff --git a/tsc/index.rst b/tsc/index.rst
index 477adfe8..a636b3ef 100644
--- a/tsc/index.rst
+++ b/tsc/index.rst
@@ -3,13 +3,32 @@
Technical Steering Committee (TSC)
##################################
-The TSC serves as the highest technical decision body for the project,
-with members chosen from involved project maintainers. This committee
-sets the technical direction for the project, defines milestone
-release features, and coordinates cross-community collaboration.
+The Technical Steering Committee (TSC) serves as the highest technical decision-making
+body for the Sound Open Firmware (SOF) project. The committee sets the technical
+direction for the project, defines roadmap priorities and milestone release features,
+evaluates architectural proposals (including :ref:`SOF_ABI_changes`), and coordinates
+cross-community collaboration.
-.. toctree::
- :maxdepth: 1
+.. _representatives:
- representatives.rst
- meetings.rst
+TSC Representation
+******************
+
+Member companies active in the Sound Open Firmware project appoint technical
+representatives to serve on the TSC.
+
+**Intel**, **NXP**, **AMD**, **MediaTek (MTK)**, and **Google** each hold **2 seats**
+on the committee, ensuring balanced technical governance and multi-vendor alignment
+across the open-source audio ecosystem.
+
+.. _meetings:
+
+TSC Meetings
+************
+
+TSC meetings are held periodically, usually following each major firmware release,
+or on an ad-hoc basis as needed to address architectural, roadmap, or governance topics.
+
+Meeting agendas and notices are circulated ahead of time on the SOF development
+channels and mailing list. Notes and decisions agreed upon by the TSC are made
+publicly accessible and published in the project's GitHub repositories.
diff --git a/tsc/meetings.rst b/tsc/meetings.rst
deleted file mode 100644
index 2516ed52..00000000
--- a/tsc/meetings.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-.. _meetings:
-
-TSC Meetings
-############
-
-TSC meetings take place every month, typically the first Monday of
-each month, with a agenda circulated ahead of time on the SOF mailing
-list.
-
-The notes and decisions made by the TSC will be made public, stored on
-GitHub and a link provided on the SOF mailing list.
-
diff --git a/tsc/representatives.rst b/tsc/representatives.rst
deleted file mode 100644
index 66b7ff4d..00000000
--- a/tsc/representatives.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-.. _representatives:
-
-
-TSC Representatives
-###################
-
-The TSC is currently made of the following contributors
-
-+---------------+----------------------+------------------+
-| Company | Name | Username |
-+===============+======================+==================+
-| Intel | Michal Wasko | @mwasko |
-+---------------+----------------------+------------------+
-| Intel | Liam Girdwood | @lgirdwood |
-+---------------+----------------------+------------------+
-| Intel | Pierre Bossart | @plbossart |
-+---------------+----------------------+------------------+
-| Intel | Beata Baranowska | @beatabaranowska |
-+---------------+----------------------+------------------+
-| NXP | Daniel Baluta | @dbaluta |
-+---------------+----------------------+------------------+
-| Google | Johny Lin | @johnylin76 |
-+---------------+----------------------+------------------+
-| Google | Unseated | |
-+---------------+----------------------+------------------+
-| Google | Unseated | |
-+---------------+----------------------+------------------+
-| AMD | Carl Wakeland | @cwakeland |
-+---------------+----------------------+------------------+
-| AMD | Virendra Pratap Arya | @vp-arya |
-+---------------+----------------------+------------------+
-| AMD | Basavaraj Hiregoudar | @bhiregou |
-+---------------+----------------------+------------------+