BeagleBoard/DSP Howto
This article explains how to use the DSP in OMAP3 at BeagleBoard using the bridge driver kernel module. For DSP tool chain see C64x+ DSP.
DSP Bridge driver provides features to control and communicate with DSP enabling parallel processing for multimedia acceleration. It enables the applications running on MPU to offload the processing to DSP [1].
Some of the key features of DSP Bridge are:
- Messaging: Ability to exchange fixed size control messages with DSP
- Dynamic memory management: Ability to dynamically map files to DSP address space
- Dynamic loading: Ability to dynamically load new nodes on DSP at run time
- Power Management: Static and dynamic power management for DSP
Contents
Setup
In order to enable the DSP in your OMAP3 the procedure is two-fold:
- GPP side (ARM side): Enable the bridge driver kernel module.
- DSP side: Set the required files in the filesystem.
- Most of these files are, right now, TI's proprietary binaries.
Kernel driver
In order to use the DSP you would need TI's bridgedriver module on the kernel. You can use the linux-omap repository's branch at kernel.org:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git cd linux-omap-2.6 git checkout -b dspbridge orgin/dspbridge
Warning: This module currently is under heavy development. If you want be updated you should pull for changes weekly or so. Besides, this how-to could be already deprecated.
The default configuration for the beagle board doesn't enable de bridgedriver. You should build you own using
make menuconfig
or fetching the one used in marmita:
wget http://gitorious.org/vjaquez-beagleboard/marmita/blobs/raw/master/meta-marmita/linux/linux-omap-bridgedriver/defconfig -O .config
If you want DSS2 support for the Beagleboard, you should apply this patch in your kernel code: https://patchwork.kernel.org/patch/94049/
wget -q https://patchwork.kernel.org/patch/94049/mbox/ -O - | git am --3way
Then build the uImage as usual and install the modules on your rootfs:
make oldconfig make make uImage make INSTALL_MOD_PATH=/media/rootfs modules_install
TI's DSP binaries
In order to get the DSP binaries for multimedia processing you need to download them from TI's OpenMAX IL project. The most important binary is baseimage.dof
, which is the BIOS image to be loaded into the DSP.
The latests release of these binaries for mainstream Linux is v3.09 for L23i3.3.
Most of the public releases are published in TI's gforge.
v3.09
Download the binary package and extract its content:
wget --no-check-certificate https://gforge.ti.com/gf/download/frsrelease/285/3260/DSPbinaries-3.09-Linux-x86-Install chmod +x ./DSPbinaries-3.09-Linux-x86-Install ./DSPbinaries-3.09-Linux-x86-Install --mode console --prefix /tmp
Then copy those binaries into the directory lib/dsp
in your root filesystem (/media/rootfs
is assumed here):
mkdir /media/rootfs/lib/dsp cp /tmp/Binaries/* /media/rootfs/lib/dsp
v0.3.5
wget --no-check-certificate https://gforge.ti.com/gf/download/frsrelease/170/1399/tiopenmax-0.3.5.tar.gz tar xvf ./tiopenmax-0.3.5.tar.gz cd tiopenmax-0.3.5 ./TI-OMX-Sample-Firmware-0.3.5-Linux-x86-Install
Accept the license agreement and copy the binaries into the directory lib/dsp
in your root filesystem:
mkdir /media/rootfs/lib/dsp cp ./lib/dsp/* /media/rootfs/lib/dsp
v0.3
wget --no-check-certificate https://gforge.ti.com/gf/download/frsrelease/111/396/tiopenmax-0.3.tar.gz tar xvf ./tiopenmax-0.3.tar.gz cd tiopenmax-0.3 ./TI-OMX-Sample-Firmware-0.3-Linux-x86-Install
Accept the license agreement and copy the binaries into the directory lib/dsp
in your root filesystem:
mkdir /media/rootfs/lib/dsp cp ./lib/dsp/* /media/rootfs/lib/dsp
Running
On the board use these commands to load the module:
modprobe mailbox modprobe bridgedriver base_img=/lib/dsp/baseimage.dof
ping test
If you want to test the DSP you can try the simple ping test provided in this package. The package provide a set of already compiled tests, either for ARM-side and DSP-side.
Installing shortcut:
wget -q --no-check-certificate https://omapzoom.org/gf/download/frsrelease/132/632/dspbridge_binaries.tar.bz2 -O - \ | tar xjvf - --strip-components 1 --wildcards dspbridge_binaries/ping* cp ping.out /media/rootfs # ARM-side app cp pingdyn_3430.dll64P /media/rootfs/lib/dsp # DSP-side socket node
In the board just:
./ping.out
If you get an error like:
DSPNode_Allocate failed: 0x80008008
Then it's possible that the ping DSP socket node is not loaded. If you use 'baseimage.dof' you need to load it dynamically:
./dynreg.out -r pingdyn_3430.dll64P
Developing
There are two ways to compile your own DSP nodes:
- The official one, which requires DSP/BIOS and RTSC/XDC tools
- The simplified one (used by Felipe Contreras)
But either way, you will need the TI's DSP toolchain: C6x compiler CGT 6.0.22 (Code Generation Tools). Please note that you might be required to register to gain access to those files.
This HOWTO assumes that the DSP toolchain are installed under /opt/dsp/cgt6x-6.0.22
.
Official
These instructions are taken from DSPBridge project wiki page at omapedia.
Install build dependencies
- DSP/BIOS 5.33.04
- RTSC/XDCtools 3.10.02
Also, here is assumed that those packages are installed in /opt/dsp
.
Building the user space binaries
git clone git://dev.omapzoom.org/pub/scm/tidspbridge/userspace-dspbridge.git cd userpace-dspbridge
Edit "product.mak" to match the version of your tools.
# DSP BIOS
SABIOS_VER = 5.33.04
SABIOS_VER_2 = 5_33_04
# CodeGen Tools
CGT55_VER = 3.2.2
CGT6X_VER = 6.0.22
Then run:
make .dsp DD_XDCDIR=/opt/dsp/xdctools_3_10_02 SABIOS_DIR=/opt/dsp/bios_5_33_04/packages DEPOT=/opt/dsp
Other make options:
make clean # clean all make all # clean, compile and install all make .api # clean, compile and install API only make .samples # clean, compile and install samples only make .dsp # clean, compile and install DSP binaires only
The output will be installed under userpace-dspbridge/source/target
Simplified
In this mode we will only need the DSP toolchains and the doffbuild tools. In this case, the test C6x compiler version is v6.1.7 or greater.
doffbuild tools
The only relevant tool is DLLcreate, which can be found in the userspace-dpsbridge repository, but we can only extract what we need in this way:
mkdir -p /opt/doffbuild/bin cd /opt wget -q "http://dev.omapzoom.org/?p=tidspbridge/userspace-dspbridge.git;a=blob_plain;f=source/dsp/bdsptools/bridge-tools.tar;hb=HEAD" -O - \ | tar xf - --strip-components 3 --wildcards ti/dspbridge/dsp/doffbuild/bin/*
DSP nodes samples
Here is a couple of DSP node samples built using the simplified approach.
- dummy simply passing buffers back and forth
- ping send a message to the DSP waiting a reply
git clone git://gitorious.org/vjaquez-beagleboard/dsp-samples.git make DSP_TOOLS=/opt/dsptools DSP_DOFFBUILD=/opt/doffbuild make install DESTDIR=/media/rootfs
Now you can run the dummy and the ping test applications.