diff mbox

[RFC,v2,1/1] ti-gfx: add new package

Message ID 1372177754-13431-1-git-send-email-spenser@gillilanding.com
State Superseded
Headers show

Commit Message

Spenser Gilliland June 25, 2013, 4:29 p.m. UTC
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

Signed-off-by: Spenser Gilliland <spenser@gillilanding.com>
---
 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

Comments

Thomas Petazzoni June 25, 2013, 8:31 p.m. UTC | #1
Dear Spenser Gilliland,

On Tue, 25 Jun 2013 11:29:14 -0500, Spenser Gilliland wrote:
> 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.

> 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.

> 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?

> 
>    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.

> +	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.

> +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.

> +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.

> diff --git a/package/ti-gfx/ti-gfx-km_install_modules.patch b/package/ti-gfx/ti-gfx-km_install_modules.patch
> new file mode 100644
> index 0000000..63bfd19
> --- /dev/null
> +++ b/package/ti-gfx/ti-gfx-km_install_modules.patch

Missing description + SoB.

> @@ -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.

> --- /dev/null
> +++ b/package/ti-gfx/ti-gfx-newclkapi.patch
> @@ -0,0 +1,62 @@

Missing description + SoB.

> +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"));
> +-	
> ++#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.

> +@@ -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.

> +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) \
> +		--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.

> +define TI_GFX_BUILD_CMDS
> +	( $(TI_GFX_MAKE_CMD) all )
> +endef

Parenthesis are not needed.

> +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
> +
> +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.

> +		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
Arnout Vandecappelle June 25, 2013, 9:42 p.m. UTC | #2
On 25/06/13 18:29, Spenser Gilliland wrote:
> 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).

>
> 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.

>     Hard Float Binaries

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

>     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
>
> Signed-off-by: Spenser Gilliland<spenser@gillilanding.com>

  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
Nicolas Dechesne June 25, 2013, 10:51 p.m. UTC | #3
On Tue, Jun 25, 2013 at 11:42 PM, Arnout Vandecappelle <arnout@mind.be> wrote:
> On 25/06/13 18:29, Spenser Gilliland wrote:
>>
>> 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 ;-)
Sundareson, Prabindh June 26, 2013, 2:36 a.m. UTC | #4
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: buildroot-bounces@busybox.net [mailto:buildroot-bounces@busybox.net] On Behalf Of Nicolas Dechesne
Sent: Wednesday, June 26, 2013 4:22 AM
To: Arnout Vandecappelle
Cc: buildroot@busybox.net
Subject: Re: [Buildroot] [RFC v2 1/1] ti-gfx: add new package

On Tue, Jun 25, 2013 at 11:42 PM, Arnout Vandecappelle <arnout@mind.be> wrote:
> On 25/06/13 18:29, Spenser Gilliland wrote:
>>
>> 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@busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
Sinan Akpolat June 26, 2013, 8:59 a.m. UTC | #5
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 : )
Spenser Gilliland June 26, 2013, 5:52 p.m. UTC | #6
On Tue, 25 Jun 2013 22:31:25 +0200
Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote:

Dear Thomas, 

> 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.

> 
> > 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.   

> 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

> > 
> >    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.
 
> > +	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.
 
> > +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. 

Will fix.

> > +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.

> > diff --git a/package/ti-gfx/ti-gfx-km_install_modules.patch
> > b/package/ti-gfx/ti-gfx-km_install_modules.patch new file mode
> > 100644 index 0000000..63bfd19
> > --- /dev/null
> > +++ b/package/ti-gfx/ti-gfx-km_install_modules.patch
> 
> Missing description + SoB.

Will fix.

> 
> > @@ -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.

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

> > --- /dev/null
> > +++ b/package/ti-gfx/ti-gfx-newclkapi.patch
> > @@ -0,0 +1,62 @@
> 
> Missing description + SoB.
> 
> > +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")); +-	
> > ++#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.

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

> 
> > +@@ -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.

Oops, will fix with method above.

> 
> > +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) \
> > +		--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

Will fix. This is much cleaner.

> 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.
 
> > +define TI_GFX_BUILD_CMDS
> > +	( $(TI_GFX_MAKE_CMD) all )
> > +endef
> 
> Parenthesis are not needed.

Will fix.

> > +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
> > +
> > +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.

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.  
 
> > +		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
>
Spenser Gilliland June 26, 2013, 5:53 p.m. UTC | #7
On Tue, 25 Jun 2013 23:42:58 +0200

Dear Arnout,

> > 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).
> 
> >
> > 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.

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.

> >     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.

> 
> >     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
> >
> > Signed-off-by: Spenser Gilliland<spenser@gillilanding.com>
> 
>   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.
 
>   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
Thomas Petazzoni June 26, 2013, 7:46 p.m. UTC | #8
Dear Spenser Gilliland,

On Wed, 26 Jun 2013 12:52:52 -0500, Spenser Gilliland wrote:

> > 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!

> > > 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.   

Ok.

> > 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.



> > 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!


> > 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
Thomas Petazzoni June 26, 2013, 7:50 p.m. UTC | #9
Dear Arnout Vandecappelle,

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

>   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
Arnout Vandecappelle June 26, 2013, 7:50 p.m. UTC | #10
On 26/06/13 19:53, Spenser Gilliland wrote:
>>    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.

  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).

Signed-off-by: You Know Who <ykw@buildroot.net>
---
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
diff mbox

Patch

diff --git a/package/Config.in b/package/Config.in
index 0eb6a9c..3429c0e 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -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"
diff --git a/package/opengl/libegl/libegl.mk b/package/opengl/libegl/libegl.mk
index bd8040d..00e1f19 100644
--- a/package/opengl/libegl/libegl.mk
+++ b/package/opengl/libegl/libegl.mk
@@ -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."
diff --git a/package/opengl/libgles/libgles.mk b/package/opengl/libgles/libgles.mk
index a0048a7..d2fe11b 100644
--- a/package/opengl/libgles/libgles.mk
+++ b/package/opengl/libgles/libgles.mk
@@ -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."
diff --git a/package/opengl/libopenvg/libopenvg.mk b/package/opengl/libopenvg/libopenvg.mk
index 03f59ba..118ae7f 100644
--- a/package/opengl/libopenvg/libopenvg.mk
+++ b/package/opengl/libopenvg/libopenvg.mk
@@ -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."
diff --git a/package/ti-gfx/Config.in b/package/ti-gfx/Config.in
new file mode 100644
index 0000000..79116a2
--- /dev/null
+++ b/package/ti-gfx/Config.in
@@ -0,0 +1,54 @@ 
+config BR2_PACKAGE_TI_GFX
+	bool "ti-gfx"
+	select BR2_LINUX_KERNEL
+	select BR2_PACKAGE_DEVMEM2 # Runtime dependency
+	select BR2_PACKAGE_HAS_OPENGL_EGL
+	select BR2_PACKAGE_HAS_OPENGL_ES
+	depends on BR2_TOOLCHAIN_EXTERNAL_GLIBC || BR2_TOOLCHAIN_CTNG_eglibc || BR2_TOOLCHAIN_CTNG_glibc
+	help
+	  Graphics libraries for TI boards.
+
+	  http://downloads.ti.com/dsps/dsps_public_sw/gfxsdk/
+
+if BR2_PACKAGE_TI_GFX
+
+config BR2_PACKAGE_TI_GFX_DEBUG
+	bool "enable debug support"
+	help
+	  Turn on debugging in kernel module and install libraries built with
+	  debugging enabled
+
+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"
+	help
+	 OMAP35xx, AM35xx Rev 3.1+ 
+
+config BR2_PACKAGE_TI_GFX_ES5
+	bool "es5.x"
+	help
+	  AM37xx, DM37xx
+
+config BR2_PACKAGE_TI_GFX_ES6
+	bool "es6.x"
+	help
+	  AM387x, C6A814x, AM389x, C6A816x
+
+config BR2_PACKAGE_TI_GFX_ES8
+	bool "es8.x"
+	help
+	  AM335x
+
+endchoice
+
+endif
+
+comment "requires an external eglibc/glibc based toolchain"
+	depends on !(BR2_TOOLCHAIN_EXTERNAL_GLIBC || BR2_TOOLCHAIN_CTNG_eglibc || BR2_TOOLCHAIN_CTNG_glibc)
diff --git a/package/ti-gfx/ti-gfx-km_install_modules.patch b/package/ti-gfx/ti-gfx-km_install_modules.patch
new file mode 100644
index 0000000..63bfd19
--- /dev/null
+++ b/package/ti-gfx/ti-gfx-km_install_modules.patch
@@ -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 {} \;
diff --git a/package/ti-gfx/ti-gfx-newclkapi.patch b/package/ti-gfx/ti-gfx-newclkapi.patch
new file mode 100644
index 0000000..6337496
--- /dev/null
+++ b/package/ti-gfx/ti-gfx-newclkapi.patch
@@ -0,0 +1,62 @@ 
+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"));
+-	
++#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);
+ 	if (res < 0)
+         {
+                 PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX functional clock (%d)", res));
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
++                clk_unprepare(psSysSpecData->psSGX_FCK);
++                return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK;
++        }
++
++	res=clk_prepare(psSysSpecData->psSGX_ICK);
++	if(res < 0)
++        {
++                PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX functional clock (%d)", res));
++                clk_unprepare(psSysSpecData->psSGX_FCK);
++#endif
+                 return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK;
+         }
+ 
+@@ -178,8 +197,13 @@
+         if (res < 0)
+         {
+                 PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX interface clock (%d)", res));
+-
++#if KERNEL_VERSION_CODE >= KERNEL_VERSION(3,2,0)
++                clk_unprepare(psSysSpecData->psSGX_ICK);
++#endif
+                 clk_disable(psSysSpecData->psSGX_FCK);
++#if KERNEL_VERSION_CODE >= KERNEL_VERSION(3,2,0)
++                clk_unprepare(psSysSpecData->psSGX_FCK);
++#endif
+                 return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK;
+         }
+ 
+@@ -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);
+ 
+ //	SysDisableSGXInterrupts(psSysData);
+ 
diff --git a/package/ti-gfx/ti-gfx.mk b/package/ti-gfx/ti-gfx.mk
new file mode 100644
index 0000000..670ba50
--- /dev/null
+++ b/package/ti-gfx/ti-gfx.mk
@@ -0,0 +1,116 @@ 
+###############################################################################
+#
+# ti-gfx 
+#
+###############################################################################
+
+TI_GFX_VERSION = 4_09_00_01
+TI_GFX_SOURCE = Graphics_SDK_setuplinux_$(TI_GFX_VERSION)_minimal_demos.bin
+TI_GFX_SITE = http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/gfxsdk/$(TI_GFX_VERSION)/exports/
+TI_GFX_LICENSE = Technology / Software Publicly Available
+TI_GFX_LICENSE_FILES = TSPA.txt
+TI_GFX_INSTALL_STAGING = YES
+
+TI_GFX_DEPENDENCIES = linux
+
+ifeq ($(BR2_PACKAGE_TI_GFX_ES3),y)
+TI_GFX_OMAPES = 3.x
+TI_GFX_PLATFORM = omap3
+endif
+ifeq ($(BR2_PACKAGE_TI_GFX_ES5),y)
+TI_GFX_OMAPES = 5.x
+TI_GFX_PLATFORM = omap3630 
+endif
+ifeq ($(BR2_PACKAGE_TI_GFX_ES6),y)
+TI_GFX_OMPAES = 6.x
+TI_GFX_PLATFORM = ti81xx 
+endif
+ifeq ($(BR2_PACKAGE_TI_GFX_ES8),y)
+TI_GFX_OMAPES = 8.x
+TI_GFX_PLATFORM = ti335x
+endif
+
+ifeq ($(BR2_PACKAGE_TI_GFX_DEBUG),y)
+TI_GFX_DEBUG_LIB = dbg
+TI_GFX_DEBUG_KM = debug
+else
+TI_GFX_DEBUG_LIB = rel
+TI_GFX_DEBUG_KM = release
+endif
+
+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) \
+		--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)
+
+define TI_GFX_BUILD_CMDS
+	( $(TI_GFX_MAKE_CMD) all )
+endef
+
+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
+
+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 \
+		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
+
+$(eval $(generic-package))