Firmware: Difference between revisions

From AlsaProject
Jump to navigation Jump to search
No edit summary
No edit summary
Line 115: Line 115:
'''What platforms are supported'''
'''What platforms are supported'''


Sound Open Firmware currently support the Intel Baytrail and Cherrytrail based platforms. This include devices like the Minnowboard MAX and the ASUS T100 laptop, but should alos include any Baytrail/Cherrytrail based device that has the audio DSP enabled in the BIOS.  
Sound Open Firmware currently support the Intel Baytrail and Cherrytrail based platforms. This includes devices like the Minnowboard MAX and the ASUS T100 laptop, but should also include any Baytrail or Cherrytrail based devices that have the audio DSP enabled in the BIOS.  


'''How do I add support for architecture X'''
'''How do I add support for DSP architecture X'''


'''How do I add support for platform X'''
It's straight forward enough to add support for a new DSP architecture. New architectures usually require support for that architecture in the GNU toolchain, although other toolchains can be used too. It also helps to have qemu support for the architecture in order to provide an emulator.
 
'''How do I add support for host platform X'''


'''How do I port to other OSes'''
'''How do I port to other OSes'''

Revision as of 12:56, 10 October 2016

Sound Open Firmware

Sound Open Firmware is an open source audio DSP firmware and SDK intended to provide a generic audio firmware infrastructure and development tools to the community. The firmware is BSD licensed and is platform and architecture agnostic. The SDK is also open source and provides a toolchain, debugger, emulator and firmware image creation tools.

The firmware and SDK currently support the Cadence Xtensa architecture and the Intel Baytrail and Cherrytrail platforms. The current firmware audio features include multiple PCMs with gain controls and mixers.

There is a developer mailing list at http://alsa-project.org/mailman/listinfo/sound-open-firmware.

This page is currently work in progress so please expect frequent updates and corrections.

Installing the SDK

1. Install the firmware image tools.

These tools are used to convert ELF binaries into the file format used by the kernel drivers when loading the firmware.

git clone git://git.alsa-project.org:sound-open-firmware-tools.git soft.git
cd soft.git
./autogen.sh
./configure
make
make install

This will install the 'rimage' and 'rmbox' tools which are used for firmware image creation and firmware debugging respectively.

2. Build and install the GCC xtensa cross compiler toolchain using Crosstool-NG.

A cross toolchain is required to build firmware binaries on x86. Please note that the xtensa GCC compiler does not build optmised Xtensa binaries (i.e. no automatic SIMD or media instructions generated without hand coding assembler). Cadence does provide a free download of their optimising compiler toolchain for the Baytrail target here (todo add link). A modified crosstool-NG is used to build the cross toolchain.

git clone https://github.com/01org/osadsp-crosstool-ng.git ct-ng.git
cd ct-ng.git

Build crosstool-NG

./bootstrap
./configure --prefix=`pwd`
make 
make install

Now build the xtensa cross compiler.

./ct-ng xtensa-byt-elf
./ct-ng build

Finally add the Xtensa cross compiler to your PATH.

PATH=$PWD/builds/xtensa-byt-elf/bin:$PATH

Todo: We are missing some headers like stdint.h from cross gcc tarball. Add note on adding them.

3. Get the firmware source code.

The firmware source code is hosted using git on alsa-project.org

git clone git://git.alsa-project.org:sound-open-firmware.git sof.git
cd sof.git
./configure --with-arch=xtensa --with-platform=baytrail --with-tool-dir=~/path/to/xtensa/gcc/xtensa-byt-elf --host=xtensa-byt-elf
make
make bin

This will create a binary firmware image in src/arch/xtensa/ called reef-byt.ri. This image can now be copied to /lib/firmware/intel where it will be loaded by the Baytrail audio DSP driver.

4. Get the Linux driver updates.

This firmware requires some driver updates and they can be found here :-

git://git.kernel.org/pub/scm/linux/kernel/git/lrg/asoc.git #topic/reef-v4.8

TODO: add instructions to enable the correct kconfig options


5. Optional. Build the Qemu DSP emulator from source.

Qemu needs some extra patches to support heterogeneous virtualization of the guest x86 OS and xtensa firmware. We are using the latest qemu-2.7 release with the support for heterogeneous virtualization and audio DSP hardware on top.

sudo apt-get install libgtk-3-dev libsdl-dev libspice-protocol-dev libspice-server-dev libusb-1.0-0-dev libusbredirhost-dev libtool-bin iasl valgrind texinfo virt-manager kvm libvirt-bin virtinst
git clone https://github.com/01org/osadsp-qemu.git
cd osadsp-qemu.git
./configure --prefix=. --target-list=xtensa-softmmu,x86_64-softmmu --enable-gtk --enable-sdl --enable-spice --audio-drv-list=alsa --enable-libusb --enable-usb-redir --enable-coroutine-pool --disable-opengl --enable-fdt
make

Please do not install this version of Qemu as it will overwrite your distro version of Qemu.

Running the Firmware

TODO

Firmware Architecture

TODO

Driver Architecture

TODO

Using the Qemu DSP emulator

TODO

Debugging Firmware

TODO

FAQ

What license does the firmware and SDK use ?

The firmware is released using a standard BSD license with some parts MIT. The SDK is GPL.

What architectures are supported

Sound Open Firmware currently supports the Cadence/Tensilica Xtensa audio DSP architecture and ISA.

What platforms are supported

Sound Open Firmware currently support the Intel Baytrail and Cherrytrail based platforms. This includes devices like the Minnowboard MAX and the ASUS T100 laptop, but should also include any Baytrail or Cherrytrail based devices that have the audio DSP enabled in the BIOS.

How do I add support for DSP architecture X

It's straight forward enough to add support for a new DSP architecture. New architectures usually require support for that architecture in the GNU toolchain, although other toolchains can be used too. It also helps to have qemu support for the architecture in order to provide an emulator.

How do I add support for host platform X

How do I port to other OSes

What audio components are supported

How do I create my own pipelines