Skip to contentSkip to conversation

ti-gfx: add new package

RFC Superseded Spenser Gilliland 6 participants 13 messages Jun 25, 2013 – Jun 26, 2013

v2 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

RFC v2 1/1 ti-gfx: add new package

This is WIP of adding the TI Graphics SDK to Buildroot

Current Status:
Kernel Drivers load without errror. pvrsrvctl starts with no errors.
Some demos run, others do not.
gstreamer videotestsrc ! eglglessink does not work.

TODO:
Install startup files for sgx core.
Create .pc files to simplify additional packaging. Hard Float Binaries
Testing, lots of testing.

Additional Info:
I've been using the 3.9.6-x3 tag of the kernel at
https://github.com/RobertCNelson/stable-kernel by use of the LINUX_OVERRIDE_SRCDIR option.

You must use a soft-float toolchain (ie Code Sourcery) as the binaries provided by the Graphics SDK are soft-float. (hard float is on the TODO list)

To load the driver manually use the following:

      modprobe omaplfb
      modprobe bufferclass-ti
      pvrsrvctl --start --no-module
---
 package/Config.in                              |    1 +
 package/opengl/libegl/libegl.mk                |    4 +
 package/opengl/libgles/libgles.mk              |    4 +
 package/opengl/libopenvg/libopenvg.mk          |    4 +
 package/ti-gfx/Config.in                       |   54 +++++++++++
 package/ti-gfx/ti-gfx-km_install_modules.patch |   14 +++
 package/ti-gfx/ti-gfx-newclkapi.patch          |   62 +++++++++++++
 package/ti-gfx/ti-gfx.mk                       |  116 ++++++++++++++++++++++++
 8 files changed, 259 insertions(+)
 create mode 100644 package/ti-gfx/Config.in
 create mode 100644 package/ti-gfx/ti-gfx-km_install_modules.patch
 create mode 100644 package/ti-gfx/ti-gfx-newclkapi.patch
 create mode 100644 package/ti-gfx/ti-gfx.mk
package/Config.in +1 -0
index 0eb6a9c..3429c0e 100644
@@ -291,6 +291,7 @@ source "package/snowball-hdmiservice/Config.in"
 source "package/sredird/Config.in"
 source "package/statserial/Config.in"
 source "package/sysstat/Config.in"
+source "package/ti-gfx/Config.in"
 source "package/ti-utils/Config.in"
 source "package/uboot-tools/Config.in"
 source "package/udev/Config.in"
package/opengl/libegl/libegl.mk +4 -0
index bd8040d..00e1f19 100644
@@ -10,6 +10,10 @@ ifeq ($(BR2_PACKAGE_RPI_USERLAND),y)
 LIBEGL_DEPENDENCIES += rpi-userland
 endif
 
+ifeq ($(BR2_PACKAGE_TI_GFX),y)
+LIBEGL_DEPENDENCIES += ti-gfx
+endif
+
 ifeq ($(LIBEGL_DEPENDENCIES),)
 define LIBEGL_CONFIGURE_CMDS
 	echo "No libEGL implementation selected. Configuration error."
package/opengl/libgles/libgles.mk +4 -0
index a0048a7..d2fe11b 100644
@@ -10,6 +10,10 @@ ifeq ($(BR2_PACKAGE_RPI_USERLAND),y)
 LIBGLES_DEPENDENCIES += rpi-userland
 endif
 
+ifeq ($(BR2_PACKAGE_TI_GFX),y)
+LIBGLES_DEPENDENCIES += ti-gfx
+endif
+
 ifeq ($(LIBGLES_DEPENDENCIES),)
 define LIBGLES_CONFIGURE_CMDS
 	echo "No libGLES implementation selected. Configuration error."
package/opengl/libopenvg/libopenvg.mk +4 -0
index 03f59ba..118ae7f 100644
@@ -10,6 +10,10 @@ ifeq ($(BR2_PACKAGE_RPI_USERLAND),y)
 LIBOPENVG_DEPENDENCIES += rpi-userland
 endif
 
+ifeq ($(BR2_PACKAGE_TI_GFX),y)
+LIBOPENVG_DEPENDENCIES += ti-gfx
+endif
+
 ifeq ($(LIBOPENVG_DEPENDENCIES),)
 define LIBOPENVG_CONFIGURE_CMDS
 	echo "No libOpenVG implementation selected. Configuration error."
package/ti-gfx/Config.in new file +54 -0

54 lines not on this page · raw message

package/ti-gfx/ti-gfx-km_install_modules.patch new file +14 -0
new file mode 100644
index 0000000..63bfd19
@@ -0,0 +1,14 @@
+Index: ti-gfx-4_09_00_01/GFX_Linux_KM/Makefile
+===================================================================
+--- ti-gfx-4_09_00_01.orig/GFX_Linux_KM/Makefile	2013-03-07 11:00:11.000000000 -0600
++++ ti-gfx-4_09_00_01/GFX_Linux_KM/Makefile	2013-05-23 01:36:29.356676281 -0500
+@@ -479,6 +479,9 @@
+ all:
+ 	$(MAKE) -C $(KERNELDIR) M=`pwd` $*
+ 
++install:
++	$(MAKE) -C $(KERNELDIR) M=`pwd` modules_install
++
+ clean:
+ 	@find . -name "*.o" -exec rm -r {} \;
+ 	@find . -name "*.ko" -exec rm -r {} \;
package/ti-gfx/ti-gfx-newclkapi.patch new file +62 -0

62 lines not on this page · raw message

package/ti-gfx/ti-gfx.mk new file +116 -0

116 lines not on this page · raw message

Signature · 1 line
1.7.9.5
#1 lore raw

RFC v2 1/1 ti-gfx: add new package

Dear Spenser Gilliland,

Quoted 1 line · Spenser Gilliland

This is WIP of adding the TI Graphics SDK to Buildroot

Nice, thanks for your work on this. Having support for OpenGL on OMAP3, OMAP4 and AM335x is definitely one of the most important part of the GSoC.

Quoted 11 lines

Current Status:
Kernel Drivers load without errror. pvrsrvctl starts with no errors.
Some demos run, others do not.
gstreamer videotestsrc ! eglglessink does not work.

TODO:
Install startup files for sgx core.
Create .pc files to simplify additional packaging. Hard Float Binaries
Testing, lots of testing.

Ok.

Quoted 4 lines

Additional Info:
I've been using the 3.9.6-x3 tag of the kernel at
https://github.com/RobertCNelson/stable-kernel by use of the LINUX_OVERRIDE_SRCDIR option.

Are there some reports of the ti-gfx stuff working on such recent kernels? Have you looked at the Yocto meta-ti layer at
http://git.yoctoproject.org/cgit/cgit.cgi/meta-ti/ ? If I look there, they apparently don't have anything more recent than 3.0 or 3.1.

Also, are you still trying on the Beagle-XM, or have you switched to the BeagleBone Black?

Quoted 4 lines

You must use a soft-float toolchain (ie Code Sourcery) as the binaries provided by the Graphics SDK are soft-float. (hard float is on the TODO list)

Note that I've recently added the Arago toolchain as an external toolchain in Buildroot. I don't remember if it's a -mfloat-abi=hard or -mfloat-abi=softfp toolchain, though.

package/ti-gfx/Config.in line 3

Quoted 1 line
package/ti-gfx/Config.in new file +1 -0
+	select BR2_LINUX_KERNEL

We typically never "select" the kernel, but instead depend on it, and have a comment if the kernel is not enabled. This is because we can't enable the kernel in the back of the user: the user has to be aware that (s)he should go in the kernel menu, and configure the version/configuration.

package/ti-gfx/Config.in line 30

Quoted 10 lines
package/ti-gfx/Config.in new file +10 -0
+choice
+	prompt "Target"
+	default BR2_PACKAGE_TI_GFX_ES3
+	help
+	  Select the SOC for which you would like to install drivers. Please 
+	  use the chart at
+	  http://processors.wiki.ti.com/index.php/OMAP35x_Graphics_SDK_Getting_Started_Guide
+
+config BR2_PACKAGE_TI_GFX_ES3
+	bool "es3.x"

That's a detail, but maybe it would be worth doing:

	bool "es3.x (OMAP35xx, AM35xx)"

so that the user doesn't have to go in the help text of each option to find the right value to use.

package/ti-gfx/Config.in line 54

Quoted 2 lines
package/ti-gfx/Config.in new file +2 -0
+comment "requires an external eglibc/glibc based toolchain"
+	depends on !(BR2_TOOLCHAIN_EXTERNAL_GLIBC || BR2_TOOLCHAIN_CTNG_eglibc || BR2_TOOLCHAIN_CTNG_glibc)

the toolchain is not necessarily external, it may be using the crosstool-ng backend. So just "requires an eglibc/glibc based toolchain" is enough.

package/ti-gfx/ti-gfx-km_install_modules.patch

Quoted 5 lines
package/ti-gfx/ti-gfx-km_install_modules.patch new file +0 -0
new file mode 100644
index 0000000..63bfd19

Missing description + SoB.

package/ti-gfx/ti-gfx-km_install_modules.patch line 10

Quoted 11 lines
package/ti-gfx/ti-gfx-km_install_modules.patch new file +10 -0
@@ -0,0 +1,14 @@
+Index: ti-gfx-4_09_00_01/GFX_Linux_KM/Makefile
+===================================================================
+--- ti-gfx-4_09_00_01.orig/GFX_Linux_KM/Makefile	2013-03-07 11:00:11.000000000 -0600
++++ ti-gfx-4_09_00_01/GFX_Linux_KM/Makefile	2013-05-23 01:36:29.356676281 -0500
+@@ -479,6 +479,9 @@
+ all:
+ 	$(MAKE) -C $(KERNELDIR) M=`pwd` $*
+ 
++install:
++	$(MAKE) -C $(KERNELDIR) M=`pwd` modules_install

You could directly do this modules_install from the Buildroot .mk file, but ok, why not.

package/ti-gfx/ti-gfx-newclkapi.patch

Quoted 3 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +0 -0
@@ -0,0 +1,62 @@

Missing description + SoB.

Quoted 9 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +9 -0
+Index: ti-gfx-4_09_00_01/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c
+===================================================================
+--- ti-gfx-4_09_00_01.orig/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c	2013-06-18 11:03:06.606245728 -0500
++++ ti-gfx-4_09_00_01/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c	2013-06-18 11:11:17.908972042 -0500
+@@ -166,11 +166,30 @@
+ 	}
+ 
+ 	PVR_DPF((PVR_DBG_MESSAGE, "EnableSGXClocks: Enabling SGX Clocks"));
+-	

package/ti-gfx/ti-gfx-newclkapi.patch line 19

Quoted 10 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +10 -0
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
++	res=clk_prepare(psSysSpecData->psSGX_FCK);
++	if (res < 0)
++        {
++                PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX functional clock (%d)", res));
++                clk_unprepare(psSysSpecData->psSGX_FCK);
++                return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK;
++        }
++#endif 
+ 	res=clk_enable(psSysSpecData->psSGX_FCK);

One option would have been to replace clk_enable() by clk_prepare_enable(), that does both the prepare and enable. But that call has been introduced in 3.3 only, so for 3.2, you would still need to call clk_prepare().

Or maybe you can do something like:

#if LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0)
int clk_prepare_enable(struct clk *clk)

{
	return clk_enable(clk);
}
#elif LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)
int clk_prepare_enable(struct clk *clk)
{
	res = clk_prepare(clk);
	if (ret < 0)
		return res;

	res = clk_enable(clk);
	if (res < 0) {
		clk_unprepare(clk);
		return res;
	}

	return 0;
}

#endif

this way, you can simply the rest of the patch by just doing s/clk_enable/clk_prepare_enable/. Ditto for disable/unprepare, of course.

package/ti-gfx/ti-gfx-newclkapi.patch line 59

Quoted 8 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +8 -0
+@@ -247,8 +271,9 @@
+ 	PVR_DPF((PVR_DBG_MESSAGE, "DisableSGXClocks: Disabling SGX Clocks"));
+ 	
+ 	clk_disable(psSysSpecData->psSGX_FCK);
+-
++	clk_unprepare(psSysSpecData->psSGX_FCK);
+ 	clk_disable(psSysSpecData->psSGX_ICK);
++	clk_unprepare(psSysSpecData->psSGX_ICK);

Missing kernel version conditionals here.

Quoted 7 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +7 -0
+TI_GFX_BIN_PATH = gfx_$(TI_GFX_DEBUG_LIB)_es$(TI_GFX_OMAPES)
+
+define TI_GFX_EXTRACT_CMDS 
+	$(RM) -rf $(TI_GFX_DIR)
+	chmod +x $(DL_DIR)/$(TI_GFX_SOURCE)
+	printf "Y\nY\n qY\n\n" | $(DL_DIR)/$(TI_GFX_SOURCE) \
+		--prefix $(@D) \

package/ti-gfx/ti-gfx-newclkapi.patch line 44

Quoted 10 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +10 -0
+		--mode console
+endef
+
+TI_GFX_MAKE_CMD = cd $(@D)/GFX_Linux_KM && \
+		$(MAKE) $(LINUX_MAKE_FLAGS) \
+			BUILD=$(TI_GFX_DEBUG_KM) \
+			TI_PLATFORM=$(TI_GFX_PLATFORM) \
+			OMAPES=$(TI_GFX_OMAPES) \
+			SUPPORT_XORG=0 \
+			KERNELDIR=$(LINUX_DIR)

This is a rather unusual way of doing this. We prefer something like:

TI_GFX_MAKE_OPTS = \
	$(LINUX_MAKE_FLAGS) \
	BUILD=$(TI_GFX_DEBUG_KM) \
	TI_PLATFORM=$(TI_GFX_PLATFORM) \
	OMAPES=$(TI_GFX_OMAPES) \
	SUPPORT_XORG=0 \
	KERNELDIR=$(LINUX_DIR)

And then do:

define TI_GFX_BUILD_CMDS

	$(MAKE) $(TI_GFX_MAKE_OPTS) -C $(@D)/GFX_Linux_KM

endef

Also, I'm surprised you're not passing $(TARGET_CONFIGURE_OPTS) to ensure the right compiler is used, etc.

package/ti-gfx/ti-gfx-newclkapi.patch line 47

Quoted 3 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +3 -0
+define TI_GFX_BUILD_CMDS
+	( $(TI_GFX_MAKE_CMD) all )
+endef

Parenthesis are not needed.

Quoted 29 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +29 -0
+define TI_GFX_INSTALL_STAGING_CMDS
+	for incdir in EGL EWS GLES2 KHR; do \
+		$(INSTALL) -d $(STAGING_DIR)/usr/include/$$incdir; \
+		$(INSTALL) -D -m 0644 $(@D)/include/OGLES2/$$incdir/*.h $(STAGING_DIR)/usr/include/$$incdir; \
+	done
+	$(INSTALL) -D -m 0755 $(@D)/$(TI_GFX_BIN_PATH)/*.so $(STAGING_DIR)/usr/lib
+endef
+
+TI_GFX_TARGET_BIN = \
+	pvrsrvctl \
+
+ifeq ($(BR2_PACKAGE_TI_GFX_DEBUG),y)
+TI_GFX_TARGET_BIN += \
+	eglinfo \
+	ews_server \
+	ews_server_es2 \
+	ews_test_gles1 \
+	ews_test_gles2 \
+	ews_test_swrender \
+	gles1test1 \
+	gles2test1 \
+	pvr2d_test \
+	services_test \
+	sgx_blit_test \
+	sgx_clipblit_test \
+	sgx_flip_test \
+	sgx_init_test \
+	sgx_render_flip_test
+endif

package/ti-gfx/ti-gfx-newclkapi.patch

Quoted 10 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +10 -0
+
+TI_GFX_IMGPV = "1.9.2188537"
+
+define TI_GFX_INSTALL_TARGET_CMDS
+	( $(TI_GFX_MAKE_CMD) install ) || \
+		echo "Your kernel configuration must include FB_DA8XX"
+	for file in $(TI_GFX_TARGET_BIN); do \
+		$(INSTALL) -D -m 0755 $(@D)/$(TI_GFX_BIN_PATH)/$$file  $(TARGET_DIR)/usr/bin/$$file; \
+	done
+	for sofile in $$(find $(@D)/$(TI_GFX_BIN_PATH) -name "lib*Open*.so") $$(find $(@D)/$(TI_GFX_BIN_PATH) -name "lib*srv*.so") $$(find $(@D)/$(TI_GFX_BIN_PATH) -name "lib*gl*.so") $$(find $(@D)/$(TI_GFX_BIN_PATH) -name "libpvr*.so") $$(find $(@D)/$(TI_GFX_BIN_PATH) -name "lib*GL*.so") $$(find $(@D)/$(TI_GFX_BIN_PATH) -name "libusc.so"); do \

I guess this could maybe be refactored, but we can see that later once the whole thing works.

package/ti-gfx/ti-gfx-newclkapi.patch

Quoted 13 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +13 -0
+		if [ "$$(readlink -n $${sofile})" = "" ] ; then \
+			sobase=$$(basename $${sofile}); \
+			$(INSTALL) -D -m 0755 $$sofile $(TARGET_DIR)/usr/lib/$${sobase}.$(TI_GFX_IMGPV); \
+			ln -sf $${sobase}.$(TI_GFX_IMGPV) $(TARGET_DIR)/usr/lib/$${sobase}; \
+			ln -sf $${sobase}.$(TI_GFX_IMGPV) $(TARGET_DIR)/usr/lib/$${sobase}$$(echo $(TI_GFX_IMGPV) | awk -F. '{print "." $$1}'); \
+			ln -sf $${sobase}.$(TI_GFX_IMGPV) $(TARGET_DIR)/usr/lib/$${sobase}$$(echo $(TI_GFX_IMGPV) | awk -F. '{print "." $$1 "." $$2}'); \
+		fi; \
+	done
+endef
+
+define TI_GFX_CLEAN_CMDS
+	( $(TI_GFX_MAKE_CMD) clean )
+endef

Parenthesis unneeded.

Thomas

Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
#2 lore raw

RFC v2 1/1 ti-gfx: add new package

On Tue, 25 Jun 2013 22:31:25 +0200
Thomas Petazzoni <[email protected]> wrote:

Dear Thomas,

Quoted 3 lines

Nice, thanks for your work on this. Having support for OpenGL on OMAP3, OMAP4 and AM335x is definitely one of the most important part of the GSoC.

I completely agree. I'm working very diligently on this.

Quoted 10 lines
Quoted 5 lines

Additional Info:
I've been using the 3.9.6-x3 tag of the kernel at
https://github.com/RobertCNelson/stable-kernel by use of the LINUX_OVERRIDE_SRCDIR option.

Are there some reports of the ti-gfx stuff working on such recent kernels? Have you looked at the Yocto meta-ti layer at
http://git.yoctoproject.org/cgit/cgit.cgi/meta-ti/ ? If I look there, they apparently don't have anything more recent than 3.0 or 3.1.

Yes, the RobertCNelson kernel has builds up to 3.9.6. I am using this
with fairly good success. I've been using the meta-ti layer extensively to understand the process of installing the SGX drivers. Many things refer to a 3.8 kernel from ti. However, this kernel was unbootable on the Beagle-XM. This may be a more apporiate option for the Beagle Black though.

Quoted 2 lines

Also, are you still trying on the Beagle-XM, or have you switched to the BeagleBone Black.

The Beagle-XM is the current target. From the start, I was trying to read the revision number on the SGX core using devmem2. However for some unknown reason, devmem2 is not working properly on the Beagle-XM. When I finally tried the devmem from busybox, the revision was correctly read. Thus, I'm thinking that there is a bug in devmem2 which is causing the problem. See patch here
https://github.com/openembedded/meta-oe/blob/master/meta-oe/recipes-support/devmem2/devmem2/devmem2-fixups-2.patch

Quoted 8 lines
Quoted 4 lines

You must use a soft-float toolchain (ie Code Sourcery) as the
binaries provided by the Graphics SDK are soft-float. (hard float is on the TODO list)

Note that I've recently added the Arago toolchain as an external toolchain in Buildroot. I don't remember if it's a -mfloat-abi=hard or -mfloat-abi=softfp toolchain, though.

I'll run some tests with the Arago toolchain and determine if it's appropriate to use for this SGX stuff.

Quoted 7 lines

package/ti-gfx/Config.in line 3

Quoted 1 line
package/ti-gfx/Config.in new file +1 -0
+	select BR2_LINUX_KERNEL

We typically never "select" the kernel, but instead depend on it, and have a comment if the kernel is not enabled. This is because we can't enable the kernel in the back of the user: the user has to be aware that (s)he should go in the kernel menu, and configure the version/configuration.

Will fix.

Quoted 14 lines

package/ti-gfx/Config.in line 30

Quoted 11 lines
package/ti-gfx/Config.in new file +5 -0
+choice
+	prompt "Target"
+	default BR2_PACKAGE_TI_GFX_ES3
+	help
+	  Select the SOC for which you would like to install

drivers. Please

(quoted diff) +2 -0
+	  use the chart at
+

http://processors.wiki.ti.com/index.php/OMAP35x_Graphics_SDK_Getting_Started_Guide
+ +config BR2_PACKAGE_TI_GFX_ES3

package/ti-gfx/Config.in new file +1 -0
+	bool "es3.x"

That's a detail, but maybe it would be worth doing:

Quoted 4 lines
	bool "es3.x (OMAP35xx, AM35xx)"

so that the user doesn't have to go in the help text of each option to find the right value to use.

Will fix.

Quoted 7 lines
Quoted 3 lines
(quoted diff) +2 -0
+comment "requires an external eglibc/glibc based toolchain"
+	depends on !(BR2_TOOLCHAIN_EXTERNAL_GLIBC ||

BR2_TOOLCHAIN_CTNG_eglibc || BR2_TOOLCHAIN_CTNG_glibc)

the toolchain is not necessarily external, it may be using the crosstool-ng backend. So just "requires an eglibc/glibc based toolchain" is enough.

Will fix.

Quoted 7 lines

package/ti-gfx/ti-gfx-km_install_modules.patch

Quoted 5 lines
(quoted diff) +0 -0

b/package/ti-gfx/ti-gfx-km_install_modules.patch new file mode 100644 index 0000000..63bfd19

package/ti-gfx/ti-gfx-km_install_modules.patch new file +0 -0

Missing description + SoB.

Will fix.

Quoted 16 lines

package/ti-gfx/ti-gfx-km_install_modules.patch line 10

Quoted 13 lines
package/ti-gfx/ti-gfx-km_install_modules.patch new file +3 -0
@@ -0,0 +1,14 @@
+Index: ti-gfx-4_09_00_01/GFX_Linux_KM/Makefile
+===================================================================
+--- ti-gfx-4_09_00_01.orig/GFX_Linux_KM/Makefile	2013-03-07

11:00:11.000000000 -0600 ++++
ti-gfx-4_09_00_01/GFX_Linux_KM/Makefile 2013-05-23
01:36:29.356676281 -0500 +@@ -479,6 +479,9 @@
+ all:

package/ti-gfx/ti-gfx-km_install_modules.patch new file +4 -0
+ 	$(MAKE) -C $(KERNELDIR) M=`pwd` $*
+ 
++install:
++	$(MAKE) -C $(KERNELDIR) M=`pwd` modules_install

You could directly do this modules_install from the Buildroot .mk file, but ok, why not.

Will fix. This was mentioned in the a previous review but I haven't fixed it yet.

Quoted 57 lines

package/ti-gfx/ti-gfx-newclkapi.patch

Quoted 3 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +0 -0
@@ -0,0 +1,62 @@

Missing description + SoB.

Quoted 21 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +1 -0
+Index:

ti-gfx-4_09_00_01/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c

+===================================================================
+---
ti-gfx-4_09_00_01.orig/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c
2013-06-18 11:03:06.606245728 -0500 ++++
ti-gfx-4_09_00_01/GFX_Linux_KM/services4/system/omap3630/sysutils_linux.c
2013-06-18 11:11:17.908972042 -0500 +@@ -166,11 +166,30 @@
package/ti-gfx/ti-gfx-newclkapi.patch new file +3 -0
+ 	}
+ 
+ 	PVR_DPF((PVR_DBG_MESSAGE, "EnableSGXClocks: Enabling SGX

Clocks")); +-
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
++ res=clk_prepare(psSysSpecData->psSGX_FCK);
++ if (res < 0)
++ {
++ PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks:
Couldn't enable SGX functional clock (%d)", res));
++ clk_unprepare(psSysSpecData->psSGX_FCK);
++ return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK;
++ } ++#endif

package/ti-gfx/ti-gfx-newclkapi.patch line 19

Quoted 1 line
package/ti-gfx/ti-gfx-newclkapi.patch new file +1 -0
+ 	res=clk_enable(psSysSpecData->psSGX_FCK);

One option would have been to replace clk_enable() by clk_prepare_enable(), that does both the prepare and enable. But that call has been introduced in 3.3 only, so for 3.2, you would still need to call clk_prepare().

Or maybe you can do something like:

#if LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0)
int clk_prepare_enable(struct clk *clk)

{
	return clk_enable(clk);
}
#elif LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)
int clk_prepare_enable(struct clk *clk)
{
	res = clk_prepare(clk);
	if (ret < 0)
		return res;

	res = clk_enable(clk);
	if (res < 0) {
		clk_unprepare(clk);
		return res;
	}

	return 0;
}
Quoted 5 lines

#endif

this way, you can simply the rest of the patch by just doing s/clk_enable/clk_prepare_enable/. Ditto for disable/unprepare, of course.

Good idea. This sounds easier to port forward. Will fix.

Quoted 11 lines

package/ti-gfx/ti-gfx-newclkapi.patch line 59

Quoted 10 lines

+@@ -247,8 +271,9 @@

package/ti-gfx/ti-gfx-newclkapi.patch new file +1 -0
+ 	PVR_DPF((PVR_DBG_MESSAGE, "DisableSGXClocks: Disabling

SGX Clocks"));

package/ti-gfx/ti-gfx-newclkapi.patch new file +6 -0
+ 	
+ 	clk_disable(psSysSpecData->psSGX_FCK);
+-
++	clk_unprepare(psSysSpecData->psSGX_FCK);
+ 	clk_disable(psSysSpecData->psSGX_ICK);
++	clk_unprepare(psSysSpecData->psSGX_ICK);
Quoted 1 line

Missing kernel version conditionals here.

Oops, will fix with method above.

Quoted 29 lines
Quoted 8 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +7 -0
+TI_GFX_BIN_PATH = gfx_$(TI_GFX_DEBUG_LIB)_es$(TI_GFX_OMAPES)
+
+define TI_GFX_EXTRACT_CMDS 
+	$(RM) -rf $(TI_GFX_DIR)
+	chmod +x $(DL_DIR)/$(TI_GFX_SOURCE)
+	printf "Y\nY\n qY\n\n" | $(DL_DIR)/$(TI_GFX_SOURCE) \
+		--prefix $(@D) \

package/ti-gfx/ti-gfx-newclkapi.patch

Quoted 10 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +10 -0
+		--mode console
+endef
+
+TI_GFX_MAKE_CMD = cd $(@D)/GFX_Linux_KM && \
+		$(MAKE) $(LINUX_MAKE_FLAGS) \
+			BUILD=$(TI_GFX_DEBUG_KM) \
+			TI_PLATFORM=$(TI_GFX_PLATFORM) \
+			OMAPES=$(TI_GFX_OMAPES) \
+			SUPPORT_XORG=0 \
+			KERNELDIR=$(LINUX_DIR)

This is a rather unusual way of doing this. We prefer something like:

TI_GFX_MAKE_OPTS = \
	$(LINUX_MAKE_FLAGS) \
	BUILD=$(TI_GFX_DEBUG_KM) \
	TI_PLATFORM=$(TI_GFX_PLATFORM) \
	OMAPES=$(TI_GFX_OMAPES) \
	SUPPORT_XORG=0 \
	KERNELDIR=$(LINUX_DIR)
Quoted 5 lines

And then do:

define TI_GFX_BUILD_CMDS

	$(MAKE) $(TI_GFX_MAKE_OPTS) -C $(@D)/GFX_Linux_KM

endef

Will fix. This is much cleaner.

Quoted 2 lines

Also, I'm surprised you're not passing $(TARGET_CONFIGURE_OPTS) to ensure the right compiler is used, etc.

This information is included in LINUX_MAKE_FLAGS.

Quoted 5 lines

package/ti-gfx/ti-gfx-newclkapi.patch

Quoted 3 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +3 -0
+define TI_GFX_BUILD_CMDS
+	( $(TI_GFX_MAKE_CMD) all )
+endef

Parenthesis are not needed.

Will fix.

Quoted 44 lines
Quoted 44 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +3 -0
+define TI_GFX_INSTALL_STAGING_CMDS
+	for incdir in EGL EWS GLES2 KHR; do \
+		$(INSTALL) -d $(STAGING_DIR)/usr/include/$$incdir;

\

package/ti-gfx/ti-gfx-newclkapi.patch new file +1 -0
+		$(INSTALL) -D -m 0644

$(@D)/include/OGLES2/$$incdir/*.h
$(STAGING_DIR)/usr/include/$$incdir; \

package/ti-gfx/ti-gfx-newclkapi.patch new file +2 -0
+	done
+	$(INSTALL) -D -m 0755 $(@D)/$(TI_GFX_BIN_PATH)/*.so

$(STAGING_DIR)/usr/lib +endef

package/ti-gfx/ti-gfx-newclkapi.patch new file +28 -0
+
+TI_GFX_TARGET_BIN = \
+	pvrsrvctl \
+
+ifeq ($(BR2_PACKAGE_TI_GFX_DEBUG),y)
+TI_GFX_TARGET_BIN += \
+	eglinfo \
+	ews_server \
+	ews_server_es2 \
+	ews_test_gles1 \
+	ews_test_gles2 \
+	ews_test_swrender \
+	gles1test1 \
+	gles2test1 \
+	pvr2d_test \
+	services_test \
+	sgx_blit_test \
+	sgx_clipblit_test \
+	sgx_flip_test \
+	sgx_init_test \
+	sgx_render_flip_test
+endif
+
+TI_GFX_IMGPV = "1.9.2188537"
+
+define TI_GFX_INSTALL_TARGET_CMDS
+	( $(TI_GFX_MAKE_CMD) install ) || \
+		echo "Your kernel configuration must include

FB_DA8XX"

package/ti-gfx/ti-gfx-newclkapi.patch new file +2 -0
+	for file in $(TI_GFX_TARGET_BIN); do \
+		$(INSTALL) -D -m 0755

$(@D)/$(TI_GFX_BIN_PATH)/$$file $(TARGET_DIR)/usr/bin/$$file; \

package/ti-gfx/ti-gfx-newclkapi.patch new file +2 -0
+	done
+	for sofile in $$(find $(@D)/$(TI_GFX_BIN_PATH) -name
Quoted 8 lines
Quoted 5 lines

"lib*Open*.so") $$(find $(@D)/$(TI_GFX_BIN_PATH) -name "lib*srv*.so") $$(find $(@D)/$(TI_GFX_BIN_PATH) -name "lib*gl*.so") $$(find $(@D)/$(TI_GFX_BIN_PATH) -name "libpvr*.so") $$(find $(@D)/$(TI_GFX_BIN_PATH) -name "lib*GL*.so") $$(find $(@D)/$(TI_GFX_BIN_PATH) -name "libusc.so"); do \

I guess this could maybe be refactored, but we can see that later once the whole thing works.

Yes, it's kinda ugly. I'm still working out the issues. Once I know exactly what must be installed, I can start to clean this up.

Quoted 20 lines
Quoted 19 lines
package/ti-gfx/ti-gfx-newclkapi.patch new file +3 -0
+		if [ "$$(readlink -n $${sofile})" = "" ] ; then \
+			sobase=$$(basename $${sofile}); \
+			$(INSTALL) -D -m 0755 $$sofile

$(TARGET_DIR)/usr/lib/$${sobase}.$(TI_GFX_IMGPV); \

package/ti-gfx/ti-gfx-newclkapi.patch new file +1 -0
+			ln -sf $${sobase}.$(TI_GFX_IMGPV)

$(TARGET_DIR)/usr/lib/$${sobase}; \

package/ti-gfx/ti-gfx-newclkapi.patch new file +1 -0
+			ln -sf $${sobase}.$(TI_GFX_IMGPV)

$(TARGET_DIR)/usr/lib/$${sobase}$$(echo $(TI_GFX_IMGPV) | awk -F. '{print "." $$1}'); \

package/ti-gfx/ti-gfx-newclkapi.patch new file +1 -0
+			ln -sf $${sobase}.$(TI_GFX_IMGPV)

$(TARGET_DIR)/usr/lib/$${sobase}$$(echo $(TI_GFX_IMGPV) | awk -F. '{print "." $$1 "." $$2}'); \

package/ti-gfx/ti-gfx-newclkapi.patch new file +7 -0
+		fi; \
+	done
+endef
+
+define TI_GFX_CLEAN_CMDS
+	( $(TI_GFX_MAKE_CMD) clean )
+endef
#3 lore raw

RFC v2 1/1 ti-gfx: add new package

Dear Spenser Gilliland,

Quoted 5 lines · Spenser Gilliland
Quoted 3 lines

Nice, thanks for your work on this. Having support for OpenGL on OMAP3, OMAP4 and AM335x is definitely one of the most important part of the GSoC.

I completely agree. I'm working very diligently on this.

Great!

Quoted 10 lines
Quoted 9 lines
Quoted 4 lines

Additional Info:
I've been using the 3.9.6-x3 tag of the kernel at
https://github.com/RobertCNelson/stable-kernel by use of the LINUX_OVERRIDE_SRCDIR option.

Are there some reports of the ti-gfx stuff working on such recent kernels? Have you looked at the Yocto meta-ti layer at
http://git.yoctoproject.org/cgit/cgit.cgi/meta-ti/ ? If I look there, they apparently don't have anything more recent than 3.0 or 3.1.

Quoted 6 lines

Yes, the RobertCNelson kernel has builds up to 3.9.6. I am using this
with fairly good success. I've been using the meta-ti layer extensively to understand the process of installing the SGX drivers. Many things refer to a 3.8 kernel from ti. However, this kernel was unbootable on the Beagle-XM. This may be a more apporiate option for the Beagle Black though.

Ok.

Quoted 10 lines
Quoted 2 lines

Also, are you still trying on the Beagle-XM, or have you switched to the BeagleBone Black.

The Beagle-XM is the current target. From the start, I was trying to read the revision number on the SGX core using devmem2. However for some unknown reason, devmem2 is not working properly on the Beagle-XM. When I finally tried the devmem from busybox, the revision was correctly read. Thus, I'm thinking that there is a bug in devmem2 which is causing the problem. See patch here
https://github.com/openembedded/meta-oe/blob/master/meta-oe/recipes-support/devmem2/devmem2/devmem2-fixups-2.patch

Argh, strange. The patch seems like devmem2 may not be working properly on platforms that don't support unaligned accesses.

Quoted 4 lines
Quoted 2 lines

Also, I'm surprised you're not passing $(TARGET_CONFIGURE_OPTS) to ensure the right compiler is used, etc.

This information is included in LINUX_MAKE_FLAGS.

Ah, correct, ok!

Quoted 5 lines
Quoted 2 lines

I guess this could maybe be refactored, but we can see that later once the whole thing works.

Yes, it's kinda ugly. I'm still working out the issues. Once I know exactly what must be installed, I can start to clean this up.

Yes sure, that's also why I haven't looked in more detail on what else to propose.

Best regards,

Thomas

Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
#4 lore raw

RFC v2 1/1 ti-gfx: add new package

In reply to Spenser Gilliland
Quoted 1 line · Spenser Gilliland

This is WIP of adding the TI Graphics SDK to Buildroot

It's not really _the_ graphics SDK, since it only supports a subset of
TI platforms (no OMAP1, OMAP2 or Davinci, and I'm not sure about OMAP5 either).

Quoted 10 lines

Current Status:
Kernel Drivers load without errror. pvrsrvctl starts with no errors.
Some demos run, others do not.
gstreamer videotestsrc ! eglglessink does not work.

TODO:
Install startup files for sgx core. Create .pc files to simplify additional packaging.

We don't usually create pc files if the package doesn't provide them.
It's not really needed, because packages that use the library will anyway not use pkg-config to get the package info.

Quoted 1 line

Hard Float Binaries

Doesn't the package contain soft-float binary libraries? Then
hard-float won't be possible, right?

Quoted 11 lines

Testing, lots of testing.

Additional Info:
I've been using the 3.9.6-x3 tag of the kernel at
https://github.com/RobertCNelson/stable-kernel by use of the LINUX_OVERRIDE_SRCDIR option.

You must use a soft-float toolchain (ie Code Sourcery) as the binaries provided by the Graphics SDK are soft-float. (hard float is on the TODO list)

Quoted 6 lines

To load the driver manually use the following:
modprobe omaplfb
modprobe bufferclass-ti
pvrsrvctl --start --no-module

Please keep a changelog of the history of your patch in the commit
message, so we can keep track of which review comments you've already taken into account.

In this particular case, I notice that Thomas repeats a lot of review
comments that I've made a week ago, so writing "review comments from Arnout not taken into account" would have helped :-) Or maybe you missed those?

Regards,
Arnout

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
#5 lore raw

RFC v2 1/1 ti-gfx: add new package

Quoted 7 lines · Arnout Vandecappelle
Quoted 2 lines · Spenser Gilliland

This is WIP of adding the TI Graphics SDK to Buildroot

It's not really _the_ graphics SDK, since it only supports a subset of TI
platforms (no OMAP1, OMAP2 or Davinci, and I'm not sure about OMAP5 either).

well, historically, in the Pandaboard days (OMAP4/OMAP5), a different graphics SDK was being used. While it was based on the same delivery from the GPU vendor (IMG), the entire GFX stack was heavily improved/modified to work with the omapdrm driver and dmabuf. I don't think what you call 'the TI graphics SDK' was ever used on Pandaboard. That said, i am no longer involved with that, and things might have changed or might change, so you need to understand from TI what is their commitment (if any) to support OMAP4 in this GFX SDK moving forward, especially given that the PandaBoard community seems to be (slowly but surely) disappearing... I expect things might get better for OMAP5, but the problem here might be the lack of board to test ;-)

#6 lore raw

RFC v2 1/1 ti-gfx: add new package

The SDK did support OMAP4 in 4_04_00_02. OMAP1/2 devices are too outdated to consider in the package.

Focus of this package is on the frame buffer based devices. Omapdrm/dmabuf and additional changes will be merged eventually.

regards,
Prabu

-----Original Message-----
From: [email protected] [mailto:buildroot-bounces at busybox.net] On Behalf Of Nicolas Dechesne
Sent: Wednesday, June 26, 2013 4:22 AM
To: Arnout Vandecappelle
Cc: buildroot at busybox.net
Subject: Re: [Buildroot] [RFC v2 1/1] ti-gfx: add new package

Quoted 7 lines · Arnout Vandecappelle
Quoted 2 lines · Spenser Gilliland

This is WIP of adding the TI Graphics SDK to Buildroot

It's not really _the_ graphics SDK, since it only supports a subset
of TI platforms (no OMAP1, OMAP2 or Davinci, and I'm not sure about OMAP5 either).

well, historically, in the Pandaboard days (OMAP4/OMAP5), a different graphics SDK was being used. While it was based on the same delivery from the GPU vendor (IMG), the entire GFX stack was heavily improved/modified to work with the omapdrm driver and dmabuf. I don't think what you call 'the TI graphics SDK' was ever used on Pandaboard.
That said, i am no longer involved with that, and things might have changed or might change, so you need to understand from TI what is their commitment (if any) to support OMAP4 in this GFX SDK moving forward, especially given that the PandaBoard community seems to be (slowly but surely) disappearing... I expect things might get better for OMAP5, but the problem here might be the lack of board to test ;-) _______________________________________________ buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot

#7 lore raw

[Buildroot] About ti-gfx package

Hi,

My company is working on a AM3517 board. We are using Technexion's TAM3517 board for development right now.

I was working on TI's SDK a few weeks ago but some more urgent things came up. I would definitely like to help if we can get it working in Buildroot. I can also help in testing.

I don't know much about the history about TI's GFX SDK. I don't know about the soft float issue either. I was trying to run it with mfpu=neon parameter in the toolchain.

There are some other things I'm not certain.

I was working with 4_09_00_01 version and I think it works on AM35xx right?

Also I thought TI only supported kernels up to 2.6.37 for AM3517. I can't remember where I get that idea, but I know Technexion doesn't provide any later kernels for their AM3517 boards.

I don't know how buildroot works exactly but I started reading the documentation. I hope I can help. We are hoping to use EGL and Qt5.

Sorry if I wrote technically incorrect stuff, I worked on SGX SDK for a short while last month and I realize I have forgotten most of what I did now : )

#8 lore raw

RFC v2 1/1 ti-gfx: add new package

In reply to Arnout Vandecappelle

On Tue, 25 Jun 2013 23:42:58 +0200

Dear Arnout,

Quoted 13 lines
Quoted 1 line

This is WIP of adding the TI Graphics SDK to Buildroot

It's not really _the_ graphics SDK, since it only supports a subset
of TI platforms (no OMAP1, OMAP2 or Davinci, and I'm not sure about OMAP5 either).

Quoted 7 lines

Current Status:
Kernel Drivers load without errror. pvrsrvctl starts with no errors.
Some demos run, others do not.
gstreamer videotestsrc ! eglglessink does not work.

Quoted 7 lines
Quoted 3 lines

TODO:
Install startup files for sgx core. Create .pc files to simplify additional packaging.

We don't usually create pc files if the package doesn't provide
them. It's not really needed, because packages that use the library will anyway not use pkg-config to get the package info.

This was done for the rpi-userland component. It's a sensible thing to do as many packages require egl or gles libraries. It's easier to just add an PKG_CHECK_MODULES to configure.ac then to add a bunch of different ifdefs for each and every opengl implementation. Thus, I believe that this should be included.

Quoted 4 lines
Quoted 1 line

Hard Float Binaries

Doesn't the package contain soft-float binary libraries? Then
hard-float won't be possible, right?

TI provides a set of hard float binaries as well; however, they are in a different download.

Quoted 17 lines
Quoted 17 lines

Testing, lots of testing.

Additional Info:
I've been using the 3.9.6-x3 tag of the kernel at
https://github.com/RobertCNelson/stable-kernel by use of the LINUX_OVERRIDE_SRCDIR option.

You must use a soft-float toolchain (ie Code Sourcery) as the
binaries provided by the Graphics SDK are soft-float. (hard float is on the TODO list)

To load the driver manually use the following:
modprobe omaplfb
modprobe bufferclass-ti
pvrsrvctl --start --no-module

Quoted 5 lines
Quoted 1 line

Please keep a changelog of the history of your patch in the commit
message, so we can keep track of which review comments you've already taken into account.

Will do.

Quoted 4 lines

In this particular case, I notice that Thomas repeats a lot of
review comments that I've made a week ago, so writing "review comments from Arnout not taken into account" would have helped :-) Or maybe you missed those?

Sorry about that, they were good comments but I was just trying to get it functional and most of the comments were cosmetic in nature. I'll get them all fixed up soon.

Spenser

#9 lore raw

RFC v2 1/1 ti-gfx: add new package

Quoted 7 lines · Spenser Gilliland
Quoted 4 lines

In this particular case, I notice that Thomas repeats a lot of

Quoted 3 lines

review comments that I've made a week ago, so writing "review comments from Arnout not taken into account" would have helped:-) Or maybe you missed those?

Sorry about that, they were good comments but I was just trying to get it functional and most of the comments were cosmetic in nature. I'll get them all fixed up soon.

No, it's perfectly OK that you repost something without already taking
account all previously posted feedback. Just mention it in the patch comments.

FYI in case you don't know, the commit message is ideally formatted as
follows:

----------------------------------------------------
ti-gfx: new package

Anything else that should go in the git history (usually nothing for new packages).

---
Comments for the reviewers, e.g. "This is work in progress, this and that is still to do."

v3: modified here and there
v2: changed such and such
-----------------------------------------------------

Regards,
Arnout

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
#10 lore raw

RFC v2 1/1 ti-gfx: add new package

In reply to Arnout Vandecappelle

Dear Arnout Vandecappelle,

Quoted 4 lines · Arnout Vandecappelle

In this particular case, I notice that Thomas repeats a lot of review
comments that I've made a week ago, so writing "review comments from Arnout not taken into account" would have helped :-) Or maybe you missed those?

I've explicitly asked Spenser to send some RFC versions of his patches regularly, since other people are interested in OpenGL support for OMAP3/AM335x, and it also everyone to keep track of the status of Spenser's work. It is quite understandable that Spenser focuses first on getting the thing to work before cleaning up everything, so we should be tolerant with regard to the quality of those RFC patches and the fact that Spenser does not necessarily take into account all review comments immediately.

Best regards,

Thomas

Signature · 4 lines
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
#11 lore raw

RFC v2 1/1 ti-gfx: add new package

In reply to Spenser Gilliland

Hello Spenser,

There are 2 separate Graphics SDK packages for hard and soft float support. If you use " http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/gfxsdk/latest//exports/Graphics_SDK_setuplinux_4_09_00_01_hardfp_minimal_demos.bin" , you get hard float support.

Quoted 1 line
Quoted 1 line

You must use a soft-float toolchain (ie Code Sourcery) as the binaries

provided by the Graphics SDK are soft-float. (hard float is on the TODO list)

Which demos do not run ? Any logs ? I can come on IRC if help is needed,

Quoted 1 line
Quoted 1 line

Some demos run, others do not.

regards,
Prabu

-----Original Message-----
From: [email protected] [mailto:buildroot-bounces at busybox.net] On Behalf Of Spenser Gilliland
Sent: Tuesday, June 25, 2013 9:59 PM
To: buildroot at busybox.net
Subject: [Buildroot] [RFC v2 1/1] ti-gfx: add new package

This is WIP of adding the TI Graphics SDK to Buildroot

Current Status:
Kernel Drivers load without errror. pvrsrvctl starts with no errors.
Some demos run, others do not.
gstreamer videotestsrc ! eglglessink does not work.

TODO:
Install startup files for sgx core.
Create .pc files to simplify additional packaging. Hard Float Binaries
Testing, lots of testing.

Additional Info:
I've been using the 3.9.6-x3 tag of the kernel at
https://github.com/RobertCNelson/stable-kernel by use of the LINUX_OVERRIDE_SRCDIR option.

You must use a soft-float toolchain (ie Code Sourcery) as the binaries provided by the Graphics SDK are soft-float. (hard float is on the TODO list)

To load the driver manually use the following:

      modprobe omaplfb
      modprobe bufferclass-ti
      pvrsrvctl --start --no-module
---
 package/Config.in                              |    1 +
 package/opengl/libegl/libegl.mk                |    4 +
 package/opengl/libgles/libgles.mk              |    4 +
 package/opengl/libopenvg/libopenvg.mk          |    4 +
 package/ti-gfx/Config.in                       |   54 +++++++++++
 package/ti-gfx/ti-gfx-km_install_modules.patch |   14 +++
 package/ti-gfx/ti-gfx-newclkapi.patch          |   62 +++++++++++++
 package/ti-gfx/ti-gfx.mk                       |  116 ++++++++++++++++++++++++
 8 files changed, 259 insertions(+)
 create mode 100644 package/ti-gfx/Config.in  create mode 100644 package/ti-gfx/ti-gfx-km_install_modules.patch
 create mode 100644 package/ti-gfx/ti-gfx-newclkapi.patch
 create mode 100644 package/ti-gfx/ti-gfx.mk
package/Config.in +1 -0
@@ -291,6 +291,7 @@ source "package/snowball-hdmiservice/Config.in"
 source "package/sredird/Config.in"
 source "package/statserial/Config.in"
 source "package/sysstat/Config.in"
+source "package/ti-gfx/Config.in"
 source "package/ti-utils/Config.in"
 source "package/uboot-tools/Config.in"
 source "package/udev/Config.in"
package/opengl/libegl/libegl.mk +4 -0
@@ -10,6 +10,10 @@ ifeq ($(BR2_PACKAGE_RPI_USERLAND),y)  LIBEGL_DEPENDENCIES += rpi-userland  endif
 
+ifeq ($(BR2_PACKAGE_TI_GFX),y)
+LIBEGL_DEPENDENCIES += ti-gfx
+endif
+
 ifeq ($(LIBEGL_DEPENDENCIES),)
 define LIBEGL_CONFIGURE_CMDS
 	echo "No libEGL implementation selected. Configuration error."
package/opengl/libgles/libgles.mk +4 -0
index a0048a7..d2fe11b 100644
@@ -10,6 +10,10 @@ ifeq ($(BR2_PACKAGE_RPI_USERLAND),y)  LIBGLES_DEPENDENCIES += rpi-userland  endif
 
+ifeq ($(BR2_PACKAGE_TI_GFX),y)
+LIBGLES_DEPENDENCIES += ti-gfx
+endif
+
 ifeq ($(LIBGLES_DEPENDENCIES),)
 define LIBGLES_CONFIGURE_CMDS
 	echo "No libGLES implementation selected. Configuration error."
package/opengl/libopenvg/libopenvg.mk +4 -0
index 03f59ba..118ae7f 100644
@@ -10,6 +10,10 @@ ifeq ($(BR2_PACKAGE_RPI_USERLAND),y)  LIBOPENVG_DEPENDENCIES += rpi-userland  endif
 
+ifeq ($(BR2_PACKAGE_TI_GFX),y)
+LIBOPENVG_DEPENDENCIES += ti-gfx
+endif
+
 ifeq ($(LIBOPENVG_DEPENDENCIES),)
 define LIBOPENVG_CONFIGURE_CMDS
 	echo "No libOpenVG implementation selected. Configuration error."
package/ti-gfx/Config.in new file +54 -0

54 lines not on this page · raw message

+comment "requires an external eglibc/glibc based toolchain"
+ depends on !(BR2_TOOLCHAIN_EXTERNAL_GLIBC || BR2_TOOLCHAIN_CTNG_eglibc
+|| BR2_TOOLCHAIN_CTNG_glibc)

package/ti-gfx/ti-gfx-km_install_modules.patch new file +14 -0
new file mode 100644
index 0000000..63bfd19
@@ -0,0 +1,14 @@
+Index: ti-gfx-4_09_00_01/GFX_Linux_KM/Makefile
+===================================================================
+--- ti-gfx-4_09_00_01.orig/GFX_Linux_KM/Makefile	2013-03-07 11:00:11.000000000 -0600
++++ ti-gfx-4_09_00_01/GFX_Linux_KM/Makefile	2013-05-23 01:36:29.356676281 -0500
+@@ -479,6 +479,9 @@
+ all:
+ 	$(MAKE) -C $(KERNELDIR) M=`pwd` $*
+ 
++install:
++	$(MAKE) -C $(KERNELDIR) M=`pwd` modules_install
++
+ clean:
+ 	@find . -name "*.o" -exec rm -r {} \;
+ 	@find . -name "*.ko" -exec rm -r {} \;
package/ti-gfx/ti-gfx-newclkapi.patch new file +62 -0

62 lines not on this page · raw message

+
+ // SysDisableSGXInterrupts(psSysData);
+

package/ti-gfx/ti-gfx.mk new file +116 -0

116 lines not on this page · raw message

+ ( $(TI_GFX_MAKE_CMD) clean )
+endef
+
+$(eval $(generic-package))
--
1.7.9.5

_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot

#12 lore raw

RFC v2 1/1 ti-gfx: add new package

Quoted 7 lines · Prabindh

Hello Spenser,

There are 2 separate Graphics SDK packages for hard and soft float
support. If you use "
http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/gfxsdk/latest//exports/Graphics_SDK_setuplinux_4_09_00_01_hardfp_minimal_demos.bin" , you get hard float support.

Quoted 8 lines
Quoted 2 lines
Quoted 2 lines

You must use a soft-float toolchain (ie Code Sourcery) as the
binaries

provided by the Graphics SDK are soft-float. (hard float is on the
TODO list)

Which demos do not run ? Any logs ? I can come on IRC if help is needed,

Here's some logs from failed tests. Also, I attempted to run the ews_server without success. All other tests run to completion and have a return code of 0.

# sgx_render_flip_test 
----------------------- Start -----------------------
[ 7870.928863] PVR_K:(Error): PVRSRVCreateDCSwapChainKM: Failed to
create 3rd party SwapChain [1409,
home/spenser/Code/buildroot/output/build/ti-gfx-4_09_00_01/GFX_Linux_KM/services4/srvkm/common/deviceclass.c]
PVR:(Error): PVRSRVCreateDCSwapChain: Error - 18 returned
[505, /bridged_pvr_dc_glue.c] Unable to create Display Class flip chain
(PVRSRV_ERROR_TOOMANYBUFFERS) Consider disabling flipping using the
option -nf Aborted
# sgx_flip_test
----------------------- Start -----------------------
Call PVRSRVConnect with a valid argument:[ 7794.178863] PVR_K:(Error):
PVRSRVCreateDCSwapChainKM: Failed to create 3rd party SwapChain [1409,
home/spenser/Code/buildroot/output/build/ti-gfx-4_09_00_01/GFX_Linux_KM/services4/srvkm/common/deviceclass.c]

OK
Get number of devices from PVRSRVEnumerateDevices:
OK
.... Reported 1 devices
.... Device Number | Device Type

            0000    | PVRSRV_DEVICE_ID_SGX

Attempt to acquire device 0:
OK
Getting SGX Client info
OK
.... ui32ProcessID:1272
Display Class API: enumerate devices
OK
PVRSRVEnumerateDeviceClass() returns 1 display device(s)
OK
Attempt to create memory context for SGX:
OK
Display Class API: open device
OK
Display Class API: Get display info
OK
.... Name:PowerVR OMAP Linux Display Driver
.... MaxSwapChains:1
.... MaxSwapChainBuffers:1
.... MinSwapInterval:0
.... MaxSwapInterval:1
Display Class API: enumerate display formats
OK
OK
.... Display format 0 - Pixelformat:1
Display Class API: enumerate display dimensions
OK
OK
.... Display dimensions 0 - ByteStride:1280 Width:640 Height:480 Display Class API: get the system (primary) buffer
OK
.... Shared heap 0 - HeapID:0x7000000 DevVAddr:0x1000 Size:0x87fe000
Attr:0x2014200 .... Shared heap 1 - HeapID:0x7000001 DevVAddr:0xc800000 Size:0xfff000 Attr:0x2024200 .... Shared heap 2 - HeapID:0x7000002 DevVAddr:0xe400000 Size:0x7f000 Attr:0x2024200 .... Shared heap 3 - HeapID:0x7000003 DevVAddr:0xf000000 Size:0x3ff000 Attr:0x2024200 .... Shared heap 4 - HeapID:0x7000004 DevVAddr:0xf400000 Size:0x4ff000 Attr:0x2014200 .... Shared heap 5 - HeapID:0x7000005 DevVAddr:0xfc00000 Size:0x1ff000 Attr:0x2014200 .... Shared heap 6 - HeapID:0x7000006 DevVAddr:0xdc00000 Size:0x7ff000 Attr:0x2014200 .... Shared heap 7 - HeapID:0x7000007 DevVAddr:0xe800000 Size:0x7ff000 Attr:0x2014200 .... Shared heap 8 - HeapID:0x7000008 DevVAddr:0xd800000 Size:0x3ff000 Attr:0x2024200 .... Shared heap 9 - HeapID:0x7000009 DevVAddr:0x8800000 Size:0x0 Attr:0x2024200 .... Shared heap 10 - HeapID:0x700000a DevVAddr:0x8800000 Size:0x3fff000 Attr:0x2014200 Display Class API:
map display surface to SGX OK PVR:(Error): PVRSRVCreateDCSwapChain:
Error - 18 returned [505, /bridged_pvr_dc_glue.c] FAIL - PVRSRV_ERROR_TOOMANYBUFFERS #

# ews_server
PVR: Hint: Setting WindowSystem to libpvrPVR2D_FRONTWSEGL.so
PVR:(Error): PVRSRVMetricsTimeNow: using (potentially) low resolution
timer [95, /pvr_metrics.c] PVR:(Warning): LoadWSModule: Window system
module libpvrPVR2D_FRONTWSEGL.so did not validate native display
[116, /generic_ws.c] PVR:(Warning): LoadWSModule: Window system module
libpvrPVR2D_FLIPWSEGL.so did not validate native display
[116, /generic_ws.c] PVR:(Error): Couldn't load WS module
libpvrPVR2D_DRIWSEGL.so [62, /generic_ws.c] EWS: Fatal error:
eglGetDisplay EWS:    (in pm_thread_main at pm.c line 295) Aborted

Regards,
Spenser