ACPI platforms (introduced before and up to 2015)¶
On Bay Trail, Cherry Trail, Braswell, and Broadwell devices (also referred toas legacy devices), the DSP enumeration is handled by the ACPIsubsystem.
1. Local audio accessories (mics, speakers, headset)¶
On Bay Trail, Cherry Trail, Braswell, and Broadwell, the BIOS can eitherenable or disable the DSP:
Enable the DSP. In this case, a DSP driver is required. This mode isselected on platforms where the audio interface for 3rd-party codecs is based on the I2C/I2S/TDM interfaces.
Disable the DSP. In this case, an HDaudio controller is exposed and the
snd-intel-hda
driver will take care of all audio usages. SOF cannot be used in this case.
2. HDMI/DP interfaces¶
On Broadwell, HDMI/DP is handled by an HDaudio controller.
On Bay Trail/Cherry Trail and Braswell, the BIOS can enable two modes:
HDAudio-based solution (similar to Broadwell).
LPE HDMI Audio. This mode is used by the majority of tablets and low-costdevices. It provides functionality similar to HDaudio, but with a different interface. This mode is enabled in Linux via the
CONFIG_HDMI_LPE_AUDIO
option.
The DSP cannot control any of these interfaces because SOF does not supportHDMI/DP on those devices.
On all of these legacy platforms, HDMI support is exposed in Linux as aseparate card.
PCI devices (introduced after 2016)¶
In newer devices, the same HDAudio controller can handle both localaccessories and HDMI/DP interfaces. However, SOF is not alwayssupported on those platforms.
When the Intel DSP is not enabled in the BIOS (OEM choice), audiointerfaces are handled by the snd-hda-intel
driver. The platform onlyexposes PCM devices and no audio processing capabilities.
When OEM platforms integrate digital microphones attached directlyto the Intel chipset (aka DMIC), or they use I2C/I2S or SoundWireinterfaces, the DSP must be enabled by the BIOS. There is, however, onemore option. On Skylake and Kaby Lake platforms, the Intel DSP is handled bythe snd-soc-skl
module which relies on closed-source firmware.
SOF is available on Intel PCI devices starting with Gemini Lake, andhas since been the only solution provided by Intel for the followingplatforms: Comet Lake, Ice Lake, and Tiger Lake.
Since multiple drivers can register for the same PCI ID, it was (untilrecently) common for users and distributions to use the wrongdriver, which could only be resolved by changing the Linux .config
fileor deselecting drivers in the /etc/modprobe.d
configuration files.
The snd-intel-dspcfg
module introduced in early 2020 exposes an APIused by all drivers, and the user can now override default choices bysetting the dsp_driver
parameter. For example, setting
options snd-intel-dspcfg dsp_driver=1
will allow for the HDaudio legacy driver to be used. This will typicallywork for speakers and headphones/headsets, but will not allow DMICcapture.
Conversely, when a platform does not require a DSP-based platform, butthe DSP is still enabled by the OEM, the user or integration canforce the SOF Linux driver to be used.
options snd-intel-dspcfg dsp_driver=3
User space and filesystem requirements¶
Selecting the SOF driver is not enough. Audio is properly configured only ifthe following elements are present on the file system.
1. Firmware binary¶
The firmware file, /lib/firmware/intel/sof/sof-tgl.ri
(examplelocation for Intel Tiger Lake), contains all DSP code and tables. OnPCI devices, the firmware can only be signed by an Intel productionkey which prevents community users from installing their own firmware.Notable exceptions include Google Chromebooks and Up2/Up-Extremeboards, where the community key is used.
The Intel ME (Management Engine) is responsible for authentication ofthe firmware, whether it is signed by an Intel production key (consumerproducts), a community key (open development systems and Chromebookssince Gemini Lake) or an OEM key. If the Intel ME is disabled by anOEM, or disabled by user-accessible BIOS options, the firmwareauthentication will fail and the firmware boot will not complete. Ifthe ME is disabled by the OEM, the only solution is to fall-backto the legacy HDAudio driver. If the ME is disabled by the user, the usermust re-enable it. Unfortunately, no documented mechanism exists for theLinux kernel to query whether or not the firmware authentication is enabled,which means dmesg logs cannot be provided to alert the user to an MEconfiguration issue.
Linux SOF will look up firmware files at the following paths:
Platform | IPC type | Firmware load path | Notes |
---|---|---|---|
Raptor Lake and older | IPC3 | /lib/firmware/intel/sof/sof-PLAT.ri | PLAT = glk, cml, …, rpl |
Raptor Lake and older (community signed) | IPC3 | /lib/firmware/intel/sof/community/sof-PLAT.ri | PLAT = glk, cml, …, rpl |
Tiger Lake and newer | IPC4 | /lib/firmware/intel/sof-ipc4/PLAT/sof-PLAT.ri | PLAT = tgl, adl, rpl, mtl, lnl, … |
Tiger Lake and newer (community signed) | IPC4 | /lib/firmware/intel/sof-ipc4/PLAT/community/sof-PLAT.ri | PLAT = tgl, adl, rpl, mtl, lnl, … |
Tiger Lake and newer Loadable Module | IPC4 | /lib/firmware/intel/sof-ipc4-lib/PLAT/UUID.bin | PLAT as above, UUID = UUID of the module |
Tiger Lake and newer Loadable Module (community signed) | IPC4 | /lib/firmware/intel/sof-ipc4-lib/PLAT/community/UUID.bin | PLAT as above, UUID = UUID of the module |
- Important notices:
The standard Linux firmware search path and order is followed. The above table covers the base “/lib/firmware” case. See https://docs.kernel.org/driver-api/firmware/fw_search_path.html for more information.
The firmware folder and filename can be overridden with “fw_path” and “fw_filename” SOF kernel parameters.
The loadable module library path can be overridden with “lib_path” SOF kernel parameter.
2. Topology file¶
The topology file, such as /lib/firmware/intel/sof-tplg/sof-hda-generic-2ch.tplg
, describes the processing graph and controls tobe instantiated by the SOF driver. The topology can be regenerated andreconfigured with tools but requires expert knowledge of the ALSA/ASoC/topology frameworks.
Platform | IPC type | Topology load path | Notes |
---|---|---|---|
Raptor Lake and older | IPC3 | /lib/firmware/intel/sof-tplg/sof-CONFIG.tplg | CONFIG = topology variant needed for detected hardware configuration |
Tiger Lake and newer | IPC4 | /lib/firmware/intel/sof-ipc4-tplg/sof-CONFIG.tplg | CONFIG = topology variant needed for detected hardware configuration |
- Important notices:
For compatibility reasons with respect to Meteor Lake
/lib/firmware/intel/sof-ace-tplg
must be symlinked to/lib/firmware/intel/sof-ipc4-tplg
The standard Linux firmware search path and order is followed. The above table covers the base “/lib/firmware” case. See https://docs.kernel.org/driver-api/firmware/fw_search_path.html for more information.
The topology folder and filename can be overridden with “tplg_path” and “tplg_filename” snd_sof_pci kernel parameters.
3. UCM file¶
The UCM file, such as /usr/share/alsa/ucm2/sof-hda-dsp/
, configuresthe controls exposed by the topology file and the external audiochips. UCM can be used in a terminal via the alsaucm
command butwill typically be used by audio servers such as PulseAudio orPipeWire. UCM files released by Intel are compatible with differentdrivers and should work when changing the dsp_driver
parameter.
The selection of firmware, topology, and UCM files is based on platformcapabilities, codec names, and DMI options. While the SOF team and thecommunity try to cover all possible cases, errors will happen when thewrong file is selected at any of the three layers.
4. Chromebooks and SOF¶
As stated above, starting from 2019/2020, Intel Chromeboooks have beenconfigured with the community key. It means that Chromebooks can runaudio firmware signed by anyone. The entire filesystem is locked bydefault instead, but there are several options to disable security fordevelopment purposes. In all cases the first step is to switch theChromebook to (non-secure) Developer Mode.Developer Mode is the only required step if you onlywant to install and run your own SOF firmware and are not interested inchanging anything else in Chrome OS.
If you need the flexibility to make more changes, Chromebooks can runLinux in several non-mutually exclusive ways. All the options listedbelow let you run any SOF firmware. One of the biggestdifferences between them is how to install and run your own Linuxkernel.
Chrome OS has direct hardware access, but Chrome OS developmentcannot happen on Chrome OS itself. It requires a separate workstationsimilar to how most embedded development typically does. Forinformation about setting up the
cros_sdk
, see the Chromium OSDeveloper Guide.Thecros_sdk
is a complete environment that lets you modifyanything in Chrome OS and even build an entire system image. Thecros_sdk
requires significant disk space and some learningeffort if you are not already familiar with Portage, a build systemin Gentoo, and especially with building the Linux kernel in Portage.Crostiniis a secure Linux Virtual Machine that does not have direct accessto the hardware and cannot be used for SOF. It does not requireDeveloper Mode. Crostini is listed here for completeness. You mightuse Crostini as your pseudo-separate
cros_sdk
workstation, but adifferent, more powerful system that you never have to reboot is amuch bettercros_sdk
option.Crouton is a non-secure chroot that does allow direct hardwareaccess and can be used for SOF. It lets you install a choice ofpopular Linux distributions, which you can use for development on the deviceitself. Make regular backups! The Zephyr project has very detailedspecific instructionson how to use Crouton for SOF. Most of these instructions are notZephyr-specific. With Crouton, you can configure and compile a Linuxkernel as usual. However, the kernel installation process is similarto the
cros_sdk
process with a couple of small twists.Finally, it is possible to dual-boot or completely replaceChrome OS with a regular Linux distribution on some Chromebooks andforget it is a Chromebook entirely. However, this comes at a price: itis the least secure option and the more likely to make your devicepermanently unusable (“brick”). That level of risk is highly dependenton your particular Chromebook model. If that does not scare you, thenhttps://chrx.org/ is a good starting point. Pay special attention tothe note on security. This is the only option that lets you managekernel installations as a typical Linux distribution does.