Audio Back End
This article is a stub and needs expanding.
Overview
ABE is part of omap4 (all variants) and omap5, and does not appear to have changed in any major way since its introduction.
ABE components (targets on ABE interconnect):
- external interfaces:
- custom interface (mcpdm) to TWL6040/TWL6041 audio IC
- digital microphone controller (dmic)
- digital audio interfaces (mcbsp1-3, mcasp)
- mipi slimbus interface (slimbus1), defeatured on omap5
- four timers (gptimer5-8) with external trigger input / pwm output.
- watchdog (wdt3)
- audio engine subsystem (aess)
Initiators to the ABE interconnect:
- audio engine subsystem (local initiator) embeds dedicated dma controller (audio transfer controller) for local transfers between ABE components
- L3 interconnect
- Cortex-A15 subsystem (mpuss) via private dedicated link
- Tesla DSP subsystem (including EDMA) via private dedicated link
The private links from mpuss and dspss are intended for use in low-power scenarios, to avoid waking up the entire L3 interconnect. Note that the audio transfer controller (atc) cannot reach outside ABE. DMA between ABE and ddr3 memory is handled by the system dma controller (sdma) via the L3 interconnect.
Audio Engine Subsystem
The AE is the core of the ABE subsystem. It performs the real-time audio processing within the ABE: mixing, muxing, volume control, smooth muting, sampling rate conversion, and side-tone equalization.
Custom dedicated DSP (unrelated to the Tesla DSP) for audio processing.
Embeds local memories:
- DMEM: 64 KB data memory
- CMEM: 6 KB coefficient memory
- SMEM: 18 KB sample memory
- PMEM: 8 KB program memory
Audio traffic controller (ATC)
- performs local DMA (within ABE)
- generates interrupt requests to cortex-a15 and tesla DSP
- generates requests to sDMA (system dma controller) and EDMA (Tesla subsystem DMA controller)
AE is considered to be fixed-function by TI, only supports a one-time firmware upload after cold boot. Unknown 32-bit instruction set. Helpfully, three slightly different versions of the firmware are provided, which made it easy identify branch-like instructions. Histogram of instructions across all three firmwares.
Documentation / Resources
- ABE HAL documentation
- The Audio Drive Arch page on omappedia describes the ABE firmware and kernel driver.
- ABE firmware repo, my mirror with a bit a tidying. Besides the firmware this repo also includes headers with offsets into AE's memories and abstraction code, or something. Haven't examined it in detail yet.
- TI Linux 3.8 (mirror) seems to be the last version that still included support for ABE, as well as the OMAP5-sEVM. See sound/soc/omap/aess in particular.
- Actually, omap-audio has a 3.15 branch. Does it work on OMAP 5 though?
- Update: Peter Ujfalusi recommends trying to forward-port the 3.15 branch rather than the 3.8 branch.