diff options
Diffstat (limited to 'extras/recipes-ti')
98 files changed, 7038 insertions, 0 deletions
diff --git a/extras/recipes-ti/bios/ti-biosutils.inc b/extras/recipes-ti/bios/ti-biosutils.inc new file mode 100644 index 00000000..d562c2dd --- /dev/null +++ b/extras/recipes-ti/bios/ti-biosutils.inc @@ -0,0 +1,18 @@ +DESCRIPTION = "TI DSP/BIOS Utilities" +HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/Bios_Utils" +SECTION = "devel" +LICENSE = "TI" +LIC_FILES_CHKSUM = "file://packages/ti/bios/utils/Load.c;md5=e666d585907c3456e82b7e10f7a09a73" + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc + +S = "${WORKDIR}/biosutils_${PV}" + +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/Bios_Utils/${PV}${PVsuffix}/exports/biosutils_${PV}.tar.gz;name=biosutilstarball" + +do_install() { + install -d ${D}${BIOSUTILS_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${BIOSUTILS_INSTALL_DIR_RECIPE} +} + diff --git a/extras/recipes-ti/bios/ti-biosutils_1.02.02.bb b/extras/recipes-ti/bios/ti-biosutils_1.02.02.bb new file mode 100644 index 00000000..918f1240 --- /dev/null +++ b/extras/recipes-ti/bios/ti-biosutils_1.02.02.bb @@ -0,0 +1,8 @@ +require ti-biosutils.inc + +PV = "1_02_02" +PVsuffix = "_02" + +SRC_URI[biosutilstarball.md5sum] = "0654e9e72b0a6fc7a6575829c0cd90c9" +SRC_URI[biosutilstarball.sha256sum] = "df486500bdc8dbe3800fc7efe4241e6fa5b1827ba7c0dc17a71b41d42ef921e1" + diff --git a/extras/recipes-ti/bios/ti-dspbios.inc b/extras/recipes-ti/bios/ti-dspbios.inc new file mode 100644 index 00000000..0e3fa62d --- /dev/null +++ b/extras/recipes-ti/bios/ti-dspbios.inc @@ -0,0 +1,25 @@ +DESCRIPTION = "TI DSP/BIOS v5 Kernel" +HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bios/dspbios" +SECTION = "devel" +LICENSE = "TI" + +# We can't depend on license files to be present, so just use the TI logo +LIC_FILES_CHKSUM = "file://docs/tilogo.gif;md5=f049a774c576a5cef3fca4932d707b39" + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc +require ../includes/ti-eula-unpack.inc + +TI_BIN_UNPK_WDEXT="/bios_${PV}" +S = "${WORKDIR}${TI_BIN_UNPK_WDEXT}" + +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bios/dspbios/${PV}/exports/bios_setuplinux_${PV}.bin;name=biosbin" + +BINFILE="bios_setuplinux_${PV}.bin" +TI_BIN_UNPK_CMDS="Y: qY:workdir:Y" + +do_install() { + install -d ${D}${BIOS_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${BIOS_INSTALL_DIR_RECIPE} +} + diff --git a/extras/recipes-ti/bios/ti-dspbios_5.41.11.38.bb b/extras/recipes-ti/bios/ti-dspbios_5.41.11.38.bb new file mode 100644 index 00000000..9e3b695a --- /dev/null +++ b/extras/recipes-ti/bios/ti-dspbios_5.41.11.38.bb @@ -0,0 +1,7 @@ +require ti-dspbios.inc + +PV = "5_41_11_38" + +SRC_URI[biosbin.md5sum] = "7fab13740c25f5b34b331bcdc759536e" +SRC_URI[biosbin.sha256sum] = "96b8e090f79420a4c11d9c0c10d182d1d3b4afb48f11ec375c97b4c91970d0a0" + diff --git a/extras/recipes-ti/bios/ti-sysbios.inc b/extras/recipes-ti/bios/ti-sysbios.inc new file mode 100644 index 00000000..d04a1581 --- /dev/null +++ b/extras/recipes-ti/bios/ti-sysbios.inc @@ -0,0 +1,21 @@ +DESCRIPTION = "TI SYS/BIOS v6 Kernel" +HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bios/sysbios" +SECTION = "devel" +LICENSE = "BSD" + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc +require ../includes/ti-eula-unpack.inc + +S = "${WORKDIR}/bios_${PV}" + +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bios/sysbios/${PV}/exports/bios_setuplinux_${PV}.bin;name=sysbiosbin" + +BINFILE="bios_setuplinux_${PV}.bin" +TI_BIN_UNPK_CMDS="Y: q:workdir:Y" + +do_install() { + install -d ${D}${SYSBIOS_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${SYSBIOS_INSTALL_DIR_RECIPE} +} + diff --git a/extras/recipes-ti/bios/ti-sysbios_6.33.00.19.bb b/extras/recipes-ti/bios/ti-sysbios_6.33.00.19.bb new file mode 100644 index 00000000..4e2b4456 --- /dev/null +++ b/extras/recipes-ti/bios/ti-sysbios_6.33.00.19.bb @@ -0,0 +1,9 @@ +require ti-sysbios.inc + +PV = "6_33_00_19" +LIC_FILES_CHKSUM = "file://sysbios_${PV}_manifest.html;md5=94136ca9815f76603b7202a41f1d6f5e" + +SRC_URI[sysbiosbin.md5sum] = "e1a2f28a8b3087896bbd986696e1a908" +SRC_URI[sysbiosbin.sha256sum] = "b7e096662f5d928eb818bbb14474deb1e3e038fea34b516b248de637835121ec" + +S = "${WORKDIR}/ti/bios_${PV}" diff --git a/extras/recipes-ti/c6accel/ti-c6accel.inc b/extras/recipes-ti/c6accel/ti-c6accel.inc new file mode 100644 index 00000000..638c9be3 --- /dev/null +++ b/extras/recipes-ti/c6accel/ti-c6accel.inc @@ -0,0 +1,89 @@ +DESCRIPTION = "TI C6Accel - DSP Software Libraries on ARM" +HOMEPAGE = "https://gforge01.dal.design.ti.com/gf/project/dsplib4arm/" + +SECTION = "devel" +LICENSE = "TI TSPA" + +require recipes-ti/includes/ti-paths.inc +require recipes-ti/includes/ti-staging.inc +require recipes-ti/includes/ti-eula-unpack.inc + +PLATFORM_omapl138 = "omapl138" +PLATFORM_omap3 = "omap3530" +PLATFORM ?= "UNDEFINED_PLATFORM" + +COMPATIBLE_MACHINE = "(omapl138|omap3)" + +PROVIDES += "ti-c6accel-apps" + +# This recipe links statically against kernel dependant stuff, use kernel PR as base and append a local version +PR = "${MACHINE_KERNEL_PR}" +PR_append = "a" + +S = "${WORKDIR}/c6accel_${PV}" + +# http://software-dl.ti.com/dsps/dsps_public_sw/c6000/web/c6accel/latest/index_FDS.html +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/c6000/web/c6accel/latest/exports//c6accel_${PV}_Linux-x86_Setup.bin;name=c6accelbin " + +BINFILE="c6accel_${PV}_Linux-x86_Setup.bin" +TI_BIN_UNPK_CMDS="Y:workdir" + +DEPENDS = "ti-codec-engine ti-xdais ti-dsplink ti-dspbios" +DEPENDS += "ti-edma3lld ti-cgt6x ti-xdctools ti-framework-components" +DEPENDS += "ti-biosutils" + +TIARGS = ' \ + PLATFORM="${PLATFORM}" \ + CE_INSTALL_DIR="${CE_INSTALL_DIR}" \ + XDAIS_INSTALL_DIR="${XDAIS_INSTALL_DIR}" \ + LINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \ + CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \ + EDMA3_LLD_INSTALL_DIR="${EDMA3_LLD_INSTALL_DIR}" \ + CODEGEN_INSTALL_DIR="${CODEGEN_INSTALL_DIR}" \ + XDC_INSTALL_DIR="${XDC_INSTALL_DIR}" \ + FC_INSTALL_DIR="${FC_INSTALL_DIR}" \ + BIOS_INSTALL_DIR="${BIOS_INSTALL_DIR}" \ + BIOSUTILS_INSTALL_DIR="${BIOSUTILS_INSTALL_DIR}" \ + LPM_INSTALL_DIR="${LPM_INSTALL_DIR}" \ + SERVER_INSTALL_DIR="${CODEC_INSTALL_DIR}" \ + C6ACCEL_INSTALL_DIR="${S}" \ + CSTOOL_DIR="${TOOLCHAIN_PATH}" \ + CSTOOL_PREFIX="${TOOLCHAIN_PATH}/${TARGET_PREFIX}" \ + LINUXLIBS_INSTALL_DIR="${STAGING_DIR_TARGET}" \ + CFLAGS=" ${TARGET_CC_ARCH} ${CFLAGS}" LDFLAGS="${LDFLAGS}" \ +' + +do_configure() { + unset VERBOSE + make ${TIARGS} clean + sed -i -e 's:-L$(LINUXLIBS_INSTALL_DIR)/lib:-L$(LINUXLIBS_INSTALL_DIR)/lib -L$(LINUXLIBS_INSTALL_DIR)/usr/lib ${LDFLAGS}:' ${S}/soc/app/Makefile +} + +do_compile() { + unset VERBOSE + make ${TIARGS} all +} + +do_install() { + install -d ${D}${C6ACCEL_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${C6ACCEL_INSTALL_DIR_RECIPE} + + # update linker.cmd file to point to sysroot + sed -i ${i} -e s=${S}=${C6ACCEL_INSTALL_DIR}=g ${D}${C6ACCEL_INSTALL_DIR_RECIPE}/soc/app/c6accel_app_config/linker.cmd + + cd ${S} + make \ + PLATFORM="${PLATFORM}" \ + CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \ + LINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \ + LPM_INSTALL_DIR="${LPM_INSTALL_DIR}" \ + C6ACCEL_INSTALL_DIR="${S}" \ + EXEC_DIR_C6ACCEL="${D}/${installdir}/c6accel-apps" \ + install +} + +PACKAGES += "ti-c6accel-apps" +FILES_ti-c6accel-apps = "${installdir}/c6accel-apps/*" +INSANE_SKIP_ti-c6accel-apps = "1" +RDEPENDS_ti-c6accel-apps += "ti-cmem-module ti-dsplink-module" + diff --git a/extras/recipes-ti/c6accel/ti-c6accel/0001-soc-honour-buildsystem-CFLAGS-and-LDFLAGS-when-set.patch b/extras/recipes-ti/c6accel/ti-c6accel/0001-soc-honour-buildsystem-CFLAGS-and-LDFLAGS-when-set.patch new file mode 100644 index 00000000..a108c6e0 --- /dev/null +++ b/extras/recipes-ti/c6accel/ti-c6accel/0001-soc-honour-buildsystem-CFLAGS-and-LDFLAGS-when-set.patch @@ -0,0 +1,82 @@ +From 192b19046a67263da44203bf50a5b51d0a655fec Mon Sep 17 00:00:00 2001 +From: Koen Kooi <koen@dominion.thruhere.net> +Date: Fri, 31 Dec 2010 15:26:37 +0100 +Subject: [PATCH] soc: honour buildsystem CFLAGS and LDFLAGS when set + +Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> +--- + soc/app/Makefile | 13 ++++--------- + soc/c6accelw/Makefile | 14 ++++---------- + 2 files changed, 8 insertions(+), 19 deletions(-) + +diff --git a/soc/app/Makefile b/soc/app/Makefile +index 2647746..bed937e 100755 +--- a/soc/app/Makefile ++++ b/soc/app/Makefile +@@ -53,15 +53,10 @@ CONFIGURO = $(XDC_INSTALL_DIR)/xs xdc.tools.configuro + CONFIG_BLD = ../../config.bld
+
+ ifeq ($(BUILD_TYPE), release)
+-ifeq ($(ARM_ISA),armv7-a)
+- C_FLAGS += -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp
+-endif
+-ifeq ($(ARM_ISA),armv5t)
+- C_FLAGS += -mlittle-endian -march=armv5t -mtune=arm9tdmi -mabi=aapcs-linux -O
+-endif
++C_FLAGS += $(CFLAGS)
+ else
+ CPP_FLAGS += -DNDEBUG
+- C_FLAGS += -Wall -g
++ C_FLAGS += $(CFLAGS) -Wall -g
+ endif
+
+
+@@ -72,7 +67,7 @@ ifeq ($(PLATFORM),omapl138) + C_FLAGS += -DPLATFORM=138
+ endif
+
+-LD_FLAGS += -L$(LINUXLIBS_INSTALL_DIR)/lib -lm -lpthread
++LD_FLAGS += $(LDFLAGS) -L$(LINUXLIBS_INSTALL_DIR)/lib -lm -lpthread
+ C6ACCEL_LIB += ../c6accelw/lib/c6accelw_$(PLATFORM).a470MV
+
+ COMPILE.c = $(VERBOSE) $(CSTOOL_PREFIX)gcc $(CPP_FLAGS) $(C_FLAGS) $(CPP_FLAGS) -c
+@@ -102,7 +97,7 @@ $(TARGET): $(OBJFILES) $(C6ACCEL_LIB) $(XDC_LFILE) +
+ $(OBJFILES): %.o: %.c $(HEADERS) $(XDC_CFLAGS)
+ @echo Compiling $@ from $<..
+- $(COMPILE.c) $(shell cat $(XDC_CFLAGS)) -o $@ $<
++ $(COMPILE.c) $(shell cat $(XDC_CFLAGS) | sed 's:-march=armv5t::g') -o $@ $<
+
+ $(XDC_LFILE) $(XDC_CFLAGS): $(XDC_CFGFILE)
+ @echo
+diff --git a/soc/c6accelw/Makefile b/soc/c6accelw/Makefile +index cc58acf..298ab3b 100755 +--- a/soc/c6accelw/Makefile ++++ b/soc/c6accelw/Makefile +@@ -21,19 +21,13 @@ BUILD_TYPE=release + CPP_FLAGS += -I../packages -I$(XDC_INSTALL_DIR)/packages -I$(CE_INSTALL_DIR)/packages -I$(XDAIS_INSTALL_DIR)/packages -Dxdc_target_name__=arm/GCArmv5T -Dxdc_target_types__=gnu/targets/std.h
+
+ ifeq ($(BUILD_TYPE), release)
+-ifeq ($(ARM_ISA),armv7-a)
+- C_FLAGS += -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp
+- endif
+-ifeq ($(ARM_ISA),armv5t)
+- C_FLAGS += -mlittle-endian -march=armv5t -mtune=arm9tdmi -mabi=aapcs-linux -O
+- endif
+-
++C_FLAGS += $(CFLAGS)
+ else
+- CPP_FLAGS += -DNDEBUG
+- C_FLAGS += -Wall -g
++ CPP_FLAGS += -DNDEBUG
++ C_FLAGS += $(CFLAGS) -Wall -g
+ endif
+
+-LD_FLAGS += -L$(LINUXLIBS_INSTALL_DIR)/lib
++LD_FLAGS += $(LDFLAGS) -L$(LINUXLIBS_INSTALL_DIR)/lib
+ AR_FLAGS +=
+
+ COMPILE.c = $(VERBOSE) $(CSTOOL_PREFIX)gcc $(CPP_FLAGS) $(C_FLAGS) -c
+-- +1.6.6.1 + diff --git a/extras/recipes-ti/c6accel/ti-c6accel/fix-loadmodule.patch b/extras/recipes-ti/c6accel/ti-c6accel/fix-loadmodule.patch new file mode 100644 index 00000000..9921f29e --- /dev/null +++ b/extras/recipes-ti/c6accel/ti-c6accel/fix-loadmodule.patch @@ -0,0 +1,81 @@ +diff -uNr c6accel_1_00_00_04_orig/soc/app/omap3530/loadmodules_omap3530_c6accel.sh c6accel_1_00_00_04/soc/app/omap3530/loadmodules_omap3530_c6accel.sh +--- c6accel_1_00_00_04_orig/soc/app/omap3530/loadmodules_omap3530_c6accel.sh 2010-07-26 16:18:35.000000000 -0500 ++++ c6accel_1_00_00_04/soc/app/omap3530/loadmodules_omap3530_c6accel.sh 2010-09-12 11:50:46.129159981 -0500 +@@ -1,4 +1,4 @@ +-# loadmodules.sh ++#!/bin/sh + # + # Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/ + # +@@ -11,34 +11,16 @@ + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + # Lesser General Public License for more details. + +-# +-# Default Memory Map +-# +-# Start Addr Size Description +-# ------------------------------------------- +-# 0x80000000 88 MB Linux +-# 0x85800000 08 MB CMEM +-# 0x86800000 24 MB DDRALGHEAP +-# 0x87800000 6 MB DDR2 (BIOS, Codecs, Applications) +-# 0x87E00000 1 MB DSPLINK (MEM) +-# 0x87F00000 4 KB DSPLINK (RESET) +-# 0x87F01000 1020 KB unused +-rmmod cmemk.ko +-rmmod lpm_omap3530.ko +-rmmod dsplinkk +-# Allocate 15MB for CMEM +-insmod cmemk.ko phys_start=0x86300000 phys_end=0x87200000 pools=20x4096 ++# remove previously loaded cmem to ensure that it configured to use our pool configuration ++rmmod cmemk 2>/dev/null + +-# insert DSP/BIOS Link driver +-# +-insmod dsplinkk.ko ++# Allocate 15MB for CMEM ++modprobe cmemk phys_start=0x86300000 phys_end=0x87200000 pools=20x4096 allowOverlap=1 ++modprobe dsplinkk ++modprobe lpm_omap3530 + + # make /dev/dsplink + rm -rf /dev/dsplink + mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0 + + +-# insert Local Power Manager driver +-# +-insmod lpm_omap3530.ko +- +diff -uNr c6accel_1_00_00_04_orig/soc/app/omapl138/loadmodules_omapl138_c6accel.sh c6accel_1_00_00_04/soc/app/omapl138/loadmodules_omapl138_c6accel.sh +--- c6accel_1_00_00_04_orig/soc/app/omapl138/loadmodules_omapl138_c6accel.sh 2010-07-27 09:45:37.000000000 -0500 ++++ c6accel_1_00_00_04/soc/app/omapl138/loadmodules_omapl138_c6accel.sh 2010-09-12 11:52:07.193160179 -0500 +@@ -1,4 +1,4 @@ +-# ++#!/bin/sh + # Copyright (c) 2008, Texas Instruments Incorporated + # All rights reserved. + # +@@ -29,15 +29,14 @@ + # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # +-rmmod dsplinkk.ko +-rmmod cmemk.ko ++ ++# remove previously loaded cmem to ensure that its configured to use our pool configuration. ++rmmod cmemk 2>/dev/null ++ + # insert cmemk, tell it to occupy physical 120MB-128MB, create + # 20 4K buffers, 10 128K buffers and two 1MB buffers +-insmod cmemk.ko phys_start=0xC2000000 phys_end=0xC4000000 pools=20x4096 +- +-# insert DSP/BIOS Link driver +-# +-insmod dsplinkk.ko ++modprobe cmemk phys_start=0xC2000000 phys_end=0xC4000000 pools=20x4096 allowOverlap=1 ++modprobe dsplinkk + + # make /dev/dsplink + rm -f /dev/dsplink diff --git a/extras/recipes-ti/c6accel/ti-c6accel_1.01.00.06.bb b/extras/recipes-ti/c6accel/ti-c6accel_1.01.00.06.bb new file mode 100644 index 00000000..61263c53 --- /dev/null +++ b/extras/recipes-ti/c6accel/ti-c6accel_1.01.00.06.bb @@ -0,0 +1,16 @@ +require ti-c6accel.inc + +SRC_URI[c6accelbin.md5sum] = "4cfb9ae9d1b69954a22b454726d4d6cb" +SRC_URI[c6accelbin.sha256sum] = "9fac3295c5c8533535e18f96c9a31c446f5a275798ace8c145f9ed51fa3e3ece" + +LIC_FILES_CHKSUM = "file://docs/ReleaseNotes_C6Accel.txt;md5=28fbd64e0ba4a1af1a2f1179024f38a9" + +SSRC_URI_append = " \ + file://0001-soc-honour-buildsystem-CFLAGS-and-LDFLAGS-when-set.patch \ + " + +PV = "1_01_00_06" + + +CFLAGS += "-fPIC" + diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine.inc b/extras/recipes-ti/codec-engine/ti-codec-engine.inc new file mode 100644 index 00000000..15bd4642 --- /dev/null +++ b/extras/recipes-ti/codec-engine/ti-codec-engine.inc @@ -0,0 +1,199 @@ +DESCRIPTION = "Codec Engine for TI ARM/DSP processors" +HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ce" +SECTION = "devel" +LICENSE = "BSD" + +# TODO :: Add Codec Engine Library Rebuild +# TODO :: Add Examples APP_LOCAL build as well? +# TODO :: Check DEPENDS - are the DSP side packages required for ARM-only products? + +require recipes-ti/includes/ti-paths.inc +require recipes-ti/includes/ti-staging.inc + +PROVIDES += "ti-codec-engine-examples" + +PR = "${MACHINE_KERNEL_PR}" + +S = "${WORKDIR}/codec_engine_${PV}" + +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ce/${PV}/exports/codec_engine_${PV},lite.tar.gz;name=cetarball " + +DEPENDS = "ti-framework-components ti-xdais ti-xdctools ti-linuxutils" +DEPENDS_append_dm6446 = " ti-dspbios ti-dsplink ti-local-power-manager ti-cgt6x ti-biosutils ti-edma3lld" +DEPENDS_append_dm6467 = " ti-dspbios ti-dsplink ti-cgt6x ti-biosutils ti-edma3lld" +DEPENDS_append_omap3 = " ti-dspbios ti-dsplink ti-local-power-manager ti-cgt6x ti-biosutils ti-edma3lld" +DEPENDS_append_omapl137 = " ti-dspbios ti-dsplink ti-cgt6x ti-biosutils ti-edma3lld" +DEPENDS_append_omapl138 = " ti-dspbios ti-dsplink ti-cgt6x ti-biosutils ti-edma3lld" + +# SOC_FAMILY configuration + +# Define DEVICES variable +CEEXAMPLESDEVICES_dm6446 = "DM6446" +CEEXAMPLESDEVICES_dm6467 = "DM6467" +CEEXAMPLESDEVICES_omap3 = "OMAP3530" +CEEXAMPLESDEVICES_dm355 = "DM355" +CEEXAMPLESDEVICES_dm365 = "DM365" +CEEXAMPLESDEVICES_omapl137 = "OMAPL137" +CEEXAMPLESDEVICES_omapl138 = "OMAPL138" +CEEXAMPLESDEVICES ?= "<UNDEFINED_CEEXAMPLESDEVICES>" + +# Define GPPOS variable +CEEXAMPLESGPPOS_dm6446 = "LINUX_GCC" +CEEXAMPLESGPPOS_dm6467 = "LINUX_GCC" +CEEXAMPLESGPPOS_omap3 = "LINUX_GCC" +CEEXAMPLESGPPOS_dm355 = "LINUX_GCC" +CEEXAMPLESGPPOS_dm365 = "LINUX_GCC" +CEEXAMPLESGPPOS_omapl137 = "LINUX_GCC" +CEEXAMPLESGPPOS_omapl138 = "LINUX_GCC" +CEEXAMPLESGPPOS ?= "<UNDEFINED_CEEXAMPLESGPPOS>" + +# Define PROGRAM variable +CEEXAMPLESPROGRAMS_dm6446 = "APP_CLIENT DSP_SERVER" +CEEXAMPLESPROGRAMS_dm6467 = "APP_CLIENT DSP_SERVER" +CEEXAMPLESPROGRAMS_omap3 = "APP_CLIENT DSP_SERVER" +CEEXAMPLESPROGRAMS_dm355 = "APP_LOCAL" +CEEXAMPLESPROGRAMS_dm365 = "APP_LOCAL" +CEEXAMPLESPROGRAMS_omapl137 = "APP_CLIENT DSP_SERVER" +CEEXAMPLESPROGRAMS_omapl138 = "APP_CLIENT DSP_SERVER" +CEEXAMPLESPROGRAMS ?= "<UNDEFINED_CEEXAMPLESPROGRAMS>" + +do_configure() { + + # No way to pass this via ENV? + sed -i \ + -e s:arm-none-linux-gnueabi-:${TARGET_PREFIX}:g \ + ${S}/examples/xdcpaths.mak + + # compiler is not under ${TOOLCHAIN_PATH}/bin anymore... + sed -i \ + -e s:bin/${TARGET_PREFIX}gcc:${TARGET_PREFIX}gcc:g \ + ${S}/examples/xdcpaths.mak + + # ... and ar is not there too +# sed -i \ +# -e s:/arm-angstrom-linux-gnueabi/bin/ar:/arm-angstrom-linux-gnueabi-ar:g \ +# ${S}/examples/ti/xdais/dm/examples/viddec1_copy/package.mak +} + +do_prepsources() { + + for i in codecs extensions servers apps ; do + cd ${S}/examples/ti/sdo/ce/examples/$i + make DEVICES="${CEEXAMPLESDEVICES}" \ + GPPOS="${CEEXAMPLESGPPOS}" \ + PROGRAMS="${CEEXAMPLESPROGRAMS}" \ + CE_INSTALL_DIR="${S}" \ + XDC_INSTALL_DIR="${XDC_INSTALL_DIR}" \ + BIOS_INSTALL_DIR="${BIOS_INSTALL_DIR}" \ + BIOSUTILS_INSTALL_DIR="${BIOSUTILS_INSTALL_DIR}" \ + DSPLINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \ + XDAIS_INSTALL_DIR="${XDAIS_INSTALL_DIR}" \ + FC_INSTALL_DIR="${FC_INSTALL_DIR}" \ + CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \ + LPM_INSTALL_DIR="${LPM_INSTALL_DIR}" \ + EDMA3_LLD_INSTALL_DIR="${EDMA3_LLD_INSTALL_DIR}" \ + CGTOOLS_V5T="${TOOLCHAIN_PATH}" \ + CGTOOLS_C64P="${CODEGEN_INSTALL_DIR}" \ + CGTOOLS_C674="${CODEGEN_INSTALL_DIR}" \ + clean + # '.make' target was used in CE < 2.26, but its no longer + # supported in CE >= 2.26. Now we are moved to >=2.26 + # hence commenting out the .make target. + # .make clean + done +} + +addtask prepsources after do_configure before do_compile + +do_compile () { + + for i in codecs extensions servers apps ; do + cd ${S}/examples/ti/sdo/ce/examples/$i + make DEVICES="${CEEXAMPLESDEVICES}" \ + GPPOS="${CEEXAMPLESGPPOS}" \ + PROGRAMS="${CEEXAMPLESPROGRAMS}" \ + CE_INSTALL_DIR="${S}" \ + XDC_INSTALL_DIR="${XDC_INSTALL_DIR}" \ + BIOS_INSTALL_DIR="${BIOS_INSTALL_DIR}" \ + BIOSUTILS_INSTALL_DIR="${BIOSUTILS_INSTALL_DIR}" \ + DSPLINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \ + XDAIS_INSTALL_DIR="${XDAIS_INSTALL_DIR}" \ + FC_INSTALL_DIR="${FC_INSTALL_DIR}" \ + CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \ + LPM_INSTALL_DIR="${LPM_INSTALL_DIR}" \ + EDMA3_LLD_INSTALL_DIR="${EDMA3_LLD_INSTALL_DIR}" \ + CGTOOLS_V5T="${TOOLCHAIN_PATH}" \ + CGTOOLS_C64P="${CODEGEN_INSTALL_DIR}" \ + CGTOOLS_C674="${CODEGEN_INSTALL_DIR}" \ + all + done +} + +do_install() { + + install -d ${D}/${installdir}/ti-codec-engine-examples + if [ -e ${S}/examples/apps/system_files/${CEEXAMPLESDEVICES}/loadmodules.sh ]; then + cp ${S}/examples/apps/system_files/${CEEXAMPLESDEVICES}/loadmodules.sh ${D}/${installdir}/ti-codec-engine-examples + elif [ -e ${WORKDIR}/loadmodules.sh ]; then + cp ${WORKDIR}/loadmodules.sh ${D}/${installdir}/ti-codec-engine-examples + fi + + cd ${S}/examples/ti/sdo/ce/examples + + # Install the apps, servers and test data, mirroring the source directory structure + # - Put the servers inside the same folder as the executable + # - TODO - Check nested dirs (e.g. dualcpu_separateconfig) + + # Put all servers in separate tree. + for i in $(find . -name "*.${DSPSUFFIX}"); do + install -d ${D}/${installdir}/ti-codec-engine-examples/servers/`dirname ${i} | cut -f3 -d /` + install ${i} ${D}/${installdir}/ti-codec-engine-examples/servers/`dirname ${i} | cut -f3 -d /` + done + + for i in $(find . -name "*.xv5T"); do + install -d ${D}/${installdir}/ti-codec-engine-examples/`dirname ${i} | cut -f3 -d /` + install ${i} ${D}/${installdir}/ti-codec-engine-examples/`dirname ${i} | cut -f3 -d /` + done + + for i in $(find . -name "*.dat"); do + install -d ${D}/${installdir}/ti-codec-engine-examples/`dirname ${i} | cut -f3 -d /` + install ${i} ${D}/${installdir}/ti-codec-engine-examples/`dirname ${i} | cut -f3 -d /` + done + + # For each directory, softlink to the app server, except special cases + cd ${D}/${installdir}/ti-codec-engine-examples + for i in $(find . -type d | grep -v servers); do + { + pwd + cd ${D}/${installdir}/ti-codec-engine-examples/$i + if [ $(basename $i) = "audio1_ires" ] ; then + ln -s ../servers/audio1_ires/audio1_ires.${DSPSUFFIX} + elif [ $(basename $i) = "server_api_example" ] ; then + ln -s ../servers/server_api_example/audio_copy.${DSPSUFFIX} + elif [ $(basename $i) != "." ] ; then + ln -s ../servers/all_codecs/all.${DSPSUFFIX} + else + echo Skipping $i + fi + } + done + + # Install/Stage the Source Tree + install -d ${D}${CE_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${CE_INSTALL_DIR_RECIPE} +} + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +PACKAGES += "ti-codec-engine-examples" + +RDEPENDS_ti-codec-engine-examples = " ti-cmem-module" +RDEPENDS_ti-codec-engine-examples_append_dm6446 = " ti-dsplink-module ti-lpm-module" +RDEPENDS_ti-codec-engine-examples_append_dm6467 = " ti-dsplink-module" +RDEPENDS_ti-codec-engine-examples_append_omap3 = " ti-dsplink-module ti-lpm-module" +RDEPENDS_ti-codec-engine-examples_append_omapl137 = " ti-dsplink-module" +RDEPENDS_ti-codec-engine-examples_append_omapl138 = " ti-dsplink-module" +FILES_ti-codec-engine-examples = "${installdir}/ti-codec-engine-examples/*" +INSANE_SKIP_ti-codec-engine-examples = "1" + +FILES_${PN}-dbg += "${installdir}/ti-codec-engine-examples/*/.debug" diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine/bypass-GCArmv5T-used-is-sealed.patch b/extras/recipes-ti/codec-engine/ti-codec-engine/bypass-GCArmv5T-used-is-sealed.patch new file mode 100644 index 00000000..b93161f4 --- /dev/null +++ b/extras/recipes-ti/codec-engine/ti-codec-engine/bypass-GCArmv5T-used-is-sealed.patch @@ -0,0 +1,22 @@ +do_compile produces: + +js: "/prj/oe/bb/build/tmp-eglibc/work/beagleboard-angstrom-linux-gnueabi/ti-codec-engine-2_26_02_11-r114a/codec_engine_2_26_02_11/packages/ti/sdo/ce/osal/linux/package.xs", line 50: XDC runtime error: gnu.targets.arm.GCArmv5T: '$used' is sealed + +Fix per suggestion in http://e2e.ti.com/support/dsp/omap_applications_processors/f/447/t/110920.aspx + +--- ./packages/ti/sdo/ce/osal/linux/package.xs.orig 2010-12-01 23:24:48.000000000 -0600 ++++ ./packages/ti/sdo/ce/osal/linux/package.xs 2011-12-27 14:59:39.382423341 -0600 +@@ -47,10 +47,10 @@ + } + + /* Conditionally load CMEM here */ +- var targetMod = xdc.useModule(prog.build.target.$name); +- if ((":"+targetMod.getISAChain().join(":")+":").match(/:v5T:/i)) { ++ //var targetMod = xdc.useModule(prog.build.target.$name); ++ //if ((":"+targetMod.getISAChain().join(":")+":").match(/:v5T:/i)) { + xdc.useModule('ti.sdo.linuxutils.cmem.CMEM'); +- } ++ //} + + var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global'); + diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine/ce-2-26-00-08-Examples-Add-LPM_INSTALL_DIR-packages.patch b/extras/recipes-ti/codec-engine/ti-codec-engine/ce-2-26-00-08-Examples-Add-LPM_INSTALL_DIR-packages.patch new file mode 100644 index 00000000..1eb81086 --- /dev/null +++ b/extras/recipes-ti/codec-engine/ti-codec-engine/ce-2-26-00-08-Examples-Add-LPM_INSTALL_DIR-packages.patch @@ -0,0 +1,60 @@ +diff --git a/examples/ti/sdo/ce/examples/apps/audio1_ires/rtcfg_local_evm3530_linux/makefile b/examples/ti/sdo/ce/examples/apps/audio1_ires/rtcfg_local_evm3530_linux/makefile +index 2bbfb72..2a00d0d 100644 +--- a/examples/ti/sdo/ce/examples/apps/audio1_ires/rtcfg_local_evm3530_linux/makefile ++++ b/examples/ti/sdo/ce/examples/apps/audio1_ires/rtcfg_local_evm3530_linux/makefile +@@ -80,6 +80,7 @@ REPO_PATH = \ + $(FC_INSTALL_DIR)/packages \ + $(FC_INSTALL_DIR)/examples \ + $(CMEM_INSTALL_DIR)/packages \ ++ $(LPM_INSTALL_DIR)/packages \ + $(BIOSUTILS_INSTALL_DIR)/packages \ + $(EXAMPLES_ROOTDIR) + +diff --git a/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_local_evm3530_linux/makefile b/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_local_evm3530_linux/makefile +index f2b187a..827f6bc 100644 +--- a/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_local_evm3530_linux/makefile ++++ b/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_local_evm3530_linux/makefile +@@ -74,6 +74,7 @@ REPO_PATH = \ + $(XDAIS_INSTALL_DIR)/packages \ + $(FC_INSTALL_DIR)/packages \ + $(CMEM_INSTALL_DIR)/packages \ ++ $(LPM_INSTALL_DIR)/packages \ + $(BIOSUTILS_INSTALL_DIR)/packages \ + $(EXAMPLES_ROOTDIR) + +diff --git a/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_remote_evm3530_linux/makefile b/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_remote_evm3530_linux/makefile +index a4fe4dc..a23f991 100644 +--- a/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_remote_evm3530_linux/makefile ++++ b/examples/ti/sdo/ce/examples/apps/speech1_copy/rtcfg_remote_evm3530_linux/makefile +@@ -76,6 +76,7 @@ REPO_PATH = \ + $(XDAIS_INSTALL_DIR)/packages \ + $(FC_INSTALL_DIR)/packages \ + $(CMEM_INSTALL_DIR)/packages \ ++ $(LPM_INSTALL_DIR)/packages \ + $(BIOSUTILS_INSTALL_DIR)/packages \ + $(EXAMPLES_ROOTDIR) + +diff --git a/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_local_evm3530_linux/makefile b/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_local_evm3530_linux/makefile +index 8baa9dd..3c01c04 100644 +--- a/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_local_evm3530_linux/makefile ++++ b/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_local_evm3530_linux/makefile +@@ -74,6 +74,7 @@ REPO_PATH = \ + $(XDAIS_INSTALL_DIR)/packages \ + $(FC_INSTALL_DIR)/packages \ + $(CMEM_INSTALL_DIR)/packages \ ++ $(LPM_INSTALL_DIR)/packages \ + $(BIOSUTILS_INSTALL_DIR)/packages \ + $(EXAMPLES_ROOTDIR) + +diff --git a/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_remote_evm3530_linux/makefile b/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_remote_evm3530_linux/makefile +index 3319c06..09a6357 100644 +--- a/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_remote_evm3530_linux/makefile ++++ b/examples/ti/sdo/ce/examples/apps/video1_copy/rtcfg_remote_evm3530_linux/makefile +@@ -75,6 +75,7 @@ REPO_PATH = \ + $(XDAIS_INSTALL_DIR)/packages \ + $(FC_INSTALL_DIR)/packages \ + $(CMEM_INSTALL_DIR)/packages \ ++ $(LPM_INSTALL_DIR)/packages \ + $(BIOSUTILS_INSTALL_DIR)/packages \ + $(EXAMPLES_ROOTDIR) + diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine/dm365-evm/loadmodules.sh b/extras/recipes-ti/codec-engine/ti-codec-engine/dm365-evm/loadmodules.sh new file mode 100644 index 00000000..60a40f0c --- /dev/null +++ b/extras/recipes-ti/codec-engine/ti-codec-engine/dm365-evm/loadmodules.sh @@ -0,0 +1,49 @@ +# +# Copyright (c) 2008, Texas Instruments Incorporated +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * Neither the name of Texas Instruments Incorporated nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +# insert cmemk, tell it to occupy physical 120MB-128MB, create +# 20 4K buffers, 10 128K buffers and two 1MB buffers +CMEM_MODPARAMS="phys_start=0x87800000 phys_end=0x88000000 pools=20x4096,10x131072,2x1048576" + +if [ -e cmemk.ko ] + then + insmod cmemk.ko $CMEM_MODPARAMS + else + modprobe cmemk $CMEM_MODPARAMS +fi + +# Allow cmem driver to be used by all users +if [ -e /dev/cmem ] + then + chmod 666 /dev/cmem +fi + diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine/loadmodules-ti-codec-engine-apps.sh b/extras/recipes-ti/codec-engine/ti-codec-engine/loadmodules-ti-codec-engine-apps.sh new file mode 100644 index 00000000..9f9233d1 --- /dev/null +++ b/extras/recipes-ti/codec-engine/ti-codec-engine/loadmodules-ti-codec-engine-apps.sh @@ -0,0 +1,37 @@ +# +# Default Memory Map - for OMAP3530 CE 2.21 examples +# +# Start Addr Size Description +# ------------------------------------------- +# 0x80000000 80 MB Linux +# 0x85000000 08 MB CMEM +# 0x86000000 24 MB DDRALGHEAP +# 0x87800000 6 MB DDR2 (BIOS, Codecs, Applications) +# 0x87E00000 1 MB DSPLINK (MEM) +# 0x87F00000 4 KB DSPLINK (RESET) +# 0x87F01000 1020 KB unused + +# sanity check to verify that we're using the right mem=xxM (80M in this case) +awk '/MemTotal:/ { + mem=$2 + + if (mem > 80 * 1024) + print "Warning! You need to use mem=80M or less on the kernel cmdline" + + printf "You have %dkB total memory for Linux\n", mem +}' /proc/meminfo + +# Select cmemk parameters for best fit, i.e. starting at 0x85000000 +modprobe cmemk phys_start=0x85000000 phys_end=0x86000000 pools=20x4096,8x131072,5x1048576,1x1429440,1x256000,1x3600000,5x829440 + +# insert DSP/BIOS Link driver +# +modprobe dsplinkk + +# make /dev/dsplink +#rm -f /dev/dsplink +#mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0 + +# insert Local Power Manager driver +# +modprobe lpm_omap3530 diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine/unloadmodules-ti-codec-engine-apps.sh b/extras/recipes-ti/codec-engine/ti-codec-engine/unloadmodules-ti-codec-engine-apps.sh new file mode 100644 index 00000000..f990d997 --- /dev/null +++ b/extras/recipes-ti/codec-engine/ti-codec-engine/unloadmodules-ti-codec-engine-apps.sh @@ -0,0 +1,12 @@ +# Unload modules - CODEC ENGINE - OMAP3530 + +# remove lpm module +rmmod lpm_omap3530 + +# remove DSP/BIOS Link driver +rmmod dsplinkk +#rm -f /dev/dsplink + +# remove cmem module +rmmod cmemk + diff --git a/extras/recipes-ti/codec-engine/ti-codec-engine_2.26.02.11.bb b/extras/recipes-ti/codec-engine/ti-codec-engine_2.26.02.11.bb new file mode 100644 index 00000000..bcb89b77 --- /dev/null +++ b/extras/recipes-ti/codec-engine/ti-codec-engine_2.26.02.11.bb @@ -0,0 +1,10 @@ +require ti-codec-engine.inc + +LIC_FILES_CHKSUM = "file://codec_engine_${PV}_manifest.html;md5=912535f1b02ecf329a3979bf313f91e0" +PV = "2_26_02_11" +PR_append = "b" + +SRC_URI += "file://bypass-GCArmv5T-used-is-sealed.patch" + +SRC_URI[cetarball.md5sum] = "4f755f77119e4da19ab5cc7ae7ccfdb4" +SRC_URI[cetarball.sha256sum] = "17fa053719265e0901fe3c3f90c9204957c6d0f5351d6b3ba4900df58cb7300f" diff --git a/extras/recipes-ti/codec-engine/ti-codecs-omap3530/disable-c6accel.diff b/extras/recipes-ti/codec-engine/ti-codecs-omap3530/disable-c6accel.diff new file mode 100644 index 00000000..6e2ed7e4 --- /dev/null +++ b/extras/recipes-ti/codec-engine/ti-codecs-omap3530/disable-c6accel.diff @@ -0,0 +1,47 @@ +diff -ur a/packages/ti/sdo/server/cs/codec.cfg b/packages/ti/sdo/server/cs/codec.cfg +--- a/packages/ti/sdo/server/cs/codec.cfg 2011-08-07 20:08:57.000000000 +0200 ++++ b/packages/ti/sdo/server/cs/codec.cfg 2011-08-07 20:08:10.000000000 +0200 +@@ -7,7 +7,7 @@ + * which we'll use to initialize config params and add the codecs to + * the Server.algs array. + */ +- var C6ACCEL = xdc.useModule('ti.c6accel.ce.C6ACCEL'); ++/* var C6ACCEL = xdc.useModule('ti.c6accel.ce.C6ACCEL'); + + C6ACCEL.serverFxns = "UNIVERSAL_SKEL"; + C6ACCEL.stubFxns = "UNIVERSAL_STUBS"; +@@ -17,7 +17,7 @@ + C6ACCEL.alg.codeSection = codeSection; + C6ACCEL.alg.udataSection = udataSection; + C6ACCEL.alg.dataSection = dataSection; +- ++*/ + var AACHEDEC = xdc.useModule('ti.sdo.codecs.aachedec.ce.AACHEDEC'); + + AACHEDEC.serverFxns = "AUDDEC1_SKEL"; +@@ -151,11 +151,11 @@ + * algorithms (e.g. stack sizes, priorities, etc.). + */ + Server.algs = [ +- {name: "c6accel", mod: C6ACCEL , threadAttrs: { ++/* {name: "c6accel", mod: C6ACCEL , threadAttrs: { + stackMemId: 0, priority: Server.MINPRI + 3}, + groupId : 2, + }, +- ++*/ + {name: "aachedec", mod: AACHEDEC , threadAttrs: { + stackMemId: 0, priority: Server.MINPRI + 3}, + groupId : 2, +diff -ur a/packages/ti/sdo/server/cs/package.xs b/packages/ti/sdo/server/cs/package.xs +--- a/packages/ti/sdo/server/cs/package.xs 2011-08-07 20:09:31.000000000 +0200 ++++ b/packages/ti/sdo/server/cs/package.xs 2011-08-07 20:08:21.000000000 +0200 +@@ -7,7 +7,7 @@ + // Each codec is validated with the following call: + // validate_one_codec(<package name>, <module name>); + +- validate_one_codec( "ti.c6accel", "C6ACCEL" ); ++// validate_one_codec( "ti.c6accel", "C6ACCEL" ); + validate_one_codec( "ti.sdo.codecs.aachedec", "AACHEDEC" ); + validate_one_codec( "ti.sdo.codecs.deinterlacer", "I2P" ); + validate_one_codec( "ti.sdo.codecs.g711dec", "G711DEC" ); diff --git a/extras/recipes-ti/codec-engine/ti-codecs-omap3530/mp3dec_cs1omap3530.patch b/extras/recipes-ti/codec-engine/ti-codecs-omap3530/mp3dec_cs1omap3530.patch new file mode 100644 index 00000000..4ed9267e --- /dev/null +++ b/extras/recipes-ti/codec-engine/ti-codecs-omap3530/mp3dec_cs1omap3530.patch @@ -0,0 +1,41 @@ +diff -uNr -x .xdcenv.mak -x mp3dec cs1omap3530_1_00_01/packages/ti/sdo/server/cs/codec.cfg cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/codec.cfg +--- cs1omap3530_1_00_01/packages/ti/sdo/server/cs/codec.cfg 2009-10-26 14:19:21.000000000 -0500 ++++ cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/codec.cfg 2009-10-26 14:36:03.000000000 -0500 +@@ -92,6 +92,14 @@ + MPEG4ENC.alg.udataSection = "DDR2"; + MPEG4ENC.alg.dataSection = "DDR2"; + ++ var MP3DEC = xdc.useModule('ti.sdo.codecs.mp3dec.ce.MP3DEC'); ++ ++ // Module Config ++ MP3DEC.alg.watermark = false; ++ MP3DEC.alg.codeSection = "DDR2"; ++ MP3DEC.alg.udataSection = "DDR2"; ++ MP3DEC.alg.dataSection = "DDR2"; ++ + /* + * The array of algorithms this server can serve up. This array also + * configures details about the threads which will be created to run the +@@ -103,6 +111,11 @@ + groupId : 1, + }, + ++ {name: "mp3dec", mod: MP3DEC , threadAttrs: { ++ stackMemId: 0, priority: Server.MINPRI + 3}, ++ groupId : 1, ++ }, ++ + {name: "g711dec", mod: G711DEC , threadAttrs: { + stackMemId: 0, priority: Server.MINPRI + 3}, + groupId : 1, +diff -uNr -x .xdcenv.mak -x mp3dec cs1omap3530_1_00_01/packages/ti/sdo/server/cs/package.xs cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/package.xs +--- cs1omap3530_1_00_01/packages/ti/sdo/server/cs/package.xs 2009-10-26 14:19:20.000000000 -0500 ++++ cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/package.xs 2009-10-26 14:53:40.000000000 -0500 +@@ -17,6 +17,7 @@ + validate_one_codec( "ti.sdo.codecs.mpeg2dec", "MPEG2DEC" ); + validate_one_codec( "ti.sdo.codecs.mpeg4dec", "MPEG4DEC" ); + validate_one_codec( "ti.sdo.codecs.mpeg4enc", "MPEG4ENC" ); ++ validate_one_codec( "ti.sdo.codecs.mp3dec", "MP3DEC" ); + } + + function validate_one_codec( packageName, moduleName ) { diff --git a/extras/recipes-ti/codec-engine/ti-codecs-omap3530_4.00.00.00.bb b/extras/recipes-ti/codec-engine/ti-codecs-omap3530_4.00.00.00.bb new file mode 100644 index 00000000..ea9f3890 --- /dev/null +++ b/extras/recipes-ti/codec-engine/ti-codecs-omap3530_4.00.00.00.bb @@ -0,0 +1,208 @@ +DESCRIPTION = "TI Codecs and Server Combo for OMAP3530" +SECTION = "multimedia" +LICENSE = "TI" + +require recipes-ti/includes/ti-paths.inc +require recipes-ti/includes/ti-staging.inc + +PR="${MACHINE_KERNEL_PR}" +PR_append = "a" + +PV="4_00_00_00" + +LIC_FILES_CHKSUM = "file://packages/ti/sdo/server/cs/docs/cs1omap3530_software_manifest.pdf;md5=84444ba7c7abe117c30f9c960d1930ec" + +CODEC_SUITE_NAME="${WORKDIR}/${PN}_${PV}" + +SRCREV = "8393c892b09e0ac42b19ff1531e232478c3b1a6c" + +require recipes-ti/includes/ti-eula-unpack.inc + +SRC_URI="http://software-dl.ti.com/dsps/dsps_public_sw/codecs/OMAP35xx//OMAP35xx_latest/omap3530_h264enc_2_01_013_production.bin;name=h264enc \ + http://software-dl.ti.com/dsps/dsps_public_sw/codecs/OMAP35xx//OMAP35xx_latest/omap3530_h264dec_2_01_007_production.bin;name=h264dec \ + http://software-dl.ti.com/dsps/dsps_public_sw/codecs/OMAP35xx//OMAP35xx_latest/omap3530_jpegenc_02_01_01_00_production.bin;name=jpegenc \ + http://software-dl.ti.com/dsps/dsps_public_sw/codecs/C64XPlus_Video//C64XPlus_Video_latest/c64xplus_jpegdec_02_00_01_01_production.bin;name=jpegdec \ + http://software-dl.ti.com/dsps/dsps_public_sw/codecs/C64XPlus_Video//C64XPlus_Video_latest/c64xplus_mpeg2dec_02_00_02_00_production.bin;name=mpeg2dec \ + http://software-dl.ti.com/dsps/dsps_public_sw/codecs/OMAP35xx//OMAP35xx_latest/omap3530_mpeg4enc_02_04_00_00_production.bin;name=mpeg4enc \ + http://software-dl.ti.com/dsps/dsps_public_sw/codecs/C64XPlus_Video//C64XPlus_Video_latest/c64xplus_mpeg4dec_02_01_00_00_production.bin;name=mpeg4dec \ + http://software-dl.ti.com/dsps/dsps_public_sw/codecs/C64XPlus_Audio//C64XPlus_Audio_latest/c64xplus_aachedec_01_30_03_00_production.bin;name=aachedec \ + http://software-dl.ti.com/dsps/dsps_public_sw/codecs/C64XPlus_Speech//C64XPlus_Speech_latest/c64xplus_g711_1_12_00_000_production.bin;name=g711 \ + http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/OMAP35xx_DM37xx_C64xPLUS_Algorithms/01_00_00_07//exports/c64xplus_deinterlacer_01_00_00_07_production.bin;name=i2p \ + git://arago-project.org/git/projects/codec-servers.git;protocol=git \ + \ + file://disable-c6accel.diff \ +" + +SRC_URI[h264enc.md5sum] = "4a7a4698b1db360fe103aae76127a4ec" +SRC_URI[h264enc.sha256sum] = "8fd970d83004bb099f51420b0eecd660b4ba9dccc87b2759d0b5a0be46f8f1a0" + +SRC_URI[h264dec.md5sum] = "81980df2d9dbedc5b64789c4e5575819" +SRC_URI[h264dec.sha256sum] = "19d65e71ba0342670cb217e0fa6617263ff68a513e8444a8dfd5f34bd641b24f" + +SRC_URI[jpegenc.md5sum] = "c2e8ad88e90c04d2de7b199517019ac8" +SRC_URI[jpegenc.sha256sum] = "6525e067cb5dd00cfc0b38045c44dcbed05866f8ad20188ceac630812502d473" + +SRC_URI[jpegdec.md5sum] = "cf2886c3406ab41409a586e5d550918d" +SRC_URI[jpegdec.sha256sum] = "6b0c9f1b8f023070c6a59af690f015f84f2c7f3143235f788ddd1a4a7b229089" + +SRC_URI[mpeg2dec.md5sum] = "da3d0561f3073352be43dce96ce1ea62" +SRC_URI[mpeg2dec.sha256sum] = "06cdb31242b8649bdd46bc07b9276de0ccd5f4e1c137d3cb79e0866c1ed04264" + +SRC_URI[mpeg4enc.md5sum] = "07c36e5d03368e1326df75a1f0c4934d" +SRC_URI[mpeg4enc.sha256sum] = "a9566c8978f7230936053de9b1f3bfe8820ae555262ceba87243abdf60e5193f" + +SRC_URI[mpeg4dec.md5sum] = "4a27cda2d5a859e6322680a4855b6b88" +SRC_URI[mpeg4dec.sha256sum] = "ca35db6841586fc2c22dd9c07a7f5b8557f480fa907e8a3471b660d4ada76e40" + +SRC_URI[aachedec.md5sum] = "649f2e79b4950719295cfecbff2ea82b" +SRC_URI[aachedec.sha256sum] = "34d19e40d624ccdc1b371f9a5d6594b4793bdf3b7223ac65912d15d75320e020" + +SRC_URI[g711.md5sum] = "fd8e9f939cc505dc5761705ed17a726c" +SRC_URI[g711.sha256sum] = "c87021e8df2a3f494f47e5bdce8a5fad04d667aa1b792fd9b3ecff634867b48d" + +SRC_URI[i2p.md5sum] = "f67c04eec9ee49c7a686eecf5d54be33" +SRC_URI[i2p.sha256sum] = "3fbf8801f3ce2aabb6d31eb18e1e24e41ca861696b3140536f1d66adc76f0323" + + +TI_BIN_UNPK_CMDS = "Y:workdir" + +S = "${CODEC_SUITE_NAME}" + +DEPENDS = "ti-cgt6x ti-xdctools ti-dspbios ti-codec-engine ti-linuxutils" + +#generic codec +DSPSUFFIX_omap3530 = "x64P" + +python do_unpack () { + bb.build.exec_func('base_do_unpack', d) + + bb.data.setVar("BINFILE", "omap3530_h264enc_2_01_013_production.bin", d) + bb.data.setVar("TARFILE", "omap3530_h264enc_2_01_013_production.tar", d) + bb.build.exec_func('ti_bin_do_unpack', d) + + bb.data.setVar("BINFILE", "omap3530_h264dec_2_01_007_production.bin", d) + bb.data.setVar("TARFILE", "omap3530_h264dec_2_01_007_production.tar", d) + bb.build.exec_func('ti_bin_do_unpack', d) + + bb.data.setVar("BINFILE", "omap3530_jpegenc_02_01_01_00_production.bin", d) + bb.data.setVar("TARFILE", "omap3530_jpegenc_02_01_01_00_production.tar", d) + bb.build.exec_func('ti_bin_do_unpack', d) + + bb.data.setVar("BINFILE", "c64xplus_jpegdec_02_00_01_01_production.bin", d) + bb.data.setVar("TARFILE", "c64xplus_jpegdec_02_00_01_01_production.tar", d) + bb.build.exec_func('ti_bin_do_unpack', d) + + bb.data.setVar("BINFILE", "c64xplus_mpeg2dec_02_00_02_00_production.bin", d) + bb.data.setVar("TARFILE", "c64xplus_mpeg2dec_02_00_02_00_production.tar", d) + bb.build.exec_func('ti_bin_do_unpack', d) + + bb.data.setVar("BINFILE", "omap3530_mpeg4enc_02_04_00_00_production.bin", d) + bb.data.setVar("TARFILE", "omap3530_mpeg4enc_02_04_00_00_production.tar", d) + bb.build.exec_func('ti_bin_do_unpack', d) + + bb.data.setVar("BINFILE", "c64xplus_mpeg4dec_02_01_00_00_production.bin", d) + bb.data.setVar("TARFILE", "c64xplus_mpeg4dec_02_01_00_00_production.tar", d) + bb.build.exec_func('ti_bin_do_unpack', d) + + bb.data.setVar("BINFILE", "c64xplus_aachedec_01_30_03_00_production.bin", d) + bb.data.setVar("TARFILE", "dm6446_aachedec_01_30_03_00_production.tar", d) + bb.build.exec_func('ti_bin_do_unpack', d) + + bb.data.setVar("BINFILE", "c64xplus_g711_1_12_00_000_production.bin", d) + bb.data.setVar("TARFILE", "dm6446_g711enc_1_12_00_000_production.tar", d) + bb.build.exec_func('ti_bin_do_unpack', d) + + bb.data.setVar("BINFILE", "c64xplus_g711_1_12_00_000_production.bin", d) + bb.data.setVar("TARFILE", "dm6446_g711dec_1_12_00_000_production.tar", d) + bb.build.exec_func('ti_bin_do_unpack', d) + + bb.data.setVar("BINFILE", "c64xplus_deinterlacer_01_00_00_07_production.bin", d) + bb.data.setVar("TARFILE", "c64xplus_deinterlacer_01_00_00_07/c64xplus_deinterlacer_01_00_00_07_production.tar", d) + bb.data.setVar("TI_BIN_UNPK_CMDS", "y: :q: ", d) + bb.build.exec_func('ti_bin_do_unpack', d) + +} + +addtask prepsources after do_unpack before do_patch + +do_prepsources () { + + mkdir -p ${CODEC_SUITE_NAME}/packages/ti/sdo/server/cs + cp ${WORKDIR}/git/omap3530/cs1omap3530/rel-files/* ${CODEC_SUITE_NAME}/ + cp ${WORKDIR}/git/omap3530/cs1omap3530/source/* ${CODEC_SUITE_NAME}/packages/ti/sdo/server/cs + cp -a "${WORKDIR}/git/omap3530/cs1omap3530/docs" ${CODEC_SUITE_NAME}/packages/ti/sdo/server/cs + + mkdir -p ${CODEC_SUITE_NAME}/packages/ti/sdo/codecs + cp -a "${WORKDIR}/omap3530_h264enc_2_01_013_production/packages/ti/sdo/codecs/h264enc" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs" + cp -a "${WORKDIR}/omap3530_h264dec_2_01_007_production/packages/ti/sdo/codecs/h264dec" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs" + cp -a "${WORKDIR}/omap3530_jpegenc_02_01_01_00_production/packages/ti/sdo/codecs/jpegenc" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs" + cp -a "${WORKDIR}/c64xplus_jpegdec_02_00_01_01_production/packages/ti/sdo/codecs/jpegdec" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs" + cp -a "${WORKDIR}/c64xplus_mpeg2dec_02_00_02_00_production/packages/ti/sdo/codecs/mpeg2dec" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs" + cp -a "${WORKDIR}/omap3530_mpeg4enc_02_04_00_00_production/packages/ti/sdo/codecs/mpeg4enc" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs" + cp -a "${WORKDIR}/c64xplus_mpeg4dec_02_01_00_00_production/packages/ti/sdo/codecs/mpeg4dec" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs" + chmod -R +w "${WORKDIR}/dm6446_aachedec_01_30_03_00_production/packages/ti/sdo/codecs/aachedec/docs" + cp -a "${WORKDIR}/dm6446_aachedec_01_30_03_00_production/packages/ti/sdo/codecs/aachedec" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs" + cp -a "${WORKDIR}/dm6446_g711enc_1_12_00_000_production/packages/ti/sdo/codecs/g711enc" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs" + cp -a "${WORKDIR}/dm6446_g711dec_1_12_00_000_production/packages/ti/sdo/codecs/g711dec" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs" + cp -a "${WORKDIR}/c64xplus_deinterlacer_01_00_00_07_production/packages/ti/sdo/codecs/deinterlacer" "${CODEC_SUITE_NAME}/packages/ti/sdo/codecs" + chmod 755 -R ${CODEC_SUITE_NAME} +} + +do_compile() { + + cd "${S}" + + make \ + CE_INSTALL_DIR=${CE_INSTALL_DIR} \ + FC_INSTALL_DIR=${FC_INSTALL_DIR} \ + LINK_INSTALL_DIR=${LINK_INSTALL_DIR} \ + CMEM_INSTALL_DIR=${CMEM_INSTALL_DIR} \ + LPM_INSTALL_DIR=${LPM_INSTALL_DIR} \ + BIOS_INSTALL_DIR=${BIOS_INSTALL_DIR} \ + CODEGEN_INSTALL_DIR=${CODEGEN_INSTALL_DIR} \ + XDC_INSTALL_DIR=${XDC_INSTALL_DIR} \ + CODEC_INSTALL_DIR="${S}" \ + XDCARGS="prod" \ + C6ACCEL_INSTALL_DIR=${C6ACCEL_INSTALL_DIR} \ + clean + + make \ + CE_INSTALL_DIR=${CE_INSTALL_DIR} \ + FC_INSTALL_DIR=${FC_INSTALL_DIR} \ + LINK_INSTALL_DIR=${LINK_INSTALL_DIR} \ + CMEM_INSTALL_DIR=${CMEM_INSTALL_DIR} \ + LPM_INSTALL_DIR=${LPM_INSTALL_DIR} \ + BIOS_INSTALL_DIR=${BIOS_INSTALL_DIR} \ + CODEGEN_INSTALL_DIR=${CODEGEN_INSTALL_DIR} \ + XDC_INSTALL_DIR=${XDC_INSTALL_DIR} \ + CODEC_INSTALL_DIR="${S}" \ + XDCARGS="prod" \ + C6ACCEL_INSTALL_DIR=${C6ACCEL_INSTALL_DIR} \ + all +} + +do_install() { + + install -d ${D}/${installdir}/ti-codecs-server + cd ${S} + + # Install the DSP Server Binary + for file in `find . -name *.${DSPSUFFIX}`; do + cp ${file} ${D}/${installdir}/ti-codecs-server + done + + # Install docs (codec qualiTI test reports, server config datasheet, etc) + for file in `find . -name *.html`; do + cp ${file} ${D}/${installdir}/ti-codecs-server + done + + install -d ${D}${CODEC_INSTALL_DIR_RECIPE} + cp -pPrf ${CODEC_SUITE_NAME}/* ${D}${CODEC_INSTALL_DIR_RECIPE} +} + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +PACKAGES += "ti-codecs-omap3530-server" +FILES_ti-codecs-omap3530-server = "${installdir}/ti-codecs-server/*" + + diff --git a/extras/recipes-ti/devtools/ti-cgt470.inc b/extras/recipes-ti/devtools/ti-cgt470.inc new file mode 100644 index 00000000..f0992aa7 --- /dev/null +++ b/extras/recipes-ti/devtools/ti-cgt470.inc @@ -0,0 +1,24 @@ +DESCRIPTION = "TI ARM Code Generation Tools" +HOMEPAGE = "https://www-a.ti.com/downloads/sds_support/CodeGenerationTools.htm" +SECTION = "devel" +LICENSE = "TI" + +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=62f46f1125a152a2e213b414db7ac600" + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc +require ../includes/ti-eula-unpack.inc + +S = "${WORKDIR}/cgt470_${PV}" + +SRC_URI = "http://install.source.dir.local/ti_cgt_tms470_${PVwithdots}_setup_linux_x86.bin;name=cgt470bin" + +BINFILE="ti_cgt_tms470_${PVwithdots}_setup_linux_x86.bin" +TI_BIN_UNPK_CMDS="Y:qY:workdir: : " +TI_BIN_UNPK_WDEXT="/cgt470_${PV}" + +do_install() { + install -d ${D}${CODEGEN_ARM_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${CODEGEN_ARM_INSTALL_DIR_RECIPE} +} + diff --git a/extras/recipes-ti/devtools/ti-cgt470_4.6.6.bb b/extras/recipes-ti/devtools/ti-cgt470_4.6.6.bb new file mode 100644 index 00000000..6ff2cc48 --- /dev/null +++ b/extras/recipes-ti/devtools/ti-cgt470_4.6.6.bb @@ -0,0 +1,8 @@ +require ti-cgt470.inc + +PV = "4_6_6" +PVwithdots = "4.6.6" + +SRC_URI[cgt470bin.md5sum] = "29a316dc6b8c8c3a53e0d6c956acb62b" +SRC_URI[cgt470bin.sha256sum] = "a17bc7139f450672503c932ef53b00c425522890e031b4a7c9135fdf90815740" + diff --git a/extras/recipes-ti/devtools/ti-cgt6x.inc b/extras/recipes-ti/devtools/ti-cgt6x.inc new file mode 100644 index 00000000..1d00a553 --- /dev/null +++ b/extras/recipes-ti/devtools/ti-cgt6x.inc @@ -0,0 +1,24 @@ +DESCRIPTION = "TI DSP Code Generation Tools" +HOMEPAGE = "https://www-a.ti.com/downloads/sds_support/TICodegenerationTools/download.htm" +SECTION = "devel" +LICENSE = "TI" + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc +require ../includes/ti-eula-unpack.inc + +PR = "r4" + +S = "${WORKDIR}/cgt6x_${PV}" + +SRC_URI = "http://install.source.dir.local/ti_cgt_c6000_${PVwithdots}_setup_linux_x86.bin;name=cgt6xbin" + +BINFILE="ti_cgt_c6000_${PVwithdots}_setup_linux_x86.bin" +TI_BIN_UNPK_CMDS="Y:qY:workdir: : " +TI_BIN_UNPK_WDEXT="/cgt6x_${PV}" + +do_install() { + install -d ${D}${CODEGEN_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${CODEGEN_INSTALL_DIR_RECIPE} +} + diff --git a/extras/recipes-ti/devtools/ti-cgt6x_6.1.20.bb b/extras/recipes-ti/devtools/ti-cgt6x_6.1.20.bb new file mode 100644 index 00000000..1d6609c8 --- /dev/null +++ b/extras/recipes-ti/devtools/ti-cgt6x_6.1.20.bb @@ -0,0 +1,11 @@ +require ti-cgt6x.inc + +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=62f46f1125a152a2e213b414db7ac600" + +PE = "1" +PV = "6_1_20" +PVwithdots = "6.1.20" + +SRC_URI[cgt6xbin.md5sum] = "39485ea8211960de0a958ab27106ab9b" +SRC_URI[cgt6xbin.sha256sum] = "a020142011c8160e24f6386f7696ecfbfe02dab2a6c83af74ce6b67eb1da9900" + diff --git a/extras/recipes-ti/devtools/ti-cgt6x_7.2.7.bb b/extras/recipes-ti/devtools/ti-cgt6x_7.2.7.bb new file mode 100644 index 00000000..aab1b96c --- /dev/null +++ b/extras/recipes-ti/devtools/ti-cgt6x_7.2.7.bb @@ -0,0 +1,11 @@ +require ti-cgt6x.inc + +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=62f46f1125a152a2e213b414db7ac600" + +PE = "1" +PV = "7_2_7" +PVwithdots = "7.2.7" + +SRC_URI[cgt6xbin.md5sum] = "71a0768a541fdebd9c35d44301019d1d" +SRC_URI[cgt6xbin.sha256sum] = "211477f0142d603975544abe3c45cc3b77a3b38038158676c60812806378738b" + diff --git a/extras/recipes-ti/devtools/ti-xdctools.inc b/extras/recipes-ti/devtools/ti-xdctools.inc new file mode 100644 index 00000000..547a5554 --- /dev/null +++ b/extras/recipes-ti/devtools/ti-xdctools.inc @@ -0,0 +1,62 @@ +DESCRIPTION = "TI XDCtools (RTSC - Real Time Software Components - http://rtsc.eclipse.org)" +HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/rtsc" +SECTION = "devel" +LICENSE = "BSD & GPLv2" + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc +require ../includes/ti-eula-unpack.inc + +S = "${WORKDIR}/xdctools_${PV}" + +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/rtsc/${PV}/exports/xdctools_setuplinux_${PV}.bin;name=xdcbin" + +BINFILE="xdctools_setuplinux_${PV}.bin" +TI_BIN_UNPK_CMDS="Y:workdir:Y" +TI_BIN_UNPK_WDEXT="/ti" + +do_install() { + install -d ${D}${XDC_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${XDC_INSTALL_DIR_RECIPE} +} + +# Prevent internal libs from getting picked up +PRIVATE_LIBS = " \ +libncdb.so \ +libcdb.so \ +libjavaplugin_oji.so \ +libjavaplugin_jni.so \ +libjsound.so \ +libinstrument.so \ +libjawt.so \ +libzip.so \ +libjava_crw_demo.so \ +libjavaplugin_nscp_gcc29.so \ +libhprof.so \ +libcmm.so \ +libjdwp.so \ +libmlib_image.so \ +libjpeg.so \ +libverify.so \ +libjavaplugin_nscp.so \ +libmanagement.so \ +libunpack.so \ +librmi.so \ +libJdbcOdbc.so \ +libawt.so \ +libnet.so \ +libjaas_unix.so \ +libnio.so \ +libdcpr.so \ +libioser12.so \ +libjsoundalsa.so \ +libjava.so \ +libfontmanager.so \ +libdt_socket.so \ +libmawt.so \ +libjvm.so \ +libhpi.so \ +lib.so \ +libcairo.so.2 \ +" + diff --git a/extras/recipes-ti/devtools/ti-xdctools/arm-linker-hack.diff b/extras/recipes-ti/devtools/ti-xdctools/arm-linker-hack.diff new file mode 100644 index 00000000..26debf8f --- /dev/null +++ b/extras/recipes-ti/devtools/ti-xdctools/arm-linker-hack.diff @@ -0,0 +1,19 @@ +--- a/packages/gnu/targets/arm/linkcmd.xdt 2010-12-30 19:33:53.000000000 +0100 ++++ b/packages/gnu/targets/arm/linkcmd.xdt 2010-12-30 19:42:55.000000000 +0100 +@@ -40,12 +40,13 @@ + + %if ("BINVERS" in prog.build.target) { + % var _utils = xdc.loadCapsule("gnu/targets/linkUtils.xs"); ++% if (prog.build.target.GCCVERS < "4.3.3") { + SECTIONS { + `_utils.genSections(prog)` + } +- +-% if (!prog.build.target.noStdLinkScript +-% && prog.build.target.BINVERS >= "2.19") { ++% } ++% if (prog.build.target.noStdLinkScript ++% && prog.build.target.BINVERS >= "2.19") { + INSERT BEFORE .gnu.attributes + % } + diff --git a/extras/recipes-ti/devtools/ti-xdctools/fix-hardcoded-paths.diff b/extras/recipes-ti/devtools/ti-xdctools/fix-hardcoded-paths.diff new file mode 100644 index 00000000..36142c47 --- /dev/null +++ b/extras/recipes-ti/devtools/ti-xdctools/fix-hardcoded-paths.diff @@ -0,0 +1,21 @@ +diff -ur a/packages/gnu/targets/ITarget.xs b/packages/gnu/targets/ITarget.xs +--- a/packages/gnu/targets/ITarget.xs 2011-08-06 13:24:44.000000000 +0200 ++++ b/packages/gnu/targets/ITarget.xs 2011-08-06 13:23:37.000000000 +0200 +@@ -251,7 +251,7 @@ + + function askLd(target) + { +- var ldCmd = target.rootDir + "/" + target.GCCTARG + "/bin/ld"; ++ var ldCmd = target.rootDir + "/" + target.GCCTARG + "-ld"; + /* If the ld executable cannot be found, and the prefix is not used, + * it's probably a misspelled directory path. + */ +@@ -486,7 +486,7 @@ + tool2cmd["link"] = cmd; + + /* define the ar command template */ +- cmd = prefix + target.ar.cmd ++ cmd = prefix + target.GCCTARG + "-ar" + + " $(AROPTS_P) " + target.ar.opts + + " $@ $(AROPTS_S) $(aropts) $(files)"; + tool2cmd["ar"] = cmd; diff --git a/extras/recipes-ti/devtools/ti-xdctools_3.23.00.32.bb b/extras/recipes-ti/devtools/ti-xdctools_3.23.00.32.bb new file mode 100644 index 00000000..b2db76c9 --- /dev/null +++ b/extras/recipes-ti/devtools/ti-xdctools_3.23.00.32.bb @@ -0,0 +1,11 @@ +require ti-xdctools.inc + +PV = "3_23_00_32" +LIC_FILES_CHKSUM = "file://docs/license/xdc/shelf/package.html;md5=49b2dfbf48860a0da844709c3ce63a9c" + +SRC_URI += "file://fix-hardcoded-paths.diff" + +SRC_URI[xdcbin.md5sum] = "263aa11795670265551d36a8c77ad27d" +SRC_URI[xdcbin.sha256sum] = "880b4e263850f2a3c0ea7352c5b6e0a86692361e26634c3b70dddc42c71231a5" + +S = "${WORKDIR}/ti/xdctools_${PV}" diff --git a/extras/recipes-ti/dmai/ti-dmai.inc b/extras/recipes-ti/dmai/ti-dmai.inc new file mode 100644 index 00000000..23481b7f --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai.inc @@ -0,0 +1,161 @@ +DESCRIPTION = "Davinci Multimedia Application Interface (DMAI) for TI ARM/DSP processors" +HOMEPAGE = "https://gforge.ti.com/gf/project/dmai/" +SECTION = "multimedia" +LICENSE = "BSD" + +# TODO :: + +require recipes-ti/includes/ti-paths.inc +require recipes-ti/includes/ti-staging.inc + +PROVIDES += "ti-dmai-apps" + +PE = "1" + +SRCREV ?= "UNDEFINED_SRCREV" +DMAIBRANCH ?= "UNDEFINED_DMAIBRANCH" + +S = "${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface/dmai_${PV}/dmai" + +SRC_URI = "svn://gforge.ti.com/svn/dmai/;module=${DMAIBRANCH};proto=https;user=anonymous;pswd='' \ + file://loadmodules-ti-dmai-dm6446_al.sh \ + file://loadmodules-ti-dmai-dm6467_al.sh \ + file://loadmodules-ti-dmai-o3530_al.sh \ + file://loadmodules-ti-dmai-dm355_al.sh \ + file://loadmodules-ti-dmai-dm365_al.sh \ + file://loadmodules-ti-dmai-ol137_al.sh \ + file://loadmodules-ti-dmai-ol138_al.sh \ + file://doxygen_templates.tar.gz \ + file://arago-tdox \ + " + +DEPENDS = "virtual/kernel alsa-lib ti-framework-components ti-codec-engine ti-xdctools" + +DEPENDS_append_dm6446 = " ti-codecs-dm6446 ti-dspbios ti-cgt6x ti-linuxutils" +DEPENDS_append_dm6467 = " ti-codecs-dm6467 ti-dspbios ti-cgt6x ti-linuxutils" +DEPENDS_append_omap3 = " ti-codecs-omap3530 ti-dspbios ti-cgt6x ti-linuxutils" +DEPENDS_append_dm355 = " ti-codecs-dm355" +DEPENDS_append_dm365 = " ti-codecs-dm365" +DEPENDS_append_omapl137 = " ti-codecs-omapl137 ti-dspbios ti-cgt6x ti-linuxutils" +DEPENDS_append_omapl138 = " ti-codecs-omapl138 ti-dspbios ti-cgt6x ti-linuxutils" + +# Define DMAI build time variables +DMAIPLATFORM_dm6446 = "dm6446_al" +DMAIPLATFORM_dm6467 = "dm6467_al" +DMAIPLATFORM_omap3 = "o3530_al" +DMAIPLATFORM_dm355 = "dm355_al" +DMAIPLATFORM_dm365 = "dm365_al" +DMAIPLATFORM_omapl137 = "ol137_al" +DMAIPLATFORM_omapl138 = "ol138_al" +DMAIPLATFORM ?= "UNDEFINED_DMAIPLATFORM" + +# Need to set this for other platforms as well +#GPPOS_dm355 = "LINUX_GCC" +#GPPOS_dm365 = "LINUX_GCC" +#GPPOS ?= "UNDEFINEDGPPOS" + +# Need to re-define this for OMAP-L137/L138 +DSPSUFFIX_omapl137 = "x64P" +DSPSUFFIX_omapl138 = "x64P" +DSPSUFFIX ?= "x64p" + +# This is needed for dm355/dm365 targets in order to find ti.sdo.codecs.g711 +# TODO :: review - should we just pass this in do_compile? +USER_XDC_PATH = "${CE_INSTALL_DIR}/examples" + +PARALLEL_MAKE = "" + +do_prepsources() { + # run the release steps - this will delete .svn file and run doxygen to + # generate proper documentation of the source etc. + find ${WORKDIR}/${DMAIBRANCH} -name .svn -type d | xargs rm -rf + cp -pPrf ${WORKDIR}/doxygen_templates ${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface + cp -pPrf ${WORKDIR}/arago-tdox ${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface/tdox + chmod a+x ${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface/release.sh + chmod a+x ${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface/tdox + sed -i 's|tdox|./tdox|g' ${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface/release.sh + (cd ${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface; ./release.sh ${PV}) +} + +# run prepare sources before do_patch to ensure that sourceipk picks the right sources. +addtask prepsources after do_unpack before do_patch + +do_compile () { + # Recent kernel headers warn against inclusion from userspace + for makefile in $(find ${S} -name "Makefile") ; do + sed -i -e s:-Werror::g $makefile + done + + # Angstrom 2008 breaks with -Wl,-T, while angstrom 2010 needs it + if [ $(${TARGET_PREFIX}gcc -dumpversion | awk -F. '{print $2}') -gt 3 ] ; then + # Fix up linkerscripts, recent toolchains need -T to prepend the default script to the custom one + for appmakefile in $(find ${S} -name "Makefile.app") ; do + sed -i -e 's: $(XDC_CFG)/linker.cmd: -Wl,-T,$(XDC_CFG)/linker.cmd:g' $appmakefile + done + fi + + # TODO :: Why do we do this? + unset DMAI_INSTALL_DIR + cd ${S} + + make XDC_INSTALL_DIR="${XDC_INSTALL_DIR}" PLATFORM="${DMAIPLATFORM}" clean + + for dir in ${S}; do + cd $dir + # TODO: Figure out how to pass the alsa require location, currently + # LINUXLIBS_INSTALL_DIR is hard-coded for armv5te + make \ + CE_INSTALL_DIR="${CE_INSTALL_DIR}" \ + CODEC_INSTALL_DIR="${CODEC_INSTALL_DIR}" \ + FC_INSTALL_DIR="${FC_INSTALL_DIR}" \ + LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \ + XDC_INSTALL_DIR="${XDC_INSTALL_DIR}" \ + CODEGEN_INSTALL_DIR="${CODEGEN_INSTALL_DIR}" \ + BIOS_INSTALL_DIR="${BIOS_INSTALL_DIR}"\ + LINUXLIBS_INSTALL_DIR="${STAGING_DIR_TARGET}/usr" \ + USER_XDC_PATH="${USER_XDC_PATH}" \ + CROSS_COMPILE="${TOOLCHAIN_PATH}/${TARGET_PREFIX}" \ + CSTOOL_DIR="${TOOLCHAIN_PATH}" \ + VERBOSE="true" \ + XDAIS_INSTALL_DIR="${XDAIS_INSTALL_DIR}" \ + LINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \ + CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \ + LPM_INSTALL_DIR="${LPM_INSTALL_DIR}" \ + C6ACCEL_INSTALL_DIR=${C6ACCEL_INSTALL_DIR} \ + MVTOOL_PREFIX="${TARGET_PREFIX}" \ + PLATFORM="${DMAIPLATFORM}" + done +} + +do_install () { + + # TODO :: Why do we do this? + unset DMAI_INSTALL_DIR + + install -d ${D}/${installdir}/ti-dmai-apps + cd ${S} + make PLATFORM="${DMAIPLATFORM}" EXEC_DIR=${D}/${installdir}/ti-dmai-apps install + install -m 0755 ${WORKDIR}/loadmodules-ti-dmai-${DMAIPLATFORM}.sh ${D}/${installdir}/ti-dmai-apps/loadmodules.sh + + install -d ${D}${DMAI_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${DMAI_INSTALL_DIR_RECIPE} +} + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +PACKAGES += "ti-dmai-apps" +FILES_ti-dmai-apps = "${installdir}/ti-dmai-apps/*" +INSANE_SKIP_ti-dmai-apps = "1" + +RDEPENDS_ti-dmai-apps_dm6446 += "ti-codecs-dm6446-server ti-cmem-module ti-dsplink-module" +RDEPENDS_ti-dmai-apps_dm6467 += "ti-codecs-dm6467 ti-cmem-module ti-dsplink-module" +RDEPENDS_ti-dmai-apps_omap3 += "ti-codecs-omap3530-server ti-cmem-module ti-dsplink-module ti-lpm-module ti-sdma-module" +RDEPENDS_ti-dmai-apps_dm355 += "ti-codecs-dm355 ti-cmem-module ti-dm355mm-module" +RDEPENDS_ti-dmai-apps_dm365 += "ti-codecs-dm365 ti-cmem-module ti-dm365mm-module ti-edma-module ti-irq-module" +RDEPENDS_ti-dmai-apps_omapl137 += "ti-codecs-omapl137-server ti-cmem-module ti-dsplink-module" +RDEPENDS_ti-dmai-apps_omapl138 += "ti-codecs-omapl138-server ti-cmem-module ti-dsplink-module" + +pkg_postinst_ti-dmai-apps () { + ln -sf ${installdir}/ti-codecs-server/*.${DSPSUFFIX} ${installdir}/ti-dmai-apps/ +} + diff --git a/extras/recipes-ti/dmai/ti-dmai/arago-tdox b/extras/recipes-ti/dmai/ti-dmai/arago-tdox new file mode 100644 index 00000000..81538cf3 --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/arago-tdox @@ -0,0 +1,210 @@ +#!/bin/bash +# +# +# This script sets a series of environment variable that are referenced +# in a doxygen configuration file. The values passed in here are simply +# plugged into the file locations and doxygen proceeds normaly. +# +# template location is ${VENDORS}/opensource/doxygen/templates/<version> +# +# + +# Revision history +#! 02 Jul 2009 cring: Added cmd line args for doxygendir (-x) and template (-t) +#! 13 Jul 2006 ada: New template smaller pdf generation +#! 16 May 2006 ada: Added -p file to pdf for space in project names +#! 08 May 2006 ada: Added pdf generation to tdox (Solaris/Linux only). +#! 23 Jan 2006 ada: Overide file to change default doxyfile behaivior +#! 19 Jan 2006 ada: 1093, ENUM_VALUES_PER_LINE set to 1, ref doxyfile via vers +#! 05 Oct 2005 ada: 933, doxyfile in tools, removed win and unix vendors path +#! 24 Aug 2005 ada: Added 897 changes, optional css c or jave optimization +#! 18 Aug 2005 ada: inital version from AR 887 + +# Set these defaults here as the usage statement uses them +TDOX_TEMPLATEDIR=${TOOLS}/default/doxygen_templates +DOXYGEN_EXECUTABLE=doxygen + +function usage +{ + OPTIONS="`basename $0` code_location out_doc_location [-x doxygen_exe ] [-t tdox_templatedir] [-n project_name] [-v version] [-f FILE_PATTERNS ] [-s strip_dir] [-c css location] [-e exclude dirs] [-b enabled sections] [-m generate chm] [-p pdf_file] [-o override doxyfile] [-j]" + echo "`basename $1` $OPTIONS" + echo "Where: " + echo "\tcode_location: Top of tree(s) to search for code (required as 1st param)" + echo "\tout_doc_location: Output location for generated files (required as 2nd param)" + echo "\t[-n project_name]: title of generated documentation (defaults to Project)" + echo "\t[-x doxygen_exe]: location of doxygen executable (defaults to $DOXYGEN_EXECUTABLE)" + echo "\t[-t tdox_templatedir]: location of tdox templates (defaults to $TDOX_TEMPLATEDIR)" + echo "\t[-v version]: version number or string (defaults to 1.0)" + echo "\t[-f FILE_PATTERNS]: Optional list of files to document (defaults to all)" + echo "\t[-s strip_dirs]: Remove directory prefix from generated files (defaults to not remove)" + echo "\t[-c path_to_css]: Path to a user suplied CSS style sheet" + echo "\t[-e exclude dirs]: List of directories to exclude" + echo "\t[-b enabled sections]: List of sections to enable" + echo "\t[-m generate chm]: chm file name (required)" + echo "\t[-p generate pdf <file>]: create <file>.pdf in html/pdf (Linux only)" + echo "\t[-o override doxyfile]: file (advanced) Overide any doxyfile default" + echo "\t[-j]: Optimize for Java (Generate class files) defaults to C" + echo "\t[-r]: Call rshd to windows for chm generation (defaults to wine)" + echo + exit +} + +function optimizeForJava +{ + DOX_OPTIMIZE_OUTPUT_JAVA="YES" + DOX_OPTIMIZE_OUTPUT_FOR_C="NO" +} + +if [ "$#" -lt 2 ]; then + echo "Invalid number of parameters" + usage $0 +fi + +# get the required parameters then shift for the getopts parameters +export DOX_INPUT="$1" +shift +export DOX_OUTPUT_DIRECTORY="$1" +shift + +#set the global defaults +DOX_QUIET="YES" +DOX_OPTIMIZE_OUTPUT_JAVA="NO" +DOX_OPTIMIZE_OUTPUT_FOR_C="YES" +DOX_CHM_FILE= +DOX_GENERATE_HTMLHELP="NO" +OVERRIDE_FILE="" +PDF="" + +# Process the rest of the arguments as getopts +# parameters +while getopts b:c:e:f:m:n:o:p:s:t:v:x:dhjr arg +do + case $arg in + b) DOX_ENABLED_SECTIONS=${OPTARG};; + c) DOX_HTML_STYLESHEET=${OPTARG};; + d) DEBUG=1;; + e) DOX_EXCLUDE=${OPTARG};; + f) DOX_FILE_PATTERNS=${OPTARG};; + h) usage;exit 0;; + j) optimizeForJava;; + r) USERSHD=1;; + m) DOX_CHM_FILE=${OPTARG};DOX_GENERATE_HTMLHELP="YES";; + n) DOX_PROJECT_NAME=${OPTARG};; + s) DOX_STRIP_FROM_PATH=${OPTARG};; + t) TDOX_TEMPLATEDIR=${OPTARG};; + v) DOX_PROJECT_NUMBER=${OPTARG};; + x) DOXYGEN_EXECUTABLE=${OPTARG};; + o) OVERRIDE_FILE=${OPTARG};; + p) PDF=${OPTARG};; + \?) usage + exit 2;; + esac +done + +if [ "$DEBUG" = "1" ]; then + DOX_QUIET="NO" + set -x +fi + +if [ "$DOX_PROJECT_NAME" = "" ]; then + DOX_PROJECT_NAME="Project" +fi + +if [ "$DOX_PROJECT_NUMBER" = "" ]; then + DOX_PROJECT_NUMBER="1.0" +fi + +if [ "$DOX_FILE_PATTERNS" = "" ]; then + DOX_FILE_PATTERNS="*.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.mm \ + *.dox" +fi + +export DOX_INPUT +export DOX_OUTPUT_DIRECTORY +export DOX_PROJECT_NAME +export DOX_PROJECT_NUMBER +export DOX_FILE_PATTERNS +export DOX_STRIP_FROM_PATH +export DOX_QUIET +export DOX_HTML_STYLESHEET +export DOX_OPTIMIZE_OUTPUT_FOR_C +export DOX_OPTIMIZE_OUTPUT_JAVA +export DOX_EXCLUDE +export DOX_ENABLED_SECTIONS +export DOX_CHM_FILE +export DOX_GENERATE_HTMLHELP +export TDOX_TEMPLATEDIR + + +# Make sure the dir exists +mkdir -p $DOX_OUTPUT_DIRECTORY + +# Create temp file copy of doxyfile and append overrides to the end of the file +cp ${TDOX_TEMPLATEDIR}/doxyfile /tmp/doxyfile$$ + +chmod +w /tmp/doxyfile$$ +if [ "$OVERRIDE_FILE" != "" ]; then + cat $OVERRIDE_FILE >> /tmp/doxyfile$$ +fi + +# Run doxygen and clean up temp file +${DOXYGEN_EXECUTABLE} /tmp/doxyfile$$ +rm -f /tmp/doxyfile$$ + +# Copy the TI banner gifs to the html directory. +cp -p ${TDOX_TEMPLATEDIR}/*gif $DOX_OUTPUT_DIRECTORY/html + +# Generate PDF files +if [ "$PDF" != "" ]; then + if [ "$BUILD_HOST_OS" = "Linux" ]; then + rm -rf $DOX_OUTPUT_DIRECTORY/html/pdf + mkdir -p $DOX_OUTPUT_DIRECTORY/html/pdf + cwd=`pwd` + cd $DOX_OUTPUT_DIRECTORY/latex + latex refman.tex + makeindex refman.idx + latex refman.tex + latex_count=5 + while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] + do + latex refman.tex + latex_count=`expr $$latex_count - 1` + done + dvips -o refman.ps refman.dvi + ps2pdf refman.ps refman.pdf + cd $cwd + mv $DOX_OUTPUT_DIRECTORY/latex/refman.pdf $DOX_OUTPUT_DIRECTORY/html/pdf/${PDF}.pdf + else + echo "Sorry... pdf generation supported under Linux only" + fi +fi + +# Generate Windows compressed help +if [ "$DOX_GENERATE_HTMLHELP" = "YES" ]; then + + echo "chm generation is not supported" +fi diff --git a/extras/recipes-ti/dmai/ti-dmai/doxygen_templates.tar.gz b/extras/recipes-ti/dmai/ti-dmai/doxygen_templates.tar.gz Binary files differnew file mode 100644 index 00000000..6d613bf5 --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/doxygen_templates.tar.gz diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-apps.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-apps.sh new file mode 100755 index 00000000..7120b744 --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-apps.sh @@ -0,0 +1,37 @@ +# +# Default Memory Map - for OMAP3530 dvsdk examples from 3.00.00.29 - this memory map is used for DMAI apps +# +# Start Addr Size Description +# ------------------------------------------- +# 0x80000000 88 MB Linux +# 0x85800000 08 MB CMEM +# 0x86800000 16 MB DDRALGHEAP +# 0x87800000 6 MB DDR2 (BIOS, Codecs, Applications) +# 0x87E00000 1 MB DSPLINK (MEM) +# 0x87F00000 4 KB DSPLINK (RESET) +# 0x87F01000 1020 KB unused + +# sanity check to verify that we're using the right mem=xxM (88M in this case) +awk '/MemTotal:/ { + mem=$2 + + if (mem > 88 * 1024) + print "Warning! You need to use mem=88M or less on the kernel cmdline" + + printf "You have %dkB total memory for Linux\n", mem +}' /proc/meminfo + +# Select cmemk parameters for best fit, i.e. starting at 0x85000000 +modprobe cmemk phys_start=0x85800000 phys_end=0x86800000 pools=20x4096,8x131072,5x1048576,1x1429440,1x256000,1x3600000,5x829440 + +# insert DSP/BIOS Link driver +# +modprobe dsplinkk + +# make /dev/dsplink +#rm -f /dev/dsplink +#mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0 + +# insert Local Power Manager driver +# +modprobe lpm_omap3530 diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm355_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm355_al.sh new file mode 100755 index 00000000..ca357e20 --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm355_al.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# +# loadmodules.sh +# +# Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/ +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation version 2.1 of the License. +# +# This program is distributed #as is# WITHOUT ANY WARRANTY of any kind, +# whether express or implied; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# 12MB +modprobe cmemk phys_start=0x87400000 phys_end=0x88000000 pools=1x2903040,1x1529856,7x829440,1x524288,1x108680,1x81920,2x8192,6x4096 + +./mapdmaq + +modprobe dm350mmap +rm -f /dev/dm350mmap +mknod /dev/dm350mmap c `awk "\\$2==\"dm350mmap\" {print \\$1}" /proc/devices` 0 diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm365_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm365_al.sh new file mode 100644 index 00000000..36dc78ec --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm365_al.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +# This loadmodules script is provided to support 1920x1080 resolution file based encode/decode DMAI unit test applications + +# Sample bootargs is given below +# mem=60M console=ttyS0,115200n8 root=/dev/nfs rw nfsroot=<nfsroot> ip=dhcp video=davincifb:vid0=OFF:vid1=OFF:osd0=720x576x16,2025K dm365_imp.oper_mode=0 + +depmod -a +rmmod cmemk 2>/dev/null +rmmod irqk 2>/dev/null +rmmod edmak 2>/dev/null +rmmod dm365mmap 2>/dev/null + +# Pools configuration +modprobe cmemk phys_start=0x83C00000 phys_end=0x88000000 pools=1x384,2x5984,2x3133440,1x16384,1x48952,1x20480,1x60288,1x74,1x28,1x2048,1x6785280,1x146,1x896,1x65536,1x98,1x296,29x56,2x24,1x624,4x62,1x1456,1x18321120,1x65792,5x3523584,1x4194304,1x8355840 + +#VC1 decode pool configuration +# insmod cmemk.ko phys_start=0x83C00000 phys_end=0x88000000 pools=1x384,1x112665,3x7680,1x319264,2x1024,5x7208960,1x80,1x116,1x29184,1x2688,1x30720,1x551680,2x128,1x74,1x28,1x10240,1x47232,1x448,2x1152,1x8192,2x272896,18x56,2x24,1x86,4x62,2x7808,1x2097152 + +modprobe irqk +modprobe edmak +modprobe dm365mmap + +rm -f /dev/dm365mmap +mknod /dev/dm365mmap c `awk "\\$2==\"dm365mmap\" {print \\$1}" /proc/devices` 0 diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6446_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6446_al.sh new file mode 100755 index 00000000..b4a230d5 --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6446_al.sh @@ -0,0 +1,19 @@ +# +# loadmodules.sh +# +# Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/ +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation version 2.1 of the License. +# +# This program is distributed #as is# WITHOUT ANY WARRANTY of any kind, +# whether express or implied; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +modprobe cmemk phys_start=0x87800000 phys_end=0x88E00000 pools=20x4096,8x202752,10x131072,2x1048576,1x2097152,10x829440,1x6750000 +modprobe dsplinkk ddr_start=0x8F800000 ddr_size=0x600000 + +rm -rf /dev/dsplink +mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0 diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6467_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6467_al.sh new file mode 100755 index 00000000..b4a230d5 --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-dm6467_al.sh @@ -0,0 +1,19 @@ +# +# loadmodules.sh +# +# Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/ +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation version 2.1 of the License. +# +# This program is distributed #as is# WITHOUT ANY WARRANTY of any kind, +# whether express or implied; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +modprobe cmemk phys_start=0x87800000 phys_end=0x88E00000 pools=20x4096,8x202752,10x131072,2x1048576,1x2097152,10x829440,1x6750000 +modprobe dsplinkk ddr_start=0x8F800000 ddr_size=0x600000 + +rm -rf /dev/dsplink +mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0 diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-o3530_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-o3530_al.sh new file mode 100755 index 00000000..076af072 --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-o3530_al.sh @@ -0,0 +1,42 @@ +# loadmodules.sh +# +# Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/ +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation version 2.1 of the License. +# +# This program is distributed #as is# WITHOUT ANY WARRANTY of any kind, +# whether express or implied; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# +# Default Memory Map +# +# Start Addr Size Description +# ------------------------------------------- +# 0x80000000 88 MB Linux +# 0x85800000 08 MB CMEM +# 0x86800000 24 MB DDRALGHEAP +# 0x87800000 6 MB DDR2 (BIOS, Codecs, Applications) +# 0x87E00000 1 MB DSPLINK (MEM) +# 0x87F00000 4 KB DSPLINK (RESET) +# 0x87F01000 1020 KB unused + +modprobe cmemk phys_start=0x85800000 phys_end=0x86800000 pools=20x4096,8x131072,4x829440,1x5250000,1x1429440,1x256000 + + +# insert DSP/BIOS Link driver +# +modprobe dsplinkk + +# make /dev/dsplink +rm -f /dev/dsplink +mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0 + + +# insert Local Power Manager driver +# +modprobe lpm_omap3530 + diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol137_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol137_al.sh new file mode 100755 index 00000000..2c98c787 --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol137_al.sh @@ -0,0 +1,19 @@ +# +# loadmodules.sh +# +# Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/ +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation version 2.1 of the License. +# +# This program is distributed #as is# WITHOUT ANY WARRANTY of any kind, +# whether express or implied; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +modprobe cmemk phys_start=0xC2200000 phys_end=0xC3200000 pools=1x5250000,3x1048576,3x829440,1x256000,4x131072 +modprobe dsplinkk + +rm -rf /dev/dsplink +mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0 diff --git a/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol138_al.sh b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol138_al.sh new file mode 100755 index 00000000..2c98c787 --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/loadmodules-ti-dmai-ol138_al.sh @@ -0,0 +1,19 @@ +# +# loadmodules.sh +# +# Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/ +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation version 2.1 of the License. +# +# This program is distributed #as is# WITHOUT ANY WARRANTY of any kind, +# whether express or implied; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +modprobe cmemk phys_start=0xC2200000 phys_end=0xC3200000 pools=1x5250000,3x1048576,3x829440,1x256000,4x131072 +modprobe dsplinkk + +rm -rf /dev/dsplink +mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0 diff --git a/extras/recipes-ti/dmai/ti-dmai/omap3530-r642-remove-include-videodev.diff b/extras/recipes-ti/dmai/ti-dmai/omap3530-r642-remove-include-videodev.diff new file mode 100644 index 00000000..63f9cc68 --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/omap3530-r642-remove-include-videodev.diff @@ -0,0 +1,64 @@ +From 06c4cfeec98f4f1e31543878ceb74c5fff1907e4 Mon Sep 17 00:00:00 2001 +From: Enrico Butera <ebutera@users.berlios.de> +Date: Thu, 22 Dec 2011 11:01:58 +0100 +Subject: [PATCH 1/2] adjust videdev headers for recent kernels + +Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> +--- + .../packages/ti/sdo/dmai/linux/omap3530/Capture.c | 1 - + .../ti/sdo/dmai/linux/omap3530/Display_v4l2.c | 1 - + .../ti/sdo/dmai/linux/omap3530/_VideoBuf.c | 1 - + .../ti/sdo/dmai/linux/omap3530/priv/_VideoBuf.h | 1 - + 4 files changed, 0 insertions(+), 4 deletions(-) + +diff --git a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Capture.c b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Capture.c +index a924169..c2b45d2 100644 +--- a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Capture.c ++++ b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Capture.c +@@ -40,7 +40,6 @@ + #include <sys/mman.h> + #include <sys/ioctl.h> + #include <asm/types.h> +-#include <linux/videodev.h> + #include <linux/videodev2.h> + + #include <xdc/std.h> +diff --git a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Display_v4l2.c b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Display_v4l2.c +index 0d01b39..0c35efe 100644 +--- a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Display_v4l2.c ++++ b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/Display_v4l2.c +@@ -38,7 +38,6 @@ + #include <sys/ioctl.h> + #include <sys/mman.h> + #include <errno.h> +-#include <linux/videodev.h> + #include <linux/videodev2.h> + + #include <xdc/std.h> +diff --git a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/_VideoBuf.c b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/_VideoBuf.c +index 5615e2f..5cb712d 100644 +--- a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/_VideoBuf.c ++++ b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/_VideoBuf.c +@@ -38,7 +38,6 @@ + #include <sys/ioctl.h> + #include <sys/mman.h> + #include <errno.h> +-#include <linux/videodev.h> + #include <linux/videodev2.h> + + #include <xdc/std.h> +diff --git a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/priv/_VideoBuf.h b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/priv/_VideoBuf.h +index b2128a3..dbaa4eb 100644 +--- a/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/priv/_VideoBuf.h ++++ b/davinci_multimedia_application_interface/dmai/packages/ti/sdo/dmai/linux/omap3530/priv/_VideoBuf.h +@@ -34,7 +34,6 @@ + #ifndef ti_sdo_dai_linux_priv__VideoBuf_h_ + #define ti_sdo_dai_linux_priv__VideoBuf_h_ + +-#include <linux/videodev.h> + #include <linux/videodev2.h> + + #include <ti/sdo/dmai/BufferGfx.h> +-- +1.7.2.5 + diff --git a/extras/recipes-ti/dmai/ti-dmai/r642-fix-config-bld.diff b/extras/recipes-ti/dmai/ti-dmai/r642-fix-config-bld.diff new file mode 100644 index 00000000..2f328c0e --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/r642-fix-config-bld.diff @@ -0,0 +1,48 @@ +From 86e89bb160cfe67c173f1260b93066b12dd73580 Mon Sep 17 00:00:00 2001 +From: Enrico Butera <ebutera@users.berlios.de> +Date: Thu, 22 Dec 2011 11:03:58 +0100 +Subject: [PATCH 2/2] fix toolchain names in config.bld + +Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> +--- + .../dmai/packages/config.bld | 24 +------------------ + 1 files changed, 2 insertions(+), 22 deletions(-) + +diff --git a/davinci_multimedia_application_interface/dmai/packages/config.bld b/davinci_multimedia_application_interface/dmai/packages/config.bld +index 8c2e96e..566f907 100644 +--- a/davinci_multimedia_application_interface/dmai/packages/config.bld ++++ b/davinci_multimedia_application_interface/dmai/packages/config.bld +@@ -44,28 +44,8 @@ var C6X = xdc.useModule('ti.targets.C64P'); + C6X.rootDir = codegen; + C6X.platform = xdcplat; + +-/* User passes in $(CROSS_COMPILE) where $(CROSS_COMPILE)gcc is their compiler +- Then the TOOLDIR and LONGNAME are derived based on a regex of CROSS_COMPILE +-*/ +-var crosscompile = "" + java.lang.System.getenv("CROSS_COMPILE"); +- +-var tooldir = ""; +-var longName = ""; +- +-/* Search CROSS_COMPILE for bin/ If only 1 bin/ is found, set the tooldir to +- the path prior to bin/ and the prefix to "bin/" + remainder of path, +- else leave the tooldir as "" and set the LONGNAME to the full CROSS_COMPILE +- path +-*/ +-var regex = new RegExp("bin/"); +-var find = crosscompile.split( regex ); +- +-if (find[0]!=crosscompile && find.length==2) { +- tooldir = find[0]; +- longName = "bin/" + find[1] + "gcc"; +-} else { +- longName = crosscompile + "gcc"; +-} ++var tooldir = "" + java.lang.System.getenv("CSTOOL_DIR"); ++var longName = "" + java.lang.System.getenv("MVTOOL_PREFIX") + "gcc"; + + /* location of the GCC Arm9 tools */ + var GCArmv5T = xdc.useModule('gnu.targets.arm.GCArmv5T'); +-- +1.7.2.5 + diff --git a/extras/recipes-ti/dmai/ti-dmai/unloadmodules-ti-dmai-apps.sh b/extras/recipes-ti/dmai/ti-dmai/unloadmodules-ti-dmai-apps.sh new file mode 100644 index 00000000..793d727f --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai/unloadmodules-ti-dmai-apps.sh @@ -0,0 +1,12 @@ +# Unload modules - DMAI - OMAP3530 + +# remove lpm module +rmmod lpm_omap3530 + +# remove DSP/BIOS Link driver +rmmod dsplinkk +#rm -f /dev/dsplink + +# remove cmem module +rmmod cmemk + diff --git a/extras/recipes-ti/dmai/ti-dmai_svn.bb b/extras/recipes-ti/dmai/ti-dmai_svn.bb new file mode 100644 index 00000000..3ac7a81d --- /dev/null +++ b/extras/recipes-ti/dmai/ti-dmai_svn.bb @@ -0,0 +1,38 @@ +require ti-dmai.inc + +# Need to descend one level more to find source +S = "${WORKDIR}/${DMAIBRANCH}/davinci_multimedia_application_interface/dmai_${PV}/dmai" + +# Hack to be able to use recent kernel headers from userspace +TARGET_CC_ARCH += " -D__EXPORTED_HEADERS__" + +PV = "2_10_00_01+svnr${SRCPV}" + +LIC_FILES_CHKSUM = "file://dmai_${PV}_License.html;md5=3302f728a5a42f97cabc26a54d7fa607" + +# This package has high dependence on kernel, use kernel PR as base and append a local version +PR = "${MACHINE_KERNEL_PR}" +PR_append = "o" + +DMAIBRANCH_dm6446 = "trunk" +DMAIBRANCH_dm6467 = "branches/GITPSP_INT_101009" +DMAIBRANCH_omap3 = "trunk" +DMAIBRANCH_dm355 = "branches/GITPSP_INT_101009" +DMAIBRANCH_dm365 = "trunk" +DMAIBRANCH_omapl137 = "trunk" +DMAIBRANCH_omapl138 = "trunk" +DMAIBRANCH ?= "UNDEFINED_DMAIBRANCH" + +SRCREV_dm6446 = "482" +SRCREV_dm6467 = "441" +SRCREV_omap3 = "642" +SRCREV_dm355 = "424" +SRCREV_dm365 = "570" +SRCREV_omapl137 = "482" +SRCREV_omapl138 = "570" +SRCREV ?= "UNDEFINED_SRCREV" + +SRC_URI_append = " file://omap3530-r642-remove-include-videodev.diff;striplevel=3 \ + file://r642-fix-config-bld.diff;striplevel=3 \ + " + diff --git a/extras/recipes-ti/dsplink/ti-dsplink.inc b/extras/recipes-ti/dsplink/ti-dsplink.inc new file mode 100644 index 00000000..ce7cbf97 --- /dev/null +++ b/extras/recipes-ti/dsplink/ti-dsplink.inc @@ -0,0 +1,211 @@ +DESCRIPTION = "DSPLINK Inter-Processor Communications (IPC) for TI ARM/DSP processors" +HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/DSPLink/index.html" +SECTION = "devel" +LICENSE = "GPLv2" + +LIC_FILES_CHKSUM = "file://dsplink/doc/gpl_2.0.pdf;md5=70996be607b61df78ce46093f4afe2bd" + + +# TODO :: KERNEL_CC, should use for kernel cc for module build? +# TODO :: Need to understand why OBJDUMP is required for kernel module +# TODO :: Unset required since LDFLAGS gets picked up and used incorrectly - investigate +# TODO :: Do we need to pass so many variables to each make step? + +inherit module + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc + +PROVIDES = "ti-dsplink-module" +PROVIDES += "ti-dsplink-examples" + +# This package builds a kernel module, use kernel PR as base and append a local version +PR = "${MACHINE_KERNEL_PR}" +PR_append = "j" + +S = "${WORKDIR}/dsplink_linux_${PV}" + +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/${PV_DL_PATH}/dsplink_linux_${PV}.tar.gz;name=dsplinktarball \ + file://ti-dsplink-examples-run.sh \ + file://ti-dsplink-examples-loadmodules.sh \ + file://ti-dsplink-examples-unloadmodules.sh " + +DEPENDS = "ti-dspbios ti-xdctools ti-cgt6x" +DEPENDS += "virtual/kernel perl-native" + +# SOC_FAMILY configuration + +DSPLINKPLATFORM_dm6446 = "DAVINCI" +DSPLINKPLATFORM_dm6467 = "DAVINCIHD" +DSPLINKPLATFORM_omapl137 = "OMAPL1XX" +DSPLINKPLATFORM_omapl138 = "OMAPL138" +DSPLINKPLATFORM_omap3 = "OMAP3530" +DSPLINKPLATFORM ?= "<UNDEFINED_DSPLINKPLATFORM>" + +DSPLINKDSPCFG_dm6446 = "DM6446GEMSHMEM" +DSPLINKDSPCFG_dm6467 = "DM6467GEMSHMEM" +DSPLINKDSPCFG_omapl137 = "OMAPL1XXGEMSHMEM" +DSPLINKDSPCFG_omapl138 = "OMAPL138GEMSHMEM" +DSPLINKDSPCFG_omap3 = "OMAP3530SHMEM" +DSPLINKDSPCFG ?= "<UNDEFINED_DSPLINKDSPCFG>" + +DSPLINKDSP_dm6446 = "DM6446GEM_0" +DSPLINKDSP_dm6467 = "DM6467GEM_0" +DSPLINKDSP_omapl137 = "OMAPL1XXGEM_0" +DSPLINKDSP_omapl138 = "OMAPL138GEM_0" +DSPLINKDSP_omap3 = "OMAP3530_0" +DSPLINKDSP ?= "<UNDEFINED_DSPLINKDSP>" + +DSPLINKGPPOS_dm6446 = "DM6446LSP" +DSPLINKGPPOS_dm6467 = "DM6467LSP" +DSPLINKGPPOS_omapl137 = "ARM" +DSPLINKGPPOS_omapl138 = "ARM" +DSPLINKGPPOS_omap3 = "OMAPLSP" +DSPLINKGPPOS ?= "<DEFINED_DSPLINKGPPOS>" + +# Exported Variable needed by build +DSPLINK = "${S}/dsplink" +export DSPLINK + +do_configure() { + + # Run perl script to create appropriate makefiles (v1.60 and up) + ( + cd ${DSPLINK} + perl config/bin/dsplinkcfg.pl --platform=${DSPLINKPLATFORM} --nodsp=1 \ + --dspcfg_0=${DSPLINKDSPCFG} --dspos_0=DSPBIOS5XX \ + --gppos=${DSPLINKGPPOS} --comps=ponslrmc + ) +} + +do_prepsources () { + + # Prepare the tree for rebuiling - clean and generate interfaces + XDCPATH=${DSPLINK} ${XDC_INSTALL_DIR}/xdc .make -PR . + XDCPATH=${DSPLINK} ${XDC_INSTALL_DIR}/xdc clean -PR . + XDCPATH=${DSPLINK} ${XDC_INSTALL_DIR}/xdc .interfaces -PR . +} + +addtask prepsources after do_configure before do_compile + +do_compile() { + # TODO :: KERNEL_CC, should use for kernel module build? + # TODO :: Need to understand why OBJDUMP is required for kernel module + # Unset these since LDFLAGS gets picked up and used incorrectly.... need + # investigation + + unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS + + # Build the gpp user space library + cd ${DSPLINK}/gpp/src/api && make \ + CROSS_COMPILE="${TARGET_PREFIX}" \ + CC="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \ + AR="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ar" \ + LD="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ld" \ + COMPILER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \ + ARCHIVER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ar" \ + KERNEL_DIR="${STAGING_KERNEL_DIR}" \ + all + + # Build the gpp kernel space (debug and release) + do_make_scripts + cd ${DSPLINK}/gpp/src && make \ + OBJDUMP="${TARGET_PREFIX}objdump" \ + CROSS_COMPILE="${TARGET_PREFIX}" \ + CC="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \ + AR="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ar" \ + LD="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ld" \ + COMPILER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \ + ARCHIVER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ar" \ + KERNEL_DIR="${STAGING_KERNEL_DIR}" \ + BASE_BUILDOS="${STAGING_KERNEL_DIR}" \ + all + + # Build the gpp samples + cd ${DSPLINK}/gpp/src/samples && make \ + BASE_TOOLCHAIN="${TOOLCHAIN_PATH}" \ + BASE_CGTOOLS="${BASE_TOOLCHAIN}/bin" \ + OSINC_PLATFORM="${TOOLCHAIN_PATH}/lib/gcc/${TARGET_SYS}/$(${TARGET_PREFIX}gcc -dumpversion)/include" \ + OSINC_TARGET="${BASE_TOOLCHAIN}/target/usr/include" \ + CROSS_COMPILE="${TARGET_PREFIX}" \ + CC="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \ + LD="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \ + AR="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ar" \ + COMPILER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \ + LINKER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}gcc" \ + ARCHIVER="${TOOLCHAIN_PATH}/${TARGET_PREFIX}ar" \ + KERNEL_DIR="${STAGING_KERNEL_DIR}" \ + all + + # Build the dsp library (debug and release) + cd ${DSPLINK}/dsp/src && make \ + BASE_CGTOOLS="${CODEGEN_INSTALL_DIR}" \ + BASE_SABIOS="${BIOS_INSTALL_DIR}" \ + all + + # Build the dsp samples (debug and release) + cd ${DSPLINK}/dsp/src/samples && make \ + BASE_CGTOOLS="${CODEGEN_INSTALL_DIR}" \ + BASE_SABIOS="${BIOS_INSTALL_DIR}" \ + all +} + +KERNEL_VERSION = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-abiversion')}" + +do_install () { + + # Install the kernel module + install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp + install -m 0755 ${DSPLINK}/gpp/export/BIN/Linux/${DSPLINKPLATFORM}/RELEASE/dsplinkk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/ + + # Install the example apps (gpp and dsp) + install -d ${D}/${installdir}/ti-dsplink-examples/ + cp ${DSPLINK}/gpp/export/BIN/Linux/${DSPLINKPLATFORM}/RELEASE/*gpp ${D}/${installdir}/ti-dsplink-examples + cp ${DSPLINK}/dsp/export/BIN/DspBios/${DSPLINKPLATFORM}/${DSPLINKDSP}/RELEASE/*.out ${D}/${installdir}/ti-dsplink-examples + + # Install the example apps module un/load scripts + install ${WORKDIR}/ti-dsplink-examples-loadmodules.sh ${D}/${installdir}/ti-dsplink-examples + install ${WORKDIR}/ti-dsplink-examples-unloadmodules.sh ${D}/${installdir}/ti-dsplink-examples + install ${WORKDIR}/ti-dsplink-examples-run.sh ${D}/${installdir}/ti-dsplink-examples + + # Install/Stage the Source Tree + install -d ${D}${LINK_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${LINK_INSTALL_DIR_RECIPE} + chmod -R +w ${D}${LINK_INSTALL_DIR_RECIPE} + + # Changes path of include txt file to use LINK_INSTALL_DIR variable for GPP + for i in $(find ${D}${LINK_INSTALL_DIR_RECIPE}/dsplink/gpp/export/BIN/Linux/${DSPLINKPLATFORM}/*/ -name "*.txt"); do + sed -i ${i} -e s=${S}=\$\{LINK_INSTALL_DIR\}=g + done + + # Changes path of include txt file to use LINK_INSTALL_DIR variable for DSP + for i in $(find ${D}${LINK_INSTALL_DIR_RECIPE}/dsplink/dsp/export/BIN/DspBios/${DSPLINKPLATFORM}/${DSPLINKDSP}/*/ -name "*.txt"); do + sed -i ${i} -e s=${S}=\$\{LINK_INSTALL_DIR\}=g + done + +} + +PACKAGES =+ "ti-dsplink-module" +FILES_ti-dsplink-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/dsplinkk.ko" +RDEPENDS_ti-dsplink-module += "update-modules" + +pkg_postinst_ti-dsplink-module () { +#!/bin/sh +if [ -n "$D" ]; then + exit 1 +fi + +depmod -a +update-modules || true +} + +pkg_postrm_ti-dsplink-module () { +#!/bin/sh +update-modules || true +} + +PACKAGES += "ti-dsplink-examples" +RDEPENDS_ti-dsplink-examples_append = " ti-dsplink-module" +RDEPENDS_ti-dsplink-examples_append_omap3 += " ti-lpm-module ti-lpm-utils" +FILES_ti-dsplink-examples = "${installdir}/ti-dsplink-examples/*" +INSANE_SKIP_ti-dsplink-examples = "1" diff --git a/extras/recipes-ti/dsplink/ti-dsplink/0001-remove-check-for-make-version-3.85-works-fine.patch b/extras/recipes-ti/dsplink/ti-dsplink/0001-remove-check-for-make-version-3.85-works-fine.patch new file mode 100644 index 00000000..70596c5d --- /dev/null +++ b/extras/recipes-ti/dsplink/ti-dsplink/0001-remove-check-for-make-version-3.85-works-fine.patch @@ -0,0 +1,28 @@ +From a96aa25518f306138c71b3fc074381f102092a13 Mon Sep 17 00:00:00 2001 +From: Koen Kooi <koen@dominion.thruhere.net> +Date: Fri, 23 Dec 2011 10:58:47 +0100 +Subject: [PATCH] remove check for make version, 3.85 works fine + +Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> +--- + dsplink/make/start.mk | 4 ---- + 1 files changed, 0 insertions(+), 4 deletions(-) + +diff --git a/dsplink/make/start.mk b/dsplink/make/start.mk +index 0589f3c..a8f5740 100644 +--- a/dsplink/make/start.mk ++++ b/dsplink/make/start.mk +@@ -39,10 +39,6 @@ + # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # ============================================================================ + +- +-# Check for MAKE version +-$(if $(filter $(MAKE_VERSION), 3.81 3.81beta1 3.90 3.92),,\ +-$(error This makefile requires one of GNU make version 3.81 3.81beta1 3.90 3.92)) + # ============================================================================ + # Export the directory separator + # ============================================================================ +-- +1.7.7.4 + diff --git a/extras/recipes-ti/dsplink/ti-dsplink/dsplink-BKL-fix.patch b/extras/recipes-ti/dsplink/ti-dsplink/dsplink-BKL-fix.patch new file mode 100644 index 00000000..eab3ec63 --- /dev/null +++ b/extras/recipes-ti/dsplink/ti-dsplink/dsplink-BKL-fix.patch @@ -0,0 +1,71 @@ +From e0931bf37628727903a567f1c7096ae0011edc3d Mon Sep 17 00:00:00 2001 +From: Koen Kooi <koen@dominion.thruhere.net> +Date: Tue, 4 Jan 2011 13:49:05 +0100 +Subject: [PATCH] Adjust drv_pmgr for post 2.6.36 ioctl changes + +Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> +--- + dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c | 17 ++++++++++++++++- + 1 files changed, 16 insertions(+), 1 deletions(-) + +diff --git a/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c b/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c +index a9b831c..e4a836d 100644 +--- a/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c ++++ b/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c +@@ -399,10 +399,15 @@ DRV_Release (struct inode * inode, struct file * filp) ; + * @see None + * ---------------------------------------------------------------------------- + */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36) + STATIC + int + DRV_Ioctl (struct inode * inode, struct file * filp, + unsigned int cmd, unsigned long args) ; ++#else ++STATIC ++int DRV_Ioctl (struct file *filp, unsigned int cmd, unsigned long args); ++#endif + + + /** ---------------------------------------------------------------------------- +@@ -495,7 +500,11 @@ STATIC struct file_operations driverOps = { + open: DRV_Open, + flush: DRV_Flush, + release: DRV_Release, ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36) + ioctl: DRV_Ioctl, ++#else ++ unlocked_ioctl: DRV_Ioctl, ++#endif + mmap: DRV_Mmap, + read: DRV_Read, + .owner = THIS_MODULE +@@ -817,10 +826,16 @@ DRV_Release (struct inode * inode, struct file * filp) + * @desc Function to invoke the APIs through ioctl. + * ---------------------------------------------------------------------------- + */ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36) + STATIC + NORMAL_API + int DRV_Ioctl (struct inode * inode, struct file * filp, + unsigned int cmd, unsigned long args) ++#else ++STATIC ++NORMAL_API ++int DRV_Ioctl (struct file *filp, unsigned int cmd, unsigned long args) ++#endif + { + DSP_STATUS status = DSP_SOK ; + int osStatus = 0 ; +@@ -829,7 +844,7 @@ int DRV_Ioctl (struct inode * inode, struct file * filp, + CMD_Args apiArgs ; + + +- TRC_4ENTER ("DRV_Ioctl", inode, filp, cmd, args) ; ++ TRC_3ENTER ("DRV_Ioctl", filp, cmd, args) ; + + retVal = copy_from_user ((Pvoid) &apiArgs, + (const Pvoid) srcAddr, +-- +1.6.6.1 + diff --git a/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_dm6446_build_support.patch b/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_dm6446_build_support.patch new file mode 100644 index 00000000..5a25dbb5 --- /dev/null +++ b/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_dm6446_build_support.patch @@ -0,0 +1,337 @@ +From 7b36e94dcb33892e1df7d3327db31bd41fb6167e Mon Sep 17 00:00:00 2001 +From: Roger Monk <r-monk@ti.com> +Date: Fri, 5 Mar 2010 19:22:58 +0000 +Subject: [PATCH] dsplink_1_64: Add support for building with CS tools + against 2.6.30+ + + * Tweaked Patches from Niclas + +Signed-off-by: Roger Monk <r-monk@ti.com> +--- + dsplink/config/bin/dsplinkcfg.pl | 17 ++++- + dsplink/gpp/src/DIRS | 5 + + dslpink/gpp/src/Makefile | 8 ++- + dsplink/gpp/src/Rules.mk | 5 + + dsplink/make/Linux/davinci_2.6.mk | 211 +++++++++++++++++++++++++++++++++++++++++++++ + 5 files changed, 244 insertions(+), 2 deletions(-) + create mode 100644 make/Linux/davinci_2.6.mk + +diff --git a/dsplink/config/bin/dsplinkcfg.pl b/dsplink/config/bin/dsplinkcfg.pl +index 644aa38..e83c133 100644 +--- a/dsplink/config/bin/dsplinkcfg.pl ++++ b/dsplink/config/bin/dsplinkcfg.pl +@@ -215,6 +215,18 @@ my %CFG_GPPOS_DM6467LSPuc = + 'OSPREFIX' => 'uc', + ) ; + ++# DM6446 Linux ++my %CFG_GPPOS_DM6446LSP = ++( ++ 'NAME' => 'DM6446LSP', ++ 'PREFIX' => '2.6', ++ 'ID' => 'DM6446LSP', ++ 'DESC' => 'DM6446 LSP for DM6446', ++ 'VER' => '2.6.18', ++ 'TYPE' => 'Linux', ++ 'LOADERS'=> [\%CFG_LOADER_COFF, ], ++ 'COMPS' => 'ponslrmc', ++) ; + + # OMAPL138 Linux with uCLibc filesystem + my %CFG_GPPOS_OMAPL138LSPuc = +@@ -356,7 +368,7 @@ my %CFG_DSPCFG_DM6446GEMSHMEM = + 'PHYID' => 'DM6446GEMSHMEM', + 'PHYDESC' => 'Shared Memory Physical Interface', + 'PHYTYPE' => 'SHMEM', +- 'GPPOS' => [\%CFG_GPPOS_MVL5U, \%CFG_GPPOS_MVL5G], ++ 'GPPOS' => [\%CFG_GPPOS_MVL5U, \%CFG_GPPOS_MVL5G, \%CFG_GPPOS_DM6446LSP], + 'DSPOS' => [\%CFG_DSPOS_5XX, \%CFG_DSPOS_6XX], + # DSP defines + 'DSPNAME' => 'DM6446GEM', +@@ -2994,6 +3006,9 @@ sub main { + if ($platform {'ID'} eq 'DA850') { + print "GPP side distribution file: \$DSPLINK" . $DIRSEP . "gpp" . $DIRSEP. "src" . $DIRSEP. "Rules.mk\n" ; + } ++ if ($platform {'ID'} eq 'DAVINCI') { ++ print "GPP side distribution file: \$DSPLINK" . $DIRSEP . "gpp" . $DIRSEP. "src" . $DIRSEP. "Rules.mk\n" ; ++ } + if ($platform {'ID'} eq 'DAVINCIHD') { + print "GPP side distribution file: \$DSPLINK" . $DIRSEP . "gpp" . $DIRSEP. "src" . $DIRSEP. "Rules.mk\n" ; + } +diff --git a/dsplink/gpp/src/DIRS b/dsplink/gpp/src/DIRS +index e82969c..05bad2b 100644 +--- a/dsplink/gpp/src/DIRS ++++ b/dsplink/gpp/src/DIRS +@@ -63,6 +63,10 @@ ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCIHD") + DIRS += \ + api + else # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCIHD") ++ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI") ++DIRS += \ ++ api ++else # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI") + ifeq ("$(TI_DSPLINK_PLATFORM)", "DA850") + DIRS += \ + api +@@ -77,6 +81,7 @@ DIRS += \ + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530") + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL138") + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCIHD") ++endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI") + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DA850") + else # ifeq ("$(TI_DSPLINK_GPPOS)", "Linux") + DIRS += \ +diff --git a/dsplink/gpp/src/Makefile b/dsplink/gpp/src/Makefile +index 9e6bbb1..49c3b97 100644 +--- a/dsplink/gpp/src/Makefile ++++ b/dsplink/gpp/src/Makefile +@@ -78,7 +78,13 @@ ifeq ("$(TI_DSPLINK_GPPOS)", "Linux") + include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Rules.mk + include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Makefile_kbuild + else # else ("$(TI_DSPLINK_PLATFORM)", "DAVINCIHD") +- include Makefile_bld ++ ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI") ++ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Makefile_bld ++ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Rules.mk ++ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Makefile_kbuild ++ else # else ("$(TI_DSPLINK_PLATFORM)", "DAVINCI") ++ include Makefile_bld ++ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI") + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530") + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DA850") + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL138") +diff --git a/dsplink/gpp/src/Rules.mk b/dsplink/gpp/src/Rules.mk +index 658ee8a..5a6f52a 100644 +--- a/dsplink/gpp/src/Rules.mk ++++ b/dsplink/gpp/src/Rules.mk +@@ -63,6 +63,11 @@ KERNEL_DIR := ${HOME}/da850/DaVinci-PSP-SDK-03.20.00.01/src/kernel/linux-03.2 + TOOL_PATH := ${HOME}/git/arm-2008q3/bin + endif #ifeq ("$(TI_DSPLINK_PLATFORM)", "DA850") + ++ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI") ++KERNEL_DIR := ${HOME}/linux-davinci ++TOOL_PATH := ${HOME}/toolchains/git/arm-2009q1-203/bin ++endif #ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI") ++ + ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCIHD") + KERNEL_DIR := ${HOME}/linux-davinci + TOOL_PATH := ${HOME}/toolchains/git/arm-2009q1-203/bin +diff --git a/dsplink/make/Linux/davinci_2.6.mk b/dsplink/make/Linux/davinci_2.6.mk +new file mode 100644 +index 0000000..834fd74 +--- /dev/null ++++ b/dsplink/make/Linux/davinci_2.6.mk +@@ -0,0 +1,211 @@ ++# ============================================================================ ++# @file davinci_2.6.mk ++# ++# @path $(DSPLINK)/make/Linux/ ++# ++# @desc This makefile defines OS specific macros used by MAKE system for ++# the Montavista Pro 5.0 Linux distribution. ++# ++# @ver 1.64 ++# ============================================================================ ++# Copyright (C) 2002-2009, Texas Instruments Incorporated - ++# http://www.ti.com/ ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions ++# are met: ++# ++# * Redistributions of source code must retain the above copyright ++# notice, this list of conditions and the following disclaimer. ++# ++# * Redistributions in binary form must reproduce the above copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# ++# * Neither the name of Texas Instruments Incorporated nor the names of ++# its contributors may be used to endorse or promote products derived ++# from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ++# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, ++# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ++# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR ++# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ++# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; ++# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ++# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR ++# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ++# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++# ============================================================================ ++ ++ ++ifndef DAVINCI_LINUX2_6_MK ++ ++define DAVINCI_LINUX2_6_MK ++endef ++ ++ ++# ============================================================================ ++# Let the make system know that a specific distribution for the GPP OS ++# is being used. ++# ============================================================================ ++USE_DISTRIBUTION := 1 ++ ++ ++# ============================================================================ ++# Set the values of necessary variables to be used for the OS. ++# ============================================================================ ++ ++# ---------------------------------------------------------------------------- ++# Base directory for the GPP OS ++# ---------------------------------------------------------------------------- ++BASE_BUILDOS := ${HOME}/linux-davinci ++ ++# ---------------------------------------------------------------------------- ++# Base for toolchain ++# ---------------------------------------------------------------------------- ++BASE_TOOLCHAIN := ${HOME}/toolchains/git/arm-2009q1-203 ++ ++# ---------------------------------------------------------------------------- ++# Base for code generation tools - compiler, linker, archiver etc. ++# ---------------------------------------------------------------------------- ++BASE_CGTOOLS := $(BASE_TOOLCHAIN)/bin ++ ++# ---------------------------------------------------------------------------- ++# Base directory for include files provided by GPP OS ++# ---------------------------------------------------------------------------- ++BASE_OSINC := $(BASE_BUILDOS)/include ++ ++OSINC_GENERIC := $(BASE_OSINC) ++OSINC_PLATFORM := $(BASE_TOOLCHAIN)/lib/gcc/arm-none-linux-gnueabi/4.2.3/include ++OSINC_TARGET := $(BASE_TOOLCHAIN)/arm-none-linux-gnueabi/libc/usr/include ++ ++ifneq ("$(VARIANT)", "") ++OSINC_VARIANT := $(BASE_OSINC) ++endif ++ ++ ++# ---------------------------------------------------------------------------- ++# Base directory for libraries provided by GPP OS ++# ---------------------------------------------------------------------------- ++BASE_OSLIB := $(BASE_TOOLCHAIN)/lib ++ ++OSLIB_GENERIC := $(BASE_OSLIB) ++OSLIB_PLATFORM := $(BASE_OSLIB) ++ ++ ++ifneq ("$(VARIANT)", "") ++OSLIB_VARIANT := $(BASE_OSLIB) ++endif ++ ++ ++# ============================================================================ ++# COMPILER ++# ============================================================================ ++ ++# ---------------------------------------------------------------------------- ++# Name of the compiler ++# ---------------------------------------------------------------------------- ++COMPILER := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-gcc ++LD := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-ld ++ ++CROSS_COMPILE := arm-none-linux-gnueabi- ++export CROSS_COMPILE ++ ++# ---------------------------------------------------------------------------- ++# Command line switches used by the compiler ++# ++# CC_SW_DEF Command line defines ++# CC_SW_INC Search path for header files ++# CC_SW_OBJ Create object file ++# CC_SW_DEB Include debug information ++# ---------------------------------------------------------------------------- ++CC_SW_DEF := -D ++CC_SW_INC := -I ++CC_SW_OBJ := -o ++CC_SW_DEB := -g ++ ++# ---------------------------------------------------------------------------- ++# Standard flags for the compiler ++# ---------------------------------------------------------------------------- ++STD_USER_FLAGS := -Wall -c ++ ++# ---------------------------------------------------------------------------- ++# Flags for the compiler when building a library ++# ---------------------------------------------------------------------------- ++EXE_CC_FLAGS := ++ ++# ---------------------------------------------------------------------------- ++# Standard flags for the compiler when building an executable ++# ---------------------------------------------------------------------------- ++DRV_CC_FLAGS := -nostdinc ++ ++# ---------------------------------------------------------------------------- ++# Flags for the compiler when building a driver ++# ---------------------------------------------------------------------------- ++LIB_CC_FLAGS := ++ ++# ---------------------------------------------------------------------------- ++# Standard definitions for the compiler ++# ---------------------------------------------------------------------------- ++STD_CC_DEFNS := -D_REENTRANT ++ ++# ============================================================================ ++# ARCHIVER2 - This denotes the archiver. ++# ============================================================================ ++ARCHIVER := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-ar ++ ++# ---------------------------------------------------------------------------- ++# Standard flags for the archiver ++# ---------------------------------------------------------------------------- ++STD_AR_FLAGS := -rs ++ ++ ++# ============================================================================ ++# LINKER used for Library & Driver build ++# ============================================================================ ++LINKER := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-gcc ++ ++# ---------------------------------------------------------------------------- ++# Command line switches used by the linker ++# ++# LD_SW_LIB Search path for libraries ++# LD_SW_OUT Output filename ++# LD_SW_RELOC Generate relocateable output ++# ---------------------------------------------------------------------------- ++LD_SW_LIB := -L ++LD_SW_OUT := -o ++LD_SW_RELOC := -r ++ ++# ---------------------------------------------------------------------------- ++# Flags for the LD when building an executable ++# ---------------------------------------------------------------------------- ++STD_LD_FLAGS := ++ ++# ---------------------------------------------------------------------------- ++# Standard flags for the LD ++# ---------------------------------------------------------------------------- ++EXE_LD_FLAGS := -lpthread -lc ++ ++# ---------------------------------------------------------------------------- ++# Standard flags for the archiver ++# ---------------------------------------------------------------------------- ++DRV_LD_FLAGS := ++ ++ ++# ============================================================================ ++# Post processing utilities for Linux 2.6 ++# ============================================================================ ++ifneq ($(CONFIG_MODVERSIONS),) ++CMD_MODPOST_FLAGS := -m -i ++else ++CMD_MODPOST_FLAGS := -i ++endif ++ ++CMD_MODPOST := $(BASE_BUILDOS)/scripts/mod/modpost \ ++ $(CMD_MODPOST_FLAGS) $(BASE_BUILDOS)/Module.symvers \ ++ $(BASE_BUILDOS)/vmlinux ++ ++ ++endif # ifndef DAVINCI_LINUX2_6_MK +-- +1.6.0.6 + diff --git a/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_omapl137_build_support.patch b/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_omapl137_build_support.patch new file mode 100644 index 00000000..fa4cb2e6 --- /dev/null +++ b/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_add_omapl137_build_support.patch @@ -0,0 +1,288 @@ +From fd5858c3a247bc61a4de3af1a5097cb05042cfa4 Mon Sep 17 00:00:00 2001 +From: Roger Monk <r-monk@ti.com> +Date: Sun, 14 Mar 2010 22:13:42 +0000 +Subject: [PATCH] omap1 + +Signed-off-by: Roger Monk <r-monk@ti.com> +--- + dsplink/config/bin/dsplinkcfg.pl | 2 +- + dsplink/gpp/src/DIRS | 5 + + dsplink/gpp/src/Makefile | 8 ++- + dsplink/make/Linux/omapl1xx_arm.mk | 210 ++++++++++++++++++++++++++++++++++++ + 4 files changed, 223 insertions(+), 2 deletions(-) + create mode 100644 dsplink/make/Linux/omapl1xx_arm.mk + +diff --git a/dsplink/config/bin/dsplinkcfg.pl b/dsplink/config/bin/dsplinkcfg.pl +index e83c133..8151945 100644 +--- a/dsplink/config/bin/dsplinkcfg.pl ++++ b/dsplink/config/bin/dsplinkcfg.pl +@@ -523,7 +523,7 @@ my %CFG_DSPCFG_OMAPL1XXGEMSHMEM = + 'PHYID' => 'OMAPL1XXGEMSHMEM', + 'PHYDESC' => 'Shared Memory Physical Interface', + 'PHYTYPE' => 'SHMEM', +- 'GPPOS' => [\%CFG_GPPOS_MVL5U, \%CFG_GPPOS_MVL5G], ++ 'GPPOS' => [\%CFG_GPPOS_MVL5U, \%CFG_GPPOS_MVL5G, \%CFG_GPPOS_ARM], + 'DSPOS' => [\%CFG_DSPOS_5XX], + # DSP defines + 'DSPNAME' => 'OMAPL1XXGEM', +diff --git a/dsplink/gpp/src/DIRS b/dsplink/gpp/src/DIRS +index 05bad2b..af48904 100644 +--- a/dsplink/gpp/src/DIRS ++++ b/dsplink/gpp/src/DIRS +@@ -55,6 +55,10 @@ ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL138") + DIRS += \ + api + else # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL138") ++ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL1XX") ++DIRS += \ ++ api ++else # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL1XX") + ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530") + DIRS += \ + api +@@ -83,6 +87,7 @@ endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL138") + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCIHD") + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI") + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DA850") ++endif + else # ifeq ("$(TI_DSPLINK_GPPOS)", "Linux") + DIRS += \ + arch \ +diff --git a/dsplink/gpp/src/Makefile b/dsplink/gpp/src/Makefile +index 49c3b97..0afd988 100644 +--- a/dsplink/gpp/src/Makefile ++++ b/dsplink/gpp/src/Makefile +@@ -83,7 +83,13 @@ ifeq ("$(TI_DSPLINK_GPPOS)", "Linux") + include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Rules.mk + include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Makefile_kbuild + else # else ("$(TI_DSPLINK_PLATFORM)", "DAVINCI") +- include Makefile_bld ++ ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAPL1XX") ++ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Makefile_bld ++ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Rules.mk ++ include $(DSPLINK)$(DIRSEP)gpp$(DIRSEP)src$(DIRSEP)Makefile_kbuild ++ else # else ("$(TI_DSPLINK_PLATFORM)", "DAVINCI") ++ include Makefile_bld ++ endif + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DAVINCI") + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "OMAP3530") + endif # ifeq ("$(TI_DSPLINK_PLATFORM)", "DA850") +diff --git a/dsplink/make/Linux/omapl1xx_arm.mk b/dsplink/make/Linux/omapl1xx_arm.mk +new file mode 100644 +index 0000000..3e42e87 +--- /dev/null ++++ b/dsplink/make/Linux/omapl1xx_arm.mk +@@ -0,0 +1,210 @@ ++# ============================================================================ ++# @file omapl1xx_arm.mk ++# ++# @path $(DSPLINK)/make/Linux/ ++# ++# @desc This makefile defines OS specific macros used by MAKE system for ++# the Montavista Pro 5.0 Linux distribution with mvlpro. ++# ++# @ver 1.64 ++# ============================================================================ ++# Copyright (C) 2002-2009, Texas Instruments Incorporated - ++# http://www.ti.com/ ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions ++# are met: ++# ++# * Redistributions of source code must retain the above copyright ++# notice, this list of conditions and the following disclaimer. ++# ++# * Redistributions in binary form must reproduce the above copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# ++# * Neither the name of Texas Instruments Incorporated nor the names of ++# its contributors may be used to endorse or promote products derived ++# from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ++# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, ++# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ++# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR ++# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ++# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; ++# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ++# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR ++# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, ++# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++# ============================================================================ ++ ++ifndef OMAPL1XX_ARM_MK ++ ++define OMAPL1XX_ARM_MK ++endef ++ ++ ++# ============================================================================ ++# Let the make system know that a specific distribution for the GPP OS ++# is being used. ++# ============================================================================ ++USE_DISTRIBUTION := 1 ++ ++ ++# ============================================================================ ++# Set the values of necessary variables to be used for the OS. ++# ============================================================================ ++ ++# ---------------------------------------------------------------------------- ++# Base directory for the GPP OS ++# ---------------------------------------------------------------------------- ++BASE_BUILDOS := ${HOME}/da850/DaVinci-PSP-SDK-03.20.00.01/src/kernel/linux-03.20.00.01 ++ ++# ---------------------------------------------------------------------------- ++# Base for toolchain ++# ---------------------------------------------------------------------------- ++BASE_TOOLCHAIN := ${HOME}/git/arm-2008q3 ++ ++# ---------------------------------------------------------------------------- ++# Base for code generation tools - compiler, linker, archiver etc. ++# ---------------------------------------------------------------------------- ++BASE_CGTOOLS := $(BASE_TOOLCHAIN)/bin ++ ++# ---------------------------------------------------------------------------- ++# Base directory for include files provided by GPP OS ++# ---------------------------------------------------------------------------- ++BASE_OSINC := $(BASE_BUILDOS)/include ++ ++OSINC_GENERIC := $(BASE_OSINC) ++OSINC_PLATFORM := $(BASE_TOOLCHAIN)/lib/gcc/arm-none-linux-gnueabi/4.3.2/include ++OSINC_TARGET := $(BASE_TOOLCHAIN)/arm-none-linux-gnueabi/libc/usr/include ++ ++ifneq ("$(VARIANT)", "") ++OSINC_VARIANT := $(BASE_OSINC) ++endif ++ ++ ++# ---------------------------------------------------------------------------- ++# Base directory for libraries provided by GPP OS ++# ---------------------------------------------------------------------------- ++BASE_OSLIB := $(BASE_TOOLCHAIN)/lib ++ ++OSLIB_GENERIC := $(BASE_OSLIB) ++OSLIB_PLATFORM := $(BASE_OSLIB) ++ ++ ++ifneq ("$(VARIANT)", "") ++OSLIB_VARIANT := $(BASE_OSLIB) ++endif ++ ++ ++# ============================================================================ ++# COMPILER ++# ============================================================================ ++ ++# ---------------------------------------------------------------------------- ++# Name of the compiler ++# ---------------------------------------------------------------------------- ++COMPILER := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-gcc ++LD := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-ld ++ ++CROSS_COMPILE := arm-none-linux-gnueabi- ++export CROSS_COMPILE ++ ++# ---------------------------------------------------------------------------- ++# Command line switches used by the compiler ++# ++# CC_SW_DEF Command line defines ++# CC_SW_INC Search path for header files ++# CC_SW_OBJ Create object file ++# CC_SW_DEB Include debug information ++# ---------------------------------------------------------------------------- ++CC_SW_DEF := -D ++CC_SW_INC := -I ++CC_SW_OBJ := -o ++CC_SW_DEB := -g ++ ++# ---------------------------------------------------------------------------- ++# Standard flags for the compiler ++# ---------------------------------------------------------------------------- ++STD_USER_FLAGS := -Wall -c ++ ++# ---------------------------------------------------------------------------- ++# Standard flags for the compiler when building an executable ++# ---------------------------------------------------------------------------- ++EXE_CC_FLAGS := ++ ++# ---------------------------------------------------------------------------- ++# Flags for the compiler when building a driver ++# ---------------------------------------------------------------------------- ++DRV_CC_FLAGS := -nostdinc ++ ++# ---------------------------------------------------------------------------- ++# Flags for the compiler when building a library ++# ---------------------------------------------------------------------------- ++LIB_CC_FLAGS := ++ ++# ---------------------------------------------------------------------------- ++# Standard definitions for the compiler ++# ---------------------------------------------------------------------------- ++STD_CC_DEFNS := -D_REENTRANT ++ ++# ============================================================================ ++# ARCHIVER2 - This denotes the archiver. ++# ============================================================================ ++ARCHIVER := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-ar ++ ++# ---------------------------------------------------------------------------- ++# Standard flags for the archiver ++# ---------------------------------------------------------------------------- ++STD_AR_FLAGS := -rs ++ ++ ++# ============================================================================ ++# LINKER - The compiler is used for linking purpose as well. ++# ============================================================================ ++LINKER := $(BASE_CGTOOLS)/arm-none-linux-gnueabi-gcc ++ ++# ---------------------------------------------------------------------------- ++# Command line switches used by the linker ++# ++# LD_SW_LIB Search path for libraries ++# LD_SW_OUT Output filename ++# LD_SW_RELOC Generate relocateable output ++# ---------------------------------------------------------------------------- ++LD_SW_LIB := -L ++LD_SW_OUT := -o ++LD_SW_RELOC := -r ++ ++# ---------------------------------------------------------------------------- ++# Standard flags for the linker ++# ---------------------------------------------------------------------------- ++STD_LD_FLAGS := ++ ++# ---------------------------------------------------------------------------- ++# Flags for the linker when building an executable ++# ---------------------------------------------------------------------------- ++EXE_LD_FLAGS := -lpthread -lc ++ ++# ---------------------------------------------------------------------------- ++# Flags for the linker when building a driver ++# ---------------------------------------------------------------------------- ++DRV_LD_FLAGS := ++ ++ ++# ============================================================================ ++# Post processing utilities for Linux 2.6 ++# ============================================================================ ++ifneq ($(CONFIG_MODVERSIONS),) ++CMD_MODPOST_FLAGS := -m -i ++else ++CMD_MODPOST_FLAGS := -i ++endif ++ ++CMD_MODPOST := $(BASE_BUILDOS)/scripts/mod/modpost \ ++ $(CMD_MODPOST_FLAGS) $(BASE_BUILDOS)/Module.symvers \ ++ $(BASE_BUILDOS)/vmlinux ++ ++ ++endif # ifndef OMAPL1XX_ARM_MK +-- +1.6.0.6 + diff --git a/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_kernel_2_6_33_autoconf.patch b/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_kernel_2_6_33_autoconf.patch new file mode 100644 index 00000000..271b3043 --- /dev/null +++ b/extras/recipes-ti/dsplink/ti-dsplink/dsplink_1_64_kernel_2_6_33_autoconf.patch @@ -0,0 +1,335 @@ +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DA8XXGEM/da8xxgem_hal_pwr.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DA8XXGEM/da8xxgem_hal_pwr.c +--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DA8XXGEM/da8xxgem_hal_pwr.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DA8XXGEM/da8xxgem_hal_pwr.c 2010-02-09 17:42:37.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OSAL Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <asm/page.h> + #include <asm/io.h> + +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DA8XXGEM/shmem/Linux/da8xxgem_phy_shmem.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DA8XXGEM/shmem/Linux/da8xxgem_phy_shmem.c +--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DA8XXGEM/shmem/Linux/da8xxgem_phy_shmem.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DA8XXGEM/shmem/Linux/da8xxgem_phy_shmem.c 2010-02-09 17:43:06.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/module.h> + #include <linux/types.h> + #include <linux/kernel.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6437/pci/dm6437_hal_pci_dma.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6437/pci/dm6437_hal_pci_dma.c +--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6437/pci/dm6437_hal_pci_dma.c 2009-11-13 12:12:46.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6437/pci/dm6437_hal_pci_dma.c 2010-02-09 17:45:06.000000000 +0000 +@@ -21,7 +21,12 @@ + */ + + ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <asm/page.h> + #include <asm/io.h> + +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6437/pci/Linux/2.6.18/dm6437_phy_pci.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6437/pci/Linux/2.6.18/dm6437_phy_pci.c +--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6437/pci/Linux/2.6.18/dm6437_phy_pci.c 2009-11-13 12:12:46.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6437/pci/Linux/2.6.18/dm6437_phy_pci.c 2010-02-09 17:44:49.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/module.h> + #include <linux/types.h> + #include <linux/kernel.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6446GEM/shmem/Linux/dm6446gem_phy_shmem.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6446GEM/shmem/Linux/dm6446gem_phy_shmem.c +--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6446GEM/shmem/Linux/dm6446gem_phy_shmem.c 2009-11-13 12:12:46.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6446GEM/shmem/Linux/dm6446gem_phy_shmem.c 2010-02-09 17:44:21.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/module.h> + #include <linux/types.h> + #include <linux/kernel.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6467GEM/shmem/Linux/dm6467gem_phy_shmem.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6467GEM/shmem/Linux/dm6467gem_phy_shmem.c +--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DM6467GEM/shmem/Linux/dm6467gem_phy_shmem.c 2009-11-13 12:12:46.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DM6467GEM/shmem/Linux/dm6467gem_phy_shmem.c 2010-02-09 17:41:46.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/module.h> + #include <linux/types.h> + #include <linux/kernel.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DM648/pci/dm648_hal_pci_dma.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DM648/pci/dm648_hal_pci_dma.c +--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DM648/pci/dm648_hal_pci_dma.c 2009-11-13 12:12:46.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DM648/pci/dm648_hal_pci_dma.c 2010-02-09 17:42:02.000000000 +0000 +@@ -20,7 +20,12 @@ + * ============================================================================ + */ + ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <asm/page.h> + #include <asm/io.h> + +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/DM648/pci/Linux/2.6.18/dm648_phy_pci.c dsplink_linux_1_64b/dsplink/gpp/src/arch/DM648/pci/Linux/2.6.18/dm648_phy_pci.c +--- dsplink_linux_1_64a/dsplink/gpp/src/arch/DM648/pci/Linux/2.6.18/dm648_phy_pci.c 2009-11-13 12:12:46.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/DM648/pci/Linux/2.6.18/dm648_phy_pci.c 2010-02-09 17:42:21.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/module.h> + #include <linux/types.h> + #include <linux/kernel.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/OMAP2530/shmem/Linux/omap2530_phy_shmem.c dsplink_linux_1_64b/dsplink/gpp/src/arch/OMAP2530/shmem/Linux/omap2530_phy_shmem.c +--- dsplink_linux_1_64a/dsplink/gpp/src/arch/OMAP2530/shmem/Linux/omap2530_phy_shmem.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/OMAP2530/shmem/Linux/omap2530_phy_shmem.c 2010-02-09 17:43:29.000000000 +0000 +@@ -25,7 +25,12 @@ + + + /* ----------------------------------- OS Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/module.h> + #include <linux/types.h> + #include <linux/kernel.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/OMAP3530/shmem/Linux/omap3530_phy_shmem.c dsplink_linux_1_64b/dsplink/gpp/src/arch/OMAP3530/shmem/Linux/omap3530_phy_shmem.c +--- dsplink_linux_1_64a/dsplink/gpp/src/arch/OMAP3530/shmem/Linux/omap3530_phy_shmem.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/OMAP3530/shmem/Linux/omap3530_phy_shmem.c 2010-02-09 17:43:50.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/module.h> + #include <linux/types.h> + #include <linux/kernel.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/arch/TNETV107XGEM/shmem/Linux/tnetv107xgem_phy_shmem.c dsplink_linux_1_64b/dsplink/gpp/src/arch/TNETV107XGEM/shmem/Linux/tnetv107xgem_phy_shmem.c +--- dsplink_linux_1_64a/dsplink/gpp/src/arch/TNETV107XGEM/shmem/Linux/tnetv107xgem_phy_shmem.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/arch/TNETV107XGEM/shmem/Linux/tnetv107xgem_phy_shmem.c 2010-02-09 17:44:06.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/module.h> + #include <linux/types.h> + #include <linux/kernel.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/dpc.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/dpc.c +--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/dpc.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/dpc.c 2010-02-09 17:47:25.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Specific Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/spinlock.h> + #include <linux/sched.h> + #include <linux/interrupt.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/isr.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/isr.c +--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/isr.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/isr.c 2010-02-09 17:46:54.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Specific Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/version.h> + #include <linux/spinlock.h> + #include <linux/sched.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/kfiledef.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/kfiledef.c +--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/kfiledef.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/kfiledef.c 2010-02-09 17:46:39.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Specific Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/spinlock.h> + #include <linux/kernel.h> + #include <linux/mm.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/mem.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/mem.c +--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/mem.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/mem.c 2010-02-09 17:46:25.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Specific Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/spinlock.h> + #include <linux/sched.h> + #include <linux/types.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/notify_knl.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/notify_knl.c +--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/notify_knl.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/notify_knl.c 2010-02-09 17:47:12.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Specific Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/spinlock.h> + #include <linux/signal.h> + #include <linux/kernel.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/sync.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/sync.c +--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/2.6.18/sync.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/2.6.18/sync.c 2010-02-09 17:47:39.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Specific Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/spinlock.h> + #include <linux/timer.h> + #include <linux/sched.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/prcs.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/prcs.c +--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/prcs.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/prcs.c 2010-02-09 17:45:44.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Specific Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/spinlock.h> + #include <linux/module.h> + #include <linux/mm.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/print.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/print.c +--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/print.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/print.c 2010-02-09 17:45:30.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Specific Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/spinlock.h> + #include <stdarg.h> + #include <linux/types.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/user.c dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/user.c +--- dsplink_linux_1_64a/dsplink/gpp/src/osal/Linux/user.c 2009-11-13 12:12:47.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/osal/Linux/user.c 2010-02-09 17:46:07.000000000 +0000 +@@ -22,7 +22,12 @@ + + + /* ----------------------------------- OS Specific Headers */ ++#include <linux/version.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/spinlock.h> + #include <linux/timer.h> + #include <linux/sched.h> +diff -uNr dsplink_linux_1_64a/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c dsplink_linux_1_64b/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c +--- dsplink_linux_1_64a/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c 2009-11-13 12:12:48.000000000 +0000 ++++ dsplink_linux_1_64b/dsplink/gpp/src/pmgr/Linux/2.6.18/drv_pmgr.c 2010-02-09 17:40:59.000000000 +0000 +@@ -33,7 +33,11 @@ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26) + #include <linux/device.h> + #endif ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33) ++#include <generated/autoconf.h> ++#else + #include <linux/autoconf.h> ++#endif + #include <linux/spinlock.h> + #include <linux/module.h> + #include <linux/init.h> diff --git a/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-loadmodules.sh b/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-loadmodules.sh new file mode 100755 index 00000000..9cfb19d5 --- /dev/null +++ b/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-loadmodules.sh @@ -0,0 +1,25 @@ +# +# Default Memory Map - for OMAP3530 dsplink examples +# +# Start Addr Size Description +# ------------------------------------------- +# 0x80000000 126 MB Linux +# 0x87E00000 2 MB DSPLINK (MEM) + DDR + DSPLINK (RESET) + +# sanity check to verify that we're using the right mem=xxM (126M in this case) +awk '/MemTotal:/ { + mem=$2 + + if (mem > 126 * 1024) + print "Warning! You need to use mem=126M or less on the kernel cmdline" + + printf "You have %dkB total memory for Linux\n", mem +}' /proc/meminfo + +# insert DSP/BIOS Link driver +# +modprobe dsplinkk + +# make /dev/dsplink +#rm -f /dev/dsplink +#mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0 diff --git a/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-run.sh b/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-run.sh new file mode 100755 index 00000000..b2f2faac --- /dev/null +++ b/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-run.sh @@ -0,0 +1,25 @@ +#! /bin/sh + +echo "Running Loop Sample App" +./loopgpp loop.out 1024 2000 0 + +echo "Running Message Sample App" +./messagegpp message.out 10000 0 + +echo "Running Message Multi Sample App" +./messagemultigpp messagemulti.out 128 1 0 + +echo "Running MultiProcessor List Sample App" +./mplistgpp mplist.out 128 128 0 + +echo "Running MultiProcessorCriticalSection Transfer Sample App" +./mpcsxfergpp mpcsxfer.out 128 1000 0 + +echo "Running Ringio Sample App" +./ringiogpp ringio.out 2048 128 0 + +echo "Running Scale Sample App" +./scalegpp scale.out 128 500 0 + +#echo "Running Read/Write Sample App" +#./readwritegpp readwrite.out diff --git a/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-unloadmodules.sh b/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-unloadmodules.sh new file mode 100755 index 00000000..48fa84b0 --- /dev/null +++ b/extras/recipes-ti/dsplink/ti-dsplink/ti-dsplink-examples-unloadmodules.sh @@ -0,0 +1,5 @@ +# Unload modules - DSPLINK - OMAP3530 + +# remove DSP/BIOS Link driver +rmmod dsplinkk +#rm -f /dev/dsplink diff --git a/extras/recipes-ti/dsplink/ti-dsplink_1.65.00.03.bb b/extras/recipes-ti/dsplink/ti-dsplink_1.65.00.03.bb new file mode 100644 index 00000000..a124b21a --- /dev/null +++ b/extras/recipes-ti/dsplink/ti-dsplink_1.65.00.03.bb @@ -0,0 +1,16 @@ +require ti-dsplink.inc + +PE = "1" +PV = "1_65_00_03" +PV_dot = "1.65.00.03" +PV_major = "1_65" + +PV_DL_PATH = "DSPLink/${PV_major}/${PV}/${PV_dot}" + +SRC_URI += "file://dsplink-BKL-fix.patch \ + file://0001-remove-check-for-make-version-3.85-works-fine.patch \ + " + +SRC_URI[dsplinktarball.md5sum] = "1bda596b631bd2f517edc70f6be4f2ca" +SRC_URI[dsplinktarball.sha256sum] = "4b1bda89bd8465b887f5bcdf7b95018bc1d1f8968c0c44f8cbad2a9e1c52bcb7" + diff --git a/extras/recipes-ti/edma3lld/ti-edma3lld.inc b/extras/recipes-ti/edma3lld/ti-edma3lld.inc new file mode 100644 index 00000000..fb131b66 --- /dev/null +++ b/extras/recipes-ti/edma3lld/ti-edma3lld.inc @@ -0,0 +1,23 @@ +DESCRIPTION = "TI EDMA3 Low Level Driver (LLD)" +HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/${SRC_URI_edma3lldsite}/edma3_lld" +SECTION = "devel" +LICENSE = "TI" +LIC_FILES_CHKSUM = "file://packages/ti/sdo/edma3/drv/edma3_drv.h;md5=c1aa300aaf369a0a03e7922c1b0bbf8e" + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc +require ../includes/ti-eula-unpack.inc + +TI_BIN_UNPK_WDEXT="/edma3_lld_${PV}" +S = "${WORKDIR}${TI_BIN_UNPK_WDEXT}" + +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/${SRC_URI_edma3lldsite}/edma3_lld/edma3-lld-bios5/${PV}/exports/EDMA3_LLD_setuplinux_${PV}.bin;name=edma3lldbin" + +BINFILE="EDMA3_LLD_setuplinux_${PV}.bin" +TI_BIN_UNPK_CMDS="Y:workdir" + +do_install() { + install -d ${D}${EDMA3_LLD_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${EDMA3_LLD_INSTALL_DIR_RECIPE} +} + diff --git a/extras/recipes-ti/edma3lld/ti-edma3lld_01.11.01.04.bb b/extras/recipes-ti/edma3lld/ti-edma3lld_01.11.01.04.bb new file mode 100644 index 00000000..9b03e9b3 --- /dev/null +++ b/extras/recipes-ti/edma3lld/ti-edma3lld_01.11.01.04.bb @@ -0,0 +1,9 @@ +require ti-edma3lld.inc + +PV = "01_11_01_04" + +SRC_URI_edma3lldsite = "sdo_tii/psp" + +SRC_URI[edma3lldbin.md5sum] = "b3c41cb946e2e4b94348fc6bcbe30b16" +SRC_URI[edma3lldbin.sha256sum] = "617db3eadff33a88e3d42818c204f379906da3b312bc120092408043e7e2aaeb" + diff --git a/extras/recipes-ti/framework-components/ti-framework-components.inc b/extras/recipes-ti/framework-components/ti-framework-components.inc new file mode 100644 index 00000000..f2244db4 --- /dev/null +++ b/extras/recipes-ti/framework-components/ti-framework-components.inc @@ -0,0 +1,21 @@ +DESCRIPTION = "TI Framework Components" +HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/fc" +SECTION = "devel" +LICENSE = "BSD" + +LIC_FILES_CHKSUM = "file://framework_components_2_26_00_01_manifest.html;md5=3250f9da7ee72284c07f8dd840400c75" + +require recipes-ti/includes/ti-paths.inc +require recipes-ti/includes/ti-staging.inc + +PR = "r1" + +S = "${WORKDIR}/framework_components_${PV}" + +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/fc/${PV}/exports/framework_components_${PV},lite.tar.gz;name=fctarball" + +do_install() { + install -d ${D}${FC_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${FC_INSTALL_DIR_RECIPE} +} + diff --git a/extras/recipes-ti/framework-components/ti-framework-components_2.26.00.01.bb b/extras/recipes-ti/framework-components/ti-framework-components_2.26.00.01.bb new file mode 100644 index 00000000..b7ea9b83 --- /dev/null +++ b/extras/recipes-ti/framework-components/ti-framework-components_2.26.00.01.bb @@ -0,0 +1,8 @@ +require ti-framework-components.inc + +PV = "2_26_00_01" + +SRC_URI[fctarball.md5sum] = "40b51cade2f9ae6e6f6dca73c17065af" +SRC_URI[fctarball.sha256sum] = "3f7a12a51dfe87310828a31518d7ef8f9039e59269c0ca24f74a68433c235048" + + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti.inc b/extras/recipes-ti/gstreamer-ti/gstreamer-ti.inc new file mode 100644 index 00000000..cb032666 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti.inc @@ -0,0 +1,164 @@ +DESCRIPTION = "GSTREAMER Plugin (gstreamer-ti) for TI ARM/DSP processors" +HOMEPAGE = "https://gforge.ti.com/gf/project/gstreamer_ti/" +SECTION = "multimedia" +LICENSE = "LGPL" + +# TODO :: Replace omapl137 with official support in GST (currently linking to omapl138) +# TODO :: Codec Server Environment Variables shouldn't be required +# TODO :: Add (and check) rc scripts for all targets (just copied for now) (365,6467,omapl137) +# TODO :: Check if CPPFLAGS_append is still required +# TODO :: Remove ENCODE/DECODE combo exports - these are not used anymore (check?) + +inherit autotools +inherit update-rc.d +require recipes-ti/includes/ti-paths.inc +require recipes-ti/includes/ti-staging.inc + +# Rebuild on kernel change since it links statically to ti-dmai, ti-codec-engine, etc +PR = "r85+${MACHINE_KERNEL_PR}" + +DEPENDS = "ti-dmai gstreamer gst-plugins-base" + +# enable c6accel elements on omapl138 and omap3 +#DEPENDS_append_omapl138 = " ti-c6accel " +#EXTRA_OECONF_omapl138 = "--enable-c6accel" +#DEPENDS_append_omap3 = " ti-c6accel " +#EXTRA_OECONF_omap3 = "--enable-c6accel" +export C6ACCEL_INSTALL_DIR + +# gstreamer_ti picks up some config variables from the environment +# - variables are used in the gstreamer makefile +# - PLATFORM, XDC_PLATFORM, XDC_TARGET, MVTOOL_DIR +# - others used by config.bld (which it gets from the dmai config.bld) +# - CROSS_COMPILE, PLATFORM_XDC + +PLATFORM_dm6446 = "dm6446" +PLATFORM_dm6467 = "dm6467" +PLATFORM_dm6467t = "dm6467t" +PLATFORM_omap3 = "omap3530" +PLATFORM_dm355 = "dm355" +PLATFORM_dm365 = "dm365" +PLATFORM_omapl137 = "omapl137" +PLATFORM_omapl138 = "omapl138" +PLATFORM ?= "UNDEFINED_PLATFORM" +GST_TI_PLATFORM = "${PLATFORM}" + +XDC_PLATFORM_dm6446 = "ti.platforms.evmDM6446" +XDC_PLATFORM_dm6467 = "ti.platforms.evmDM6467" +XDC_PLATFORM_omap3 = "ti.platforms.evm3530" +XDC_PLATFORM_dm355 = "ti.platforms.evmDM355" +XDC_PLATFORM_dm365 = "ti.platforms.evmDM365" +XDC_PLATFORM_omapl137 = "ti.platforms.evmOMAPL137" +XDC_PLATFORM_omapl138 = "ti.platforms.evmOMAPL138" +XDC_PLATFORM ?= "UNDEFINED_XDC_PLATFORM" + +MEMARGS_omap3 = "99M@0x80000000" +MEMARGS ?= "UNDEFINED_MEM_ARGS" + +export MEMARGS +export PLATFORM +export GST_TI_PLATFORM +export XDC_PLATFORM +export XDC_TARGET = "gnu.targets.arm.GCArmv5T" +export PLATFORM_XDC = "${XDC_PLATFORM}" +export CSTOOL_DIR = "${TOOLCHAIN_PATH}" +export MVTOOL_DIR = "${TOOLCHAIN_PATH}" +export MVTOOL_PREFIX = "${TARGET_PREFIX}" +export CROSS_COMPILE = "${TOOLCHAIN_PATH}/${TARGET_PREFIX}" +export LINK_XDC_ROOT = "${LINK_INSTALL_DIR}" + +# export codec combo (or server) locations +# Why do we need to do this?? - These will get picked up from CODEC_INSTALL_DIR? +# Sould only need this if we change from default server + +export CODEC_SERVER = "${installdir}/ti-codecs-server/cs.x64P" +CPPFLAGS_append = " -DPlatform_${PLATFORM}" + +# We are still using encode/decode combo for DM6446 +export ENCODE_COMBO = "${installdir}/ti-codecs-server/encodeCombo.x64P" +export DECODE_COMBO = "${installdir}/ti-codecs-server/decodeCombo.x64P" +# Makefile also expects to be able to find the kernel headers from the envirionment +export LINUXKERNEL_INSTALL_DIR = "${STAGING_KERNEL_DIR}" + +do_configure_prepend() { + # PSP kernel is based on older DSS. we need to replace linux/omapfb.h with mach/omapfb.h + if ! [ -e ${STAGING_KERNEL_DIR}/include/linux/omapfb.h ] ; then + sed -i -e s:linux/omapfb:mach/omapfb:g ${S}/src/omapfb.h || true + fi + + # Angstrom 2008 breaks with -Wl,-T, while angstrom 2010 needs it + if [ $(${TARGET_PREFIX}gcc -dumpversion | awk -F. '{print $2}') -gt 3 ] ; then + # Fix up linkerscripts, recent toolchains need -T to prepend the default script to the custom one + for makefile in $(find ${S} -name "Makefile.am") ; do + sed -i -e 's:-Wl,$(XDC_CONFIG_BASENAME)/linker.cmd:-Wl,-T,$(XDC_CONFIG_BASENAME)/linker.cmd:g' $makefile + done + fi +} + +do_compile() { + # Recent kernel headers warn against inclusion from userspace + for makefile in $(find ${S} -name "Makefile") ; do + sed -i -e s:-Werror::g $makefile + done + + oe_runmake +} + +do_install_prepend () { + + install -d ${D}/${installdir}/gst/${PLATFORM} + + # copy gstreamer demo scripts + cp -R ${WORKDIR}/gstreamer_ti/gstreamer_demo/shared ${D}/${installdir}/gst + + # If we have loadmodules.sh in WORKDIR then give preference to this over + # the default gst-ti loadmdules.sh + if [ -f ${WORKDIR}/loadmodules.sh ]; then + cp ${WORKDIR}/loadmodules.sh ${D}/${installdir}/gst/${PLATFORM} + else + cp -R ${WORKDIR}/gstreamer_ti/gstreamer_demo/${PLATFORM} ${D}/${installdir}/gst + fi + + # delete .svn files + find ${D}/${installdir}/gst -name .svn -type d | xargs rm -rf + chmod 0755 ${D}/${installdir}/gst -R + + install -d ${D}${sysconfdir}/init.d/ + install -m 0755 ${WORKDIR}/gstreamer-ti-rc.sh ${D}${sysconfdir}/init.d/gstti-init + sed -i -e 's|<platform>|${PLATFORM}|g' ${D}${sysconfdir}/init.d/gstti-init + + install -d ${D}${base_libdir}/systemd/system + install -m 0644 ${WORKDIR}/gstti-init.service ${D}${base_libdir}/systemd/system/ + sed -i -e 's|<platform>|${PLATFORM}|g' -e 's|MEMARGS|${MEMARGS}|' ${D}${base_libdir}/systemd/system/gstti-init.service +} + +RRECOMMENDS_${PN}_append_dm6446 += "ti-codecs-dm6446-server ti-cmem-module ti-dsplink-module" +RRECOMMENDS_${PN}_append_dm6467 += "ti-codecs-dm6467 ti-cmem-module ti-dsplink-module" +RRECOMMENDS_${PN}_append_omap3 += "ti-codecs-omap3530-server ti-cmem-module ti-dsplink-module ti-lpm-module ti-sdma-module" +RRECOMMENDS_${PN}_append_dm355 += "ti-codecs-dm355 ti-cmem-module ti-dm355mm-module" +RRECOMMENDS_${PN}_append_dm365 += "ti-codecs-dm365 ti-cmem-module ti-dm365mm-module ti-edma-module ti-irq-module" +RRECOMMENDS_${PN}_append_omapl137 += "ti-codecs-omapl137-server ti-cmem-module ti-dsplink-module" +RRECOMMENDS_${PN}_append_omapl138 += "ti-codecs-omapl138-server ti-cmem-module ti-dsplink-module" + +FILES_${PN} += "${libdir}/gstreamer-0.10/*.so ${sysconfdir} ${installdir} ${base_libdir}/systemd" +FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.a ${libdir}/gstreamer-0.10/*.la" +FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug" + +pkg_postinst_${PN} () { +if test "x$D" != "x"; then + echo "Can't run gstreamer-ti postinst offline" + exit 1 +fi + if [ -e ${base_bindir}/systemctl ] ; then + systemctl enable gstti-init.service + fi + + if [ -d ${installdir}/ti-codecs-server/ ]; then + ln -sf ${installdir}/ti-codecs-server/* ${installdir}/gst/${PLATFORM}/ + fi +} + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +INITSCRIPT_NAME = "gstti-init" +INITSCRIPT_PARAMS = "start 30 5 2 . stop 40 0 1 6 ." diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0001-add-omapdmaifbsink.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0001-add-omapdmaifbsink.patch new file mode 100644 index 00000000..bcf0d904 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0001-add-omapdmaifbsink.patch @@ -0,0 +1,1336 @@ +diff -uNr ticodecplugin/configure.ac ticodecplugin.new/configure.ac +--- ticodecplugin/configure.ac 2010-08-24 15:08:58.609410984 -0500 ++++ ticodecplugin.new/configure.ac 2010-09-03 13:54:11.909410298 -0500 +@@ -25,6 +25,7 @@ + AC_SUBST(ACLOCAL_AMFLAGS, "-I m4") + + AM_CONFIG_HEADER(config.h) ++AM_PROG_AS + + dnl check for tools + AC_PROG_CC +diff -uNr ticodecplugin/src/gstticodecplugin.c ticodecplugin.new/src/gstticodecplugin.c +--- ticodecplugin/src/gstticodecplugin.c 2010-08-24 15:08:58.609410984 -0500 ++++ ticodecplugin.new/src/gstticodecplugin.c 2010-09-03 13:54:11.929409696 -0500 +@@ -42,6 +42,7 @@ + #include "gsttiaudenc1.h" + #include "gsttividresize.h" + #include "gsttidmaiperf.h" ++#include "omapfb.h" + + #ifdef HAVE_C6ACCEL + #include "gsttic6xcolorspace.h" +@@ -134,6 +135,13 @@ + return FALSE; + #endif + ++ env_value = getenv("GST_omapdmaifbsink_DISABLE"); ++ ++ if ((!env_value || strcmp(env_value,"1")) && !gst_element_register( ++ TICodecPlugin, "omapdmaifbsink", GST_RANK_PRIMARY, ++ GST_OMAPFB_SINK_TYPE)) ++ return FALSE; ++ + return TRUE; + } + +diff -uNr ticodecplugin/src/Makefile.am ticodecplugin.new/src/Makefile.am +--- ticodecplugin/src/Makefile.am 2010-08-24 22:01:30.989165985 -0500 ++++ ticodecplugin.new/src/Makefile.am 2010-09-03 13:53:41.037663172 -0500 +@@ -12,16 +12,16 @@ + + + # sources used to compile this plug-in +-libgstticodecplugin_la_SOURCES = gstticodecplugin.c gsttiauddec1.c gsttividdec2.c gsttiimgenc1.c gsttiimgdec1.c gsttidmaibuffertransport.c gsttidmaibuftab.c gstticircbuffer.c gsttidmaivideosink.c gstticodecs.c gstticodecs_platform.c gsttiquicktime_aac.c gsttiquicktime_h264.c gsttividenc1.c gsttiaudenc1.c gstticommonutils.c gsttividresize.c gsttidmaiperf.c gsttiquicktime_mpeg4.c $(C6ACCEL_SRC) ++libgstticodecplugin_la_SOURCES = gstticodecplugin.c gsttiauddec1.c gsttividdec2.c gsttiimgenc1.c gsttiimgdec1.c gsttidmaibuffertransport.c gsttidmaibuftab.c gstticircbuffer.c gsttidmaivideosink.c gstticodecs.c gstticodecs_platform.c gsttiquicktime_aac.c gsttiquicktime_h264.c gsttividenc1.c gsttiaudenc1.c gstticommonutils.c gsttividresize.c gsttidmaiperf.c gsttiquicktime_mpeg4.c $(C6ACCEL_SRC) omapfb.c yuv.S + + # flags used to compile this plugin + # add other _CFLAGS and _LIBS as needed +-libgstticodecplugin_la_CFLAGS = $(GST_CFLAGS) $(shell cat $(XDC_CONFIG_BASENAME)/compiler.opt) +-libgstticodecplugin_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) -lgstvideo-0.10 -lgstaudio-0.10 -lm ++libgstticodecplugin_la_CFLAGS = $(GST_CFLAGS) $(shell cat $(XDC_CONFIG_BASENAME)/compiler.opt) -I$(LINUXKERNEL_INSTALL_DIR)/include ++libgstticodecplugin_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(GST_PLUGINS_BASE_LIBS) -lgstvideo-0.10 -lgstaudio-0.10 -lm -lX11 + libgstticodecplugin_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,$(XDC_CONFIG_BASENAME)/linker.cmd -Wl,$(C6ACCEL_LIB) + + # headers we need but don't want installed +-noinst_HEADERS = gsttiauddec1.h gsttividdec2.h gsttiimgenc1.h gsttiimgdec1.h gsttidmaibuffertransport.h gsttidmaibuftab.h gstticircbuffer.h gsttidmaivideosink.h gsttithreadprops.h gstticodecs.h gsttiquicktime_aac.h gsttiquicktime_h264.h gsttividenc1.h gsttiaudenc1.h gstticommonutils.h gsttividresize.h gsttiquicktime_mpeg4.h $(C6ACCEL_HEAD) ++noinst_HEADERS = gsttiauddec1.h gsttividdec2.h gsttiimgenc1.h gsttiimgdec1.h gsttidmaibuffertransport.h gsttidmaibuftab.h gstticircbuffer.h gsttidmaivideosink.h gsttithreadprops.h gstticodecs.h gsttiquicktime_aac.h gsttiquicktime_h264.h gsttividenc1.h gsttiaudenc1.h gstticommonutils.h gsttividresize.h gsttiquicktime_mpeg4.h $(C6ACCEL_HEAD) omapfb.h + + # XDC Configuration + CONFIGURO = $(XDC_INSTALL_DIR)/xs xdc.tools.configuro +diff -uNr ticodecplugin/src/omapfb.c ticodecplugin.new/src/omapfb.c +--- ticodecplugin/src/omapfb.c 1969-12-31 18:00:00.000000000 -0600 ++++ ticodecplugin.new/src/omapfb.c 2010-09-03 13:54:11.929409696 -0500 +@@ -0,0 +1,1005 @@ ++/* ++ * Copyright (C) 2008 Felipe Contreras <felipe.contreras@gmail.com> ++ * Copyright (C) 2009 Tim Yamin <plasm@roo.me.uk> ++ * Copyright (C) 2009 Brijesh Singh <brijesh.ksingh@gmail.com> ++ * ++ * X code largely copied from ximagesink by Julien Moutte and ++ * vo_omapfb.c by Gregoire Gentil. ++ * ++ * Use DMAI hw framecopy module to copy the dmai transport buffers. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation ++ * version 2.1 of the License. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA ++ */ ++ ++#include <fcntl.h> ++#include <sys/ioctl.h> ++#include <sys/mman.h> ++#include <unistd.h> ++#include <string.h> ++#include <sys/types.h> ++#include <malloc.h> ++#include <stdlib.h> ++ ++#include "omapfb.h" ++#include <gst/interfaces/xoverlay.h> ++ ++static GstVideoSinkClass *parent_class = NULL; ++ ++extern void yuv420_to_yuv422(__uint8_t *yuv, __uint8_t *y, __uint8_t *u, __uint8_t *v, ++ int w, int h, int yw, int cw, int dw); ++ ++static void x11_get_window_abs_position(Display *display, Window window, ++ int *wx, int *wy, int *ww, int *wh) ++{ ++ Window root, parent; ++ Window *child; ++ unsigned int n_children; ++ XWindowAttributes attribs; ++ ++ /* Get window attributes */ ++ XGetWindowAttributes(display, window, &attribs); ++ ++ /* Get relative position of given window */ ++ *wx = attribs.x; ++ *wy = attribs.y; ++ if (ww) ++ *ww = attribs.width; ++ if (wh) ++ *wh = attribs.height; ++ ++ /* Query window tree information */ ++ XQueryTree(display, window, &root, &parent, &child, &n_children); ++ if (parent) ++ { ++ int x, y; ++ ++ /* If we have a parent we must go there and discover his position */ ++ x11_get_window_abs_position(display, parent, &x, &y, NULL, NULL); ++ *wx += x; ++ *wy += y; ++ } ++ ++ /* If we had children, free them */ ++ if(n_children) ++ XFree(child); ++} ++ ++static GstXWindow * ++gst_omapfbsink_xwindow_new (GstOmapFbSink * omapfbsink, gint width, gint height) ++{ ++ GstXWindow *xwindow = NULL; ++ XGCValues values; ++ ++ if(!omapfbsink->xcontext) ++ return NULL; ++ ++ xwindow = g_new0 (GstXWindow, 1); ++ xwindow->width = width; ++ xwindow->height = height; ++ xwindow->internal = TRUE; ++ ++ g_mutex_lock (omapfbsink->x_lock); ++ xwindow->win = XCreateSimpleWindow (omapfbsink->xcontext->disp, ++ omapfbsink->xcontext->root, ++ 0, 0, xwindow->width, xwindow->height, ++ 0, 0, omapfbsink->colorKey); ++ ++ /* We have to do that to prevent X from redrawing the background on ++ ConfigureNotify. This takes away flickering of video when resizing. */ ++ XSetWindowBackgroundPixmap (omapfbsink->xcontext->disp, xwindow->win, None); ++ ++ if (omapfbsink->handle_events) { ++ Atom wm_delete; ++ ++ XSelectInput (omapfbsink->xcontext->disp, xwindow->win, ExposureMask | ++ StructureNotifyMask | PointerMotionMask | KeyPressMask | ++ KeyReleaseMask | ButtonPressMask | ButtonReleaseMask); ++ ++ /* Tell the window manager we'd like delete client messages instead of ++ * being killed */ ++ wm_delete = XInternAtom (omapfbsink->xcontext->disp, ++ "WM_DELETE_WINDOW", False); ++ (void) XSetWMProtocols (omapfbsink->xcontext->disp, xwindow->win, ++ &wm_delete, 1); ++ } ++ ++ xwindow->gc = XCreateGC (omapfbsink->xcontext->disp, xwindow->win, ++ 0, &values); ++ ++ XMapRaised (omapfbsink->xcontext->disp, xwindow->win); ++ XSync (omapfbsink->xcontext->disp, FALSE); ++ ++ g_mutex_unlock (omapfbsink->x_lock); ++ gst_x_overlay_got_xwindow_id (GST_X_OVERLAY (omapfbsink), xwindow->win); ++ ++ return xwindow; ++} ++ ++static gboolean gst_omapfbsink_update_plane (GstOmapFbSink *omapfbsink) ++{ ++ int wx, wy, ww, wh; ++ if (!omapfbsink->xcontext) ++ { ++ if (ioctl (omapfbsink->overlay_fd, OMAPFB_SETUP_PLANE, &omapfbsink->plane_info)) ++ return FALSE; ++ return TRUE; ++ } ++ ++ if (omapfbsink->plane_info.enabled != 1) ++ return FALSE; ++ ++ x11_get_window_abs_position(omapfbsink->xcontext->disp, ++ omapfbsink->xwindow->win, &wx, &wy, &ww, &wh); ++ ++ if (wx != omapfbsink->xwindow->wx || wy != omapfbsink->xwindow->wy || ++ wh != omapfbsink->xwindow->height || ww != omapfbsink->xwindow->width) { ++ omapfbsink->plane_info.out_width = omapfbsink->xwindow->width = ww; ++ omapfbsink->plane_info.out_height = omapfbsink->xwindow->height = wh; ++ omapfbsink->plane_info.pos_x = omapfbsink->xwindow->wx = wx; ++ omapfbsink->plane_info.pos_y = omapfbsink->xwindow->wy = wy; ++ ++ GST_DEBUG_OBJECT(omapfbsink, "updating geometry to: (%d,%d) %dx%d", wx, wy, ww, wh); ++ ++ XSetForeground (omapfbsink->xcontext->disp, omapfbsink->xwindow->gc, omapfbsink->colorKey); ++ XFillRectangle (omapfbsink->xcontext->disp, omapfbsink->xwindow->win, omapfbsink->xwindow->gc, 0, 0, ww, wh); ++ ++ if (ioctl (omapfbsink->overlay_fd, OMAPFB_SETUP_PLANE, &omapfbsink->plane_info)) ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++static void ++gst_omapfbsink_expose (GstXOverlay * overlay) ++{ ++ gst_omapfbsink_update_plane(GST_OMAPFB_SINK (overlay)); ++} ++ ++static void ++gst_omapfbsink_xwindow_destroy (GstOmapFbSink * omapfbsink, ++ GstXWindow * xwindow) ++{ ++ g_return_if_fail (xwindow != NULL); ++ g_mutex_lock (omapfbsink->x_lock); ++ ++ /* If we did not create that window we just free the GC and let it live */ ++ if (xwindow->internal) ++ XDestroyWindow (omapfbsink->xcontext->disp, xwindow->win); ++ else ++ XSelectInput (omapfbsink->xcontext->disp, xwindow->win, 0); ++ ++ XFreeGC (omapfbsink->xcontext->disp, xwindow->gc); ++ XSync (omapfbsink->xcontext->disp, FALSE); ++ g_mutex_unlock (omapfbsink->x_lock); ++ g_free (xwindow); ++} ++ ++/* This function handles XEvents that might be in the queue. It generates ++ GstEvent that will be sent upstream in the pipeline to handle interactivity ++ and navigation.*/ ++static void ++gst_omapfbsink_handle_xevents (GstOmapFbSink * omapfbsink) ++{ ++ XEvent e; ++ g_mutex_lock (omapfbsink->flow_lock); ++ g_mutex_lock (omapfbsink->x_lock); ++ ++ while (XCheckWindowEvent (omapfbsink->xcontext->disp, ++ omapfbsink->xwindow->win, ExposureMask | StructureNotifyMask, &e)) { ++ switch (e.type) { ++ case Expose: ++ case ConfigureNotify: ++ gst_omapfbsink_update_plane (omapfbsink); ++ break; ++ default: ++ break; ++ } ++ } ++ ++ /* Handle Display events */ ++ while (XPending (omapfbsink->xcontext->disp)) { ++ XNextEvent (omapfbsink->xcontext->disp, &e); ++ ++ switch (e.type) { ++ case ClientMessage:{ ++ Atom wm_delete; ++ ++ wm_delete = XInternAtom (omapfbsink->xcontext->disp, ++ "WM_DELETE_WINDOW", False); ++ if (wm_delete == (Atom) e.xclient.data.l[0]) { ++ /* Handle window deletion by posting an error on the bus */ ++ GST_ELEMENT_ERROR (omapfbsink, RESOURCE, NOT_FOUND, ++ ("Output window was closed"), (NULL)); ++ ++ g_mutex_unlock (omapfbsink->x_lock); ++ gst_omapfbsink_xwindow_destroy (omapfbsink, omapfbsink->xwindow); ++ omapfbsink->xwindow = NULL; ++ g_mutex_lock (omapfbsink->x_lock); ++ } ++ break; ++ } ++ default: ++ break; ++ } ++ } ++ ++ g_mutex_unlock (omapfbsink->x_lock); ++ g_mutex_unlock (omapfbsink->flow_lock); ++} ++ ++static gpointer ++gst_omapfbsink_event_thread (GstOmapFbSink * omapfbsink) ++{ ++ GST_OBJECT_LOCK (omapfbsink); ++ while (omapfbsink->running) { ++ GST_OBJECT_UNLOCK (omapfbsink); ++ ++ if (omapfbsink->xwindow) ++ gst_omapfbsink_handle_xevents (omapfbsink); ++ g_usleep (100000); ++ ++ GST_OBJECT_LOCK (omapfbsink); ++ } ++ GST_OBJECT_UNLOCK (omapfbsink); ++ ++ return NULL; ++} ++ ++/* This function gets the X Display and global info about it. Everything is ++ stored in our object and will be cleaned when the object is disposed. */ ++static GstXContext * ++gst_omapfbsink_xcontext_get (GstOmapFbSink * omapfbsink) ++{ ++ GstXContext *xcontext = g_new0 (GstXContext, 1); ++ g_mutex_lock (omapfbsink->x_lock); ++ ++ xcontext->disp = XOpenDisplay (omapfbsink->display_name); ++ ++ if (!xcontext->disp) { ++ g_mutex_unlock (omapfbsink->x_lock); ++ g_free (xcontext); ++ GST_ELEMENT_WARNING (omapfbsink, RESOURCE, WRITE, ++ ("Could not initialise X output"), ++ ("Could not open display")); ++ return NULL; ++ } ++ ++ xcontext->screen = DefaultScreenOfDisplay (xcontext->disp); ++ xcontext->screen_num = DefaultScreen (xcontext->disp); ++ xcontext->visual = DefaultVisual (xcontext->disp, xcontext->screen_num); ++ xcontext->root = DefaultRootWindow (xcontext->disp); ++ ++ xcontext->width = DisplayWidth (xcontext->disp, xcontext->screen_num); ++ xcontext->height = DisplayHeight (xcontext->disp, xcontext->screen_num); ++ ++ g_mutex_unlock (omapfbsink->x_lock); ++ ++ /* Setup our event listening thread */ ++ GST_OBJECT_LOCK (omapfbsink); ++ omapfbsink->running = TRUE; ++ omapfbsink->event_thread = g_thread_create ( ++ (GThreadFunc) gst_omapfbsink_event_thread, omapfbsink, TRUE, NULL); ++ GST_OBJECT_UNLOCK (omapfbsink); ++ ++ return xcontext; ++} ++ ++static void ++gst_omapfbsink_set_xwindow_id (GstXOverlay * overlay, XID xwindow_id) ++{ ++ GstOmapFbSink *omapfbsink = GST_OMAPFB_SINK (overlay); ++ GstXWindow *xwindow = NULL; ++ XWindowAttributes attr; ++ ++ /* If we already use that window, return */ ++ if (omapfbsink->xwindow && (xwindow_id == omapfbsink->xwindow->win)) ++ return; ++ ++ /* If the element has not initialized the X11 context try to do so */ ++ if (!omapfbsink->xcontext && ++ !(omapfbsink->xcontext = gst_omapfbsink_xcontext_get (omapfbsink))) { ++ g_mutex_unlock (omapfbsink->flow_lock); ++ return; ++ } ++ ++ /* If a window is there already we destroy it */ ++ if (omapfbsink->xwindow) { ++ gst_omapfbsink_xwindow_destroy (omapfbsink, omapfbsink->xwindow); ++ omapfbsink->xwindow = NULL; ++ } ++ ++ /* If the xid is 0 we go back to an internal window */ ++ if (xwindow_id == 0) { ++ /* If no width/height caps nego did not happen window will be created ++ during caps nego then */ ++ if (GST_VIDEO_SINK_WIDTH (omapfbsink) && GST_VIDEO_SINK_HEIGHT (omapfbsink)) { ++ xwindow = gst_omapfbsink_xwindow_new (omapfbsink, ++ GST_VIDEO_SINK_WIDTH (omapfbsink), ++ GST_VIDEO_SINK_HEIGHT (omapfbsink)); ++ } ++ } else { ++ xwindow = g_new0 (GstXWindow, 1); ++ xwindow->wx = xwindow->wy = -1; ++ xwindow->win = xwindow_id; ++ ++ /* We get window geometry, set the event we want to receive, ++ and create a GC */ ++ g_mutex_lock (omapfbsink->x_lock); ++ XGetWindowAttributes (omapfbsink->xcontext->disp, xwindow->win, &attr); ++ xwindow->width = attr.width; ++ xwindow->height = attr.height; ++ xwindow->internal = FALSE; ++ if (omapfbsink->handle_events) { ++ XSelectInput (omapfbsink->xcontext->disp, xwindow->win, ExposureMask | ++ StructureNotifyMask | PointerMotionMask | KeyPressMask | ++ KeyReleaseMask); ++ } ++ ++ xwindow->gc = XCreateGC (omapfbsink->xcontext->disp, xwindow->win, 0, NULL); ++ g_mutex_unlock (omapfbsink->x_lock); ++ } ++ ++ if (xwindow) { ++ omapfbsink->xwindow = xwindow; ++ ++ g_mutex_lock (omapfbsink->x_lock); ++ gst_omapfbsink_update_plane(omapfbsink); ++ g_mutex_unlock (omapfbsink->x_lock); ++ } ++} ++ ++static void ++gst_omapfbsink_xwindow_clear (GstOmapFbSink * omapfbsink, ++ GstXWindow * xwindow) ++{ ++ g_return_if_fail (xwindow != NULL); ++ g_mutex_lock (omapfbsink->x_lock); ++ ++ XSetForeground (omapfbsink->xcontext->disp, xwindow->gc, ++ XBlackPixel (omapfbsink->xcontext->disp, ++ omapfbsink->xcontext->screen_num)); ++ ++ XFillRectangle (omapfbsink->xcontext->disp, xwindow->win, xwindow->gc, ++ 0, 0, xwindow->width, xwindow->height); ++ ++ XSync (omapfbsink->xcontext->disp, FALSE); ++ g_mutex_unlock (omapfbsink->x_lock); ++} ++ ++static void ++gst_omapfbsink_set_event_handling (GstXOverlay * overlay, ++ gboolean handle_events) ++{ ++ GstOmapFbSink *omapfbsink = GST_OMAPFB_SINK (overlay); ++ omapfbsink->handle_events = handle_events; ++ ++ g_mutex_lock (omapfbsink->flow_lock); ++ ++ if (G_UNLIKELY (!omapfbsink->xwindow)) { ++ g_mutex_unlock (omapfbsink->flow_lock); ++ return; ++ } ++ ++ g_mutex_lock (omapfbsink->x_lock); ++ ++ if (handle_events) { ++ if (omapfbsink->xwindow->internal) { ++ XSelectInput (omapfbsink->xcontext->disp, omapfbsink->xwindow->win, ++ ExposureMask | StructureNotifyMask | PointerMotionMask | ++ KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask); ++ } else { ++ XSelectInput (omapfbsink->xcontext->disp, omapfbsink->xwindow->win, ++ ExposureMask | StructureNotifyMask | PointerMotionMask | ++ KeyPressMask | KeyReleaseMask); ++ } ++ } else { ++ XSelectInput (omapfbsink->xcontext->disp, omapfbsink->xwindow->win, 0); ++ } ++ ++ g_mutex_unlock (omapfbsink->x_lock); ++ g_mutex_unlock (omapfbsink->flow_lock); ++} ++ ++static void ++gst_omapfbsink_xoverlay_init (GstXOverlayClass * iface) ++{ ++ iface->set_xwindow_id = gst_omapfbsink_set_xwindow_id; ++ iface->expose = gst_omapfbsink_expose; ++ iface->handle_events = gst_omapfbsink_set_event_handling; ++} ++ ++static GstCaps * ++generate_sink_template (void) ++{ ++ GstCaps *caps; ++ GstStructure *struc; ++ ++ caps = gst_caps_new_empty (); ++ ++ struc = gst_structure_new ("video/x-raw-yuv", ++ "width", GST_TYPE_INT_RANGE, 16, 4096, ++ "height", GST_TYPE_INT_RANGE, 16, 4096, ++ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30, 1, ++ NULL); ++ ++ { ++ GValue list; ++ GValue val; ++ ++ list.g_type = val.g_type = 0; ++ ++ g_value_init (&list, GST_TYPE_LIST); ++ g_value_init (&val, GST_TYPE_FOURCC); ++ ++#if 0 ++ gst_value_set_fourcc (&val, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2')); ++ gst_value_list_append_value (&list, &val); ++#else ++ gst_value_set_fourcc (&val, GST_MAKE_FOURCC ('I', '4', '2', '0')); ++ gst_value_list_append_value (&list, &val); ++ ++ gst_value_set_fourcc (&val, GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y')); ++ gst_value_list_append_value (&list, &val); ++#endif ++ ++ gst_structure_set_value (struc, "format", &list); ++ ++ g_value_unset (&val); ++ g_value_unset (&list); ++ } ++ ++ gst_caps_append_structure (caps, struc); ++ ++ return caps; ++} ++ ++static GstFlowReturn ++buffer_alloc (GstBaseSink *bsink, ++ guint64 offset, ++ guint size, ++ GstCaps *caps, ++ GstBuffer **buf) ++{ ++ GstOmapFbSink *self; ++ GstBuffer *buffer = NULL; ++ GstFlowReturn ret = GST_FLOW_OK; ++ self = GST_OMAPFB_SINK (bsink); ++ ++ if(self->row_skip) { ++ buffer = gst_buffer_new (); ++ GST_BUFFER_DATA (buffer) = self->buffer = self->framebuffer; ++ GST_BUFFER_SIZE (buffer) = self->buffer_size = size; ++ gst_buffer_set_caps (buffer, caps); ++ } else { ++ if(self->buffer && size == self->buffer_size) { ++ buffer = gst_buffer_new (); ++ GST_BUFFER_DATA (buffer) = self->buffer; ++ GST_BUFFER_SIZE (buffer) = size; ++ gst_buffer_set_caps (buffer, caps); ++ } else { ++ if(self->buffer) ++ free(self->buffer); ++ if(posix_memalign(&self->buffer, 16, (size_t) size) == 0) { ++ buffer = gst_buffer_new (); ++ GST_BUFFER_DATA (buffer) = self->buffer; ++ GST_BUFFER_SIZE (buffer) = self->buffer_size = size; ++ gst_buffer_set_caps (buffer, caps); ++ } else { ++ GST_ELEMENT_ERROR (self, RESOURCE, WRITE, ("Could not allocate aligned buf!"), ++ ("Could not alloc aligned buf!")); ++ } ++ } ++ } ++ ++ *buf = buffer; ++ return ret; ++} ++ ++static void ++x_memcpy (GstOmapFbSink *omapfbsink, __uint8_t *outBuf, __uint8_t *inBuf) ++{ ++ BufferGfx_Attrs gfxAttrs = BufferGfx_Attrs_DEFAULT; ++ Buffer_Handle hInBuf = NULL, hOutBuf = NULL; ++ Framecopy_Attrs fcAttrs = Framecopy_Attrs_DEFAULT; ++ int size; ++ ++ if (omapfbsink->hFc == NULL) { ++ fcAttrs.accel = TRUE; ++ omapfbsink->hFc = Framecopy_create(&fcAttrs); ++ if (omapfbsink->hFc == NULL) { ++ GST_ELEMENT_ERROR(omapfbsink, RESOURCE, WRITE, ("failed to create dmai framecopy handle"), ("failed to create dmai framecopy handle")); ++ goto cleanup; ++ } ++ } ++ ++ gfxAttrs.bAttrs.reference = TRUE; ++ gfxAttrs.dim.width = GST_VIDEO_SINK_WIDTH (omapfbsink); ++ gfxAttrs.dim.height = GST_VIDEO_SINK_HEIGHT (omapfbsink); ++ gfxAttrs.colorSpace = ColorSpace_UYVY; ++ gfxAttrs.dim.lineLength = omapfbsink->fixinfo.line_length; ++ size = gfxAttrs.dim.height * gfxAttrs.dim.width * 2; ++ ++ hInBuf = Buffer_create(size, BufferGfx_getBufferAttrs(&gfxAttrs)); ++ if (hInBuf == NULL) { ++ GST_ELEMENT_ERROR(omapfbsink, RESOURCE, WRITE, ("Could not allocate refer dmai buffer"), ("Could not allocate refer dmai buffer")); ++ goto cleanup; ++ } ++ Buffer_setUserPtr(hInBuf, (Int8*) inBuf); ++ Buffer_setNumBytesUsed(hInBuf,Buffer_getSize(hInBuf)); ++ ++ hOutBuf = Buffer_create(size, BufferGfx_getBufferAttrs(&gfxAttrs)); ++ if (hOutBuf == NULL) { ++ GST_ELEMENT_ERROR(omapfbsink, RESOURCE, WRITE, ("Could not allocate refer dmai buffer"), ("Could not allocate refer dmai buffer")); ++ goto cleanup; ++ } ++ Buffer_setUserPtr(hOutBuf, (Int8*) outBuf); ++ Buffer_setNumBytesUsed(hOutBuf,Buffer_getSize(hOutBuf)); ++ ++ ++ if (Framecopy_config(omapfbsink->hFc, hInBuf, hOutBuf) < 0) { ++ GST_ELEMENT_ERROR(omapfbsink, RESOURCE, WRITE, ("failed to configure dmai framecopy handle"), ("failed to configure dmai framecopy handle")); ++ goto cleanup; ++ } ++ ++ if (Framecopy_execute(omapfbsink->hFc, hInBuf, hOutBuf) < 0) { ++ GST_ELEMENT_ERROR(omapfbsink, RESOURCE, WRITE, ("failed to execute dmai framecopy handle"), ("failed to configure dmai framecopy handle")); ++ goto cleanup; ++ } ++ cleanup: ++ ++ if (hInBuf) ++ Buffer_delete(hInBuf); ++ if (hOutBuf) ++ Buffer_delete(hOutBuf); ++} ++ ++static GstFlowReturn ++render (GstBaseSink * bsink, GstBuffer * buf) ++{ ++ int i, w, h; ++ GstOmapFbSink *omapfbsink = GST_OMAPFB_SINK(bsink); ++ __uint8_t *fb = omapfbsink->framebuffer, *data = GST_BUFFER_DATA(buf); ++ gboolean useXcopy = FALSE; ++ ++ if (GST_IS_TIDMAIBUFFERTRANSPORT(buf)) { ++ GST_LOG("found dmai transport buffer, enabling hw framecopy.\n"); ++ useXcopy = TRUE; ++ } ++ ++ if(omapfbsink->plane_info.enabled == 2) ++ { ++ omapfbsink->plane_info.enabled = 1; ++ ++ g_mutex_lock (omapfbsink->x_lock); ++ gst_omapfbsink_update_plane(omapfbsink); ++ g_mutex_unlock (omapfbsink->x_lock); ++ } ++ ++ /* If a buffer which wasn't supplied by us is given to us to render with, ++ we need to copy to our buffer first so that memory alignment constraints ++ are met. */ ++ if((data != omapfbsink->buffer && GST_BUFFER_SIZE(buf) <= omapfbsink->buffer_size) && !useXcopy) ++ { ++ memcpy(omapfbsink->buffer, data, GST_BUFFER_SIZE(buf)); ++ data = omapfbsink->buffer; ++ } ++ ++ /* buffer_alloc gave a direct buffer, so we have nothing to ++ do here... */ ++ if(omapfbsink->row_skip) ++ return GST_FLOW_OK; ++ ++ switch(omapfbsink->image_format) { ++ case GST_MAKE_FOURCC('I', '4', '2', '0'): ++ /* Convert to YUV422 and send to FB */ ++ ++ h = GST_VIDEO_SINK_HEIGHT (omapfbsink); ++ w = GST_VIDEO_SINK_WIDTH (omapfbsink); ++ ++ __uint8_t *y, *u, *v; ++ y = data; ++ u = y + w * h; ++ v = u + w / 2 * h / 2; ++ yuv420_to_yuv422(fb, y, u, v, w & ~15, h, w, w / 2, omapfbsink->fixinfo.line_length); ++ break; ++ ++ case GST_MAKE_FOURCC('U', 'Y', 'V', 'Y'): ++ /* Send to FB, taking into account line_length */ ++ if (useXcopy) { ++ x_memcpy(omapfbsink, fb, data); ++ } ++ else { ++ ++ w = 2 * GST_VIDEO_SINK_WIDTH (omapfbsink); ++ for(i = 0; i < GST_VIDEO_SINK_HEIGHT (omapfbsink); i++) ++ { ++ memcpy(fb, data, w); ++ ++ fb += omapfbsink->fixinfo.line_length; ++ data += w; ++ } ++ } ++ break; ++ } ++ ++ return GST_FLOW_OK; ++} ++ ++static gboolean ++setcaps (GstBaseSink *bsink, ++ GstCaps *vscapslist) ++{ ++ GstOmapFbSink *self; ++ GstStructure *structure; ++ ++ gint width, height; ++ struct omapfb_color_key color_key; ++ ++ self = GST_OMAPFB_SINK (bsink); ++ ++ structure = gst_caps_get_structure (vscapslist, 0); ++ ++ gst_structure_get_int (structure, "width", &width); ++ gst_structure_get_int (structure, "height", &height); ++ ++ self->overlay_info.xres = MIN (self->varinfo.xres, width) & ~15; ++ self->overlay_info.yres = MIN (self->varinfo.yres, height) & ~15; ++ self->overlay_info.xres_virtual = self->overlay_info.xres; ++ self->overlay_info.yres_virtual = self->overlay_info.yres; ++ ++ self->overlay_info.xoffset = 0; ++ self->overlay_info.yoffset = 0; ++ ++ gst_structure_get_fourcc (structure, "format", &self->image_format); ++ switch(self->image_format) { ++ case GST_MAKE_FOURCC('I', '4', '2', '0'): ++ self->row_skip = FALSE; /* Colorspace conversion required */ ++ self->overlay_info.nonstd = OMAPFB_COLOR_YUY422; ++ break; ++ case GST_MAKE_FOURCC('U', 'Y', 'V', 'Y'): ++ /* Can data be pushed straight to the FB or do we need to interleave? */ ++ if (self->fixinfo.line_length != 2 * width) ++ self->row_skip = FALSE; ++ else ++ self->row_skip = TRUE; ++ self->overlay_info.nonstd = OMAPFB_COLOR_YUV422; ++ break; ++ } ++ ++ if (ioctl (self->overlay_fd, FBIOPUT_VSCREENINFO, &self->overlay_info)) ++ return FALSE; ++ ++ GST_VIDEO_SINK_WIDTH (self) = width; ++ GST_VIDEO_SINK_HEIGHT (self) = height; ++ if (!self->xwindow) { ++ self->xwindow = gst_omapfbsink_xwindow_new (self, ++ GST_VIDEO_SINK_WIDTH (self), GST_VIDEO_SINK_HEIGHT (self)); ++ } ++ ++ color_key.channel_out = OMAPFB_CHANNEL_OUT_LCD; ++ color_key.background = 0x0; ++ color_key.trans_key = self->colorKey; ++ if (self->xwindow) ++ color_key.key_type = OMAPFB_COLOR_KEY_GFX_DST; ++ else ++ color_key.key_type = OMAPFB_COLOR_KEY_DISABLED; ++ ++ if (ioctl (self->overlay_fd, OMAPFB_SET_COLOR_KEY, &color_key)) ++ return FALSE; ++ ++ self->plane_info.pos_x = 0; ++ self->plane_info.pos_y = 0; ++ self->plane_info.out_width = self->overlay_info.xres; ++ self->plane_info.out_height = self->overlay_info.yres; ++ self->plane_info.enabled = 2; ++ ++ if (ioctl (self->overlay_fd, FBIOGET_FSCREENINFO, &self->fixinfo)) ++ return FALSE; ++ ++ self->enabled = TRUE; ++ return TRUE; ++} ++ ++static gboolean ++start (GstBaseSink *bsink) ++{ ++ GstOmapFbSink *self; ++ int fd; ++ ++ self = GST_OMAPFB_SINK (bsink); ++ ++ fd = open ("/dev/fb0", O_RDWR); ++ ++ if (fd == -1) ++ return FALSE; ++ ++ if (ioctl (fd, FBIOGET_VSCREENINFO, &self->varinfo)) ++ { ++ close (fd); ++ return FALSE; ++ } ++ ++ if (close (fd)) ++ return FALSE; ++ ++ self->overlay_fd = open ("/dev/fb1", O_RDWR); ++ ++ if (self->overlay_fd == -1) ++ return FALSE; ++ ++ if (ioctl (self->overlay_fd, FBIOGET_VSCREENINFO, &self->overlay_info)) ++ return FALSE; ++ ++ if (ioctl (self->overlay_fd, OMAPFB_QUERY_PLANE, &self->plane_info)) ++ return FALSE; ++ ++ if (ioctl (self->overlay_fd, OMAPFB_QUERY_MEM, &self->mem_info)) ++ return FALSE; ++ ++ self->framebuffer = mmap (NULL, self->mem_info.size, PROT_WRITE, MAP_SHARED, self->overlay_fd, 0); ++ if (self->framebuffer == MAP_FAILED) ++ return FALSE; ++ ++ return TRUE; ++} ++ ++static gboolean ++stop (GstBaseSink *bsink) ++{ ++ GstOmapFbSink *self; ++ ++ self = GST_OMAPFB_SINK (bsink); ++ ++ if (self->enabled) ++ { ++ self->plane_info.enabled = 0; ++ ++ if (ioctl (self->overlay_fd, OMAPFB_SETUP_PLANE, &self->plane_info)) ++ return FALSE; ++ } ++ ++ if (munmap (self->framebuffer, self->mem_info.size)) ++ return FALSE; ++ ++ if (close (self->overlay_fd)) ++ return FALSE; ++ ++ if (self->hFc) ++ Framecopy_delete(self->hFc); ++ ++ return TRUE; ++} ++ ++/* This function cleans the X context. Closing the Display and unrefing the ++ caps for supported formats. */ ++static void ++gst_omapfbsink_xcontext_clear (GstOmapFbSink * omapfbsink) ++{ ++ GstXContext *xcontext; ++ GST_OBJECT_LOCK (omapfbsink); ++ if (omapfbsink->xcontext == NULL) { ++ GST_OBJECT_UNLOCK (omapfbsink); ++ return; ++ } ++ ++ xcontext = omapfbsink->xcontext; ++ omapfbsink->xcontext = NULL; ++ ++ GST_OBJECT_UNLOCK (omapfbsink); ++ g_mutex_lock (omapfbsink->x_lock); ++ ++ XCloseDisplay (xcontext->disp); ++ g_mutex_unlock (omapfbsink->x_lock); ++ g_free (xcontext); ++} ++ ++static void ++gst_omapfbsink_reset (GstOmapFbSink *omapfbsink) ++{ ++ GThread *thread; ++ ++ GST_OBJECT_LOCK (omapfbsink); ++ omapfbsink->running = FALSE; ++ /* grab thread and mark it as NULL */ ++ thread = omapfbsink->event_thread; ++ omapfbsink->event_thread = NULL; ++ GST_OBJECT_UNLOCK (omapfbsink); ++ ++ /* Wait for our event thread to finish before we clean up our stuff. */ ++ if (thread) ++ g_thread_join (thread); ++ ++ g_mutex_lock (omapfbsink->flow_lock); ++ if (omapfbsink->xwindow) { ++ gst_omapfbsink_xwindow_clear (omapfbsink, omapfbsink->xwindow); ++ gst_omapfbsink_xwindow_destroy (omapfbsink, omapfbsink->xwindow); ++ omapfbsink->xwindow = NULL; ++ } ++ g_mutex_unlock (omapfbsink->flow_lock); ++ gst_omapfbsink_xcontext_clear (omapfbsink); ++} ++ ++static GstStateChangeReturn ++gst_omapfbsink_change_state (GstElement * element, GstStateChange transition) ++{ ++ GstOmapFbSink *omapfbsink; ++ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; ++ GstXContext *xcontext = NULL; ++ ++ omapfbsink = GST_OMAPFB_SINK (element); ++ ++ switch (transition) { ++ case GST_STATE_CHANGE_NULL_TO_READY: ++ ++ /* Initializing the XContext */ ++ if (omapfbsink->xcontext == NULL) { ++ xcontext = gst_omapfbsink_xcontext_get (omapfbsink); ++ ++ GST_OBJECT_LOCK (omapfbsink); ++ omapfbsink->xcontext = xcontext; ++ GST_OBJECT_UNLOCK (omapfbsink); ++ } ++ break; ++ case GST_STATE_CHANGE_READY_TO_PAUSED: ++ g_mutex_lock (omapfbsink->flow_lock); ++ if (omapfbsink->xwindow) ++ gst_omapfbsink_xwindow_clear (omapfbsink, omapfbsink->xwindow); ++ g_mutex_unlock (omapfbsink->flow_lock); ++ break; ++ case GST_STATE_CHANGE_PAUSED_TO_PLAYING: ++ break; ++ default: ++ break; ++ } ++ ++ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); ++ ++ switch (transition) { ++ case GST_STATE_CHANGE_PLAYING_TO_PAUSED: ++ break; ++ case GST_STATE_CHANGE_PAUSED_TO_READY: ++ GST_VIDEO_SINK_WIDTH (omapfbsink) = 0; ++ GST_VIDEO_SINK_HEIGHT (omapfbsink) = 0; ++ break; ++ case GST_STATE_CHANGE_READY_TO_NULL: ++ gst_omapfbsink_reset (omapfbsink); ++ break; ++ default: ++ break; ++ } ++ ++ return ret; ++} ++ ++static void ++type_class_init (gpointer g_class, ++ gpointer class_data) ++{ ++ GstElementClass *element_class; ++ GstBaseSinkClass *base_sink_class; ++ ++ element_class = (GstElementClass *) g_class; ++ base_sink_class = (GstBaseSinkClass *) g_class; ++ ++ parent_class = g_type_class_peek_parent (g_class); ++ ++ base_sink_class->set_caps = GST_DEBUG_FUNCPTR (setcaps); ++ base_sink_class->buffer_alloc = GST_DEBUG_FUNCPTR (buffer_alloc); ++ base_sink_class->render = GST_DEBUG_FUNCPTR (render); ++ base_sink_class->start = GST_DEBUG_FUNCPTR (start); ++ base_sink_class->stop = GST_DEBUG_FUNCPTR (stop); ++ ++ element_class->change_state = gst_omapfbsink_change_state; ++} ++ ++static void ++type_base_init (gpointer g_class) ++{ ++ GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); ++ ++ { ++ GstElementDetails details; ++ ++ details.longname = "Linux OMAP framebuffer sink"; ++ details.klass = "Sink/Video"; ++ details.description = "Renders video with omapfb"; ++ details.author = "Felipe Contreras"; ++ ++ gst_element_class_set_details (element_class, &details); ++ } ++ ++ { ++ GstPadTemplate *template; ++ ++ template = gst_pad_template_new ("sink", GST_PAD_SINK, ++ GST_PAD_ALWAYS, ++ generate_sink_template ()); ++ ++ gst_element_class_add_pad_template (element_class, template); ++ } ++} ++ ++static gboolean ++gst_omapfbsink_interface_supported (GstImplementsInterface * iface, GType type) ++{ ++ g_assert (type == GST_TYPE_X_OVERLAY); ++ return TRUE; ++} ++ ++static void ++gst_omapfbsink_interface_init (GstImplementsInterfaceClass * klass) ++{ ++ klass->supported = gst_omapfbsink_interface_supported; ++} ++ ++static void ++gst_omapfbsink_init (GstOmapFbSink * omapfbsink) ++{ ++ omapfbsink->display_name = NULL; ++ omapfbsink->xcontext = NULL; ++ omapfbsink->xwindow = NULL; ++ ++ omapfbsink->event_thread = NULL; ++ omapfbsink->running = FALSE; ++ ++ omapfbsink->x_lock = g_mutex_new (); ++ omapfbsink->flow_lock = g_mutex_new (); ++ ++ omapfbsink->handle_events = TRUE; ++ omapfbsink->colorKey = 0xff0; ++ ++ omapfbsink->plane_info.enabled = 0; ++ omapfbsink->row_skip = FALSE; ++ ++ omapfbsink->buffer = NULL; ++ omapfbsink->buffer_size = 0; ++ omapfbsink->hFc = NULL; ++} ++ ++GType ++gst_omapfbsink_get_type (void) ++{ ++ static GType type = 0; ++ ++ if (G_UNLIKELY (type == 0)) ++ { ++ GTypeInfo *type_info; ++ static const GInterfaceInfo iface_info = { ++ (GInterfaceInitFunc) gst_omapfbsink_interface_init, ++ NULL, ++ NULL, ++ }; ++ static const GInterfaceInfo overlay_info = { ++ (GInterfaceInitFunc) gst_omapfbsink_xoverlay_init, ++ NULL, ++ NULL, ++ }; ++ type_info = g_new0 (GTypeInfo, 1); ++ type_info->class_size = sizeof (GstOmapFbSinkClass); ++ type_info->base_init = type_base_init; ++ type_info->class_init = type_class_init; ++ type_info->instance_size = sizeof (GstOmapFbSink); ++ type_info->instance_init = (GInstanceInitFunc) gst_omapfbsink_init; ++ ++ type = g_type_register_static (GST_TYPE_BASE_SINK, "GstOmapFbSink", type_info, 0); ++ g_type_add_interface_static (type, GST_TYPE_IMPLEMENTS_INTERFACE, &iface_info); ++ g_type_add_interface_static (type, GST_TYPE_X_OVERLAY, &overlay_info); ++ ++ g_free (type_info); ++ } ++ ++ return type; ++} +diff -uNr ticodecplugin/src/omapfb.h ticodecplugin.new/src/omapfb.h +--- ticodecplugin/src/omapfb.h 1969-12-31 18:00:00.000000000 -0600 ++++ ticodecplugin.new/src/omapfb.h 2010-09-03 13:54:11.929409696 -0500 +@@ -0,0 +1,142 @@ ++/* ++ * Copyright (C) 2008 Felipe Contreras <felipe.contreras@gmail.com> ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation ++ * version 2.1 of the License. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA ++ */ ++ ++#ifndef GST_OMAPFB_H ++#define GST_OMAPFB_H ++ ++#include <ti/sdo/dmai/BufferGfx.h> ++#include <ti/sdo/dmai/Framecopy.h> ++ ++#include "gsttidmaibuffertransport.h" ++#include <gst/gst.h> ++#include <gst/video/gstvideosink.h> ++#include <gst/video/video.h> ++ ++#include <X11/Xlib.h> ++#include <X11/Xutil.h> ++ ++#include <linux/fb.h> ++#include <linux/omapfb.h> ++ ++ ++G_BEGIN_DECLS ++ ++#define GST_OMAPFB_SINK_TYPE (gst_omapfbsink_get_type ()) ++#define GST_OMAPFB_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_OMAPFB_SINK_TYPE, GstOmapFbSink)) ++ ++typedef struct GstXContext GstXContext; ++typedef struct GstXWindow GstXWindow; ++typedef struct GstOmapFbSink GstOmapFbSink; ++typedef struct GstOmapFbSinkClass GstOmapFbSinkClass; ++ ++/** ++ * GstXWindow: ++ * @win: the Window ID of this X11 window ++ * @width: the width in pixels of Window @win ++ * @height: the height in pixels of Window @win ++ * @internal: used to remember if Window @win was created internally or passed ++ * through the #GstXOverlay interface ++ * @gc: the Graphical Context of Window @win ++ * ++ * Structure used to store informations about a Window. ++ */ ++struct GstXWindow { ++ Window win; ++ gint width, height; ++ gboolean internal; ++ GC gc; ++ ++ gint wx, wy; ++}; ++ ++/** ++ * GstXContext: ++ * @disp: the X11 Display of this context ++ * @screen: the default Screen of Display @disp ++ * @screen_num: the Screen number of @screen ++ * @visual: the default Visual of Screen @screen ++ * @root: the root Window of Display @disp ++ * @white: the value of a white pixel on Screen @screen ++ * @black: the value of a black pixel on Screen @screen ++ * @depth: the color depth of Display @disp ++ * @bpp: the number of bits per pixel on Display @disp ++ * @endianness: the endianness of image bytes on Display @disp ++ * @width: the width in pixels of Display @disp ++ * @height: the height in pixels of Display @disp ++ * ++ * Structure used to store various informations collected/calculated for a ++ * Display. ++ */ ++struct GstXContext { ++ Display *disp; ++ Screen *screen; ++ gint screen_num; ++ ++ Visual *visual; ++ Window root; ++ ++ gint depth; ++ gint bpp; ++ ++ gint width, height; ++}; ++ ++struct GstOmapFbSink ++{ ++ GstVideoSink videosink; ++ ++ struct fb_fix_screeninfo fixinfo; ++ struct fb_var_screeninfo varinfo; ++ struct fb_var_screeninfo overlay_info; ++ struct omapfb_mem_info mem_info; ++ struct omapfb_plane_info plane_info; ++ ++ int overlay_fd; ++ unsigned char *framebuffer; ++ gboolean enabled; ++ ++ GMutex *x_lock; ++ GMutex *flow_lock; ++ ++ GstXContext *xcontext; ++ GstXWindow *xwindow; ++ ++ gulong colorKey; ++ char *display_name; ++ GThread *event_thread; ++ ++ void *buffer; ++ guint buffer_size; ++ guint image_format; ++ ++ gboolean row_skip; ++ gboolean handle_events; ++ gboolean running; ++ Framecopy_Handle hFc; ++}; ++ ++struct GstOmapFbSinkClass ++{ ++ GstBaseSinkClass parent_class; ++}; ++ ++GType gst_omapfbsink_get_type (void); ++ ++G_END_DECLS ++ ++#endif /* GST_OMAPFB_H */ +diff -uNr ticodecplugin/src/yuv.S ticodecplugin.new/src/yuv.S +--- ticodecplugin/src/yuv.S 1969-12-31 18:00:00.000000000 -0600 ++++ ticodecplugin.new/src/yuv.S 2010-09-03 13:54:11.929409696 -0500 +@@ -0,0 +1,117 @@ ++/* ++ Copyright (C) 2008 Mans Rullgard ++ ++ Permission is hereby granted, free of charge, to any person ++ obtaining a copy of this software and associated documentation ++ files (the "Software"), to deal in the Software without ++ restriction, including without limitation the rights to use, copy, ++ modify, merge, publish, distribute, sublicense, and/or sell copies ++ of the Software, and to permit persons to whom the Software is ++ furnished to do so, subject to the following conditions: ++ ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. ++ ++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT ++ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ++ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ DEALINGS IN THE SOFTWARE. ++*/ ++ ++ .fpu neon ++ .text ++ ++@ yuv420_to_yuv422(uint8_t *yuv, uint8_t *y, uint8_t *u, uint8_t *v, ++@ int w, int h, int yw, int cw, int dw) ++ ++#define yuv r0 ++#define y r1 ++#define u r2 ++#define v r3 ++#define w r4 ++#define h r5 ++#define yw r6 ++#define cw r7 ++#define dw r8 ++ ++#define tyuv r9 ++#define ty r10 ++#define tu r11 ++#define tv r12 ++#define i lr ++ ++ .global yuv420_to_yuv422 ++ .func yuv420_to_yuv422 ++yuv420_to_yuv422: ++ push {r4-r11,lr} ++ add r4, sp, #36 ++ ldm r4, {r4-r8} ++1: ++ mov tu, u ++ mov tv, v ++ vld1.64 {d2}, [u,:64], cw @ u0 ++ vld1.64 {d3}, [v,:64], cw @ v0 ++ mov tyuv, yuv ++ mov ty, y ++ vzip.8 d2, d3 @ u0v0 ++ mov i, #16 ++2: ++ pld [y, #64] ++ vld1.64 {d0, d1}, [y,:128], yw @ y0 ++ pld [u, #64] ++ subs i, i, #4 ++ vld1.64 {d6}, [u,:64], cw @ u2 ++ pld [y, #64] ++ vld1.64 {d4, d5}, [y,:128], yw @ y1 ++ pld [v, #64] ++ vld1.64 {d7}, [v,:64], cw @ v2 ++ pld [y, #64] ++ vld1.64 {d16,d17}, [y,:128], yw @ y2 ++ vzip.8 d6, d7 @ u2v2 ++ pld [u, #64] ++ vld1.64 {d22}, [u,:64], cw @ u4 ++ pld [v, #64] ++ vld1.64 {d23}, [v,:64], cw @ v4 ++ pld [y, #64] ++ vld1.64 {d20,d21}, [y,:128], yw @ y3 ++ vmov q9, q3 @ u2v2 ++ vzip.8 d22, d23 @ u4v4 ++ vrhadd.u8 q3, q1, q3 @ u1v1 ++ vzip.8 q0, q1 @ y0u0y0v0 ++ vmov q12, q11 @ u4v4 ++ vzip.8 q2, q3 @ y1u1y1v1 ++ vrhadd.u8 q11, q9, q11 @ u3v3 ++ vst1.64 {d0-d3}, [yuv,:128], dw @ y0u0y0v0 ++ vzip.8 q8, q9 @ y2u2y2v2 ++ vst1.64 {d4-d7}, [yuv,:128], dw @ y1u1y1v1 ++ vzip.8 q10, q11 @ y3u3y3v3 ++ vst1.64 {d16-d19}, [yuv,:128], dw @ y2u2y2v2 ++ vmov q1, q12 ++ vst1.64 {d20-d23}, [yuv,:128], dw @ y3u3y3v3 ++ bgt 2b ++ subs w, w, #16 ++ add yuv, tyuv, #32 ++ add y, ty, #16 ++ add u, tu, #8 ++ add v, tv, #8 ++ bgt 1b ++ ++ ldr w, [sp, #36] ++ subs h, h, #16 ++ add yuv, yuv, dw, lsl #4 ++ sub yuv, yuv, w, lsl #1 ++ add y, y, yw, lsl #4 ++ sub y, y, w ++ add u, u, cw, lsl #3 ++ sub u, u, w, asr #1 ++ add v, v, cw, lsl #3 ++ sub v, v, w, asr #1 ++ bgt 1b ++ ++ pop {r4-r11,pc} ++ .endfunc ++ diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0003-Support-setting-the-display-framerate-directly-when-.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0003-Support-setting-the-display-framerate-directly-when-.patch new file mode 100644 index 00000000..eb7181be --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0003-Support-setting-the-display-framerate-directly-when-.patch @@ -0,0 +1,86 @@ +From fb4dabcac144fcf1a7e9b1eba0114b2eed594d05 Mon Sep 17 00:00:00 2001 +From: Don Darling <don.osc2@gmail.com> +Date: Thu, 26 Aug 2010 11:12:39 -0500 +Subject: [PATCH 3/8] Support setting the display framerate directly when possible. + +If can_set_display_framerate is set to true, TIDmaiVideoSink will attempt to +set the display framerate directly in DMAI, instead of trying to simulate the +desired framerate by occasionally repeating frames. + +Platforms that support this will need to enable it explicitly. +--- + .../ticodecplugin/src/gsttidmaivideosink.c | 24 ++++++++++++++++++++ + .../ticodecplugin/src/gsttidmaivideosink.h | 1 + + 2 files changed, 25 insertions(+), 0 deletions(-) + +diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c +index c87b89c..4e327ae 100644 +--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c ++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c +@@ -442,6 +442,7 @@ static void gst_tidmaivideosink_init(GstTIDmaiVideoSink * dmaisink, + dmaisink->numBufs = -1; + dmaisink->framerepeat = 0; + dmaisink->repeat_with_refresh = FALSE; ++ dmaisink->can_set_display_framerate = FALSE; + dmaisink->rotation = -1; + dmaisink->tempDmaiBuf = NULL; + dmaisink->accelFrameCopy = TRUE; +@@ -952,6 +953,9 @@ static void gst_tidmaivideosink_check_set_framerate(GstTIDmaiVideoSink * sink) + * then 1 is returned to indicate that there will be no frame + * repeating. + * ++ * If the driver supports explicit configuration of the framerate, we ++ * don't ever need to repeat frames, and 1 is returned. ++ * + ******************************************************************************/ + static int gst_tidmaivideosink_get_framerepeat(GstTIDmaiVideoSink * sink) + { +@@ -959,6 +963,13 @@ static int gst_tidmaivideosink_get_framerepeat(GstTIDmaiVideoSink * sink) + + GST_DEBUG("Begin\n"); + ++ /* If the display allows you to configure the frame rate, we never need ++ * to repeat a frame. ++ */ ++ if (sink->can_set_display_framerate) { ++ return 1; ++ } ++ + /* Divide the native framerate by the desired framerate. If the result + * is a whole number, return it. Otherwise return 1 -- we don't support + * fractional repeat rates. */ +@@ -1151,6 +1162,19 @@ static gboolean gst_tidmaivideosink_set_display_attrs(GstTIDmaiVideoSink *sink, + sink->dAttrs.displayDevice = sink->displayDevice == NULL ? + sink->dAttrs.displayDevice : sink->displayDevice; + ++ /* Specify framerate if supported by DMAI and the display driver */ ++ if (sink->can_set_display_framerate) { ++ #if defined (Platform_dm365) ++ sink->dAttrs.forceFrameRateNum = ++ gst_value_get_fraction_numerator(&sink->iattrs.framerate); ++ sink->dAttrs.forceFrameRateDen = ++ gst_value_get_fraction_denominator(&sink->iattrs.framerate); ++ #else ++ GST_ERROR("setting driver framerate is not supported\n"); ++ return FALSE; ++ #endif ++ } ++ + /* Set rotation on OMAP35xx */ + if (sink->cpu_dev == Cpu_Device_OMAP3530) { + sink->dAttrs.rotation = sink->rotation == -1 ? +diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h +index 5d13e08..4800fcd 100644 +--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h ++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h +@@ -124,6 +124,7 @@ struct _GstTIDmaiVideoSink { + */ + int framerepeat; + gboolean repeat_with_refresh; ++ gboolean can_set_display_framerate; + gboolean signal_handoffs; + + /* Hardware accelerated copy */ +-- +1.7.0.4 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0004-Cosmetic-cleanup-clarify-some-comments.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0004-Cosmetic-cleanup-clarify-some-comments.patch new file mode 100644 index 00000000..229c4521 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0004-Cosmetic-cleanup-clarify-some-comments.patch @@ -0,0 +1,73 @@ +From 03ab3ad3f790dde2dbddfeb62001e8610dbb919a Mon Sep 17 00:00:00 2001 +From: Don Darling <don.osc2@gmail.com> +Date: Thu, 26 Aug 2010 18:25:56 -0500 +Subject: [PATCH 4/8] Cosmetic cleanup / clarify some comments. + +--- + .../ticodecplugin/src/gsttidmaivideosink.c | 42 ++++++++----------- + 1 files changed, 18 insertions(+), 24 deletions(-) + +diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c +index 4e327ae..1d04e1c 100644 +--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c ++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c +@@ -434,23 +434,23 @@ static void gst_tidmaivideosink_init(GstTIDmaiVideoSink * dmaisink, + * Anything that has a NULL value will be initialized with DMAI defaults + * in the gst_tidmaivideosink_init_display function. + */ +- dmaisink->displayStd = NULL; +- dmaisink->displayDevice = NULL; +- dmaisink->dGfxAttrs = defaultGfxAttrs; +- dmaisink->videoStd = NULL; +- dmaisink->videoOutput = NULL; +- dmaisink->numBufs = -1; +- dmaisink->framerepeat = 0; +- dmaisink->repeat_with_refresh = FALSE; ++ dmaisink->displayStd = NULL; ++ dmaisink->displayDevice = NULL; ++ dmaisink->dGfxAttrs = defaultGfxAttrs; ++ dmaisink->videoStd = NULL; ++ dmaisink->videoOutput = NULL; ++ dmaisink->numBufs = -1; ++ dmaisink->framerepeat = 0; ++ dmaisink->repeat_with_refresh = FALSE; + dmaisink->can_set_display_framerate = FALSE; +- dmaisink->rotation = -1; +- dmaisink->tempDmaiBuf = NULL; +- dmaisink->accelFrameCopy = TRUE; +- dmaisink->autoselect = FALSE; +- dmaisink->prevVideoStd = 0; +- dmaisink->useUserptrBufs = FALSE; +- dmaisink->hideOSD = FALSE; +- dmaisink->hDispBufTab = NULL; ++ dmaisink->rotation = -1; ++ dmaisink->tempDmaiBuf = NULL; ++ dmaisink->accelFrameCopy = TRUE; ++ dmaisink->autoselect = FALSE; ++ dmaisink->prevVideoStd = 0; ++ dmaisink->useUserptrBufs = FALSE; ++ dmaisink->hideOSD = FALSE; ++ dmaisink->hDispBufTab = NULL; + + dmaisink->signal_handoffs = DEFAULT_SIGNAL_HANDOFFS; + +@@ -947,14 +947,8 @@ static void gst_tidmaivideosink_check_set_framerate(GstTIDmaiVideoSink * sink) + /****************************************************************************** + * gst_tidmaivideosink_get_framerepeat + * +- * This function will look at the output display frame rate and the +- * input frame rate and determine how many times a frame should be +- * repeated. If the output is not an integer multiple of the input +- * then 1 is returned to indicate that there will be no frame +- * repeating. +- * +- * If the driver supports explicit configuration of the framerate, we +- * don't ever need to repeat frames, and 1 is returned. ++ * Return how many times a frame should be repeated to support a ++ * framerate lower than the display's native speed. + * + ******************************************************************************/ + static int gst_tidmaivideosink_get_framerepeat(GstTIDmaiVideoSink * sink) +-- +1.7.0.4 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0005-Enable-setting-the-framerate-directly-on-DM365.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0005-Enable-setting-the-framerate-directly-on-DM365.patch new file mode 100644 index 00000000..e4059577 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0005-Enable-setting-the-framerate-directly-on-DM365.patch @@ -0,0 +1,33 @@ +From 1cffa12c9ceb07558d2e4b35cc674070c7a3b8ee Mon Sep 17 00:00:00 2001 +From: Don Darling <don.osc2@gmail.com> +Date: Thu, 26 Aug 2010 18:27:50 -0500 +Subject: [PATCH 5/8] Enable setting the framerate directly on DM365. + +This is supported by recent changes to the display driver. DM365 will no +longer use the "repeat_with_refresh" method to display frames more than once. +--- + .../ticodecplugin/src/gsttidmaivideosink.c | 7 ++----- + 1 files changed, 2 insertions(+), 5 deletions(-) + +diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c +index 1d04e1c..3615bfd 100644 +--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c ++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c +@@ -475,12 +475,9 @@ static void gst_tidmaivideosink_init(GstTIDmaiVideoSink * dmaisink, + g_assert(GST_VALUE_HOLDS_FRACTION(&dmaisink->oattrs.framerate)); + gst_value_set_fraction(&dmaisink->oattrs.framerate, 0, 1); + +- /* On DM365, we don't have the bandwidth to copy a frame multiple times to +- * display them more than once. We must put a frame to the display once +- * and let it be refreshed multiple times. +- */ ++ /* DM365 supports setting the display framerate */ + #if defined(Platform_dm365) +- dmaisink->repeat_with_refresh = TRUE; ++ dmaisink->can_set_display_framerate = TRUE; + #endif + + gst_tidmaivideosink_init_env(dmaisink); +-- +1.7.0.4 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0006-Remove-the-repeat_with_refresh-feature.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0006-Remove-the-repeat_with_refresh-feature.patch new file mode 100644 index 00000000..4055d0b5 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0006-Remove-the-repeat_with_refresh-feature.patch @@ -0,0 +1,132 @@ +From c1205a792fd519cdebc32c00a5f604ccd78d3eac Mon Sep 17 00:00:00 2001 +From: Don Darling <don.osc2@gmail.com> +Date: Thu, 26 Aug 2010 18:30:13 -0500 +Subject: [PATCH 6/8] Remove the "repeat_with_refresh" feature. + +No platforms are using it any longer. +--- + .../ticodecplugin/src/gsttidmaivideosink.c | 67 +------------------- + .../ticodecplugin/src/gsttidmaivideosink.h | 1 - + 2 files changed, 1 insertions(+), 67 deletions(-) + +diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c +index 3615bfd..0125ed2 100644 +--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c ++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c +@@ -170,8 +170,6 @@ static gboolean + gst_tidmaivideosink_event(GstBaseSink * bsink, GstEvent * event); + static void + gst_tidmaivideosink_init_env(GstTIDmaiVideoSink *sink); +-static int +- gst_tidmaivideosink_videostd_get_refresh_latency(VideoStd_Type videoStd); + static gboolean + gst_tidmaivideosink_alloc_display_buffers(GstTIDmaiVideoSink * sink, + Int32 bufSize); +@@ -441,7 +439,6 @@ static void gst_tidmaivideosink_init(GstTIDmaiVideoSink * dmaisink, + dmaisink->videoOutput = NULL; + dmaisink->numBufs = -1; + dmaisink->framerepeat = 0; +- dmaisink->repeat_with_refresh = FALSE; + dmaisink->can_set_display_framerate = FALSE; + dmaisink->rotation = -1; + dmaisink->tempDmaiBuf = NULL; +@@ -755,55 +752,6 @@ static int gst_tidmaivideosink_videostd_get_attrs(VideoStd_Type videoStd, + + + /******************************************************************************* +- * gst_tidmaivideosink_videostd_get_refresh_latency +- * +- * Return the refresh latency in us for the given display standard. +-*******************************************************************************/ +-static int gst_tidmaivideosink_videostd_get_refresh_latency( +- VideoStd_Type videoStd) +-{ +- switch (videoStd) { +- case VideoStd_1080P_24: +- return 41667; +- +- case VideoStd_SIF_PAL: +- case VideoStd_D1_PAL: +- case VideoStd_1080P_25: +- case VideoStd_1080I_25: +- return 40000; +- +- case VideoStd_CIF: +- case VideoStd_SIF_NTSC: +- case VideoStd_D1_NTSC: +- return 33367; +- +- case VideoStd_1080I_30: +- case VideoStd_1080P_30: +- return 33333; +- +- case VideoStd_576P: +- case VideoStd_720P_50: +- return 20000; +- +- case VideoStd_480P: +- case VideoStd_720P_60: +- #if defined(Platform_dm6467t) +- case VideoStd_1080P_60: +- #endif +- return 16667; +- +- case VideoStd_VGA: +- return 16667; +- +- default: +- break; +- } +- GST_ERROR("Unknown videoStd entered (VideoStd = %d)\n", videoStd); +- return 0; +-} +- +- +-/******************************************************************************* + * gst_tidmaivideosink_find_videostd + * + * This function will take in a VideoStd_Attrs structure and find the +@@ -1580,10 +1528,7 @@ static GstFlowReturn gst_tidmaivideosink_render(GstBaseSink * bsink, + + /* Display the frame as many times as specified by framerepeat. By + * default, the input buffer is copied to a display buffer for each time +- * it is to be repeated. However, if repeat_with_refresh is TRUE, then +- * the platform doesn't have the bandwidth for multiple copies. In this +- * case we copy and display the input buffer only once, but let it refresh +- * multiple times. ++ * it is to be repeated. + */ + for (i = 0; i < sink->framerepeat; i++) { + +@@ -1594,16 +1539,6 @@ static GstFlowReturn gst_tidmaivideosink_render(GstBaseSink * bsink, + goto cleanup; + } + +- /* If repeat_with_refresh was specified, wait for the display to +- * refresh framerepeat-1 times to make sure it has finished displaying +- * this buffer before we write new data into it. +- */ +- while (sink->repeat_with_refresh && i < (sink->framerepeat-1)) { +- usleep(gst_tidmaivideosink_videostd_get_refresh_latency( +- sink->dAttrs.videoStd) + 1); +- i++; +- } +- + /* Retrieve the dimensions of the display buffer */ + BufferGfx_getDimensions(hDispBuf, &dim); + GST_LOG("Display size %dx%d pitch %d\n", +diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h +index 4800fcd..2a28e4f 100644 +--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h ++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.h +@@ -123,7 +123,6 @@ struct _GstTIDmaiVideoSink { + * should be repeated to match the display output frame rate. + */ + int framerepeat; +- gboolean repeat_with_refresh; + gboolean can_set_display_framerate; + gboolean signal_handoffs; + +-- +1.7.0.4 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0007-Add-support-for-pad-allocated-buffers-in-TIDmaiVideo.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0007-Add-support-for-pad-allocated-buffers-in-TIDmaiVideo.patch new file mode 100644 index 00000000..863bd34d --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0007-Add-support-for-pad-allocated-buffers-in-TIDmaiVideo.patch @@ -0,0 +1,313 @@ +From 108fa0bb550f9b7355bfd5ae5340220fd1a4c9b5 Mon Sep 17 00:00:00 2001 +From: Don Darling <don.osc2@gmail.com> +Date: Thu, 5 Aug 2010 15:09:54 -0500 +Subject: [PATCH 7/8] Add support for pad-allocated buffers in TIDmaiVideoSink. + +This feature is currently only tested and enabled for DM365. +--- + .../ticodecplugin/src/gsttidmaibuffertransport.c | 4 +- + .../ticodecplugin/src/gsttidmaibuffertransport.h | 6 +- + .../ticodecplugin/src/gsttidmaivideosink.c | 197 ++++++++++++++++++-- + 3 files changed, 191 insertions(+), 16 deletions(-) + +diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.c +index 5fad371..9c69285 100644 +--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.c ++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.c +@@ -136,8 +136,8 @@ static void gst_tidmaibuffertransport_finalize(GstBuffer *gstbuffer) + */ + if (Buffer_getBufTab(self->dmaiBuffer) != NULL) { + GST_LOG("clearing GStreamer useMask bit\n"); +- Buffer_freeUseMask(self->dmaiBuffer, +- gst_tidmaibuffer_GST_FREE); ++ Buffer_freeUseMask(self->dmaiBuffer, gst_tidmaibuffer_GST_FREE); ++ Buffer_freeUseMask(self->dmaiBuffer, gst_tidmaibuffer_VIDEOSINK_FREE); + } else { + GST_LOG("calling Buffer_delete()\n"); + Buffer_delete(self->dmaiBuffer); +diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.h b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.h +index 0265e70..20945f3 100644 +--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.h ++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaibuffertransport.h +@@ -52,8 +52,10 @@ G_BEGIN_DECLS + GstTIDmaiBufferTransportClass)) + + /* Use mask flags that keep track of where buffer is in use */ +-#define gst_tidmaibuffer_GST_FREE 0x1 +-#define gst_tidmaibuffer_CODEC_FREE 0x2 ++#define gst_tidmaibuffer_GST_FREE 0x1 ++#define gst_tidmaibuffer_CODEC_FREE 0x2 ++#define gst_tidmaibuffer_VIDEOSINK_FREE 0x4 ++#define gst_tidmaibuffer_DISPLAY_FREE 0x8 + + typedef struct _GstTIDmaiBufferTransport GstTIDmaiBufferTransport; + typedef struct _GstTIDmaiBufferTransportClass GstTIDmaiBufferTransportClass; +diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c +index 0125ed2..7b84a8e 100644 +--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c ++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttidmaivideosink.c +@@ -151,6 +151,9 @@ static GstStateChangeReturn + gst_tidmaivideosink_change_state(GstElement * element, + GstStateChange transition); + static GstFlowReturn ++ gst_tidmaivideosink_buffer_alloc(GstBaseSink * bsink, guint64 offset, ++ guint size, GstCaps * caps, GstBuffer ** buf); ++static GstFlowReturn + gst_tidmaivideosink_preroll(GstBaseSink * bsink, GstBuffer * buffer); + static int + gst_tidmaivideosink_videostd_get_attrs(VideoStd_Type videoStd, +@@ -353,6 +356,13 @@ static void gst_tidmaivideosink_class_init(GstTIDmaiVideoSinkClass * klass) + GST_DEBUG_FUNCPTR(gst_tidmaivideosink_preroll); + gstbase_sink_class->render = + GST_DEBUG_FUNCPTR(gst_tidmaivideosink_render); ++ gstbase_sink_class->buffer_alloc = ++ GST_DEBUG_FUNCPTR(gst_tidmaivideosink_buffer_alloc); ++ ++ /* Pad-buffer allocation is currently only supported for DM365 */ ++ #if !defined(Platform_dm365) ++ gstbase_sink_class->buffer_alloc = NULL; ++ #endif + } + + +@@ -663,6 +673,132 @@ static gboolean gst_tidmaivideosink_event(GstBaseSink * bsink, + + + /****************************************************************************** ++ * gst_tidmaivideosink_buffer_alloc ++ ******************************************************************************/ ++static GstFlowReturn gst_tidmaivideosink_buffer_alloc(GstBaseSink * bsink, ++ guint64 offset, guint size, GstCaps * caps, ++ GstBuffer ** buf) ++{ ++ GstTIDmaiVideoSink *dmaisink = GST_TIDMAIVIDEOSINK(bsink); ++ BufferGfx_Attrs gfxAttrs = BufferGfx_Attrs_DEFAULT; ++ gboolean alloc_unref = FALSE; ++ Buffer_Handle hDispBuf = NULL; ++ GstCaps *alloc_caps; ++ ++ *buf = NULL; ++ ++ GST_LOG_OBJECT(dmaisink, ++ "a buffer of %d bytes was requested with caps %" GST_PTR_FORMAT ++ " and offset %" G_GUINT64_FORMAT, size, caps, offset); ++ ++ /* assume we're going to alloc what was requested, keep track of wheter we ++ * need to unref or not. When we suggest a new format upstream we will ++ * create a new caps that we need to unref. */ ++ alloc_caps = caps; ++ ++ /* Process the buffer caps */ ++ if (!gst_tidmaivideosink_process_caps(bsink, alloc_caps)) { ++ return GST_FLOW_UNEXPECTED; ++ } ++ ++ /* Pad buffer allocation requires that we use user-allocated display ++ * buffers. ++ */ ++ if (!dmaisink->useUserptrBufs && dmaisink->hDisplay) { ++ GST_ELEMENT_ERROR(dmaisink, RESOURCE, FAILED, ++ ("Cannot use pad buffer allocation after mmap buffers already " ++ "in use\n"), (NULL)); ++ return GST_FLOW_UNEXPECTED; ++ } ++ else { ++ dmaisink->useUserptrBufs = TRUE; ++ } ++ ++ /* Allocate the display buffers */ ++ if (!dmaisink->hDispBufTab && dmaisink->useUserptrBufs) { ++ ++ /* Set the display attributes now so we can allocate display buffers */ ++ if (!gst_tidmaivideosink_set_display_attrs(dmaisink, ++ dmaisink->dGfxAttrs.colorSpace)) { ++ GST_ERROR("Error while trying to set the display attributes\n"); ++ return GST_FLOW_UNEXPECTED; ++ } ++ ++ if (!gst_tidmaivideosink_alloc_display_buffers(dmaisink, size)) { ++ GST_ERROR("Failed to allocate display buffers"); ++ return GST_FLOW_UNEXPECTED; ++ } ++ } ++ ++ /* Get a buffer from the BufTab or display driver */ ++ if (!(hDispBuf = gst_tidmaibuftab_get_buf(dmaisink->hDispBufTab))) { ++ if (dmaisink->hDisplay && ++ Display_get(dmaisink->hDisplay, &hDispBuf) < 0) { ++ GST_ELEMENT_ERROR(dmaisink, RESOURCE, FAILED, ++ ("Failed to get display buffer\n"), (NULL)); ++ return GST_FLOW_UNEXPECTED; ++ } ++ } ++ ++ /* If the geometry doesn't match, generate a new caps for it */ ++ Buffer_getAttrs(hDispBuf, BufferGfx_getBufferAttrs(&gfxAttrs)); ++ ++ if (gfxAttrs.dim.width != dmaisink->dGfxAttrs.dim.width || ++ gfxAttrs.dim.height != dmaisink->dGfxAttrs.dim.height || ++ gfxAttrs.colorSpace != dmaisink->dGfxAttrs.colorSpace) { ++ ++ GstCaps *desired_caps; ++ GstStructure *desired_struct; ++ ++ /* make a copy of the incomming caps to create the new suggestion. We ++ * can't use make_writable because we might then destroy the original ++ * caps which we still need when the peer does not accept the ++ * suggestion. ++ */ ++ desired_caps = gst_caps_copy (caps); ++ desired_struct = gst_caps_get_structure (desired_caps, 0); ++ ++ GST_DEBUG ("we prefer to receive a %ldx%ld video; %ldx%ld was requested", ++ gfxAttrs.dim.width, gfxAttrs.dim.height, ++ dmaisink->dGfxAttrs.dim.width, dmaisink->dGfxAttrs.dim.height); ++ gst_structure_set (desired_struct, "width", G_TYPE_INT, ++ gfxAttrs.dim.width, NULL); ++ gst_structure_set (desired_struct, "height", G_TYPE_INT, ++ gfxAttrs.dim.height, NULL); ++ ++ if (gst_pad_peer_accept_caps (GST_VIDEO_SINK_PAD (dmaisink), ++ desired_caps)) { ++ alloc_caps = desired_caps; ++ alloc_unref = TRUE; ++ ++ if (!gst_tidmaivideosink_process_caps(bsink, alloc_caps)) { ++ return GST_FLOW_UNEXPECTED; ++ } ++ GST_DEBUG ("peer pad accepts our desired caps %" GST_PTR_FORMAT, ++ desired_caps); ++ } ++ else { ++ GST_DEBUG ("peer pad does not accept our desired caps %" ++ GST_PTR_FORMAT, desired_caps); ++ } ++ } ++ ++ /* Return the display buffer */ ++ BufferGfx_resetDimensions(hDispBuf); ++ Buffer_freeUseMask(hDispBuf, gst_tidmaibuffer_DISPLAY_FREE); ++ *buf = gst_tidmaibuffertransport_new(hDispBuf, NULL); ++ gst_buffer_set_caps(*buf, alloc_caps); ++ ++ /* If we allocated new caps, unref them now */ ++ if (alloc_unref) { ++ gst_caps_unref (alloc_caps); ++ } ++ ++ return GST_FLOW_OK; ++} ++ ++ ++/****************************************************************************** + * gst_tidmaivideosink_preroll + ******************************************************************************/ + static GstFlowReturn gst_tidmaivideosink_preroll(GstBaseSink * bsink, +@@ -1282,6 +1418,18 @@ static gboolean gst_tidmaivideosink_init_display(GstTIDmaiVideoSink * sink) + return FALSE; + } + ++ /* If we own the display buffers, tell DMAI to delay starting the ++ * display until we call Display_put for the first time. ++ */ ++ if (sink->hDispBufTab) { ++ #if defined(Platform_dm365) ++ sink->dAttrs.delayStreamon = TRUE; ++ #else ++ GST_ERROR("delayed V4L2 streamon not supported\n"); ++ return FALSE; ++ #endif ++ } ++ + /* Allocate user-allocated display buffers, if requested */ + if (!sink->hDispBufTab && sink->useUserptrBufs) { + if (!gst_tidmaivideosink_alloc_display_buffers(sink, 0)) { +@@ -1416,9 +1564,6 @@ static gboolean gst_tidmaivideosink_process_caps(GstBaseSink * bsink, + gst_structure_get_fraction(structure, "framerate", &framerateNum, + &framerateDen); + +- /* Error check new values against existing ones */ +- /* TBD */ +- + /* Populate the display graphics attributes */ + dmaisink->dGfxAttrs.bAttrs.reference = dmaisink->contiguousInputFrame; + dmaisink->dGfxAttrs.dim.width = width; +@@ -1445,9 +1590,10 @@ static gboolean gst_tidmaivideosink_process_caps(GstBaseSink * bsink, + static GstFlowReturn gst_tidmaivideosink_render(GstBaseSink * bsink, + GstBuffer * buf) + { +- Buffer_Handle hDispBuf = NULL; +- Buffer_Handle inBuf = NULL; +- GstTIDmaiVideoSink *sink = GST_TIDMAIVIDEOSINK(bsink); ++ Buffer_Handle hDispBuf = NULL; ++ Buffer_Handle inBuf = NULL; ++ gboolean inBufIsOurs = FALSE; ++ GstTIDmaiVideoSink *sink = GST_TIDMAIVIDEOSINK(bsink); + BufferGfx_Dimensions dim; + gchar dur_str[64]; + gchar ts_str[64]; +@@ -1470,7 +1616,10 @@ static GstFlowReturn gst_tidmaivideosink_render(GstBaseSink * bsink, + * generated via videotestsrc plugin. + */ + if (GST_IS_TIDMAIBUFFERTRANSPORT(buf)) { +- inBuf = GST_TIDMAIBUFFERTRANSPORT_DMAIBUF(buf); ++ inBuf = GST_TIDMAIBUFFERTRANSPORT_DMAIBUF(buf); ++ inBufIsOurs = (sink->hDispBufTab && ++ GST_TIDMAIBUFTAB_BUFTAB(sink->hDispBufTab) == ++ Buffer_getBufTab(inBuf)); + } else { + /* allocate DMAI buffer */ + if (sink->tempDmaiBuf == NULL) { +@@ -1532,11 +1681,33 @@ static GstFlowReturn gst_tidmaivideosink_render(GstBaseSink * bsink, + */ + for (i = 0; i < sink->framerepeat; i++) { + +- /* Get a buffer from the display driver */ +- if (Display_get(sink->hDisplay, &hDispBuf) < 0) { +- GST_ELEMENT_ERROR(sink, RESOURCE, FAILED, +- ("Failed to get display buffer\n"), (NULL)); +- goto cleanup; ++ /* If the input buffer originated from this element via pad allocation, ++ * simply give it back to the display and continue. ++ */ ++ if (inBufIsOurs) { ++ ++ /* Mark buffer as in-use by the display so it can't be re-used ++ * until it comes back from Display_get */ ++ Buffer_setUseMask(inBuf, Buffer_getUseMask(inBuf) | ++ gst_tidmaibuffer_DISPLAY_FREE); ++ ++ if (Display_put(sink->hDisplay, inBuf) < 0) { ++ GST_ELEMENT_ERROR(sink, RESOURCE, FAILED, ++ ("Failed to put display buffer\n"), (NULL)); ++ goto cleanup; ++ } ++ continue; ++ } ++ ++ /* Otherwise, our input buffer originated from up-stream. Retrieve a ++ * display buffer to copy the contents into. ++ */ ++ else { ++ if (Display_get(sink->hDisplay, &hDispBuf) < 0) { ++ GST_ELEMENT_ERROR(sink, RESOURCE, FAILED, ++ ("Failed to get display buffer\n"), (NULL)); ++ goto cleanup; ++ } + } + + /* Retrieve the dimensions of the display buffer */ +@@ -1844,8 +2015,10 @@ static gboolean gst_tidmaivideosink_alloc_display_buffers( + gfxAttrs.dim.height, gfxAttrs.dim.lineLength, gfxAttrs.colorSpace); + } + ++ gfxAttrs.bAttrs.useMask = gst_tidmaibuffer_VIDEOSINK_FREE; + sink->hDispBufTab = gst_tidmaibuftab_new(sink->dAttrs.numBufs, bufSize, + BufferGfx_getBufferAttrs(&gfxAttrs)); ++ gst_tidmaibuftab_set_blocking(sink->hDispBufTab, FALSE); + + return TRUE; + } +-- +1.7.0.4 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0008-Add-support-for-pad-allocated-buffers-in-TIViddec2.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0008-Add-support-for-pad-allocated-buffers-in-TIViddec2.patch new file mode 100644 index 00000000..9ceb30f5 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0008-Add-support-for-pad-allocated-buffers-in-TIViddec2.patch @@ -0,0 +1,302 @@ +From e5a264465c1c77d5fc18eeb51b99c79fc3f28a3e Mon Sep 17 00:00:00 2001 +From: Don Darling <don.osc2@gmail.com> +Date: Tue, 8 Jun 2010 13:48:51 -0500 +Subject: [PATCH 8/8] Add support for pad-allocated buffers in TIViddec2. + +When padAllocOutbufs=TRUE is specified to the TIViddec2 element, it will +attempt to allocate buffers from downstream instead of allocating its own. + +Downstream buffers will only be used if it can be determined that they are +all members of a DMAI BufTab, which means they are CMEM-based, and will work +with the codecs. Currently, the only known downstream element that can provide +these buffers is TIDmaiVideoSink, and it is only supported for DM365. + +There is currently no support for centering small clips in the middle of the +display screen -- this would require additional support in the display driver. +As a result, pad-allocation can currently only be used with clips that are at +least as large as the display, and this feature not enabled by default because +of these strict clip-size requirements. + +On DM365, there are known issues with the MPEG-2 decoder's output buffer size +calculation that cause it not to work with D1 resolutions unless you hard-code +the size. H.264 and MPEG-4 decoders work as expected, and MPEG-2 works as +expected for 720p. +--- + .../ti_build/ticodecplugin/src/gsttividdec2.c | 159 ++++++++++++++++---- + .../ti_build/ticodecplugin/src/gsttividdec2.h | 1 + + 2 files changed, 127 insertions(+), 33 deletions(-) + +diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.c b/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.c +index c39208f..ec3cb05 100644 +--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.c ++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.c +@@ -73,7 +73,8 @@ enum + PROP_FRAMERATE, /* framerate (GstFraction) */ + PROP_DISPLAY_BUFFER, /* displayBuffer (boolean) */ + PROP_GEN_TIMESTAMPS, /* genTimeStamps (boolean) */ +- PROP_RTCODECTHREAD /* rtCodecThread (boolean) */ ++ PROP_RTCODECTHREAD, /* rtCodecThread (boolean) */ ++ PROP_PAD_ALLOC_OUTBUFS /* padAllocOutbufs (boolean) */ + }; + + /* Define sink (input) pad capabilities. Currently, MPEG and H264 are +@@ -170,8 +171,8 @@ static GstClockTime + gst_tividdec2_frame_duration(GstTIViddec2 *viddec2); + static gboolean + gst_tividdec2_resizeBufTab(GstTIViddec2 *viddec2); +-static gboolean +- gst_tividdec2_codec_start (GstTIViddec2 *viddec2); ++static gboolean ++ gst_tividdec2_codec_start (GstTIViddec2 *viddec2, GstBuffer **padBuffer); + static gboolean + gst_tividdec2_codec_stop (GstTIViddec2 *viddec2); + static void +@@ -324,6 +325,11 @@ static void gst_tividdec2_class_init(GstTIViddec2Class *klass) + g_param_spec_boolean("genTimeStamps", "Generate Time Stamps", + "Set timestamps on output buffers", + TRUE, G_PARAM_WRITABLE)); ++ ++ g_object_class_install_property(gobject_class, PROP_PAD_ALLOC_OUTBUFS, ++ g_param_spec_boolean("padAllocOutbufs", "Use pad allocation", ++ "Try to allocate buffers with pad allocation", ++ FALSE, G_PARAM_WRITABLE)); + } + + /****************************************************************************** +@@ -448,6 +454,7 @@ static void gst_tividdec2_init(GstTIViddec2 *viddec2, GstTIViddec2Class *gclass) + + viddec2->numOutputBufs = 0UL; + viddec2->hOutBufTab = NULL; ++ viddec2->padAllocOutbufs = FALSE; + viddec2->circBuf = NULL; + + viddec2->sps_pps_data = NULL; +@@ -548,6 +555,10 @@ static void gst_tividdec2_set_property(GObject *object, guint prop_id, + viddec2->rtCodecThread = g_value_get_boolean(value); + GST_LOG("setting \"RTCodecThread\" to \"%s\"\n", + viddec2->rtCodecThread ? "TRUE" : "FALSE"); ++ case PROP_PAD_ALLOC_OUTBUFS: ++ viddec2->padAllocOutbufs = g_value_get_boolean(value); ++ GST_LOG("setting \"padAllocOutbufs\" to \"%s\"\n", ++ viddec2->padAllocOutbufs ? "TRUE" : "FALSE"); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); +@@ -1079,9 +1090,9 @@ static gboolean gst_tividdec2_init_video(GstTIViddec2 *viddec2) + */ + Rendezvous_meet(viddec2->waitOnDecodeThread); + +- if (viddec2->circBuf == NULL || viddec2->hOutBufTab == NULL) { ++ if (viddec2->circBuf == NULL) { + GST_ELEMENT_ERROR(viddec2, RESOURCE, FAILED, +- ("decode thread failed to create circbuf or display buffer handles\n"), ++ ("decode thread failed to create circbuf handles\n"), + (NULL)); + return FALSE; + } +@@ -1260,11 +1271,13 @@ static gboolean gst_tividdec2_codec_stop (GstTIViddec2 *viddec2) + * gst_tividdec2_codec_start + * Initialize codec engine + *****************************************************************************/ +-static gboolean gst_tividdec2_codec_start (GstTIViddec2 *viddec2) ++static gboolean gst_tividdec2_codec_start (GstTIViddec2 *viddec2, ++ GstBuffer **padBuffer) + { +- VIDDEC2_Params params = Vdec2_Params_DEFAULT; +- VIDDEC2_DynamicParams dynParams = Vdec2_DynamicParams_DEFAULT; +- BufferGfx_Attrs gfxAttrs = BufferGfx_Attrs_DEFAULT; ++ VIDDEC2_Params params = Vdec2_Params_DEFAULT; ++ VIDDEC2_DynamicParams dynParams = Vdec2_DynamicParams_DEFAULT; ++ BufferGfx_Attrs gfxAttrs = BufferGfx_Attrs_DEFAULT; ++ BufTab_Handle codecBufTab = NULL; + Cpu_Device device; + ColorSpace_Type colorSpace; + Int defaultNumBufs; +@@ -1364,30 +1377,77 @@ static gboolean gst_tividdec2_codec_start (GstTIViddec2 *viddec2) + viddec2->numOutputBufs = defaultNumBufs; + } + +- /* Create codec output buffers */ +- GST_LOG("creating output buffer table\n"); +- gfxAttrs.colorSpace = colorSpace; +- gfxAttrs.dim.width = params.maxWidth; +- gfxAttrs.dim.height = params.maxHeight; +- gfxAttrs.dim.lineLength = BufferGfx_calcLineLength( +- gfxAttrs.dim.width, gfxAttrs.colorSpace); ++ /* Try to allocate a buffer from downstream. To do this, we must first ++ * set the framerate to a reasonable default if one hasn't been specified, ++ * and we need to set the source pad caps with the stream information we ++ * have so far. ++ */ ++ gst_tividdec2_frame_duration(viddec2); ++ gst_tividdec2_set_source_caps_base(viddec2, params.maxWidth, ++ params.maxHeight, colorSpace); ++ ++ *padBuffer = NULL; ++ if (viddec2->padAllocOutbufs) { ++ if (gst_pad_alloc_buffer(viddec2->srcpad, 0, ++ Vdec2_getOutBufSize(viddec2->hVd), GST_PAD_CAPS(viddec2->srcpad), ++ padBuffer) != GST_FLOW_OK) { ++ GST_LOG("failed to allocate a downstream buffer\n"); ++ *padBuffer = NULL; ++ } ++ ++ if (*padBuffer && !GST_IS_TIDMAIBUFFERTRANSPORT(*padBuffer)) { ++ GST_LOG("downstream buffer is not a DMAI buffer; disabling use of " ++ "pad-allocated buffers\n"); ++ gst_buffer_unref(*padBuffer); ++ *padBuffer = NULL; ++ } ++ ++ if (*padBuffer) { ++ codecBufTab = Buffer_getBufTab( ++ GST_TIDMAIBUFFERTRANSPORT_DMAIBUF(*padBuffer)); ++ ++ if (!codecBufTab) { ++ GST_LOG("downstream buffer is not a BufTab member; disabling " ++ "use of pad-allocated buffers\n"); ++ gst_buffer_unref(*padBuffer); ++ *padBuffer = NULL; ++ } ++ } ++ } ++ ++ /* If we can't use pad-allocated buffers, allocate our own BufTab for ++ * output buffers to push downstream. ++ */ ++ if (!(*padBuffer)) { ++ ++ GST_LOG("creating output buffer table\n"); ++ gfxAttrs.colorSpace = colorSpace; ++ gfxAttrs.dim.width = params.maxWidth; ++ gfxAttrs.dim.height = params.maxHeight; ++ gfxAttrs.dim.lineLength = BufferGfx_calcLineLength( ++ gfxAttrs.dim.width, gfxAttrs.colorSpace); + +- /* By default, new buffers are marked as in-use by the codec */ +- gfxAttrs.bAttrs.useMask = gst_tidmaibuffer_CODEC_FREE; ++ /* By default, new buffers are marked as in-use by the codec */ ++ gfxAttrs.bAttrs.useMask = gst_tidmaibuffer_CODEC_FREE; + +- viddec2->hOutBufTab = gst_tidmaibuftab_new( +- viddec2->numOutputBufs, Vdec2_getOutBufSize(viddec2->hVd), +- BufferGfx_getBufferAttrs(&gfxAttrs)); ++ viddec2->hOutBufTab = gst_tidmaibuftab_new( ++ viddec2->numOutputBufs, Vdec2_getOutBufSize(viddec2->hVd), ++ BufferGfx_getBufferAttrs(&gfxAttrs)); ++ ++ codecBufTab = GST_TIDMAIBUFTAB_BUFTAB(viddec2->hOutBufTab); ++ } + +- if (viddec2->hOutBufTab == NULL) { ++ /* The value of codecBufTab should now either point to a downstream ++ * BufTab or our own BufTab. ++ */ ++ if (codecBufTab == NULL) { + GST_ELEMENT_ERROR(viddec2, RESOURCE, NO_SPACE_LEFT, +- ("failed to create output buffers\n"), (NULL)); ++ ("no BufTab available for codec output\n"), (NULL)); + return FALSE; + } + +- /* Tell the Vdec module that hOutBufTab will be used for display buffers */ +- Vdec2_setBufTab(viddec2->hVd, +- GST_TIDMAIBUFTAB_BUFTAB(viddec2->hOutBufTab)); ++ /* Tell the Vdec module what BufTab it will be using for its output */ ++ Vdec2_setBufTab(viddec2->hVd, codecBufTab); + + return TRUE; + } +@@ -1403,8 +1463,10 @@ static void* gst_tividdec2_decode_thread(void *arg) + { + GstTIViddec2 *viddec2 = GST_TIVIDDEC2(gst_object_ref(arg)); + GstBuffer *encDataWindow = NULL; ++ GstBuffer *padBuffer = NULL; + Buffer_Attrs bAttrs = Buffer_Attrs_DEFAULT; + gboolean codecFlushed = FALSE; ++ gboolean usePadBufs = FALSE; + void *threadRet = GstTIThreadSuccess; + Buffer_Handle hDummyInputBuf = NULL; + Buffer_Handle hDstBuf; +@@ -1420,7 +1482,8 @@ static void* gst_tividdec2_decode_thread(void *arg) + GST_LOG("init video decode_thread \n"); + + /* Initialize codec engine */ +- ret = gst_tividdec2_codec_start(viddec2); ++ ret = gst_tividdec2_codec_start(viddec2, &padBuffer); ++ usePadBufs = (padBuffer != NULL); + + /* Notify main thread that is ok to continue initialization */ + Rendezvous_meet(viddec2->waitOnDecodeThread); +@@ -1476,7 +1539,34 @@ static void* gst_tividdec2_decode_thread(void *arg) + } + + /* Obtain a free output buffer for the decoded data */ +- if (!(hDstBuf = gst_tidmaibuftab_get_buf(viddec2->hOutBufTab))) { ++ if (usePadBufs) { ++ ++ /* First time through this loop, padBuffer will already be set ++ * to the buffer we got in codec_start. It will be NULL for every ++ * frame after that. ++ */ ++ if (G_LIKELY(!padBuffer)) { ++ if (gst_pad_alloc_buffer(viddec2->srcpad, 0, 0, ++ GST_PAD_CAPS(viddec2->srcpad), &padBuffer) ++ != GST_FLOW_OK) { ++ GST_ELEMENT_ERROR(viddec2, RESOURCE, READ, ++ ("failed to allocate a downstream buffer\n"), (NULL)); ++ padBuffer = NULL; ++ goto thread_exit; ++ } ++ } ++ hDstBuf = GST_TIDMAIBUFFERTRANSPORT_DMAIBUF(padBuffer); ++ gst_buffer_unref(padBuffer); ++ padBuffer = NULL; ++ ++ /* Set the CODEC_FREE flag -- this isn't done automatically when ++ * allocating buffers from downstream. ++ */ ++ Buffer_setUseMask(hDstBuf, Buffer_getUseMask(hDstBuf) | ++ gst_tidmaibuffer_CODEC_FREE); ++ ++ } ++ else if (!(hDstBuf = gst_tidmaibuftab_get_buf(viddec2->hOutBufTab))) { + GST_ELEMENT_ERROR(viddec2, RESOURCE, READ, + ("failed to get a free contiguous buffer from BufTab\n"), + (NULL)); +@@ -1623,12 +1713,15 @@ thread_failure: + thread_exit: + + /* Re-claim any buffers owned by the codec */ +- bufIdx = BufTab_getNumBufs(GST_TIDMAIBUFTAB_BUFTAB(viddec2->hOutBufTab)); ++ if (viddec2->hOutBufTab) { ++ bufIdx = ++ BufTab_getNumBufs(GST_TIDMAIBUFTAB_BUFTAB(viddec2->hOutBufTab)); + +- while (bufIdx-- > 0) { +- Buffer_Handle hBuf = BufTab_getBuf( +- GST_TIDMAIBUFTAB_BUFTAB(viddec2->hOutBufTab), bufIdx); +- Buffer_freeUseMask(hBuf, gst_tidmaibuffer_CODEC_FREE); ++ while (bufIdx-- > 0) { ++ Buffer_Handle hBuf = BufTab_getBuf( ++ GST_TIDMAIBUFTAB_BUFTAB(viddec2->hOutBufTab), bufIdx); ++ Buffer_freeUseMask(hBuf, gst_tidmaibuffer_CODEC_FREE); ++ } + } + + /* Release the last buffer we retrieved from the circular buffer */ +diff --git a/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.h b/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.h +index b16e9c5..6b09d2a 100644 +--- a/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.h ++++ b/gstreamer_ti/ti_build/ticodecplugin/src/gsttividdec2.h +@@ -91,6 +91,7 @@ struct _GstTIViddec2 + UInt32 numOutputBufs; + GstTIDmaiBufTab *hOutBufTab; + GstTICircBuffer *circBuf; ++ gboolean padAllocOutbufs; + + /* Quicktime h264 header */ + GstBuffer *sps_pps_data; +-- +1.7.0.4 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-dmaisink-compilation-fix.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-dmaisink-compilation-fix.patch new file mode 100644 index 00000000..b8525b79 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-dmaisink-compilation-fix.patch @@ -0,0 +1,26 @@ +From 721970f80e6bff0f231625f00301fa37473a2bb3 Mon Sep 17 00:00:00 2001 +From: Brijesh Singh <bksingh@ti.com> +Date: Wed, 7 Jul 2010 19:21:01 -0500 +Subject: [PATCH 9/9] dmaisink compilation fix + +temporary fix - should go in svn trunk +--- + src/gsttidmaivideosink.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/gsttidmaivideosink.c b/src/gsttidmaivideosink.c +index 99ca25d..2fb5aad 100644 +--- a/src/gsttidmaivideosink.c ++++ b/src/gsttidmaivideosink.c +@@ -1817,7 +1817,7 @@ static gboolean gst_tidmaivideosink_alloc_display_buffers( + return FALSE; + } + +- GST_INFO("Allocating %ld display buffers", sink->dAttrs.numBufs); ++ GST_INFO("Allocating %d display buffers", sink->dAttrs.numBufs); + + /* Set the dimensions for the display */ + if (VideoStd_getResolution(sink->dAttrs.videoStd, &gfxAttrs.dim.width, +-- +1.7.0.4 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-update-dm365-cfg-to-work-with-platinum-codecs.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-update-dm365-cfg-to-work-with-platinum-codecs.patch new file mode 100644 index 00000000..0d36bf10 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0009-update-dm365-cfg-to-work-with-platinum-codecs.patch @@ -0,0 +1,26 @@ +From d5601a8beec6144fb39ebdc93778c081028a7fdd Mon Sep 17 00:00:00 2001 +From: Brijesh Singh <bksingh@ti.com> +Date: Tue, 28 Sep 2010 19:35:14 -0500 +Subject: [PATCH] update dm365 cfg to work with platinum codecs + +--- + src/gstticodecplugin_dm365.cfg | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/src/gstticodecplugin_dm365.cfg b/src/gstticodecplugin_dm365.cfg +index d682643..43174b1 100644 +--- a/src/gstticodecplugin_dm365.cfg ++++ b/src/gstticodecplugin_dm365.cfg +@@ -86,6 +86,9 @@ var ADDRSPACE = xdc.useModule('ti.sdo.fc.ires.addrspace.ADDRSPACE'); + + var CMEM = xdc.useModule('ti.sdo.linuxutils.cmem.CMEM'); + ++var MEMTCM = xdc.useModule('ti.sdo.fc.ires.memtcm.MEMTCM'); ++MEMTCM.cmemBlockId = 1; //Since we use _1 in our insmod command. ++ + /* Uncomment these lines if you wish to debug FC and enable FC trace */ + /* + /* +-- +1.7.0.4 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0010-replace-omap3530_dv400-platform-support-with-omap353.patch b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0010-replace-omap3530_dv400-platform-support-with-omap353.patch new file mode 100644 index 00000000..85550e6c --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/0010-replace-omap3530_dv400-platform-support-with-omap353.patch @@ -0,0 +1,119 @@ +From 0f2ef84ad320ec141a7ba6727cf18817ac42e413 Mon Sep 17 00:00:00 2001 +From: Brijesh Singh <bksingh@ti.com> +Date: Mon, 4 Oct 2010 14:11:39 -0500 +Subject: [PATCH] replace omap3530_dv400 platform support with omap3530 + +--- + Makefile.external | 19 +++---------- + src/gstticodecplugin_omap3530_dv400.cfg | 44 ------------------------------- + 2 files changed, 5 insertions(+), 58 deletions(-) + delete mode 100644 src/gstticodecplugin_omap3530_dv400.cfg + +diff --git a/Makefile.external b/Makefile.external +index 6d118d8..2a85108 100644 +--- a/Makefile.external ++++ b/Makefile.external +@@ -8,7 +8,7 @@ + # Copyright (C) 2009 Ridgerun + # + +-.PHONY: default configure dm6446 omap3530 dm355 dm6467 dm365 omapl138 omap3530_dv400 ++.PHONY: default configure dm6446 omap3530 dm355 dm6467 dm365 omapl138 + + DVSDK_PATH=undefined + DMAI_INSTALL_DIR=undefined +@@ -23,7 +23,7 @@ $(error You need to define the environment variable DMAI_INSTALL_DIR) + endif + + default: +- @echo "Please specify the target: dm6446, omap3530, dm355, dm6467, dm6467t, dm365 omapl138 omap3530_dv400" ++ @echo "Please specify the target: dm6446, omap3530, dm355, dm6467, dm6467t, dm365 omapl138" + + export GST_TI_PLATFORM=$(MAKECMDGOALS) + export BIOS_INSTALL_DIR +@@ -87,6 +87,9 @@ ifeq ($(GST_TI_PLATFORM), omap3530) + export MVTOOL_DIR = $(CSTOOL_DIR) + export PLATFORM_XDC = ${XDC_PLATFORM} + export CROSS_COMPILE = ${CSTOOL_PREFIX} ++ export LINK_XDC_ROOT = $(LINK_INSTALL_DIR) ++ export C6ACCEL_INSTALL_DIR ++ export ENABLE_C6ACCEL ="--enable-c6accel" + endif + + ifeq ($(GST_TI_PLATFORM), omapl138) +@@ -101,16 +104,6 @@ ifeq ($(GST_TI_PLATFORM), omapl138) + export ENABLE_C6ACCEL ="--enable-c6accel" + endif + +-ifeq ($(GST_TI_PLATFORM), omap3530_dv400) +- export XDC_TARGET = gnu.targets.arm.GCArmv5T +- export XDC_PLATFORM = ti.platforms.evm3530 +- export MVTOOL_PREFIX = $(CSTOOL_PREFIX) +- export MVTOOL_DIR = $(CSTOOL_DIR) +- export PLATFORM_XDC = ${XDC_PLATFORM} +- export CROSS_COMPILE = ${CSTOOL_PREFIX} +- export LINK_XDC_ROOT = $(LINK_INSTALL_DIR) +-endif +- + CPPFLAGS=-DPlatform_$(GST_TI_PLATFORM) + HOST=arm-none-linux-gnueabi + +@@ -141,5 +134,3 @@ dm365: Makefile + omapl138: Makefile + $(MAKE) -f Makefile + +-omap3530_dv400: Makefile +- $(MAKE) -f Makefile +diff --git a/src/gstticodecplugin_omap3530_dv400.cfg b/src/gstticodecplugin_omap3530_dv400.cfg +deleted file mode 100644 +index 90f4edf..0000000 +--- a/src/gstticodecplugin_omap3530_dv400.cfg ++++ /dev/null +@@ -1,44 +0,0 @@ +-/* +- * Copyright (C) 2008-2010 Texas Instruments Incorporated - http://www.ti.com/ +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU Lesser General Public License as +- * published by the Free Software Foundation version 2.1 of the License. +- * +- * This program is distributed #as is# WITHOUT ANY WARRANTY of any kind, +- * whether express or implied; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * Lesser General Public License for more details. +- * +- */ +- +-/* Load the Codec Engine 'Operating System Abstraction Layer' */ +-var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global'); +- +-var os = xdc.useModule('ti.sdo.ce.osal.linux.Settings'); +-osalGlobal.os = os; +- +-/* Configure CE to use it's DSP Link Linux version */ +-var ipc = xdc.useModule('ti.sdo.ce.ipc.Settings'); +-ipc.commType = ipc.COMM_DSPLINK; +- +-/* +- * ======== Engine Configuration ======== +- */ +-var Engine = xdc.useModule('ti.sdo.ce.Engine'); +-var demoEngine = Engine.createFromServer( +- "codecServer", +- "./bin/cs.x64P", +- "ti.sdo.server.cs" +- ); +- +-var combopath = "" + java.lang.System.getenv("CODEC_SERVER"); +-if (combopath != "" && combopath != "null") { +- demoEngine.server = java.lang.System.getenv("CODEC_SERVER"); +-} +- +-/* Load support for the DMAI module */ +-var DMAI = xdc.loadPackage('ti.sdo.dmai'); +- +-var SCPY = xdc.useModule('ti.sdo.fc.scpy.SCPY'); +-var SDMA = xdc.useModule('ti.sdo.linuxutils.sdma.SDMA'); +-- +1.7.0.4 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm355-evm/gst-ti.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm355-evm/gst-ti.sh new file mode 100644 index 00000000..5467a67b --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm355-evm/gst-ti.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# Disable XDM 0.9 elements +export GST_TI_TIViddec_DISABLE=1 +export GST_TI_TIAuddec_DISABLE=1 +export GST_TI_TIVidenc_DISABLE=1 +export GST_TI_TIImgdec_DISABLE=1 +export GST_TI_TIImgenc_DISABLE=1 + +# Disable XDM 1.x audio decoder +export GST_TI_TIAuddec1_DISABLE=1 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm365-evm/loadmodules.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm365-evm/loadmodules.sh new file mode 100644 index 00000000..c70bee1e --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/dm365-evm/loadmodules.sh @@ -0,0 +1,37 @@ +#!/bin/sh +# +# Default DM365 Memory Map 128 MB +# +# Start Addr Size Description +# ---------------------------------------------------------------- +# 0x00001000 32K ARM926 TCM memory used by platinum codec +# 0x80000000 48 MB Linux +# 0x83000000 12 MB Video driver memory (Linux) +# 0x83C00000 68 MB CMEM +# 0x88000000 BOTTOM ADDRESS +# + +rmmod cmemk 2>/dev/null + +# Pools configuration +modprobe cmemk phys_start=0x83C00000 phys_end=0x88000000 pools=1x16539648,1x4841472,4x1843200,14x1646592,1x282624,1x176128,1x147456,1x69632,1x61440,1x32768,2x20480,1x16384,1x12288,4x8192,69x4096 allowOverlap=1 phys_start_1=0x00001000 phys_end_1=0x00008000 pools_1=1x28672 + +# Decode + Display +#modprobe cmemk phys_start=0x83c00000 phys_end=0x88000000 pools=1x16539648,1x4841472,14x1646592,1x282624,1x176128,1x147456,1x69632,1x61440,1x32768,2x20480,1x12288,1x8192,64x4096 + +# Capture + Encode +#modprobe cmemk phys_start=0x83c00000 phys_end=0x88000000 pools=1x3112960,1x2764800,3x1536000,1x65536,1x61440,1x49152,1x20480,1x16384,2x8192,87x4096 + +# Resizer +#modprobe cmemk phys_start=0x83c00000 phys_end=0x88000000 pools=3x1843200 + +# Non-accel display +#modprobe cmemk phys_start=0x83c00000 phys_end=0x88000000 pools=1x1843200 + +modprobe irqk +modprobe edmak +modprobe dm365mmap + +rm -f /dev/dm365mmap +mknod /dev/dm365mmap c `awk "\\$2==\"dm365mmap\" {print \\$1}" /proc/devices` 0 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstreamer-ti-rc.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstreamer-ti-rc.sh new file mode 100644 index 00000000..35bf7818 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstreamer-ti-rc.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# +# configure kernel modules to run gst-ti plugins elements +# + +load_module() { + echo + echo -n "Running /usr/share/ti/gst/<platform>/loadmodules.sh" + /usr/share/ti/gst/<platform>/loadmodules.sh +} + +case "$1" in + start) + echo -n "Loading kernel modules for gstreamer-ti... " + load_module + echo " done" + ;; + stop) + echo "Nothing to do" + ;; + restart) + echo "Nothing to do" + ;; + *) + echo "$0 <start/stop/restart>" + ;; +esac + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstti-init.service b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstti-init.service new file mode 100644 index 00000000..cccf5343 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/gstti-init.service @@ -0,0 +1,10 @@ +[Unit] +Description=TI Gstreamer plugins init +ConditionKernelCommandLine=mem=MEMARGS + +[Service] +ExecStart=/usr/share/ti/gst/<platform>/loadmodules.sh +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omap3/loadmodules.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omap3/loadmodules.sh new file mode 100644 index 00000000..eb758834 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omap3/loadmodules.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# +# CMEM Allocation +# 1x5250000 Circular buffer +# 6x829440,1x691200 Video buffers (max D1 PAL) +# 1x345600 Underlying software components (codecs, etc.) +# 1x1 Dummy buffer used during final flush + +rmmod cmemk 2>/dev/null + +modprobe cmemk allowOverlap=1 phys_start=0x86300000 phys_end=0x87300000 \ + pools=1x5250000,6x829440,1x345600,1x691200,1x1 + +# insert DSP/BIOS Link driver +modprobe dsplinkk + +# insert Local Power Manager driver +modprobe lpm_omap3530 + +# insert SDMA driver +modprobe sdmak + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl137/loadmodules.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl137/loadmodules.sh new file mode 100644 index 00000000..d0311881 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl137/loadmodules.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# +# configure kernel modules for TI DSP based gstreamer plugin +# + +# insert cmemk, tell it to occupy physical 34MB-64MB. +# +modprobe cmemk phys_start=0xC2200000 phys_end=0xC3200000 \ + pools=1x5250000,3x1048576,3x829440,1x256000,4x131072 + +modprobe dsplinkk + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/da850-omapl138-evm/loadmodules.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/da850-omapl138-evm/loadmodules.sh new file mode 100644 index 00000000..f4017251 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/da850-omapl138-evm/loadmodules.sh @@ -0,0 +1,16 @@ +#!/bin/sh +# +# configure kernel modules for TI DSP based gstreamer plugin +# +rmmod cmemk 2>/dev/null +rmmod dsplink 2>/dev/null + +modprobe cmemk phys_start=0xC2200000 phys_end=0xC3200000 \ + pools=1x5250000,3x1048576,3x829440,1x256000,4x131072 \ + allowOverlap=1 + +modprobe dsplinkk + +rm -f /dev/dsplink +mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/loadmodules.sh b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/loadmodules.sh new file mode 100644 index 00000000..95cfc3da --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/omapl138/loadmodules.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# +# configure kernel modules for TI DSP based gstreamer plugin +# + +rmmod cmemk 2>/dev/null + +modprobe cmemk phys_start=0xC2200000 phys_end=0xC3200000 \ + pools=1x5250000,3x1048576,3x829440,1x256000,4x131072 + +modprobe dsplinkk + +rm -f /dev/dsplink +mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0 + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti/r962-remove-include-videodev.diff b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/r962-remove-include-videodev.diff new file mode 100644 index 00000000..cb106fc4 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti/r962-remove-include-videodev.diff @@ -0,0 +1,22 @@ +diff -ur ticodecplugin_orig/src/gstticapturesrc.c ticodecplugin/src/gstticapturesrc.c +--- ticodecplugin_orig/src/gstticapturesrc.c 2011-08-09 17:03:39.201308305 +0200 ++++ ticodecplugin/src/gstticapturesrc.c 2011-08-09 17:02:35.177308274 +0200 +@@ -25,7 +25,6 @@ + #include <gst/gst.h> + #include <string.h> + #include <gst/gstmarshal.h> +-#include <linux/videodev.h> + #include <linux/videodev2.h> + #include <sys/ioctl.h> + +diff -ur ticodecplugin_orig/src/gsttidisplaysink2.c ticodecplugin/src/gsttidisplaysink2.c +--- ticodecplugin_orig/src/gsttidisplaysink2.c 2011-08-09 17:03:53.329308312 +0200 ++++ ticodecplugin/src/gsttidisplaysink2.c 2011-08-09 17:03:11.337308292 +0200 +@@ -28,7 +28,6 @@ + #include <gst/video/video.h> + #include <string.h> + #include <gst/gstmarshal.h> +-#include <linux/videodev.h> + #include <linux/videodev2.h> + #include <sys/ioctl.h> + diff --git a/extras/recipes-ti/gstreamer-ti/gstreamer-ti_svn.bb b/extras/recipes-ti/gstreamer-ti/gstreamer-ti_svn.bb new file mode 100644 index 00000000..3d260ed5 --- /dev/null +++ b/extras/recipes-ti/gstreamer-ti/gstreamer-ti_svn.bb @@ -0,0 +1,26 @@ +require gstreamer-ti.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=c8a292be1d17ba07ecbf7b49049cbf22" + +PV = "svnr${SRCREV}" + +S = "${WORKDIR}/gstreamer_ti/ti_build/ticodecplugin" + +SRCREV = "962" + +# apply patches from tracker 1208 to get zero copy support. +# https://gstreamer.ti.com/gf/project/gstreamer_ti/tracker/?action=TrackerItemEdit&tracker_item_id=1208&start=175 + +SRC_URI = "svn://gforge.ti.com/svn/gstreamer_ti/trunk;module=gstreamer_ti;proto=https;user=anonymous;pswd='' \ + file://gstreamer-ti-rc.sh \ + file://r962-remove-include-videodev.diff \ + file://gstti-init.service \ +" + +# use local loadmodules.sh for these platform +# TODO: must be removed onces these loadmodules goes in gstreamer.ti.com +SRC_URI_append_dm365 = " file://loadmodules.sh" +SRC_URI_append_omapl137 = " file://loadmodules.sh" +SRC_URI_append_omapl138 = " file://loadmodules.sh " +SRC_URI_append_omap3 = " file://loadmodules.sh " + diff --git a/extras/recipes-ti/hdvpss/ti-hdvpss.inc b/extras/recipes-ti/hdvpss/ti-hdvpss.inc new file mode 100644 index 00000000..3c99b792 --- /dev/null +++ b/extras/recipes-ti/hdvpss/ti-hdvpss.inc @@ -0,0 +1,20 @@ +DESCRIPTION = "TI HDVPSS" +SECTION = "devel" +LICENSE = "TI" + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc + +S = "${WORKDIR}/REL.HDVPSS_${PV}" + +SRC_URI = "http://install.source.dir.local/REL.HDVPSS.${PV}.zip" + +do_compile() { + : +} + +do_install() { + install -d ${D}${HDVPSS_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${HDVPSS_INSTALL_DIR_RECIPE} +} + diff --git a/extras/recipes-ti/hdvpss/ti-hdvpss_01.00.01.27.bb b/extras/recipes-ti/hdvpss/ti-hdvpss_01.00.01.27.bb new file mode 100644 index 00000000..e3b1c56f --- /dev/null +++ b/extras/recipes-ti/hdvpss/ti-hdvpss_01.00.01.27.bb @@ -0,0 +1,6 @@ +require ti-hdvpss.inc + +SRC_URI[md5sum] = "6db908bef3b933dc8cea666564d5d4d8" +SRC_URI[sha256sum] = "2caa9c859cfe348197e860f07d174a8ab7048d38d6d3a12ec576802122c9e91e" + + diff --git a/extras/recipes-ti/ipc/ti-ipc.inc b/extras/recipes-ti/ipc/ti-ipc.inc new file mode 100644 index 00000000..8d1b8020 --- /dev/null +++ b/extras/recipes-ti/ipc/ti-ipc.inc @@ -0,0 +1,36 @@ +DESCRIPTION = "TI Inter Process Ccommunication (IPC) Mechanisms (for Uni- and Multi- Processor Configurations)" +HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ipc/index.html" + +SECTION = "devel" +LICENSE = "BSD" + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc +require ../includes/ti-eula-unpack.inc + +S = "${WORKDIR}/ipc_${PV}" + +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ipc/${PV}/exports/ipc_setuplinux_${PV}.bin;name=ipcbin" + +SRC_URI =+ "file://ipc.pc" + +DEPENDS = "ti-sysbios ti-cgt6x ti-xdctools" + +BINFILE="ipc_setuplinux_${PV}.bin" +TI_BIN_UNPK_CMDS="Y: q:workdir:Y" + +do_configure() { + sed -i -e s:@VERSION@:${PV}:g ${WORKDIR}/ipc.pc + + cp ${WORKDIR}/ipc.pc ${S} +} + +do_install() { + install -d ${D}${IPC_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${IPC_INSTALL_DIR_RECIPE} + + install -d ${D}/${libdir}/pkgconfig + install ${S}/ipc.pc ${D}/${libdir}/pkgconfig/ +} + +FILES_ti-ipc-dev = "${libdir}/*" diff --git a/extras/recipes-ti/ipc/ti-ipc/ipc.pc b/extras/recipes-ti/ipc/ti-ipc/ipc.pc new file mode 100644 index 00000000..1a8c52df --- /dev/null +++ b/extras/recipes-ti/ipc/ti-ipc/ipc.pc @@ -0,0 +1,8 @@ +prefix=/../../ipc_@VERSION@ +includedir=${prefix}/ti/ipc + +Name: TI IPC +Description: TI ARM-DSP IPC (Inter Processor Communication) +Version: @VERSION@ +Requires: +Cflags: -I${includedir} diff --git a/extras/recipes-ti/ipc/ti-ipc_1.24.00.16.bb b/extras/recipes-ti/ipc/ti-ipc_1.24.00.16.bb new file mode 100644 index 00000000..e7ae7ef1 --- /dev/null +++ b/extras/recipes-ti/ipc/ti-ipc_1.24.00.16.bb @@ -0,0 +1,8 @@ +require ti-ipc.inc + +PV = "1_24_00_16" + +LIC_FILES_CHKSUM = "file://ipc_${PV}_manifest.html;md5=573f5a5c0448d28bf8db35f438244d7f" + +SRC_URI[ipcbin.md5sum] = "d2f7cc82310d555ca039dcd353bd94c5" +SRC_URI[ipcbin.sha256sum] = "96df7835e920c7dabcd63d30ec8bc2aea7cd0c6197c9fb9ca0f8a9b681aa5396" diff --git a/extras/recipes-ti/linuxutils/ti-linuxutils.inc b/extras/recipes-ti/linuxutils/ti-linuxutils.inc new file mode 100644 index 00000000..dba485b8 --- /dev/null +++ b/extras/recipes-ti/linuxutils/ti-linuxutils.inc @@ -0,0 +1,93 @@ +DESCRIPTION = "MFP Linux utils for TI ARM/DSP processors" +SECTION = "devel" +LICENSE = "GPLv2 & BSD" + +BASE_SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/linuxutils/${PV}/exports" +SRC_URI = "${BASE_SRC_URI}/linuxutils_${PV}.tar.gz " + +LIC_FILES_CHKSUM = "file://gpl_2.0.txt;md5=1298794fc2eed3df92a89f3c9d317440" + +S = "${WORKDIR}/linuxutils_${PV}" + +require recipes-ti/includes/ti-paths.inc +require recipes-ti/includes/ti-staging.inc + +PR = "${MACHINE_KERNEL_PR}" + +#This is a kernel module, don't set PR directly +MACHINE_KERNEL_PR_append = "e" + +inherit module + +do_compile() { + do_make_scripts + unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS + + case "${SOC_FAMILY}" in + "dm365") + modules="cmem edma irq";; + "omap3") + modules="cmem sdma";; + "dm355") + modules="cmem edma irq";; + *) + modules="cmem" + esac + + for module in $modules ; do + cd ${S}/packages/ti/sdo/linuxutils/$module + make \ + LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \ + MVTOOL_PREFIX="${TARGET_PREFIX}" \ + UCTOOL_PREFIX="${TARGET_PREFIX}" \ + clean debug release + done +} + +do_install () { + install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp + # Install CMEM + for module in $(find ${S}/packages/ti/sdo/linuxutils/ -name "*.ko") ; do + install -m 0755 $module ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp + done + cd ${S}/packages/ti/sdo/linuxutils/cmem/apps + make \ + LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \ + MVTOOL_PREFIX="${TARGET_PREFIX}" \ + UCTOOL_PREFIX="${TARGET_PREFIX}" \ + EXEC_DIR="${D}${installdir}/ti-linuxutils-app/cmem-app" \ + install + # Install EDMA + if [ "${SOC_FAMILY}" = "dm365" ] ; then + cd ${S}/packages/ti/sdo/linuxutils/edma/apps + make \ + LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \ + MVTOOL_PREFIX="${TARGET_PREFIX}" \ + UCTOOL_PREFIX="${TARGET_PREFIX}" \ + EXEC_DIR="${D}${installdir}/ti-linuxutils-app/edma-app" \ + install + fi + + # stage tree - other packages may need this + install -d ${D}${LINUXUTILS_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${LINUXUTILS_INSTALL_DIR_RECIPE} +} + + + + +PACKAGES =+ " ti-cmem-module \ + ti-sdma-module \ + ti-edma-module \ + ti-irq-module \ + ti-linuxutils-app" + +FILES_ti-cmem-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmem*.ko" +FILES_ti-sdma-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/sdma*.ko" +FILES_ti-edma-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/edma*.ko" +FILES_ti-irq-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/irq*.ko" + +FILES_ti-linuxutils-app = "${installdir}/ti-linuxutils-app/*/*" + +INSANE_SKIP_ti-linuxutils-app = "True" +INHIBIT_PACKAGE_STRIP = "1" diff --git a/extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix-2.patch b/extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix-2.patch new file mode 100644 index 00000000..1438003c --- /dev/null +++ b/extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix-2.patch @@ -0,0 +1,22 @@ +From: Koen Kooi <k-kooi@ti.com> +Subject: linuxutils: fix build with 2.6.37rcX + +--- + +--- /tmp/sdmak.c 2010-12-05 18:43:55.000000000 +0100 ++++ linuxutils_2_25_05_11/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.c 2010-12-05 18:48:31.000000000 +0100 +@@ -208,9 +208,12 @@ + } + + up_read(¤t->mm->mmap_sem); +- ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) ++ sema_init(&(channels[channel].mutex),1); ++#else + init_MUTEX_LOCKED(&(channels[channel].mutex)); +- channels[channel].owner = filp; ++#endif ++ channels[channel].owner = filp; + + if (copy_to_user(argp, &channel, sizeof(channel))) { + return -EFAULT; diff --git a/extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix.patch b/extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix.patch new file mode 100644 index 00000000..29b0a444 --- /dev/null +++ b/extras/recipes-ti/linuxutils/ti-linuxutils/linuxutils-BKL-fix.patch @@ -0,0 +1,73 @@ +From: Koen Kooi <k-kooi@ti.com> +Subject: linuxutils: fix build with 2.6.37rcX + +--- + +--- /tmp/cmemk.c 2010-12-05 18:41:00.000000000 +0100 ++++ linuxutils_2_25_05_11/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.c 2010-12-05 18:43:24.000000000 +0100 +@@ -31,6 +31,7 @@ + #include <linux/seq_file.h> + #include <linux/vmalloc.h> + #include <linux/sched.h> ++#include <linux/slab.h> + #include <asm/cacheflush.h> + #include <asm/uaccess.h> + #include <asm/pgtable.h> +@@ -204,7 +205,11 @@ + "\n\t\t fall back to a heap-based allocation attempt"); + module_param(useHeapIfPoolUnavailable, int, S_IRUGO); + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) ++static DEFINE_SEMAPHORE(cmem_mutex); ++#else + static DECLARE_MUTEX(cmem_mutex); ++#endif + + /* Describes a pool buffer */ + typedef struct pool_buffer { +@@ -243,8 +248,12 @@ + + static struct file_operations cmem_fxns = { + owner: THIS_MODULE, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) ++ unlocked_ioctl: ioctl, ++#else + ioctl: ioctl, +- mmap: mmap, ++#endif ++ mmap: mmap, + open: open, + release: release + }; +--- /tmp/sdmak.c 2010-12-05 18:43:55.000000000 +0100 ++++ linuxutils_2_25_05_11/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.c 2010-12-05 18:48:31.000000000 +0100 +@@ -208,9 +208,12 @@ + } + + up_read(¤t->mm->mmap_sem); +- ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) ++ sema_init(&(channels[channel].mutex),1); ++#else + init_MUTEX_LOCKED(&(channels[channel].mutex)); +- channels[channel].owner = filp; ++#endif ++ channels[channel].owner = filp; + + if (copy_to_user(argp, &channel, sizeof(channel))) { + return -EFAULT; +@@ -286,8 +289,12 @@ + } + + static struct file_operations fops = { +- .ioctl = dma_ioctl, +- .release = dma_release, ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) ++ .unlocked_ioctl = dma_ioctl, ++#else ++ .ioctl = dma_ioctl, ++#endif ++ .release = dma_release, + .owner = THIS_MODULE + }; + diff --git a/extras/recipes-ti/linuxutils/ti-linuxutils_2.26.01.02.bb b/extras/recipes-ti/linuxutils/ti-linuxutils_2.26.01.02.bb new file mode 100644 index 00000000..2a67e6a4 --- /dev/null +++ b/extras/recipes-ti/linuxutils/ti-linuxutils_2.26.01.02.bb @@ -0,0 +1,10 @@ +require ti-linuxutils.inc + +SRC_URI += "file://linuxutils-BKL-fix-2.patch" + +PE = "1" +PV = "2_26_01_02" + +SRC_URI[md5sum] = "70b4918bc35c1bcfef34d6ba3fbce0c8" +SRC_URI[sha256sum] = "51266dd928f8d629cd417c869789a6c0d596612120f165619119cbaadfd66ee2" + diff --git a/extras/recipes-ti/local-power-manager/ti-local-power-manager.inc b/extras/recipes-ti/local-power-manager/ti-local-power-manager.inc new file mode 100644 index 00000000..9155c761 --- /dev/null +++ b/extras/recipes-ti/local-power-manager/ti-local-power-manager.inc @@ -0,0 +1,133 @@ +DESCRIPTION = "TI Local Power Manager (LPM)" +HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/lpm" +SECTION = "devel" +LICENSE = "GPLv2" + +LIC_FILES_CHKSUM = "file://gpl_2.0.txt;md5=ebb5c50ab7cab4baeffba14977030c07" + +# TODO : Hardcoded path to evm3530 - need to fix when adding omap24xx/dm6446 (other lpm targets) + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc + +PROVIDES = "ti-lpm-module" +PROVIDES += "ti-lpm-utils" + +# This package builds a kernel module, use kernel PR as base and append a local version +PR = "${MACHINE_KERNEL_PR}" +PR_append = "e" + +S = "${WORKDIR}/local_power_manager_linux_${PV}" + +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/lpm/${PV}/exports/local_power_manager_linux_${PV}.tar.gz;name=lpmtarball" + +DEPENDS = "ti-dsplink ti-xdctools" +DEPENDS += "virtual/kernel" + +# SOC_FAMILY configuration + +LPMDSPPOWERSOC_omap3 = "omap3530" +LPMDSPPOWERSOC_dm6446 = "dm6446" +LPMDSPPOWERSOC ?= "UNDEFINED_LPMDSPPOWERSOC" + +XDC_PLATFORM_dm6446 = "ti.platforms.evmDM6446" +XDC_PLATFORM_omap3 = "ti.platforms.evm3530" +XDC_PLATFORM ?= "UNDEFINED_XDC_PLATFORM" + +do_configure () { + + # Generate a config.bld for XDC + + cat > ${S}/config.bld <<EOF + +/* Generated by ti-local-power-manager.inc OE recipe */ + +var Build = xdc.useModule('xdc.bld.BuildEnvironment'); + +var GCArmv5T = xdc.useModule('gnu.targets.arm.GCArmv5T'); +GCArmv5T.LONGNAME = "${TARGET_PREFIX}gcc"; +GCArmv5T.rootDir = "${TOOLCHAIN_PATH}"; +GCArmv5T.ccOpts.prefix += " -Wall -fno-strict-aliasing "; +GCArmv5T.lnkOpts.suffix = GCArmv5T.lnkOpts.suffix.replace("-lstdc++", ""); +GCArmv5T.lnkOpts.suffix += " -lpthread "; +GCArmv5T.platform = null; +GCArmv5T.platforms = [ + "${XDC_PLATFORM}" +]; + +/* remove profiles we don't use */ +delete GCArmv5T.profiles["coverage"]; +delete GCArmv5T.profiles["profile"]; + +Build.targets.\$add(GCArmv5T); +EOF + +} + +do_prepsources () { + + # Prepare the tree for rebuiling - generate makefiles and clean + XDCPATH=${S} ${XDC_INSTALL_DIR}/xdc .make -PR . + XDCPATH=${S} ${XDC_INSTALL_DIR}/xdc clean -PR . +} + +addtask prepsources after do_configure before do_compile + +do_compile () { + + # Build the LPM kernel module + unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS + cd ${S}/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm + make \ + DSPLINK_REPO="${LINK_INSTALL_DIR}" \ + LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \ + MVTOOL_PREFIX="${TARGET_PREFIX}" \ + clean default + + # Build the user space library + # TODO + + # Build the utilities (lpmON/OFF) + cd ${S} + XDCPATH=${S} ${XDC_INSTALL_DIR}/xdc -PR . +} + +KERNEL_VERSION = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-abiversion')}" + +do_install () { + + # Install the kernel module + install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp + install -m 0755 ${S}/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp + + # Install the Utilities + install -d ${D}/${installdir}/ti-lpm-utils + install -m 0755 ${S}/packages/ti/bios/power/utils/bin/$(echo ${XDC_PLATFORM} | tr . _)/linux/release/* ${D}/${installdir}/ti-lpm-utils + + # Install/Stage the Source Tree + install -d ${D}${LPM_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${LPM_INSTALL_DIR_RECIPE} +} + +PACKAGE_ARCH = "${MACHINE_ARCH}" +PACKAGES += "ti-lpm-module" +FILES_ti-lpm-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*lpm*ko" +RDEPENDS_ti-lpm-module += "ti-dsplink-module" +RDEPENDS_ti-lpm-module += "update-modules" + +pkg_postinst_ti-lpm-module_append () { + if [ -n "$D" ]; then + exit 1 + fi + depmod -a + update-modules || true +} + +pkg_postrm_ti-lpm-module_append () { + update-modules || true +} + +PACKAGES += "ti-lpm-utils" +RDEPENDS_ti-lpm-utils += "ti-lpm-module" +FILES_ti-lpm-utils = "${installdir}/ti-lpm-utils/*" +INSANE_SKIP_ti-lpm-utils = "1" diff --git a/extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-1_24_01-replace-define-OPT.patch b/extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-1_24_01-replace-define-OPT.patch new file mode 100644 index 00000000..120792b8 --- /dev/null +++ b/extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-1_24_01-replace-define-OPT.patch @@ -0,0 +1,24 @@ +diff -uNr local_power_manager_linux_1_24_01_orig/packages/ti/bios/power/modules/dm6446/lpm/Makefile local_power_manager_linux_1_24_01/packages/ti/bios/power/modules/dm6446/lpm/Makefile +--- local_power_manager_linux_1_24_01_orig/packages/ti/bios/power/modules/dm6446/lpm/Makefile 2009-07-22 23:10:04.000000000 -0500 ++++ local_power_manager_linux_1_24_01/packages/ti/bios/power/modules/dm6446/lpm/Makefile 2010-04-16 15:26:14.000000000 -0500 +@@ -54,7 +54,7 @@ + endif + + MAKE_OPTS = ARCH=arm CROSS_COMPILE=$(MVTOOL_PREFIX) +-CFLAGS = -DUSE_UDEV -DOS_LINUX -DLINUX_KERNEL \ ++CFLAGS = -DUSE_UDEV -DOS_LINUX -DLINUX_KERNEL -DOPT="" \ + $(LINK_DEFS) $(LINK_INCS) $(LINK_INCS_INTERNAL) + + # Invoke the kernel build system +diff -uNr local_power_manager_linux_1_24_01_orig/packages/ti/bios/power/modules/omap3530/lpm/Makefile local_power_manager_linux_1_24_01/packages/ti/bios/power/modules/omap3530/lpm/Makefile +--- local_power_manager_linux_1_24_01_orig/packages/ti/bios/power/modules/omap3530/lpm/Makefile 2009-07-22 23:10:05.000000000 -0500 ++++ local_power_manager_linux_1_24_01/packages/ti/bios/power/modules/omap3530/lpm/Makefile 2010-04-16 15:26:38.000000000 -0500 +@@ -54,7 +54,7 @@ + endif + + MAKE_OPTS = ARCH=arm CROSS_COMPILE=$(MVTOOL_PREFIX) +-CFLAGS = -DUSE_UDEV -DOS_LINUX -DLINUX_KERNEL \ ++CFLAGS = -DUSE_UDEV -DOS_LINUX -DLINUX_KERNEL -DOPT="" \ + $(LINK_DEFS) $(LINK_INCS) $(LINK_INCS_INTERNAL) + + # Invoke the kernel build system diff --git a/extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-BKL-fix.patch b/extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-BKL-fix.patch new file mode 100644 index 00000000..4b5a537a --- /dev/null +++ b/extras/recipes-ti/local-power-manager/ti-local-power-manager/lpm-BKL-fix.patch @@ -0,0 +1,72 @@ +From b7e83000f316f5f109b9237fde4d1c576534aa1a Mon Sep 17 00:00:00 2001 +From: Koen Kooi <koen@dominion.thruhere.net> +Date: Tue, 4 Jan 2011 14:21:02 +0100 +Subject: [PATCH] Fix build with 2.6.37rcX + +Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> +--- + .../bios/power/modules/omap3530/lpm/lpm_driver.c | 12 +++++++++--- + 1 files changed, 9 insertions(+), 3 deletions(-) + +diff --git a/packages/ti/bios/power/modules/omap3530/lpm/lpm_driver.c b/packages/ti/bios/power/modules/omap3530/lpm/lpm_driver.c +index fa22ea3..4663fc9 100644 +--- a/packages/ti/bios/power/modules/omap3530/lpm/lpm_driver.c ++++ b/packages/ti/bios/power/modules/omap3530/lpm/lpm_driver.c +@@ -40,6 +40,7 @@ + #include <asm/semaphore.h> + #endif + #include <linux/io.h> ++#include <linux/slab.h> + + #include "lpm_driver.h" + #include "lpm_dev.h" +@@ -95,7 +96,7 @@ static int enablevicp = -1; + module_param(enablevicp, int, S_IRUGO); + + /* forward declaration of system calls (used by Linux driver) */ +-static int lpm_ioctl (struct inode *inode, struct file *filp, ++static long lpm_ioctl (struct file *filp, + unsigned int cmd, unsigned long args); + static int lpm_open (struct inode *inode, struct file *filp); + static int lpm_release (struct inode *inode, struct file *filp); +@@ -111,7 +112,7 @@ static void lpm_os_trace (char *fmt, ...); + + static struct file_operations lpm_fops = { + .owner = THIS_MODULE, +- .ioctl = lpm_ioctl, ++ .unlocked_ioctl = lpm_ioctl, + .open = lpm_open, + .release = lpm_release, + }; +@@ -244,7 +245,11 @@ static int __init lpm_init(void) + lpm->inst[i].major = MAJOR(lpm->first); + lpm->inst[i].minor = MINOR(lpm->first) + i; + INIT_LIST_HEAD(&lpm->inst[i].clients); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36) + init_MUTEX(&lpm->inst[i].sem); ++#else ++ sema_init(&lpm->inst[i].sem,1); ++#endif + init_completion(&lpm->inst[i].event); + lpm_devAttrs.os_instance = (void *)&lpm->inst[i]; + LPM_init(i, &lpm->inst[i].lpm, &lpm_devAttrs); +@@ -320,7 +325,7 @@ fail_02: + /* + * ======== lpm_ioctl ======== + */ +-static int lpm_ioctl(struct inode *inode, struct file *filp, ++static long lpm_ioctl(struct file *filp, + unsigned int cmd, unsigned long args) + { + struct LPM_Dev *dev; +@@ -328,6 +333,7 @@ static int lpm_ioctl(struct inode *inode, struct file *filp, + LPM_Client *client; + LPM_Status lpmStat = LPM_SOK; + int stat = 0; ++ struct inode *inode = filp->f_dentry->d_inode; + + TRACE(KERN_ALERT "--> lpm_ioctl, cmd: 0x%X\n", cmd); + +-- +1.6.6.1 + diff --git a/extras/recipes-ti/local-power-manager/ti-local-power-manager_1.24.02.09.bb b/extras/recipes-ti/local-power-manager/ti-local-power-manager_1.24.02.09.bb new file mode 100644 index 00000000..759561f3 --- /dev/null +++ b/extras/recipes-ti/local-power-manager/ti-local-power-manager_1.24.02.09.bb @@ -0,0 +1,10 @@ +require ti-local-power-manager.inc + +PV = "1_24_02_09" +PE = "1" + +SRC_URI += "file://lpm-BKL-fix.patch" + +SRC_URI[lpmtarball.md5sum] = "3d05453df26dfc811de04839d74c2f2b" +SRC_URI[lpmtarball.sha256sum] = "7335959a6217df17289f81839e6c6948f31cc0797ebc5389edef7190ed3ea589" + diff --git a/extras/recipes-ti/msp430/ti-msp430-chronos_1.05.00.00.bb b/extras/recipes-ti/msp430/ti-msp430-chronos_1.05.00.00.bb new file mode 100644 index 00000000..0a48b177 --- /dev/null +++ b/extras/recipes-ti/msp430/ti-msp430-chronos_1.05.00.00.bb @@ -0,0 +1,55 @@ +DESCRIPTION = "eZ430 Chronos Tools - MSP430 Development Kit/Watch" +HOMEPAGE = "http://processors.wiki.ti.com/index.php/EZ430-Chronos" +LICENSE = "TI-BSD" +# We can't use the actualy source file, since it has space in its name :( +LIC_FILES_CHKSUM = "file://eZ430-Chronos_CC_1_1.tcl;md5=59ba6ee0a26650ec660a4e65a9462806" + +SECTION = "multimedia" + +inherit allarch + +PV = "1_05_00_00" + +SRC_URI = "http://focus.ti.com/lit/sw/slac388/slac388.zip;name=slac388zip" + +SRC_URI[slac388zip.md5sum] = "22d4104a07af584222828fb377793796" +SRC_URI[slac388zip.sha256sum] = "1c9cd1e36015e8db3b36c98be41907628144b76002b3f76b27fd310f4bd35ad7" + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc +require ../includes/ti-eula-unpack.inc + +S = "${WORKDIR}/ti/eZ430-Chronos" + +BINFILE="Chronos-Setup" +TI_BIN_UNPK_CMDS="Y:workdir:" + +do_unpack_append() { + os.system('mv "Texas Instruments" ti') +} + +do_configure() { + cp Control\ Center/Chronos\ Control\ Center/eZ430-Chronos_CC_1_1.tcl ${S} +} + +do_compile() { + echo "Do Nothing for Now" +} + +do_install() { + + install -d ${D}/${installdir}/ti-msp430-chronos-apps + cp -pPrf "${S}"/"Control Center"/* ${D}/${installdir}/ti-msp430-chronos-apps + + # Remove dos formatting + dos2unix "${D}/${installdir}/ti-msp430-chronos-apps/Chronos Data Logger"/* + dos2unix "${D}/${installdir}/ti-msp430-chronos-apps/Chronos Control Center"/* + + # Should probably also remove hardcoded script reference to tcl8.5 +} + +PACKAGES += "ti-msp430-chronos-apps" +FILES_ti-msp430-chronos-apps = "${installdir}/ti-msp430-chronos-apps/*" + +RDEPENDS_ti-msp430-chronos-apps += " tcl tk xdotool" +RRECOMMENDS_ti-msp430-chronos-apps = "kernel-module-cdc-acm" diff --git a/extras/recipes-ti/syslink/ti-syslink.inc b/extras/recipes-ti/syslink/ti-syslink.inc new file mode 100644 index 00000000..04c59c1f --- /dev/null +++ b/extras/recipes-ti/syslink/ti-syslink.inc @@ -0,0 +1,241 @@ +DESCRIPTION = "SYSLINK Inter-Processor Communications (IPC) for TI ARM/DSP processors" +HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/syslink/index.html" +SECTION = "devel" +LICENSE = "BSD" + +LIC_FILES_CHKSUM = "file://docs/bsd.pdf;md5=9f2edd962cd129f8c24e9ef1bd641029" + +# TODO :: multi-machine, add m3 build as well? +# TODO :: proper staging? +# TODO :: kernel module examples? +# TODO :: smarter handling of config.bld +# TODO :: review XDC parallel make - why not happening automatically? +# TODO :: smarter suffix management + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc + +PROVIDES = "ti-syslink-module" +PROVIDES += "ti-syslink-examples" + +# This package builds a kernel module, use kernel PR as base and append a local version +PR = "${MACHINE_KERNEL_PR}" +PR_append = "a" +PVExtra = "" + +inherit module pkgconfig + +S = "${WORKDIR}/syslink_${PV}${PVExtra}" + +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/syslink/${PV}${PVExtra}/exports/syslink_${PV}${PVExtra}.tar.gz;name=syslinktarball \ + file://syslink.pc \ + " + +DEPENDS = "ti-sysbios ti-xdctools ti-cgt6x ti-ipc ti-cgt470" +DEPENDS += "virtual/kernel" + +#common frameq gateMP heapBufMP heapMemMP knlNotify listMP messageQ notify ringIO ringIO_gpp sharedRegion slaveLoader tilerDaemon +SYSLINKHLOSSAMPLES = "knlnotify slaveLoader frameq notify" +#SYSLINKRTOSSAMPLES = "frameq gateMP heapBufMP heapMemMP listMP messageQ notify ringIO ringIO_gpp sharedRegion" + +# SOC_FAMILY configuration + +SYSLINKPLATFORM_omap3 = "OMAP3530" +SYSLINKPLATFORM_omapl137 = "OMAPL1XX" +SYSLINKPLATFORM_omapl138 = "OMAPL1XX" +SYSLINKPLATFORM_ti816x = "TI81XX" +SYSLINKPLATFORM_ti814x = "TI81XX" +SYSLINKPLATFORM ?= "<UNDEFINED_SYSLINKPLATFORM>" + +SYSLINKVARIANT_omap3 = "OMAP3530" +SYSLINKVARIANT_omapl137 = "OMAPL1XX" +SYSLINKVARIANT_omapl138 = "OMAPL1XX" +SYSLINKVARIANT_ti816x = "TI816X" +SYSLINKVARIANT_ti814x = "TI814X" +SYSLINKVARIANT ?= "<UNDEFINED_SYSLINKVARIANT>" + +# COFF/ELF config - omap3 can be coff/elf, omapl only coff, ti816x and ti814x only elf + +# this really needs to be a list... in the case of ELF/COFF (and this could use DSPSUFFIX?) +SYSLINKSUFFIX_omap3 = "x64P" +SYSLINKSUFFIX_omapl137 = "x674" +SYSLINKSUFFIX_omapl138 = "x674" +SYSLINKSUFFIX_ti816x = "xe674" +SYSLINKSUFFIX_ti814x = "xe674" +SYSLINKSUFFIX ?= "<UNDEFINED_SYSLINKSUFFIX>" + +SYSLINKLOADER_omap3 = "COFF" +SYSLINKLOADER_omapl137 = "COFF" +SYSLINKLOADER_omapl138 = "COFF" +SYSLINKLOADER_ti816x = "ELF" +SYSLINKLOADER_ti814x = "ELF" +SYSLINKLOADER ?= "<UNDEFINED_SYSLINKLOADER>" + +# Do we really need to configure this? - configured already in config.bld +XDCTARGETS_omap3 = "ti.targets.C64P" +XDCTARGETS_omapl137 = "ti.targets.C674" +XDCTARGETS_omapl138 = "ti.targets.C674" +# for ti816x and ti814x, we should later also build for ti.targets.arm.elf.M3 +XDCTARGETS_ti816x = "ti.targets.elf.C674 ti.targets.arm.elf.M3" +XDCTARGETS_ti814x = "ti.targets.elf.C674 ti.targets.arm.elf.M3" +XDCTARGETS ?= "<UNDEFINED_XDCTARGETS>" +export XDCTARGETS + +# Exported Variable needed by build +export SYSLINK_ROOT = "${S}/packages/" + +export XDCPATH = "${IPC_INSTALL_DIR}/packages;${SYSBIOS_INSTALL_DIR}/packages" + +do_configure() { + sed -i -e s:@VERSION@:${PV}:g ${WORKDIR}/syslink.pc + + cp ${WORKDIR}/syslink.pc ${S} +} + +do_prepsources () { + + # Prepare the tree for rebuiling - clean and generate interfaces + cd ${SYSLINK_ROOT}/ti/syslink + ${XDC_INSTALL_DIR}/xdc --jobs=${BB_NUMBER_THREADS} .make -PR . + ${XDC_INSTALL_DIR}/xdc --jobs=${BB_NUMBER_THREADS} clean -PR . + ${XDC_INSTALL_DIR}/xdc --jobs=${BB_NUMBER_THREADS} .interfaces -PR . +} + +addtask prepsources after do_configure before do_compile + +do_compile() { + # TODO :: KERNEL_CC, should use for kernel module build? + # TODO :: Check the 'unset's + + unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS + + do_make_scripts + + # Build the gpp (hlos) kernel space + cd ${SYSLINK_ROOT}/ti/syslink/utils/hlos/knl/Linux && make \ + ARCH="${TARGET_ARCH}" \ + CROSS_COMPILE="${TARGET_PREFIX}" \ + SYSLINK_PLATFORM="${SYSLINKPLATFORM}" \ + SYSLINK_VARIANT="${SYSLINKVARIANT}" \ + SYSLINK_LOADER="${SYSLINKLOADER}" \ + SYSLINK_PKGPATH="${IPC_INSTALL_DIR}/packages" \ + KDIR="${STAGING_KERNEL_DIR}" + +# # Build the gpp (hlos) kernel space samples. +# for sample in ${SYSLINKHLOSSAMPLES}; do +# cd ${SYSLINK_ROOT}/ti/syslink/samples/hlos/$sample/knl/Linux && make \ +# ARCH="${TARGET_ARCH}" \ +# CROSS_COMPILE="${TARGET_PREFIX}" \ +# SYSLINK_PLATFORM="${SYSLINKPLATFORM}" \ +# SYSLINK_VARIANT="${SYSLINKVARIANT}" \ +# SYSLINK_LOADER="${SYSLINKLOADER}" \ +# SYSLINK_PKGPATH="${IPC_INSTALL_DIR}/packages" \ +# SYSLINK_SDK=EZSDK \ +# KDIR="${STAGING_KERNEL_DIR}" +# done + + # Build the gpp (hlos) user space + cd ${SYSLINK_ROOT}/ti/syslink/utils/hlos/usr/Linux && make \ + ARCH="${TARGET_ARCH}" \ + CROSS_COMPILE="${TARGET_PREFIX}" \ + TOOLCHAIN_PREFIX="${TOOLCHAIN_PATH}/${TARGET_PREFIX}" \ + SYSLINK_PLATFORM="${SYSLINKPLATFORM}" \ + SYSLINK_VARIANT="${SYSLINKVARIANT}" \ + SYSLINK_LOADER="${SYSLINKLOADER}" \ + SYSLINK_PKGPATH="${IPC_INSTALL_DIR}/packages" + + # Build the gpp (hlos) user space samples + # First build the common lib for samples. + cd ${SYSLINK_ROOT}/ti/syslink/samples/hlos/common/usr/Linux && make \ + ARCH="${TARGET_ARCH}" \ + CROSS_COMPILE="${TARGET_PREFIX}" \ + TOOLCHAIN_PREFIX="${TOOLCHAIN_PATH}/${TARGET_PREFIX}" \ + SYSLINK_PLATFORM="${SYSLINKPLATFORM}" \ + SYSLINK_VARIANT="${SYSLINKVARIANT}" \ + SYSLINK_LOADER="${SYSLINKLOADER}" \ + SYSLINK_SDK=EZSDK \ + SYSLINK_PKGPATH="${IPC_INSTALL_DIR}/packages" + + for sample in ${SYSLINKHLOSSAMPLES}; do + cd ${SYSLINK_ROOT}/ti/syslink/samples/hlos/$sample/usr/Linux && make \ + ARCH="${TARGET_ARCH}" \ + CROSS_COMPILE="${TARGET_PREFIX}" \ + TOOLCHAIN_PREFIX="${TOOLCHAIN_PATH}/${TARGET_PREFIX}" \ + SYSLINK_PLATFORM="${SYSLINKPLATFORM}" \ + SYSLINK_VARIANT="${SYSLINKVARIANT}" \ + SYSLINK_LOADER="${SYSLINKLOADER}" \ + SYSLINK_SDK=EZSDK \ + SYSLINK_PKGPATH="${IPC_INSTALL_DIR}/packages" + done + + # Build the dsp/arm (rtos) code (system and samples) + # cd ${SYSLINK_ROOT}/ti/syslink && \ + # ${XDC_INSTALL_DIR}/xdc --jobs=${BB_NUMBER_THREADS} -PR . + export XDCOPTIONS=v + cd ${SYSLINK_ROOT}/ti/syslink && \ + ${XDC_INSTALL_DIR}/xdc -P \ + `${XDC_INSTALL_DIR}/bin/xdcpkg ${SYSLINK_ROOT}/ti/syslink | grep -v samples` + export XDCARGS="profile=debug" + cd ${SYSLINK_ROOT}/ti/syslink && \ + ${XDC_INSTALL_DIR}/xdc --jobs=${BB_NUMBER_THREADS} -P \ + `${XDC_INSTALL_DIR}/bin/xdcpkg ${SYSLINK_ROOT}/ti/syslink | grep samples` +} + +KERNEL_VERSION = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-abiversion')}" + +do_install () { + + # Install the hlos kernel module + install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp + install -m 0755 ${SYSLINK_ROOT}/ti/syslink/bin/${SYSLINKVARIANT}/syslink.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/ + + # Install the hlos example kernel modules and apps + install -d ${D}/${installdir}/ti-syslink-examples + install -m 0755 ${SYSLINK_ROOT}/ti/syslink/bin/${SYSLINKVARIANT}/samples/* ${D}/${installdir}/ti-syslink-examples/ + + # Install the rtos example apps + install -d ${D}/${installdir}/ti-syslink-examples/dsp + cd ${SYSLINK_ROOT}/ti/syslink/samples/rtos + for i in $(find . -name "*.${SYSLINKSUFFIX}" | grep "${SOC_FAMILY}"); do + install ${i} ${D}/${installdir}/ti-syslink-examples/dsp/ + done + + # TODO :: Fixup - library/headers installation - this shouldn't go into the examples directory.... + # Needs proper staging + # Install the library in the filesystem + # install -d ${D}/${installdir}/ti-syslink-examples + # install -m 0755 ${SYSLINK_ROOT}/ti/syslink/lib/syslink.a ${D}/${installdir}/ti-syslink-examples/ + + # Install/Stage the Source Tree + install -d ${D}${SYSLINK_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${SYSLINK_INSTALL_DIR_RECIPE} + + install -d ${D}/${libdir}/pkgconfig + install ${S}/syslink.pc ${D}/${libdir}/pkgconfig/ +} + +PACKAGES =+ "ti-syslink-module" +FILES_ti-syslink-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/syslink.ko" +RDEPENDS_ti-syslink-module += "update-modules" + +pkg_postinst_ti-syslink-module () { +#!/bin/sh +if [ -n "$D" ]; then + exit 1 +fi + +depmod -a +update-modules || true +} + +pkg_postrm_ti-syslink-module () { +#!/bin/sh +update-modules || true +} + +PACKAGES =+ "ti-syslink-examples" +RRECOMMENDS_ti-syslink-examples_append = " ti-syslink-module" +FILES_ti-syslink-examples = "${installdir}/ti-syslink-examples/*" +INSANE_SKIP_ti-syslink-examples = "1" + +FILES_ti-syslink-dev = "${libdir}/*" diff --git a/extras/recipes-ti/syslink/ti-syslink/syslink.pc b/extras/recipes-ti/syslink/ti-syslink/syslink.pc new file mode 100644 index 00000000..c4d720f1 --- /dev/null +++ b/extras/recipes-ti/syslink/ti-syslink/syslink.pc @@ -0,0 +1,10 @@ +prefix=/../..//syslink_@VERSION@ +libdir=${prefix}/ti/syslink/lib +includedir=${prefix}/ti/syslink + +Name: TI Syslink +Description: Syslink ARM-DSP IPC (Inter Processor Communication) +Version: @VERSION@ +Requires: ipc +Libs: ${libdir}/syslink.a_release +Cflags: -I${includedir} -I${includedir}/inc -I${includedir}/utils diff --git a/extras/recipes-ti/syslink/ti-syslink_2.00.00.78.bb b/extras/recipes-ti/syslink/ti-syslink_2.00.00.78.bb new file mode 100644 index 00000000..71e96212 --- /dev/null +++ b/extras/recipes-ti/syslink/ti-syslink_2.00.00.78.bb @@ -0,0 +1,8 @@ +require ti-syslink.inc + +PV = "2_00_00_78" +PVwithdots = "2.00.00.78" + +SRC_URI[syslinktarball.md5sum] = "df7c92cd2cca38fdb38e59e4175aba61" +SRC_URI[syslinktarball.sha256sum] = "3409d080b08ec1d0bd24a715dbec783f1d52020e452485c165ad64e121548ebc" + diff --git a/extras/recipes-ti/xdais/ti-xdais.inc b/extras/recipes-ti/xdais/ti-xdais.inc new file mode 100644 index 00000000..9514ce6b --- /dev/null +++ b/extras/recipes-ti/xdais/ti-xdais.inc @@ -0,0 +1,21 @@ +DESCRIPTION = "TI eXpress DSP Algorithm Interface Standard (XDAIS) specification" +HOMEPAGE = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/xdais" +LICENSE = "GPLv2" +SECTION = "devel" + +LIC_FILES_CHKSUM = "file://xdais_6_26_01_03_manifest.html;md5=a5a675d49db2f658bb98746ec80cda4e" + +require ../includes/ti-paths.inc +require ../includes/ti-staging.inc + +PR = "r1" + +S = "${WORKDIR}/xdais_${PV}" + +SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/xdais/${PV}/exports/xdais_${PV}.tar.gz;name=xdaistarball" + +do_install() { + install -d ${D}${XDAIS_INSTALL_DIR_RECIPE} + cp -pPrf ${S}/* ${D}${XDAIS_INSTALL_DIR_RECIPE} +} + diff --git a/extras/recipes-ti/xdais/ti-xdais_6.26.01.03.bb b/extras/recipes-ti/xdais/ti-xdais_6.26.01.03.bb new file mode 100644 index 00000000..f8bef79a --- /dev/null +++ b/extras/recipes-ti/xdais/ti-xdais_6.26.01.03.bb @@ -0,0 +1,8 @@ +require ti-xdais.inc + +PV = "6_26_01_03" + +SRC_URI[xdaistarball.md5sum] = "9b2bea3408254e737ec0d819a031adf6" +SRC_URI[xdaistarball.sha256sum] = "d7bcbd8bcfe6fdfc5f402e4b125ced6c806dc30bc5296e98d5d43b0b5a237a0d" + + |