Patchwork [meta-fsl-arm,v2,3/3] linux-imx (3.0.35): Drop recipe from base BSP

login
register
mail settings
Submitter Otavio Salvador
Date March 13, 2014, 2:04 p.m.
Message ID <1394719487-7243-3-git-send-email-otavio@ossystems.com.br>
Download mbox | patch
Permalink /patch/68599/
State Accepted
Delegated to: Otavio Salvador
Headers show

Comments

Otavio Salvador - March 13, 2014, 2:04 p.m.
The 1.6 release cycle is focused in the 3.10.17-1.0.0 BSP and has no
compromise in test and maintain the 3.0.35 compatibility. This does
not mean the support as a whole will be dropped but no board in
meta-fsl-arm BSP ought to use it.

Users which need to use Freescale reference designs with 3.0.35 ought
to keep using the Dora branch.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---

Changes in v2:
- new patch

 ...Fix-getrusage-related-build-failure-on-gl.patch |   43 -
 ...fix-memset-related-crashes-caused-by-rece.patch |  259 -
 .../0003-ARM-7670-1-fix-the-memset-fix.patch       |   87 -
 ...6-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch |   43 -
 ...0005-ENGR00271359-Add-Multi-touch-support.patch |   98 -
 .../0006-Add-support-for-DVI-monitors.patch        |  227 -
 ...6-board-mx6q_sabresd-Register-SDHC3-first.patch |   38 -
 ...0-gpu-viante-4.6.9p13-kernel-part-integra.patch | 6261 --------------------
 ...m-vivante-Add-00-sufix-in-returned-bus-Id.patch |   31 -
 ...-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch |  143 -
 .../linux/linux-imx-3.0.35/mx6dl/defconfig         |  301 -
 .../linux/linux-imx-3.0.35/mx6q/defconfig          |  302 -
 .../linux/linux-imx-3.0.35/mx6s/defconfig          |  267 -
 .../linux/linux-imx-3.0.35/mx6sl/defconfig         |  267 -
 recipes-kernel/linux/linux-imx_3.0.35.bb           |   26 -
 15 files changed, 8393 deletions(-)
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0006-Add-support-for-DVI-monitors.patch
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6dl/defconfig
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6q/defconfig
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6s/defconfig
 delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6sl/defconfig
 delete mode 100644 recipes-kernel/linux/linux-imx_3.0.35.bb
Daiane Angolini - March 13, 2014, 2:10 p.m.
On 13-03-2014 11:04, Otavio Salvador wrote:
> The 1.6 release cycle is focused in the 3.10.17-1.0.0 BSP and has no
> compromise in test and maintain the 3.0.35 compatibility. This does
> not mean the support as a whole will be dropped but no board in
> meta-fsl-arm BSP ought to use it.
>
> Users which need to use Freescale reference designs with 3.0.35 ought
> to keep using the Dora branch.

I'm OK with it.

And I think there is no meta-fsl-arm-extra board depending on this right 
now. Could you confirm?



Daiane

>
> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
> ---
>
> Changes in v2:
> - new patch
>
>   ...Fix-getrusage-related-build-failure-on-gl.patch |   43 -
>   ...fix-memset-related-crashes-caused-by-rece.patch |  259 -
>   .../0003-ARM-7670-1-fix-the-memset-fix.patch       |   87 -
>   ...6-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch |   43 -
>   ...0005-ENGR00271359-Add-Multi-touch-support.patch |   98 -
>   .../0006-Add-support-for-DVI-monitors.patch        |  227 -
>   ...6-board-mx6q_sabresd-Register-SDHC3-first.patch |   38 -
>   ...0-gpu-viante-4.6.9p13-kernel-part-integra.patch | 6261 --------------------
>   ...m-vivante-Add-00-sufix-in-returned-bus-Id.patch |   31 -
>   ...-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch |  143 -
>   .../linux/linux-imx-3.0.35/mx6dl/defconfig         |  301 -
>   .../linux/linux-imx-3.0.35/mx6q/defconfig          |  302 -
>   .../linux/linux-imx-3.0.35/mx6s/defconfig          |  267 -
>   .../linux/linux-imx-3.0.35/mx6sl/defconfig         |  267 -
>   recipes-kernel/linux/linux-imx_3.0.35.bb           |   26 -
>   15 files changed, 8393 deletions(-)
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0006-Add-support-for-DVI-monitors.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6dl/defconfig
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6q/defconfig
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6s/defconfig
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6sl/defconfig
>   delete mode 100644 recipes-kernel/linux/linux-imx_3.0.35.bb
>
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch b/recipes-kernel/linux/linux-imx-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
> deleted file mode 100644
> index abc02c9..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -From 503daf4789dd23e4dc1e16c256de0c163fc2bf87 Mon Sep 17 00:00:00 2001
> -From: Markus Trippelsdorf <markus@trippelsdorf.de>
> -Date: Wed, 4 Apr 2012 10:45:27 +0200
> -Subject: [PATCH] perf tools: Fix getrusage() related build failure on glibc
> - trunk
> -MIME-Version: 1.0
> -Content-Type: text/plain; charset=UTF-8
> -Content-Transfer-Encoding: 8bit
> -Organization: O.S. Systems Software LTDA.
> -
> -On a system running glibc trunk perf doesn't build:
> -
> -    CC builtin-sched.o
> -builtin-sched.c: In function ‘get_cpu_usage_nsec_parent’: builtin-sched.c:399:16: error: storage size of ‘ru’ isn’t known builtin-sched.c:403:2: error: implicit declaration of function ‘getrusage’ [-Werror=implicit-function-declaration]
> -    [...]
> -
> -Fix it by including sys/resource.h.
> -
> -Upstream-Status: Pending
> -
> -Signed-off-by: Markus Trippelsdorf <markus@trippelsdorf.de>
> -Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> -Link: http://lkml.kernel.org/r/20120404084527.GA294@x4
> -Signed-off-by: Ingo Molnar <mingo@kernel.org>
> ----
> - tools/perf/builtin-sched.c | 1 +
> - 1 file changed, 1 insertion(+)
> -
> -diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
> -index dcfe887..3632c2f 100644
> ---- a/tools/perf/builtin-sched.c
> -+++ b/tools/perf/builtin-sched.c
> -@@ -14,6 +14,7 @@
> - #include "util/debug.h"
> -
> - #include <sys/prctl.h>
> -+#include <sys/resource.h>
> -
> - #include <semaphore.h>
> - #include <pthread.h>
> ---
> -1.8.4.rc3
> -
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch b/recipes-kernel/linux/linux-imx-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
> deleted file mode 100644
> index 4c31e74..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
> +++ /dev/null
> @@ -1,259 +0,0 @@
> -From 2235b85f1c76d98b5f1e160cbd0a61a84c15e125 Mon Sep 17 00:00:00 2001
> -From: Ivan Djelic <ivan.djelic@parrot.com>
> -Date: Wed, 6 Mar 2013 20:09:27 +0100
> -Subject: [PATCH] ARM: 7668/1: fix memset-related crashes caused by recent GCC
> - (4.7.2) optimizations
> -Organization: O.S. Systems Software LTDA.
> -
> -Recent GCC versions (e.g. GCC-4.7.2) perform optimizations based on
> -assumptions about the implementation of memset and similar functions.
> -The current ARM optimized memset code does not return the value of
> -its first argument, as is usually expected from standard implementations.
> -
> -For instance in the following function:
> -
> -void debug_mutex_lock_common(struct mutex *lock, struct mutex_waiter *waiter)
> -{
> -	memset(waiter, MUTEX_DEBUG_INIT, sizeof(*waiter));
> -	waiter->magic = waiter;
> -	INIT_LIST_HEAD(&waiter->list);
> -}
> -
> -compiled as:
> -
> -800554d0 <debug_mutex_lock_common>:
> -800554d0:       e92d4008        push    {r3, lr}
> -800554d4:       e1a00001        mov     r0, r1
> -800554d8:       e3a02010        mov     r2, #16 ; 0x10
> -800554dc:       e3a01011        mov     r1, #17 ; 0x11
> -800554e0:       eb04426e        bl      80165ea0 <memset>
> -800554e4:       e1a03000        mov     r3, r0
> -800554e8:       e583000c        str     r0, [r3, #12]
> -800554ec:       e5830000        str     r0, [r3]
> -800554f0:       e5830004        str     r0, [r3, #4]
> -800554f4:       e8bd8008        pop     {r3, pc}
> -
> -GCC assumes memset returns the value of pointer 'waiter' in register r0; causing
> -register/memory corruptions.
> -
> -This patch fixes the return value of the assembly version of memset.
> -It adds a 'mov' instruction and merges an additional load+store into
> -existing load/store instructions.
> -For ease of review, here is a breakdown of the patch into 4 simple steps:
> -
> -Step 1
> -======
> -Perform the following substitutions:
> -ip -> r8, then
> -r0 -> ip,
> -and insert 'mov ip, r0' as the first statement of the function.
> -At this point, we have a memset() implementation returning the proper result,
> -but corrupting r8 on some paths (the ones that were using ip).
> -
> -Step 2
> -======
> -Make sure r8 is saved and restored when (! CALGN(1)+0) == 1:
> -
> -save r8:
> --       str     lr, [sp, #-4]!
> -+       stmfd   sp!, {r8, lr}
> -
> -and restore r8 on both exit paths:
> --       ldmeqfd sp!, {pc}               @ Now <64 bytes to go.
> -+       ldmeqfd sp!, {r8, pc}           @ Now <64 bytes to go.
> -(...)
> -        tst     r2, #16
> -        stmneia ip!, {r1, r3, r8, lr}
> --       ldr     lr, [sp], #4
> -+       ldmfd   sp!, {r8, lr}
> -
> -Step 3
> -======
> -Make sure r8 is saved and restored when (! CALGN(1)+0) == 0:
> -
> -save r8:
> --       stmfd   sp!, {r4-r7, lr}
> -+       stmfd   sp!, {r4-r8, lr}
> -
> -and restore r8 on both exit paths:
> -        bgt     3b
> --       ldmeqfd sp!, {r4-r7, pc}
> -+       ldmeqfd sp!, {r4-r8, pc}
> -(...)
> -        tst     r2, #16
> -        stmneia ip!, {r4-r7}
> --       ldmfd   sp!, {r4-r7, lr}
> -+       ldmfd   sp!, {r4-r8, lr}
> -
> -Step 4
> -======
> -Rewrite register list "r4-r7, r8" as "r4-r8".
> -
> -Upstream-Status: Pending
> -
> -Signed-off-by: Ivan Djelic <ivan.djelic@parrot.com>
> -Reviewed-by: Nicolas Pitre <nico@linaro.org>
> -Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
> -Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
> -(cherry picked from commit 455bd4c430b0c0a361f38e8658a0d6cb469942b5)
> ----
> - arch/arm/lib/memset.S | 85 ++++++++++++++++++++++++++-------------------------
> - 1 file changed, 44 insertions(+), 41 deletions(-)
> -
> -diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
> -index 650d592..d912e73 100644
> ---- a/arch/arm/lib/memset.S
> -+++ b/arch/arm/lib/memset.S
> -@@ -19,9 +19,9 @@
> - 1:	subs	r2, r2, #4		@ 1 do we have enough
> - 	blt	5f			@ 1 bytes to align with?
> - 	cmp	r3, #2			@ 1
> --	strltb	r1, [r0], #1		@ 1
> --	strleb	r1, [r0], #1		@ 1
> --	strb	r1, [r0], #1		@ 1
> -+	strltb	r1, [ip], #1		@ 1
> -+	strleb	r1, [ip], #1		@ 1
> -+	strb	r1, [ip], #1		@ 1
> - 	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))
> - /*
> -  * The pointer is now aligned and the length is adjusted.  Try doing the
> -@@ -29,10 +29,14 @@
> -  */
> -
> - ENTRY(memset)
> --	ands	r3, r0, #3		@ 1 unaligned?
> -+/*
> -+ * Preserve the contents of r0 for the return value.
> -+ */
> -+	mov	ip, r0
> -+	ands	r3, ip, #3		@ 1 unaligned?
> - 	bne	1b			@ 1
> - /*
> -- * we know that the pointer in r0 is aligned to a word boundary.
> -+ * we know that the pointer in ip is aligned to a word boundary.
> -  */
> - 	orr	r1, r1, r1, lsl #8
> - 	orr	r1, r1, r1, lsl #16
> -@@ -43,29 +47,28 @@ ENTRY(memset)
> - #if ! CALGN(1)+0
> -
> - /*
> -- * We need an extra register for this loop - save the return address and
> -- * use the LR
> -+ * We need 2 extra registers for this loop - use r8 and the LR
> -  */
> --	str	lr, [sp, #-4]!
> --	mov	ip, r1
> -+	stmfd	sp!, {r8, lr}
> -+	mov	r8, r1
> - 	mov	lr, r1
> -
> - 2:	subs	r2, r2, #64
> --	stmgeia	r0!, {r1, r3, ip, lr}	@ 64 bytes at a time.
> --	stmgeia	r0!, {r1, r3, ip, lr}
> --	stmgeia	r0!, {r1, r3, ip, lr}
> --	stmgeia	r0!, {r1, r3, ip, lr}
> -+	stmgeia	ip!, {r1, r3, r8, lr}	@ 64 bytes at a time.
> -+	stmgeia	ip!, {r1, r3, r8, lr}
> -+	stmgeia	ip!, {r1, r3, r8, lr}
> -+	stmgeia	ip!, {r1, r3, r8, lr}
> - 	bgt	2b
> --	ldmeqfd	sp!, {pc}		@ Now <64 bytes to go.
> -+	ldmeqfd	sp!, {r8, pc}		@ Now <64 bytes to go.
> - /*
> -  * No need to correct the count; we're only testing bits from now on
> -  */
> - 	tst	r2, #32
> --	stmneia	r0!, {r1, r3, ip, lr}
> --	stmneia	r0!, {r1, r3, ip, lr}
> -+	stmneia	ip!, {r1, r3, r8, lr}
> -+	stmneia	ip!, {r1, r3, r8, lr}
> - 	tst	r2, #16
> --	stmneia	r0!, {r1, r3, ip, lr}
> --	ldr	lr, [sp], #4
> -+	stmneia	ip!, {r1, r3, r8, lr}
> -+	ldmfd	sp!, {r8, lr}
> -
> - #else
> -
> -@@ -74,54 +77,54 @@ ENTRY(memset)
> -  * whole cache lines at once.
> -  */
> -
> --	stmfd	sp!, {r4-r7, lr}
> -+	stmfd	sp!, {r4-r8, lr}
> - 	mov	r4, r1
> - 	mov	r5, r1
> - 	mov	r6, r1
> - 	mov	r7, r1
> --	mov	ip, r1
> -+	mov	r8, r1
> - 	mov	lr, r1
> -
> - 	cmp	r2, #96
> --	tstgt	r0, #31
> -+	tstgt	ip, #31
> - 	ble	3f
> -
> --	and	ip, r0, #31
> --	rsb	ip, ip, #32
> --	sub	r2, r2, ip
> --	movs	ip, ip, lsl #(32 - 4)
> --	stmcsia	r0!, {r4, r5, r6, r7}
> --	stmmiia	r0!, {r4, r5}
> --	tst	ip, #(1 << 30)
> --	mov	ip, r1
> --	strne	r1, [r0], #4
> -+	and	r8, ip, #31
> -+	rsb	r8, r8, #32
> -+	sub	r2, r2, r8
> -+	movs	r8, r8, lsl #(32 - 4)
> -+	stmcsia	ip!, {r4, r5, r6, r7}
> -+	stmmiia	ip!, {r4, r5}
> -+	tst	r8, #(1 << 30)
> -+	mov	r8, r1
> -+	strne	r1, [ip], #4
> -
> - 3:	subs	r2, r2, #64
> --	stmgeia	r0!, {r1, r3-r7, ip, lr}
> --	stmgeia	r0!, {r1, r3-r7, ip, lr}
> -+	stmgeia	ip!, {r1, r3-r8, lr}
> -+	stmgeia	ip!, {r1, r3-r8, lr}
> - 	bgt	3b
> --	ldmeqfd	sp!, {r4-r7, pc}
> -+	ldmeqfd	sp!, {r4-r8, pc}
> -
> - 	tst	r2, #32
> --	stmneia	r0!, {r1, r3-r7, ip, lr}
> -+	stmneia	ip!, {r1, r3-r8, lr}
> - 	tst	r2, #16
> --	stmneia	r0!, {r4-r7}
> --	ldmfd	sp!, {r4-r7, lr}
> -+	stmneia	ip!, {r4-r7}
> -+	ldmfd	sp!, {r4-r8, lr}
> -
> - #endif
> -
> - 4:	tst	r2, #8
> --	stmneia	r0!, {r1, r3}
> -+	stmneia	ip!, {r1, r3}
> - 	tst	r2, #4
> --	strne	r1, [r0], #4
> -+	strne	r1, [ip], #4
> - /*
> -  * When we get here, we've got less than 4 bytes to zero.  We
> -  * may have an unaligned pointer as well.
> -  */
> - 5:	tst	r2, #2
> --	strneb	r1, [r0], #1
> --	strneb	r1, [r0], #1
> -+	strneb	r1, [ip], #1
> -+	strneb	r1, [ip], #1
> - 	tst	r2, #1
> --	strneb	r1, [r0], #1
> -+	strneb	r1, [ip], #1
> - 	mov	pc, lr
> - ENDPROC(memset)
> ---
> -1.8.4.rc3
> -
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch b/recipes-kernel/linux/linux-imx-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
> deleted file mode 100644
> index b8d6f53..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
> +++ /dev/null
> @@ -1,87 +0,0 @@
> -From 2ba23fa6c4128febaaf57fe184420a7111caa237 Mon Sep 17 00:00:00 2001
> -From: Nicolas Pitre <nicolas.pitre@linaro.org>
> -Date: Tue, 12 Mar 2013 13:00:42 +0100
> -Subject: [PATCH] ARM: 7670/1: fix the memset fix
> -Organization: O.S. Systems Software LTDA.
> -
> -Commit 455bd4c430b0 ("ARM: 7668/1: fix memset-related crashes caused by
> -recent GCC (4.7.2) optimizations") attempted to fix a compliance issue
> -with the memset return value.  However the memset itself became broken
> -by that patch for misaligned pointers.
> -
> -This fixes the above by branching over the entry code from the
> -misaligned fixup code to avoid reloading the original pointer.
> -
> -Also, because the function entry alignment is wrong in the Thumb mode
> -compilation, that fixup code is moved to the end.
> -
> -While at it, the entry instructions are slightly reworked to help dual
> -issue pipelines.
> -
> -Upstream-Status: Pending
> -
> -Signed-off-by: Nicolas Pitre <nico@linaro.org>
> -Tested-by: Alexander Holler <holler@ahsoftware.de>
> -Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
> -(cherry picked from commit 418df63adac56841ef6b0f1fcf435bc64d4ed177)
> ----
> - arch/arm/lib/memset.S | 33 +++++++++++++--------------------
> - 1 file changed, 13 insertions(+), 20 deletions(-)
> -
> -diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
> -index d912e73..94b0650 100644
> ---- a/arch/arm/lib/memset.S
> -+++ b/arch/arm/lib/memset.S
> -@@ -14,31 +14,15 @@
> -
> - 	.text
> - 	.align	5
> --	.word	0
> --
> --1:	subs	r2, r2, #4		@ 1 do we have enough
> --	blt	5f			@ 1 bytes to align with?
> --	cmp	r3, #2			@ 1
> --	strltb	r1, [ip], #1		@ 1
> --	strleb	r1, [ip], #1		@ 1
> --	strb	r1, [ip], #1		@ 1
> --	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))
> --/*
> -- * The pointer is now aligned and the length is adjusted.  Try doing the
> -- * memset again.
> -- */
> -
> - ENTRY(memset)
> --/*
> -- * Preserve the contents of r0 for the return value.
> -- */
> --	mov	ip, r0
> --	ands	r3, ip, #3		@ 1 unaligned?
> --	bne	1b			@ 1
> -+	ands	r3, r0, #3		@ 1 unaligned?
> -+	mov	ip, r0			@ preserve r0 as return value
> -+	bne	6f			@ 1
> - /*
> -  * we know that the pointer in ip is aligned to a word boundary.
> -  */
> --	orr	r1, r1, r1, lsl #8
> -+1:	orr	r1, r1, r1, lsl #8
> - 	orr	r1, r1, r1, lsl #16
> - 	mov	r3, r1
> - 	cmp	r2, #16
> -@@ -127,4 +111,13 @@ ENTRY(memset)
> - 	tst	r2, #1
> - 	strneb	r1, [ip], #1
> - 	mov	pc, lr
> -+
> -+6:	subs	r2, r2, #4		@ 1 do we have enough
> -+	blt	5b			@ 1 bytes to align with?
> -+	cmp	r3, #2			@ 1
> -+	strltb	r1, [ip], #1		@ 1
> -+	strleb	r1, [ip], #1		@ 1
> -+	strb	r1, [ip], #1		@ 1
> -+	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))
> -+	b	1b
> - ENDPROC(memset)
> ---
> -1.8.4.rc3
> -
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch b/recipes-kernel/linux/linux-imx-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
> deleted file mode 100644
> index 7316351..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -From d8601292ae25e0af47aa4486055221ab44113f0e Mon Sep 17 00:00:00 2001
> -From: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
> -Date: Mon, 15 Jul 2013 15:34:54 -0500
> -Subject: [PATCH] ENGR00271136 Fix build break when CONFIG_CLK_DEBUG is
> - disabled
> -Organization: O.S. Systems Software LTDA.
> -
> -clk structure member name is defined only when CONFIG_CLK_DEBUG is enabled.
> -Hence need to encapsulate the code with this config.
> -
> -Patch received from imx community:
> -https://community.freescale.com/thread/308482
> -
> -Upstream-Status: Pending
> -
> -Signed-off-by: xiongweihuang
> -Signed-off-by: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
> ----
> - arch/arm/plat-mxc/clock.c | 4 ++--
> - 1 file changed, 2 insertions(+), 2 deletions(-)
> -
> -diff --git a/arch/arm/plat-mxc/clock.c b/arch/arm/plat-mxc/clock.c
> -index 93347eb..1aa2664 100755
> ---- a/arch/arm/plat-mxc/clock.c
> -+++ b/arch/arm/plat-mxc/clock.c
> -@@ -58,12 +58,12 @@ static void __clk_disable(struct clk *clk)
> - {
> - 	if (clk == NULL || IS_ERR(clk))
> - 		return;
> --
> -+#ifdef CONFIG_CLK_DEBUG
> - 	if (!clk->usecount) {
> - 		WARN(1, "clock enable/disable mismatch! clk  %s\n", clk->name);
> - 		return;
> - 	}
> --
> -+#endif
> - 	if (!(--clk->usecount)) {
> - 		if (clk->disable)
> - 			clk->disable(clk);
> ---
> -1.8.4.rc3
> -
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch b/recipes-kernel/linux/linux-imx-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
> deleted file mode 100644
> index cb20198..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
> +++ /dev/null
> @@ -1,98 +0,0 @@
> -From 538f4bb2f7a51f267395550a5be9f0ab2e426712 Mon Sep 17 00:00:00 2001
> -From: Erik Boto <erik.boto@pelagicore.com>
> -Date: Tue, 16 Jul 2013 12:06:05 -0500
> -Subject: [PATCH] ENGR00271359 Add Multi-touch support
> -Organization: O.S. Systems Software LTDA.
> -
> -The previous behavior of the driver did not work properly with Qt5
> -QtQuick multi touch-point gestures, due to how touch-points are
> -reported when removing a touch-point. My interpretation of the
> -available documentation [1] was that the driver should report all
> -touch-points between SYN_REPORTs, but it is not explicitly stated so.
> -I've found another mail-thread [2] where the creator of the protocol
> -states:
> -
> -"The protocol defines a generic way of sending a variable amount of
> -contacts. The contact count is obtained by counting the number of
> -non-empty finger packets between SYN_REPORT events."-Henrik Rydberg
> -
> -I think this verifies my assumption that all touch-points should be
> -reported between SYN_REPORTs, otherwise it can not be used to obtain
> -the count.
> -
> -[1] https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt
> -[2] http://lists.x.org/archives/xorg-devel/2010-March/006466.html
> -
> -Upstream-Status: Pending
> -
> -Signed-off-by: Erik Boto <erik.boto@pelagicore.com>
> -Signed-off-by: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
> -(cherry picked from commit 7cba001c5a502680f6dbf902821726779a9c9287)
> ----
> - drivers/input/touchscreen/egalax_ts.c | 36 +++++++++++++++++------------------
> - 1 file changed, 18 insertions(+), 18 deletions(-)
> -
> -diff --git a/drivers/input/touchscreen/egalax_ts.c b/drivers/input/touchscreen/egalax_ts.c
> -index 0b6cde7..271f820 100644
> ---- a/drivers/input/touchscreen/egalax_ts.c
> -+++ b/drivers/input/touchscreen/egalax_ts.c
> -@@ -133,7 +133,6 @@ retry:
> - 	}
> -
> - 	if (down) {
> --		/* should also report old pointers */
> - 		events[id].valid = valid;
> - 		events[id].status = down;
> - 		events[id].x = x;
> -@@ -144,23 +143,6 @@ retry:
> - 		input_report_abs(input_dev, ABS_Y, y);
> - 		input_event(data->input_dev, EV_KEY, BTN_TOUCH, 1);
> - 		input_report_abs(input_dev, ABS_PRESSURE, 1);
> --#else
> --		for (i = 0; i < MAX_SUPPORT_POINTS; i++) {
> --			if (!events[i].valid)
> --				continue;
> --			dev_dbg(&client->dev, "report id:%d valid:%d x:%d y:%d",
> --				i, valid, x, y);
> --
> --			input_report_abs(input_dev,
> --					 ABS_MT_TRACKING_ID, i);
> --			input_report_abs(input_dev,
> --					 ABS_MT_TOUCH_MAJOR, 1);
> --			input_report_abs(input_dev,
> --					 ABS_MT_POSITION_X, events[i].x);
> --			input_report_abs(input_dev,
> --					 ABS_MT_POSITION_Y, events[i].y);
> --			input_mt_sync(input_dev);
> --		}
> - #endif
> - 	} else {
> - 		dev_dbg(&client->dev, "release id:%d\n", id);
> -@@ -176,6 +158,24 @@ retry:
> - #endif
> - 	}
> -
> -+#ifndef CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH
> -+	/* report all pointers */
> -+	for (i = 0; i < MAX_SUPPORT_POINTS; i++) {
> -+		if (!events[i].valid)
> -+			continue;
> -+		dev_dbg(&client->dev, "report id:%d valid:%d x:%d y:%d",
> -+			i, valid, x, y);
> -+			input_report_abs(input_dev,
> -+				 ABS_MT_TRACKING_ID, i);
> -+		input_report_abs(input_dev,
> -+				 ABS_MT_TOUCH_MAJOR, 1);
> -+		input_report_abs(input_dev,
> -+				 ABS_MT_POSITION_X, events[i].x);
> -+		input_report_abs(input_dev,
> -+				 ABS_MT_POSITION_Y, events[i].y);
> -+		input_mt_sync(input_dev);
> -+	}
> -+#endif
> - 	input_sync(input_dev);
> - 	return IRQ_HANDLED;
> - }
> ---
> -1.8.4.rc3
> -
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0006-Add-support-for-DVI-monitors.patch b/recipes-kernel/linux/linux-imx-3.0.35/0006-Add-support-for-DVI-monitors.patch
> deleted file mode 100644
> index 00a6b5c..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/0006-Add-support-for-DVI-monitors.patch
> +++ /dev/null
> @@ -1,227 +0,0 @@
> -From 3e6441d113f72b412081a2c87f39011e4c253a35 Mon Sep 17 00:00:00 2001
> -From: Robert Winkler <robert.winkler@boundarydevices.com>
> -Date: Fri, 19 Jul 2013 19:00:41 -0700
> -Subject: [PATCH] Add support for DVI monitors
> -Organization: O.S. Systems Software LTDA.
> -
> -Upstream-Status: Pending
> -
> -Signed-off-by: Robert Winkler <robert.winkler@boundarydevices.com>
> ----
> - arch/arm/plat-mxc/include/mach/mxc_hdmi.h |  7 +++
> - drivers/video/mxc_hdmi.c                  | 98 +++++++++++++------------------
> - 2 files changed, 49 insertions(+), 56 deletions(-)
> -
> -diff --git a/arch/arm/plat-mxc/include/mach/mxc_hdmi.h b/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
> -index 94f7638..af59c62 100644
> ---- a/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
> -+++ b/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
> -@@ -605,6 +605,10 @@ enum {
> - 	HDMI_IH_MUTE_PHY_STAT0_TX_PHY_LOCK = 0x2,
> - 	HDMI_IH_MUTE_PHY_STAT0_HPD = 0x1,
> -
> -+/* IH and IH_MUTE convenience macro RX_SENSE | HPD*/
> -+	HDMI_DVI_IH_STAT = 0x3D,
> -+
> -+
> - /* IH_AHBDMAAUD_STAT0 field values */
> - 	HDMI_IH_AHBDMAAUD_STAT0_ERROR = 0x20,
> - 	HDMI_IH_AHBDMAAUD_STAT0_LOST = 0x10,
> -@@ -903,6 +907,9 @@ enum {
> - 	HDMI_PHY_HPD = 0x02,
> - 	HDMI_PHY_TX_PHY_LOCK = 0x01,
> -
> -+/* HDMI STAT convenience RX_SENSE | HPD */
> -+	HDMI_DVI_STAT = 0xF2,
> -+
> - /* PHY_I2CM_SLAVE_ADDR field values */
> - 	HDMI_PHY_I2CM_SLAVE_ADDR_PHY_GEN2 = 0x69,
> - 	HDMI_PHY_I2CM_SLAVE_ADDR_HEAC_PHY = 0x49,
> -diff --git a/drivers/video/mxc_hdmi.c b/drivers/video/mxc_hdmi.c
> -index c5069aa..544f352 100644
> ---- a/drivers/video/mxc_hdmi.c
> -+++ b/drivers/video/mxc_hdmi.c
> -@@ -180,7 +180,6 @@ struct mxc_hdmi {
> - 	bool dft_mode_set;
> - 	char *dft_mode_str;
> - 	int default_bpp;
> --	u8 latest_intr_stat;
> - 	bool irq_enabled;
> - 	spinlock_t irq_lock;
> - 	bool phy_enabled;
> -@@ -1996,58 +1995,48 @@ static void hotplug_worker(struct work_struct *work)
> - 	struct delayed_work *delay_work = to_delayed_work(work);
> - 	struct mxc_hdmi *hdmi =
> - 		container_of(delay_work, struct mxc_hdmi, hotplug_work);
> --	u32 phy_int_stat, phy_int_pol, phy_int_mask;
> --	u8 val;
> -+	u32 hdmi_phy_stat0, hdmi_phy_pol0, hdmi_phy_mask0;
> - 	unsigned long flags;
> - 	char event_string[32];
> - 	char *envp[] = { event_string, NULL };
> -
> --	phy_int_stat = hdmi->latest_intr_stat;
> --	phy_int_pol = hdmi_readb(HDMI_PHY_POL0);
> -
> --	dev_dbg(&hdmi->pdev->dev, "phy_int_stat=0x%x, phy_int_pol=0x%x\n",
> --			phy_int_stat, phy_int_pol);
> -+	hdmi_phy_stat0 = hdmi_readb(HDMI_PHY_STAT0);
> -+	hdmi_phy_pol0 = hdmi_readb(HDMI_PHY_POL0);
> -+
> -+	dev_dbg(&hdmi->pdev->dev, "hdmi_phy_stat0=0x%x, hdmi_phy_pol0=0x%x\n",
> -+			hdmi_phy_stat0, hdmi_phy_pol0);
> -+
> -+	/* Make HPD intr active low to capture unplug event or
> -+	 * active high to capture plugin event */
> -+	hdmi_writeb((HDMI_DVI_STAT & ~hdmi_phy_stat0), HDMI_PHY_POL0);
> -
> - 	/* check cable status */
> --	if (phy_int_stat & HDMI_IH_PHY_STAT0_HPD) {
> --		/* cable connection changes */
> --		if (phy_int_pol & HDMI_PHY_HPD) {
> --			/* Plugin event */
> --			dev_dbg(&hdmi->pdev->dev, "EVENT=plugin\n");
> --			mxc_hdmi_cable_connected(hdmi);
> --
> --			/* Make HPD intr active low to capture unplug event */
> --			val = hdmi_readb(HDMI_PHY_POL0);
> --			val &= ~HDMI_PHY_HPD;
> --			hdmi_writeb(val, HDMI_PHY_POL0);
> --
> --			sprintf(event_string, "EVENT=plugin");
> --			kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
> -+	if (hdmi_phy_stat0 & HDMI_DVI_STAT) {
> -+		/* Plugin event */
> -+		dev_dbg(&hdmi->pdev->dev, "EVENT=plugin\n");
> -+		mxc_hdmi_cable_connected(hdmi);
> -+
> -+		sprintf(event_string, "EVENT=plugin");
> -+		kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
> - #ifdef CONFIG_MXC_HDMI_CEC
> --			mxc_hdmi_cec_handle(0x80);
> -+		mxc_hdmi_cec_handle(0x80);
> - #endif
> --			hdmi_set_cable_state(1);
> --
> --		} else if (!(phy_int_pol & HDMI_PHY_HPD)) {
> --			/* Plugout event */
> --			dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n");
> --			hdmi_set_cable_state(0);
> --			mxc_hdmi_abort_stream();
> --			mxc_hdmi_cable_disconnected(hdmi);
> -+		hdmi_set_cable_state(1);
> -
> --			/* Make HPD intr active high to capture plugin event */
> --			val = hdmi_readb(HDMI_PHY_POL0);
> --			val |= HDMI_PHY_HPD;
> --			hdmi_writeb(val, HDMI_PHY_POL0);
> -+	} else {
> -+		/* Plugout event */
> -+		dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n");
> -+		hdmi_set_cable_state(0);
> -+		mxc_hdmi_abort_stream();
> -+		mxc_hdmi_cable_disconnected(hdmi);
> -
> --			sprintf(event_string, "EVENT=plugout");
> --			kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
> -+		sprintf(event_string, "EVENT=plugout");
> -+		kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
> - #ifdef CONFIG_MXC_HDMI_CEC
> --			mxc_hdmi_cec_handle(0x100);
> -+		mxc_hdmi_cec_handle(0x100);
> - #endif
> -
> --		} else
> --			dev_dbg(&hdmi->pdev->dev, "EVENT=none?\n");
> - 	}
> -
> - 	/* Lock here to ensure full powerdown sequence
> -@@ -2055,12 +2044,12 @@ static void hotplug_worker(struct work_struct *work)
> - 	spin_lock_irqsave(&hdmi->irq_lock, flags);
> -
> - 	/* Re-enable HPD interrupts */
> --	phy_int_mask = hdmi_readb(HDMI_PHY_MASK0);
> --	phy_int_mask &= ~HDMI_PHY_HPD;
> --	hdmi_writeb(phy_int_mask, HDMI_PHY_MASK0);
> -+	hdmi_phy_mask0 = hdmi_readb(HDMI_PHY_MASK0);
> -+	hdmi_phy_mask0 &= ~HDMI_DVI_STAT;
> -+	hdmi_writeb(hdmi_phy_mask0, HDMI_PHY_MASK0);
> -
> - 	/* Unmute interrupts */
> --	hdmi_writeb(~HDMI_IH_MUTE_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0);
> -+	hdmi_writeb(~HDMI_DVI_IH_STAT, HDMI_IH_MUTE_PHY_STAT0);
> -
> - 	if (hdmi_readb(HDMI_IH_FC_STAT2) & HDMI_IH_FC_STAT2_OVERFLOW_MASK)
> - 		mxc_hdmi_clear_overflow();
> -@@ -2086,7 +2075,7 @@ static void hdcp_hdp_worker(struct work_struct *work)
> - static irqreturn_t mxc_hdmi_hotplug(int irq, void *data)
> - {
> - 	struct mxc_hdmi *hdmi = data;
> --	u8 val, intr_stat;
> -+	u8 val;
> - 	unsigned long flags;
> -
> - 	spin_lock_irqsave(&hdmi->irq_lock, flags);
> -@@ -2108,25 +2097,22 @@ static irqreturn_t mxc_hdmi_hotplug(int irq, void *data)
> - 	 * HDMI registers.
> - 	 */
> - 	/* Capture status - used in hotplug_worker ISR */
> --	intr_stat = hdmi_readb(HDMI_IH_PHY_STAT0);
> --
> --	if (intr_stat & HDMI_IH_PHY_STAT0_HPD) {
> -+	if (hdmi_readb(HDMI_IH_PHY_STAT0) & HDMI_DVI_IH_STAT) {
> -
> - 		dev_dbg(&hdmi->pdev->dev, "Hotplug interrupt received\n");
> --		hdmi->latest_intr_stat = intr_stat;
> -
> - 		/* Mute interrupts until handled */
> -
> - 		val = hdmi_readb(HDMI_IH_MUTE_PHY_STAT0);
> --		val |= HDMI_IH_MUTE_PHY_STAT0_HPD;
> -+		val |= HDMI_DVI_IH_STAT;
> - 		hdmi_writeb(val, HDMI_IH_MUTE_PHY_STAT0);
> -
> - 		val = hdmi_readb(HDMI_PHY_MASK0);
> --		val |= HDMI_PHY_HPD;
> -+		val |= HDMI_DVI_STAT;
> - 		hdmi_writeb(val, HDMI_PHY_MASK0);
> -
> - 		/* Clear Hotplug interrupts */
> --		hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
> -+		hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
> -
> - 		schedule_delayed_work(&(hdmi->hotplug_work), msecs_to_jiffies(20));
> - 	}
> -@@ -2282,13 +2268,13 @@ static void mxc_hdmi_fb_registered(struct mxc_hdmi *hdmi)
> - 		    HDMI_PHY_I2CM_CTLINT_ADDR);
> -
> - 	/* enable cable hot plug irq */
> --	hdmi_writeb((u8)~HDMI_PHY_HPD, HDMI_PHY_MASK0);
> -+	hdmi_writeb((u8)~HDMI_DVI_STAT, HDMI_PHY_MASK0);
> -
> - 	/* Clear Hotplug interrupts */
> --	hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
> -+	hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
> -
> - 	/* Unmute interrupts */
> --	hdmi_writeb(~HDMI_IH_MUTE_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0);
> -+	hdmi_writeb(~HDMI_DVI_IH_STAT, HDMI_IH_MUTE_PHY_STAT0);
> -
> - 	hdmi->fb_reg = true;
> -
> -@@ -2522,10 +2508,10 @@ static int mxc_hdmi_disp_init(struct mxc_dispdrv_handle *disp,
> -
> - 	/* Configure registers related to HDMI interrupt
> - 	 * generation before registering IRQ. */
> --	hdmi_writeb(HDMI_PHY_HPD, HDMI_PHY_POL0);
> -+	hdmi_writeb(HDMI_DVI_STAT, HDMI_PHY_POL0);
> -
> - 	/* Clear Hotplug interrupts */
> --	hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
> -+	hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
> -
> - 	hdmi->nb.notifier_call = mxc_hdmi_fb_event;
> - 	ret = fb_register_client(&hdmi->nb);
> ---
> -1.8.4.rc3
> -
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch b/recipes-kernel/linux/linux-imx-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
> deleted file mode 100644
> index d02aa40..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
> +++ /dev/null
> @@ -1,38 +0,0 @@
> -From cd31abbe08372fa870fac78ae845edd4859f8835 Mon Sep 17 00:00:00 2001
> -From: Fabio Estevam <fabio.estevam@freescale.com>
> -Date: Sat, 28 Sep 2013 18:46:18 -0300
> -Subject: [PATCH] ARM: mach-mx6: board-mx6q_sabresd: Register SDHC3 first
> -Organization: O.S. Systems Software LTDA.
> -
> -On sabresd boards we boot from SDHC3, so let's register it as mmc0.
> -
> -Currently eMMC is mmc0 and mmc1 can be SDHC3 or SDHC2 (if present).
> -
> -Registering SDHC3 is safer as we can always find the rootfs.
> -
> -Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
> ----
> - arch/arm/mach-mx6/board-mx6q_sabresd.c | 5 +----
> - 1 file changed, 1 insertion(+), 4 deletions(-)
> -
> -diff --git a/arch/arm/mach-mx6/board-mx6q_sabresd.c b/arch/arm/mach-mx6/board-mx6q_sabresd.c
> -index 3f9a845..4e6b323 100644
> ---- a/arch/arm/mach-mx6/board-mx6q_sabresd.c
> -+++ b/arch/arm/mach-mx6/board-mx6q_sabresd.c
> -@@ -1847,12 +1847,9 @@ static void __init mx6_sabresd_board_init(void)
> -
> - 	imx6q_add_pm_imx(0, &mx6q_sabresd_pm_data);
> -
> --	/* Move sd4 to first because sd4 connect to emmc.
> --	   Mfgtools want emmc is mmcblk0 and other sd card is mmcblk1.
> --	*/
> -+	imx6q_add_sdhci_usdhc_imx(2, &mx6q_sabresd_sd3_data);
> - 	imx6q_add_sdhci_usdhc_imx(3, &mx6q_sabresd_sd4_data);
> - 	imx6q_add_sdhci_usdhc_imx(1, &mx6q_sabresd_sd2_data);
> --	imx6q_add_sdhci_usdhc_imx(2, &mx6q_sabresd_sd3_data);
> - 	imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata);
> - 	imx6q_sabresd_init_usb();
> - 	/* SATA is not supported by MX6DL/Solo */
> ---
> -1.8.4.rc3
> -
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch b/recipes-kernel/linux/linux-imx-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
> deleted file mode 100644
> index 1e039fd..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
> +++ /dev/null
> @@ -1,6261 +0,0 @@
> -From 2e575255b8c53d3cfe2af068411696fe3c40debb Mon Sep 17 00:00:00 2001
> -From: Loren Huang <b02279@freescale.com>
> -Date: Mon, 2 Sep 2013 12:16:48 +0800
> -Subject: [PATCH 01/16] ENGR00278350 gpu:viante 4.6.9p13 kernel part
> - integration
> -
> -Integrated 4.6.9p13 kernel part change.
> -This integration is mainly for android test.
> -Linux test will be focused on 3.10 kernel.
> -
> -Signed-off-by: Loren HUANG <b02279@freescale.com>
> -Acked-by: Shawn Guo
> ----
> - drivers/mxc/gpu-viv/Kbuild                         |   33 +-
> - .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.c   |  177 ++--
> - .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.h   |    9 +-
> - .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.c   |    8 +-
> - .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.h   |   13 +
> - .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c  |  736 ++++++++++++-
> - .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h  |    1 +
> - drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c     |  125 ++-
> - drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h     |   24 +-
> - .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c |   57 ++
> - .../gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c  |   45 +-
> - drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c  |   12 +
> - .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c   |   29 +
> - .../hal/kernel/gc_hal_kernel_interrupt_vg.c        |    3 +
> - drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c |    8 +-
> - .../hal/kernel/gc_hal_kernel_video_memory.c        |   20 +-
> - drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h        |   84 +-
> - drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h   |  172 +++-
> - .../mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h   |  142 ++-
> - drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h |   37 +
> - drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h |   46 +-
> - drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h   |  125 ++-
> - .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h    |   86 +-
> - .../mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h   | 1078 +++-----------------
> - drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h |   48 +
> - drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h  |   79 +-
> - .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h    |    2 +-
> - .../hal/os/linux/kernel/gc_hal_kernel_device.c     |   17 +-
> - .../hal/os/linux/kernel/gc_hal_kernel_device.h     |   16 +-
> - .../hal/os/linux/kernel/gc_hal_kernel_driver.c     |   99 +-
> - .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c |  655 ++++++++++--
> - .../hal/os/linux/kernel/gc_hal_kernel_sync.c       |  174 ++++
> - .../hal/os/linux/kernel/gc_hal_kernel_sync.h       |   71 ++
> - 33 files changed, 2974 insertions(+), 1257 deletions(-)
> - create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
> - create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
> -
> -diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild
> -index 93b1259..2b277d6 100644
> ---- a/drivers/mxc/gpu-viv/Kbuild
> -+++ b/drivers/mxc/gpu-viv/Kbuild
> -@@ -45,8 +45,6 @@ OBJS := $(OS_KERNEL_DIR)/gc_hal_kernel_device.o \
> -         $(OS_KERNEL_DIR)/gc_hal_kernel_os.o \
> -         $(OS_KERNEL_DIR)/gc_hal_kernel_debugfs.o
> -
> --ifeq ($(USE_3D_VG), 1)
> --
> - OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
> -         $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
> -         $(HAL_KERNEL_DIR)/gc_hal_kernel_db.o \
> -@@ -69,19 +67,9 @@ OBJS +=\
> -           $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_command_vg.o\
> -           $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_vg.o
> - endif
> --else
> --
> --OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
> --        $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
> --        $(HAL_KERNEL_DIR)/gc_hal_kernel_heap.o \
> --        $(HAL_KERNEL_DIR)/gc_hal_kernel_interrupt.o \
> --        $(HAL_KERNEL_DIR)/gc_hal_kernel_mmu.o \
> --        $(HAL_KERNEL_DIR)/gc_hal_kernel_video_memory.o \
> --        $(OS_KERNEL_DIR)/gc_hal_kernel_debug.o
> --
> --OBJS += $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware.o \
> --        $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_command.o
> -
> -+ifneq ($(CONFIG_SYNC),)
> -+OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_sync.o
> - endif
> -
> - ifeq ($(KERNELRELEASE), )
> -@@ -129,23 +117,16 @@ ifeq ($(CONFIG_DOVE_GPU), 1)
> - EXTRA_CFLAGS += -DCONFIG_DOVE_GPU=1
> - endif
> -
> --ifeq ($(USE_POWER_MANAGEMENT), 1)
> --EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=1
> --else
> --EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=0
> --endif
> --
> - ifneq ($(USE_PLATFORM_DRIVER), 0)
> - EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=1
> - else
> - EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=0
> - endif
> -
> --ifeq ($(USE_PROFILER), 1)
> -+
> - EXTRA_CFLAGS += -DVIVANTE_PROFILER=1
> --else
> --EXTRA_CFLAGS += -DVIVANTE_PROFILER=0
> --endif
> -+EXTRA_CFLAGS += -DVIVANTE_PROFILER_CONTEXT=1
> -+
> -
> - ifeq ($(ANDROID), 1)
> - EXTRA_CFLAGS += -DANDROID=1
> -@@ -235,6 +216,10 @@ ifeq ($(USE_BANK_ALIGNMENT), 1)
> -     endif
> - endif
> -
> -+ifneq ($(CONFIG_SYNC),)
> -+EXTRA_CFLAGS += -DgcdANDROID_NATIVE_FENCE_SYNC=1
> -+endif
> -+
> - EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/inc
> - EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel
> - EXTRA_CFLAGS += -I$(AQARCH)/hal/kernel
> -diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
> -index 70c2cd6..a17d2fd 100644
> ---- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
> -+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
> -@@ -217,50 +217,17 @@ _IdentifyHardware(
> -     return status;
> - }
> -
> --static gctTHREADFUNCRESULT gctTHREADFUNCTYPE
> --_TimeIdleThread(
> --    gctTHREADFUNCPARAMETER ThreadParameter
> -+#if gcdPOWEROFF_TIMEOUT
> -+void
> -+_VGPowerTimerFunction(
> -+    gctPOINTER Data
> -     )
> - {
> --    gctUINT32           currentTime = 0;
> --    gctBOOL             isAfter = gcvFALSE;
> --    gceCHIPPOWERSTATE   state;
> --
> --    /* Cast the object. */
> --    gckVGHARDWARE hardware = (gckVGHARDWARE) ThreadParameter;
> --
> --    while(gcvTRUE)
> --    {
> --        gcmkVERIFY_OK(gckOS_WaitSignal(hardware->os,
> --            hardware->idleSignal, gcvINFINITE));
> --
> --        if (hardware->killThread)
> --        {
> --            break;
> --        }
> --
> --        do
> --        {
> --            gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
> --
> --            gcmkVERIFY_OK(
> --                gckOS_TicksAfter(currentTime, hardware->powerOffTime, &isAfter));
> --
> --            if (isAfter)
> --            {
> --                gcmkVERIFY_OK(gckVGHARDWARE_SetPowerManagementState(
> --                    hardware, gcvPOWER_OFF_BROADCAST));
> --            }
> --
> --            gcmkVERIFY_OK(gckOS_Delay(hardware->os, 200));
> --
> --            gcmkVERIFY_OK(gckVGHARDWARE_QueryPowerManagementState(
> --                hardware, &state));
> --
> --        } while (state == gcvPOWER_IDLE);
> --    }
> --    return 0;
> -+    gckVGHARDWARE hardware = (gckVGHARDWARE)Data;
> -+    gcmkVERIFY_OK(
> -+        gckVGHARDWARE_SetPowerManagementState(hardware, gcvPOWER_OFF_TIMEOUT));
> - }
> -+#endif
> -
> - /******************************************************************************\
> - ****************************** gckVGHARDWARE API code *****************************
> -@@ -338,15 +305,21 @@ gckVGHARDWARE_Construct(
> -         hardware->chipMinorFeatures2 = chipMinorFeatures2;
> -
> -         hardware->powerMutex            = gcvNULL;
> --        hardware->idleSignal            = gcvNULL;
> -         hardware->chipPowerState        = gcvPOWER_ON;
> -         hardware->chipPowerStateGlobal  = gcvPOWER_ON;
> -         hardware->clockState            = gcvTRUE;
> -         hardware->powerState            = gcvTRUE;
> --        hardware->powerOffTimeout       = gcdPOWEROFF_TIMEOUT;
> -+
> -         hardware->powerOffTime          = 0;
> --        hardware->timeIdleThread        = gcvNULL;
> --        hardware->killThread            = gcvFALSE;
> -+#if gcdPOWEROFF_TIMEOUT
> -+        hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
> -+
> -+        gcmkVERIFY_OK(gckOS_CreateTimer(Os,
> -+                                        _VGPowerTimerFunction,
> -+                                        (gctPOINTER)hardware,
> -+                                        &hardware->powerOffTimer));
> -+#endif
> -+
> -         /* Determine whether FE 2.0 is present. */
> -         hardware->fe20 = ((((gctUINT32) (hardware->chipFeatures)) >> (0 ? 28:28) & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))) == (0x1  & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))));
> -
> -@@ -365,18 +338,10 @@ gckVGHARDWARE_Construct(
> -         gcmkVERIFY_OK(gckVGHARDWARE_SetFastClear(hardware, -1));
> -
> -         gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex));
> --        gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvFALSE, &hardware->idleSignal));
> -
> -         /* Enable power management by default. */
> -         hardware->powerManagement = gcvTRUE;
> -
> --        gcmkERR_BREAK(gckOS_StartThread(
> --            hardware->os,
> --            _TimeIdleThread,
> --            hardware,
> --            &hardware->timeIdleThread
> --            ));
> --
> -         /* Return pointer to the gckVGHARDWARE object. */
> -         *Hardware = hardware;
> -
> -@@ -386,6 +351,14 @@ gckVGHARDWARE_Construct(
> -     }
> -     while (gcvFALSE);
> -
> -+#if gcdPOWEROFF_TIMEOUT
> -+        if (hardware->powerOffTimer != gcvNULL)
> -+        {
> -+            gcmkVERIFY_OK(gckOS_StopTimer(Os, hardware->powerOffTimer));
> -+            gcmkVERIFY_OK(gckOS_DestroyTimer(Os, hardware->powerOffTimer));
> -+        }
> -+#endif
> -+
> -     if (hardware->pageTableDirty != gcvNULL)
> -     {
> -         gcmkVERIFY_OK(gckOS_AtomDestroy(Os, hardware->pageTableDirty));
> -@@ -428,10 +401,6 @@ gckVGHARDWARE_Destroy(
> -     /* Verify the arguments. */
> -     gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
> -
> --    Hardware->killThread  = gcvTRUE;
> --    gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE));
> --    gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread));
> --
> -     /* Mark the object as unknown. */
> -     Hardware->object.type = gcvOBJ_UNKNOWN;
> -
> -@@ -441,11 +410,10 @@ gckVGHARDWARE_Destroy(
> -             Hardware->os, Hardware->powerMutex));
> -     }
> -
> --    if (Hardware->idleSignal != gcvNULL)
> --    {
> --        gcmkVERIFY_OK(gckOS_DestroySignal(
> --            Hardware->os, Hardware->idleSignal));
> --    }
> -+#if gcdPOWEROFF_TIMEOUT
> -+    gcmkVERIFY_OK(gckOS_StopTimer(Hardware->os, Hardware->powerOffTimer));
> -+    gcmkVERIFY_OK(gckOS_DestroyTimer(Hardware->os, Hardware->powerOffTimer));
> -+#endif
> -
> -     if (Hardware->pageTableDirty != gcvNULL)
> -     {
> -@@ -1510,11 +1478,15 @@ gckVGHARDWARE_SetPowerManagementState(
> -     gctBOOL commitMutex     = gcvFALSE;
> -     gctBOOL mutexAcquired   = gcvFALSE;
> -
> -+#if gcdPOWEROFF_TIMEOUT
> -+    gctBOOL timeout = gcvFALSE;
> -+    gctBOOL isAfter = gcvFALSE;
> -+    gctUINT32 currentTime;
> -+#endif
> -+
> -     gctBOOL broadcast = gcvFALSE;
> -     gctUINT32 process, thread;
> -     gctBOOL global = gcvFALSE;
> --    gctUINT32   currentTime;
> --
> -
> - #if gcdENABLE_PROFILING
> -     gctUINT64 time, freq, mutexTime, onTime, stallTime, stopTime, delayTime,
> -@@ -1661,6 +1633,16 @@ gckVGHARDWARE_SetPowerManagementState(
> -         global = gcvTRUE;
> -         break;
> -
> -+#if gcdPOWEROFF_TIMEOUT
> -+    case gcvPOWER_OFF_TIMEOUT:
> -+        /* Convert to OFF and note we are inside broadcast. */
> -+        State     = gcvPOWER_OFF;
> -+        broadcast = gcvTRUE;
> -+        /* Check time out */
> -+        timeout = gcvTRUE;
> -+        break;
> -+#endif
> -+
> -     default:
> -         break;
> -     }
> -@@ -1719,6 +1701,31 @@ gckVGHARDWARE_SetPowerManagementState(
> -     flag  = flags[Hardware->chipPowerState][State];
> -     /*clock = clocks[State];*/
> -
> -+#if gcdPOWEROFF_TIMEOUT
> -+    if (timeout)
> -+    {
> -+        gcmkONERROR(gckOS_GetTicks(&currentTime));
> -+
> -+        gcmkONERROR(
> -+            gckOS_TicksAfter(Hardware->powerOffTime, currentTime, &isAfter));
> -+
> -+        /* powerOffTime is pushed forward, give up.*/
> -+        if (isAfter
> -+        /* Expect a transition start from IDLE. */
> -+        ||  (Hardware->chipPowerState == gcvPOWER_ON)
> -+        ||  (Hardware->chipPowerState == gcvPOWER_OFF)
> -+        )
> -+        {
> -+            /* Release the power mutex. */
> -+            gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
> -+
> -+            /* No need to do anything. */
> -+            gcmkFOOTER_NO();
> -+            return gcvSTATUS_OK;
> -+        }
> -+    }
> -+#endif
> -+
> -     if (flag == 0)
> -     {
> -         /* Release the power mutex. */
> -@@ -1742,6 +1749,18 @@ gckVGHARDWARE_SetPowerManagementState(
> -             return gcvSTATUS_OK;
> -         }
> -     }
> -+    else
> -+    {
> -+        if (flag & gcvPOWER_FLAG_ACQUIRE)
> -+        {
> -+            /* Acquire the power management semaphore. */
> -+            gcmkONERROR(gckOS_AcquireSemaphore(os, command->powerSemaphore));
> -+            acquired = gcvTRUE;
> -+
> -+            /* avoid acquiring again. */
> -+            flag &= ~gcvPOWER_FLAG_ACQUIRE;
> -+        }
> -+    }
> -
> -     if (flag & (gcvPOWER_FLAG_INITIALIZE | gcvPOWER_FLAG_CLOCK_ON))
> -     {
> -@@ -1858,14 +1877,6 @@ gckVGHARDWARE_SetPowerManagementState(
> -         Hardware->chipPowerStateGlobal = State;
> -     }
> -
> --    if (State == gcvPOWER_IDLE)
> --    {
> --        gcmkVERIFY_OK(gckOS_Signal(os, Hardware->idleSignal, gcvTRUE));
> --    }
> --        /* Reset power off time */
> --    gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
> --    Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
> --
> -     if (commitMutex)
> -     {
> -         /* Acquire the mutex. */
> -@@ -1875,6 +1886,28 @@ gckVGHARDWARE_SetPowerManagementState(
> -             ));
> -     }
> -
> -+#if gcdPOWEROFF_TIMEOUT
> -+    /* Reset power off time */
> -+    gcmkONERROR(gckOS_GetTicks(&currentTime));
> -+
> -+    Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
> -+
> -+    if (State == gcvPOWER_IDLE)
> -+    {
> -+        /* Start a timer to power off GPU when GPU enters IDLE or SUSPEND. */
> -+        gcmkVERIFY_OK(gckOS_StartTimer(os,
> -+                                       Hardware->powerOffTimer,
> -+                                       Hardware->powerOffTimeout));
> -+    }
> -+    else
> -+    {
> -+        gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "Cancel powerOfftimer");
> -+
> -+        /* Cancel running timer when GPU enters ON or OFF. */
> -+        gcmkVERIFY_OK(gckOS_StopTimer(os, Hardware->powerOffTimer));
> -+    }
> -+#endif
> -+
> -     /* Release the power mutex. */
> -     gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
> -
> -diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
> -index 16b81ae..73d4594 100644
> ---- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
> -+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
> -@@ -53,7 +53,6 @@ struct _gckVGHARDWARE
> -     gctBOOL                     clockState;
> -     gctBOOL                     powerState;
> -     gctPOINTER                  powerMutex;
> --    gctSIGNAL                   idleSignal;
> -     gctUINT32                   powerProcess;
> -     gctUINT32                   powerThread;
> -     gceCHIPPOWERSTATE           chipPowerState;
> -@@ -61,11 +60,13 @@ struct _gckVGHARDWARE
> -     gctISRMANAGERFUNC           startIsr;
> -     gctISRMANAGERFUNC           stopIsr;
> -     gctPOINTER                  isrContext;
> -+    gctPOINTER                  pageTableDirty;
> -+
> -+#if gcdPOWEROFF_TIMEOUT
> -     gctUINT32                   powerOffTime;
> -     gctUINT32                   powerOffTimeout;
> --    gctTHREAD                   timeIdleThread;
> --    gctBOOL                     killThread;
> --    gctPOINTER                  pageTableDirty;
> -+    gctPOINTER                  powerOffTimer;
> -+#endif
> -
> -     gctBOOL                     powerManagement;
> - };
> -diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
> -index 24003e7..42e6915 100644
> ---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
> -+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
> -@@ -181,7 +181,8 @@ _FlushPipe(
> -                 ?   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
> -                 :   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
> -                   | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
> --                  | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
> -+                  | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
> -+                  | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
> -
> -         /* Semaphore from FE to PE. */
> -         *buffer++
> -@@ -620,7 +621,10 @@ _InitializeContextBuffer(
> -         index += _State(Context, index, 0x10180 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
> -         index += _State(Context, index, 0x10200 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
> -         index += _State(Context, index, 0x10280 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
> --        index += _State(Context, index, 0x02C00 >> 2, 0x00000000, 256, gcvFALSE, gcvFALSE);
> -+        for (i = 0; i < 256 / 16; i += 1)
> -+        {
> -+            index += _State(Context, index, (0x02C00 >> 2) + i * 16, 0x00000000, 14, gcvFALSE, gcvFALSE);
> -+        }
> -         index += _State(Context, index, 0x10300 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
> -         index += _State(Context, index, 0x10380 >> 2, 0x00321000, 32, gcvFALSE, gcvFALSE);
> -         index += _State(Context, index, 0x10400 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
> -diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
> -index 7554045..5d2c7c7 100644
> ---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
> -+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
> -@@ -134,6 +134,19 @@ struct _gckCONTEXT
> - #if gcdSECURE_USER
> -     gctBOOL_PTR                 hint;
> - #endif
> -+
> -+#if VIVANTE_PROFILER_CONTEXT
> -+    gcsPROFILER_COUNTERS        latestProfiler;
> -+    gcsPROFILER_COUNTERS        histroyProfiler;
> -+    gctUINT32                   prevVSInstCount;
> -+    gctUINT32                   prevVSBranchInstCount;
> -+    gctUINT32                   prevVSTexInstCount;
> -+    gctUINT32                   prevVSVertexCount;
> -+    gctUINT32                   prevPSInstCount;
> -+    gctUINT32                   prevPSBranchInstCount;
> -+    gctUINT32                   prevPSTexInstCount;
> -+    gctUINT32                   prevPSPixelCount;
> -+#endif
> - };
> -
> - #ifdef __cplusplus
> -diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
> -index 00f3839..e02dc23 100644
> ---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
> -+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
> -@@ -21,6 +21,9 @@
> -
> - #include "gc_hal.h"
> - #include "gc_hal_kernel.h"
> -+#if VIVANTE_PROFILER_CONTEXT
> -+#include "gc_hal_kernel_context.h"
> -+#endif
> -
> - #define _GC_OBJ_ZONE    gcvZONE_HARDWARE
> -
> -@@ -69,6 +72,7 @@ _IdentifyHardware(
> -     gctUINT32 numConstants = 0;
> -     gctUINT32 bufferSize = 0;
> -     gctUINT32 varyingsCount = 0;
> -+    gctBOOL useHZ;
> -
> -     gcmkHEADER_ARG("Os=0x%x", Os);
> -
> -@@ -209,6 +213,15 @@ _IdentifyHardware(
> -                                      0x00088,
> -                                      &Identity->chipMinorFeatures3));
> -
> -+            /*The BG2 chip has no compression supertiled, and the bit of GCMinorFeature3BugFixes15 is n/a*/
> -+            if(Identity->chipModel == gcv1000 && Identity->chipRevision == 0x5036)
> -+            {
> -+                Identity->chipMinorFeatures3
> -+                    = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
> -+                Identity->chipMinorFeatures3
> -+                    = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27)));
> -+            }
> -+
> -             /* Read chip minor featuress register #4. */
> -             gcmkONERROR(
> -                 gckOS_ReadRegisterEx(Os, Core,
> -@@ -244,14 +257,31 @@ _IdentifyHardware(
> -     if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
> -                                            || (Identity->chipRevision == 0x5036)
> -                                            || (Identity->chipRevision == 0x5037)))
> --	 || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612)))
> -+	 || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612))
> -+     || ((Identity->chipModel == gcv860) && (Identity->chipRevision == 0x4647)))
> -     {
> -         Identity->superTileMode = 1;
> -     }
> -
> -+    if (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5245)
> -+    {
> -+        useHZ = ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 26:26) & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))))
> -+             || ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 8:8) & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))));
> -+    }
> -+    else
> -+    {
> -+        useHZ = gcvFALSE;
> -+    }
> -
> --	/* Disable HZ when EZ is present for older chips. */
> --	if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
> -+    if (useHZ)
> -+    {
> -+        /* Disable EZ. */
> -+        Identity->chipFeatures
> -+            = ((((gctUINT32) (Identity->chipFeatures)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)));
> -+    }
> -+
> -+    /* Disable HZ when EZ is present for older chips. */
> -+    else if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
> -     {
> -         /* Disable HIERARCHICAL_Z. */
> -         Identity->chipMinorFeatures
> -@@ -470,6 +500,15 @@ _IdentifyHardware(
> -          Identity->varyingsCount = 8;
> -      }
> -
> -+     /* For some cores, it consumes two varying for position, so the max varying vectors should minus one. */
> -+     if ((Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5222) ||
> -+         (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5208) ||
> -+         ((Identity->chipModel == gcv2100 || Identity->chipModel == gcv2000) && Identity->chipRevision == 0x5108) ||
> -+         (Identity->chipModel == gcv880 && (Identity->chipRevision == 0x5107 || Identity->chipRevision == 0x5106)))
> -+     {
> -+         Identity->varyingsCount -= 1;
> -+     }
> -+
> -     /* Success. */
> -     gcmkFOOTER();
> -     return gcvSTATUS_OK;
> -@@ -535,9 +574,9 @@ _DumpDebugRegisters(
> -     IN gcsiDEBUG_REGISTERS_PTR Descriptor
> -     )
> - {
> --    gceSTATUS status;
> -+    gceSTATUS status = gcvSTATUS_OK;
> -     gctUINT32 select;
> --    gctUINT32 data;
> -+    gctUINT32 data = 0;
> -     gctUINT i;
> -
> -     gcmkHEADER_ARG("Os=0x%X Descriptor=0x%X", Os, Descriptor);
> -@@ -643,6 +682,42 @@ OnError:
> -     return status;
> - }
> -
> -+gceSTATUS
> -+_FlushCache(
> -+    gckHARDWARE Hardware,
> -+    gckCOMMAND Command
> -+    )
> -+{
> -+    gceSTATUS status;
> -+    gctSIZE_T bytes, requested;
> -+    gctPOINTER buffer;
> -+
> -+    /* Get the size of the flush command. */
> -+    gcmkONERROR(gckHARDWARE_Flush(Hardware,
> -+                                  gcvFLUSH_ALL,
> -+                                  gcvNULL,
> -+                                  &requested));
> -+
> -+    /* Reserve space in the command queue. */
> -+    gcmkONERROR(gckCOMMAND_Reserve(Command,
> -+                                   requested,
> -+                                   &buffer,
> -+                                   &bytes));
> -+
> -+    /* Append a flush. */
> -+    gcmkONERROR(gckHARDWARE_Flush(
> -+        Hardware, gcvFLUSH_ALL, buffer, &bytes
> -+        ));
> -+
> -+    /* Execute the command queue. */
> -+    gcmkONERROR(gckCOMMAND_Execute(Command, requested));
> -+
> -+    return gcvSTATUS_OK;
> -+
> -+OnError:
> -+    return status;
> -+}
> -+
> - /******************************************************************************\
> - ****************************** gckHARDWARE API code *****************************
> - \******************************************************************************/
> -@@ -809,6 +884,9 @@ gckHARDWARE_Construct(
> -     /* Enable power management by default. */
> -     hardware->powerManagement = gcvTRUE;
> -
> -+    /* Disable profiler by default */
> -+    hardware->gpuProfiler = gcvFALSE;
> -+
> -     /* Return pointer to the gckHARDWARE object. */
> -     *Hardware = hardware;
> -
> -@@ -1113,6 +1191,31 @@ gckHARDWARE_InitializeHardware(
> -                                   ((((gctUINT32) (0x01590880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23)))));
> -     }
> -
> -+    if ((gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) == gcvFALSE)
> -+     || (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) && (Hardware->identity.chipRevision < 0x5422))
> -+    )
> -+    {
> -+        gctUINT32 data;
> -+
> -+        gcmkONERROR(
> -+            gckOS_ReadRegisterEx(Hardware->os,
> -+                                 Hardware->core,
> -+                                 Hardware->powerBaseAddress
> -+                                 + 0x00104,
> -+                                 &data));
> -+
> -+
> -+        data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15)));
> -+
> -+
> -+        gcmkONERROR(
> -+            gckOS_WriteRegisterEx(Hardware->os,
> -+                                  Hardware->core,
> -+                                  Hardware->powerBaseAddress
> -+                                  + 0x00104,
> -+                                  data));
> -+    }
> -+
> -     /* Special workaround for this core
> -     ** Make sure FE and TX are on different buses */
> -     if ((Hardware->identity.chipModel == gcv2000)
> -@@ -1152,7 +1255,9 @@ gckHARDWARE_InitializeHardware(
> -     }
> -
> -     if (Hardware->identity.chipModel >= gcv400
> --    &&  Hardware->identity.chipModel != gcv420)
> -+    &&  Hardware->identity.chipModel != gcv420
> -+    &&  (((((gctUINT32) (Hardware->identity.chipMinorFeatures3)) >> (0 ? 15:15) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) != gcvTRUE)
> -+    )
> -     {
> - 		gctUINT32 data;
> -
> -@@ -2883,35 +2988,44 @@ gckHARDWARE_QueryShaderCaps(
> -     OUT gctUINT * Varyings
> -     )
> - {
> -+    gctUINT32 vsConstMax;
> -+    gctUINT32 psConstMax;
> -+
> -     gcmkHEADER_ARG("Hardware=0x%x VertexUniforms=0x%x "
> -                    "FragmentUniforms=0x%x Varyings=0x%x",
> -                    Hardware, VertexUniforms,
> -                    FragmentUniforms, Varyings);
> -
> -+    if ((Hardware->identity.chipModel == gcv2000)
> -+     && (Hardware->identity.chipRevision == 0x5118))
> -+    {
> -+        vsConstMax   = 256;
> -+        psConstMax   = 64;
> -+    }
> -+    else if (Hardware->identity.numConstants > 256)
> -+    {
> -+        vsConstMax   = 256;
> -+        psConstMax   = 256;
> -+    }
> -+    else if (Hardware->identity.numConstants == 256)
> -+    {
> -+        vsConstMax   = 256;
> -+        psConstMax   = 256;
> -+    }
> -+    else
> -+    {
> -+        vsConstMax   = 168;
> -+        psConstMax   = 64;
> -+    }
> -+
> -     if (VertexUniforms != gcvNULL)
> -     {
> --		/* Return the vs shader const count. */
> --        if (Hardware->identity.chipModel < gcv4000)
> --        {
> --            *VertexUniforms = 168;
> --        }
> --        else
> --        {
> --            *VertexUniforms = 256;
> --        }
> -+        *VertexUniforms = vsConstMax;
> -     }
> -
> -     if (FragmentUniforms != gcvNULL)
> -     {
> --		/* Return the ps shader const count. */
> --        if (Hardware->identity.chipModel < gcv4000)
> --        {
> --            *FragmentUniforms = 64;
> --        }
> --        else
> --        {
> --            *FragmentUniforms = 256;
> --        }
> -+        *FragmentUniforms = psConstMax;
> -     }
> -
> -     if (Varyings != gcvNULL)
> -@@ -3229,12 +3343,28 @@ gckHARDWARE_SetMMUv2(
> -     gctBOOL commitEntered = gcvFALSE;
> -     gctPOINTER pointer = gcvNULL;
> -     gctBOOL acquired = gcvFALSE;
> -+    gctBOOL config2D;
> -+    gctSIZE_T configSize;
> -
> -     gcmkHEADER_ARG("Hardware=0x%x Enable=%d", Hardware, Enable);
> -
> -     /* Verify the arguments. */
> -     gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
> -
> -+    config2D =  gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D)
> -+             && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D);
> -+
> -+    configSize = 4 * 4;
> -+
> -+    if (config2D)
> -+    {
> -+        configSize +=
> -+            /* Pipe Select. */
> -+            4 * 4
> -+            /* Configure MMU States. */
> -+          + 4 * 4;
> -+    }
> -+
> -     /* Convert logical address into physical address. */
> -     gcmkONERROR(
> -         gckOS_GetPhysicalAddress(Hardware->os, MtlbAddress, &config));
> -@@ -3281,7 +3411,7 @@ gckHARDWARE_SetMMUv2(
> -     commitEntered = gcvTRUE;
> -
> -     gcmkONERROR(gckCOMMAND_Reserve(
> --        command, 16, &pointer, &bufferSize
> -+        command, configSize, &pointer, &bufferSize
> -         ));
> -
> -     buffer = pointer;
> -@@ -3300,10 +3430,43 @@ gckHARDWARE_SetMMUv2(
> -
> -     buffer[3] = address;
> -
> -+    if (config2D)
> -+    {
> -+        /* LoadState(AQPipeSelect, 1), pipe. */
> -+        buffer[4]
> -+            = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
> -+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
> -+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
> -+
> -+        buffer[5] = 0x1;
> -+
> -+        buffer[6]
> -+            = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
> -+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
> -+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
> -+
> -+        buffer[7] = config;
> -+
> -+        buffer[8]
> -+            = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
> -+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
> -+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
> -+
> -+        buffer[9] = address;
> -+
> -+        /* LoadState(AQPipeSelect, 1), pipe. */
> -+        buffer[10]
> -+            = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
> -+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
> -+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
> -+
> -+        buffer[11] = 0x0;
> -+    }
> -+
> -     gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
> -         "Setup MMU: config=%08x, Safe Address=%08x\n.", config, address);
> -
> --    gcmkONERROR(gckCOMMAND_Execute(command, 16));
> -+    gcmkONERROR(gckCOMMAND_Execute(command, configSize));
> -
> -     if (FromPower == gcvFALSE)
> -     {
> -@@ -3501,6 +3664,8 @@ gckHARDWARE_Flush(
> -     gctUINT32 flush = 0;
> -     gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
> -     gceSTATUS status;
> -+    gctBOOL fcFlushStall;
> -+    gctUINT32 reserveBytes = 8;
> -
> -     gcmkHEADER_ARG("Hardware=0x%x Flush=0x%x Logical=0x%x *Bytes=%lu",
> -                    Hardware, Flush, Logical, gcmOPT_VALUE(Bytes));
> -@@ -3511,6 +3676,16 @@ gckHARDWARE_Flush(
> -     /* Get current pipe. */
> -     pipe = Hardware->kernel->command->pipeSelect;
> -
> -+    fcFlushStall
> -+        = ((((gctUINT32) (Hardware->identity.chipMinorFeatures1)) >> (0 ? 31:31) & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))))
> -+        && (Flush == gcvFLUSH_ALL)
> -+        ;
> -+
> -+    if (fcFlushStall)
> -+    {
> -+        reserveBytes += 8;
> -+    }
> -+
> -     /* Flush 3D color cache. */
> -     if ((Flush & gcvFLUSH_COLOR) && (pipe == 0x0))
> -     {
> -@@ -3527,6 +3702,7 @@ gckHARDWARE_Flush(
> -     if ((Flush & gcvFLUSH_TEXTURE) && (pipe == 0x0))
> -     {
> -         flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
> -+        flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
> -     }
> -
> -     /* Flush 2D cache. */
> -@@ -3550,7 +3726,7 @@ gckHARDWARE_Flush(
> -         /* Copy to command queue. */
> -         if (Logical != gcvNULL)
> -         {
> --            if (*Bytes < 8)
> -+            if (*Bytes < reserveBytes)
> -             {
> -                 /* Command queue too small. */
> -                 gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL);
> -@@ -3565,12 +3741,26 @@ gckHARDWARE_Flush(
> -
> -             gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
> -                            "0x%x: FLUSH 0x%x", logical, flush);
> -+
> -+            if (fcFlushStall)
> -+            {
> -+                logical[2] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
> -+                           | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
> -+                           | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
> -+
> -+                logical[3] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
> -+
> -+
> -+                gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
> -+                               "0x%x: FLUSH 0x%x", logical + 3, logical[3]);
> -+            }
> -+
> -         }
> -
> -         if (Bytes != gcvNULL)
> -         {
> --            /* 8 bytes required. */
> --            *Bytes = 8;
> -+            /* bytes required. */
> -+            *Bytes = reserveBytes;
> -         }
> -     }
> -
> -@@ -4285,6 +4475,48 @@ gckHARDWARE_SetPowerManagementState(
> -         }
> -     }
> -
> -+    /* Flush Cache before Power Off. */
> -+    if (flag & gcvPOWER_FLAG_POWER_OFF)
> -+    {
> -+        if (Hardware->clockState == gcvFALSE)
> -+        {
> -+            /* Turn off the GPU power. */
> -+            gcmkONERROR(
> -+                    gckOS_SetGPUPower(os,
> -+                        Hardware->core,
> -+                        gcvTRUE,
> -+                        gcvTRUE));
> -+
> -+            Hardware->clockState = gcvTRUE;
> -+
> -+            if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_DYNAMIC_FREQUENCY_SCALING) != gcvTRUE)
> -+            {
> -+                /* Write the clock control register. */
> -+                gcmkONERROR(gckOS_WriteRegisterEx(os,
> -+                                                  Hardware->core,
> -+                                                  0x00000,
> -+                                                  clocks[0]));
> -+
> -+                /* Done loading the frequency scaler. */
> -+                gcmkONERROR(gckOS_WriteRegisterEx(os,
> -+                                                  Hardware->core,
> -+                                                  0x00000,
> -+                                                  ((((gctUINT32) (clocks[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)))));
> -+            }
> -+        }
> -+
> -+        gcmkONERROR(gckCOMMAND_Start(command));
> -+
> -+        gcmkONERROR(_FlushCache(Hardware, command));
> -+
> -+        gckOS_Delay(gcvNULL, 1);
> -+
> -+        /* Stop the command parser. */
> -+        gcmkONERROR(gckCOMMAND_Stop(command, gcvFALSE));
> -+
> -+        flag |= gcvPOWER_FLAG_CLOCK_OFF;
> -+    }
> -+
> -     /* Get time until stopped. */
> -     gcmkPROFILE_QUERY(time, stopTime);
> -
> -@@ -4582,6 +4814,40 @@ gckHARDWARE_SetPowerManagement(
> -     return gcvSTATUS_OK;
> - }
> -
> -+/*******************************************************************************
> -+**
> -+**  gckHARDWARE_SetGpuProfiler
> -+**
> -+**  Configure GPU profiler function.
> -+**  Only used in driver initialization stage.
> -+**
> -+**  INPUT:
> -+**
> -+**      gckHARDWARE Harwdare
> -+**          Pointer to an gckHARDWARE object.
> -+**
> -+**      gctBOOL GpuProfiler
> -+**          GOU Profiler State.
> -+**
> -+*/
> -+gceSTATUS
> -+gckHARDWARE_SetGpuProfiler(
> -+    IN gckHARDWARE Hardware,
> -+    IN gctBOOL GpuProfiler
> -+    )
> -+{
> -+    gcmkHEADER_ARG("Hardware=0x%x", Hardware);
> -+
> -+    /* Verify the arguments. */
> -+    gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
> -+
> -+    Hardware->gpuProfiler = GpuProfiler;
> -+
> -+    /* Success. */
> -+    gcmkFOOTER_NO();
> -+    return gcvSTATUS_OK;
> -+}
> -+
> - #if gcdENABLE_FSCALE_VAL_ADJUST
> - gceSTATUS
> - gckHARDWARE_SetFscaleValue(
> -@@ -5141,6 +5407,402 @@ OnError:
> - }
> - #endif
> -
> -+#if VIVANTE_PROFILER_CONTEXT
> -+#define gcmkUPDATE_PROFILE_DATA(data) \
> -+    profilerHistroy->data += profiler->data
> -+
> -+gceSTATUS
> -+gckHARDWARE_QueryContextProfile(
> -+    IN gckHARDWARE Hardware,
> -+    IN gctBOOL   Reset,
> -+    IN gckCONTEXT Context,
> -+    OUT gcsPROFILER_COUNTERS * Counters
> -+    )
> -+{
> -+    gceSTATUS status;
> -+    gckCOMMAND command = Hardware->kernel->command;
> -+    gcsPROFILER_COUNTERS * profiler = Counters;
> -+
> -+    gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters);
> -+
> -+    /* Verify the arguments. */
> -+    gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
> -+
> -+    /* Acquire the context sequnence mutex. */
> -+    gcmkONERROR(gckOS_AcquireMutex(
> -+        command->os, command->mutexContextSeq, gcvINFINITE
> -+        ));
> -+
> -+    /* Read the counters. */
> -+    gcmkVERIFY_OK(gckOS_MemCopy(
> -+        profiler, &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
> -+        ));
> -+
> -+    if (Reset)
> -+    {
> -+        /* Reset counters. */
> -+        gcmkVERIFY_OK(gckOS_ZeroMemory(
> -+            &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
> -+            ));
> -+    }
> -+
> -+    gcmkVERIFY_OK(gckOS_ReleaseMutex(
> -+        command->os, command->mutexContextSeq
> -+        ));
> -+
> -+    /* Success. */
> -+    gcmkFOOTER_NO();
> -+    return gcvSTATUS_OK;
> -+
> -+OnError:
> -+    /* Return the status. */
> -+    gcmkFOOTER();
> -+    return status;
> -+}
> -+
> -+
> -+gceSTATUS
> -+gckHARDWARE_UpdateContextProfile(
> -+    IN gckHARDWARE Hardware,
> -+    IN gckCONTEXT Context
> -+    )
> -+{
> -+    gceSTATUS status;
> -+    gcsPROFILER_COUNTERS * profiler = &Context->latestProfiler;
> -+    gcsPROFILER_COUNTERS * profilerHistroy = &Context->histroyProfiler;
> -+    gctUINT i, clock;
> -+    gctUINT32 colorKilled, colorDrawn, depthKilled, depthDrawn;
> -+    gctUINT32 totalRead, totalWrite;
> -+    gceCHIPMODEL chipModel;
> -+    gctUINT32 chipRevision;
> -+    gctUINT32 temp;
> -+    gctBOOL needResetShader = gcvFALSE;
> -+
> -+    gcmkHEADER_ARG("Hardware=0x%x Context=0x%x", Hardware, Context);
> -+
> -+    /* Verify the arguments. */
> -+    gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
> -+    gcmkVERIFY_OBJECT(Context, gcvOBJ_CONTEXT);
> -+
> -+    chipModel = Hardware->identity.chipModel;
> -+    chipRevision = Hardware->identity.chipRevision;
> -+    if (chipModel == gcv2000 || (chipModel == gcv2100 && chipRevision == 0x5118))
> -+    {
> -+        needResetShader = gcvTRUE;
> -+    }
> -+
> -+    /* Read the counters. */
> -+    gcmkONERROR(
> -+        gckOS_ReadRegisterEx(Hardware->os,
> -+                             Hardware->core,
> -+                             0x00438,
> -+                             &profiler->gpuCyclesCounter));
> -+    gcmkUPDATE_PROFILE_DATA(gpuCyclesCounter);
> -+
> -+    gcmkONERROR(
> -+        gckOS_ReadRegisterEx(Hardware->os,
> -+                             Hardware->core,
> -+                             0x00078,
> -+                             &profiler->gpuTotalCyclesCounter));
> -+    gcmkUPDATE_PROFILE_DATA(gpuTotalCyclesCounter);
> -+
> -+    gcmkONERROR(
> -+        gckOS_ReadRegisterEx(Hardware->os,
> -+                             Hardware->core,
> -+                             0x0007C,
> -+                             &profiler->gpuIdleCyclesCounter));
> -+    gcmkUPDATE_PROFILE_DATA(gpuIdleCyclesCounter);
> -+
> -+    /* Read clock control register. */
> -+    gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
> -+                                     Hardware->core,
> -+                                     0x00000,
> -+                                     &clock));
> -+
> -+    profiler->gpuTotalRead64BytesPerFrame = 0;
> -+    profiler->gpuTotalWrite64BytesPerFrame = 0;
> -+    profiler->pe_pixel_count_killed_by_color_pipe = 0;
> -+    profiler->pe_pixel_count_killed_by_depth_pipe = 0;
> -+    profiler->pe_pixel_count_drawn_by_color_pipe = 0;
> -+    profiler->pe_pixel_count_drawn_by_depth_pipe = 0;
> -+
> -+    /* Walk through all avaiable pixel pipes. */
> -+    for (i = 0; i < Hardware->identity.pixelPipes; ++i)
> -+    {
> -+        /* Select proper pipe. */
> -+        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
> -+                                           Hardware->core,
> -+                                           0x00000,
> -+                                           ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20)))));
> -+
> -+        /* BW */
> -+        gcmkONERROR(
> -+        gckOS_ReadRegisterEx(Hardware->os,
> -+                             Hardware->core,
> -+                             0x00040,
> -+                             &totalRead));
> -+        gcmkONERROR(
> -+        gckOS_ReadRegisterEx(Hardware->os,
> -+                             Hardware->core,
> -+                             0x00044,
> -+                             &totalWrite));
> -+
> -+        profiler->gpuTotalRead64BytesPerFrame += totalRead;
> -+        profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
> -+        gcmkUPDATE_PROFILE_DATA(gpuTotalRead64BytesPerFrame);
> -+        gcmkUPDATE_PROFILE_DATA(gpuTotalWrite64BytesPerFrame);
> -+
> -+        /* PE */
> -+        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorKilled));
> -+        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthKilled));
> -+        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorDrawn));
> -+        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthDrawn));
> -+
> -+        profiler->pe_pixel_count_killed_by_color_pipe += colorKilled;
> -+        profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled;
> -+        profiler->pe_pixel_count_drawn_by_color_pipe += colorDrawn;
> -+        profiler->pe_pixel_count_drawn_by_depth_pipe += depthDrawn;
> -+        gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe);
> -+        gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe);
> -+        gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_color_pipe);
> -+        gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_depth_pipe);
> -+    }
> -+
> -+    /* Reset clock control register. */
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
> -+                                      Hardware->core,
> -+                                      0x00000,
> -+                                      clock));
> -+
> -+
> -+
> -+
> -+    /* Reset counters. */
> -+    gcmkONERROR(
> -+        gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 1));
> -+    gcmkONERROR(
> -+        gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 0));
> -+    gcmkONERROR(
> -+        gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
> -+    gcmkONERROR(
> -+        gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
> -+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
> -+));
> -+
> -+    /* SH */
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_inst_counter));
> -+    if (needResetShader)
> -+    {
> -+        temp = profiler->ps_inst_counter;
> -+        profiler->ps_inst_counter -= Context->prevPSInstCount;
> -+        Context->prevPSInstCount = temp;
> -+    }
> -+    gcmkUPDATE_PROFILE_DATA(ps_inst_counter);
> -+
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_pixel_counter));
> -+    if (needResetShader)
> -+    {
> -+        temp = profiler->rendered_pixel_counter;
> -+        profiler->rendered_pixel_counter -= Context->prevPSPixelCount;
> -+        Context->prevPSPixelCount = temp;
> -+    }
> -+    gcmkUPDATE_PROFILE_DATA(rendered_pixel_counter);
> -+
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_inst_counter));
> -+    if (needResetShader)
> -+    {
> -+        temp = profiler->vs_inst_counter;
> -+        profiler->vs_inst_counter -= Context->prevVSInstCount;
> -+        Context->prevVSInstCount = temp;
> -+    }
> -+    gcmkUPDATE_PROFILE_DATA(vs_inst_counter);
> -+
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_vertice_counter));
> -+    if (needResetShader)
> -+    {
> -+        temp = profiler->rendered_vertice_counter;
> -+        profiler->rendered_vertice_counter -= Context->prevVSVertexCount;
> -+        Context->prevVSVertexCount = temp;
> -+    }
> -+    gcmkUPDATE_PROFILE_DATA(rendered_vertice_counter);
> -+
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_branch_inst_counter));
> -+    if (needResetShader)
> -+    {
> -+        temp = profiler->vtx_branch_inst_counter;
> -+        profiler->vtx_branch_inst_counter -= Context->prevVSBranchInstCount;
> -+        Context->prevVSBranchInstCount = temp;
> -+    }
> -+    gcmkUPDATE_PROFILE_DATA(vtx_branch_inst_counter);
> -+
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_texld_inst_counter));
> -+    if (needResetShader)
> -+    {
> -+        temp = profiler->vtx_texld_inst_counter;
> -+        profiler->vtx_texld_inst_counter -= Context->prevVSTexInstCount;
> -+        Context->prevVSTexInstCount = temp;
> -+    }
> -+    gcmkUPDATE_PROFILE_DATA(vtx_texld_inst_counter);
> -+
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_branch_inst_counter));
> -+    if (needResetShader)
> -+    {
> -+        temp = profiler->pxl_branch_inst_counter;
> -+        profiler->pxl_branch_inst_counter -= Context->prevPSBranchInstCount;
> -+        Context->prevPSBranchInstCount = temp;
> -+    }
> -+    gcmkUPDATE_PROFILE_DATA(pxl_branch_inst_counter);
> -+
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (14) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_texld_inst_counter));
> -+    if (needResetShader)
> -+    {
> -+        temp = profiler->pxl_texld_inst_counter;
> -+        profiler->pxl_texld_inst_counter -= Context->prevPSTexInstCount;
> -+        Context->prevPSTexInstCount = temp;
> -+    }
> -+    gcmkUPDATE_PROFILE_DATA(pxl_texld_inst_counter);
> -+
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
> -+));
> -+
> -+    /* PA */
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_vtx_counter));
> -+    gcmkUPDATE_PROFILE_DATA(pa_input_vtx_counter);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_prim_counter));
> -+    gcmkUPDATE_PROFILE_DATA(pa_input_prim_counter);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_output_prim_counter));
> -+    gcmkUPDATE_PROFILE_DATA(pa_output_prim_counter);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_depth_clipped_counter));
> -+    gcmkUPDATE_PROFILE_DATA(pa_depth_clipped_counter);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_trivial_rejected_counter));
> -+    gcmkUPDATE_PROFILE_DATA(pa_trivial_rejected_counter);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_culled_counter));
> -+    gcmkUPDATE_PROFILE_DATA(pa_culled_counter);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
> -+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
> -+));
> -+
> -+    /* SE */
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_triangle_count));
> -+    gcmkUPDATE_PROFILE_DATA(se_culled_triangle_count);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_lines_count));
> -+    gcmkUPDATE_PROFILE_DATA(se_culled_lines_count);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
> -+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
> -+));
> -+
> -+    /* RA */
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_pixel_count));
> -+    gcmkUPDATE_PROFILE_DATA(ra_valid_pixel_count);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_quad_count));
> -+    gcmkUPDATE_PROFILE_DATA(ra_total_quad_count);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_quad_count_after_early_z));
> -+    gcmkUPDATE_PROFILE_DATA(ra_valid_quad_count_after_early_z);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_primitive_count));
> -+    gcmkUPDATE_PROFILE_DATA(ra_total_primitive_count);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_pipe_cache_miss_counter));
> -+    gcmkUPDATE_PROFILE_DATA(ra_pipe_cache_miss_counter);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_prefetch_cache_miss_counter));
> -+    gcmkUPDATE_PROFILE_DATA(ra_prefetch_cache_miss_counter);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
> -+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
> -+));
> -+
> -+    /* TX */
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_bilinear_requests));
> -+    gcmkUPDATE_PROFILE_DATA(tx_total_bilinear_requests);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_trilinear_requests));
> -+    gcmkUPDATE_PROFILE_DATA(tx_total_trilinear_requests);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_discarded_texture_requests));
> -+    gcmkUPDATE_PROFILE_DATA(tx_total_discarded_texture_requests);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_texture_requests));
> -+    gcmkUPDATE_PROFILE_DATA(tx_total_texture_requests);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_count));
> -+    gcmkUPDATE_PROFILE_DATA(tx_mem_read_count);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_in_8B_count));
> -+    gcmkUPDATE_PROFILE_DATA(tx_mem_read_in_8B_count);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_count));
> -+    gcmkUPDATE_PROFILE_DATA(tx_cache_miss_count);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_hit_texel_count));
> -+    gcmkUPDATE_PROFILE_DATA(tx_cache_hit_texel_count);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_texel_count));
> -+    gcmkUPDATE_PROFILE_DATA(tx_cache_miss_texel_count);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
> -+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
> -+));
> -+
> -+    /* MC */
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_pipeline));
> -+    gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_pipeline);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_IP));
> -+    gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_IP);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_write_req_8B_from_pipeline));
> -+    gcmkUPDATE_PROFILE_DATA(mc_total_write_req_8B_from_pipeline);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
> -+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
> -+));
> -+
> -+    /* HI */
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_read_request_stalled));
> -+    gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_read_request_stalled);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_request_stalled));
> -+    gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_request_stalled);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
> -+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_data_stalled));
> -+    gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_data_stalled);
> -+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
> -+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
> -+));
> -+
> -+    /* Success. */
> -+    gcmkFOOTER_NO();
> -+    return gcvSTATUS_OK;
> -+
> -+OnError:
> -+    /* Return the status. */
> -+    gcmkFOOTER();
> -+    return status;
> -+}
> -+#endif
> -+
> - static gceSTATUS
> - _ResetGPU(
> -     IN gckHARDWARE Hardware,
> -@@ -5602,6 +6264,22 @@ gckHARDWARE_IsFeatureAvailable(
> -             &&      ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
> -         break;
> -
> -+    case gcvFEATURE_PIPE_2D:
> -+        available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 9:9) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))) == (0x1  & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))));
> -+        break;
> -+
> -+    case gcvFEATURE_PIPE_3D:
> -+#ifndef VIVANTE_NO_3D
> -+        available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1  & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
> -+#else
> -+        available = gcvFALSE;
> -+#endif
> -+        break;
> -+
> -+    case gcvFEATURE_HALTI2:
> -+        available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures4)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))));
> -+        break;
> -+
> -     default:
> -         gcmkFATAL("Invalid feature has been requested.");
> -         available = gcvFALSE;
> -diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
> -index 37226b7..287ea60 100644
> ---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
> -+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
> -@@ -92,6 +92,7 @@ struct _gckHARDWARE
> - #endif
> -
> -     gctBOOL                     powerManagement;
> -+    gctBOOL                     gpuProfiler;
> - };
> -
> - gceSTATUS
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
> -index b7b0d28..12a5340 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
> -@@ -128,19 +128,6 @@ _ResetFinishFunction(
> - **          Pointer to a variable that will hold the pointer to the gckKERNEL
> - **          object.
> - */
> --#ifdef ANDROID
> --#if gcdNEW_PROFILER_FILE
> --#define DEFAULT_PROFILE_FILE_NAME   "/sdcard/vprofiler.vpd"
> --#else
> --#define DEFAULT_PROFILE_FILE_NAME   "/sdcard/vprofiler.xml"
> --#endif
> --#else
> --#if gcdNEW_PROFILER_FILE
> --#define DEFAULT_PROFILE_FILE_NAME   "vprofiler.vpd"
> --#else
> --#define DEFAULT_PROFILE_FILE_NAME   "vprofiler.xml"
> --#endif
> --#endif
> -
> - gceSTATUS
> - gckKERNEL_Construct(
> -@@ -302,17 +289,12 @@ gckKERNEL_Construct(
> -
> - #if VIVANTE_PROFILER
> -     /* Initialize profile setting */
> --#if defined ANDROID
> -     kernel->profileEnable = gcvFALSE;
> --#else
> --    kernel->profileEnable = gcvTRUE;
> --#endif
> -     kernel->profileCleanRegister = gcvTRUE;
> -+#endif
> -
> --    gcmkVERIFY_OK(
> --        gckOS_MemCopy(kernel->profileFileName,
> --                      DEFAULT_PROFILE_FILE_NAME,
> --                      gcmSIZEOF(DEFAULT_PROFILE_FILE_NAME) + 1));
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+    gcmkONERROR(gckOS_CreateSyncTimeline(Os, &kernel->timeline));
> - #endif
> -
> -     /* Return pointer to the gckKERNEL object. */
> -@@ -395,6 +377,13 @@ OnError:
> -         }
> - #endif
> -
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+        if (kernel->timeline)
> -+        {
> -+            gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Os, kernel->timeline));
> -+        }
> -+#endif
> -+
> -         gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, kernel));
> -     }
> -
> -@@ -525,6 +514,10 @@ gckKERNEL_Destroy(
> -     }
> - #endif
> -
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+    gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Kernel->os, Kernel->timeline));
> -+#endif
> -+
> -     /* Mark the gckKERNEL object as unknown. */
> -     Kernel->object.type = gcvOBJ_UNKNOWN;
> -
> -@@ -1310,7 +1303,8 @@ gckKERNEL_Dispatch(
> -         /* Commit a command and context buffer. */
> -         gcmkONERROR(
> -             gckCOMMAND_Commit(Kernel->command,
> --                              gcmNAME_TO_PTR(Interface->u.Commit.context),
> -+                              Interface->u.Commit.context ?
> -+                                  gcmNAME_TO_PTR(Interface->u.Commit.context) : gcvNULL,
> -                               gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer),
> -                               gcmUINT64_TO_PTR(Interface->u.Commit.delta),
> -                               gcmUINT64_TO_PTR(Interface->u.Commit.queue),
> -@@ -1600,7 +1594,15 @@ gckKERNEL_Dispatch(
> -         break;
> -
> -     case gcvHAL_READ_ALL_PROFILE_REGISTERS:
> --#if VIVANTE_PROFILER
> -+#if VIVANTE_PROFILER && VIVANTE_PROFILER_CONTEXT
> -+        /* Read profile data according to the context. */
> -+        gcmkONERROR(
> -+            gckHARDWARE_QueryContextProfile(
> -+                Kernel->hardware,
> -+                Kernel->profileCleanRegister,
> -+                gcmNAME_TO_PTR(Interface->u.RegisterProfileData.context),
> -+                &Interface->u.RegisterProfileData.counters));
> -+#elif VIVANTE_PROFILER
> -         /* Read all 3D profile registers. */
> -         gcmkONERROR(
> -             gckHARDWARE_QueryProfileRegisters(
> -@@ -1628,11 +1630,6 @@ gckKERNEL_Dispatch(
> - #if VIVANTE_PROFILER
> -         /* Get profile setting */
> -         Interface->u.GetProfileSetting.enable = Kernel->profileEnable;
> --
> --        gcmkVERIFY_OK(
> --            gckOS_MemCopy(Interface->u.GetProfileSetting.fileName,
> --                          Kernel->profileFileName,
> --                          gcdMAX_PROFILE_FILE_NAME));
> - #endif
> -
> -         status = gcvSTATUS_OK;
> -@@ -1640,12 +1637,13 @@ gckKERNEL_Dispatch(
> -     case gcvHAL_SET_PROFILE_SETTING:
> - #if VIVANTE_PROFILER
> -         /* Set profile setting */
> --        Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
> --
> --        gcmkVERIFY_OK(
> --            gckOS_MemCopy(Kernel->profileFileName,
> --                          Interface->u.SetProfileSetting.fileName,
> --                          gcdMAX_PROFILE_FILE_NAME));
> -+        if(Kernel->hardware->gpuProfiler)
> -+            Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
> -+        else
> -+        {
> -+            status = gcvSTATUS_NOT_SUPPORTED;
> -+            break;
> -+        }
> - #endif
> -
> -         status = gcvSTATUS_OK;
> -@@ -2093,6 +2091,61 @@ gckKERNEL_Dispatch(
> - #endif
> -         break;
> -
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+    case gcvHAL_SYNC_POINT:
> -+        {
> -+            gctSYNC_POINT syncPoint;
> -+
> -+            switch (Interface->u.SyncPoint.command)
> -+            {
> -+            case gcvSYNC_POINT_CREATE:
> -+                gcmkONERROR(gckOS_CreateSyncPoint(Kernel->os, &syncPoint));
> -+
> -+                Interface->u.SyncPoint.syncPoint = gcmPTR_TO_UINT64(syncPoint);
> -+
> -+                gcmkVERIFY_OK(
> -+                    gckKERNEL_AddProcessDB(Kernel,
> -+                                           processID, gcvDB_SYNC_POINT,
> -+                                           syncPoint,
> -+                                           gcvNULL,
> -+                                           0));
> -+                break;
> -+
> -+            case gcvSYNC_POINT_DESTROY:
> -+                syncPoint = gcmUINT64_TO_PTR(Interface->u.SyncPoint.syncPoint);
> -+
> -+                gcmkONERROR(gckOS_DestroySyncPoint(Kernel->os, syncPoint));
> -+
> -+                gcmkVERIFY_OK(
> -+                    gckKERNEL_RemoveProcessDB(Kernel,
> -+                                              processID, gcvDB_SYNC_POINT,
> -+                                              syncPoint));
> -+                break;
> -+
> -+            default:
> -+                gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
> -+                break;
> -+            }
> -+        }
> -+        break;
> -+
> -+    case gcvHAL_CREATE_NATIVE_FENCE:
> -+        {
> -+            gctINT fenceFD;
> -+            gctSYNC_POINT syncPoint =
> -+                gcmUINT64_TO_PTR(Interface->u.CreateNativeFence.syncPoint);
> -+
> -+            gcmkONERROR(
> -+                gckOS_CreateNativeFence(Kernel->os,
> -+                                        Kernel->timeline,
> -+                                        syncPoint,
> -+                                        &fenceFD));
> -+
> -+            Interface->u.CreateNativeFence.fenceFD = fenceFD;
> -+        }
> -+        break;
> -+#endif
> -+
> -     default:
> -         /* Invalid command. */
> -         gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
> -@@ -2856,6 +2909,8 @@ gckKERNEL_Recovery(
> -         return gcvSTATUS_OK;
> -     }
> -
> -+    gcmkPRINT("[galcore]: GPU[%d] hang, automatic recovery.", Kernel->core);
> -+
> -     /* Start a timer to clear reset flag, before timer is expired,
> -     ** other recovery request is ignored. */
> -     gcmkVERIFY_OK(
> -@@ -3382,7 +3437,7 @@ gckLINKQUEUE_Dequeue(
> -     IN gckLINKQUEUE LinkQueue
> -     )
> - {
> --    gcmASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
> -+    gcmkASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
> -
> -     LinkQueue->count--;
> -     LinkQueue->front = (LinkQueue->front + 1) % gcdLINK_QUEUE_SIZE;
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
> -index 5896e93..1c40df2 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
> -@@ -140,8 +140,9 @@ typedef enum _gceDATABASE_TYPE
> -     gcvDB_CONTEXT,                      /* Context */
> -     gcvDB_IDLE,                         /* GPU idle. */
> -     gcvDB_MAP_MEMORY,                   /* Map memory */
> --    gcvDB_SHARED_INFO,                 /* Private data */
> --    gcvDB_MAP_USER_MEMORY               /* Map user memory */
> -+    gcvDB_SHARED_INFO,                  /* Private data */
> -+    gcvDB_MAP_USER_MEMORY,              /* Map user memory */
> -+    gcvDB_SYNC_POINT,                   /* Sync point. */
> - }
> - gceDATABASE_TYPE;
> -
> -@@ -406,9 +407,6 @@ struct _gckKERNEL
> -     /* Enable profiling */
> -     gctBOOL                     profileEnable;
> -
> --    /* The profile file name */
> --    gctCHAR                     profileFileName[gcdMAX_PROFILE_FILE_NAME];
> --
> -     /* Clear profile register or not*/
> -     gctBOOL                     profileCleanRegister;
> -
> -@@ -445,6 +443,10 @@ struct _gckKERNEL
> - #if gcdDVFS
> -     gckDVFS                     dvfs;
> - #endif
> -+
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+    gctHANDLE                   timeline;
> -+#endif
> - };
> -
> - struct _FrequencyHistory
> -@@ -496,6 +498,11 @@ struct _gckCOMMAND
> -     /* Context switching mutex. */
> -     gctPOINTER                  mutexContext;
> -
> -+#if VIVANTE_PROFILER_CONTEXT
> -+    /* Context sequence mutex. */
> -+    gctPOINTER                  mutexContextSeq;
> -+#endif
> -+
> -     /* Command queue power semaphore. */
> -     gctPOINTER                  powerSemaphore;
> -
> -@@ -649,6 +656,8 @@ struct _gckEVENT
> -     gctPOINTER                  eventListMutex;
> -
> -     gctPOINTER                  submitTimer;
> -+
> -+    volatile gctBOOL            inNotify;
> - };
> -
> - /* Free all events belonging to a process. */
> -@@ -668,6 +677,11 @@ gckEVENT_Stop(
> - 	IN OUT gctSIZE_T * waitSize
> -     );
> -
> -+gceSTATUS
> -+gckEVENT_WaitEmpty(
> -+    IN gckEVENT Event
> -+    );
> -+
> - /* gcuVIDMEM_NODE structure. */
> - typedef union _gcuVIDMEM_NODE
> - {
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
> -index 9ee9ea1..73dab81 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
> -@@ -494,6 +494,11 @@ gckCOMMAND_Construct(
> -     /* Create the context switching mutex. */
> -     gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContext));
> -
> -+#if VIVANTE_PROFILER_CONTEXT
> -+    /* Create the context switching mutex. */
> -+    gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContextSeq));
> -+#endif
> -+
> -     /* Create the power management semaphore. */
> -     gcmkONERROR(gckOS_CreateSemaphore(os, &command->powerSemaphore));
> -
> -@@ -572,6 +577,13 @@ OnError:
> -             gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContext));
> -         }
> -
> -+#if VIVANTE_PROFILER_CONTEXT
> -+        if (command->mutexContextSeq != gcvNULL)
> -+        {
> -+            gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContextSeq));
> -+        }
> -+#endif
> -+
> -         if (command->mutexQueue != gcvNULL)
> -         {
> -             gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexQueue));
> -@@ -662,6 +674,11 @@ gckCOMMAND_Destroy(
> -     /* Delete the context switching mutex. */
> -     gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContext));
> -
> -+#if VIVANTE_PROFILER_CONTEXT
> -+    if (Command->mutexContextSeq != gcvNULL)
> -+        gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContextSeq));
> -+#endif
> -+
> -     /* Delete the command queue mutex. */
> -     gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexQueue));
> -
> -@@ -1127,6 +1144,10 @@ gckCOMMAND_Commit(
> - # endif
> - #endif
> -
> -+#if VIVANTE_PROFILER_CONTEXT
> -+    gctBOOL sequenceAcquired = gcvFALSE;
> -+#endif
> -+
> -     gctPOINTER pointer = gcvNULL;
> -
> -     gcmkHEADER_ARG(
> -@@ -1145,6 +1166,17 @@ gckCOMMAND_Commit(
> -
> -     gcmkONERROR(_FlushMMU(Command));
> -
> -+#if VIVANTE_PROFILER_CONTEXT
> -+    if((Command->kernel->hardware->gpuProfiler) && (Command->kernel->profileEnable))
> -+    {
> -+        /* Acquire the context sequnence mutex. */
> -+        gcmkONERROR(gckOS_AcquireMutex(
> -+            Command->os, Command->mutexContextSeq, gcvINFINITE
> -+            ));
> -+        sequenceAcquired = gcvTRUE;
> -+    }
> -+#endif
> -+
> -     /* Acquire the command queue. */
> -     gcmkONERROR(gckCOMMAND_EnterCommit(Command, gcvFALSE));
> -     commitEntered = gcvTRUE;
> -@@ -2002,6 +2034,23 @@ gckCOMMAND_Commit(
> -     gcmkONERROR(gckCOMMAND_ExitCommit(Command, gcvFALSE));
> -     commitEntered = gcvFALSE;
> -
> -+#if VIVANTE_PROFILER_CONTEXT
> -+    if(sequenceAcquired)
> -+    {
> -+        gcmkONERROR(gckCOMMAND_Stall(Command, gcvTRUE));
> -+        if (Command->currContext)
> -+        {
> -+            gcmkONERROR(gckHARDWARE_UpdateContextProfile(
> -+                hardware,
> -+                Command->currContext));
> -+        }
> -+
> -+        /* Release the context switching mutex. */
> -+        gcmkONERROR(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
> -+        sequenceAcquired = gcvFALSE;
> -+    }
> -+#endif
> -+
> -     /* Loop while there are records in the queue. */
> -     while (EventQueue != gcvNULL)
> -     {
> -@@ -2114,6 +2163,14 @@ OnError:
> -         gcmkVERIFY_OK(gckCOMMAND_ExitCommit(Command, gcvFALSE));
> -     }
> -
> -+#if VIVANTE_PROFILER_CONTEXT
> -+    if (sequenceAcquired)
> -+    {
> -+        /* Release the context sequence mutex. */
> -+        gcmkVERIFY_OK(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
> -+    }
> -+#endif
> -+
> -     /* Unmap the command buffer pointer. */
> -     if (commandBufferMapped)
> -     {
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
> -index 76c1c10..1a7c340 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
> -@@ -2819,6 +2819,7 @@ gckVGCOMMAND_Construct(
> -         ** Enable TS overflow interrupt.
> -         */
> -
> -+        command->info.tsOverflowInt = 0;
> -         gcmkERR_BREAK(gckVGINTERRUPT_Enable(
> -             Kernel->interrupt,
> -             &command->info.tsOverflowInt,
> -@@ -3406,38 +3407,26 @@ gckVGCOMMAND_Commit(
> -         gctBOOL previousExecuted;
> -         gctUINT controlIndex;
> -
> -+        gcmkERR_BREAK(gckVGHARDWARE_SetPowerManagementState(
> -+            Command->hardware, gcvPOWER_ON_AUTO
> -+            ));
> -+
> -+        /* Acquire the power semaphore. */
> -+        gcmkERR_BREAK(gckOS_AcquireSemaphore(
> -+            Command->os, Command->powerSemaphore
> -+            ));
> -+
> -         /* Acquire the mutex. */
> --        gcmkERR_BREAK(gckOS_AcquireMutex(
> -+        status = gckOS_AcquireMutex(
> -             Command->os,
> -             Command->commitMutex,
> -             gcvINFINITE
> --            ));
> --
> --        status = gckVGHARDWARE_SetPowerManagementState(
> --            Command->hardware, gcvPOWER_ON_AUTO);
> --
> --        if (gcmIS_ERROR(status))
> --        {
> --            /* Acquire the mutex. */
> --            gcmkVERIFY_OK(gckOS_ReleaseMutex(
> --                Command->os,
> --                Command->commitMutex
> --                ));
> --
> --            break;
> --        }
> --            /* Acquire the power semaphore. */
> --        status = gckOS_AcquireSemaphore(
> --            Command->os, Command->powerSemaphore);
> -+            );
> -
> -         if (gcmIS_ERROR(status))
> -         {
> --            /* Acquire the mutex. */
> --            gcmkVERIFY_OK(gckOS_ReleaseMutex(
> --                Command->os,
> --                Command->commitMutex
> --                ));
> --
> -+            gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
> -+                Command->os, Command->powerSemaphore));
> -             break;
> -         }
> -
> -@@ -3669,14 +3658,14 @@ gckVGCOMMAND_Commit(
> -         }
> -         while (gcvFALSE);
> -
> --        gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
> --            Command->os, Command->powerSemaphore));
> --
> -         /* Release the mutex. */
> -         gcmkCHECK_STATUS(gckOS_ReleaseMutex(
> -             Command->os,
> -             Command->commitMutex
> -             ));
> -+
> -+        gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
> -+            Command->os, Command->powerSemaphore));
> -     }
> -     while (gcvFALSE);
> -
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
> -index 673d4f7..134351a 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
> -@@ -1307,6 +1307,18 @@ gckKERNEL_DestroyProcessDB(
> -             status = gckOS_FreeMemory(Kernel->os, record->physical);
> -             break;
> -
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+        case gcvDB_SYNC_POINT:
> -+            /* Free the user signal. */
> -+            status = gckOS_DestroySyncPoint(Kernel->os,
> -+                                            (gctSYNC_POINT) record->data);
> -+
> -+            gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
> -+                           "DB: SYNC POINT %d (status=%d)",
> -+                           (gctINT)(gctUINTPTR_T)record->data, status);
> -+            break;
> -+#endif
> -+
> -         default:
> -             gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE,
> -                            "DB: Correcupted record=0x%08x type=%d",
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
> -index 217f7f1..2d81a56 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
> -@@ -931,6 +931,7 @@ gckEVENT_AddList(
> -         || (Interface->command == gcvHAL_TIMESTAMP)
> -         || (Interface->command == gcvHAL_COMMIT_DONE)
> -         || (Interface->command == gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER)
> -+        || (Interface->command == gcvHAL_SYNC_POINT)
> -         );
> -
> -     /* Validate the source. */
> -@@ -2131,6 +2132,9 @@ gckEVENT_Notify(
> -                                        gcvINFINITE));
> -         acquired = gcvTRUE;
> -
> -+        /* We are in the notify loop. */
> -+        Event->inNotify = gcvTRUE;
> -+
> -         /* Grab the event head. */
> -         record = queue->head;
> -
> -@@ -2463,6 +2467,17 @@ gckEVENT_Notify(
> -                  break;
> - #endif
> -
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+            case gcvHAL_SYNC_POINT:
> -+                {
> -+                    gctSYNC_POINT syncPoint;
> -+
> -+                    syncPoint = gcmUINT64_TO_PTR(record->info.u.SyncPoint.syncPoint);
> -+                    status = gckOS_SignalSyncPoint(Event->os, syncPoint);
> -+                }
> -+                break;
> -+#endif
> -+
> -             case gcvHAL_COMMIT_DONE:
> -                 break;
> -
> -@@ -2505,6 +2520,9 @@ gckEVENT_Notify(
> -         gcmkONERROR(_TryToIdleGPU(Event));
> -     }
> -
> -+    /* We are out the notify loop. */
> -+    Event->inNotify = gcvFALSE;
> -+
> -     /* Success. */
> -     gcmkFOOTER_NO();
> -     return gcvSTATUS_OK;
> -@@ -2524,6 +2542,9 @@ OnError:
> -     }
> - #endif
> -
> -+    /* We are out the notify loop. */
> -+    Event->inNotify = gcvFALSE;
> -+
> -     /* Return the status. */
> -     gcmkFOOTER();
> -     return status;
> -@@ -2871,3 +2892,11 @@ gckEVENT_Dump(
> -     return gcvSTATUS_OK;
> - }
> -
> -+gceSTATUS gckEVENT_WaitEmpty(gckEVENT Event)
> -+{
> -+    gctBOOL isEmpty;
> -+
> -+    while (Event->inNotify || (gcmIS_SUCCESS(gckEVENT_IsEmpty(Event, &isEmpty)) && !isEmpty)) ;
> -+
> -+    return gcvSTATUS_OK;
> -+}
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
> -index 8ac187b..50bc63e 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
> -@@ -794,6 +794,9 @@ gckVGINTERRUPT_Enque(
> -             Interrupt->kernel->hardware, &triggered
> -             ));
> -
> -+        /* Mask out TS overflow interrupt */
> -+        triggered &= 0xfffffffe;
> -+
> -         /* No interrupts to process? */
> -         if (triggered == 0)
> -         {
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
> -index c7f67c7..e4ca497 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
> -@@ -1436,7 +1436,7 @@ gckMMU_AllocatePages(
> -     acquired = gcvTRUE;
> -
> -     /* Allocate page table for current MMU. */
> --    for (i = 0; i < mirrorPageTable->reference; i++)
> -+    for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
> -     {
> -         if (Mmu == mirrorPageTable->mmus[i])
> -         {
> -@@ -1446,7 +1446,7 @@ gckMMU_AllocatePages(
> -     }
> -
> -     /* Allocate page table for other MMUs. */
> --    for (i = 0; i < mirrorPageTable->reference; i++)
> -+    for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
> -     {
> -         mmu = mirrorPageTable->mmus[i];
> -
> -@@ -1500,7 +1500,7 @@ gckMMU_FreePages(
> -
> -     offset = (gctUINT32)PageTable - (gctUINT32)Mmu->pageTableLogical;
> -
> --    for (i = 0; i < mirrorPageTable->reference; i++)
> -+    for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
> -     {
> -         mmu = mirrorPageTable->mmus[i];
> -
> -@@ -1639,7 +1639,7 @@ gckMMU_SetPage(
> -     _WritePageEntry(PageEntry, data);
> -
> - #if gcdMIRROR_PAGETABLE
> --    for (i = 0; i < mirrorPageTable->reference; i++)
> -+    for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
> -     {
> -         mmu = mirrorPageTable->mmus[i];
> -
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
> -index 8b8bbdc..3b5dd82 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
> -@@ -1582,6 +1582,7 @@ _NeedVirtualMapping(
> -     gctUINT32 end;
> -     gcePOOL pool;
> -     gctUINT32 offset;
> -+    gctUINT32 baseAddress;
> -
> -     gcmkHEADER_ARG("Node=0x%X", Node);
> -
> -@@ -1601,10 +1602,16 @@ _NeedVirtualMapping(
> -         else
> - #endif
> -         {
> --            /* For cores which can't access all physical address. */
> --            gcmkONERROR(gckHARDWARE_ConvertLogical(Kernel->hardware,
> --                        Node->Virtual.logical,
> --                        &phys));
> -+            /* Convert logical address into a physical address. */
> -+            gcmkONERROR(
> -+                gckOS_GetPhysicalAddress(Kernel->os, Node->Virtual.logical, &phys));
> -+
> -+            gcmkONERROR(gckOS_GetBaseAddress(Kernel->os, &baseAddress));
> -+
> -+            gcmkASSERT(phys >= baseAddress);
> -+
> -+            /* Subtract baseAddress to get a GPU address used for programming. */
> -+            phys -= baseAddress;
> -
> -             /* If part of region is belong to gcvPOOL_VIRTUAL,
> -             ** whole region has to be mapped. */
> -@@ -1734,6 +1741,11 @@ gckVIDMEM_Lock(
> -         gcmkONERROR(gckOS_AcquireMutex(os, Node->Virtual.mutex, gcvINFINITE));
> -         acquired = gcvTRUE;
> -
> -+#if gcdPAGED_MEMORY_CACHEABLE
> -+        /* Force video memory cacheable. */
> -+        Cacheable = gcvTRUE;
> -+#endif
> -+
> -         gcmkONERROR(
> -             gckOS_LockPages(os,
> -                             Node->Virtual.physical,
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
> -index 4406d7e..7312cc2 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
> -@@ -123,6 +123,12 @@ extern "C" {
> -
> - #define gcvINVALID_ADDRESS          ~0U
> -
> -+#define gcmGET_PRE_ROTATION(rotate) \
> -+    ((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)))
> -+
> -+#define gcmGET_POST_ROTATION(rotate) \
> -+    ((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y))
> -+
> - /******************************************************************************\
> - ******************************** gcsOBJECT Object *******************************
> - \******************************************************************************/
> -@@ -1124,6 +1130,60 @@ gckOS_UnmapUserMemory(
> -     IN gctUINT32 Address
> -     );
> -
> -+/******************************************************************************\
> -+************************** Android Native Fence Sync ***************************
> -+\******************************************************************************/
> -+gceSTATUS
> -+gckOS_CreateSyncTimeline(
> -+    IN gckOS Os,
> -+    OUT gctHANDLE * Timeline
> -+    );
> -+
> -+gceSTATUS
> -+gckOS_DestroySyncTimeline(
> -+    IN gckOS Os,
> -+    IN gctHANDLE Timeline
> -+    );
> -+
> -+gceSTATUS
> -+gckOS_CreateSyncPoint(
> -+    IN gckOS Os,
> -+    OUT gctSYNC_POINT * SyncPoint
> -+    );
> -+
> -+gceSTATUS
> -+gckOS_ReferenceSyncPoint(
> -+    IN gckOS Os,
> -+    IN gctSYNC_POINT SyncPoint
> -+    );
> -+
> -+gceSTATUS
> -+gckOS_DestroySyncPoint(
> -+    IN gckOS Os,
> -+    IN gctSYNC_POINT SyncPoint
> -+    );
> -+
> -+gceSTATUS
> -+gckOS_SignalSyncPoint(
> -+    IN gckOS Os,
> -+    IN gctSYNC_POINT SyncPoint
> -+    );
> -+
> -+gceSTATUS
> -+gckOS_QuerySyncPoint(
> -+    IN gckOS Os,
> -+    IN gctSYNC_POINT SyncPoint,
> -+    OUT gctBOOL_PTR State
> -+    );
> -+
> -+gceSTATUS
> -+gckOS_CreateNativeFence(
> -+    IN gckOS Os,
> -+    IN gctHANDLE Timeline,
> -+    IN gctSYNC_POINT SyncPoint,
> -+    OUT gctINT * FenceFD
> -+    );
> -+
> - #if !USE_NEW_LINUX_SIGNAL
> - /* Create signal to be used in the user space. */
> - gceSTATUS
> -@@ -1758,7 +1818,7 @@ gckKERNEL_Recovery(
> - void
> - gckKERNEL_SetTimeOut(
> -     IN gckKERNEL Kernel,
> --	IN gctUINT32 timeOut
> -+    IN gctUINT32 timeOut
> -     );
> -
> - /* Get access to the user data. */
> -@@ -2078,6 +2138,12 @@ gckHARDWARE_SetPowerManagement(
> -     IN gctBOOL PowerManagement
> -     );
> -
> -+gceSTATUS
> -+gckHARDWARE_SetGpuProfiler(
> -+    IN gckHARDWARE Hardware,
> -+    IN gctBOOL GpuProfiler
> -+    );
> -+
> - #if gcdENABLE_FSCALE_VAL_ADJUST
> - gceSTATUS
> - gckHARDWARE_SetFscaleValue(
> -@@ -2554,6 +2620,22 @@ gckHARDWARE_QueryProfileRegisters(
> -     );
> - #endif
> -
> -+#if VIVANTE_PROFILER_CONTEXT
> -+gceSTATUS
> -+gckHARDWARE_QueryContextProfile(
> -+    IN gckHARDWARE Hardware,
> -+    IN gctBOOL   Clear,
> -+    IN gckCONTEXT Context,
> -+    OUT gcsPROFILER_COUNTERS * Counters
> -+    );
> -+
> -+gceSTATUS
> -+gckHARDWARE_UpdateContextProfile(
> -+    IN gckHARDWARE Hardware,
> -+    IN gckCONTEXT Context
> -+    );
> -+#endif
> -+
> - gceSTATUS
> - gckOS_SignalQueryHardware(
> -     IN gckOS Os,
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
> -index 44689b0..9c17114 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
> -@@ -71,10 +71,17 @@ typedef struct _gcoFENCE *              gcoFENCE;
> - typedef struct _gcsSYNC_CONTEXT  *      gcsSYNC_CONTEXT_PTR;
> - #endif
> -
> -+typedef struct _gcoOS_SymbolsList gcoOS_SymbolsList;
> -+
> - /******************************************************************************\
> - ******************************* Process local storage *************************
> - \******************************************************************************/
> - typedef struct _gcsPLS * gcsPLS_PTR;
> -+
> -+typedef void (* gctPLS_DESTRUCTOR) (
> -+    gcsPLS_PTR
> -+    );
> -+
> - typedef struct _gcsPLS
> - {
> -     /* Global objects. */
> -@@ -103,6 +110,12 @@ typedef struct _gcsPLS
> -
> -     /* PorcessID of the constrcutor process */
> -     gctUINT32                   processID;
> -+#if gcdFORCE_GAL_LOAD_TWICE
> -+    /* ThreadID of the constrcutor process. */
> -+    gctSIZE_T                   threadID;
> -+    /* Flag for calling module destructor. */
> -+    gctBOOL                     exiting;
> -+#endif
> -
> -     /* Reference count for destructor. */
> -     gcsATOM_PTR                 reference;
> -@@ -111,6 +124,8 @@ typedef struct _gcsPLS
> -     gctBOOL                     bNeedSupportNP2Texture;
> - #endif
> -
> -+    /* Destructor for eglDisplayInfo. */
> -+    gctPLS_DESTRUCTOR           destructor;
> - }
> - gcsPLS;
> -
> -@@ -148,6 +163,11 @@ typedef struct _gcsTLS
> - #endif
> - 	gco2D						engine2D;
> -     gctBOOL                     copied;
> -+
> -+#if gcdFORCE_GAL_LOAD_TWICE
> -+    /* libGAL.so handle */
> -+    gctHANDLE                   handle;
> -+#endif
> - }
> - gcsTLS;
> -
> -@@ -160,6 +180,7 @@ typedef enum _gcePLS_VALUE
> -   gcePLS_VALUE_EGL_DISPLAY_INFO,
> -   gcePLS_VALUE_EGL_SURFACE_INFO,
> -   gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO,
> -+  gcePLS_VALUE_EGL_DESTRUCTOR_INFO,
> - }
> - gcePLS_VALUE;
> -
> -@@ -577,6 +598,12 @@ gcoHAL_Call(
> -     IN OUT gcsHAL_INTERFACE_PTR Interface
> -     );
> -
> -+gceSTATUS
> -+gcoHAL_GetPatchID(
> -+    IN  gcoHAL Hal,
> -+    OUT gcePATCH_ID * PatchID
> -+    );
> -+
> - /* Schedule an event. */
> - gceSTATUS
> - gcoHAL_ScheduleEvent(
> -@@ -637,6 +664,16 @@ gcoHAL_QuerySeparated3D2D(
> -     IN gcoHAL Hal
> -     );
> -
> -+gceSTATUS
> -+gcoHAL_QuerySpecialHint(
> -+    IN gceSPECIAL_HINT Hint
> -+    );
> -+
> -+gceSTATUS
> -+gcoHAL_SetSpecialHintData(
> -+    IN gcoHARDWARE Hardware
> -+    );
> -+
> - /* Get pointer to gcoVG object. */
> - gceSTATUS
> - gcoHAL_GetVGEngine(
> -@@ -786,7 +823,6 @@ gcoOS_FreeVideoMemory(
> -     IN gctPOINTER Handle
> -     );
> -
> --#if gcdENABLE_BANK_ALIGNMENT
> - gceSTATUS
> - gcoSURF_GetBankOffsetBytes(
> -     IN gcoSURF Surfce,
> -@@ -794,7 +830,6 @@ gcoSURF_GetBankOffsetBytes(
> -     IN gctUINT32 Stride,
> -     IN gctUINT32_PTR Bytes
> -     );
> --#endif
> -
> - /* Map user memory. */
> - gceSTATUS
> -@@ -918,6 +953,21 @@ gcoOS_Flush(
> -     IN gctFILE File
> -     );
> -
> -+/* Close a file descriptor. */
> -+gceSTATUS
> -+gcoOS_CloseFD(
> -+    IN gcoOS Os,
> -+    IN gctINT FD
> -+    );
> -+
> -+/* Dup file descriptor to another. */
> -+gceSTATUS
> -+gcoOS_DupFD(
> -+    IN gcoOS Os,
> -+    IN gctINT FD,
> -+    OUT gctINT * FD2
> -+    );
> -+
> - /* Create an endpoint for communication. */
> - gceSTATUS
> - gcoOS_Socket(
> -@@ -977,6 +1027,14 @@ gcoOS_GetEnv(
> -     OUT gctSTRING * Value
> -     );
> -
> -+/* Set environment variable value. */
> -+gceSTATUS
> -+gcoOS_SetEnv(
> -+    IN gcoOS Os,
> -+    IN gctCONST_STRING VarName,
> -+    IN gctSTRING Value
> -+    );
> -+
> - /* Get current working directory. */
> - gceSTATUS
> - gcoOS_GetCwd(
> -@@ -1210,6 +1268,13 @@ gcoOS_DetectProcessByEncryptedName(
> -     IN gctCONST_STRING Name
> -     );
> -
> -+#if defined(ANDROID)
> -+gceSTATUS
> -+gcoOS_DetectProgrameByEncryptedSymbols(
> -+    IN gcoOS_SymbolsList Symbols
> -+    );
> -+#endif
> -+
> - /*----------------------------------------------------------------------------*/
> - /*----- Atoms ----------------------------------------------------------------*/
> -
> -@@ -1403,6 +1468,42 @@ gcoOS_UnmapSignal(
> -     IN gctSIGNAL Signal
> -     );
> -
> -+/*----------------------------------------------------------------------------*/
> -+/*----- Android Native Fence -------------------------------------------------*/
> -+
> -+/* Create sync point. */
> -+gceSTATUS
> -+gcoOS_CreateSyncPoint(
> -+    IN gcoOS Os,
> -+    OUT gctSYNC_POINT * SyncPoint
> -+    );
> -+
> -+/* Destroy sync point. */
> -+gceSTATUS
> -+gcoOS_DestroySyncPoint(
> -+    IN gcoOS Os,
> -+    IN gctSYNC_POINT SyncPoint
> -+    );
> -+
> -+/* Create native fence. */
> -+gceSTATUS
> -+gcoOS_CreateNativeFence(
> -+    IN gcoOS Os,
> -+    IN gctSYNC_POINT SyncPoint,
> -+    OUT gctINT * FenceFD
> -+    );
> -+
> -+/* Wait on native fence. */
> -+gceSTATUS
> -+gcoOS_WaitNativeFence(
> -+    IN gcoOS Os,
> -+    IN gctINT FenceFD,
> -+    IN gctUINT32 Timeout
> -+    );
> -+
> -+/*----------------------------------------------------------------------------*/
> -+/*----- Memory Access and Cache ----------------------------------------------*/
> -+
> - /* Write a register. */
> - gceSTATUS
> - gcoOS_WriteRegister(
> -@@ -1507,7 +1608,7 @@ gcoOS_QueryProfileTickRate(
> - #   define gcmPROFILE_QUERY(start, ticks)   do { } while (gcvFALSE)
> - #   define gcmPROFILE_ONLY(x)               do { } while (gcvFALSE)
> - #   define gcmPROFILE_ELSE(x)               x
> --#   define gcmPROFILE_DECLARE_ONLY(x)       typedef x
> -+#   define gcmPROFILE_DECLARE_ONLY(x)       do { } while (gcvFALSE)
> - #   define gcmPROFILE_DECLARE_ELSE(x)       x
> - #endif
> -
> -@@ -1579,6 +1680,28 @@ typedef struct _gcsRECT
> - }
> - gcsRECT;
> -
> -+typedef union _gcsPIXEL
> -+{
> -+    struct
> -+    {
> -+        gctFLOAT r, g, b, a;
> -+        gctFLOAT d, s;
> -+    } pf;
> -+
> -+    struct
> -+    {
> -+        gctINT32 r, g, b, a;
> -+        gctINT32 d, s;
> -+    } pi;
> -+
> -+    struct
> -+    {
> -+        gctUINT32 r, g, b, a;
> -+        gctUINT32 d, s;
> -+    } pui;
> -+
> -+} gcsPIXEL;
> -+
> -
> - /******************************************************************************\
> - ********************************* gcoSURF Object ********************************
> -@@ -1795,6 +1918,18 @@ gcoSURF_SetRotation(
> -     );
> -
> - gceSTATUS
> -+gcoSURF_SetPreRotation(
> -+    IN gcoSURF Surface,
> -+    IN gceSURF_ROTATION Rotation
> -+    );
> -+
> -+gceSTATUS
> -+gcoSURF_GetPreRotation(
> -+    IN gcoSURF Surface,
> -+    IN gceSURF_ROTATION *Rotation
> -+    );
> -+
> -+gceSTATUS
> - gcoSURF_IsValid(
> -     IN gcoSURF Surface
> -     );
> -@@ -1824,6 +1959,15 @@ gcoSURF_DisableTileStatus(
> -     IN gcoSURF Surface,
> -     IN gctBOOL Decompress
> -     );
> -+
> -+gceSTATUS
> -+gcoSURF_AlignResolveRect(
> -+    IN gcoSURF Surf,
> -+    IN gcsPOINT_PTR RectOrigin,
> -+    IN gcsPOINT_PTR RectSize,
> -+    OUT gcsPOINT_PTR AlignedOrigin,
> -+    OUT gcsPOINT_PTR AlignedSize
> -+    );
> - #endif /* VIVANTE_NO_3D */
> -
> - /* Get surface size. */
> -@@ -1910,6 +2054,9 @@ gcoSURF_FillFromTile(
> -     IN gcoSURF Surface
> -     );
> -
> -+/* Check if surface needs a filler. */
> -+gceSTATUS gcoSURF_NeedFiller(IN gcoSURF Surface);
> -+
> - /* Fill surface with a value. */
> - gceSTATUS
> - gcoSURF_Fill(
> -@@ -1949,6 +2096,19 @@ gcoSURF_SetBuffer(
> -     IN gctUINT32 Physical
> -     );
> -
> -+/* Set the underlying video buffer for the surface wrapper. */
> -+gceSTATUS
> -+gcoSURF_SetVideoBuffer(
> -+    IN gcoSURF Surface,
> -+    IN gceSURF_TYPE Type,
> -+    IN gceSURF_FORMAT Format,
> -+    IN gctUINT Width,
> -+    IN gctUINT Height,
> -+    IN gctUINT Stride,
> -+    IN gctPOINTER *LogicalPlane1,
> -+    IN gctUINT32 *PhysicalPlane1
> -+    );
> -+
> - /* Set the size of the surface in pixels and map the underlying buffer. */
> - gceSTATUS
> - gcoSURF_SetWindow(
> -@@ -3705,6 +3865,12 @@ gcGetUserDebugOption(
> -     void
> -     );
> -
> -+struct _gcoOS_SymbolsList
> -+{
> -+    gcePATCH_ID patchId;
> -+    const char * symList[10];
> -+};
> -+
> - #if gcdHAS_ELLIPSES
> - #define gcmUSER_DEBUG_MSG(level, ...) \
> -     do \
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
> -index 8693c37..062224c 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
> -@@ -39,12 +39,10 @@ extern "C" {
> - #define GC_ENABLE_LOADTIME_OPT           1
> - #endif
> -
> --#define TEMP_OPT_CONSTANT_TEXLD_COORD    1
> -+#define TEMP_OPT_CONSTANT_TEXLD_COORD    0
> -
> - #define TEMP_SHADER_PATCH                1
> -
> --#define ADD_PRE_ROTATION_TO_VS           0
> --
> - #define TEMP_INLINE_ALL_EXPANSION            1
> - /******************************* IR VERSION ******************/
> - #define gcdSL_IR_VERSION gcmCC('\0','\0','\0','\1')
> -@@ -271,6 +269,7 @@ typedef enum _gcSL_OPCODE
> - 	gcSL_ADDSAT,						/* 0x5C */  /* Integer only. */
> - 	gcSL_SUBSAT,						/* 0x5D */  /* Integer only. */
> - 	gcSL_MULSAT,						/* 0x5E */  /* Integer only. */
> -+	gcSL_DP2,							/* 0x5F */
> - 	gcSL_MAXOPCODE
> - }
> - gcSL_OPCODE;
> -@@ -474,6 +473,9 @@ struct _gcsHINT
> -
> -     gctBOOL     clipW;
> -
> -+    /* Flag whether or not the shader has a KILL instruction. */
> -+    gctBOOL     hasKill;
> -+
> -     /* Element count. */
> -     gctUINT32   elementCount;
> -
> -@@ -495,12 +497,18 @@ struct _gcsHINT
> -     /* Balance maximum. */
> -     gctUINT32   balanceMax;
> -
> -+    /* Auto-shift balancing. */
> -+    gctBOOL     autoShift;
> -+
> -     /* Flag whether the PS outputs the depth value or not. */
> -     gctBOOL     psHasFragDepthOut;
> -
> - 	/* Flag whether the ThreadWalker is in PS. */
> - 	gctBOOL		threadWalkerInPS;
> -
> -+    /* HW reg number for position of VS */
> -+    gctUINT32   hwRegNoOfSIVPos;
> -+
> - #if gcdALPHA_KILL_IN_SHADER
> -     /* States to set when alpha kill is enabled. */
> -     gctUINT32   killStateAddress;
> -@@ -687,12 +695,12 @@ typedef enum _gceSHADER_FLAGS
> -     gcvSHADER_USE_ALPHA_KILL            = 0x100,
> - #endif
> -
> --#if ADD_PRE_ROTATION_TO_VS
> -+#if gcdPRE_ROTATION && (ANDROID_SDK_VERSION >= 14)
> -     gcvSHADER_VS_PRE_ROTATION           = 0x200,
> - #endif
> -
> - #if TEMP_INLINE_ALL_EXPANSION
> --    gcvSHADER_INLINE_ALL_EXPANSION      = 0x200,
> -+    gcvSHADER_INLINE_ALL_EXPANSION      = 0x400,
> - #endif
> - }
> - gceSHADER_FLAGS;
> -@@ -827,6 +835,7 @@ typedef struct _gcOPTIMIZER_OPTION
> -     gctBOOL     dumpOptimizerVerbose;  /* dump result IR in each optimization phase */
> -     gctBOOL     dumpBEGenertedCode;    /* dump generated machine code */
> -     gctBOOL     dumpBEVerbose;         /* dump BE tree and optimization detail */
> -+    gctBOOL     dumpBEFinalIR;         /* dump BE final IR */
> -
> -     /* Code generation */
> -
> -@@ -945,6 +954,8 @@ extern gcOPTIMIZER_OPTION theOptimizerOption;
> -               gcmOPT_DUMP_CODEGEN_VERBOSE() )
> - #define gcmOPT_DUMP_CODEGEN_VERBOSE()    \
> -              (gcmGetOptimizerOption()->dumpBEVerbose != 0)
> -+#define gcmOPT_DUMP_FINAL_IR()    \
> -+             (gcmGetOptimizerOption()->dumpBEFinalIR != 0)
> -
> - #define gcmOPT_SET_DUMP_SHADER_SRC(v)   \
> -              gcmGetOptimizerOption()->dumpShaderSource = (v)
> -@@ -1064,6 +1075,13 @@ typedef struct _gcNPOT_PATCH_PARAM
> -     gctINT               texDimension;    /* 2 or 3 */
> - }gcNPOT_PATCH_PARAM, *gcNPOT_PATCH_PARAM_PTR;
> -
> -+typedef struct _gcZBIAS_PATCH_PARAM
> -+{
> -+    /* Driver uses this to program uniform that designating zbias */
> -+    gctINT               uniformAddr;
> -+    gctINT               channel;
> -+}gcZBIAS_PATCH_PARAM, *gcZBIAS_PATCH_PARAM_PTR;
> -+
> - void
> - gcGetOptionFromEnv(
> -     IN OUT gcOPTIMIZER_OPTION * Option
> -@@ -1556,6 +1574,43 @@ gcSHADER_AddUniform(
> - 	OUT gcUNIFORM * Uniform
> - 	);
> -
> -+/*******************************************************************************
> -+**							   gcSHADER_AddPreRotationUniform
> -+********************************************************************************
> -+**
> -+**	Add an uniform to a gcSHADER object.
> -+**
> -+**	INPUT:
> -+**
> -+**		gcSHADER Shader
> -+**			Pointer to a gcSHADER object.
> -+**
> -+**		gctCONST_STRING Name
> -+**			Name of the uniform to add.
> -+**
> -+**		gcSHADER_TYPE Type
> -+**			Type of the uniform to add.
> -+**
> -+**		gctSIZE_T Length
> -+**			Array length of the uniform to add.  'Length' must be at least 1.
> -+**
> -+**		gctINT col
> -+**			Which uniform.
> -+**
> -+**	OUTPUT:
> -+**
> -+**		gcUNIFORM * Uniform
> -+**			Pointer to a variable receiving the gcUNIFORM object pointer.
> -+*/
> -+gceSTATUS
> -+gcSHADER_AddPreRotationUniform(
> -+	IN gcSHADER Shader,
> -+	IN gctCONST_STRING Name,
> -+	IN gcSHADER_TYPE Type,
> -+	IN gctSIZE_T Length,
> -+    IN gctINT col,
> -+	OUT gcUNIFORM * Uniform
> -+	);
> -
> - /*******************************************************************************
> - **							   gcSHADER_AddUniformEx
> -@@ -1677,6 +1732,28 @@ gcSHADER_GetUniformCount(
> - 	);
> -
> - /*******************************************************************************
> -+**                         gcSHADER_GetPreRotationUniform
> -+********************************************************************************
> -+**
> -+**	Get the preRotate Uniform.
> -+**
> -+**	INPUT:
> -+**
> -+**		gcSHADER Shader
> -+**			Pointer to a gcSHADER object.
> -+**
> -+**	OUTPUT:
> -+**
> -+**		gcUNIFORM ** pUniform
> -+**			Pointer to a preRotation uniforms array.
> -+*/
> -+gceSTATUS
> -+gcSHADER_GetPreRotationUniform(
> -+	IN gcSHADER Shader,
> -+	OUT gcUNIFORM ** pUniform
> -+	);
> -+
> -+/*******************************************************************************
> - **                             gcSHADER_GetUniform
> - ********************************************************************************
> - **
> -@@ -3438,6 +3515,34 @@ gcUNIFORM_SetValueF(
> - 	);
> -
> - /*******************************************************************************
> -+**  gcUNIFORM_ProgramF
> -+**
> -+**  Set the value of a uniform in floating point.
> -+**
> -+**  INPUT:
> -+**
> -+**      gctUINT32 Address
> -+**          Address of Uniform.
> -+**
> -+**      gctSIZE_T Row/Col
> -+**
> -+**      const gctFLOAT * Value
> -+**          Pointer to a buffer holding the floating point values for the
> -+**          uniform.
> -+**
> -+**  OUTPUT:
> -+**
> -+**      Nothing.
> -+*/
> -+gceSTATUS
> -+gcUNIFORM_ProgramF(
> -+    IN gctUINT32 Address,
> -+    IN gctSIZE_T Row,
> -+    IN gctSIZE_T Col,
> -+    IN const gctFLOAT * Value
> -+    );
> -+
> -+/*******************************************************************************
> - **						 gcUNIFORM_GetModelViewProjMatrix
> - ********************************************************************************
> - **
> -@@ -3912,6 +4017,23 @@ gcRecompileShaders(
> -     IN gctUINT32 *SamplerWrapS,
> -     IN gctUINT32 *SamplerWrapT
> -     );
> -+
> -+gceSTATUS
> -+gcRecompileDepthBias(
> -+    IN gcoHAL Hal,
> -+    IN gcMACHINECODE_PTR pVsMachineCode,
> -+    /*Recompile variables*/
> -+    IN OUT gctPOINTER *ppRecompileStateBuffer,
> -+    IN OUT gctSIZE_T *pRecompileStateBufferSize,
> -+    IN OUT gcsHINT_PTR *ppRecompileHints,
> -+    /* natvie state*/
> -+    IN gctPOINTER pNativeStateBuffer,
> -+    IN gctSIZE_T nativeStateBufferSize,
> -+    IN gcsHINT_PTR pNativeHints,
> -+	OUT gctINT * uniformAddr,
> -+	OUT gctINT * uniformChannel
> -+    );
> -+
> - /*******************************************************************************
> - **                                gcSaveProgram
> - ********************************************************************************
> -@@ -4138,6 +4260,16 @@ gcSHADER_PatchNPOTForMachineCode(
> -     IN OUT gcsHINT_PTR            pHints /* User needs copy original hints to this one, then passed this one in */
> -     );
> -
> -+gceSTATUS
> -+gcSHADER_PatchZBiasForMachineCodeVS(
> -+    IN     gcMACHINECODE_PTR       pMachineCode,
> -+    IN OUT gcZBIAS_PATCH_PARAM_PTR pPatchParam,
> -+    IN     gctUINT                 hwSupportedInstCount,
> -+    OUT    gctPOINTER*             ppCmdBuffer,
> -+    OUT    gctUINT32*              pByteSizeOfCmdBuffer,
> -+    IN OUT gcsHINT_PTR             pHints /* User needs copy original hints to this one, then passed this one in */
> -+    );
> -+
> - #ifdef __cplusplus
> - }
> - #endif
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
> -index b056c52..fc8c395 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
> -@@ -166,6 +166,12 @@ typedef enum _gceHAL_COMMAND_CODES
> -
> -     /* Reset time stamp. */
> -     gcvHAL_QUERY_RESET_TIME_STAMP,
> -+
> -+    /* Sync point operations. */
> -+    gcvHAL_SYNC_POINT,
> -+
> -+    /* Create native fence and return its fd. */
> -+    gcvHAL_CREATE_NATIVE_FENCE,
> - }
> - gceHAL_COMMAND_CODES;
> -
> -@@ -723,6 +729,10 @@ typedef struct _gcsHAL_INTERFACE
> -         /* gcvHAL_READ_ALL_PROFILE_REGISTERS */
> -         struct _gcsHAL_READ_ALL_PROFILE_REGISTERS
> -         {
> -+#if VIVANTE_PROFILER_CONTEXT
> -+            /* Context buffer object gckCONTEXT. Just a name. */
> -+            IN gctUINT32                context;
> -+#endif
> -             /* Data read. */
> -             OUT gcsPROFILER_COUNTERS    counters;
> -         }
> -@@ -978,6 +988,33 @@ typedef struct _gcsHAL_INTERFACE
> -             OUT gctUINT64           timeStamp;
> -         }
> -         QueryResetTimeStamp;
> -+
> -+        struct _gcsHAL_SYNC_POINT
> -+        {
> -+            /* Command. */
> -+            gceSYNC_POINT_COMMAND_CODES command;
> -+
> -+            /* Sync point. */
> -+            IN OUT gctUINT64            syncPoint;
> -+
> -+            /* From where. */
> -+            IN gceKERNEL_WHERE          fromWhere;
> -+
> -+            /* Signaled state. */
> -+            OUT gctBOOL                 state;
> -+        }
> -+        SyncPoint;
> -+
> -+        struct _gcsHAL_CREATE_NATIVE_FENCE
> -+        {
> -+            /* Signal id to dup. */
> -+            IN gctUINT64                syncPoint;
> -+
> -+            /* Native fence file descriptor. */
> -+            OUT gctINT                  fenceFD;
> -+
> -+        }
> -+        CreateNativeFence;
> -     }
> -     u;
> - }
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
> -index 8481375..3fb2fe4 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
> -@@ -323,6 +323,15 @@ gcoSURF_Resolve(
> -     IN gcoSURF DestSurface
> -     );
> -
> -+gceSTATUS
> -+gcoSURF_IsHWResolveable(
> -+    IN gcoSURF SrcSurface,
> -+    IN gcoSURF DestSurface,
> -+    IN gcsPOINT_PTR SrcOrigin,
> -+    IN gcsPOINT_PTR DestOrigin,
> -+    IN gcsPOINT_PTR RectSize
> -+    );
> -+
> - /* Resolve rectangular area of a surface. */
> - gceSTATUS
> - gcoSURF_ResolveRect(
> -@@ -345,6 +354,11 @@ gcoSURF_IsRenderable(
> -     IN gcoSURF Surface
> -     );
> -
> -+gceSTATUS
> -+gcoSURF_IsFormatRenderableAsRT(
> -+    IN gcoSURF Surface
> -+    );
> -+
> - #if gcdSYNC
> - gceSTATUS
> - gcoSURF_GetFence(
> -@@ -1006,6 +1020,7 @@ typedef struct _gcsALPHA_INFO
> -     gctBOOL                 test;
> -     gceCOMPARE              compare;
> -     gctUINT8                reference;
> -+    gctFLOAT                floatReference;
> -
> -     /* Alpha blending states. */
> -     gctBOOL                 blend;
> -@@ -1040,7 +1055,8 @@ gco3D_SetAlphaCompare(
> - gceSTATUS
> - gco3D_SetAlphaReference(
> -     IN gco3D Engine,
> --    IN gctUINT8 Reference
> -+    IN gctUINT8 Reference,
> -+    IN gctFLOAT FloatReference
> -     );
> -
> - /* Set alpha test reference in fixed point. */
> -@@ -1504,6 +1520,19 @@ gcoTEXTURE_UploadSub(
> -     IN gceSURF_FORMAT Format
> -     );
> -
> -+/* Upload YUV data to an gcoTEXTURE object. */
> -+gceSTATUS
> -+gcoTEXTURE_UploadYUV(
> -+    IN gcoTEXTURE Texture,
> -+    IN gceTEXTURE_FACE Face,
> -+    IN gctUINT Width,
> -+    IN gctUINT Height,
> -+    IN gctUINT Slice,
> -+    IN gctPOINTER Memory[3],
> -+    IN gctINT Stride[3],
> -+    IN gceSURF_FORMAT Format
> -+    );
> -+
> - /* Upload compressed data to an gcoTEXTURE object. */
> - gceSTATUS
> - gcoTEXTURE_UploadCompressed(
> -@@ -1621,6 +1650,13 @@ gcoTEXTURE_QueryCaps(
> -     );
> -
> - gceSTATUS
> -+gcoTEXTURE_GetTiling(
> -+    IN gcoTEXTURE Texture,
> -+    IN gctINT preferLevel,
> -+	OUT gceTILING * Tiling
> -+    );
> -+
> -+gceSTATUS
> - gcoTEXTURE_GetClosestFormat(
> -     IN gcoHAL Hal,
> -     IN gceSURF_FORMAT InFormat,
> -@@ -2001,6 +2037,14 @@ gcoHAL_SetSharedInfo(
> -     IN gctSIZE_T Bytes
> -     );
> -
> -+#if VIVANTE_PROFILER_CONTEXT
> -+gceSTATUS
> -+gcoHARDWARE_GetContext(
> -+    IN gcoHARDWARE Hardware,
> -+    OUT gctUINT32 * Context
> -+    );
> -+#endif
> -+
> - #ifdef __cplusplus
> - }
> - #endif
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
> -index a1d9ae5..8e3c2f8 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
> -@@ -146,10 +146,26 @@ typedef enum _gceFEATURE
> -     gcvFEATURE_FRUSTUM_CLIP_FIX,
> -     gcvFEATURE_TEXTURE_LINEAR,
> -     gcvFEATURE_TEXTURE_YUV_ASSEMBLER,
> -+    gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE,
> -     gcvFEATURE_DYNAMIC_FREQUENCY_SCALING,
> -     gcvFEATURE_BUGFIX15,
> -+    gcvFEATURE_2D_GAMMA,
> -+    gcvFEATURE_2D_COLOR_SPACE_CONVERSION,
> -+    gcvFEATURE_2D_SUPER_TILE_VERSION,
> -     gcvFEATURE_2D_MIRROR_EXTENSION,
> -+    gcvFEATURE_2D_SUPER_TILE_V1,
> -+    gcvFEATURE_2D_SUPER_TILE_V2,
> -+    gcvFEATURE_2D_SUPER_TILE_V3,
> -+    gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2,
> -     gcvFEATURE_ELEMENT_INDEX_UINT,
> -+    gcvFEATURE_2D_COMPRESSION,
> -+    gcvFEATURE_2D_OPF_YUV_OUTPUT,
> -+    gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT,
> -+    gcvFEATURE_2D_YUV_MODE,
> -+    gcvFEATURE_DECOMPRESS_Z16,
> -+	gcvFEATURE_LINEAR_RENDER_TARGET,
> -+    gcvFEATURE_BUG_FIXES8,
> -+    gcvFEATURE_HALTI2,
> - }
> - gceFEATURE;
> -
> -@@ -203,11 +219,14 @@ typedef enum _gceSURF_TYPE
> -     gcvSURF_NO_VIDMEM      = 0x200, /* Used to allocate surfaces with no underlying vidmem node.
> -                                        In Android, vidmem node is allocated by another process. */
> -     gcvSURF_CACHEABLE      = 0x400, /* Used to allocate a cacheable surface */
> --#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
> -     gcvSURF_FLIP           = 0x800, /* The Resolve Target the will been flip resolve from RT */
> --#endif
> -     gcvSURF_TILE_STATUS_DIRTY  = 0x1000, /* Init tile status to all dirty */
> -
> -+    gcvSURF_LINEAR             = 0x2000,
> -+
> -+    gcvSURF_TEXTURE_LINEAR               = gcvSURF_TEXTURE
> -+                                         | gcvSURF_LINEAR,
> -+
> -     gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET
> -                                          | gcvSURF_NO_TILE_STATUS,
> -
> -@@ -217,6 +236,9 @@ typedef enum _gceSURF_TYPE
> -     gcvSURF_DEPTH_NO_TILE_STATUS         = gcvSURF_DEPTH
> -                                          | gcvSURF_NO_TILE_STATUS,
> -
> -+    gcvSURF_DEPTH_TS_DIRTY               = gcvSURF_DEPTH
> -+                                         | gcvSURF_TILE_STATUS_DIRTY,
> -+
> -     /* Supported surface types with no vidmem node. */
> -     gcvSURF_BITMAP_NO_VIDMEM             = gcvSURF_BITMAP
> -                                          | gcvSURF_NO_VIDMEM,
> -@@ -231,10 +253,8 @@ typedef enum _gceSURF_TYPE
> -     gcvSURF_CACHEABLE_BITMAP             = gcvSURF_BITMAP
> -                                          | gcvSURF_CACHEABLE,
> -
> --#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
> -     gcvSURF_FLIP_BITMAP                  = gcvSURF_BITMAP
> -                                          | gcvSURF_FLIP,
> --#endif
> - }
> - gceSURF_TYPE;
> -
> -@@ -263,6 +283,9 @@ typedef enum _gceSURF_ROTATION
> -     gcvSURF_270_DEGREE,
> -     gcvSURF_FLIP_X,
> -     gcvSURF_FLIP_Y,
> -+
> -+	gcvSURF_POST_FLIP_X = 0x40000000,
> -+    gcvSURF_POST_FLIP_Y = 0x80000000,
> - }
> - gceSURF_ROTATION;
> -
> -@@ -622,21 +645,16 @@ gce2D_PORTER_DUFF_RULE;
> - typedef enum _gce2D_YUV_COLOR_MODE
> - {
> -     gcv2D_YUV_601= 0,
> --    gcv2D_YUV_709
> --}
> --gce2D_YUV_COLOR_MODE;
> -+    gcv2D_YUV_709,
> -+    gcv2D_YUV_USER_DEFINED,
> -+    gcv2D_YUV_USER_DEFINED_CLAMP,
> -
> --/* 2D Rotation and flipping. */
> --typedef enum _gce2D_ORIENTATION
> --{
> --    gcv2D_0_DEGREE = 0,
> --    gcv2D_90_DEGREE,
> --    gcv2D_180_DEGREE,
> --    gcv2D_270_DEGREE,
> --    gcv2D_X_FLIP,
> --    gcv2D_Y_FLIP
> -+    /* Default setting is for src. gcv2D_YUV_DST
> -+        can be ORed to set dst.
> -+    */
> -+    gcv2D_YUV_DST = 0x80000000,
> - }
> --gce2D_ORIENTATION;
> -+gce2D_YUV_COLOR_MODE;
> -
> - typedef enum _gce2D_COMMAND
> - {
> -@@ -656,21 +674,39 @@ typedef enum _gce2D_TILE_STATUS_CONFIG
> -     gcv2D_TSC_ENABLE        = 0x00000001,
> -     gcv2D_TSC_COMPRESSED    = 0x00000002,
> -     gcv2D_TSC_DOWN_SAMPLER  = 0x00000004,
> -+    gcv2D_TSC_2D_COMPRESSED = 0x00000008,
> - }
> - gce2D_TILE_STATUS_CONFIG;
> -
> - typedef enum _gce2D_QUERY
> - {
> --    gcv2D_QUERY_RGB_ADDRESS_MAX_ALIGN       = 0,
> --    gcv2D_QUERY_RGB_STRIDE_MAX_ALIGN,
> --    gcv2D_QUERY_YUV_ADDRESS_MAX_ALIGN,
> --    gcv2D_QUERY_YUV_STRIDE_MAX_ALIGN,
> -+    gcv2D_QUERY_RGB_ADDRESS_MIN_ALIGN       = 0,
> -+    gcv2D_QUERY_RGB_STRIDE_MIN_ALIGN,
> -+    gcv2D_QUERY_YUV_ADDRESS_MIN_ALIGN,
> -+    gcv2D_QUERY_YUV_STRIDE_MIN_ALIGN,
> - }
> - gce2D_QUERY;
> -
> -+typedef enum _gce2D_SUPER_TILE_VERSION
> -+{
> -+    gcv2D_SUPER_TILE_VERSION_V1       = 1,
> -+    gcv2D_SUPER_TILE_VERSION_V2       = 2,
> -+    gcv2D_SUPER_TILE_VERSION_V3       = 3,
> -+}
> -+gce2D_SUPER_TILE_VERSION;
> -+
> - typedef enum _gce2D_STATE
> - {
> -     gcv2D_STATE_SPECIAL_FILTER_MIRROR_MODE       = 1,
> -+    gcv2D_STATE_SUPER_TILE_VERSION,
> -+    gcv2D_STATE_EN_GAMMA,
> -+    gcv2D_STATE_DE_GAMMA,
> -+    gcv2D_STATE_MULTI_SRC_BLIT_UNIFIED_DST_RECT,
> -+
> -+    gcv2D_STATE_ARRAY_EN_GAMMA                   = 0x10001,
> -+    gcv2D_STATE_ARRAY_DE_GAMMA,
> -+    gcv2D_STATE_ARRAY_CSC_YUV_TO_RGB,
> -+    gcv2D_STATE_ARRAY_CSC_RGB_TO_YUV,
> - }
> - gce2D_STATE;
> -
> -@@ -809,6 +845,15 @@ typedef enum _gceUSER_SIGNAL_COMMAND_CODES
> - }
> - gceUSER_SIGNAL_COMMAND_CODES;
> -
> -+/* Sync point command codes. */
> -+typedef enum _gceSYNC_POINT_COMMAND_CODES
> -+{
> -+    gcvSYNC_POINT_CREATE,
> -+    gcvSYNC_POINT_DESTROY,
> -+    gcvSYNC_POINT_SIGNAL,
> -+}
> -+gceSYNC_POINT_COMMAND_CODES;
> -+
> - /* Event locations. */
> - typedef enum _gceKERNEL_WHERE
> - {
> -@@ -848,6 +893,44 @@ typedef enum _gceDEBUG_MESSAGE_TYPE
> - }
> - gceDEBUG_MESSAGE_TYPE;
> -
> -+typedef enum _gceSPECIAL_HINT
> -+{
> -+    gceSPECIAL_HINT0,
> -+    gceSPECIAL_HINT1,
> -+    gceSPECIAL_HINT2,
> -+    gceSPECIAL_HINT3,
> -+    /* For disable dynamic stream/index */
> -+    gceSPECIAL_HINT4
> -+}
> -+gceSPECIAL_HINT;
> -+
> -+typedef enum _gceMACHINECODE
> -+{
> -+    gcvMACHINECODE_HOVERJET0       = 0x0,
> -+    gcvMACHINECODE_HOVERJET1      ,
> -+
> -+    gcvMACHINECODE_TAIJI0         ,
> -+    gcvMACHINECODE_TAIJI1         ,
> -+    gcvMACHINECODE_TAIJI2         ,
> -+
> -+    gcvMACHINECODE_ANTUTU0        ,
> -+
> -+    gcvMACHINECODE_GLB27_RELEASE_0,
> -+    gcvMACHINECODE_GLB27_RELEASE_1,
> -+
> -+    gcvMACHINECODE_WAVESCAPE0     ,
> -+    gcvMACHINECODE_WAVESCAPE1     ,
> -+
> -+    gcvMACHINECODE_NENAMARKV2_4_0 ,
> -+    gcvMACHINECODE_NENAMARKV2_4_1 ,
> -+
> -+    gcvMACHINECODE_GLB25_RELEASE_0,
> -+    gcvMACHINECODE_GLB25_RELEASE_1,
> -+    gcvMACHINECODE_GLB25_RELEASE_2,
> -+}
> -+gceMACHINECODE;
> -+
> -+
> - /******************************************************************************\
> - ****************************** Object Declarations *****************************
> - \******************************************************************************/
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
> -index 9e2a8db..b53b618 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
> -@@ -46,7 +46,7 @@
> -         This define enables the profiler.
> - */
> - #ifndef VIVANTE_PROFILER
> --#   define VIVANTE_PROFILER                     0
> -+#   define VIVANTE_PROFILER                     1
> - #endif
> -
> - #ifndef VIVANTE_PROFILER_PERDRAW
> -@@ -54,6 +54,15 @@
> - #endif
> -
> - /*
> -+    VIVANTE_PROFILER_CONTEXT
> -+
> -+        This define enables the profiler according to each hw context.
> -+*/
> -+#ifndef VIVANTE_PROFILER_CONTEXT
> -+#   define VIVANTE_PROFILER_CONTEXT             1
> -+#endif
> -+
> -+/*
> -     gcdUSE_VG
> -
> -         Enable VG HAL layer (only for GC350).
> -@@ -729,7 +738,24 @@
> -         Use linear buffer for GPU apps so HWC can do 2D composition.
> - */
> - #ifndef gcdGPU_LINEAR_BUFFER_ENABLED
> --#   define gcdGPU_LINEAR_BUFFER_ENABLED         0
> -+#   define gcdGPU_LINEAR_BUFFER_ENABLED         1
> -+#endif
> -+
> -+/*
> -+    gcdENABLE_RENDER_INTO_WINDOW
> -+
> -+        Enable Render-Into-Window (ie, No-Resolve) feature on android.
> -+        NOTE that even if enabled, it still depends on hardware feature and
> -+        android application behavior. When hardware feature or application
> -+        behavior can not support render into window mode, it will fail back
> -+        to normal mode.
> -+        When Render-Into-Window is finally used, window back buffer of android
> -+        applications will be allocated matching render target tiling format.
> -+        Otherwise buffer tiling is decided by the above option
> -+        'gcdGPU_LINEAR_BUFFER_ENABLED'.
> -+*/
> -+#ifndef gcdENABLE_RENDER_INTO_WINDOW
> -+#   define gcdENABLE_RENDER_INTO_WINDOW         1
> - #endif
> -
> - /*
> -@@ -758,7 +784,11 @@
> - #endif
> -
> - #ifndef gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
> --#   define  gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST    0
> -+#   ifdef ANDROID
> -+#      define  gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST    1
> -+#   else
> -+#      define  gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST    0
> -+#   endif
> - #endif
> -
> - #ifndef gcdENABLE_PE_DITHER_FIX
> -@@ -800,6 +830,10 @@
> - #   define gcdDISALBE_EARLY_EARLY_Z             1
> - #endif
> -
> -+#ifndef gcdSHADER_SRC_BY_MACHINECODE
> -+#   define gcdSHADER_SRC_BY_MACHINECODE         1
> -+#endif
> -+
> - /*
> -     gcdLINK_QUEUE_SIZE
> -
> -@@ -849,11 +883,20 @@
> - #define gcdUSE_NPOT_PATCH                       1
> - #endif
> -
> --
> - #ifndef gcdSYNC
> - #   define gcdSYNC                              1
> - #endif
> -
> -+#ifndef gcdENABLE_SPECIAL_HINT3
> -+#   define gcdENABLE_SPECIAL_HINT3               1
> -+#endif
> -+
> -+#if defined(ANDROID)
> -+#ifndef gcdPRE_ROTATION
> -+#   define gcdPRE_ROTATION                      1
> -+#endif
> -+#endif
> -+
> - /*
> -     gcdDVFS
> -
> -@@ -866,4 +909,39 @@
> - #   define gcdDVFS_POLLING_TIME                  (gcdDVFS_ANAYLSE_WINDOW * 4)
> - #endif
> -
> -+/*
> -+    gcdANDROID_NATIVE_FENCE_SYNC
> -+
> -+        Enable android native fence sync. It is introduced since jellybean-4.2.
> -+        Depends on linux kernel option: CONFIG_SYNC.
> -+
> -+        0: Disabled
> -+        1: Build framework for native fence sync feature, and EGL extension
> -+        2: Enable async swap buffers for client
> -+           * Native fence sync for client 'queueBuffer' in EGL, which is
> -+             'acquireFenceFd' for layer in compositor side.
> -+        3. Enable async hwcomposer composition.
> -+           * 'releaseFenceFd' for layer in compositor side, which is native
> -+             fence sync when client 'dequeueBuffer'
> -+           * Native fence sync for compositor 'queueBuffer' in EGL, which is
> -+             'acquireFenceFd' for framebuffer target for DC
> -+ */
> -+#ifndef gcdANDROID_NATIVE_FENCE_SYNC
> -+#   define gcdANDROID_NATIVE_FENCE_SYNC        0
> -+#endif
> -+
> -+#ifndef gcdFORCE_MIPMAP
> -+#   define gcdFORCE_MIPMAP                     0
> -+#endif
> -+
> -+/*
> -+    gcdFORCE_GAL_LOAD_TWICE
> -+
> -+        When non-zero, each thread except the main one will load libGAL.so twice to avoid potential segmetantion fault when app using dlopen/dlclose.
> -+        If threads exit arbitrarily, libGAL.so may not unload until the process quit.
> -+ */
> -+#ifndef gcdFORCE_GAL_LOAD_TWICE
> -+#   define gcdFORCE_GAL_LOAD_TWICE             0
> -+#endif
> -+
> - #endif /* __gc_hal_options_h_ */
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
> -index 3e450ba..aed73aa 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
> -@@ -45,509 +45,115 @@ extern "C" {
> - #define gcdNEW_PROFILER_FILE    1
> - #endif
> -
> --/* OpenGL ES11 API IDs. */
> --#define	ES11_ACTIVETEXTURE				1
> --#define	ES11_ALPHAFUNC					(ES11_ACTIVETEXTURE				+ 1)
> --#define	ES11_ALPHAFUNCX					(ES11_ALPHAFUNC					+ 1)
> --#define	ES11_BINDBUFFER					(ES11_ALPHAFUNCX 				+ 1)
> --#define	ES11_BINDTEXTURE				(ES11_BINDBUFFER 				+ 1)
> --#define	ES11_BLENDFUNC					(ES11_BINDTEXTURE				+ 1)
> --#define	ES11_BUFFERDATA					(ES11_BLENDFUNC					+ 1)
> --#define	ES11_BUFFERSUBDATA				(ES11_BUFFERDATA				+ 1)
> --#define	ES11_CLEAR						(ES11_BUFFERSUBDATA				+ 1)
> --#define	ES11_CLEARCOLOR					(ES11_CLEAR						+ 1)
> --#define	ES11_CLEARCOLORX				(ES11_CLEARCOLOR				+ 1)
> --#define	ES11_CLEARDEPTHF				(ES11_CLEARCOLORX 				+ 1)
> --#define	ES11_CLEARDEPTHX				(ES11_CLEARDEPTHF 				+ 1)
> --#define	ES11_CLEARSTENCIL				(ES11_CLEARDEPTHX 				+ 1)
> --#define	ES11_CLIENTACTIVETEXTURE    	(ES11_CLEARSTENCIL				+ 1)
> --#define	ES11_CLIPPLANEF      			(ES11_CLIENTACTIVETEXTURE		+ 1)
> --#define	ES11_CLIPPLANEX      			(ES11_CLIPPLANEF       			+ 1)
> --#define	ES11_COLOR4F 					(ES11_CLIPPLANEX       			+ 1)
> --#define	ES11_COLOR4UB        			(ES11_COLOR4F					+ 1)
> --#define	ES11_COLOR4X 					(ES11_COLOR4UB					+ 1)
> --#define	ES11_COLORMASK       			(ES11_COLOR4X					+ 1)
> --#define	ES11_COLORPOINTER    			(ES11_COLORMASK        			+ 1)
> --#define	ES11_COMPRESSEDTEXIMAGE2D   	(ES11_COLORPOINTER     			+ 1)
> --#define	ES11_COMPRESSEDTEXSUBIMAGE2D	(ES11_COMPRESSEDTEXIMAGE2D    	+ 1)
> --#define	ES11_COPYTEXIMAGE2D  			(ES11_COMPRESSEDTEXSUBIMAGE2D 	+ 1)
> --#define	ES11_COPYTEXSUBIMAGE2D      	(ES11_COPYTEXIMAGE2D   			+ 1)
> --#define	ES11_CULLFACE        			(ES11_COPYTEXSUBIMAGE2D			+ 1)
> --#define	ES11_DELETEBUFFERS   			(ES11_CULLFACE         			+ 1)
> --#define	ES11_DELETETEXTURES  			(ES11_DELETEBUFFERS    			+ 1)
> --#define	ES11_DEPTHFUNC       			(ES11_DELETETEXTURES   			+ 1)
> --#define	ES11_DEPTHMASK       			(ES11_DEPTHFUNC        			+ 1)
> --#define	ES11_DEPTHRANGEF     			(ES11_DEPTHMASK        			+ 1)
> --#define	ES11_DEPTHRANGEX     			(ES11_DEPTHRANGEF      			+ 1)
> --#define	ES11_DISABLE 					(ES11_DEPTHRANGEX      			+ 1)
> --#define	ES11_DISABLECLIENTSTATE     	(ES11_DISABLE					+ 1)
> --#define	ES11_DRAWARRAYS      			(ES11_DISABLECLIENTSTATE		+ 1)
> --#define	ES11_DRAWELEMENTS    			(ES11_DRAWARRAYS       			+ 1)
> --#define	ES11_ENABLE  					(ES11_DRAWELEMENTS     			+ 1)
> --#define	ES11_ENABLECLIENTSTATE      	(ES11_ENABLE					+ 1)
> --#define	ES11_FINISH  					(ES11_ENABLECLIENTSTATE			+ 1)
> --#define	ES11_FLUSH   					(ES11_FINISH   					+ 1)
> --#define	ES11_FOGF    					(ES11_FLUSH    					+ 1)
> --#define	ES11_FOGFV   					(ES11_FOGF     					+ 1)
> --#define	ES11_FOGX    					(ES11_FOGFV    					+ 1)
> --#define	ES11_FOGXV   					(ES11_FOGX     					+ 1)
> --#define	ES11_FRONTFACE       			(ES11_FOGXV    					+ 1)
> --#define	ES11_FRUSTUMF        			(ES11_FRONTFACE        			+ 1)
> --#define	ES11_FRUSTUMX        			(ES11_FRUSTUMF         			+ 1)
> --#define	ES11_GENBUFFERS      			(ES11_FRUSTUMX         			+ 1)
> --#define	ES11_GENTEXTURES     			(ES11_GENBUFFERS       			+ 1)
> --#define	ES11_GETBOOLEANV     			(ES11_GENTEXTURES      			+ 1)
> --#define	ES11_GETBUFFERPARAMETERIV   	(ES11_GETBOOLEANV      			+ 1)
> --#define	ES11_GETCLIPPLANEF   			(ES11_GETBUFFERPARAMETERIV		+ 1)
> --#define	ES11_GETCLIPPLANEX   			(ES11_GETCLIPPLANEF    			+ 1)
> --#define	ES11_GETERROR        			(ES11_GETCLIPPLANEX    			+ 1)
> --#define	ES11_GETFIXEDV       			(ES11_GETERROR         			+ 1)
> --#define	ES11_GETFLOATV       			(ES11_GETFIXEDV        			+ 1)
> --#define	ES11_GETINTEGERV     			(ES11_GETFLOATV        			+ 1)
> --#define	ES11_GETLIGHTFV      			(ES11_GETINTEGERV      			+ 1)
> --#define	ES11_GETLIGHTXV      			(ES11_GETLIGHTFV       			+ 1)
> --#define	ES11_GETMATERIALFV   			(ES11_GETLIGHTXV       			+ 1)
> --#define	ES11_GETMATERIALXV   			(ES11_GETMATERIALFV    			+ 1)
> --#define	ES11_GETPOINTERV     			(ES11_GETMATERIALXV    			+ 1)
> --#define	ES11_GETSTRING       			(ES11_GETPOINTERV      			+ 1)
> --#define	ES11_GETTEXENVFV     			(ES11_GETSTRING        			+ 1)
> --#define	ES11_GETTEXENVIV     			(ES11_GETTEXENVFV      			+ 1)
> --#define	ES11_GETTEXENVXV     			(ES11_GETTEXENVIV      			+ 1)
> --#define	ES11_GETTEXPARAMETERFV      	(ES11_GETTEXENVXV      			+ 1)
> --#define	ES11_GETTEXPARAMETERIV      	(ES11_GETTEXPARAMETERFV       	+ 1)
> --#define	ES11_GETTEXPARAMETERXV      	(ES11_GETTEXPARAMETERIV       	+ 1)
> --#define	ES11_HINT    					(ES11_GETTEXPARAMETERXV       	+ 1)
> --#define	ES11_ISBUFFER        			(ES11_HINT     					+ 1)
> --#define	ES11_ISENABLED       			(ES11_ISBUFFER 			        + 1)
> --#define	ES11_ISTEXTURE       			(ES11_ISENABLED			        + 1)
> --#define	ES11_LIGHTF  					(ES11_ISTEXTURE			        + 1)
> --#define	ES11_LIGHTFV 					(ES11_LIGHTF   					+ 1)
> --#define	ES11_LIGHTMODELF     			(ES11_LIGHTFV  					+ 1)
> --#define	ES11_LIGHTMODELFV    			(ES11_LIGHTMODELF      			+ 1)
> --#define	ES11_LIGHTMODELX     			(ES11_LIGHTMODELFV     			+ 1)
> --#define	ES11_LIGHTMODELXV    			(ES11_LIGHTMODELX      			+ 1)
> --#define	ES11_LIGHTX  					(ES11_LIGHTMODELXV     			+ 1)
> --#define	ES11_LIGHTXV 					(ES11_LIGHTX   					+ 1)
> --#define	ES11_LINEWIDTH       			(ES11_LIGHTXV  					+ 1)
> --#define	ES11_LINEWIDTHX      			(ES11_LINEWIDTH        			+ 1)
> --#define	ES11_LOADIDENTITY    			(ES11_LINEWIDTHX       			+ 1)
> --#define	ES11_LOADMATRIXF     			(ES11_LOADIDENTITY     			+ 1)
> --#define	ES11_LOADMATRIXX     			(ES11_LOADMATRIXF      			+ 1)
> --#define	ES11_LOGICOP 					(ES11_LOADMATRIXX      			+ 1)
> --#define	ES11_MATERIALF       			(ES11_LOGICOP					+ 1)
> --#define	ES11_MATERIALFV      			(ES11_MATERIALF        			+ 1)
> --#define	ES11_MATERIALX       			(ES11_MATERIALFV       			+ 1)
> --#define	ES11_MATERIALXV      			(ES11_MATERIALX        			+ 1)
> --#define	ES11_MATRIXMODE      			(ES11_MATERIALXV       			+ 1)
> --#define	ES11_MULTITEXCOORD4F 			(ES11_MATRIXMODE       			+ 1)
> --#define	ES11_MULTITEXCOORD4X 			(ES11_MULTITEXCOORD4F  			+ 1)
> --#define	ES11_MULTMATRIXF     			(ES11_MULTITEXCOORD4X  			+ 1)
> --#define	ES11_MULTMATRIXX     			(ES11_MULTMATRIXF      			+ 1)
> --#define	ES11_NORMAL3F        			(ES11_MULTMATRIXX      			+ 1)
> --#define	ES11_NORMAL3X        			(ES11_NORMAL3F         			+ 1)
> --#define	ES11_NORMALPOINTER   			(ES11_NORMAL3X         			+ 1)
> --#define	ES11_ORTHOF  					(ES11_NORMALPOINTER    			+ 1)
> --#define	ES11_ORTHOX  					(ES11_ORTHOF   					+ 1)
> --#define	ES11_PIXELSTOREI     			(ES11_ORTHOX   					+ 1)
> --#define	ES11_POINTPARAMETERF 			(ES11_PIXELSTOREI      			+ 1)
> --#define	ES11_POINTPARAMETERFV    		(ES11_POINTPARAMETERF  			+ 1)
> --#define	ES11_POINTPARAMETERX 			(ES11_POINTPARAMETERFV 			+ 1)
> --#define	ES11_POINTPARAMETERXV    		(ES11_POINTPARAMETERX  			+ 1)
> --#define	ES11_POINTSIZE       			(ES11_POINTPARAMETERXV 			+ 1)
> --#define	ES11_POINTSIZEX      			(ES11_POINTSIZE        			+ 1)
> --#define	ES11_POLYGONOFFSET   			(ES11_POINTSIZEX       			+ 1)
> --#define	ES11_POLYGONOFFSETX  			(ES11_POLYGONOFFSET    			+ 1)
> --#define	ES11_POPMATRIX       			(ES11_POLYGONOFFSETX   			+ 1)
> --#define	ES11_PUSHMATRIX      			(ES11_POPMATRIX        			+ 1)
> --#define	ES11_READPIXELS      			(ES11_PUSHMATRIX       			+ 1)
> --#define	ES11_ROTATEF 					(ES11_READPIXELS       			+ 1)
> --#define	ES11_ROTATEX 					(ES11_ROTATEF  					+ 1)
> --#define	ES11_SAMPLECOVERAGE  			(ES11_ROTATEX  					+ 1)
> --#define	ES11_SAMPLECOVERAGEX 			(ES11_SAMPLECOVERAGE   			+ 1)
> --#define	ES11_SCALEF  					(ES11_SAMPLECOVERAGEX  			+ 1)
> --#define	ES11_SCALEX  					(ES11_SCALEF   					+ 1)
> --#define	ES11_SCISSOR 					(ES11_SCALEX   					+ 1)
> --#define	ES11_SHADEMODEL      			(ES11_SCISSOR  					+ 1)
> --#define	ES11_STENCILFUNC     			(ES11_SHADEMODEL       			+ 1)
> --#define	ES11_STENCILMASK     			(ES11_STENCILFUNC      			+ 1)
> --#define	ES11_STENCILOP       			(ES11_STENCILMASK      			+ 1)
> --#define	ES11_TEXCOORDPOINTER 			(ES11_STENCILOP        			+ 1)
> --#define	ES11_TEXENVF 					(ES11_TEXCOORDPOINTER  			+ 1)
> --#define	ES11_TEXENVFV     				(ES11_TEXENVF					+ 1)
> --#define	ES11_TEXENVI 					(ES11_TEXENVFV					+ 1)
> --#define	ES11_TEXENVIV     				(ES11_TEXENVI  					+ 1)
> --#define	ES11_TEXENVX 					(ES11_TEXENVIV 					+ 1)
> --#define	ES11_TEXENVXV        			(ES11_TEXENVX  					+ 1)
> --#define	ES11_TEXIMAGE2D      			(ES11_TEXENVXV         			+ 1)
> --#define	ES11_TEXPARAMETERF   			(ES11_TEXIMAGE2D       			+ 1)
> --#define	ES11_TEXPARAMETERFV  			(ES11_TEXPARAMETERF    			+ 1)
> --#define	ES11_TEXPARAMETERI   			(ES11_TEXPARAMETERFV   			+ 1)
> --#define	ES11_TEXPARAMETERIV  			(ES11_TEXPARAMETERI    			+ 1)
> --#define	ES11_TEXPARAMETERX   			(ES11_TEXPARAMETERIV   			+ 1)
> --#define	ES11_TEXPARAMETERXV  			(ES11_TEXPARAMETERX    			+ 1)
> --#define	ES11_TEXSUBIMAGE2D   			(ES11_TEXPARAMETERXV   			+ 1)
> --#define	ES11_TRANSLATEF      			(ES11_TEXSUBIMAGE2D    			+ 1)
> --#define	ES11_TRANSLATEX      			(ES11_TRANSLATEF       			+ 1)
> --#define	ES11_VERTEXPOINTER   			(ES11_TRANSLATEX       			+ 1)
> --#define	ES11_VIEWPORT        			(ES11_VERTEXPOINTER    			+ 1)
> --#define ES11_BLENDEQUATIONOES           (ES11_VIEWPORT         			+ 1)
> --#define ES11_BLENDFUNCSEPERATEOES       (ES11_BLENDEQUATIONOES       	+ 1)
> --#define ES11_BLENDEQUATIONSEPARATEOES   (ES11_BLENDFUNCSEPERATEOES    	+ 1)
> --#define ES11_GLMAPBUFFEROES             (ES11_BLENDEQUATIONSEPARATEOES 	+ 1)
> --#define ES11_GLUNMAPBUFFEROES           (ES11_GLMAPBUFFEROES     		+ 1)
> --#define ES11_GLGETBUFFERPOINTERVOES     (ES11_GLUNMAPBUFFEROES         	+ 1)
> --#define	ES11_CALLS   					(ES11_GLGETBUFFERPOINTERVOES   	+ 1)
> --#define	ES11_DRAWCALLS       			(ES11_CALLS						+ 1)
> --#define	ES11_STATECHANGECALLS    		(ES11_DRAWCALLS					+ 1)
> --#define	ES11_POINTCOUNT      			(ES11_STATECHANGECALLS			+ 1)
> --#define	ES11_LINECOUNT       			(ES11_POINTCOUNT       			+ 1)
> --#define	ES11_TRIANGLECOUNT   			(ES11_LINECOUNT        			+ 1)
> --
> --/* OpenGL ES2X API IDs. */
> --#define	ES20_ACTIVETEXTURE				1
> --#define	ES20_ATTACHSHADER							(ES20_ACTIVETEXTURE							+	1)
> --#define	ES20_BINDATTRIBLOCATION						(ES20_ATTACHSHADER							+	1)
> --#define	ES20_BINDBUFFER								(ES20_BINDATTRIBLOCATION					+	1)
> --#define	ES20_BINDFRAMEBUFFER						(ES20_BINDBUFFER							+	1)
> --#define	ES20_BINDRENDERBUFFER						(ES20_BINDFRAMEBUFFER						+	1)
> --#define	ES20_BINDTEXTURE							(ES20_BINDRENDERBUFFER						+	1)
> --#define	ES20_BLENDCOLOR								(ES20_BINDTEXTURE							+	1)
> --#define	ES20_BLENDEQUATION							(ES20_BLENDCOLOR							+	1)
> --#define	ES20_BLENDEQUATIONSEPARATE					(ES20_BLENDEQUATION							+	1)
> --#define	ES20_BLENDFUNC								(ES20_BLENDEQUATIONSEPARATE					+	1)
> --#define	ES20_BLENDFUNCSEPARATE						(ES20_BLENDFUNC								+	1)
> --#define	ES20_BUFFERDATA								(ES20_BLENDFUNCSEPARATE						+	1)
> --#define	ES20_BUFFERSUBDATA							(ES20_BUFFERDATA							+	1)
> --#define	ES20_CHECKFRAMEBUFFERSTATUS					(ES20_BUFFERSUBDATA							+	1)
> --#define	ES20_CLEAR									(ES20_CHECKFRAMEBUFFERSTATUS				+	1)
> --#define	ES20_CLEARCOLOR								(ES20_CLEAR									+	1)
> --#define	ES20_CLEARDEPTHF							(ES20_CLEARCOLOR							+	1)
> --#define	ES20_CLEARSTENCIL							(ES20_CLEARDEPTHF							+	1)
> --#define	ES20_COLORMASK								(ES20_CLEARSTENCIL							+	1)
> --#define	ES20_COMPILESHADER							(ES20_COLORMASK								+	1)
> --#define	ES20_COMPRESSEDTEXIMAGE2D					(ES20_COMPILESHADER							+	1)
> --#define	ES20_COMPRESSEDTEXSUBIMAGE2D				(ES20_COMPRESSEDTEXIMAGE2D					+	1)
> --#define	ES20_COPYTEXIMAGE2D							(ES20_COMPRESSEDTEXSUBIMAGE2D				+	1)
> --#define	ES20_COPYTEXSUBIMAGE2D						(ES20_COPYTEXIMAGE2D						+	1)
> --#define	ES20_CREATEPROGRAM							(ES20_COPYTEXSUBIMAGE2D						+	1)
> --#define	ES20_CREATESHADER							(ES20_CREATEPROGRAM							+	1)
> --#define	ES20_CULLFACE								(ES20_CREATESHADER							+	1)
> --#define	ES20_DELETEBUFFERS							(ES20_CULLFACE								+	1)
> --#define	ES20_DELETEFRAMEBUFFERS						(ES20_DELETEBUFFERS							+	1)
> --#define	ES20_DELETEPROGRAM							(ES20_DELETEFRAMEBUFFERS					+	1)
> --#define	ES20_DELETERENDERBUFFERS					(ES20_DELETEPROGRAM							+	1)
> --#define	ES20_DELETESHADER							(ES20_DELETERENDERBUFFERS					+	1)
> --#define	ES20_DELETETEXTURES							(ES20_DELETESHADER							+	1)
> --#define	ES20_DEPTHFUNC								(ES20_DELETETEXTURES						+	1)
> --#define	ES20_DEPTHMASK								(ES20_DEPTHFUNC								+	1)
> --#define	ES20_DEPTHRANGEF							(ES20_DEPTHMASK								+	1)
> --#define	ES20_DETACHSHADER							(ES20_DEPTHRANGEF							+	1)
> --#define	ES20_DISABLE								(ES20_DETACHSHADER							+	1)
> --#define	ES20_DISABLEVERTEXATTRIBARRAY				(ES20_DISABLE								+	1)
> --#define	ES20_DRAWARRAYS								(ES20_DISABLEVERTEXATTRIBARRAY				+	1)
> --#define	ES20_DRAWELEMENTS							(ES20_DRAWARRAYS							+	1)
> --#define	ES20_ENABLE									(ES20_DRAWELEMENTS							+	1)
> --#define	ES20_ENABLEVERTEXATTRIBARRAY				(ES20_ENABLE								+	1)
> --#define	ES20_FINISH									(ES20_ENABLEVERTEXATTRIBARRAY				+	1)
> --#define	ES20_FLUSH									(ES20_FINISH								+	1)
> --#define	ES20_FRAMEBUFFERRENDERBUFFER				(ES20_FLUSH									+	1)
> --#define	ES20_FRAMEBUFFERTEXTURE2D					(ES20_FRAMEBUFFERRENDERBUFFER				+	1)
> --#define	ES20_FRONTFACE								(ES20_FRAMEBUFFERTEXTURE2D					+	1)
> --#define	ES20_GENBUFFERS								(ES20_FRONTFACE								+	1)
> --#define	ES20_GENERATEMIPMAP							(ES20_GENBUFFERS							+	1)
> --#define	ES20_GENFRAMEBUFFERS						(ES20_GENERATEMIPMAP						+	1)
> --#define	ES20_GENRENDERBUFFERS						(ES20_GENFRAMEBUFFERS						+	1)
> --#define	ES20_GENTEXTURES							(ES20_GENRENDERBUFFERS						+	1)
> --#define	ES20_GETACTIVEATTRIB						(ES20_GENTEXTURES							+	1)
> --#define	ES20_GETACTIVEUNIFORM						(ES20_GETACTIVEATTRIB						+	1)
> --#define	ES20_GETATTACHEDSHADERS						(ES20_GETACTIVEUNIFORM						+	1)
> --#define	ES20_GETATTRIBLOCATION						(ES20_GETATTACHEDSHADERS					+	1)
> --#define	ES20_GETBOOLEANV							(ES20_GETATTRIBLOCATION						+	1)
> --#define	ES20_GETBUFFERPARAMETERIV					(ES20_GETBOOLEANV							+	1)
> --#define	ES20_GETERROR								(ES20_GETBUFFERPARAMETERIV					+	1)
> --#define	ES20_GETFLOATV								(ES20_GETERROR								+	1)
> --#define	ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV	(ES20_GETFLOATV								+	1)
> --#define	ES20_GETINTEGERV							(ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV	+	1)
> --#define	ES20_GETPROGRAMIV							(ES20_GETINTEGERV							+	1)
> --#define	ES20_GETPROGRAMINFOLOG						(ES20_GETPROGRAMIV							+	1)
> --#define	ES20_GETRENDERBUFFERPARAMETERIV				(ES20_GETPROGRAMINFOLOG						+	1)
> --#define	ES20_GETSHADERIV							(ES20_GETRENDERBUFFERPARAMETERIV			+	1)
> --#define	ES20_GETSHADERINFOLOG						(ES20_GETSHADERIV							+	1)
> --#define	ES20_GETSHADERPRECISIONFORMAT				(ES20_GETSHADERINFOLOG						+	1)
> --#define	ES20_GETSHADERSOURCE						(ES20_GETSHADERPRECISIONFORMAT				+	1)
> --#define	ES20_GETSTRING								(ES20_GETSHADERSOURCE						+	1)
> --#define	ES20_GETTEXPARAMETERFV						(ES20_GETSTRING								+	1)
> --#define	ES20_GETTEXPARAMETERIV						(ES20_GETTEXPARAMETERFV						+	1)
> --#define	ES20_GETUNIFORMFV							(ES20_GETTEXPARAMETERIV						+	1)
> --#define	ES20_GETUNIFORMIV							(ES20_GETUNIFORMFV							+	1)
> --#define	ES20_GETUNIFORMLOCATION						(ES20_GETUNIFORMIV							+	1)
> --#define	ES20_GETVERTEXATTRIBFV						(ES20_GETUNIFORMLOCATION					+	1)
> --#define	ES20_GETVERTEXATTRIBIV						(ES20_GETVERTEXATTRIBFV						+	1)
> --#define	ES20_GETVERTEXATTRIBPOINTERV				(ES20_GETVERTEXATTRIBIV						+	1)
> --#define	ES20_HINT									(ES20_GETVERTEXATTRIBPOINTERV				+	1)
> --#define	ES20_ISBUFFER								(ES20_HINT									+	1)
> --#define	ES20_ISENABLED								(ES20_ISBUFFER								+	1)
> --#define	ES20_ISFRAMEBUFFER							(ES20_ISENABLED								+	1)
> --#define	ES20_ISPROGRAM								(ES20_ISFRAMEBUFFER							+	1)
> --#define	ES20_ISRENDERBUFFER							(ES20_ISPROGRAM								+	1)
> --#define	ES20_ISSHADER								(ES20_ISRENDERBUFFER						+	1)
> --#define	ES20_ISTEXTURE								(ES20_ISSHADER								+	1)
> --#define	ES20_LINEWIDTH								(ES20_ISTEXTURE								+	1)
> --#define	ES20_LINKPROGRAM							(ES20_LINEWIDTH								+	1)
> --#define	ES20_PIXELSTOREI							(ES20_LINKPROGRAM							+	1)
> --#define	ES20_POLYGONOFFSET							(ES20_PIXELSTOREI							+	1)
> --#define	ES20_READPIXELS								(ES20_POLYGONOFFSET							+	1)
> --#define	ES20_RELEASESHADERCOMPILER					(ES20_READPIXELS							+	1)
> --#define	ES20_RENDERBUFFERSTORAGE					(ES20_RELEASESHADERCOMPILER					+	1)
> --#define	ES20_SAMPLECOVERAGE							(ES20_RENDERBUFFERSTORAGE					+	1)
> --#define	ES20_SCISSOR								(ES20_SAMPLECOVERAGE						+	1)
> --#define	ES20_SHADERBINARY							(ES20_SCISSOR								+	1)
> --#define	ES20_SHADERSOURCE							(ES20_SHADERBINARY							+	1)
> --#define	ES20_STENCILFUNC							(ES20_SHADERSOURCE							+	1)
> --#define	ES20_STENCILFUNCSEPARATE					(ES20_STENCILFUNC							+	1)
> --#define	ES20_STENCILMASK							(ES20_STENCILFUNCSEPARATE					+	1)
> --#define	ES20_STENCILMASKSEPARATE					(ES20_STENCILMASK							+	1)
> --#define	ES20_STENCILOP								(ES20_STENCILMASKSEPARATE					+	1)
> --#define	ES20_STENCILOPSEPARATE						(ES20_STENCILOP								+	1)
> --#define	ES20_TEXIMAGE2D								(ES20_STENCILOPSEPARATE						+	1)
> --#define	ES20_TEXPARAMETERF							(ES20_TEXIMAGE2D							+	1)
> --#define	ES20_TEXPARAMETERFV							(ES20_TEXPARAMETERF							+	1)
> --#define	ES20_TEXPARAMETERI							(ES20_TEXPARAMETERFV						+	1)
> --#define	ES20_TEXPARAMETERIV							(ES20_TEXPARAMETERI							+	1)
> --#define	ES20_TEXSUBIMAGE2D							(ES20_TEXPARAMETERIV						+	1)
> --#define	ES20_UNIFORM1F								(ES20_TEXSUBIMAGE2D							+	1)
> --#define	ES20_UNIFORM1FV								(ES20_UNIFORM1F								+	1)
> --#define	ES20_UNIFORM1I								(ES20_UNIFORM1FV							+	1)
> --#define	ES20_UNIFORM1IV								(ES20_UNIFORM1I								+	1)
> --#define	ES20_UNIFORM2F								(ES20_UNIFORM1IV							+	1)
> --#define	ES20_UNIFORM2FV								(ES20_UNIFORM2F								+	1)
> --#define	ES20_UNIFORM2I								(ES20_UNIFORM2FV							+	1)
> --#define	ES20_UNIFORM2IV								(ES20_UNIFORM2I								+	1)
> --#define	ES20_UNIFORM3F								(ES20_UNIFORM2IV							+	1)
> --#define	ES20_UNIFORM3FV								(ES20_UNIFORM3F								+	1)
> --#define	ES20_UNIFORM3I								(ES20_UNIFORM3FV							+	1)
> --#define	ES20_UNIFORM3IV								(ES20_UNIFORM3I								+	1)
> --#define	ES20_UNIFORM4F								(ES20_UNIFORM3IV							+	1)
> --#define	ES20_UNIFORM4FV								(ES20_UNIFORM4F								+	1)
> --#define	ES20_UNIFORM4I								(ES20_UNIFORM4FV							+	1)
> --#define	ES20_UNIFORM4IV								(ES20_UNIFORM4I								+	1)
> --#define	ES20_UNIFORMMATRIX2FV						(ES20_UNIFORM4IV							+	1)
> --#define	ES20_UNIFORMMATRIX3FV						(ES20_UNIFORMMATRIX2FV						+	1)
> --#define	ES20_UNIFORMMATRIX4FV						(ES20_UNIFORMMATRIX3FV						+	1)
> --#define	ES20_USEPROGRAM								(ES20_UNIFORMMATRIX4FV						+	1)
> --#define	ES20_VALIDATEPROGRAM						(ES20_USEPROGRAM							+	1)
> --#define	ES20_VERTEXATTRIB1F							(ES20_VALIDATEPROGRAM						+	1)
> --#define	ES20_VERTEXATTRIB1FV						(ES20_VERTEXATTRIB1F						+	1)
> --#define	ES20_VERTEXATTRIB2F							(ES20_VERTEXATTRIB1FV						+	1)
> --#define	ES20_VERTEXATTRIB2FV						(ES20_VERTEXATTRIB2F						+	1)
> --#define	ES20_VERTEXATTRIB3F							(ES20_VERTEXATTRIB2FV						+	1)
> --#define	ES20_VERTEXATTRIB3FV						(ES20_VERTEXATTRIB3F						+	1)
> --#define	ES20_VERTEXATTRIB4F							(ES20_VERTEXATTRIB3FV						+	1)
> --#define	ES20_VERTEXATTRIB4FV						(ES20_VERTEXATTRIB4F						+	1)
> --#define	ES20_VERTEXATTRIBPOINTER					(ES20_VERTEXATTRIB4FV						+	1)
> --#define	ES20_VIEWPORT								(ES20_VERTEXATTRIBPOINTER					+	1)
> --#define ES20_GETPROGRAMBINARYOES                    (ES20_VIEWPORT                              +   1)
> --#define ES20_PROGRAMBINARYOES                       (ES20_GETPROGRAMBINARYOES                   +   1)
> --#define ES20_TEXIMAGE3DOES                          (ES20_PROGRAMBINARYOES                      +   1)
> --#define ES20_TEXSUBIMAGE3DOES                       (ES20_TEXIMAGE3DOES                         +   1)
> --#define ES20_COPYSUBIMAGE3DOES                      (ES20_TEXSUBIMAGE3DOES                      +   1)
> --#define ES20_COMPRESSEDTEXIMAGE3DOES                (ES20_COPYSUBIMAGE3DOES                     +   1)
> --#define ES20_COMPRESSEDTEXSUBIMAGE3DOES             (ES20_COMPRESSEDTEXIMAGE3DOES               +   1)
> --#define ES20_FRAMEBUFFERTEXTURE3DOES                (ES20_COMPRESSEDTEXSUBIMAGE3DOES            +   1)
> --#define ES20_BINDVERTEXARRAYOES                     (ES20_FRAMEBUFFERTEXTURE3DOES               +   1)
> --#define ES20_GENVERTEXARRAYOES                      (ES20_BINDVERTEXARRAYOES                    +   1)
> --#define ES20_ISVERTEXARRAYOES                       (ES20_GENVERTEXARRAYOES                     +   1)
> --#define ES20_DELETEVERTEXARRAYOES                   (ES20_ISVERTEXARRAYOES                      +   1)
> --#define ES20_GLMAPBUFFEROES                         (ES20_DELETEVERTEXARRAYOES                  +   1)
> --#define ES20_GLUNMAPBUFFEROES                       (ES20_GLMAPBUFFEROES                        +   1)
> --#define ES20_GLGETBUFFERPOINTERVOES                 (ES20_GLUNMAPBUFFEROES                      +   1)
> --#define ES20_DISCARDFRAMEBUFFEREXT                  (ES20_GLGETBUFFERPOINTERVOES				+	1)
> --#define	ES20_CALLS									(ES20_DISCARDFRAMEBUFFEREXT 				+	1)
> --#define	ES20_DRAWCALLS								(ES20_CALLS									+	1)
> --#define	ES20_STATECHANGECALLS						(ES20_DRAWCALLS								+	1)
> --#define	ES20_POINTCOUNT								(ES20_STATECHANGECALLS						+	1)
> --#define	ES20_LINECOUNT								(ES20_POINTCOUNT							+	1)
> --#define	ES20_TRIANGLECOUNT							(ES20_LINECOUNT								+	1)
> --
> --/* OpenVG API IDs. */
> --#define	VG11_APPENDPATH			     1
> --#define	VG11_APPENDPATHDATA			(VG11_APPENDPATH				+ 1)
> --#define	VG11_CHILDIMAGE				(VG11_APPENDPATHDATA			+ 1)
> --#define	VG11_CLEAR					(VG11_CHILDIMAGE				+ 1)
> --#define	VG11_CLEARGLYPH				(VG11_CLEAR						+ 1)
> --#define	VG11_CLEARIMAGE				(VG11_CLEARGLYPH				+ 1)
> --#define	VG11_CLEARPATH				(VG11_CLEARIMAGE				+ 1)
> --#define	VG11_COLORMATRIX			(VG11_CLEARPATH					+ 1)
> --#define	VG11_CONVOLVE				(VG11_COLORMATRIX				+ 1)
> --#define	VG11_COPYIMAGE				(VG11_CONVOLVE					+ 1)
> --#define	VG11_COPYMASK				(VG11_COPYIMAGE					+ 1)
> --#define	VG11_COPYPIXELS				(VG11_COPYMASK					+ 1)
> --#define	VG11_CREATEFONT				(VG11_COPYPIXELS				+ 1)
> --#define	VG11_CREATEIMAGE			(VG11_CREATEFONT				+ 1)
> --#define	VG11_CREATEMASKLAYER		(VG11_CREATEIMAGE				+ 1)
> --#define	VG11_CREATEPAINT			(VG11_CREATEMASKLAYER			+ 1)
> --#define	VG11_CREATEPATH				(VG11_CREATEPAINT				+ 1)
> --#define	VG11_DESTROYFONT			(VG11_CREATEPATH				+ 1)
> --#define	VG11_DESTROYIMAGE			(VG11_DESTROYFONT				+ 1)
> --#define	VG11_DESTROYMASKLAYER		(VG11_DESTROYIMAGE				+ 1)
> --#define	VG11_DESTROYPAINT			(VG11_DESTROYMASKLAYER			+ 1)
> --#define	VG11_DESTROYPATH			(VG11_DESTROYPAINT				+ 1)
> --#define	VG11_DRAWGLYPH				(VG11_DESTROYPATH				+ 1)
> --#define	VG11_DRAWGLYPHS				(VG11_DRAWGLYPH					+ 1)
> --#define	VG11_DRAWIMAGE				(VG11_DRAWGLYPHS				+ 1)
> --#define	VG11_DRAWPATH				(VG11_DRAWIMAGE					+ 1)
> --#define	VG11_FILLMASKLAYER			(VG11_DRAWPATH					+ 1)
> --#define	VG11_FINISH					(VG11_FILLMASKLAYER				+ 1)
> --#define	VG11_FLUSH					(VG11_FINISH					+ 1)
> --#define	VG11_GAUSSIANBLUR			(VG11_FLUSH						+ 1)
> --#define	VG11_GETCOLOR				(VG11_GAUSSIANBLUR				+ 1)
> --#define	VG11_GETERROR				(VG11_GETCOLOR					+ 1)
> --#define	VG11_GETF					(VG11_GETERROR					+ 1)
> --#define	VG11_GETFV					(VG11_GETF						+ 1)
> --#define	VG11_GETI					(VG11_GETFV						+ 1)
> --#define	VG11_GETIMAGESUBDATA		(VG11_GETI						+ 1)
> --#define	VG11_GETIV					(VG11_GETIMAGESUBDATA			+ 1)
> --#define	VG11_GETMATRIX				(VG11_GETIV						+ 1)
> --#define	VG11_GETPAINT				(VG11_GETMATRIX					+ 1)
> --#define	VG11_GETPARAMETERF			(VG11_GETPAINT					+ 1)
> --#define	VG11_GETPARAMETERFV			(VG11_GETPARAMETERF				+ 1)
> --#define	VG11_GETPARAMETERI			(VG11_GETPARAMETERFV			+ 1)
> --#define	VG11_GETPARAMETERIV			(VG11_GETPARAMETERI				+ 1)
> --#define	VG11_GETPARAMETERVECTORSIZE	(VG11_GETPARAMETERIV			+ 1)
> --#define	VG11_GETPARENT				(VG11_GETPARAMETERVECTORSIZE	+ 1)
> --#define	VG11_GETPATHCAPABILITIES	(VG11_GETPARENT					+ 1)
> --#define	VG11_GETPIXELS				(VG11_GETPATHCAPABILITIES		+ 1)
> --#define	VG11_GETSTRING				(VG11_GETPIXELS					+ 1)
> --#define	VG11_GETVECTORSIZE			(VG11_GETSTRING					+ 1)
> --#define	VG11_HARDWAREQUERY			(VG11_GETVECTORSIZE				+ 1)
> --#define	VG11_IMAGESUBDATA			(VG11_HARDWAREQUERY				+ 1)
> --#define	VG11_INTERPOLATEPATH		(VG11_IMAGESUBDATA				+ 1)
> --#define	VG11_LOADIDENTITY			(VG11_INTERPOLATEPATH			+ 1)
> --#define	VG11_LOADMATRIX				(VG11_LOADIDENTITY				+ 1)
> --#define	VG11_LOOKUP					(VG11_LOADMATRIX				+ 1)
> --#define	VG11_LOOKUPSINGLE			(VG11_LOOKUP					+ 1)
> --#define	VG11_MASK					(VG11_LOOKUPSINGLE				+ 1)
> --#define	VG11_MODIFYPATHCOORDS		(VG11_MASK						+ 1)
> --#define	VG11_MULTMATRIX				(VG11_MODIFYPATHCOORDS			+ 1)
> --#define	VG11_PAINTPATTERN			(VG11_MULTMATRIX				+ 1)
> --#define	VG11_PATHBOUNDS				(VG11_PAINTPATTERN				+ 1)
> --#define	VG11_PATHLENGTH				(VG11_PATHBOUNDS				+ 1)
> --#define	VG11_PATHTRANSFORMEDBOUNDS	(VG11_PATHLENGTH				+ 1)
> --#define	VG11_POINTALONGPATH			(VG11_PATHTRANSFORMEDBOUNDS		+ 1)
> --#define	VG11_READPIXELS				(VG11_POINTALONGPATH			+ 1)
> --#define	VG11_REMOVEPATHCAPABILITIES	(VG11_READPIXELS				+ 1)
> --#define	VG11_RENDERTOMASK			(VG11_REMOVEPATHCAPABILITIES	+ 1)
> --#define	VG11_ROTATE					(VG11_RENDERTOMASK				+ 1)
> --#define	VG11_SCALE					(VG11_ROTATE					+ 1)
> --#define	VG11_SEPARABLECONVOLVE		(VG11_SCALE						+ 1)
> --#define	VG11_SETCOLOR				(VG11_SEPARABLECONVOLVE			+ 1)
> --#define	VG11_SETF					(VG11_SETCOLOR					+ 1)
> --#define	VG11_SETFV					(VG11_SETF						+ 1)
> --#define	VG11_SETGLYPHTOIMAGE		(VG11_SETFV						+ 1)
> --#define	VG11_SETGLYPHTOPATH			(VG11_SETGLYPHTOIMAGE			+ 1)
> --#define	VG11_SETI					(VG11_SETGLYPHTOPATH			+ 1)
> --#define	VG11_SETIV					(VG11_SETI						+ 1)
> --#define	VG11_SETPAINT				(VG11_SETIV						+ 1)
> --#define	VG11_SETPARAMETERF			(VG11_SETPAINT					+ 1)
> --#define	VG11_SETPARAMETERFV			(VG11_SETPARAMETERF				+ 1)
> --#define	VG11_SETPARAMETERI			(VG11_SETPARAMETERFV			+ 1)
> --#define	VG11_SETPARAMETERIV			(VG11_SETPARAMETERI				+ 1)
> --#define	VG11_SETPIXELS				(VG11_SETPARAMETERIV			+ 1)
> --#define	VG11_SHEAR					(VG11_SETPIXELS					+ 1)
> --#define	VG11_TRANSFORMPATH			(VG11_SHEAR						+ 1)
> --#define	VG11_TRANSLATE				(VG11_TRANSFORMPATH				+ 1)
> --#define	VG11_WRITEPIXELS			(VG11_TRANSLATE					+ 1)
> --#define VG11_CALLS                  (VG11_WRITEPIXELS               + 1)
> --#define VG11_DRAWCALLS              (VG11_CALLS                     + 1)
> --#define VG11_STATECHANGECALLS       (VG11_DRAWCALLS                 + 1)
> --#define VG11_FILLCOUNT              (VG11_STATECHANGECALLS          + 1)
> --#define VG11_STROKECOUNT            (VG11_FILLCOUNT                 + 1)
> -+#define    ES11_CALLS              151
> -+#define    ES11_DRAWCALLS          (ES11_CALLS             + 1)
> -+#define    ES11_STATECHANGECALLS   (ES11_DRAWCALLS         + 1)
> -+#define    ES11_POINTCOUNT         (ES11_STATECHANGECALLS  + 1)
> -+#define    ES11_LINECOUNT          (ES11_POINTCOUNT        + 1)
> -+#define    ES11_TRIANGLECOUNT      (ES11_LINECOUNT         + 1)
> -+
> -+#define    ES20_CALLS              159
> -+#define    ES20_DRAWCALLS          (ES20_CALLS             + 1)
> -+#define    ES20_STATECHANGECALLS   (ES20_DRAWCALLS         + 1)
> -+#define    ES20_POINTCOUNT         (ES20_STATECHANGECALLS  + 1)
> -+#define    ES20_LINECOUNT          (ES20_POINTCOUNT        + 1)
> -+#define    ES20_TRIANGLECOUNT      (ES20_LINECOUNT         + 1)
> -+
> -+#define    VG11_CALLS              88
> -+#define    VG11_DRAWCALLS          (VG11_CALLS              + 1)
> -+#define    VG11_STATECHANGECALLS   (VG11_DRAWCALLS          + 1)
> -+#define    VG11_FILLCOUNT          (VG11_STATECHANGECALLS   + 1)
> -+#define    VG11_STROKECOUNT        (VG11_FILLCOUNT          + 1)
> - /* End of Driver API ID Definitions. */
> -
> - /* HAL & MISC IDs. */
> --#define HAL_VERTBUFNEWBYTEALLOC		1
> --#define HAL_VERTBUFTOTALBYTEALLOC	(HAL_VERTBUFNEWBYTEALLOC 	+ 1)
> --#define HAL_VERTBUFNEWOBJALLOC		(HAL_VERTBUFTOTALBYTEALLOC	+ 1)
> --#define HAL_VERTBUFTOTALOBJALLOC	(HAL_VERTBUFNEWOBJALLOC		+ 1)
> --#define HAL_INDBUFNEWBYTEALLOC		(HAL_VERTBUFTOTALOBJALLOC	+ 1)
> --#define HAL_INDBUFTOTALBYTEALLOC	(HAL_INDBUFNEWBYTEALLOC		+ 1)
> --#define HAL_INDBUFNEWOBJALLOC		(HAL_INDBUFTOTALBYTEALLOC	+ 1)
> --#define HAL_INDBUFTOTALOBJALLOC		(HAL_INDBUFNEWOBJALLOC		+ 1)
> --#define HAL_TEXBUFNEWBYTEALLOC		(HAL_INDBUFTOTALOBJALLOC	+ 1)
> --#define HAL_TEXBUFTOTALBYTEALLOC	(HAL_TEXBUFNEWBYTEALLOC		+ 1)
> --#define HAL_TEXBUFNEWOBJALLOC		(HAL_TEXBUFTOTALBYTEALLOC	+ 1)
> --#define HAL_TEXBUFTOTALOBJALLOC		(HAL_TEXBUFNEWOBJALLOC		+ 1)
> --
> --#define GPU_CYCLES		1
> --#define GPU_READ64BYTE	(GPU_CYCLES		+ 1)
> --#define GPU_WRITE64BYTE	(GPU_READ64BYTE	+ 1)
> --#define GPU_TOTALCYCLES	(GPU_WRITE64BYTE	+ 1)
> --#define GPU_IDLECYCLES	(GPU_TOTALCYCLES	+ 1)
> --
> --#define VS_INSTCOUNT			1
> --#define VS_BRANCHINSTCOUNT		(VS_INSTCOUNT		+ 1)
> --#define VS_TEXLDINSTCOUNT		(VS_BRANCHINSTCOUNT	+ 1)
> --#define VS_RENDEREDVERTCOUNT	(VS_TEXLDINSTCOUNT	+ 1)
> --
> --#define PS_INSTCOUNT			1
> --#define PS_BRANCHINSTCOUNT		(PS_INSTCOUNT		+ 1)
> --#define PS_TEXLDINSTCOUNT		(PS_BRANCHINSTCOUNT	+ 1)
> --#define PS_RENDEREDPIXCOUNT		(PS_TEXLDINSTCOUNT	+ 1)
> --
> --#define PA_INVERTCOUNT		1
> --#define	PA_INPRIMCOUNT		(PA_INVERTCOUNT		+ 1)
> --#define PA_OUTPRIMCOUNT		(PA_INPRIMCOUNT		+ 1)
> --#define PA_DEPTHCLIPCOUNT	(PA_OUTPRIMCOUNT	+ 1)
> --#define PA_TRIVIALREJCOUNT	(PA_DEPTHCLIPCOUNT	+ 1)
> --#define PA_CULLCOUNT		(PA_TRIVIALREJCOUNT	+ 1)
> --
> --#define SE_TRIANGLECOUNT	1
> --#define SE_LINECOUNT		(SE_TRIANGLECOUNT	+ 1)
> --
> --#define RA_VALIDPIXCOUNT		1
> --#define RA_TOTALQUADCOUNT		(RA_VALIDPIXCOUNT		+ 1)
> --#define RA_VALIDQUADCOUNTEZ		(RA_TOTALQUADCOUNT		+ 1)
> --#define RA_TOTALPRIMCOUNT		(RA_VALIDQUADCOUNTEZ	+ 1)
> --#define RA_PIPECACHEMISSCOUNT	(RA_TOTALPRIMCOUNT		+ 1)
> --#define RA_PREFCACHEMISSCOUNT	(RA_PIPECACHEMISSCOUNT	+ 1)
> --#define RA_EEZCULLCOUNT			(RA_PREFCACHEMISSCOUNT	+ 1)
> --
> --#define TX_TOTBILINEARREQ		1
> --#define TX_TOTTRILINEARREQ		(TX_TOTBILINEARREQ		+ 1)
> --#define TX_TOTDISCARDTEXREQ		(TX_TOTTRILINEARREQ		+ 1)
> --#define TX_TOTTEXREQ			(TX_TOTDISCARDTEXREQ	+ 1)
> --#define TX_MEMREADCOUNT			(TX_TOTTEXREQ			+ 1)
> --#define TX_MEMREADIN8BCOUNT		(TX_MEMREADCOUNT		+ 1)
> --#define TX_CACHEMISSCOUNT		(TX_MEMREADIN8BCOUNT	+ 1)
> --#define TX_CACHEHITTEXELCOUNT	(TX_CACHEMISSCOUNT		+ 1)
> --#define TX_CACHEMISSTEXELCOUNT	(TX_CACHEHITTEXELCOUNT	+ 1)
> --
> --#define PE_KILLEDBYCOLOR	1
> --#define PE_KILLEDBYDEPTH	(PE_KILLEDBYCOLOR	+ 1)
> --#define PE_DRAWNBYCOLOR		(PE_KILLEDBYDEPTH	+ 1)
> --#define PE_DRAWNBYDEPTH		(PE_DRAWNBYCOLOR	+ 1)
> --
> --#define MC_READREQ8BPIPE	1
> --#define MC_READREQ8BIP		(MC_READREQ8BPIPE	+ 1)
> --#define MC_WRITEREQ8BPIPE	(MC_READREQ8BIP		+ 1)
> --
> --#define AXI_READREQSTALLED		1
> --#define AXI_WRITEREQSTALLED		(AXI_READREQSTALLED		+ 1)
> --#define AXI_WRITEDATASTALLED	(AXI_WRITEREQSTALLED	+ 1)
> --
> --#define PVS_INSTRCOUNT		1
> --#define PVS_ALUINSTRCOUNT	(PVS_INSTRCOUNT		+ 1)
> --#define PVS_TEXINSTRCOUNT	(PVS_ALUINSTRCOUNT	+ 1)
> --#define PVS_ATTRIBCOUNT		(PVS_TEXINSTRCOUNT	+ 1)
> --#define PVS_UNIFORMCOUNT	(PVS_ATTRIBCOUNT	+ 1)
> --#define PVS_FUNCTIONCOUNT	(PVS_UNIFORMCOUNT	+ 1)
> --
> --#define PPS_INSTRCOUNT		1
> --#define PPS_ALUINSTRCOUNT	(PPS_INSTRCOUNT		+ 1)
> --#define PPS_TEXINSTRCOUNT	(PPS_ALUINSTRCOUNT	+ 1)
> --#define PPS_ATTRIBCOUNT		(PPS_TEXINSTRCOUNT	+ 1)
> --#define PPS_UNIFORMCOUNT	(PPS_ATTRIBCOUNT	+ 1)
> --#define PPS_FUNCTIONCOUNT 	(PPS_UNIFORMCOUNT	+ 1)
> -+#define HAL_VERTBUFNEWBYTEALLOC    1
> -+#define HAL_VERTBUFTOTALBYTEALLOC  (HAL_VERTBUFNEWBYTEALLOC     + 1)
> -+#define HAL_VERTBUFNEWOBJALLOC     (HAL_VERTBUFTOTALBYTEALLOC   + 1)
> -+#define HAL_VERTBUFTOTALOBJALLOC   (HAL_VERTBUFNEWOBJALLOC      + 1)
> -+#define HAL_INDBUFNEWBYTEALLOC     (HAL_VERTBUFTOTALOBJALLOC    + 1)
> -+#define HAL_INDBUFTOTALBYTEALLOC   (HAL_INDBUFNEWBYTEALLOC      + 1)
> -+#define HAL_INDBUFNEWOBJALLOC      (HAL_INDBUFTOTALBYTEALLOC    + 1)
> -+#define HAL_INDBUFTOTALOBJALLOC    (HAL_INDBUFNEWOBJALLOC       + 1)
> -+#define HAL_TEXBUFNEWBYTEALLOC     (HAL_INDBUFTOTALOBJALLOC     + 1)
> -+#define HAL_TEXBUFTOTALBYTEALLOC   (HAL_TEXBUFNEWBYTEALLOC      + 1)
> -+#define HAL_TEXBUFNEWOBJALLOC      (HAL_TEXBUFTOTALBYTEALLOC    + 1)
> -+#define HAL_TEXBUFTOTALOBJALLOC    (HAL_TEXBUFNEWOBJALLOC       + 1)
> -+
> -+#define GPU_CYCLES           1
> -+#define GPU_READ64BYTE       (GPU_CYCLES         + 1)
> -+#define GPU_WRITE64BYTE      (GPU_READ64BYTE     + 1)
> -+#define GPU_TOTALCYCLES      (GPU_WRITE64BYTE    + 1)
> -+#define GPU_IDLECYCLES       (GPU_TOTALCYCLES    + 1)
> -+
> -+#define VS_INSTCOUNT          1
> -+#define VS_BRANCHINSTCOUNT    (VS_INSTCOUNT          + 1)
> -+#define VS_TEXLDINSTCOUNT     (VS_BRANCHINSTCOUNT    + 1)
> -+#define VS_RENDEREDVERTCOUNT  (VS_TEXLDINSTCOUNT     + 1)
> -+#define VS_SOURCE             (VS_RENDEREDVERTCOUNT  + 1)
> -+
> -+#define PS_INSTCOUNT          1
> -+#define PS_BRANCHINSTCOUNT    (PS_INSTCOUNT          + 1)
> -+#define PS_TEXLDINSTCOUNT     (PS_BRANCHINSTCOUNT    + 1)
> -+#define PS_RENDEREDPIXCOUNT   (PS_TEXLDINSTCOUNT     + 1)
> -+#define PS_SOURCE             (PS_RENDEREDPIXCOUNT   + 1)
> -+
> -+#define PA_INVERTCOUNT        1
> -+#define PA_INPRIMCOUNT        (PA_INVERTCOUNT      + 1)
> -+#define PA_OUTPRIMCOUNT       (PA_INPRIMCOUNT      + 1)
> -+#define PA_DEPTHCLIPCOUNT     (PA_OUTPRIMCOUNT     + 1)
> -+#define PA_TRIVIALREJCOUNT    (PA_DEPTHCLIPCOUNT   + 1)
> -+#define PA_CULLCOUNT          (PA_TRIVIALREJCOUNT  + 1)
> -+
> -+#define SE_TRIANGLECOUNT      1
> -+#define SE_LINECOUNT          (SE_TRIANGLECOUNT    + 1)
> -+
> -+#define RA_VALIDPIXCOUNT      1
> -+#define RA_TOTALQUADCOUNT     (RA_VALIDPIXCOUNT      + 1)
> -+#define RA_VALIDQUADCOUNTEZ   (RA_TOTALQUADCOUNT     + 1)
> -+#define RA_TOTALPRIMCOUNT     (RA_VALIDQUADCOUNTEZ   + 1)
> -+#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT     + 1)
> -+#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
> -+#define RA_EEZCULLCOUNT       (RA_PREFCACHEMISSCOUNT + 1)
> -+
> -+#define TX_TOTBILINEARREQ     1
> -+#define TX_TOTTRILINEARREQ    (TX_TOTBILINEARREQ      + 1)
> -+#define TX_TOTDISCARDTEXREQ   (TX_TOTTRILINEARREQ     + 1)
> -+#define TX_TOTTEXREQ          (TX_TOTDISCARDTEXREQ    + 1)
> -+#define TX_MEMREADCOUNT       (TX_TOTTEXREQ           + 1)
> -+#define TX_MEMREADIN8BCOUNT   (TX_MEMREADCOUNT        + 1)
> -+#define TX_CACHEMISSCOUNT     (TX_MEMREADIN8BCOUNT    + 1)
> -+#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT      + 1)
> -+#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
> -+
> -+#define PE_KILLEDBYCOLOR      1
> -+#define PE_KILLEDBYDEPTH      (PE_KILLEDBYCOLOR    + 1)
> -+#define PE_DRAWNBYCOLOR       (PE_KILLEDBYDEPTH    + 1)
> -+#define PE_DRAWNBYDEPTH       (PE_DRAWNBYCOLOR     + 1)
> -+
> -+#define MC_READREQ8BPIPE      1
> -+#define MC_READREQ8BIP        (MC_READREQ8BPIPE    + 1)
> -+#define MC_WRITEREQ8BPIPE     (MC_READREQ8BIP      + 1)
> -+
> -+#define AXI_READREQSTALLED    1
> -+#define AXI_WRITEREQSTALLED   (AXI_READREQSTALLED  + 1)
> -+#define AXI_WRITEDATASTALLED  (AXI_WRITEREQSTALLED + 1)
> -+
> -+#define PVS_INSTRCOUNT        1
> -+#define PVS_ALUINSTRCOUNT     (PVS_INSTRCOUNT      + 1)
> -+#define PVS_TEXINSTRCOUNT     (PVS_ALUINSTRCOUNT   + 1)
> -+#define PVS_ATTRIBCOUNT       (PVS_TEXINSTRCOUNT   + 1)
> -+#define PVS_UNIFORMCOUNT      (PVS_ATTRIBCOUNT     + 1)
> -+#define PVS_FUNCTIONCOUNT     (PVS_UNIFORMCOUNT    + 1)
> -+#define PVS_SOURCE            (PVS_FUNCTIONCOUNT   + 1)
> -+
> -+#define PPS_INSTRCOUNT       1
> -+#define PPS_ALUINSTRCOUNT    (PPS_INSTRCOUNT       + 1)
> -+#define PPS_TEXINSTRCOUNT    (PPS_ALUINSTRCOUNT    + 1)
> -+#define PPS_ATTRIBCOUNT      (PPS_TEXINSTRCOUNT    + 1)
> -+#define PPS_UNIFORMCOUNT     (PPS_ATTRIBCOUNT      + 1)
> -+#define PPS_FUNCTIONCOUNT    (PPS_UNIFORMCOUNT     + 1)
> -+#define PPS_SOURCE           (PPS_FUNCTIONCOUNT    + 1)
> - /* End of MISC Counter IDs. */
> -
> - #ifdef gcdNEW_PROFILER_FILE
> -@@ -578,8 +184,8 @@ extern "C" {
> - #define VPG_ES11_TIME   0x170000
> - #define VPG_ES20_TIME   0x180000
> - #define VPG_FRAME       0x190000
> --#define VPG_ES11_DRAW 0x200000
> --#define VPG_ES20_DRAW 0x210000
> -+#define VPG_ES11_DRAW   0x200000
> -+#define VPG_ES20_DRAW   0x210000
> - #define VPG_END         0xff0000
> -
> - /* Info. */
> -@@ -592,7 +198,7 @@ extern "C" {
> - #define VPC_INFOSCREENSIZE      (VPC_INFODRIVERMODE + 1)
> -
> - /* Counter Constants. */
> --#define VPC_ELAPSETIME  		(VPG_TIME + 1)
> -+#define VPC_ELAPSETIME          (VPG_TIME + 1)
> - #define VPC_CPUTIME             (VPC_ELAPSETIME + 1)
> -
> - #define VPC_MEMMAXRES           (VPG_MEM + 1)
> -@@ -600,404 +206,28 @@ extern "C" {
> - #define VPC_MEMUNSHAREDDATA     (VPC_MEMSHARED + 1)
> - #define VPC_MEMUNSHAREDSTACK    (VPC_MEMUNSHAREDDATA + 1)
> -
> --/* OpenGL ES11 Counters. */
> --#define	VPC_ES11ACTIVETEXTURE			(VPG_ES11 +	ES11_ACTIVETEXTURE)
> --#define	VPC_ES11ALPHAFUNC				(VPG_ES11 +	ES11_ALPHAFUNC)
> --#define	VPC_ES11ALPHAFUNCX				(VPG_ES11 +	ES11_ALPHAFUNCX)
> --#define	VPC_ES11BINDBUFFER				(VPG_ES11 +	ES11_BINDBUFFER)
> --#define	VPC_ES11BINDTEXTURE				(VPG_ES11 +	ES11_BINDTEXTURE)
> --#define	VPC_ES11BLENDFUNC				(VPG_ES11 +	ES11_BLENDFUNC)
> --#define	VPC_ES11BUFFERDATA				(VPG_ES11 +	ES11_BUFFERDATA)
> --#define	VPC_ES11BUFFERSUBDATA			(VPG_ES11 +	ES11_BUFFERSUBDATA)
> --#define	VPC_ES11CLEAR					(VPG_ES11 +	ES11_CLEAR)
> --#define	VPC_ES11CLEARCOLOR				(VPG_ES11 +	ES11_CLEARCOLOR)
> --#define	VPC_ES11CLEARCOLORX				(VPG_ES11 +	ES11_CLEARCOLORX)
> --#define	VPC_ES11CLEARDEPTHF				(VPG_ES11 +	ES11_CLEARDEPTHF)
> --#define	VPC_ES11CLEARDEPTHX				(VPG_ES11 +	ES11_CLEARDEPTHX)
> --#define	VPC_ES11CLEARSTENCIL			(VPG_ES11 +	ES11_CLEARSTENCIL)
> --#define	VPC_ES11CLIENTACTIVETEXTURE		(VPG_ES11 +	ES11_CLIENTACTIVETEXTURE)
> --#define	VPC_ES11CLIPPLANEF				(VPG_ES11 +	ES11_CLIPPLANEF)
> --#define	VPC_ES11CLIPPLANEX				(VPG_ES11 +	ES11_CLIPPLANEX)
> --#define	VPC_ES11COLOR4F					(VPG_ES11 +	ES11_COLOR4F)
> --#define	VPC_ES11COLOR4UB				(VPG_ES11 +	ES11_COLOR4UB)
> --#define	VPC_ES11COLOR4X					(VPG_ES11 +	ES11_COLOR4X)
> --#define	VPC_ES11COLORMASK				(VPG_ES11 +	ES11_COLORMASK)
> --#define	VPC_ES11COLORPOINTER			(VPG_ES11 +	ES11_COLORPOINTER)
> --#define	VPC_ES11COMPRESSEDTEXIMAGE2D	(VPG_ES11 +	ES11_COMPRESSEDTEXIMAGE2D)
> --#define	VPC_ES11COMPRESSEDTEXSUBIMAGE2D	(VPG_ES11 +	ES11_COMPRESSEDTEXSUBIMAGE2D)
> --#define	VPC_ES11COPYTEXIMAGE2D			(VPG_ES11 +	ES11_COPYTEXIMAGE2D)
> --#define	VPC_ES11COPYTEXSUBIMAGE2D		(VPG_ES11 +	ES11_COPYTEXSUBIMAGE2D)
> --#define	VPC_ES11CULLFACE				(VPG_ES11 +	ES11_CULLFACE)
> --#define	VPC_ES11DELETEBUFFERS			(VPG_ES11 +	ES11_DELETEBUFFERS)
> --#define	VPC_ES11DELETETEXTURES			(VPG_ES11 +	ES11_DELETETEXTURES)
> --#define	VPC_ES11DEPTHFUNC				(VPG_ES11 +	ES11_DEPTHFUNC)
> --#define	VPC_ES11DEPTHMASK				(VPG_ES11 +	ES11_DEPTHMASK)
> --#define	VPC_ES11DEPTHRANGEF				(VPG_ES11 +	ES11_DEPTHRANGEF)
> --#define	VPC_ES11DEPTHRANGEX				(VPG_ES11 +	ES11_DEPTHRANGEX)
> --#define	VPC_ES11DISABLE					(VPG_ES11 +	ES11_DISABLE)
> --#define	VPC_ES11DISABLECLIENTSTATE		(VPG_ES11 +	ES11_DISABLECLIENTSTATE)
> --#define	VPC_ES11DRAWARRAYS				(VPG_ES11 +	ES11_DRAWARRAYS)
> --#define	VPC_ES11DRAWELEMENTS			(VPG_ES11 +	ES11_DRAWELEMENTS)
> --#define	VPC_ES11ENABLE					(VPG_ES11 +	ES11_ENABLE)
> --#define	VPC_ES11ENABLECLIENTSTATE		(VPG_ES11 +	ES11_ENABLECLIENTSTATE)
> --#define	VPC_ES11FINISH					(VPG_ES11 +	ES11_FINISH)
> --#define	VPC_ES11FLUSH					(VPG_ES11 +	ES11_FLUSH)
> --#define	VPC_ES11FOGF					(VPG_ES11 +	ES11_FOGF)
> --#define	VPC_ES11FOGFV					(VPG_ES11 +	ES11_FOGFV)
> --#define	VPC_ES11FOGX					(VPG_ES11 +	ES11_FOGX)
> --#define	VPC_ES11FOGXV					(VPG_ES11 +	ES11_FOGXV)
> --#define	VPC_ES11FRONTFACE				(VPG_ES11 +	ES11_FRONTFACE)
> --#define	VPC_ES11FRUSTUMF				(VPG_ES11 +	ES11_FRUSTUMF)
> --#define	VPC_ES11FRUSTUMX				(VPG_ES11 +	ES11_FRUSTUMX)
> --#define	VPC_ES11GENBUFFERS				(VPG_ES11 +	ES11_GENBUFFERS)
> --#define	VPC_ES11GENTEXTURES				(VPG_ES11 +	ES11_GENTEXTURES)
> --#define	VPC_ES11GETBOOLEANV				(VPG_ES11 +	ES11_GETBOOLEANV)
> --#define	VPC_ES11GETBUFFERPARAMETERIV	(VPG_ES11 +	ES11_GETBUFFERPARAMETERIV)
> --#define	VPC_ES11GETCLIPPLANEF			(VPG_ES11 +	ES11_GETCLIPPLANEF)
> --#define	VPC_ES11GETCLIPPLANEX			(VPG_ES11 +	ES11_GETCLIPPLANEX)
> --#define	VPC_ES11GETERROR				(VPG_ES11 +	ES11_GETERROR)
> --#define	VPC_ES11GETFIXEDV				(VPG_ES11 +	ES11_GETFIXEDV)
> --#define	VPC_ES11GETFLOATV				(VPG_ES11 +	ES11_GETFLOATV)
> --#define	VPC_ES11GETINTEGERV				(VPG_ES11 +	ES11_GETINTEGERV)
> --#define	VPC_ES11GETLIGHTFV				(VPG_ES11 +	ES11_GETLIGHTFV)
> --#define	VPC_ES11GETLIGHTXV				(VPG_ES11 +	ES11_GETLIGHTXV)
> --#define	VPC_ES11GETMATERIALFV			(VPG_ES11 +	ES11_GETMATERIALFV)
> --#define	VPC_ES11GETMATERIALXV			(VPG_ES11 +	ES11_GETMATERIALXV)
> --#define	VPC_ES11GETPOINTERV				(VPG_ES11 +	ES11_GETPOINTERV)
> --#define	VPC_ES11GETSTRING				(VPG_ES11 +	ES11_GETSTRING)
> --#define	VPC_ES11GETTEXENVFV				(VPG_ES11 +	ES11_GETTEXENVFV)
> --#define	VPC_ES11GETTEXENVIV				(VPG_ES11 +	ES11_GETTEXENVIV)
> --#define	VPC_ES11GETTEXENVXV				(VPG_ES11 +	ES11_GETTEXENVXV)
> --#define	VPC_ES11GETTEXPARAMETERFV		(VPG_ES11 +	ES11_GETTEXPARAMETERFV)
> --#define	VPC_ES11GETTEXPARAMETERIV		(VPG_ES11 +	ES11_GETTEXPARAMETERIV)
> --#define	VPC_ES11GETTEXPARAMETERXV		(VPG_ES11 +	ES11_GETTEXPARAMETERXV)
> --#define	VPC_ES11HINT					(VPG_ES11 +	ES11_HINT)
> --#define	VPC_ES11ISBUFFER				(VPG_ES11 +	ES11_ISBUFFER)
> --#define	VPC_ES11ISENABLED				(VPG_ES11 +	ES11_ISENABLED)
> --#define	VPC_ES11ISTEXTURE				(VPG_ES11 +	ES11_ISTEXTURE)
> --#define	VPC_ES11LIGHTF					(VPG_ES11 +	ES11_LIGHTF)
> --#define	VPC_ES11LIGHTFV					(VPG_ES11 +	ES11_LIGHTFV)
> --#define	VPC_ES11LIGHTMODELF				(VPG_ES11 +	ES11_LIGHTMODELF)
> --#define	VPC_ES11LIGHTMODELFV			(VPG_ES11 +	ES11_LIGHTMODELFV)
> --#define	VPC_ES11LIGHTMODELX				(VPG_ES11 +	ES11_LIGHTMODELX)
> --#define	VPC_ES11LIGHTMODELXV			(VPG_ES11 +	ES11_LIGHTMODELXV)
> --#define	VPC_ES11LIGHTX					(VPG_ES11 +	ES11_LIGHTX)
> --#define	VPC_ES11LIGHTXV					(VPG_ES11 +	ES11_LIGHTXV)
> --#define	VPC_ES11LINEWIDTH				(VPG_ES11 +	ES11_LINEWIDTH)
> --#define	VPC_ES11LINEWIDTHX				(VPG_ES11 +	ES11_LINEWIDTHX)
> --#define	VPC_ES11LOADIDENTITY			(VPG_ES11 +	ES11_LOADIDENTITY)
> --#define	VPC_ES11LOADMATRIXF				(VPG_ES11 +	ES11_LOADMATRIXF)
> --#define	VPC_ES11LOADMATRIXX				(VPG_ES11 +	ES11_LOADMATRIXX)
> --#define	VPC_ES11LOGICOP					(VPG_ES11 +	ES11_LOGICOP)
> --#define	VPC_ES11MATERIALF				(VPG_ES11 +	ES11_MATERIALF)
> --#define	VPC_ES11MATERIALFV				(VPG_ES11 +	ES11_MATERIALFV)
> --#define	VPC_ES11MATERIALX				(VPG_ES11 +	ES11_MATERIALX)
> --#define	VPC_ES11MATERIALXV				(VPG_ES11 +	ES11_MATERIALXV)
> --#define	VPC_ES11MATRIXMODE				(VPG_ES11 +	ES11_MATRIXMODE)
> --#define	VPC_ES11MULTITEXCOORD4F			(VPG_ES11 +	ES11_MULTITEXCOORD4F)
> --#define	VPC_ES11MULTITEXCOORD4X			(VPG_ES11 +	ES11_MULTITEXCOORD4X)
> --#define	VPC_ES11MULTMATRIXF				(VPG_ES11 +	ES11_MULTMATRIXF)
> --#define	VPC_ES11MULTMATRIXX				(VPG_ES11 +	ES11_MULTMATRIXX)
> --#define	VPC_ES11NORMAL3F				(VPG_ES11 +	ES11_NORMAL3F)
> --#define	VPC_ES11NORMAL3X				(VPG_ES11 +	ES11_NORMAL3X)
> --#define	VPC_ES11NORMALPOINTER			(VPG_ES11 +	ES11_NORMALPOINTER)
> --#define	VPC_ES11ORTHOF					(VPG_ES11 +	ES11_ORTHOF)
> --#define	VPC_ES11ORTHOX					(VPG_ES11 +	ES11_ORTHOX)
> --#define	VPC_ES11PIXELSTOREI				(VPG_ES11 +	ES11_PIXELSTOREI)
> --#define	VPC_ES11POINTPARAMETERF			(VPG_ES11 +	ES11_POINTPARAMETERF)
> --#define	VPC_ES11POINTPARAMETERFV		(VPG_ES11 +	ES11_POINTPARAMETERFV)
> --#define	VPC_ES11POINTPARAMETERX			(VPG_ES11 +	ES11_POINTPARAMETERX)
> --#define	VPC_ES11POINTPARAMETERXV		(VPG_ES11 +	ES11_POINTPARAMETERXV)
> --#define	VPC_ES11POINTSIZE				(VPG_ES11 +	ES11_POINTSIZE)
> --#define	VPC_ES11POINTSIZEX				(VPG_ES11 +	ES11_POINTSIZEX)
> --#define	VPC_ES11POLYGONOFFSET			(VPG_ES11 +	ES11_POLYGONOFFSET)
> --#define	VPC_ES11POLYGONOFFSETX			(VPG_ES11 +	ES11_POLYGONOFFSETX)
> --#define	VPC_ES11POPMATRIX				(VPG_ES11 +	ES11_POPMATRIX)
> --#define	VPC_ES11PUSHMATRIX				(VPG_ES11 +	ES11_PUSHMATRIX)
> --#define	VPC_ES11READPIXELS				(VPG_ES11 +	ES11_READPIXELS)
> --#define	VPC_ES11ROTATEF					(VPG_ES11 +	ES11_ROTATEF)
> --#define	VPC_ES11ROTATEX					(VPG_ES11 +	ES11_ROTATEX)
> --#define	VPC_ES11SAMPLECOVERAGE			(VPG_ES11 +	ES11_SAMPLECOVERAGE)
> --#define	VPC_ES11SAMPLECOVERAGEX			(VPG_ES11 +	ES11_SAMPLECOVERAGEX)
> --#define	VPC_ES11SCALEF					(VPG_ES11 +	ES11_SCALEF)
> --#define	VPC_ES11SCALEX					(VPG_ES11 +	ES11_SCALEX)
> --#define	VPC_ES11SCISSOR					(VPG_ES11 +	ES11_SCISSOR)
> --#define	VPC_ES11SHADEMODEL				(VPG_ES11 +	ES11_SHADEMODEL)
> --#define	VPC_ES11STENCILFUNC				(VPG_ES11 +	ES11_STENCILFUNC)
> --#define	VPC_ES11STENCILMASK				(VPG_ES11 +	ES11_STENCILMASK)
> --#define	VPC_ES11STENCILOP				(VPG_ES11 +	ES11_STENCILOP)
> --#define	VPC_ES11TEXCOORDPOINTER			(VPG_ES11 +	ES11_TEXCOORDPOINTER)
> --#define	VPC_ES11TEXENVF					(VPG_ES11 +	ES11_TEXENVF)
> --#define	VPC_ES11TEXENVFV				(VPG_ES11 +	ES11_TEXENVFV)
> --#define	VPC_ES11TEXENVI					(VPG_ES11 +	ES11_TEXENVI)
> --#define	VPC_ES11TEXENVIV				(VPG_ES11 +	ES11_TEXENVIV)
> --#define	VPC_ES11TEXENVX					(VPG_ES11 +	ES11_TEXENVX)
> --#define	VPC_ES11TEXENVXV				(VPG_ES11 +	ES11_TEXENVXV)
> --#define	VPC_ES11TEXIMAGE2D				(VPG_ES11 +	ES11_TEXIMAGE2D)
> --#define	VPC_ES11TEXPARAMETERF			(VPG_ES11 +	ES11_TEXPARAMETERF)
> --#define	VPC_ES11TEXPARAMETERFV			(VPG_ES11 +	ES11_TEXPARAMETERFV)
> --#define	VPC_ES11TEXPARAMETERI			(VPG_ES11 +	ES11_TEXPARAMETERI)
> --#define	VPC_ES11TEXPARAMETERIV			(VPG_ES11 +	ES11_TEXPARAMETERIV)
> --#define	VPC_ES11TEXPARAMETERX			(VPG_ES11 +	ES11_TEXPARAMETERX)
> --#define	VPC_ES11TEXPARAMETERXV			(VPG_ES11 +	ES11_TEXPARAMETERXV)
> --#define	VPC_ES11TEXSUBIMAGE2D			(VPG_ES11 +	ES11_TEXSUBIMAGE2D)
> --#define	VPC_ES11TRANSLATEF				(VPG_ES11 +	ES11_TRANSLATEF)
> --#define	VPC_ES11TRANSLATEX				(VPG_ES11 +	ES11_TRANSLATEX)
> --#define	VPC_ES11VERTEXPOINTER			(VPG_ES11 +	ES11_VERTEXPOINTER)
> --#define	VPC_ES11VIEWPORT				(VPG_ES11 +	ES11_VIEWPORT)
> - /* OpenGL ES11 Statics Counter IDs. */
> --#define	VPC_ES11CALLS					(VPG_ES11 +	ES11_CALLS)
> --#define	VPC_ES11DRAWCALLS				(VPG_ES11 +	ES11_DRAWCALLS)
> --#define	VPC_ES11STATECHANGECALLS		(VPG_ES11 +	ES11_STATECHANGECALLS)
> --#define	VPC_ES11POINTCOUNT				(VPG_ES11 +	ES11_POINTCOUNT)
> --#define	VPC_ES11LINECOUNT				(VPG_ES11 +	ES11_LINECOUNT)
> --#define	VPC_ES11TRIANGLECOUNT			(VPG_ES11 +	ES11_TRIANGLECOUNT)
> --
> --/* OpenGLES 2.x */
> --#define	VPC_ES20ACTIVETEXTURE						(VPG_ES20 +	ES20_ACTIVETEXTURE)
> --#define	VPC_ES20ATTACHSHADER						(VPG_ES20 +	ES20_ATTACHSHADER)
> --#define	VPC_ES20BINDATTRIBLOCATION					(VPG_ES20 +	ES20_BINDATTRIBLOCATION)
> --#define	VPC_ES20BINDBUFFER							(VPG_ES20 +	ES20_BINDBUFFER)
> --#define	VPC_ES20BINDFRAMEBUFFER						(VPG_ES20 +	ES20_BINDFRAMEBUFFER)
> --#define	VPC_ES20BINDRENDERBUFFER					(VPG_ES20 +	ES20_BINDRENDERBUFFER)
> --#define	VPC_ES20BINDTEXTURE							(VPG_ES20 +	ES20_BINDTEXTURE)
> --#define	VPC_ES20BLENDCOLOR							(VPG_ES20 +	ES20_BLENDCOLOR)
> --#define	VPC_ES20BLENDEQUATION						(VPG_ES20 +	ES20_BLENDEQUATION)
> --#define	VPC_ES20BLENDEQUATIONSEPARATE				(VPG_ES20 +	ES20_BLENDEQUATIONSEPARATE)
> --#define	VPC_ES20BLENDFUNC							(VPG_ES20 +	ES20_BLENDFUNC)
> --#define	VPC_ES20BLENDFUNCSEPARATE					(VPG_ES20 +	ES20_BLENDFUNCSEPARATE)
> --#define	VPC_ES20BUFFERDATA							(VPG_ES20 +	ES20_BUFFERDATA)
> --#define	VPC_ES20BUFFERSUBDATA						(VPG_ES20 +	ES20_BUFFERSUBDATA)
> --#define	VPC_ES20CHECKFRAMEBUFFERSTATUS				(VPG_ES20 +	ES20_CHECKFRAMEBUFFERSTATUS)
> --#define	VPC_ES20CLEAR								(VPG_ES20 +	ES20_CLEAR)
> --#define	VPC_ES20CLEARCOLOR							(VPG_ES20 +	ES20_CLEARCOLOR)
> --#define	VPC_ES20CLEARDEPTHF							(VPG_ES20 +	ES20_CLEARDEPTHF)
> --#define	VPC_ES20CLEARSTENCIL						(VPG_ES20 +	ES20_CLEARSTENCIL)
> --#define	VPC_ES20COLORMASK							(VPG_ES20 +	ES20_COLORMASK)
> --#define	VPC_ES20COMPILESHADER						(VPG_ES20 +	ES20_COMPILESHADER)
> --#define	VPC_ES20COMPRESSEDTEXIMAGE2D				(VPG_ES20 +	ES20_COMPRESSEDTEXIMAGE2D)
> --#define	VPC_ES20COMPRESSEDTEXSUBIMAGE2D				(VPG_ES20 +	ES20_COMPRESSEDTEXSUBIMAGE2D)
> --#define	VPC_ES20COPYTEXIMAGE2D						(VPG_ES20 +	ES20_COPYTEXIMAGE2D)
> --#define	VPC_ES20COPYTEXSUBIMAGE2D					(VPG_ES20 +	ES20_COPYTEXSUBIMAGE2D)
> --#define	VPC_ES20CREATEPROGRAM						(VPG_ES20 +	ES20_CREATEPROGRAM)
> --#define	VPC_ES20CREATESHADER						(VPG_ES20 +	ES20_CREATESHADER)
> --#define	VPC_ES20CULLFACE							(VPG_ES20 +	ES20_CULLFACE)
> --#define	VPC_ES20DELETEBUFFERS						(VPG_ES20 +	ES20_DELETEBUFFERS)
> --#define	VPC_ES20DELETEFRAMEBUFFERS					(VPG_ES20 +	ES20_DELETEFRAMEBUFFERS)
> --#define	VPC_ES20DELETEPROGRAM						(VPG_ES20 +	ES20_DELETEPROGRAM)
> --#define	VPC_ES20DELETERENDERBUFFERS					(VPG_ES20 +	ES20_DELETERENDERBUFFERS)
> --#define	VPC_ES20DELETESHADER						(VPG_ES20 +	ES20_DELETESHADER)
> --#define	VPC_ES20DELETETEXTURES						(VPG_ES20 +	ES20_DELETETEXTURES)
> --#define	VPC_ES20DEPTHFUNC							(VPG_ES20 +	ES20_DEPTHFUNC)
> --#define	VPC_ES20DEPTHMASK							(VPG_ES20 +	ES20_DEPTHMASK)
> --#define	VPC_ES20DEPTHRANGEF							(VPG_ES20 +	ES20_DEPTHRANGEF)
> --#define	VPC_ES20DETACHSHADER						(VPG_ES20 +	ES20_DETACHSHADER)
> --#define	VPC_ES20DISABLE								(VPG_ES20 +	ES20_DISABLE)
> --#define	VPC_ES20DISABLEVERTEXATTRIBARRAY			(VPG_ES20 +	ES20_DISABLEVERTEXATTRIBARRAY)
> --#define	VPC_ES20DRAWARRAYS							(VPG_ES20 +	ES20_DRAWARRAYS)
> --#define	VPC_ES20DRAWELEMENTS						(VPG_ES20 +	ES20_DRAWELEMENTS)
> --#define	VPC_ES20ENABLE								(VPG_ES20 +	ES20_ENABLE)
> --#define	VPC_ES20ENABLEVERTEXATTRIBARRAY				(VPG_ES20 +	ES20_ENABLEVERTEXATTRIBARRAY)
> --#define	VPC_ES20FINISH								(VPG_ES20 +	ES20_FINISH)
> --#define	VPC_ES20FLUSH								(VPG_ES20 +	ES20_FLUSH)
> --#define	VPC_ES20FRAMEBUFFERRENDERBUFFER				(VPG_ES20 +	ES20_FRAMEBUFFERRENDERBUFFER)
> --#define	VPC_ES20FRAMEBUFFERTEXTURE2D				(VPG_ES20 +	ES20_FRAMEBUFFERTEXTURE2D)
> --#define	VPC_ES20FRONTFACE							(VPG_ES20 +	ES20_FRONTFACE)
> --#define	VPC_ES20GENBUFFERS							(VPG_ES20 +	ES20_GENBUFFERS)
> --#define	VPC_ES20GENERATEMIPMAP						(VPG_ES20 +	ES20_GENERATEMIPMAP)
> --#define	VPC_ES20GENFRAMEBUFFERS						(VPG_ES20 +	ES20_GENFRAMEBUFFERS)
> --#define	VPC_ES20GENRENDERBUFFERS					(VPG_ES20 +	ES20_GENRENDERBUFFERS)
> --#define	VPC_ES20GENTEXTURES							(VPG_ES20 +	ES20_GENTEXTURES)
> --#define	VPC_ES20GETACTIVEATTRIB						(VPG_ES20 +	ES20_GETACTIVEATTRIB)
> --#define	VPC_ES20GETACTIVEUNIFORM					(VPG_ES20 +	ES20_GETACTIVEUNIFORM)
> --#define	VPC_ES20GETATTACHEDSHADERS					(VPG_ES20 +	ES20_GETATTACHEDSHADERS)
> --#define	VPC_ES20GETATTRIBLOCATION					(VPG_ES20 +	ES20_GETATTRIBLOCATION)
> --#define	VPC_ES20GETBOOLEANV							(VPG_ES20 +	ES20_GETBOOLEANV)
> --#define	VPC_ES20GETBUFFERPARAMETERIV				(VPG_ES20 +	ES20_GETBUFFERPARAMETERIV)
> --#define	VPC_ES20GETERROR							(VPG_ES20 +	ES20_GETERROR)
> --#define	VPC_ES20GETFLOATV							(VPG_ES20 +	ES20_GETFLOATV)
> --#define	VPC_ES20GETFRAMEBUFFERATTACHMENTPARAMETERIV	(VPG_ES20 +	ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV)
> --#define	VPC_ES20GETINTEGERV							(VPG_ES20 +	ES20_GETINTEGERV)
> --#define	VPC_ES20GETPROGRAMIV						(VPG_ES20 +	ES20_GETPROGRAMIV)
> --#define	VPC_ES20GETPROGRAMINFOLOG					(VPG_ES20 +	ES20_GETPROGRAMINFOLOG)
> --#define	VPC_ES20GETRENDERBUFFERPARAMETERIV			(VPG_ES20 +	ES20_GETRENDERBUFFERPARAMETERIV)
> --#define	VPC_ES20GETSHADERIV							(VPG_ES20 +	ES20_GETSHADERIV)
> --#define	VPC_ES20GETSHADERINFOLOG					(VPG_ES20 +	ES20_GETSHADERINFOLOG)
> --#define	VPC_ES20GETSHADERPRECISIONFORMAT			(VPG_ES20 +	ES20_GETSHADERPRECISIONFORMAT)
> --#define	VPC_ES20GETSHADERSOURCE						(VPG_ES20 +	ES20_GETSHADERSOURCE)
> --#define	VPC_ES20GETSTRING							(VPG_ES20 +	ES20_GETSTRING)
> --#define	VPC_ES20GETTEXPARAMETERFV					(VPG_ES20 +	ES20_GETTEXPARAMETERFV)
> --#define	VPC_ES20GETTEXPARAMETERIV					(VPG_ES20 +	ES20_GETTEXPARAMETERIV)
> --#define	VPC_ES20GETUNIFORMFV						(VPG_ES20 +	ES20_GETUNIFORMFV)
> --#define	VPC_ES20GETUNIFORMIV						(VPG_ES20 +	ES20_GETUNIFORMIV)
> --#define	VPC_ES20GETUNIFORMLOCATION					(VPG_ES20 +	ES20_GETUNIFORMLOCATION)
> --#define	VPC_ES20GETVERTEXATTRIBFV					(VPG_ES20 +	ES20_GETVERTEXATTRIBFV)
> --#define	VPC_ES20GETVERTEXATTRIBIV					(VPG_ES20 +	ES20_GETVERTEXATTRIBIV)
> --#define	VPC_ES20GETVERTEXATTRIBPOINTERV				(VPG_ES20 +	ES20_GETVERTEXATTRIBPOINTERV)
> --#define	VPC_ES20HINT								(VPG_ES20 +	ES20_HINT)
> --#define	VPC_ES20ISBUFFER							(VPG_ES20 +	ES20_ISBUFFER)
> --#define	VPC_ES20ISENABLED							(VPG_ES20 +	ES20_ISENABLED)
> --#define	VPC_ES20ISFRAMEBUFFER						(VPG_ES20 +	ES20_ISFRAMEBUFFER)
> --#define	VPC_ES20ISPROGRAM							(VPG_ES20 +	ES20_ISPROGRAM)
> --#define	VPC_ES20ISRENDERBUFFER						(VPG_ES20 +	ES20_ISRENDERBUFFER)
> --#define	VPC_ES20ISSHADER							(VPG_ES20 +	ES20_ISSHADER)
> --#define	VPC_ES20ISTEXTURE							(VPG_ES20 +	ES20_ISTEXTURE)
> --#define	VPC_ES20LINEWIDTH							(VPG_ES20 +	ES20_LINEWIDTH)
> --#define	VPC_ES20LINKPROGRAM							(VPG_ES20 +	ES20_LINKPROGRAM)
> --#define	VPC_ES20PIXELSTOREI							(VPG_ES20 +	ES20_PIXELSTOREI)
> --#define	VPC_ES20POLYGONOFFSET						(VPG_ES20 +	ES20_POLYGONOFFSET)
> --#define	VPC_ES20READPIXELS							(VPG_ES20 +	ES20_READPIXELS)
> --#define	VPC_ES20RELEASESHADERCOMPILER				(VPG_ES20 +	ES20_RELEASESHADERCOMPILER)
> --#define	VPC_ES20RENDERBUFFERSTORAGE					(VPG_ES20 +	ES20_RENDERBUFFERSTORAGE)
> --#define	VPC_ES20SAMPLECOVERAGE						(VPG_ES20 +	ES20_SAMPLECOVERAGE)
> --#define	VPC_ES20SCISSOR								(VPG_ES20 +	ES20_SCISSOR)
> --#define	VPC_ES20SHADERBINARY						(VPG_ES20 +	ES20_SHADERBINARY)
> --#define	VPC_ES20SHADERSOURCE						(VPG_ES20 +	ES20_SHADERSOURCE)
> --#define	VPC_ES20STENCILFUNC							(VPG_ES20 +	ES20_STENCILFUNC)
> --#define	VPC_ES20STENCILFUNCSEPARATE					(VPG_ES20 +	ES20_STENCILFUNCSEPARATE)
> --#define	VPC_ES20STENCILMASK							(VPG_ES20 +	ES20_STENCILMASK)
> --#define	VPC_ES20STENCILMASKSEPARATE					(VPG_ES20 +	ES20_STENCILMASKSEPARATE)
> --#define	VPC_ES20STENCILOP							(VPG_ES20 +	ES20_STENCILOP)
> --#define	VPC_ES20STENCILOPSEPARATE					(VPG_ES20 +	ES20_STENCILOPSEPARATE)
> --#define	VPC_ES20TEXIMAGE2D							(VPG_ES20 +	ES20_TEXIMAGE2D)
> --#define	VPC_ES20TEXPARAMETERF						(VPG_ES20 +	ES20_TEXPARAMETERF)
> --#define	VPC_ES20TEXPARAMETERFV						(VPG_ES20 +	ES20_TEXPARAMETERFV)
> --#define	VPC_ES20TEXPARAMETERI						(VPG_ES20 +	ES20_TEXPARAMETERI)
> --#define	VPC_ES20TEXPARAMETERIV						(VPG_ES20 +	ES20_TEXPARAMETERIV)
> --#define	VPC_ES20TEXSUBIMAGE2D						(VPG_ES20 +	ES20_TEXSUBIMAGE2D)
> --#define	VPC_ES20UNIFORM1F							(VPG_ES20 +	ES20_UNIFORM1F)
> --#define	VPC_ES20UNIFORM1FV							(VPG_ES20 +	ES20_UNIFORM1FV)
> --#define	VPC_ES20UNIFORM1I							(VPG_ES20 +	ES20_UNIFORM1I)
> --#define	VPC_ES20UNIFORM1IV							(VPG_ES20 +	ES20_UNIFORM1IV)
> --#define	VPC_ES20UNIFORM2F							(VPG_ES20 +	ES20_UNIFORM2F)
> --#define	VPC_ES20UNIFORM2FV							(VPG_ES20 +	ES20_UNIFORM2FV)
> --#define	VPC_ES20UNIFORM2I							(VPG_ES20 +	ES20_UNIFORM2I)
> --#define	VPC_ES20UNIFORM2IV							(VPG_ES20 +	ES20_UNIFORM2IV)
> --#define	VPC_ES20UNIFORM3F							(VPG_ES20 +	ES20_UNIFORM3F)
> --#define	VPC_ES20UNIFORM3FV							(VPG_ES20 +	ES20_UNIFORM3FV)
> --#define	VPC_ES20UNIFORM3I							(VPG_ES20 +	ES20_UNIFORM3I)
> --#define	VPC_ES20UNIFORM3IV							(VPG_ES20 +	ES20_UNIFORM3IV)
> --#define	VPC_ES20UNIFORM4F							(VPG_ES20 +	ES20_UNIFORM4F)
> --#define	VPC_ES20UNIFORM4FV							(VPG_ES20 +	ES20_UNIFORM4FV)
> --#define	VPC_ES20UNIFORM4I							(VPG_ES20 +	ES20_UNIFORM4I)
> --#define	VPC_ES20UNIFORM4IV							(VPG_ES20 +	ES20_UNIFORM4IV)
> --#define	VPC_ES20UNIFORMMATRIX2FV					(VPG_ES20 +	ES20_UNIFORMMATRIX2FV)
> --#define	VPC_ES20UNIFORMMATRIX3FV					(VPG_ES20 +	ES20_UNIFORMMATRIX3FV)
> --#define	VPC_ES20UNIFORMMATRIX4FV					(VPG_ES20 +	ES20_UNIFORMMATRIX4FV)
> --#define	VPC_ES20USEPROGRAM							(VPG_ES20 +	ES20_USEPROGRAM)
> --#define	VPC_ES20VALIDATEPROGRAM						(VPG_ES20 +	ES20_VALIDATEPROGRAM)
> --#define	VPC_ES20VERTEXATTRIB1F						(VPG_ES20 +	ES20_VERTEXATTRIB1F)
> --#define	VPC_ES20VERTEXATTRIB1FV						(VPG_ES20 +	ES20_VERTEXATTRIB1FV)
> --#define	VPC_ES20VERTEXATTRIB2F						(VPG_ES20 +	ES20_VERTEXATTRIB2F)
> --#define	VPC_ES20VERTEXATTRIB2FV						(VPG_ES20 +	ES20_VERTEXATTRIB2FV)
> --#define	VPC_ES20VERTEXATTRIB3F						(VPG_ES20 +	ES20_VERTEXATTRIB3F)
> --#define	VPC_ES20VERTEXATTRIB3FV						(VPG_ES20 +	ES20_VERTEXATTRIB3FV)
> --#define	VPC_ES20VERTEXATTRIB4F						(VPG_ES20 +	ES20_VERTEXATTRIB4F)
> --#define	VPC_ES20VERTEXATTRIB4FV						(VPG_ES20 +	ES20_VERTEXATTRIB4FV)
> --#define	VPC_ES20VERTEXATTRIBPOINTER					(VPG_ES20 +	ES20_VERTEXATTRIBPOINTER)
> --#define	VPC_ES20VIEWPORT							(VPG_ES20 +	ES20_VIEWPORT)
> -+#define    VPC_ES11CALLS            (VPG_ES11 +    ES11_CALLS)
> -+#define    VPC_ES11DRAWCALLS        (VPG_ES11 +    ES11_DRAWCALLS)
> -+#define    VPC_ES11STATECHANGECALLS (VPG_ES11 +    ES11_STATECHANGECALLS)
> -+#define    VPC_ES11POINTCOUNT       (VPG_ES11 +    ES11_POINTCOUNT)
> -+#define    VPC_ES11LINECOUNT        (VPG_ES11 +    ES11_LINECOUNT)
> -+#define    VPC_ES11TRIANGLECOUNT    (VPG_ES11 +    ES11_TRIANGLECOUNT)
> -+
> - /* OpenGL ES20 Statistics Counter IDs. */
> --#define	VPC_ES20CALLS								(VPG_ES20 +	ES20_CALLS)
> --#define	VPC_ES20DRAWCALLS							(VPG_ES20 +	ES20_DRAWCALLS)
> --#define	VPC_ES20STATECHANGECALLS					(VPG_ES20 +	ES20_STATECHANGECALLS)
> --#define	VPC_ES20POINTCOUNT							(VPG_ES20 +	ES20_POINTCOUNT)
> --#define	VPC_ES20LINECOUNT							(VPG_ES20 +	ES20_LINECOUNT)
> --#define	VPC_ES20TRIANGLECOUNT						(VPG_ES20 +	ES20_TRIANGLECOUNT)
> --
> --/* VG11 Counters. */
> --#define	VPC_VG11APPENDPATH				(VPG_VG11 +	VG11_APPENDPATH)
> --#define	VPC_VG11APPENDPATHDATA			(VPG_VG11 +	VG11_APPENDPATHDATA)
> --#define	VPC_VG11CHILDIMAGE				(VPG_VG11 +	VG11_CHILDIMAGE)
> --#define	VPC_VG11CLEAR					(VPG_VG11 +	VG11_CLEAR)
> --#define	VPC_VG11CLEARGLYPH				(VPG_VG11 +	VG11_CLEARGLYPH)
> --#define	VPC_VG11CLEARIMAGE				(VPG_VG11 +	VG11_CLEARIMAGE)
> --#define	VPC_VG11CLEARPATH				(VPG_VG11 +	VG11_CLEARPATH)
> --#define	VPC_VG11COLORMATRIX				(VPG_VG11 +	VG11_COLORMATRIX)
> --#define	VPC_VG11CONVOLVE				(VPG_VG11 +	VG11_CONVOLVE)
> --#define	VPC_VG11COPYIMAGE				(VPG_VG11 +	VG11_COPYIMAGE)
> --#define	VPC_VG11COPYMASK				(VPG_VG11 +	VG11_COPYMASK)
> --#define	VPC_VG11COPYPIXELS				(VPG_VG11 +	VG11_COPYPIXELS)
> --#define	VPC_VG11CREATEFONT				(VPG_VG11 +	VG11_CREATEFONT)
> --#define	VPC_VG11CREATEIMAGE				(VPG_VG11 +	VG11_CREATEIMAGE)
> --#define	VPC_VG11CREATEMASKLAYER			(VPG_VG11 +	VG11_CREATEMASKLAYER)
> --#define	VPC_VG11CREATEPAINT				(VPG_VG11 +	VG11_CREATEPAINT)
> --#define	VPC_VG11CREATEPATH				(VPG_VG11 +	VG11_CREATEPATH)
> --#define	VPC_VG11DESTROYFONT				(VPG_VG11 +	VG11_DESTROYFONT)
> --#define	VPC_VG11DESTROYIMAGE			(VPG_VG11 +	VG11_DESTROYIMAGE)
> --#define	VPC_VG11DESTROYMASKLAYER		(VPG_VG11 +	VG11_DESTROYMASKLAYER)
> --#define	VPC_VG11DESTROYPAINT			(VPG_VG11 +	VG11_DESTROYPAINT)
> --#define	VPC_VG11DESTROYPATH				(VPG_VG11 +	VG11_DESTROYPATH)
> --#define	VPC_VG11DRAWGLYPH				(VPG_VG11 +	VG11_DRAWGLYPH)
> --#define	VPC_VG11DRAWGLYPHS				(VPG_VG11 +	VG11_DRAWGLYPHS)
> --#define	VPC_VG11DRAWIMAGE				(VPG_VG11 +	VG11_DRAWIMAGE)
> --#define	VPC_VG11DRAWPATH				(VPG_VG11 +	VG11_DRAWPATH)
> --#define	VPC_VG11FILLMASKLAYER			(VPG_VG11 +	VG11_FILLMASKLAYER)
> --#define	VPC_VG11FINISH					(VPG_VG11 +	VG11_FINISH)
> --#define	VPC_VG11FLUSH					(VPG_VG11 +	VG11_FLUSH)
> --#define	VPC_VG11GAUSSIANBLUR			(VPG_VG11 +	VG11_GAUSSIANBLUR)
> --#define	VPC_VG11GETCOLOR				(VPG_VG11 +	VG11_GETCOLOR)
> --#define	VPC_VG11GETERROR				(VPG_VG11 +	VG11_GETERROR)
> --#define	VPC_VG11GETF					(VPG_VG11 +	VG11_GETF)
> --#define	VPC_VG11GETFV					(VPG_VG11 +	VG11_GETFV)
> --#define	VPC_VG11GETI					(VPG_VG11 +	VG11_GETI)
> --#define	VPC_VG11GETIMAGESUBDATA			(VPG_VG11 +	VG11_GETIMAGESUBDATA)
> --#define	VPC_VG11GETIV					(VPG_VG11 +	VG11_GETIV)
> --#define	VPC_VG11GETMATRIX				(VPG_VG11 +	VG11_GETMATRIX)
> --#define	VPC_VG11GETPAINT				(VPG_VG11 +	VG11_GETPAINT)
> --#define	VPC_VG11GETPARAMETERF			(VPG_VG11 +	VG11_GETPARAMETERF)
> --#define	VPC_VG11GETPARAMETERFV			(VPG_VG11 +	VG11_GETPARAMETERFV)
> --#define	VPC_VG11GETPARAMETERI			(VPG_VG11 +	VG11_GETPARAMETERI)
> --#define	VPC_VG11GETPARAMETERIV			(VPG_VG11 +	VG11_GETPARAMETERIV)
> --#define	VPC_VG11GETPARAMETERVECTORSIZE	(VPG_VG11 +	VG11_GETPARAMETERVECTORSIZE)
> --#define	VPC_VG11GETPARENT				(VPG_VG11 +	VG11_GETPARENT)
> --#define	VPC_VG11GETPATHCAPABILITIES		(VPG_VG11 +	VG11_GETPATHCAPABILITIES)
> --#define	VPC_VG11GETPIXELS				(VPG_VG11 +	VG11_GETPIXELS)
> --#define	VPC_VG11GETSTRING				(VPG_VG11 +	VG11_GETSTRING)
> --#define	VPC_VG11GETVECTORSIZE			(VPG_VG11 +	VG11_GETVECTORSIZE)
> --#define	VPC_VG11HARDWAREQUERY			(VPG_VG11 +	VG11_HARDWAREQUERY)
> --#define	VPC_VG11IMAGESUBDATA			(VPG_VG11 +	VG11_IMAGESUBDATA)
> --#define	VPC_VG11INTERPOLATEPATH			(VPG_VG11 +	VG11_INTERPOLATEPATH)
> --#define	VPC_VG11LOADIDENTITY			(VPG_VG11 +	VG11_LOADIDENTITY)
> --#define	VPC_VG11LOADMATRIX				(VPG_VG11 +	VG11_LOADMATRIX)
> --#define	VPC_VG11LOOKUP					(VPG_VG11 +	VG11_LOOKUP)
> --#define	VPC_VG11LOOKUPSINGLE			(VPG_VG11 +	VG11_LOOKUPSINGLE)
> --#define	VPC_VG11MASK					(VPG_VG11 +	VG11_MASK)
> --#define	VPC_VG11MODIFYPATHCOORDS		(VPG_VG11 +	VG11_MODIFYPATHCOORDS)
> --#define	VPC_VG11MULTMATRIX				(VPG_VG11 +	VG11_MULTMATRIX)
> --#define	VPC_VG11PAINTPATTERN			(VPG_VG11 +	VG11_PAINTPATTERN)
> --#define	VPC_VG11PATHBOUNDS				(VPG_VG11 +	VG11_PATHBOUNDS)
> --#define	VPC_VG11PATHLENGTH				(VPG_VG11 +	VG11_PATHLENGTH)
> --#define	VPC_VG11PATHTRANSFORMEDBOUNDS	(VPG_VG11 +	VG11_PATHTRANSFORMEDBOUNDS)
> --#define	VPC_VG11POINTALONGPATH			(VPG_VG11 +	VG11_POINTALONGPATH)
> --#define	VPC_VG11READPIXELS				(VPG_VG11 +	VG11_READPIXELS)
> --#define	VPC_VG11REMOVEPATHCAPABILITIES	(VPG_VG11 +	VG11_REMOVEPATHCAPABILITIES)
> --#define	VPC_VG11RENDERTOMASK			(VPG_VG11 +	VG11_RENDERTOMASK)
> --#define	VPC_VG11ROTATE					(VPG_VG11 +	VG11_ROTATE)
> --#define	VPC_VG11SCALE					(VPG_VG11 +	VG11_SCALE)
> --#define	VPC_VG11SEPARABLECONVOLVE		(VPG_VG11 +	VG11_SEPARABLECONVOLVE)
> --#define	VPC_VG11SETCOLOR				(VPG_VG11 +	VG11_SETCOLOR)
> --#define	VPC_VG11SETF					(VPG_VG11 +	VG11_SETF)
> --#define	VPC_VG11SETFV					(VPG_VG11 +	VG11_SETFV)
> --#define	VPC_VG11SETGLYPHTOIMAGE			(VPG_VG11 +	VG11_SETGLYPHTOIMAGE)
> --#define	VPC_VG11SETGLYPHTOPATH			(VPG_VG11 +	VG11_SETGLYPHTOPATH)
> --#define	VPC_VG11SETI					(VPG_VG11 +	VG11_SETI)
> --#define	VPC_VG11SETIV					(VPG_VG11 +	VG11_SETIV)
> --#define	VPC_VG11SETPAINT				(VPG_VG11 +	VG11_SETPAINT)
> --#define	VPC_VG11SETPARAMETERF			(VPG_VG11 +	VG11_SETPARAMETERF)
> --#define	VPC_VG11SETPARAMETERFV			(VPG_VG11 +	VG11_SETPARAMETERFV)
> --#define	VPC_VG11SETPARAMETERI			(VPG_VG11 +	VG11_SETPARAMETERI)
> --#define	VPC_VG11SETPARAMETERIV			(VPG_VG11 +	VG11_SETPARAMETERIV)
> --#define	VPC_VG11SETPIXELS				(VPG_VG11 +	VG11_SETPIXELS)
> --#define	VPC_VG11SHEAR					(VPG_VG11 +	VG11_SHEAR)
> --#define	VPC_VG11TRANSFORMPATH			(VPG_VG11 +	VG11_TRANSFORMPATH)
> --#define	VPC_VG11TRANSLATE				(VPG_VG11 +	VG11_TRANSLATE)
> --#define	VPC_VG11WRITEPIXELS				(VPG_VG11 +	VG11_WRITEPIXELS)
> -+#define    VPC_ES20CALLS            (VPG_ES20 +    ES20_CALLS)
> -+#define    VPC_ES20DRAWCALLS        (VPG_ES20 +    ES20_DRAWCALLS)
> -+#define    VPC_ES20STATECHANGECALLS (VPG_ES20 +    ES20_STATECHANGECALLS)
> -+#define    VPC_ES20POINTCOUNT       (VPG_ES20 +    ES20_POINTCOUNT)
> -+#define    VPC_ES20LINECOUNT        (VPG_ES20 +    ES20_LINECOUNT)
> -+#define    VPC_ES20TRIANGLECOUNT    (VPG_ES20 +    ES20_TRIANGLECOUNT)
> -+
> - /* OpenVG Statistics Counter IDs. */
> --#define	VPC_VG11CALLS					(VPG_VG11 +	VG11_CALLS)
> --#define	VPC_VG11DRAWCALLS				(VPG_VG11 +	VG11_DRAWCALLS)
> --#define	VPC_VG11STATECHANGECALLS		(VPG_VG11 +	VG11_STATECHANGECALLS)
> --#define	VPC_VG11FILLCOUNT				(VPG_VG11 +	VG11_FILLCOUNT)
> --#define	VPC_VG11STROKECOUNT				(VPG_VG11 +	VG11_STROKECOUNT)
> -+#define    VPC_VG11CALLS            (VPG_VG11 +    VG11_CALLS)
> -+#define    VPC_VG11DRAWCALLS        (VPG_VG11 +    VG11_DRAWCALLS)
> -+#define    VPC_VG11STATECHANGECALLS (VPG_VG11 +    VG11_STATECHANGECALLS)
> -+#define    VPC_VG11FILLCOUNT        (VPG_VG11 +    VG11_FILLCOUNT)
> -+#define    VPC_VG11STROKECOUNT      (VPG_VG11 +    VG11_STROKECOUNT)
> -
> - /* HAL Counters. */
> - #define VPC_HALVERTBUFNEWBYTEALLOC      (VPG_HAL + HAL_VERTBUFNEWBYTEALLOC)
> -@@ -1018,7 +248,7 @@ extern "C" {
> - #define VPC_GPUREAD64BYTE               (VPG_GPU + GPU_READ64BYTE)
> - #define VPC_GPUWRITE64BYTE              (VPG_GPU + GPU_WRITE64BYTE)
> - #define VPC_GPUTOTALCYCLES              (VPG_GPU + GPU_TOTALCYCLES)
> --#define VPC_GPUIDLECYCLES              (VPG_GPU + GPU_IDLECYCLES)
> -+#define VPC_GPUIDLECYCLES               (VPG_GPU + GPU_IDLECYCLES)
> -
> - /* HW: Shader Counters. */
> - #define VPC_VSINSTCOUNT                 (VPG_VS + VS_INSTCOUNT)
> -@@ -1026,9 +256,9 @@ extern "C" {
> - #define VPC_VSTEXLDINSTCOUNT            (VPG_VS + VS_TEXLDINSTCOUNT)
> - #define VPC_VSRENDEREDVERTCOUNT         (VPG_VS + VS_RENDEREDVERTCOUNT)
> - /* HW: PS Count. */
> --#define VPC_PSINSTCOUNT             	(VPG_PS + PS_INSTCOUNT)
> --#define VPC_PSBRANCHINSTCOUNT       	(VPG_PS + PS_BRANCHINSTCOUNT)
> --#define VPC_PSTEXLDINSTCOUNT        	(VPG_PS + PS_TEXLDINSTCOUNT)
> -+#define VPC_PSINSTCOUNT                 (VPG_PS + PS_INSTCOUNT)
> -+#define VPC_PSBRANCHINSTCOUNT           (VPG_PS + PS_BRANCHINSTCOUNT)
> -+#define VPC_PSTEXLDINSTCOUNT            (VPG_PS + PS_TEXLDINSTCOUNT)
> - #define VPC_PSRENDEREDPIXCOUNT          (VPG_PS + PS_RENDEREDPIXCOUNT)
> -
> -
> -@@ -1071,7 +301,7 @@ extern "C" {
> - #define VPC_PEDRAWNBYDEPTH              (VPG_PE + PE_DRAWNBYDEPTH)
> -
> - /* HW: MC Counters. */
> --#define VPC_MCREADREQ8BPIPE            	(VPG_MC + MC_READREQ8BPIPE)
> -+#define VPC_MCREADREQ8BPIPE             (VPG_MC + MC_READREQ8BPIPE)
> - #define VPC_MCREADREQ8BIP               (VPG_MC + MC_READREQ8BIP)
> - #define VPC_MCWRITEREQ8BPIPE            (VPG_MC + MC_WRITEREQ8BPIPE)
> -
> -@@ -1087,6 +317,7 @@ extern "C" {
> - #define VPC_PVSATTRIBCOUNT          (VPG_PVS + PVS_ATTRIBCOUNT)
> - #define VPC_PVSUNIFORMCOUNT         (VPG_PVS + PVS_UNIFORMCOUNT)
> - #define VPC_PVSFUNCTIONCOUNT        (VPG_PVS + PVS_FUNCTIONCOUNT)
> -+#define VPC_PVSSOURCE               (VPG_PVS + PVS_SOURCE)
> -
> - #define VPC_PPSINSTRCOUNT           (VPG_PPS + PPS_INSTRCOUNT)
> - #define VPC_PPSALUINSTRCOUNT        (VPG_PPS + PPS_ALUINSTRCOUNT)
> -@@ -1094,7 +325,9 @@ extern "C" {
> - #define VPC_PPSATTRIBCOUNT          (VPG_PPS + PPS_ATTRIBCOUNT)
> - #define VPC_PPSUNIFORMCOUNT         (VPG_PPS + PPS_UNIFORMCOUNT)
> - #define VPC_PPSFUNCTIONCOUNT        (VPG_PPS + PPS_FUNCTIONCOUNT)
> -+#define VPC_PPSSOURCE               (VPG_PPS + PPS_SOURCE)
> -
> -+#define VPC_PROGRAMHANDLE           (VPG_PROG + 1)
> -
> - #define VPG_ES20_DRAW_NO  (VPG_ES20_DRAW + 1)
> - #define VPG_ES11_DRAW_NO  (VPG_ES11_DRAW + 1)
> -@@ -1118,8 +351,8 @@ typedef struct _gcsPROFILER_COUNTERS
> -
> -     /* HW vairable counters. */
> -     gctUINT32       gpuCyclesCounter;
> --	gctUINT32       gpuTotalCyclesCounter;
> --	gctUINT32       gpuIdleCyclesCounter;
> -+    gctUINT32       gpuTotalCyclesCounter;
> -+    gctUINT32       gpuIdleCyclesCounter;
> -     gctUINT32       gpuTotalRead64BytesPerFrame;
> -     gctUINT32       gpuTotalWrite64BytesPerFrame;
> -
> -@@ -1158,7 +391,7 @@ typedef struct _gcsPROFILER_COUNTERS
> -     gctUINT32       ra_total_primitive_count;
> -     gctUINT32       ra_pipe_cache_miss_counter;
> -     gctUINT32       ra_prefetch_cache_miss_counter;
> --	gctUINT32       ra_eez_culled_counter;
> -+    gctUINT32       ra_eez_culled_counter;
> -
> -     /* TX */
> -     gctUINT32       tx_total_bilinear_requests;
> -@@ -1190,7 +423,7 @@ typedef struct _gcsPROFILER
> -     gctBOOL         enableHal;
> -     gctBOOL         enableHW;
> -     gctBOOL         enableSH;
> --	gctBOOL         isSyncMode;
> -+    gctBOOL         isSyncMode;
> -
> -     gctBOOL         useSocket;
> -     gctINT          sockFd;
> -@@ -1234,14 +467,17 @@ typedef struct _gcsPROFILER
> -     gctUINT32       redundantStateChangeCalls;
> - #endif
> -
> --	gctUINT32       prevVSInstCount;
> --	gctUINT32       prevVSBranchInstCount;
> --	gctUINT32       prevVSTexInstCount;
> --	gctUINT32       prevVSVertexCount;
> --	gctUINT32       prevPSInstCount;
> --	gctUINT32       prevPSBranchInstCount;
> --	gctUINT32       prevPSTexInstCount;
> --	gctUINT32       prevPSPixelCount;
> -+    gctUINT32       prevVSInstCount;
> -+    gctUINT32       prevVSBranchInstCount;
> -+    gctUINT32       prevVSTexInstCount;
> -+    gctUINT32       prevVSVertexCount;
> -+    gctUINT32       prevPSInstCount;
> -+    gctUINT32       prevPSBranchInstCount;
> -+    gctUINT32       prevPSTexInstCount;
> -+    gctUINT32       prevPSPixelCount;
> -+
> -+    char*           psSource;
> -+    char*           vsSource;
> -
> - }
> - gcsPROFILER;
> -@@ -1315,6 +551,18 @@ gcoPROFILER_Count(
> - 	IN gctINT Value
> - 	);
> -
> -+gceSTATUS
> -+gcoPROFILER_ShaderSourceFS(
> -+    IN gcoHAL Hal,
> -+    IN char* source
> -+    );
> -+
> -+gceSTATUS
> -+gcoPROFILER_ShaderSourceVS(
> -+    IN gcoHAL Hal,
> -+    IN char* source
> -+    );
> -+
> - /* Profile input vertex shader. */
> - gceSTATUS
> - gcoPROFILER_ShaderVS(
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
> -index bc4171e..6e4d830 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
> -@@ -568,6 +568,23 @@ gco2D_MonoBlit(
> - 	IN gceSURF_FORMAT DestFormat
> - 	);
> -
> -+gceSTATUS
> -+gco2D_MonoBlitEx(
> -+    IN gco2D        Engine,
> -+    IN gctPOINTER   StreamBits,
> -+    IN gctINT32     StreamStride,
> -+    IN gctINT32     StreamWidth,
> -+    IN gctINT32     StreamHeight,
> -+    IN gctINT32     StreamX,
> -+    IN gctINT32     StreamY,
> -+    IN gctUINT32    FgColor,
> -+    IN gctUINT32    BgColor,
> -+    IN gcsRECT_PTR  SrcRect,
> -+    IN gcsRECT_PTR  DstRect,
> -+    IN gctUINT8     FgRop,
> -+    IN gctUINT8     BgRop
> -+    );
> -+
> - /* Set kernel size. */
> - gceSTATUS
> - gco2D_SetKernelSize(
> -@@ -942,6 +959,15 @@ gco2D_SetSourceTileStatus(
> -     );
> -
> - gceSTATUS
> -+gco2D_SetTargetTileStatus(
> -+    IN gco2D Engine,
> -+    IN gce2D_TILE_STATUS_CONFIG TileStatusConfig,
> -+    IN gceSURF_FORMAT CompressedFormat,
> -+    IN gctUINT32 ClearValue,
> -+    IN gctUINT32 GpuAddress
> -+    );
> -+
> -+gceSTATUS
> - gco2D_QueryU32(
> -     IN gco2D Engine,
> -     IN gce2D_QUERY Item,
> -@@ -955,6 +981,28 @@ gco2D_SetStateU32(
> -     IN gctUINT32 Value
> -     );
> -
> -+gceSTATUS
> -+gco2D_SetStateArrayI32(
> -+    IN gco2D Engine,
> -+    IN gce2D_STATE State,
> -+    IN gctINT32_PTR Array,
> -+    IN gctINT32 ArraySize
> -+    );
> -+
> -+gceSTATUS
> -+gco2D_SetStateArrayU32(
> -+    IN gco2D Engine,
> -+    IN gce2D_STATE State,
> -+    IN gctUINT32_PTR Array,
> -+    IN gctINT32 ArraySize
> -+    );
> -+
> -+gceSTATUS
> -+gco2D_SetTargetRect(
> -+    IN gco2D Engine,
> -+    IN gcsRECT_PTR Rect
> -+    );
> -+
> - #ifdef __cplusplus
> - }
> - #endif
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
> -index 5c0877d..14801aa 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
> -@@ -128,6 +128,7 @@ typedef int                     gctBOOL;
> - typedef gctBOOL *               gctBOOL_PTR;
> -
> - typedef int                     gctINT;
> -+typedef long                    gctLONG;
> - typedef signed char             gctINT8;
> - typedef signed short            gctINT16;
> - typedef signed int              gctINT32;
> -@@ -171,6 +172,7 @@ typedef void *                  gctFILE;
> - typedef void *                  gctSIGNAL;
> - typedef void *                  gctWINDOW;
> - typedef void *                  gctIMAGE;
> -+typedef void *                  gctSYNC_POINT;
> -
> - typedef void *					gctSEMAPHORE;
> -
> -@@ -941,12 +943,19 @@ typedef struct _gcsHAL_FRAME_INFO
> -     OUT gctUINT                 readRequests[8];
> -     OUT gctUINT                 writeRequests[8];
> -
> -+    /* FE counters. */
> -+    OUT gctUINT                 drawCount;
> -+    OUT gctUINT                 vertexOutCount;
> -+    OUT gctUINT                 vertexMissCount;
> -+
> -     /* 3D counters. */
> -     OUT gctUINT                 vertexCount;
> -     OUT gctUINT                 primitiveCount;
> -     OUT gctUINT                 rejectedPrimitives;
> -     OUT gctUINT                 culledPrimitives;
> -     OUT gctUINT                 clippedPrimitives;
> -+    OUT gctUINT                 droppedPrimitives;
> -+    OUT gctUINT                 frustumClippedPrimitives;
> -     OUT gctUINT                 outPrimitives;
> -     OUT gctUINT                 inPrimitives;
> -     OUT gctUINT                 culledQuadCount;
> -@@ -964,18 +973,86 @@ typedef struct _gcsHAL_FRAME_INFO
> -     OUT gctUINT                 shaderCycles;
> -     OUT gctUINT                 vsInstructionCount;
> -     OUT gctUINT                 vsTextureCount;
> -+    OUT gctUINT                 vsBranchCount;
> -+    OUT gctUINT                 vsVertices;
> -     OUT gctUINT                 psInstructionCount;
> -     OUT gctUINT                 psTextureCount;
> -+    OUT gctUINT                 psBranchCount;
> -+    OUT gctUINT                 psPixels;
> -
> -     /* Texture counters. */
> -     OUT gctUINT                 bilinearRequests;
> -     OUT gctUINT                 trilinearRequests;
> --    OUT gctUINT                 txBytes8;
> -+    OUT gctUINT                 txBytes8[2];
> -     OUT gctUINT                 txHitCount;
> -     OUT gctUINT                 txMissCount;
> - }
> - gcsHAL_FRAME_INFO;
> -
> -+typedef enum _gcePATCH_ID
> -+{
> -+    gcePATCH_UNKNOWN = 0xFFFFFFFF,
> -+
> -+    /* Benchmark list*/
> -+    gcePATCH_GLB11 = 0x0,
> -+    gcePATCH_GLB21,
> -+    gcePATCH_GLB25,
> -+    gcePATCH_GLB27,
> -+
> -+    gcePATCH_BM21,
> -+    gcePATCH_MM,
> -+    gcePATCH_MM06,
> -+    gcePATCH_MM07,
> -+    gcePATCH_QUADRANT,
> -+    gcePATCH_ANTUTU,
> -+    gcePATCH_SMARTBENCH,
> -+    gcePATCH_JPCT,
> -+    gcePATCH_NENAMARK,
> -+    gcePATCH_NENAMARK2,
> -+    gcePATCH_NEOCORE,
> -+    gcePATCH_GLB,
> -+    gcePATCH_GB,
> -+    gcePATCH_RTESTVA,
> -+    gcePATCH_BMX,
> -+    gcePATCH_BMGUI,
> -+
> -+    /* Game list */
> -+    gcePATCH_NBA2013,
> -+    gcePATCH_BARDTALE,
> -+    gcePATCH_BUSPARKING3D,
> -+    gcePATCH_FISHBOODLE,
> -+    gcePATCH_SUBWAYSURFER,
> -+    gcePATCH_HIGHWAYDRIVER,
> -+    gcePATCH_PREMIUM,
> -+    gcePATCH_RACEILLEGAL,
> -+    gcePATCH_BLABLA,
> -+    gcePATCH_MEGARUN,
> -+    gcePATCH_GALAXYONFIRE2,
> -+    gcePATCH_GLOFTR3HM,
> -+    gcePATCH_GLOFTSXHM,
> -+    gcePATCH_GLOFTF3HM,
> -+    gcePATCH_GLOFTGANG,
> -+    gcePATCH_XRUNNER,
> -+    gcePATCH_WP,
> -+    gcePATCH_DEVIL,
> -+    gcePATCH_HOLYARCH,
> -+    gcePATCH_MUSE,
> -+    gcePATCH_SG,
> -+    gcePATCH_SIEGECRAFT,
> -+    gcePATCH_CARCHALLENGE,
> -+    gcePATCH_HEROESCALL,
> -+    gcePATCH_MONOPOLY,
> -+    gcePATCH_CTGL20,
> -+    gcePATCH_FIREFOX,
> -+    gcePATCH_CHORME,
> -+    gcePATCH_DUOKANTV,
> -+    gcePATCH_TESTAPP,
> -+
> -+    /* Count enum*/
> -+    gcePATCH_COUNT,
> -+}
> -+gcePATCH_ID;
> -+
> - #if gcdLINK_QUEUE_SIZE
> - typedef struct _gckLINKDATA * gckLINKDATA;
> - struct _gckLINKDATA
> -diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
> -index 03cb4d6..2eab666 100644
> ---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
> -+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
> -@@ -28,7 +28,7 @@
> -
> - #define gcvVERSION_PATCH        9
> -
> --#define gcvVERSION_BUILD     6622
> -+#define gcvVERSION_BUILD     9754
> -
> - #define gcvVERSION_DATE      __DATE__
> -
> -diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
> -index 4d48bd5..b029428 100644
> ---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
> -+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
> -@@ -25,7 +25,9 @@
> - #include <linux/mm.h>
> - #include <linux/mman.h>
> - #include <linux/slab.h>
> -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
> - #include <mach/hardware.h>
> -+#endif
> - #include <linux/pm_runtime.h>
> -
> - #define _GC_OBJ_ZONE    gcvZONE_DEVICE
> -@@ -305,6 +307,7 @@ gckGALDEVICE_Construct(
> -     IN gctUINT LogFileSize,
> -     IN struct device *pdev,
> -     IN gctINT PowerManagement,
> -+    IN gctINT GpuProfiler,
> -     OUT gckGALDEVICE *Device
> -     )
> - {
> -@@ -369,6 +372,10 @@ gckGALDEVICE_Construct(
> - #if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
> -     /*get gpu regulator*/
> -     device->gpu_regulator = regulator_get(pdev, "cpu_vddgpu");
> -+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+    device->gpu_regulator = regulator_get(pdev, "vddpu");
> -+#endif
> -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -     if (IS_ERR(device->gpu_regulator)) {
> - 	gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
> - 		"%s(%d): Failed to get gpu regulator  %s/%s \n",
> -@@ -541,6 +548,10 @@ gckGALDEVICE_Construct(
> -             device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
> -             ));
> -
> -+        gcmkONERROR(gckHARDWARE_SetGpuProfiler(
> -+            device->kernels[gcvCORE_MAJOR]->hardware, GpuProfiler
> -+            ));
> -+
> - #if COMMAND_PROCESSOR_VERSION == 1
> -         /* Start the command queue. */
> -         gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_MAJOR]->command));
> -@@ -599,6 +610,7 @@ gckGALDEVICE_Construct(
> -             device->kernels[gcvCORE_2D]->hardware, PowerManagement
> -             ));
> -
> -+
> - #if COMMAND_PROCESSOR_VERSION == 1
> -         /* Start the command queue. */
> -         gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_2D]->command));
> -@@ -635,6 +647,7 @@ gckGALDEVICE_Construct(
> -             device->kernels[gcvCORE_VG]->vg->hardware,
> -             PowerManagement
> -             ));
> -+
> - #endif
> -     }
> -     else
> -@@ -849,6 +862,7 @@ gckGALDEVICE_Construct(
> -             }
> -             else
> -             {
> -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
> -                 mem_region = request_mem_region(
> -                     ContiguousBase, ContiguousSize, "galcore managed memory"
> -                     );
> -@@ -864,6 +878,7 @@ gckGALDEVICE_Construct(
> -
> -                     gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
> -                 }
> -+#endif
> -
> -                 device->requestedContiguousBase  = ContiguousBase;
> -                 device->requestedContiguousSize  = ContiguousSize;
> -@@ -1107,7 +1122,7 @@ gckGALDEVICE_Destroy(
> -             pm_runtime_disable(Device->pmdev);
> - #endif
> -
> --#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
> -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -         if (Device->gpu_regulator) {
> -            regulator_put(Device->gpu_regulator);
> -            Device->gpu_regulator = NULL;
> -diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
> -index dde4f03..c51432f 100644
> ---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
> -+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
> -@@ -26,6 +26,15 @@
> - ******************************* gckGALDEVICE Structure *******************************
> - \******************************************************************************/
> -
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+struct contiguous_mem_pool {
> -+	struct dma_attrs attrs;
> -+	dma_addr_t phys;
> -+	void *virt;
> -+	size_t size;
> -+};
> -+#endif
> -+
> - typedef struct _gckGALDEVICE
> - {
> -     /* Objects. */
> -@@ -91,12 +100,16 @@ typedef struct _gckGALDEVICE
> -     struct clk         *clk_2d_axi;
> -     struct clk         *clk_vg_axi;
> -
> --#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
> -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -     /*Power management.*/
> -     struct regulator      *gpu_regulator;
> - #endif
> - 	/*Run time pm*/
> - 	struct device		*pmdev;
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+	struct contiguous_mem_pool *pool;
> -+	struct reset_control *rstc[gcdMAX_GPU_COUNT];
> -+#endif
> - }
> - * gckGALDEVICE;
> -
> -@@ -171,6 +184,7 @@ gceSTATUS gckGALDEVICE_Construct(
> -     IN gctUINT LogFileSize,
> -     IN struct device *pdev,
> -     IN gctINT PowerManagement,
> -+    IN gctINT GpuProfiler,
> -     OUT gckGALDEVICE *Device
> -     );
> -
> -diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
> -index bacd531..88a7e4e6 100644
> ---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
> -+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
> -@@ -1,7 +1,7 @@
> - /****************************************************************************
> - *
> - *    Copyright (C) 2005 - 2013 by Vivante Corp.
> --*    Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
> -+*    Copyright (C) 2011-2013 Freescale Semiconductor, Inc.
> - *
> - *    This program is free software; you can redistribute it and/or modify
> - *    it under the terms of the GNU General Public License as published by
> -@@ -69,14 +69,26 @@ task_notify_func(struct notifier_block *self, unsigned long val, void *data)
> - #include <mach/viv_gpu.h>
> - #else
> - #include <linux/pm_runtime.h>
> -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
> - #include <mach/busfreq.h>
> -+#else
> -+#include <linux/reset.h>
> -+#endif
> - #endif
> - /* Zone used for header/footer. */
> - #define _GC_OBJ_ZONE    gcvZONE_DRIVER
> -
> - #if gcdENABLE_FSCALE_VAL_ADJUST
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+#include <linux/device_cooling.h>
> -+#define REG_THERMAL_NOTIFIER(a) register_devfreq_cooling_notifier(a);
> -+#define UNREG_THERMAL_NOTIFIER(a) unregister_devfreq_cooling_notifier(a);
> -+#else
> - extern int register_thermal_notifier(struct notifier_block *nb);
> - extern int unregister_thermal_notifier(struct notifier_block *nb);
> -+#define REG_THERMAL_NOTIFIER(a) register_thermal_notifier(a);
> -+#define UNREG_THERMAL_NOTIFIER(a) unregister_thermal_notifier(a);
> -+#endif
> - #endif
> -
> - MODULE_DESCRIPTION("Vivante Graphics Driver");
> -@@ -116,7 +128,11 @@ module_param(registerMemBaseVG, ulong, 0644);
> - static ulong registerMemSizeVG = 2 << 10;
> - module_param(registerMemSizeVG, ulong, 0644);
> -
> -+#if gcdENABLE_FSCALE_VAL_ADJUST
> -+static ulong contiguousSize = 128 << 20;
> -+#else
> - static ulong contiguousSize = 4 << 20;
> -+#endif
> - module_param(contiguousSize, ulong, 0644);
> -
> - static ulong contiguousBase = 0;
> -@@ -134,6 +150,9 @@ module_param(compression, int, 0644);
> - static int powerManagement = 1;
> - module_param(powerManagement, int, 0644);
> -
> -+static int gpuProfiler = 0;
> -+module_param(gpuProfiler, int, 0644);
> -+
> - static int signal = 48;
> - module_param(signal, int, 0644);
> -
> -@@ -786,7 +805,9 @@ static int drv_init(struct device *pdev)
> -
> -     printk(KERN_INFO "Galcore version %d.%d.%d.%d\n",
> -         gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD);
> --
> -+    /* when enable gpu profiler, we need to turn off gpu powerMangement */
> -+    if(gpuProfiler)
> -+        powerManagement = 0;
> -     if (showArgs)
> -     {
> -         printk("galcore options:\n");
> -@@ -818,6 +839,7 @@ static int drv_init(struct device *pdev)
> -         printk("  physSize          = 0x%08lX\n", physSize);
> -         printk("  logFileSize       = %d KB \n",  logFileSize);
> -         printk("  powerManagement   = %d\n",      powerManagement);
> -+        printk("  gpuProfiler   = %d\n",      gpuProfiler);
> - #if ENABLE_GPU_CLOCK_BY_DRIVER
> -         printk("  coreClock       = %lu\n",     coreClock);
> - #endif
> -@@ -841,9 +863,14 @@ static int drv_init(struct device *pdev)
> -         logFileSize,
> -         pdev,
> -         powerManagement,
> -+        gpuProfiler,
> -         &device
> -         ));
> -
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+	device->pool = dev_get_drvdata(pdev);
> -+#endif
> -+
> -     /* Start the GAL device. */
> -     gcmkONERROR(gckGALDEVICE_Start(device));
> -
> -@@ -1028,11 +1055,18 @@ static struct notifier_block thermal_hot_pm_notifier = {
> -
> -
> -
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
> -+static int gpu_probe(struct platform_device *pdev)
> -+#else
> - static int __devinit gpu_probe(struct platform_device *pdev)
> -+#endif
> - {
> -     int ret = -ENODEV;
> -     struct resource* res;
> --#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+	struct contiguous_mem_pool *pool;
> -+	struct reset_control *rstc;
> -+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
> - 	struct device_node *dn =pdev->dev.of_node;
> - 	const u32 *prop;
> - #else
> -@@ -1077,7 +1111,22 @@ static int __devinit gpu_probe(struct platform_device *pdev)
> -         registerMemSizeVG = res->end - res->start + 1;
> -     }
> -
> --#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+	pool = devm_kzalloc(&pdev->dev, sizeof(*pool), GFP_KERNEL);
> -+	if (!pool)
> -+		return -ENOMEM;
> -+	pool->size = contiguousSize;
> -+	init_dma_attrs(&pool->attrs);
> -+	dma_set_attr(DMA_ATTR_WRITE_COMBINE, &pool->attrs);
> -+	pool->virt = dma_alloc_attrs(&pdev->dev, pool->size, &pool->phys,
> -+				     GFP_KERNEL, &pool->attrs);
> -+	if (!pool->virt) {
> -+		dev_err(&pdev->dev, "Failed to allocate contiguous memory\n");
> -+		return -ENOMEM;
> -+	}
> -+	contiguousBase = pool->phys;
> -+	dev_set_drvdata(&pdev->dev, pool);
> -+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
> - 	prop = of_get_property(dn, "contiguousbase", NULL);
> - 	if(prop)
> - 		contiguousBase = *prop;
> -@@ -1095,30 +1144,56 @@ static int __devinit gpu_probe(struct platform_device *pdev)
> -
> -     if (!ret)
> -     {
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+	rstc = devm_reset_control_get(&pdev->dev, "gpu3d");
> -+	galDevice->rstc[gcvCORE_MAJOR] = IS_ERR(rstc) ? NULL : rstc;
> -+
> -+	rstc = devm_reset_control_get(&pdev->dev, "gpu2d");
> -+	galDevice->rstc[gcvCORE_2D] = IS_ERR(rstc) ? NULL : rstc;
> -+
> -+	rstc = devm_reset_control_get(&pdev->dev, "gpuvg");
> -+	galDevice->rstc[gcvCORE_VG] = IS_ERR(rstc) ? NULL : rstc;
> -+#endif
> -         platform_set_drvdata(pdev, galDevice);
> -
> - #if gcdENABLE_FSCALE_VAL_ADJUST
> --        if(galDevice->kernels[gcvCORE_MAJOR])
> --            register_thermal_notifier(&thermal_hot_pm_notifier);
> -+        if (galDevice->kernels[gcvCORE_MAJOR])
> -+            REG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
> - #endif
> -         gcmkFOOTER_NO();
> -         return ret;
> -     }
> - #if gcdENABLE_FSCALE_VAL_ADJUST
> --    unregister_thermal_notifier(&thermal_hot_pm_notifier);
> -+    UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
> -+#endif
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+	dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
> -+		       &pool->attrs);
> - #endif
> -     gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret);
> -     return ret;
> - }
> -
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
> -+static int gpu_remove(struct platform_device *pdev)
> -+#else
> - static int __devexit gpu_remove(struct platform_device *pdev)
> -+#endif
> - {
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+	gckGALDEVICE device = platform_get_drvdata(pdev);
> -+	struct contiguous_mem_pool *pool = device->pool;
> -+#endif
> -     gcmkHEADER();
> - #if gcdENABLE_FSCALE_VAL_ADJUST
> -     if(galDevice->kernels[gcvCORE_MAJOR])
> --        unregister_thermal_notifier(&thermal_hot_pm_notifier);
> -+        UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
> - #endif
> -     drv_exit();
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+	dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
> -+		       &pool->attrs);
> -+#endif
> -     gcmkFOOTER_NO();
> -     return 0;
> - }
> -@@ -1254,13 +1329,17 @@ MODULE_DEVICE_TABLE(of, mxs_gpu_dt_ids);
> - #ifdef CONFIG_PM
> - static int gpu_runtime_suspend(struct device *dev)
> - {
> -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
> - 	release_bus_freq(BUS_FREQ_HIGH);
> -+#endif
> - 	return 0;
> - }
> -
> - static int gpu_runtime_resume(struct device *dev)
> - {
> -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
> - 	request_bus_freq(BUS_FREQ_HIGH);
> -+#endif
> - 	return 0;
> - }
> -
> -@@ -1284,7 +1363,11 @@ static const struct dev_pm_ops gpu_pm_ops = {
> -
> - static struct platform_driver gpu_driver = {
> -     .probe      = gpu_probe,
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
> -+    .remove     = gpu_remove,
> -+#else
> -     .remove     = __devexit_p(gpu_remove),
> -+#endif
> -
> -     .suspend    = gpu_suspend,
> -     .resume     = gpu_resume,
> -diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
> -index e7edc39..331c73f 100644
> ---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
> -+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
> -@@ -30,19 +30,30 @@
> - #include <linux/dma-mapping.h>
> - #include <linux/slab.h>
> - #include <linux/idr.h>
> -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
> - #include <mach/hardware.h>
> -+#endif
> - #include <linux/workqueue.h>
> - #include <linux/idr.h>
> - #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,23)
> - #include <linux/math64.h>
> - #endif
> --#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+#include <linux/reset.h>
> -+static inline void imx_gpc_power_up_pu(bool flag) {}
> -+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
> - #include <mach/common.h>
> - #endif
> - #include <linux/delay.h>
> - #include <linux/pm_runtime.h>
> -
> -
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+#include <linux/file.h>
> -+#include "gc_hal_kernel_sync.h"
> -+#endif
> -+
> -+
> - #define _GC_OBJ_ZONE    gcvZONE_OS
> -
> - /*******************************************************************************
> -@@ -148,6 +159,7 @@ typedef struct _gcsINTEGER_DB
> - {
> -     struct idr                  idr;
> -     spinlock_t                  lock;
> -+    gctINT                      curr;
> - }
> - gcsINTEGER_DB;
> -
> -@@ -180,6 +192,14 @@ struct _gckOS
> -     /* signal id database. */
> -     gcsINTEGER_DB               signalDB;
> -
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+    /* Lock. */
> -+    gctPOINTER                  syncPointMutex;
> -+
> -+    /* sync point id database. */
> -+    gcsINTEGER_DB               syncPointDB;
> -+#endif
> -+
> -     gcsUSER_MAPPING_PTR         userMap;
> -     gctPOINTER                  debugLock;
> -
> -@@ -215,6 +235,25 @@ typedef struct _gcsSIGNAL
> - }
> - gcsSIGNAL;
> -
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+typedef struct _gcsSYNC_POINT * gcsSYNC_POINT_PTR;
> -+typedef struct _gcsSYNC_POINT
> -+{
> -+    /* The reference counter. */
> -+    atomic_t ref;
> -+
> -+    /* State. */
> -+    atomic_t state;
> -+
> -+    /* timeline. */
> -+    struct sync_timeline * timeline;
> -+
> -+    /* ID. */
> -+    gctUINT32 id;
> -+}
> -+gcsSYNC_POINT;
> -+#endif
> -+
> - typedef struct _gcsPageInfo * gcsPageInfo_PTR;
> - typedef struct _gcsPageInfo
> - {
> -@@ -767,7 +806,32 @@ _AllocateIntegerId(
> -     )
> - {
> -     int result;
> -+    gctINT next;
> -+
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
> -+    idr_preload(GFP_KERNEL | gcdNOWARN);
> -
> -+    spin_lock(&Database->lock);
> -+
> -+    next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
> -+    result = idr_alloc(&Database->idr, KernelPointer, next, 0, GFP_ATOMIC);
> -+
> -+    if (!result)
> -+    {
> -+        Database->curr = *Id;
> -+    }
> -+
> -+    spin_unlock(&Database->lock);
> -+
> -+    idr_preload_end();
> -+
> -+    if (result < 0)
> -+    {
> -+        return gcvSTATUS_OUT_OF_RESOURCES;
> -+    }
> -+
> -+    *Id = result;
> -+#else
> - again:
> -     if (idr_pre_get(&Database->idr, GFP_KERNEL | gcdNOWARN) == 0)
> -     {
> -@@ -776,8 +840,15 @@ again:
> -
> -     spin_lock(&Database->lock);
> -
> --    /* Try to get a id greater than 0. */
> --    result = idr_get_new_above(&Database->idr, KernelPointer, 1, Id);
> -+    next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
> -+
> -+    /* Try to get a id greater than current id. */
> -+    result = idr_get_new_above(&Database->idr, KernelPointer, next, Id);
> -+
> -+    if (!result)
> -+    {
> -+        Database->curr = *Id;
> -+    }
> -
> -     spin_unlock(&Database->lock);
> -
> -@@ -790,6 +861,7 @@ again:
> -     {
> -         return gcvSTATUS_OUT_OF_RESOURCES;
> -     }
> -+#endif
> -
> -     return gcvSTATUS_OK;
> - }
> -@@ -1008,6 +1080,21 @@ gckOS_Construct(
> -     /* Initialize signal id database. */
> -     idr_init(&os->signalDB.idr);
> -
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+    /*
> -+     * Initialize the sync point manager.
> -+     */
> -+
> -+    /* Initialize mutex. */
> -+    gcmkONERROR(gckOS_CreateMutex(os, &os->syncPointMutex));
> -+
> -+    /* Initialize sync point id database lock. */
> -+    spin_lock_init(&os->syncPointDB.lock);
> -+
> -+    /* Initialize sync point id database. */
> -+    idr_init(&os->syncPointDB.idr);
> -+#endif
> -+
> - #if gcdUSE_NON_PAGED_MEMORY_CACHE
> -     os->cacheSize = 0;
> -     os->cacheHead = gcvNULL;
> -@@ -1031,6 +1118,15 @@ gckOS_Construct(
> -     return gcvSTATUS_OK;
> -
> - OnError:
> -+
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+    if (os->syncPointMutex != gcvNULL)
> -+    {
> -+        gcmkVERIFY_OK(
> -+            gckOS_DeleteMutex(os, os->syncPointMutex));
> -+    }
> -+#endif
> -+
> -     if (os->signalMutex != gcvNULL)
> -     {
> -         gcmkVERIFY_OK(
> -@@ -1104,6 +1200,15 @@ gckOS_Destroy(
> -     _FreeAllNonPagedMemoryCache(Os);
> - #endif
> -
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+    /*
> -+     * Destroy the sync point manager.
> -+     */
> -+
> -+    /* Destroy the mutex. */
> -+    gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Os->syncPointMutex));
> -+#endif
> -+
> -     /*
> -      * Destroy the signal manager.
> -      */
> -@@ -1961,12 +2066,6 @@ gckOS_AllocateNonPagedMemory(
> -         gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
> -     }
> -
> --    if ((Os->device->baseAddress & 0x80000000) != (mdl->dmaHandle & 0x80000000))
> --    {
> --        mdl->dmaHandle = (mdl->dmaHandle & ~0x80000000)
> --                       | (Os->device->baseAddress & 0x80000000);
> --    }
> --
> -     mdl->addr = addr;
> -
> -     /* Return allocated memory. */
> -@@ -2307,6 +2406,7 @@ gckOS_ReadRegisterEx(
> -
> -     /* Verify the arguments. */
> -     gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
> -+    gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
> -     gcmkVERIFY_ARGUMENT(Data != gcvNULL);
> -
> -     *Data = readl((gctUINT8 *)Os->device->registerBases[Core] + Address);
> -@@ -2357,6 +2457,8 @@ gckOS_WriteRegisterEx(
> - {
> -     gcmkHEADER_ARG("Os=0x%X Core=%d Address=0x%X Data=0x%08x", Os, Core, Address, Data);
> -
> -+    gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
> -+
> -     writel(Data, (gctUINT8 *)Os->device->registerBases[Core] + Address);
> -
> -     /* Success. */
> -@@ -2799,16 +2901,25 @@ gckOS_MapPhysical(
> -
> -     if (mdl == gcvNULL)
> -     {
> -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+	struct contiguous_mem_pool *pool = Os->device->pool;
> -+
> -+	if (Physical >= pool->phys && Physical < pool->phys + pool->size)
> -+		logical = (gctPOINTER)(Physical - pool->phys + pool->virt);
> -+	else
> -+		logical = gcvNULL;
> -+#else
> -         /* Map memory as cached memory. */
> -         request_mem_region(physical, Bytes, "MapRegion");
> -         logical = (gctPOINTER) ioremap_nocache(physical, Bytes);
> -+#endif
> -
> -         if (logical == gcvNULL)
> -         {
> -             gcmkTRACE_ZONE(
> -                 gcvLEVEL_INFO, gcvZONE_OS,
> --                "%s(%d): Failed to ioremap",
> --                __FUNCTION__, __LINE__
> -+                "%s(%d): Failed to map physical address 0x%08x",
> -+                __FUNCTION__, __LINE__, Physical
> -                 );
> -
> -             MEMORY_UNLOCK(Os);
> -@@ -3621,7 +3732,7 @@ gckOS_Delay(
> -     if (Delay > 0)
> -     {
> - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
> --        ktime_t delay = ktime_set(0, Delay * NSEC_PER_MSEC);
> -+        ktime_t delay = ktime_set(Delay/1000, (Delay%1000) * NSEC_PER_MSEC);
> -         __set_current_state(TASK_UNINTERRUPTIBLE);
> -         schedule_hrtimeout(&delay, HRTIMER_MODE_REL);
> - #else
> -@@ -3881,8 +3992,13 @@ gckOS_AllocatePagedMemoryEx(
> -
> -     if (Contiguous)
> -     {
> --        /* Get contiguous pages, and suppress warning (stack dump) from kernel when
> --           we run out of memory. */
> -+        gctUINT32 order = get_order(bytes);
> -+
> -+        if (order >= MAX_ORDER)
> -+        {
> -+            gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
> -+        }
> -+
> - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
> -         addr =
> -             alloc_pages_exact(numPages * PAGE_SIZE, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY);
> -@@ -3894,12 +4010,12 @@ gckOS_AllocatePagedMemoryEx(
> -         mdl->exact = gcvTRUE;
> - #else
> -         mdl->u.contiguousPages =
> --            alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, GetOrder(numPages));
> -+            alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, order);
> - #endif
> -         if (mdl->u.contiguousPages == gcvNULL)
> -         {
> -             mdl->u.contiguousPages =
> --                alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, GetOrder(numPages));
> -+                alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, order);
> -
> - #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
> -             mdl->exact = gcvFALSE;
> -@@ -4239,13 +4355,13 @@ gckOS_LockPages(
> -         }
> -
> -         mdlMap->vma->vm_flags |= gcdVM_FLAGS;
> --#if !gcdPAGED_MEMORY_CACHEABLE
> -+
> -         if (Cacheable == gcvFALSE)
> -         {
> -             /* Make this mapping non-cached. */
> -             mdlMap->vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
> -         }
> --#endif
> -+
> -         addr = mdl->addr;
> -
> -         /* Now map all the vmalloc pages to this user address. */
> -@@ -5336,6 +5452,7 @@ OnError:
> -         {
> -             /* Get the user pages. */
> -             down_read(&current->mm->mmap_sem);
> -+
> -             result = get_user_pages(current,
> -                     current->mm,
> -                     memory & PAGE_MASK,
> -@@ -5345,105 +5462,127 @@ OnError:
> -                     pages,
> -                     gcvNULL
> -                     );
> -+
> -             up_read(&current->mm->mmap_sem);
> -
> -             if (result <=0 || result < pageCount)
> -             {
> -                 struct vm_area_struct *vma;
> -
> --                /* Free the page table. */
> --                if (pages != gcvNULL)
> -+                /* Release the pages if any. */
> -+                if (result > 0)
> -                 {
> --                    /* Release the pages if any. */
> --                    if (result > 0)
> -+                    for (i = 0; i < result; i++)
> -                     {
> --                        for (i = 0; i < result; i++)
> -+                        if (pages[i] == gcvNULL)
> -                         {
> --                            if (pages[i] == gcvNULL)
> --                            {
> --                                break;
> --                            }
> --
> --                            page_cache_release(pages[i]);
> -+                            break;
> -                         }
> -+
> -+                        page_cache_release(pages[i]);
> -+                        pages[i] = gcvNULL;
> -                     }
> -
> --                    kfree(pages);
> --                    pages = gcvNULL;
> -+                    result = 0;
> -                 }
> -
> -                 vma = find_vma(current->mm, memory);
> -
> --                if (vma && (vma->vm_flags & VM_PFNMAP) )
> -+                if (vma && (vma->vm_flags & VM_PFNMAP))
> -                 {
> -                     pte_t       * pte;
> -                     spinlock_t  * ptl;
> --                    unsigned long pfn;
> -+                    gctUINTPTR_T logical = memory;
> -
> --                    pgd_t * pgd = pgd_offset(current->mm, memory);
> --                    pud_t * pud = pud_offset(pgd, memory);
> --                    if (pud)
> -+                    for (i = 0; i < pageCount; i++)
> -                     {
> --                        pmd_t * pmd = pmd_offset(pud, memory);
> --                        pte = pte_offset_map_lock(current->mm, pmd, memory, &ptl);
> --                        if (!pte)
> -+                        pgd_t * pgd = pgd_offset(current->mm, logical);
> -+                        pud_t * pud = pud_offset(pgd, logical);
> -+
> -+                        if (pud)
> -+                        {
> -+                            pmd_t * pmd = pmd_offset(pud, logical);
> -+                            pte = pte_offset_map_lock(current->mm, pmd, logical, &ptl);
> -+                            if (!pte)
> -+                            {
> -+                                gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
> -+                            }
> -+                        }
> -+                        else
> -                         {
> -                             gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
> -                         }
> -+
> -+                        pages[i] = pte_page(*pte);
> -+                        pte_unmap_unlock(pte, ptl);
> -+
> -+                        /* Advance to next. */
> -+                        logical += PAGE_SIZE;
> -                     }
> --                    else
> -+                }
> -+                else
> -+                {
> -+                    gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
> -+                }
> -+
> -+                /* Check if this memory is contiguous for old mmu. */
> -+                if (Os->device->kernels[Core]->hardware->mmuVersion == 0)
> -+                {
> -+                    for (i = 1; i < pageCount; i++)
> -                     {
> --                        gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
> -+                        if (pages[i] != nth_page(pages[0], i))
> -+                        {
> -+                            /* Non-contiguous. */
> -+                            break;
> -+                        }
> -                     }
> -
> --                    pfn      = pte_pfn(*pte);
> --
> --                    physical = (pfn << PAGE_SHIFT) | (memory & ~PAGE_MASK);
> -+                    if (i == pageCount)
> -+                    {
> -+                        /* Contiguous memory. */
> -+                        physical = page_to_phys(pages[0]) | (memory & ~PAGE_MASK);
> -
> --                    pte_unmap_unlock(pte, ptl);
> -+                        if (!((physical - Os->device->baseAddress) & 0x80000000))
> -+                        {
> -+                            kfree(pages);
> -+                            pages = gcvNULL;
> -
> --                    if ((Os->device->kernels[Core]->hardware->mmuVersion == 0)
> --                            && !((physical - Os->device->baseAddress) & 0x80000000))
> --                    {
> --                        info->pages = gcvNULL;
> --                        info->pageTable = gcvNULL;
> -+                            info->pages = gcvNULL;
> -+                            info->pageTable = gcvNULL;
> -
> --                        MEMORY_MAP_UNLOCK(Os);
> -+                            MEMORY_MAP_UNLOCK(Os);
> -
> --                        *Address = physical - Os->device->baseAddress;
> --                        *Info    = info;
> -+                            *Address = physical - Os->device->baseAddress;
> -+                            *Info    = info;
> -
> --                        gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
> --                                *Info, *Address);
> -+                            gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
> -+                                           *Info, *Address);
> -
> --                        return gcvSTATUS_OK;
> -+                            return gcvSTATUS_OK;
> -+                        }
> -                     }
> -                 }
> --                else
> -+
> -+                /* Reference pages. */
> -+                for (i = 0; i < pageCount; i++)
> -                 {
> --                    gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
> -+                    get_page(pages[i]);
> -                 }
> -             }
> -         }
> -
> --        if (pages)
> --        {
> --            for (i = 0; i < pageCount; i++)
> --            {
> --                /* Flush(clean) the data cache. */
> --                gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
> --                                 (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
> --                                 (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
> --                                 PAGE_SIZE));
> --            }
> --        }
> --        else
> -+        for (i = 0; i < pageCount; i++)
> -         {
> -+#ifdef CONFIG_ARM
> -+            gctUINT32 data;
> -+            get_user(data, (gctUINT32*)((memory & PAGE_MASK) + i * PAGE_SIZE));
> -+#endif
> -+
> -             /* Flush(clean) the data cache. */
> -             gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
> --                             (gctPOINTER)(gctUINTPTR_T)(physical & PAGE_MASK),
> --                             (gctPOINTER)(memory & PAGE_MASK),
> --                             PAGE_SIZE * pageCount));
> -+                             (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
> -+                             (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
> -+                             PAGE_SIZE));
> -         }
> -
> - #if gcdENABLE_VG
> -@@ -5464,20 +5603,14 @@ OnError:
> -                                               (gctPOINTER *) &pageTable,
> -                                               &address));
> -         }
> -+
> -         /* Fill the page table. */
> -         for (i = 0; i < pageCount; i++)
> -         {
> -             gctUINT32 phys;
> -             gctUINT32_PTR tab = pageTable + i * (PAGE_SIZE/4096);
> -
> --            if (pages)
> --            {
> --                phys = page_to_phys(pages[i]);
> --            }
> --            else
> --            {
> --                phys = (physical & PAGE_MASK) + i * PAGE_SIZE;
> --            }
> -+            phys = page_to_phys(pages[i]);
> -
> - #if gcdENABLE_VG
> -             if (Core == gcvCORE_VG)
> -@@ -6126,7 +6259,7 @@ gckOS_CacheClean(
> - #else
> -     dma_sync_single_for_device(
> -               gcvNULL,
> --              Physical,
> -+              (dma_addr_t)Physical,
> -               Bytes,
> -               DMA_TO_DEVICE);
> - #endif
> -@@ -6205,7 +6338,7 @@ gckOS_CacheInvalidate(
> - #else
> -     dma_sync_single_for_device(
> -               gcvNULL,
> --              Physical,
> -+              (dma_addr_t)Physical,
> -               Bytes,
> -               DMA_FROM_DEVICE);
> - #endif
> -@@ -6279,7 +6412,7 @@ gckOS_CacheFlush(
> - #else
> -     dma_sync_single_for_device(
> -               gcvNULL,
> --              Physical,
> -+              (dma_addr_t)Physical,
> -               Bytes,
> -               DMA_BIDIRECTIONAL);
> - #endif
> -@@ -6827,6 +6960,9 @@ gckOS_SetGPUPower(
> -     struct clk *clk_2dcore = Os->device->clk_2d_core;
> -     struct clk *clk_2d_axi = Os->device->clk_2d_axi;
> -     struct clk *clk_vg_axi = Os->device->clk_vg_axi;
> -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+    int ret;
> -+#endif
> -
> -     gctBOOL oldClockState = gcvFALSE;
> -     gctBOOL oldPowerState = gcvFALSE;
> -@@ -6852,9 +6988,13 @@ gckOS_SetGPUPower(
> -     }
> - 	if((Power == gcvTRUE) && (oldPowerState == gcvFALSE))
> - 	{
> --#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
> --        if(!IS_ERR(Os->device->gpu_regulator))
> --            regulator_enable(Os->device->gpu_regulator);
> -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+        if(!IS_ERR(Os->device->gpu_regulator)) {
> -+            ret = regulator_enable(Os->device->gpu_regulator);
> -+            if (ret != 0)
> -+                gckOS_Print("%s(%d): fail to enable pu regulator %d!\n",
> -+                    __FUNCTION__, __LINE__, ret);
> -+        }
> - #else
> -         imx_gpc_power_up_pu(true);
> - #endif
> -@@ -6969,7 +7109,7 @@ gckOS_SetGPUPower(
> - 		pm_runtime_put_sync(Os->device->pmdev);
> - #endif
> -
> --#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
> -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -         if(!IS_ERR(Os->device->gpu_regulator))
> -             regulator_disable(Os->device->gpu_regulator);
> - #else
> -@@ -7033,6 +7173,10 @@ gckOS_ResetGPU(
> -     }
> -
> -     gcmkFOOTER_NO();
> -+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> -+	struct reset_control *rstc = Os->device->rstc[Core];
> -+	if (rstc)
> -+		reset_control_reset(rstc);
> - #else
> -     imx_src_reset_gpu((int)Core);
> - #endif
> -@@ -8529,3 +8673,338 @@ gckOS_GetProcessNameByPid(
> -     return gcvSTATUS_OK;
> - }
> -
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+
> -+gceSTATUS
> -+gckOS_CreateSyncPoint(
> -+    IN gckOS Os,
> -+    OUT gctSYNC_POINT * SyncPoint
> -+    )
> -+{
> -+    gceSTATUS status;
> -+    gcsSYNC_POINT_PTR syncPoint;
> -+
> -+    gcmkHEADER_ARG("Os=0x%X", Os);
> -+
> -+    /* Verify the arguments. */
> -+    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
> -+
> -+    /* Create an sync point structure. */
> -+    syncPoint = (gcsSYNC_POINT_PTR) kmalloc(
> -+            sizeof(gcsSYNC_POINT), GFP_KERNEL | gcdNOWARN);
> -+
> -+    if (syncPoint == gcvNULL)
> -+    {
> -+        gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
> -+    }
> -+
> -+    /* Initialize the sync point. */
> -+    atomic_set(&syncPoint->ref, 1);
> -+    atomic_set(&syncPoint->state, 0);
> -+
> -+    gcmkONERROR(_AllocateIntegerId(&Os->syncPointDB, syncPoint, &syncPoint->id));
> -+
> -+    *SyncPoint = (gctSYNC_POINT)(gctUINTPTR_T)syncPoint->id;
> -+
> -+    gcmkFOOTER_ARG("*SyncPonint=%d", syncPoint->id);
> -+    return gcvSTATUS_OK;
> -+
> -+OnError:
> -+    if (syncPoint != gcvNULL)
> -+    {
> -+        kfree(syncPoint);
> -+    }
> -+
> -+    gcmkFOOTER();
> -+    return status;
> -+}
> -+
> -+gceSTATUS
> -+gckOS_ReferenceSyncPoint(
> -+    IN gckOS Os,
> -+    IN gctSYNC_POINT SyncPoint
> -+    )
> -+{
> -+    gceSTATUS status;
> -+    gcsSYNC_POINT_PTR syncPoint;
> -+
> -+    gcmkHEADER_ARG("Os=0x%X", Os);
> -+
> -+    /* Verify the arguments. */
> -+    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
> -+    gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
> -+
> -+    gcmkONERROR(
> -+        _QueryIntegerId(&Os->syncPointDB,
> -+                        (gctUINT32)(gctUINTPTR_T)SyncPoint,
> -+                        (gctPOINTER)&syncPoint));
> -+
> -+    /* Initialize the sync point. */
> -+    atomic_inc(&syncPoint->ref);
> -+
> -+    gcmkFOOTER_NO();
> -+    return gcvSTATUS_OK;
> -+
> -+OnError:
> -+    gcmkFOOTER();
> -+    return status;
> -+}
> -+
> -+gceSTATUS
> -+gckOS_DestroySyncPoint(
> -+    IN gckOS Os,
> -+    IN gctSYNC_POINT SyncPoint
> -+    )
> -+{
> -+    gceSTATUS status;
> -+    gcsSYNC_POINT_PTR syncPoint;
> -+    gctBOOL acquired = gcvFALSE;
> -+
> -+    gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
> -+
> -+    /* Verify the arguments. */
> -+    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
> -+    gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
> -+
> -+    gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
> -+    acquired = gcvTRUE;
> -+
> -+    gcmkONERROR(
> -+        _QueryIntegerId(&Os->syncPointDB,
> -+                        (gctUINT32)(gctUINTPTR_T)SyncPoint,
> -+                        (gctPOINTER)&syncPoint));
> -+
> -+    gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
> -+
> -+    if (atomic_dec_and_test(&syncPoint->ref))
> -+    {
> -+        gcmkVERIFY_OK(_DestroyIntegerId(&Os->syncPointDB, syncPoint->id));
> -+
> -+        /* Free the sgianl. */
> -+        syncPoint->timeline = gcvNULL;
> -+        kfree(syncPoint);
> -+    }
> -+
> -+    gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
> -+    acquired = gcvFALSE;
> -+
> -+    /* Success. */
> -+    gcmkFOOTER_NO();
> -+    return gcvSTATUS_OK;
> -+
> -+OnError:
> -+    if (acquired)
> -+    {
> -+        /* Release the mutex. */
> -+        gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
> -+    }
> -+
> -+    gcmkFOOTER();
> -+    return status;
> -+}
> -+
> -+gceSTATUS
> -+gckOS_SignalSyncPoint(
> -+    IN gckOS Os,
> -+    IN gctSYNC_POINT SyncPoint
> -+    )
> -+{
> -+    gceSTATUS status;
> -+    gcsSYNC_POINT_PTR syncPoint;
> -+    gctBOOL acquired = gcvFALSE;
> -+
> -+    gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
> -+
> -+    /* Verify the arguments. */
> -+    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
> -+    gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
> -+
> -+    gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
> -+    acquired = gcvTRUE;
> -+
> -+    gcmkONERROR(
> -+        _QueryIntegerId(&Os->syncPointDB,
> -+                        (gctUINT32)(gctUINTPTR_T)SyncPoint,
> -+                        (gctPOINTER)&syncPoint));
> -+
> -+    gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
> -+
> -+    /* Get state. */
> -+    atomic_set(&syncPoint->state, gcvTRUE);
> -+
> -+    /* Signal timeline. */
> -+    if (syncPoint->timeline)
> -+    {
> -+        sync_timeline_signal(syncPoint->timeline);
> -+    }
> -+
> -+    gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
> -+    acquired = gcvFALSE;
> -+
> -+    /* Success. */
> -+    gcmkFOOTER_NO();
> -+    return gcvSTATUS_OK;
> -+
> -+OnError:
> -+    if (acquired)
> -+    {
> -+        /* Release the mutex. */
> -+        gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
> -+    }
> -+
> -+    gcmkFOOTER();
> -+    return status;
> -+}
> -+
> -+gceSTATUS
> -+gckOS_QuerySyncPoint(
> -+    IN gckOS Os,
> -+    IN gctSYNC_POINT SyncPoint,
> -+    OUT gctBOOL_PTR State
> -+    )
> -+{
> -+    gceSTATUS status;
> -+    gcsSYNC_POINT_PTR syncPoint;
> -+
> -+    gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
> -+
> -+    /* Verify the arguments. */
> -+    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
> -+    gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
> -+
> -+    gcmkONERROR(
> -+        _QueryIntegerId(&Os->syncPointDB,
> -+                        (gctUINT32)(gctUINTPTR_T)SyncPoint,
> -+                        (gctPOINTER)&syncPoint));
> -+
> -+    gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
> -+
> -+    /* Get state. */
> -+    *State = atomic_read(&syncPoint->state);
> -+
> -+    /* Success. */
> -+    gcmkFOOTER_ARG("*State=%d", *State);
> -+    return gcvSTATUS_OK;
> -+
> -+OnError:
> -+    gcmkFOOTER();
> -+    return status;
> -+}
> -+
> -+gceSTATUS
> -+gckOS_CreateSyncTimeline(
> -+    IN gckOS Os,
> -+    OUT gctHANDLE * Timeline
> -+    )
> -+{
> -+    struct viv_sync_timeline * timeline;
> -+
> -+    /* Create viv sync timeline. */
> -+    timeline = viv_sync_timeline_create("viv timeline", Os);
> -+
> -+    if (timeline == gcvNULL)
> -+    {
> -+        /* Out of memory. */
> -+        return gcvSTATUS_OUT_OF_MEMORY;
> -+    }
> -+
> -+    *Timeline = (gctHANDLE) timeline;
> -+    return gcvSTATUS_OK;
> -+}
> -+
> -+gceSTATUS
> -+gckOS_DestroySyncTimeline(
> -+    IN gckOS Os,
> -+    IN gctHANDLE Timeline
> -+    )
> -+{
> -+    struct viv_sync_timeline * timeline;
> -+    gcmkASSERT(Timeline != gcvNULL);
> -+
> -+    /* Destroy timeline. */
> -+    timeline = (struct viv_sync_timeline *) Timeline;
> -+    sync_timeline_destroy(&timeline->obj);
> -+
> -+    return gcvSTATUS_OK;
> -+}
> -+
> -+gceSTATUS
> -+gckOS_CreateNativeFence(
> -+    IN gckOS Os,
> -+    IN gctHANDLE Timeline,
> -+    IN gctSYNC_POINT SyncPoint,
> -+    OUT gctINT * FenceFD
> -+    )
> -+{
> -+    int fd = -1;
> -+    struct viv_sync_timeline *timeline;
> -+    struct sync_pt * pt = gcvNULL;
> -+    struct sync_fence * fence;
> -+    char name[32];
> -+    gcsSYNC_POINT_PTR syncPoint;
> -+    gceSTATUS status;
> -+
> -+    gcmkHEADER_ARG("Os=0x%X Timeline=0x%X SyncPoint=%d",
> -+                   Os, Timeline, (gctUINT)(gctUINTPTR_T)SyncPoint);
> -+
> -+    gcmkONERROR(
> -+        _QueryIntegerId(&Os->syncPointDB,
> -+                        (gctUINT32)(gctUINTPTR_T)SyncPoint,
> -+                        (gctPOINTER)&syncPoint));
> -+
> -+    /* Cast timeline. */
> -+    timeline = (struct viv_sync_timeline *) Timeline;
> -+
> -+    fd = get_unused_fd();
> -+
> -+    if (fd < 0)
> -+    {
> -+        /* Out of resources. */
> -+        gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
> -+    }
> -+
> -+    /* Create viv_sync_pt. */
> -+    pt = viv_sync_pt_create(timeline, SyncPoint);
> -+
> -+    if (pt == gcvNULL)
> -+    {
> -+        gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
> -+    }
> -+
> -+    /* Reference sync_timeline. */
> -+    syncPoint->timeline = &timeline->obj;
> -+
> -+    /* Build fence name. */
> -+    snprintf(name, 32, "viv sync_fence-%u", (gctUINT)(gctUINTPTR_T)SyncPoint);
> -+
> -+    /* Create sync_fence. */
> -+    fence = sync_fence_create(name, pt);
> -+
> -+    if (fence == NULL)
> -+    {
> -+        gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
> -+    }
> -+
> -+    /* Install fence to fd. */
> -+    sync_fence_install(fence, fd);
> -+
> -+    *FenceFD = fd;
> -+    gcmkFOOTER_ARG("*FenceFD=%d", fd);
> -+    return gcvSTATUS_OK;
> -+
> -+OnError:
> -+    /* Error roll back. */
> -+    if (pt)
> -+    {
> -+        sync_pt_free(pt);
> -+    }
> -+
> -+    if (fd > 0)
> -+    {
> -+        put_unused_fd(fd);
> -+    }
> -+
> -+    gcmkFOOTER();
> -+    return status;
> -+}
> -+#endif
> -diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
> -new file mode 100644
> -index 0000000..7efae1c
> ---- /dev/null
> -+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
> -@@ -0,0 +1,174 @@
> -+/****************************************************************************
> -+*
> -+*    Copyright (C) 2005 - 2013 by Vivante Corp.
> -+*
> -+*    This program is free software; you can redistribute it and/or modify
> -+*    it under the terms of the GNU General Public License as published by
> -+*    the Free Software Foundation; either version 2 of the license, or
> -+*    (at your option) any later version.
> -+*
> -+*    This program is distributed in the hope that it will be useful,
> -+*    but WITHOUT ANY WARRANTY; without even the implied warranty of
> -+*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> -+*    GNU General Public License for more details.
> -+*
> -+*    You should have received a copy of the GNU General Public License
> -+*    along with this program; if not write to the Free Software
> -+*    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> -+*
> -+*****************************************************************************/
> -+
> -+
> -+#include <linux/kernel.h>
> -+#include <linux/file.h>
> -+#include <linux/fs.h>
> -+#include <linux/miscdevice.h>
> -+#include <linux/module.h>
> -+#include <linux/syscalls.h>
> -+#include <linux/uaccess.h>
> -+
> -+#include "gc_hal_kernel_sync.h"
> -+
> -+#if gcdANDROID_NATIVE_FENCE_SYNC
> -+
> -+static struct sync_pt *
> -+viv_sync_pt_dup(
> -+    struct sync_pt * sync_pt
> -+    )
> -+{
> -+    gceSTATUS status;
> -+    struct viv_sync_pt *pt;
> -+    struct viv_sync_pt *src;
> -+    struct viv_sync_timeline *obj;
> -+
> -+    src = (struct viv_sync_pt *) sync_pt;
> -+    obj = (struct viv_sync_timeline *) sync_pt->parent;
> -+
> -+    /* Create the new sync_pt. */
> -+    pt = (struct viv_sync_pt *)
> -+        sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
> -+
> -+    pt->stamp = src->stamp;
> -+    pt->sync = src->sync;
> -+
> -+    /* Reference sync point. */
> -+    status = gckOS_ReferenceSyncPoint(obj->os, pt->sync);
> -+
> -+    if (gcmIS_ERROR(status))
> -+    {
> -+        sync_pt_free((struct sync_pt *)pt);
> -+        return NULL;
> -+    }
> -+
> -+    return (struct sync_pt *)pt;
> -+}
> -+
> -+static int
> -+viv_sync_pt_has_signaled(
> -+    struct sync_pt * sync_pt
> -+    )
> -+{
> -+    gceSTATUS status;
> -+    gctBOOL state;
> -+    struct viv_sync_pt * pt;
> -+    struct viv_sync_timeline * obj;
> -+
> -+    pt  = (struct viv_sync_pt *)sync_pt;
> -+    obj = (struct viv_sync_timeline *)sync_pt->parent;
> -+
> -+    status = gckOS_QuerySyncPoint(obj->os, pt->sync, &state);
> -+
> -+    if (gcmIS_ERROR(status))
> -+    {
> -+        /* Error. */
> -+        return -1;
> -+    }
> -+
> -+    return state;
> -+}
> -+
> -+static int
> -+viv_sync_pt_compare(
> -+    struct sync_pt * a,
> -+    struct sync_pt * b
> -+    )
> -+{
> -+    int ret;
> -+    struct viv_sync_pt * pt1 = (struct viv_sync_pt *) a;
> -+    struct viv_sync_pt * pt2 = (struct viv_sync_pt *) b;
> -+
> -+    ret = (pt1->stamp <  pt2->stamp) ? -1
> -+        : (pt1->stamp == pt2->stamp) ?  0
> -+        : 1;
> -+
> -+    return ret;
> -+}
> -+
> -+static void
> -+viv_sync_pt_free(
> -+    struct sync_pt * sync_pt
> -+    )
> -+{
> -+    struct viv_sync_pt * pt;
> -+    struct viv_sync_timeline * obj;
> -+
> -+    pt  = (struct viv_sync_pt *) sync_pt;
> -+    obj = (struct viv_sync_timeline *) sync_pt->parent;
> -+
> -+    gckOS_DestroySyncPoint(obj->os, pt->sync);
> -+}
> -+
> -+static struct sync_timeline_ops viv_timeline_ops =
> -+{
> -+    .driver_name = "viv_sync",
> -+    .dup = viv_sync_pt_dup,
> -+    .has_signaled = viv_sync_pt_has_signaled,
> -+    .compare = viv_sync_pt_compare,
> -+    .free_pt = viv_sync_pt_free,
> -+};
> -+
> -+struct viv_sync_timeline *
> -+viv_sync_timeline_create(
> -+    const char * name,
> -+    gckOS os
> -+    )
> -+{
> -+    struct viv_sync_timeline * obj;
> -+
> -+    obj = (struct viv_sync_timeline *)
> -+        sync_timeline_create(&viv_timeline_ops, sizeof(struct viv_sync_timeline), name);
> -+
> -+    obj->os    = os;
> -+    obj->stamp = 0;
> -+
> -+    return obj;
> -+}
> -+
> -+struct sync_pt *
> -+viv_sync_pt_create(
> -+    struct viv_sync_timeline * obj,
> -+    gctSYNC_POINT SyncPoint
> -+    )
> -+{
> -+    gceSTATUS status;
> -+    struct viv_sync_pt * pt;
> -+
> -+    pt = (struct viv_sync_pt *)
> -+        sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
> -+
> -+    pt->stamp = obj->stamp++;
> -+    pt->sync  = SyncPoint;
> -+
> -+    /* Dup signal. */
> -+    status = gckOS_ReferenceSyncPoint(obj->os, SyncPoint);
> -+
> -+    if (gcmIS_ERROR(status))
> -+    {
> -+        sync_pt_free((struct sync_pt *)pt);
> -+        return NULL;
> -+    }
> -+
> -+    return (struct sync_pt *) pt;
> -+}
> -+
> -+#endif
> -diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
> -new file mode 100644
> -index 0000000..6fc12e5
> ---- /dev/null
> -+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
> -@@ -0,0 +1,71 @@
> -+/****************************************************************************
> -+*
> -+*    Copyright (C) 2005 - 2013 by Vivante Corp.
> -+*
> -+*    This program is free software; you can redistribute it and/or modify
> -+*    it under the terms of the GNU General Public License as published by
> -+*    the Free Software Foundation; either version 2 of the license, or
> -+*    (at your option) any later version.
> -+*
> -+*    This program is distributed in the hope that it will be useful,
> -+*    but WITHOUT ANY WARRANTY; without even the implied warranty of
> -+*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> -+*    GNU General Public License for more details.
> -+*
> -+*    You should have received a copy of the GNU General Public License
> -+*    along with this program; if not write to the Free Software
> -+*    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> -+*
> -+*****************************************************************************/
> -+
> -+
> -+#ifndef __gc_hal_kernel_sync_h_
> -+#define __gc_hal_kernel_sync_h_
> -+
> -+#include <linux/types.h>
> -+
> -+#include <linux/sync.h>
> -+
> -+#include <gc_hal.h>
> -+#include <gc_hal_base.h>
> -+
> -+struct viv_sync_timeline
> -+{
> -+    /* Parent object. */
> -+    struct sync_timeline obj;
> -+
> -+    /* Timestamp when sync_pt is created. */
> -+    gctUINT stamp;
> -+
> -+    /* Pointer to os struct. */
> -+    gckOS os;
> -+};
> -+
> -+
> -+struct viv_sync_pt
> -+{
> -+    /* Parent object. */
> -+    struct sync_pt pt;
> -+
> -+    /* Reference sync point*/
> -+    gctSYNC_POINT sync;
> -+
> -+    /* Timestamp when sync_pt is created. */
> -+    gctUINT stamp;
> -+};
> -+
> -+/* Create viv_sync_timeline object. */
> -+struct viv_sync_timeline *
> -+viv_sync_timeline_create(
> -+    const char * Name,
> -+    gckOS Os
> -+    );
> -+
> -+/* Create viv_sync_pt object. */
> -+struct sync_pt *
> -+viv_sync_pt_create(
> -+    struct viv_sync_timeline * Obj,
> -+    gctSYNC_POINT SyncPoint
> -+    );
> -+
> -+#endif /* __gc_hal_kernel_sync_h_ */
> ---
> -1.7.9.5
> -
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch b/recipes-kernel/linux/linux-imx-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
> deleted file mode 100644
> index 815d02c..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
> +++ /dev/null
> @@ -1,31 +0,0 @@
> -From b37a944f55a5010bd08297a63db0275540922f32 Mon Sep 17 00:00:00 2001
> -From: Otavio Salvador <otavio@ossystems.com.br>
> -Date: Thu, 22 Aug 2013 16:31:29 -0300
> -Subject: [PATCH] drm/vivante: Add ":00" sufix in returned bus Id
> -
> -This makes the 3.0.35 compatible with a Xorg driver build for 3.5.7 or
> -newer kernels.
> -
> -Upstream-Status: Inapropriate [embedded specific]
> -
> -Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
> ----
> - drivers/gpu/drm/vivante/vivante_drv.c | 2 +-
> - 1 file changed, 1 insertion(+), 1 deletion(-)
> -
> -diff --git a/drivers/gpu/drm/vivante/vivante_drv.c b/drivers/gpu/drm/vivante/vivante_drv.c
> -index 4224608..cea360d 100644
> ---- a/drivers/gpu/drm/vivante/vivante_drv.c
> -+++ b/drivers/gpu/drm/vivante/vivante_drv.c
> -@@ -55,7 +55,7 @@
> -
> - #include "drm_pciids.h"
> -
> --static char platformdevicename[] = "Vivante GCCore";
> -+static char platformdevicename[] = "Vivante GCCore:00";
> - static struct platform_device *pplatformdev;
> -
> - static struct drm_driver driver = {
> ---
> -1.8.4.rc1
> -
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch b/recipes-kernel/linux/linux-imx-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
> deleted file mode 100644
> index 0a20b3f..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
> +++ /dev/null
> @@ -1,143 +0,0 @@
> -From 149545df26169d257b144ff78934ce9cb5b6818b Mon Sep 17 00:00:00 2001
> -From: Otavio Salvador <otavio@ossystems.com.br>
> -Date: Sat, 19 Oct 2013 10:55:11 -0300
> -Subject: [PATCH] epdc: Rename mxcfb_epdc_kernel.h to mxc_epdc.h
> -Organization: O.S. Systems Software LTDA.
> -
> -This allow for forward compatibility with imx-test >= 3.10.9-1.0.0.
> -
> -Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
> ----
> - drivers/video/mxc/mxc_epdc_fb.c   |  2 +-
> - include/linux/mxcfb_epdc.h        | 49 +++++++++++++++++++++++++++++++++++++++
> - include/linux/mxcfb_epdc_kernel.h | 49 ---------------------------------------
> - 3 files changed, 50 insertions(+), 50 deletions(-)
> - create mode 100644 include/linux/mxcfb_epdc.h
> - delete mode 100644 include/linux/mxcfb_epdc_kernel.h
> -
> -diff --git a/drivers/video/mxc/mxc_epdc_fb.c b/drivers/video/mxc/mxc_epdc_fb.c
> -index 4103498..b3ef8ea 100644
> ---- a/drivers/video/mxc/mxc_epdc_fb.c
> -+++ b/drivers/video/mxc/mxc_epdc_fb.c
> -@@ -43,7 +43,7 @@
> - #include <linux/dmaengine.h>
> - #include <linux/pxp_dma.h>
> - #include <linux/mxcfb.h>
> --#include <linux/mxcfb_epdc_kernel.h>
> -+#include <linux/mxcfb_epdc.h>
> - #include <linux/gpio.h>
> - #include <linux/regulator/driver.h>
> - #include <linux/fsl_devices.h>
> -diff --git a/include/linux/mxcfb_epdc.h b/include/linux/mxcfb_epdc.h
> -new file mode 100644
> -index 0000000..06fea6f
> ---- /dev/null
> -+++ b/include/linux/mxcfb_epdc.h
> -@@ -0,0 +1,49 @@
> -+/*
> -+ * Copyright (C) 2010-2012 Freescale Semiconductor, Inc. All Rights Reserved.
> -+ *
> -+ * This program is free software; you can redistribute it and/or modify
> -+ * it under the terms of the GNU General Public License as published by
> -+ * the Free Software Foundation; either version 2 of the License, or
> -+ * (at your option) any later version.
> -+ *
> -+ * This program is distributed in the hope that it will be useful,
> -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
> -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -+ * GNU General Public License for more details.
> -+ *
> -+ * You should have received a copy of the GNU General Public License
> -+ * along with this program; if not, write to the Free Software
> -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
> -+ *
> -+ */
> -+#ifndef _MXCFB_EPDC_KERNEL
> -+#define _MXCFB_EPDC_KERNEL
> -+
> -+void mxc_epdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
> -+						struct fb_info *info);
> -+int mxc_epdc_fb_set_temperature(int temperature, struct fb_info *info);
> -+int mxc_epdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
> -+int mxc_epdc_fb_send_update(struct mxcfb_update_data *upd_data,
> -+				   struct fb_info *info);
> -+int mxc_epdc_fb_wait_update_complete(
> -+				struct mxcfb_update_marker_data *marker_data,
> -+				struct fb_info *info);
> -+int mxc_epdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
> -+					    struct fb_info *info);
> -+int mxc_epdc_get_pwrdown_delay(struct fb_info *info);
> -+int mxc_epdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
> -+
> -+void mxc_spdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
> -+						struct fb_info *info);
> -+int mxc_spdc_fb_set_temperature(int temperature, struct fb_info *info);
> -+int mxc_spdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
> -+int mxc_spdc_fb_send_update(struct mxcfb_update_data *upd_data,
> -+				   struct fb_info *info);
> -+int mxc_spdc_fb_wait_update_complete(
> -+				struct mxcfb_update_marker_data *marker_data,
> -+				struct fb_info *info);
> -+int mxc_spdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
> -+					    struct fb_info *info);
> -+int mxc_spdc_get_pwrdown_delay(struct fb_info *info);
> -+int mxc_spdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
> -+#endif
> -diff --git a/include/linux/mxcfb_epdc_kernel.h b/include/linux/mxcfb_epdc_kernel.h
> -deleted file mode 100644
> -index 06fea6f..0000000
> ---- a/include/linux/mxcfb_epdc_kernel.h
> -+++ /dev/null
> -@@ -1,49 +0,0 @@
> --/*
> -- * Copyright (C) 2010-2012 Freescale Semiconductor, Inc. All Rights Reserved.
> -- *
> -- * This program is free software; you can redistribute it and/or modify
> -- * it under the terms of the GNU General Public License as published by
> -- * the Free Software Foundation; either version 2 of the License, or
> -- * (at your option) any later version.
> -- *
> -- * This program is distributed in the hope that it will be useful,
> -- * but WITHOUT ANY WARRANTY; without even the implied warranty of
> -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -- * GNU General Public License for more details.
> -- *
> -- * You should have received a copy of the GNU General Public License
> -- * along with this program; if not, write to the Free Software
> -- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
> -- *
> -- */
> --#ifndef _MXCFB_EPDC_KERNEL
> --#define _MXCFB_EPDC_KERNEL
> --
> --void mxc_epdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
> --						struct fb_info *info);
> --int mxc_epdc_fb_set_temperature(int temperature, struct fb_info *info);
> --int mxc_epdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
> --int mxc_epdc_fb_send_update(struct mxcfb_update_data *upd_data,
> --				   struct fb_info *info);
> --int mxc_epdc_fb_wait_update_complete(
> --				struct mxcfb_update_marker_data *marker_data,
> --				struct fb_info *info);
> --int mxc_epdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
> --					    struct fb_info *info);
> --int mxc_epdc_get_pwrdown_delay(struct fb_info *info);
> --int mxc_epdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
> --
> --void mxc_spdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
> --						struct fb_info *info);
> --int mxc_spdc_fb_set_temperature(int temperature, struct fb_info *info);
> --int mxc_spdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
> --int mxc_spdc_fb_send_update(struct mxcfb_update_data *upd_data,
> --				   struct fb_info *info);
> --int mxc_spdc_fb_wait_update_complete(
> --				struct mxcfb_update_marker_data *marker_data,
> --				struct fb_info *info);
> --int mxc_spdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
> --					    struct fb_info *info);
> --int mxc_spdc_get_pwrdown_delay(struct fb_info *info);
> --int mxc_spdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
> --#endif
> ---
> -1.8.4.rc3
> -
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/mx6dl/defconfig b/recipes-kernel/linux/linux-imx-3.0.35/mx6dl/defconfig
> deleted file mode 100644
> index d709519..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/mx6dl/defconfig
> +++ /dev/null
> @@ -1,301 +0,0 @@
> -CONFIG_EXPERIMENTAL=y
> -CONFIG_SYSVIPC=y
> -CONFIG_IKCONFIG=y
> -CONFIG_IKCONFIG_PROC=y
> -CONFIG_LOG_BUF_SHIFT=14
> -CONFIG_CGROUPS=y
> -CONFIG_EMBEDDED=y
> -CONFIG_PERF_EVENTS=y
> -CONFIG_KPROBES=y
> -CONFIG_MODULES=y
> -CONFIG_MODULE_UNLOAD=y
> -CONFIG_MODULE_FORCE_UNLOAD=y
> -CONFIG_MODVERSIONS=y
> -# CONFIG_BLK_DEV_BSG is not set
> -CONFIG_ARCH_MXC=y
> -CONFIG_GPIO_PCA953X=y
> -CONFIG_ARCH_MX6=y
> -CONFIG_FORCE_MAX_ZONEORDER=14
> -CONFIG_MACH_MX6Q_ARM2=y
> -CONFIG_MACH_MX6Q_SABRELITE=y
> -CONFIG_MACH_MX6Q_SABRESD=y
> -CONFIG_MACH_MX6Q_SABREAUTO=y
> -CONFIG_MACH_MX6Q_HDMIDONGLE=y
> -CONFIG_USB_EHCI_ARC_H1=y
> -CONFIG_USB_FSL_ARC_OTG=y
> -CONFIG_MXC_PWM=y
> -CONFIG_MXC_REBOOT_MFGMODE=y
> -CONFIG_CLK_DEBUG=y
> -CONFIG_DMA_ZONE_SIZE=184
> -# CONFIG_SWP_EMULATE is not set
> -CONFIG_ARM_ERRATA_743622=y
> -CONFIG_ARM_ERRATA_751472=y
> -CONFIG_ARM_ERRATA_754322=y
> -CONFIG_ARM_ERRATA_764369=y
> -CONFIG_NO_HZ=y
> -CONFIG_HIGH_RES_TIMERS=y
> -CONFIG_SMP=y
> -CONFIG_VMSPLIT_2G=y
> -CONFIG_PREEMPT=y
> -CONFIG_AEABI=y
> -# CONFIG_OABI_COMPAT is not set
> -CONFIG_HIGHMEM=y
> -CONFIG_COMPACTION=y
> -CONFIG_KSM=y
> -CONFIG_ZBOOT_ROM_TEXT=0x0
> -CONFIG_ZBOOT_ROM_BSS=0x0
> -CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 ip=off"
> -CONFIG_CPU_FREQ=y
> -CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
> -CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
> -CONFIG_CPU_FREQ_GOV_POWERSAVE=y
> -CONFIG_CPU_FREQ_GOV_USERSPACE=y
> -CONFIG_CPU_FREQ_GOV_ONDEMAND=y
> -CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
> -CONFIG_CPU_FREQ_IMX=y
> -CONFIG_VFP=y
> -CONFIG_NEON=y
> -# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
> -CONFIG_SUSPEND_DEVICE_TIME_DEBUG=y
> -CONFIG_PM_RUNTIME=y
> -CONFIG_PM_DEBUG=y
> -CONFIG_APM_EMULATION=y
> -CONFIG_NET=y
> -CONFIG_PACKET=y
> -CONFIG_UNIX=y
> -CONFIG_INET=y
> -CONFIG_IP_MULTICAST=y
> -CONFIG_IP_PNP=y
> -CONFIG_IP_PNP_DHCP=y
> -CONFIG_IP_PNP_BOOTP=y
> -# CONFIG_INET_LRO is not set
> -# CONFIG_IPV6 is not set
> -CONFIG_NETFILTER=y
> -CONFIG_LLC2=y
> -CONFIG_CAN=y
> -CONFIG_CAN_RAW=y
> -CONFIG_CAN_BCM=y
> -CONFIG_CAN_VCAN=y
> -CONFIG_CAN_FLEXCAN=y
> -CONFIG_BT=y
> -CONFIG_BT_L2CAP=y
> -CONFIG_BT_SCO=y
> -CONFIG_BT_RFCOMM=y
> -CONFIG_BT_RFCOMM_TTY=y
> -CONFIG_BT_BNEP=y
> -CONFIG_BT_BNEP_MC_FILTER=y
> -CONFIG_BT_BNEP_PROTO_FILTER=y
> -CONFIG_BT_HIDP=y
> -CONFIG_BT_HCIBTUSB=y
> -CONFIG_BT_HCIUART=y
> -CONFIG_BT_HCIUART_ATH3K=y
> -CONFIG_BT_HCIVHCI=y
> -CONFIG_CFG80211=y
> -CONFIG_RFKILL=y
> -CONFIG_RFKILL_INPUT=y
> -CONFIG_DEVTMPFS=y
> -CONFIG_DEVTMPFS_MOUNT=y
> -CONFIG_CONNECTOR=y
> -CONFIG_MTD=y
> -CONFIG_MTD_CHAR=y
> -CONFIG_MTD_BLOCK=y
> -CONFIG_MTD_CFI=y
> -CONFIG_MTD_CFI_AMDSTD=y
> -CONFIG_MTD_PHYSMAP=y
> -CONFIG_MTD_M25P80=y
> -CONFIG_MTD_NAND=y
> -CONFIG_MTD_NAND_GPMI_NAND=y
> -CONFIG_MTD_UBI=y
> -CONFIG_BLK_DEV_LOOP=y
> -CONFIG_MISC_DEVICES=y
> -CONFIG_MXS_PERFMON=m
> -CONFIG_BLK_DEV_SD=y
> -CONFIG_SCSI_MULTI_LUN=y
> -CONFIG_ATA=y
> -# CONFIG_SATA_PMP is not set
> -CONFIG_SATA_AHCI_PLATFORM=y
> -CONFIG_NETDEVICES=y
> -CONFIG_MICREL_PHY=y
> -CONFIG_NET_ETHERNET=y
> -CONFIG_SMSC911X=y
> -CONFIG_FEC_NAPI=y
> -# CONFIG_NETDEV_1000 is not set
> -# CONFIG_NETDEV_10000 is not set
> -CONFIG_ATH_COMMON=m
> -CONFIG_ATH6KL=m
> -CONFIG_HOSTAP=y
> -CONFIG_INPUT_POLLDEV=y
> -CONFIG_INPUT_EVDEV=y
> -CONFIG_KEYBOARD_GPIO=y
> -# CONFIG_INPUT_MOUSE is not set
> -CONFIG_INPUT_TOUCHSCREEN=y
> -CONFIG_TOUCHSCREEN_EGALAX=y
> -CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH=y
> -CONFIG_TOUCHSCREEN_ELAN=y
> -CONFIG_TOUCHSCREEN_MAX11801=y
> -CONFIG_INPUT_MISC=y
> -CONFIG_INPUT_UINPUT=y
> -CONFIG_INPUT_ISL29023=y
> -CONFIG_VT_HW_CONSOLE_BINDING=y
> -CONFIG_SERIAL_IMX=y
> -CONFIG_SERIAL_IMX_CONSOLE=y
> -CONFIG_FSL_OTP=y
> -CONFIG_HW_RANDOM=y
> -CONFIG_MXS_VIIM=y
> -CONFIG_I2C=y
> -CONFIG_I2C_CHARDEV=y
> -CONFIG_I2C_IMX=y
> -CONFIG_SPI=y
> -CONFIG_SPI_IMX=y
> -CONFIG_GPIO_SYSFS=y
> -CONFIG_SABRESD_MAX8903=y
> -CONFIG_SENSORS_MAX17135=y
> -CONFIG_SENSORS_MAG3110=y
> -# CONFIG_MXC_MMA8450 is not set
> -CONFIG_WATCHDOG=y
> -CONFIG_WATCHDOG_NOWAYOUT=y
> -CONFIG_IMX2_WDT=y
> -CONFIG_MFD_WM8994=y
> -CONFIG_MFD_PFUZE=y
> -CONFIG_MFD_MAX17135=y
> -CONFIG_REGULATOR=y
> -CONFIG_REGULATOR_FIXED_VOLTAGE=y
> -CONFIG_REGULATOR_PFUZE100=y
> -CONFIG_REGULATOR_MAX17135=y
> -CONFIG_MEDIA_SUPPORT=y
> -CONFIG_VIDEO_DEV=y
> -# CONFIG_RC_CORE is not set
> -# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
> -CONFIG_VIDEO_MXC_CAMERA=m
> -CONFIG_MXC_CAMERA_OV3640=m
> -CONFIG_MXC_CAMERA_OV5640=m
> -CONFIG_MXC_CAMERA_OV8820_MIPI=m
> -CONFIG_MXC_CAMERA_OV5642=m
> -CONFIG_MXC_TVIN_ADV7180=m
> -CONFIG_MXC_CAMERA_OV5640_MIPI=m
> -CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m
> -CONFIG_USB_VIDEO_CLASS=m
> -# CONFIG_RADIO_ADAPTERS is not set
> -CONFIG_DRM=m
> -CONFIG_DRM_VIVANTE=m
> -CONFIG_FB=y
> -CONFIG_BACKLIGHT_LCD_SUPPORT=y
> -# CONFIG_LCD_CLASS_DEVICE is not set
> -CONFIG_BACKLIGHT_CLASS_DEVICE=y
> -# CONFIG_BACKLIGHT_GENERIC is not set
> -CONFIG_BACKLIGHT_PWM=y
> -CONFIG_FB_MXC_LDB=y
> -CONFIG_FB_MXC_MIPI_DSI=y
> -CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
> -CONFIG_FB_MXC_EINK_PANEL=y
> -CONFIG_FB_MXC_HDMI=y
> -CONFIG_FRAMEBUFFER_CONSOLE=y
> -CONFIG_FONTS=y
> -CONFIG_FONT_8x16=y
> -CONFIG_LOGO=y
> -CONFIG_SOUND=y
> -CONFIG_SND=y
> -CONFIG_SND_USB_AUDIO=y
> -CONFIG_SND_SOC=y
> -CONFIG_SND_IMX_SOC=y
> -CONFIG_SND_SOC_IMX_SGTL5000=y
> -CONFIG_SND_SOC_IMX_WM8962=y
> -CONFIG_SND_SOC_IMX_CS42888=y
> -CONFIG_SND_SOC_IMX_SPDIF=y
> -CONFIG_SND_SOC_IMX_HDMI=y
> -CONFIG_HIDRAW=y
> -CONFIG_HID_A4TECH=m
> -CONFIG_HID_APPLE=m
> -CONFIG_HID_BELKIN=m
> -CONFIG_HID_CHERRY=m
> -CONFIG_HID_CHICONY=m
> -CONFIG_HID_CYPRESS=m
> -CONFIG_HID_EZKEY=m
> -CONFIG_HID_GYRATION=m
> -CONFIG_HID_LOGITECH=m
> -CONFIG_HID_MICROSOFT=m
> -CONFIG_HID_MONTEREY=m
> -CONFIG_HID_PANTHERLORD=m
> -CONFIG_HID_PETALYNX=m
> -CONFIG_HID_SAMSUNG=m
> -CONFIG_HID_SONY=m
> -CONFIG_HID_SUNPLUS=m
> -CONFIG_USB=y
> -# CONFIG_USB_DEVICE_CLASS is not set
> -CONFIG_USB_SUSPEND=y
> -# CONFIG_USB_OTG_WHITELIST is not set
> -CONFIG_USB_EHCI_HCD=y
> -CONFIG_USB_EHCI_ARC=y
> -CONFIG_USB_EHCI_ROOT_HUB_TT=y
> -# CONFIG_USB_EHCI_TT_NEWSCHED is not set
> -CONFIG_USB_STORAGE=y
> -CONFIG_USB_GADGET=y
> -CONFIG_USB_AUDIO=m
> -CONFIG_USB_ETH=m
> -CONFIG_USB_FILE_STORAGE=m
> -CONFIG_USB_G_SERIAL=m
> -CONFIG_MXC_OTG=y
> -CONFIG_MMC=y
> -CONFIG_MMC_UNSAFE_RESUME=y
> -CONFIG_MMC_SDHCI=y
> -CONFIG_MMC_SDHCI_PLTFM=y
> -CONFIG_MMC_SDHCI_ESDHC_IMX=y
> -CONFIG_NEW_LEDS=y
> -CONFIG_LEDS_CLASS=y
> -CONFIG_LEDS_GPIO=y
> -CONFIG_LEDS_TRIGGERS=y
> -CONFIG_LEDS_TRIGGER_GPIO=y
> -CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
> -CONFIG_RTC_CLASS=y
> -CONFIG_RTC_INTF_DEV_UIE_EMUL=y
> -CONFIG_RTC_DRV_SNVS=y
> -CONFIG_DMADEVICES=y
> -CONFIG_MXC_PXP_V2=y
> -CONFIG_IMX_SDMA=y
> -CONFIG_MXC_IPU=y
> -# CONFIG_MXC_HMP4E is not set
> -# CONFIG_MXC_HWEVENT is not set
> -CONFIG_MXC_ASRC=y
> -CONFIG_MXC_MLB150=m
> -CONFIG_MXC_GPU_VIV=y
> -CONFIG_MXC_MIPI_CSI2=y
> -CONFIG_EXT2_FS=y
> -CONFIG_EXT3_FS=y
> -# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
> -CONFIG_EXT4_FS=y
> -CONFIG_AUTOFS4_FS=m
> -CONFIG_MSDOS_FS=y
> -CONFIG_VFAT_FS=y
> -CONFIG_TMPFS=y
> -CONFIG_JFFS2_FS=y
> -CONFIG_UBIFS_FS=y
> -CONFIG_CRAMFS=y
> -CONFIG_NFS_FS=y
> -CONFIG_NFS_V3=y
> -CONFIG_ROOT_NFS=y
> -CONFIG_PARTITION_ADVANCED=y
> -CONFIG_EFI_PARTITION=y
> -CONFIG_NLS_CODEPAGE_437=y
> -CONFIG_NLS_ASCII=m
> -CONFIG_NLS_ISO8859_1=y
> -CONFIG_NLS_UTF8=m
> -CONFIG_MAGIC_SYSRQ=y
> -CONFIG_SYSCTL_SYSCALL_CHECK=y
> -# CONFIG_EVENT_POWER_TRACING_DEPRECATED is not set
> -CONFIG_FTRACE=y
> -# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
> -CONFIG_CRYPTO_TEST=m
> -CONFIG_CRYPTO_CCM=y
> -CONFIG_CRYPTO_GCM=y
> -CONFIG_CRYPTO_CBC=y
> -CONFIG_CRYPTO_CTS=y
> -CONFIG_CRYPTO_LRW=y
> -CONFIG_CRYPTO_PCBC=y
> -CONFIG_CRYPTO_XTS=y
> -CONFIG_CRYPTO_DES=y
> -# CONFIG_CRYPTO_ANSI_CPRNG is not set
> -CONFIG_CRYPTO_DEV_FSL_CAAM=y
> -CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
> -CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
> -CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
> -CONFIG_CRC_CCITT=m
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/mx6q/defconfig b/recipes-kernel/linux/linux-imx-3.0.35/mx6q/defconfig
> deleted file mode 100644
> index 542e949..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/mx6q/defconfig
> +++ /dev/null
> @@ -1,302 +0,0 @@
> -CONFIG_EXPERIMENTAL=y
> -CONFIG_SYSVIPC=y
> -CONFIG_IKCONFIG=y
> -CONFIG_IKCONFIG_PROC=y
> -CONFIG_LOG_BUF_SHIFT=14
> -CONFIG_CGROUPS=y
> -CONFIG_EMBEDDED=y
> -CONFIG_PERF_EVENTS=y
> -CONFIG_KPROBES=y
> -CONFIG_MODULES=y
> -CONFIG_MODULE_UNLOAD=y
> -CONFIG_MODULE_FORCE_UNLOAD=y
> -CONFIG_MODVERSIONS=y
> -# CONFIG_BLK_DEV_BSG is not set
> -CONFIG_ARCH_MXC=y
> -CONFIG_GPIO_PCA953X=y
> -CONFIG_ARCH_MX6=y
> -CONFIG_FORCE_MAX_ZONEORDER=14
> -CONFIG_MACH_MX6Q_ARM2=y
> -CONFIG_MACH_MX6Q_SABRELITE=y
> -CONFIG_MACH_MX6Q_SABRESD=y
> -CONFIG_MACH_MX6Q_SABREAUTO=y
> -CONFIG_MACH_MX6Q_HDMIDONGLE=y
> -CONFIG_USB_EHCI_ARC_H1=y
> -CONFIG_USB_FSL_ARC_OTG=y
> -CONFIG_MXC_PWM=y
> -CONFIG_MXC_REBOOT_MFGMODE=y
> -CONFIG_CLK_DEBUG=y
> -CONFIG_DMA_ZONE_SIZE=184
> -# CONFIG_SWP_EMULATE is not set
> -CONFIG_ARM_ERRATA_743622=y
> -CONFIG_ARM_ERRATA_751472=y
> -CONFIG_ARM_ERRATA_754322=y
> -CONFIG_ARM_ERRATA_764369=y
> -CONFIG_NO_HZ=y
> -CONFIG_HIGH_RES_TIMERS=y
> -CONFIG_SMP=y
> -CONFIG_VMSPLIT_2G=y
> -CONFIG_PREEMPT=y
> -CONFIG_AEABI=y
> -# CONFIG_OABI_COMPAT is not set
> -CONFIG_HIGHMEM=y
> -CONFIG_COMPACTION=y
> -CONFIG_KSM=y
> -CONFIG_ZBOOT_ROM_TEXT=0x0
> -CONFIG_ZBOOT_ROM_BSS=0x0
> -CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 ip=off"
> -CONFIG_CPU_FREQ=y
> -CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
> -CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
> -CONFIG_CPU_FREQ_GOV_POWERSAVE=y
> -CONFIG_CPU_FREQ_GOV_USERSPACE=y
> -CONFIG_CPU_FREQ_GOV_ONDEMAND=y
> -CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
> -CONFIG_CPU_FREQ_IMX=y
> -CONFIG_VFP=y
> -CONFIG_NEON=y
> -# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
> -CONFIG_SUSPEND_DEVICE_TIME_DEBUG=y
> -CONFIG_PM_RUNTIME=y
> -CONFIG_PM_DEBUG=y
> -CONFIG_APM_EMULATION=y
> -CONFIG_NET=y
> -CONFIG_PACKET=y
> -CONFIG_UNIX=y
> -CONFIG_INET=y
> -CONFIG_IP_MULTICAST=y
> -CONFIG_IP_PNP=y
> -CONFIG_IP_PNP_DHCP=y
> -CONFIG_IP_PNP_BOOTP=y
> -# CONFIG_INET_LRO is not set
> -# CONFIG_IPV6 is not set
> -CONFIG_NETFILTER=y
> -CONFIG_LLC2=y
> -CONFIG_CAN=y
> -CONFIG_CAN_RAW=y
> -CONFIG_CAN_BCM=y
> -CONFIG_CAN_VCAN=y
> -CONFIG_CAN_FLEXCAN=y
> -CONFIG_BT=y
> -CONFIG_BT_L2CAP=y
> -CONFIG_BT_SCO=y
> -CONFIG_BT_RFCOMM=y
> -CONFIG_BT_RFCOMM_TTY=y
> -CONFIG_BT_BNEP=y
> -CONFIG_BT_BNEP_MC_FILTER=y
> -CONFIG_BT_BNEP_PROTO_FILTER=y
> -CONFIG_BT_HIDP=y
> -CONFIG_BT_HCIBTUSB=y
> -CONFIG_BT_HCIUART=y
> -CONFIG_BT_HCIUART_ATH3K=y
> -CONFIG_BT_HCIVHCI=y
> -CONFIG_CFG80211=y
> -CONFIG_RFKILL=y
> -CONFIG_RFKILL_INPUT=y
> -CONFIG_DEVTMPFS=y
> -CONFIG_DEVTMPFS_MOUNT=y
> -CONFIG_CONNECTOR=y
> -CONFIG_MTD=y
> -CONFIG_MTD_CHAR=y
> -CONFIG_MTD_BLOCK=y
> -CONFIG_MTD_CFI=y
> -CONFIG_MTD_CFI_AMDSTD=y
> -CONFIG_MTD_PHYSMAP=y
> -CONFIG_MTD_M25P80=y
> -CONFIG_MTD_NAND=y
> -CONFIG_MTD_NAND_GPMI_NAND=y
> -CONFIG_MTD_UBI=y
> -CONFIG_BLK_DEV_LOOP=y
> -CONFIG_MISC_DEVICES=y
> -CONFIG_MXS_PERFMON=m
> -CONFIG_BLK_DEV_SD=y
> -CONFIG_SCSI_MULTI_LUN=y
> -CONFIG_ATA=y
> -# CONFIG_SATA_PMP is not set
> -CONFIG_SATA_AHCI_PLATFORM=y
> -CONFIG_NETDEVICES=y
> -CONFIG_MICREL_PHY=y
> -CONFIG_NET_ETHERNET=y
> -CONFIG_SMSC911X=y
> -CONFIG_FEC_NAPI=y
> -# CONFIG_NETDEV_1000 is not set
> -# CONFIG_NETDEV_10000 is not set
> -CONFIG_ATH_COMMON=m
> -CONFIG_ATH6KL=m
> -CONFIG_HOSTAP=y
> -CONFIG_INPUT_POLLDEV=y
> -CONFIG_INPUT_EVDEV=y
> -CONFIG_KEYBOARD_GPIO=y
> -# CONFIG_INPUT_MOUSE is not set
> -CONFIG_INPUT_TOUCHSCREEN=y
> -CONFIG_TOUCHSCREEN_EGALAX=y
> -CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH=y
> -CONFIG_TOUCHSCREEN_ELAN=y
> -CONFIG_TOUCHSCREEN_MAX11801=y
> -CONFIG_INPUT_MISC=y
> -CONFIG_INPUT_UINPUT=y
> -CONFIG_INPUT_ISL29023=y
> -CONFIG_VT_HW_CONSOLE_BINDING=y
> -CONFIG_SERIAL_IMX=y
> -CONFIG_SERIAL_IMX_CONSOLE=y
> -CONFIG_FSL_OTP=y
> -CONFIG_HW_RANDOM=y
> -CONFIG_MXS_VIIM=y
> -CONFIG_I2C=y
> -CONFIG_I2C_CHARDEV=y
> -CONFIG_I2C_IMX=y
> -CONFIG_SPI=y
> -CONFIG_SPI_IMX=y
> -CONFIG_GPIO_SYSFS=y
> -CONFIG_SABRESD_MAX8903=y
> -CONFIG_SENSORS_MAX17135=y
> -CONFIG_SENSORS_MAG3110=y
> -# CONFIG_MXC_MMA8450 is not set
> -CONFIG_WATCHDOG=y
> -CONFIG_WATCHDOG_NOWAYOUT=y
> -CONFIG_IMX2_WDT=y
> -CONFIG_MFD_WM8994=y
> -CONFIG_MFD_PFUZE=y
> -CONFIG_MFD_MAX17135=y
> -CONFIG_REGULATOR=y
> -CONFIG_REGULATOR_FIXED_VOLTAGE=y
> -CONFIG_REGULATOR_PFUZE100=y
> -CONFIG_REGULATOR_MAX17135=y
> -CONFIG_MEDIA_SUPPORT=y
> -CONFIG_VIDEO_DEV=y
> -# CONFIG_RC_CORE is not set
> -# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
> -CONFIG_VIDEO_MXC_CAMERA=m
> -CONFIG_MXC_CAMERA_OV3640=m
> -CONFIG_MXC_CAMERA_OV5640=m
> -CONFIG_MXC_CAMERA_OV8820_MIPI=m
> -CONFIG_MXC_CAMERA_OV5642=m
> -CONFIG_MXC_TVIN_ADV7180=m
> -CONFIG_MXC_CAMERA_OV5640_MIPI=m
> -CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m
> -CONFIG_USB_VIDEO_CLASS=m
> -# CONFIG_RADIO_ADAPTERS is not set
> -CONFIG_DRM=m
> -CONFIG_DRM_VIVANTE=m
> -CONFIG_FB=y
> -CONFIG_BACKLIGHT_LCD_SUPPORT=y
> -# CONFIG_LCD_CLASS_DEVICE is not set
> -CONFIG_BACKLIGHT_CLASS_DEVICE=y
> -# CONFIG_BACKLIGHT_GENERIC is not set
> -CONFIG_BACKLIGHT_PWM=y
> -CONFIG_FB_MXC_LDB=y
> -CONFIG_FB_MXC_MIPI_DSI=y
> -CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
> -CONFIG_FB_MXC_EINK_PANEL=y
> -CONFIG_FB_MXC_HDMI=y
> -CONFIG_FRAMEBUFFER_CONSOLE=y
> -CONFIG_FONTS=y
> -CONFIG_FONT_8x16=y
> -CONFIG_LOGO=y
> -CONFIG_SOUND=y
> -CONFIG_SND=y
> -CONFIG_SND_USB_AUDIO=y
> -CONFIG_SND_SOC=y
> -CONFIG_SND_IMX_SOC=y
> -CONFIG_SND_SOC_IMX_SGTL5000=y
> -CONFIG_SND_SOC_IMX_WM8962=y
> -CONFIG_SND_SOC_IMX_CS42888=y
> -CONFIG_SND_SOC_IMX_SPDIF=y
> -CONFIG_SND_SOC_IMX_HDMI=y
> -CONFIG_HIDRAW=y
> -CONFIG_HID_A4TECH=m
> -CONFIG_HID_APPLE=m
> -CONFIG_HID_BELKIN=m
> -CONFIG_HID_CHERRY=m
> -CONFIG_HID_CHICONY=m
> -CONFIG_HID_CYPRESS=m
> -CONFIG_HID_EZKEY=m
> -CONFIG_HID_GYRATION=m
> -CONFIG_HID_LOGITECH=m
> -CONFIG_HID_MICROSOFT=m
> -CONFIG_HID_MONTEREY=m
> -CONFIG_HID_PANTHERLORD=m
> -CONFIG_HID_PETALYNX=m
> -CONFIG_HID_SAMSUNG=m
> -CONFIG_HID_SONY=m
> -CONFIG_HID_SUNPLUS=m
> -CONFIG_USB=y
> -# CONFIG_USB_DEVICE_CLASS is not set
> -CONFIG_USB_SUSPEND=y
> -# CONFIG_USB_OTG_WHITELIST is not set
> -CONFIG_USB_EHCI_HCD=y
> -CONFIG_USB_EHCI_ARC=y
> -CONFIG_USB_EHCI_ROOT_HUB_TT=y
> -# CONFIG_USB_EHCI_TT_NEWSCHED is not set
> -CONFIG_USB_STORAGE=y
> -CONFIG_USB_GADGET=y
> -CONFIG_USB_AUDIO=m
> -CONFIG_USB_ETH=m
> -CONFIG_USB_FILE_STORAGE=m
> -CONFIG_USB_G_SERIAL=m
> -CONFIG_MXC_OTG=y
> -CONFIG_MMC=y
> -CONFIG_MMC_UNSAFE_RESUME=y
> -CONFIG_MMC_SDHCI=y
> -CONFIG_MMC_SDHCI_PLTFM=y
> -CONFIG_MMC_SDHCI_ESDHC_IMX=y
> -CONFIG_NEW_LEDS=y
> -CONFIG_LEDS_CLASS=y
> -CONFIG_LEDS_GPIO=y
> -CONFIG_LEDS_TRIGGERS=y
> -CONFIG_LEDS_TRIGGER_GPIO=y
> -CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
> -CONFIG_RTC_CLASS=y
> -CONFIG_RTC_INTF_DEV_UIE_EMUL=y
> -CONFIG_RTC_DRV_SNVS=y
> -CONFIG_DMADEVICES=y
> -CONFIG_MXC_PXP_V2=y
> -CONFIG_IMX_SDMA=y
> -CONFIG_MXC_IPU=y
> -# CONFIG_MXC_HMP4E is not set
> -# CONFIG_MXC_HWEVENT is not set
> -CONFIG_MXC_ASRC=y
> -CONFIG_MXC_MLB150=m
> -CONFIG_MXC_GPU_VIV=y
> -CONFIG_MXC_MIPI_CSI2=y
> -CONFIG_EXT2_FS=y
> -CONFIG_EXT3_FS=y
> -# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
> -CONFIG_EXT4_FS=y
> -CONFIG_AUTOFS4_FS=m
> -CONFIG_MSDOS_FS=y
> -CONFIG_VFAT_FS=y
> -CONFIG_TMPFS=y
> -CONFIG_JFFS2_FS=y
> -CONFIG_UBIFS_FS=y
> -CONFIG_CRAMFS=y
> -CONFIG_NFS_FS=y
> -CONFIG_NFS_V3=y
> -CONFIG_ROOT_NFS=y
> -CONFIG_PARTITION_ADVANCED=y
> -CONFIG_EFI_PARTITION=y
> -CONFIG_NLS_CODEPAGE_437=y
> -CONFIG_NLS_ASCII=m
> -CONFIG_NLS_ISO8859_1=y
> -CONFIG_NLS_UTF8=m
> -CONFIG_MAGIC_SYSRQ=y
> -CONFIG_DEBUG_FS=y
> -CONFIG_SYSCTL_SYSCALL_CHECK=y
> -# CONFIG_EVENT_POWER_TRACING_DEPRECATED is not set
> -CONFIG_FTRACE=y
> -# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
> -CONFIG_CRYPTO_TEST=m
> -CONFIG_CRYPTO_CCM=y
> -CONFIG_CRYPTO_GCM=y
> -CONFIG_CRYPTO_CBC=y
> -CONFIG_CRYPTO_CTS=y
> -CONFIG_CRYPTO_LRW=y
> -CONFIG_CRYPTO_PCBC=y
> -CONFIG_CRYPTO_XTS=y
> -CONFIG_CRYPTO_DES=y
> -# CONFIG_CRYPTO_ANSI_CPRNG is not set
> -CONFIG_CRYPTO_DEV_FSL_CAAM=y
> -CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
> -CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
> -CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
> -CONFIG_CRC_CCITT=m
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/mx6s/defconfig b/recipes-kernel/linux/linux-imx-3.0.35/mx6s/defconfig
> deleted file mode 100644
> index b8f88f7..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/mx6s/defconfig
> +++ /dev/null
> @@ -1,267 +0,0 @@
> -CONFIG_ARM_PATCH_PHYS_VIRT=y
> -CONFIG_EXPERIMENTAL=y
> -CONFIG_SYSVIPC=y
> -CONFIG_IKCONFIG=y
> -CONFIG_IKCONFIG_PROC=y
> -CONFIG_LOG_BUF_SHIFT=14
> -CONFIG_CGROUPS=y
> -CONFIG_EMBEDDED=y
> -CONFIG_PERF_EVENTS=y
> -CONFIG_KPROBES=y
> -CONFIG_MODULES=y
> -CONFIG_MODULE_UNLOAD=y
> -CONFIG_MODULE_FORCE_UNLOAD=y
> -CONFIG_MODVERSIONS=y
> -# CONFIG_BLK_DEV_BSG is not set
> -CONFIG_ARCH_MXC=y
> -CONFIG_GPIO_PCA953X=y
> -CONFIG_ARCH_MX6=y
> -CONFIG_FORCE_MAX_ZONEORDER=14
> -CONFIG_MACH_MX6Q_ARM2=y
> -CONFIG_MACH_MX6SL_ARM2=y
> -CONFIG_MACH_MX6SL_EVK=y
> -CONFIG_MACH_MX6Q_SABRESD=y
> -CONFIG_USB_EHCI_ARC_H1=y
> -CONFIG_MX6_INTER_LDO_BYPASS=y
> -CONFIG_MXC_PWM=y
> -CONFIG_CLK_DEBUG=y
> -CONFIG_DMA_ZONE_SIZE=184
> -CONFIG_ARM_ERRATA_743622=y
> -CONFIG_ARM_ERRATA_754322=y
> -CONFIG_NO_HZ=y
> -CONFIG_HIGH_RES_TIMERS=y
> -CONFIG_VMSPLIT_2G=y
> -CONFIG_PREEMPT=y
> -CONFIG_AEABI=y
> -# CONFIG_OABI_COMPAT is not set
> -CONFIG_HIGHMEM=y
> -CONFIG_COMPACTION=y
> -CONFIG_KSM=y
> -CONFIG_ZBOOT_ROM_TEXT=0x0
> -CONFIG_ZBOOT_ROM_BSS=0x0
> -CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 ip=off"
> -CONFIG_AUTO_ZRELADDR=y
> -CONFIG_CPU_FREQ=y
> -CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y
> -CONFIG_CPU_FREQ_GOV_POWERSAVE=y
> -CONFIG_CPU_FREQ_GOV_USERSPACE=y
> -# CONFIG_CPU_FREQ_IMX is not set
> -CONFIG_VFP=y
> -CONFIG_NEON=y
> -# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
> -CONFIG_SUSPEND_DEVICE_TIME_DEBUG=y
> -CONFIG_PM_RUNTIME=y
> -CONFIG_PM_DEBUG=y
> -CONFIG_APM_EMULATION=y
> -CONFIG_NET=y
> -CONFIG_PACKET=y
> -CONFIG_UNIX=y
> -CONFIG_INET=y
> -CONFIG_IP_MULTICAST=y
> -CONFIG_IP_PNP=y
> -CONFIG_IP_PNP_DHCP=y
> -CONFIG_IP_PNP_BOOTP=y
> -# CONFIG_INET_LRO is not set
> -# CONFIG_IPV6 is not set
> -CONFIG_NETFILTER=y
> -CONFIG_LLC2=y
> -CONFIG_CAN=y
> -CONFIG_CAN_RAW=y
> -CONFIG_CAN_BCM=y
> -CONFIG_CAN_VCAN=y
> -CONFIG_CAN_FLEXCAN=y
> -CONFIG_BT=y
> -CONFIG_BT_L2CAP=y
> -CONFIG_BT_SCO=y
> -CONFIG_BT_RFCOMM=y
> -CONFIG_BT_RFCOMM_TTY=y
> -CONFIG_BT_BNEP=y
> -CONFIG_BT_BNEP_MC_FILTER=y
> -CONFIG_BT_BNEP_PROTO_FILTER=y
> -CONFIG_BT_HIDP=y
> -CONFIG_BT_HCIBTUSB=y
> -CONFIG_BT_HCIUART=y
> -CONFIG_BT_HCIUART_ATH3K=y
> -CONFIG_BT_HCIVHCI=y
> -CONFIG_CFG80211=y
> -CONFIG_RFKILL=y
> -CONFIG_RFKILL_INPUT=y
> -CONFIG_UEVENT_HELPER_PATH=""
> -CONFIG_DEVTMPFS=y
> -CONFIG_DEVTMPFS_MOUNT=y
> -CONFIG_CONNECTOR=y
> -CONFIG_MTD=y
> -CONFIG_MTD_CMDLINE_PARTS=y
> -CONFIG_MTD_CHAR=y
> -CONFIG_MTD_BLOCK=y
> -CONFIG_MTD_M25P80=y
> -CONFIG_MTD_NAND=y
> -CONFIG_MTD_UBI=y
> -CONFIG_BLK_DEV_LOOP=y
> -CONFIG_MISC_DEVICES=y
> -CONFIG_MXS_PERFMON=m
> -CONFIG_BLK_DEV_SD=y
> -CONFIG_SCSI_MULTI_LUN=y
> -CONFIG_ATA=y
> -# CONFIG_SATA_PMP is not set
> -CONFIG_SATA_AHCI_PLATFORM=y
> -CONFIG_NETDEVICES=y
> -CONFIG_MICREL_PHY=y
> -CONFIG_NET_ETHERNET=y
> -CONFIG_SMSC911X=y
> -# CONFIG_NETDEV_1000 is not set
> -# CONFIG_NETDEV_10000 is not set
> -CONFIG_ATH_COMMON=m
> -CONFIG_ATH6KL=m
> -CONFIG_HOSTAP=y
> -CONFIG_INPUT_POLLDEV=y
> -CONFIG_INPUT_EVDEV=y
> -CONFIG_KEYBOARD_GPIO=y
> -CONFIG_KEYBOARD_IMX=y
> -# CONFIG_INPUT_MOUSE is not set
> -CONFIG_INPUT_TOUCHSCREEN=y
> -CONFIG_TOUCHSCREEN_EGALAX=y
> -CONFIG_TOUCHSCREEN_ELAN=y
> -CONFIG_INPUT_MISC=y
> -CONFIG_INPUT_UINPUT=y
> -CONFIG_INPUT_ISL29023=y
> -CONFIG_SERIAL_IMX=y
> -CONFIG_SERIAL_IMX_CONSOLE=y
> -CONFIG_FSL_OTP=y
> -CONFIG_HW_RANDOM=y
> -CONFIG_HW_RANDOM_FSL_RNGC=y
> -CONFIG_MXS_VIIM=y
> -CONFIG_I2C=y
> -CONFIG_I2C_CHARDEV=y
> -CONFIG_I2C_IMX=y
> -CONFIG_SPI=y
> -CONFIG_SPI_IMX=y
> -CONFIG_GPIO_SYSFS=y
> -CONFIG_SABRESD_MAX8903=y
> -CONFIG_SENSORS_MAX17135=y
> -CONFIG_SENSORS_MAG3110=y
> -# CONFIG_MXC_MMA8451 is not set
> -CONFIG_WATCHDOG=y
> -CONFIG_WATCHDOG_NOWAYOUT=y
> -CONFIG_IMX2_WDT=y
> -CONFIG_MFD_WM8994=y
> -CONFIG_MFD_PFUZE=y
> -CONFIG_MFD_MAX17135=y
> -CONFIG_REGULATOR=y
> -CONFIG_REGULATOR_FIXED_VOLTAGE=y
> -CONFIG_REGULATOR_PFUZE100=y
> -CONFIG_REGULATOR_MAX17135=y
> -CONFIG_MEDIA_SUPPORT=y
> -CONFIG_VIDEO_DEV=y
> -# CONFIG_RC_CORE is not set
> -# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
> -CONFIG_VIDEO_MXC_CSI_CAMERA=y
> -CONFIG_MXC_CAMERA_OV5640=y
> -CONFIG_VIDEO_MXC_PXP_V4L2=y
> -CONFIG_USB_VIDEO_CLASS=m
> -# CONFIG_RADIO_ADAPTERS is not set
> -CONFIG_FB=y
> -CONFIG_BACKLIGHT_LCD_SUPPORT=y
> -# CONFIG_LCD_CLASS_DEVICE is not set
> -CONFIG_BACKLIGHT_CLASS_DEVICE=y
> -# CONFIG_BACKLIGHT_GENERIC is not set
> -CONFIG_BACKLIGHT_PWM=y
> -CONFIG_FB_MXC_SEIKO_WVGA_SYNC_PANEL=y
> -CONFIG_FB_MXC_SII902X_ELCDIF=y
> -CONFIG_FB_MXC_EINK_PANEL=y
> -CONFIG_FB_MXC_ELCDIF_FB=y
> -CONFIG_FRAMEBUFFER_CONSOLE=y
> -CONFIG_FONTS=y
> -CONFIG_FONT_8x16=y
> -CONFIG_LOGO=y
> -CONFIG_SOUND=y
> -CONFIG_SND=y
> -CONFIG_SND_USB_AUDIO=y
> -CONFIG_SND_SOC=y
> -CONFIG_SND_IMX_SOC=y
> -CONFIG_SND_SOC_IMX_SGTL5000=y
> -CONFIG_SND_SOC_IMX_WM8958=y
> -CONFIG_SND_SOC_IMX_WM8962=y
> -CONFIG_SND_SOC_IMX_CS42888=y
> -CONFIG_SND_SOC_IMX_SPDIF=y
> -CONFIG_SND_SOC_IMX_HDMI=y
> -CONFIG_HIDRAW=y
> -CONFIG_HID_A4TECH=m
> -CONFIG_HID_APPLE=m
> -CONFIG_HID_BELKIN=m
> -CONFIG_HID_CHERRY=m
> -CONFIG_HID_CHICONY=m
> -CONFIG_HID_CYPRESS=m
> -CONFIG_HID_EZKEY=m
> -CONFIG_HID_GYRATION=m
> -CONFIG_HID_LOGITECH=m
> -CONFIG_HID_MICROSOFT=m
> -CONFIG_HID_MONTEREY=m
> -CONFIG_HID_PANTHERLORD=m
> -CONFIG_HID_PETALYNX=m
> -CONFIG_HID_SAMSUNG=m
> -CONFIG_HID_SONY=m
> -CONFIG_HID_SUNPLUS=m
> -CONFIG_USB=y
> -# CONFIG_USB_DEVICE_CLASS is not set
> -CONFIG_USB_SUSPEND=y
> -# CONFIG_USB_OTG_WHITELIST is not set
> -CONFIG_USB_EHCI_HCD=y
> -CONFIG_USB_EHCI_ARC=y
> -CONFIG_USB_EHCI_ROOT_HUB_TT=y
> -# CONFIG_USB_EHCI_TT_NEWSCHED is not set
> -CONFIG_USB_STORAGE=y
> -CONFIG_USB_GADGET=y
> -CONFIG_USB_AUDIO=m
> -CONFIG_USB_ETH=m
> -CONFIG_USB_FILE_STORAGE=m
> -CONFIG_USB_G_SERIAL=m
> -CONFIG_MXC_OTG=y
> -CONFIG_MMC=y
> -CONFIG_MMC_UNSAFE_RESUME=y
> -CONFIG_MMC_SDHCI=y
> -CONFIG_MMC_SDHCI_PLTFM=y
> -CONFIG_MMC_SDHCI_ESDHC_IMX=y
> -CONFIG_NEW_LEDS=y
> -CONFIG_LEDS_CLASS=y
> -CONFIG_RTC_CLASS=y
> -CONFIG_RTC_INTF_DEV_UIE_EMUL=y
> -CONFIG_RTC_DRV_SNVS=y
> -CONFIG_DMADEVICES=y
> -CONFIG_MXC_PXP_V2=y
> -CONFIG_IMX_SDMA=y
> -# CONFIG_MXC_HMP4E is not set
> -# CONFIG_MXC_HWEVENT is not set
> -CONFIG_MXC_ASRC=y
> -CONFIG_MXC_MLB150=m
> -CONFIG_MXC_GPU_VIV=y
> -CONFIG_MXC_MIPI_CSI2=y
> -CONFIG_EXT2_FS=y
> -CONFIG_EXT3_FS=y
> -# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
> -CONFIG_EXT4_FS=y
> -CONFIG_AUTOFS4_FS=m
> -CONFIG_MSDOS_FS=y
> -CONFIG_VFAT_FS=y
> -CONFIG_TMPFS=y
> -CONFIG_JFFS2_FS=y
> -CONFIG_UBIFS_FS=y
> -CONFIG_CRAMFS=y
> -CONFIG_NFS_FS=y
> -CONFIG_NFS_V3=y
> -CONFIG_ROOT_NFS=y
> -CONFIG_PARTITION_ADVANCED=y
> -CONFIG_EFI_PARTITION=y
> -CONFIG_NLS_CODEPAGE_437=y
> -CONFIG_NLS_ASCII=m
> -CONFIG_NLS_ISO8859_1=y
> -CONFIG_NLS_UTF8=m
> -CONFIG_DEBUG_FS=y
> -CONFIG_SYSCTL_SYSCALL_CHECK=y
> -CONFIG_FTRACE=y
> -CONFIG_CRYPTO_AUTHENC=m
> -CONFIG_CRYPTO_TEST=m
> -CONFIG_CRYPTO_CBC=y
> -# CONFIG_CRYPTO_ANSI_CPRNG is not set
> -CONFIG_CRYPTO_DEV_DCP=y
> -CONFIG_CRC_CCITT=m
> diff --git a/recipes-kernel/linux/linux-imx-3.0.35/mx6sl/defconfig b/recipes-kernel/linux/linux-imx-3.0.35/mx6sl/defconfig
> deleted file mode 100644
> index b8f88f7..0000000
> --- a/recipes-kernel/linux/linux-imx-3.0.35/mx6sl/defconfig
> +++ /dev/null
> @@ -1,267 +0,0 @@
> -CONFIG_ARM_PATCH_PHYS_VIRT=y
> -CONFIG_EXPERIMENTAL=y
> -CONFIG_SYSVIPC=y
> -CONFIG_IKCONFIG=y
> -CONFIG_IKCONFIG_PROC=y
> -CONFIG_LOG_BUF_SHIFT=14
> -CONFIG_CGROUPS=y
> -CONFIG_EMBEDDED=y
> -CONFIG_PERF_EVENTS=y
> -CONFIG_KPROBES=y
> -CONFIG_MODULES=y
> -CONFIG_MODULE_UNLOAD=y
> -CONFIG_MODULE_FORCE_UNLOAD=y
> -CONFIG_MODVERSIONS=y
> -# CONFIG_BLK_DEV_BSG is not set
> -CONFIG_ARCH_MXC=y
> -CONFIG_GPIO_PCA953X=y
> -CONFIG_ARCH_MX6=y
> -CONFIG_FORCE_MAX_ZONEORDER=14
> -CONFIG_MACH_MX6Q_ARM2=y
> -CONFIG_MACH_MX6SL_ARM2=y
> -CONFIG_MACH_MX6SL_EVK=y
> -CONFIG_MACH_MX6Q_SABRESD=y
> -CONFIG_USB_EHCI_ARC_H1=y
> -CONFIG_MX6_INTER_LDO_BYPASS=y
> -CONFIG_MXC_PWM=y
> -CONFIG_CLK_DEBUG=y
> -CONFIG_DMA_ZONE_SIZE=184
> -CONFIG_ARM_ERRATA_743622=y
> -CONFIG_ARM_ERRATA_754322=y
> -CONFIG_NO_HZ=y
> -CONFIG_HIGH_RES_TIMERS=y
> -CONFIG_VMSPLIT_2G=y
> -CONFIG_PREEMPT=y
> -CONFIG_AEABI=y
> -# CONFIG_OABI_COMPAT is not set
> -CONFIG_HIGHMEM=y
> -CONFIG_COMPACTION=y
> -CONFIG_KSM=y
> -CONFIG_ZBOOT_ROM_TEXT=0x0
> -CONFIG_ZBOOT_ROM_BSS=0x0
> -CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 ip=off"
> -CONFIG_AUTO_ZRELADDR=y
> -CONFIG_CPU_FREQ=y
> -CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y
> -CONFIG_CPU_FREQ_GOV_POWERSAVE=y
> -CONFIG_CPU_FREQ_GOV_USERSPACE=y
> -# CONFIG_CPU_FREQ_IMX is not set
> -CONFIG_VFP=y
> -CONFIG_NEON=y
> -# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
> -CONFIG_SUSPEND_DEVICE_TIME_DEBUG=y
> -CONFIG_PM_RUNTIME=y
> -CONFIG_PM_DEBUG=y
> -CONFIG_APM_EMULATION=y
> -CONFIG_NET=y
> -CONFIG_PACKET=y
> -CONFIG_UNIX=y
> -CONFIG_INET=y
> -CONFIG_IP_MULTICAST=y
> -CONFIG_IP_PNP=y
> -CONFIG_IP_PNP_DHCP=y
> -CONFIG_IP_PNP_BOOTP=y
> -# CONFIG_INET_LRO is not set
> -# CONFIG_IPV6 is not set
> -CONFIG_NETFILTER=y
> -CONFIG_LLC2=y
> -CONFIG_CAN=y
> -CONFIG_CAN_RAW=y
> -CONFIG_CAN_BCM=y
> -CONFIG_CAN_VCAN=y
> -CONFIG_CAN_FLEXCAN=y
> -CONFIG_BT=y
> -CONFIG_BT_L2CAP=y
> -CONFIG_BT_SCO=y
> -CONFIG_BT_RFCOMM=y
> -CONFIG_BT_RFCOMM_TTY=y
> -CONFIG_BT_BNEP=y
> -CONFIG_BT_BNEP_MC_FILTER=y
> -CONFIG_BT_BNEP_PROTO_FILTER=y
> -CONFIG_BT_HIDP=y
> -CONFIG_BT_HCIBTUSB=y
> -CONFIG_BT_HCIUART=y
> -CONFIG_BT_HCIUART_ATH3K=y
> -CONFIG_BT_HCIVHCI=y
> -CONFIG_CFG80211=y
> -CONFIG_RFKILL=y
> -CONFIG_RFKILL_INPUT=y
> -CONFIG_UEVENT_HELPER_PATH=""
> -CONFIG_DEVTMPFS=y
> -CONFIG_DEVTMPFS_MOUNT=y
> -CONFIG_CONNECTOR=y
> -CONFIG_MTD=y
> -CONFIG_MTD_CMDLINE_PARTS=y
> -CONFIG_MTD_CHAR=y
> -CONFIG_MTD_BLOCK=y
> -CONFIG_MTD_M25P80=y
> -CONFIG_MTD_NAND=y
> -CONFIG_MTD_UBI=y
> -CONFIG_BLK_DEV_LOOP=y
> -CONFIG_MISC_DEVICES=y
> -CONFIG_MXS_PERFMON=m
> -CONFIG_BLK_DEV_SD=y
> -CONFIG_SCSI_MULTI_LUN=y
> -CONFIG_ATA=y
> -# CONFIG_SATA_PMP is not set
> -CONFIG_SATA_AHCI_PLATFORM=y
> -CONFIG_NETDEVICES=y
> -CONFIG_MICREL_PHY=y
> -CONFIG_NET_ETHERNET=y
> -CONFIG_SMSC911X=y
> -# CONFIG_NETDEV_1000 is not set
> -# CONFIG_NETDEV_10000 is not set
> -CONFIG_ATH_COMMON=m
> -CONFIG_ATH6KL=m
> -CONFIG_HOSTAP=y
> -CONFIG_INPUT_POLLDEV=y
> -CONFIG_INPUT_EVDEV=y
> -CONFIG_KEYBOARD_GPIO=y
> -CONFIG_KEYBOARD_IMX=y
> -# CONFIG_INPUT_MOUSE is not set
> -CONFIG_INPUT_TOUCHSCREEN=y
> -CONFIG_TOUCHSCREEN_EGALAX=y
> -CONFIG_TOUCHSCREEN_ELAN=y
> -CONFIG_INPUT_MISC=y
> -CONFIG_INPUT_UINPUT=y
> -CONFIG_INPUT_ISL29023=y
> -CONFIG_SERIAL_IMX=y
> -CONFIG_SERIAL_IMX_CONSOLE=y
> -CONFIG_FSL_OTP=y
> -CONFIG_HW_RANDOM=y
> -CONFIG_HW_RANDOM_FSL_RNGC=y
> -CONFIG_MXS_VIIM=y
> -CONFIG_I2C=y
> -CONFIG_I2C_CHARDEV=y
> -CONFIG_I2C_IMX=y
> -CONFIG_SPI=y
> -CONFIG_SPI_IMX=y
> -CONFIG_GPIO_SYSFS=y
> -CONFIG_SABRESD_MAX8903=y
> -CONFIG_SENSORS_MAX17135=y
> -CONFIG_SENSORS_MAG3110=y
> -# CONFIG_MXC_MMA8451 is not set
> -CONFIG_WATCHDOG=y
> -CONFIG_WATCHDOG_NOWAYOUT=y
> -CONFIG_IMX2_WDT=y
> -CONFIG_MFD_WM8994=y
> -CONFIG_MFD_PFUZE=y
> -CONFIG_MFD_MAX17135=y
> -CONFIG_REGULATOR=y
> -CONFIG_REGULATOR_FIXED_VOLTAGE=y
> -CONFIG_REGULATOR_PFUZE100=y
> -CONFIG_REGULATOR_MAX17135=y
> -CONFIG_MEDIA_SUPPORT=y
> -CONFIG_VIDEO_DEV=y
> -# CONFIG_RC_CORE is not set
> -# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
> -CONFIG_VIDEO_MXC_CSI_CAMERA=y
> -CONFIG_MXC_CAMERA_OV5640=y
> -CONFIG_VIDEO_MXC_PXP_V4L2=y
> -CONFIG_USB_VIDEO_CLASS=m
> -# CONFIG_RADIO_ADAPTERS is not set
> -CONFIG_FB=y
> -CONFIG_BACKLIGHT_LCD_SUPPORT=y
> -# CONFIG_LCD_CLASS_DEVICE is not set
> -CONFIG_BACKLIGHT_CLASS_DEVICE=y
> -# CONFIG_BACKLIGHT_GENERIC is not set
> -CONFIG_BACKLIGHT_PWM=y
> -CONFIG_FB_MXC_SEIKO_WVGA_SYNC_PANEL=y
> -CONFIG_FB_MXC_SII902X_ELCDIF=y
> -CONFIG_FB_MXC_EINK_PANEL=y
> -CONFIG_FB_MXC_ELCDIF_FB=y
> -CONFIG_FRAMEBUFFER_CONSOLE=y
> -CONFIG_FONTS=y
> -CONFIG_FONT_8x16=y
> -CONFIG_LOGO=y
> -CONFIG_SOUND=y
> -CONFIG_SND=y
> -CONFIG_SND_USB_AUDIO=y
> -CONFIG_SND_SOC=y
> -CONFIG_SND_IMX_SOC=y
> -CONFIG_SND_SOC_IMX_SGTL5000=y
> -CONFIG_SND_SOC_IMX_WM8958=y
> -CONFIG_SND_SOC_IMX_WM8962=y
> -CONFIG_SND_SOC_IMX_CS42888=y
> -CONFIG_SND_SOC_IMX_SPDIF=y
> -CONFIG_SND_SOC_IMX_HDMI=y
> -CONFIG_HIDRAW=y
> -CONFIG_HID_A4TECH=m
> -CONFIG_HID_APPLE=m
> -CONFIG_HID_BELKIN=m
> -CONFIG_HID_CHERRY=m
> -CONFIG_HID_CHICONY=m
> -CONFIG_HID_CYPRESS=m
> -CONFIG_HID_EZKEY=m
> -CONFIG_HID_GYRATION=m
> -CONFIG_HID_LOGITECH=m
> -CONFIG_HID_MICROSOFT=m
> -CONFIG_HID_MONTEREY=m
> -CONFIG_HID_PANTHERLORD=m
> -CONFIG_HID_PETALYNX=m
> -CONFIG_HID_SAMSUNG=m
> -CONFIG_HID_SONY=m
> -CONFIG_HID_SUNPLUS=m
> -CONFIG_USB=y
> -# CONFIG_USB_DEVICE_CLASS is not set
> -CONFIG_USB_SUSPEND=y
> -# CONFIG_USB_OTG_WHITELIST is not set
> -CONFIG_USB_EHCI_HCD=y
> -CONFIG_USB_EHCI_ARC=y
> -CONFIG_USB_EHCI_ROOT_HUB_TT=y
> -# CONFIG_USB_EHCI_TT_NEWSCHED is not set
> -CONFIG_USB_STORAGE=y
> -CONFIG_USB_GADGET=y
> -CONFIG_USB_AUDIO=m
> -CONFIG_USB_ETH=m
> -CONFIG_USB_FILE_STORAGE=m
> -CONFIG_USB_G_SERIAL=m
> -CONFIG_MXC_OTG=y
> -CONFIG_MMC=y
> -CONFIG_MMC_UNSAFE_RESUME=y
> -CONFIG_MMC_SDHCI=y
> -CONFIG_MMC_SDHCI_PLTFM=y
> -CONFIG_MMC_SDHCI_ESDHC_IMX=y
> -CONFIG_NEW_LEDS=y
> -CONFIG_LEDS_CLASS=y
> -CONFIG_RTC_CLASS=y
> -CONFIG_RTC_INTF_DEV_UIE_EMUL=y
> -CONFIG_RTC_DRV_SNVS=y
> -CONFIG_DMADEVICES=y
> -CONFIG_MXC_PXP_V2=y
> -CONFIG_IMX_SDMA=y
> -# CONFIG_MXC_HMP4E is not set
> -# CONFIG_MXC_HWEVENT is not set
> -CONFIG_MXC_ASRC=y
> -CONFIG_MXC_MLB150=m
> -CONFIG_MXC_GPU_VIV=y
> -CONFIG_MXC_MIPI_CSI2=y
> -CONFIG_EXT2_FS=y
> -CONFIG_EXT3_FS=y
> -# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
> -CONFIG_EXT4_FS=y
> -CONFIG_AUTOFS4_FS=m
> -CONFIG_MSDOS_FS=y
> -CONFIG_VFAT_FS=y
> -CONFIG_TMPFS=y
> -CONFIG_JFFS2_FS=y
> -CONFIG_UBIFS_FS=y
> -CONFIG_CRAMFS=y
> -CONFIG_NFS_FS=y
> -CONFIG_NFS_V3=y
> -CONFIG_ROOT_NFS=y
> -CONFIG_PARTITION_ADVANCED=y
> -CONFIG_EFI_PARTITION=y
> -CONFIG_NLS_CODEPAGE_437=y
> -CONFIG_NLS_ASCII=m
> -CONFIG_NLS_ISO8859_1=y
> -CONFIG_NLS_UTF8=m
> -CONFIG_DEBUG_FS=y
> -CONFIG_SYSCTL_SYSCALL_CHECK=y
> -CONFIG_FTRACE=y
> -CONFIG_CRYPTO_AUTHENC=m
> -CONFIG_CRYPTO_TEST=m
> -CONFIG_CRYPTO_CBC=y
> -# CONFIG_CRYPTO_ANSI_CPRNG is not set
> -CONFIG_CRYPTO_DEV_DCP=y
> -CONFIG_CRC_CCITT=m
> diff --git a/recipes-kernel/linux/linux-imx_3.0.35.bb b/recipes-kernel/linux/linux-imx_3.0.35.bb
> deleted file mode 100644
> index e2d808e..0000000
> --- a/recipes-kernel/linux/linux-imx_3.0.35.bb
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -# Copyright (C) 2011-2013 Freescale Semiconductor
> -# Released under the MIT license (see COPYING.MIT for the terms)
> -
> -include linux-imx.inc
> -
> -PR = "r38"
> -
> -COMPATIBLE_MACHINE = "(mx6)"
> -
> -# Revision of 4.1.0 branch
> -SRCREV = "bdde708ebfde4a8c1d3829578d3f6481a343533a"
> -LOCALVERSION = "-4.1.0+yocto"
> -SRCBRANCH = "imx_3.0.35_4.1.0"
> -
> -# Patches need for Yocto and not applied by Freescale when doing 4.1.0 branch
> -SRC_URI += "file://drm-vivante-Add-00-sufix-in-returned-bus-Id.patch \
> -            file://epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch \
> -            file://0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch \
> -            file://0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch \
> -            file://0003-ARM-7670-1-fix-the-memset-fix.patch \
> -            file://0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch \
> -            file://0005-ENGR00271359-Add-Multi-touch-support.patch \
> -            file://0006-Add-support-for-DVI-monitors.patch \
> -            file://0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch \
> -            file://ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch \
> -"
>
Daiane Angolini - March 13, 2014, 2:15 p.m.
On 13-03-2014 11:04, Otavio Salvador wrote:
> The 1.6 release cycle is focused in the 3.10.17-1.0.0 BSP and has no
> compromise in test and maintain the 3.0.35 compatibility. This does
> not mean the support as a whole will be dropped but no board in
> meta-fsl-arm BSP ought to use it.
>
> Users which need to use Freescale reference designs with 3.0.35 ought
> to keep using the Dora branch.
>
> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
> ---
>
> Changes in v2:
> - new patch
>
>   ...Fix-getrusage-related-build-failure-on-gl.patch |   43 -
>   ...fix-memset-related-crashes-caused-by-rece.patch |  259 -
>   .../0003-ARM-7670-1-fix-the-memset-fix.patch       |   87 -
>   ...6-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch |   43 -
>   ...0005-ENGR00271359-Add-Multi-touch-support.patch |   98 -
>   .../0006-Add-support-for-DVI-monitors.patch        |  227 -
>   ...6-board-mx6q_sabresd-Register-SDHC3-first.patch |   38 -
>   ...0-gpu-viante-4.6.9p13-kernel-part-integra.patch | 6261 --------------------
>   ...m-vivante-Add-00-sufix-in-returned-bus-Id.patch |   31 -
>   ...-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch |  143 -
>   .../linux/linux-imx-3.0.35/mx6dl/defconfig         |  301 -
>   .../linux/linux-imx-3.0.35/mx6q/defconfig          |  302 -
>   .../linux/linux-imx-3.0.35/mx6s/defconfig          |  267 -
>   .../linux/linux-imx-3.0.35/mx6sl/defconfig         |  267 -
>   recipes-kernel/linux/linux-imx_3.0.35.bb           |   26 -
>   15 files changed, 8393 deletions(-)
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0006-Add-support-for-DVI-monitors.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6dl/defconfig
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6q/defconfig
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6s/defconfig
>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6sl/defconfig
>   delete mode 100644 recipes-kernel/linux/linux-imx_3.0.35.bb


I'm OK with this patch, and I think it's the way to go now.

Could you, please, confirm any board from meta-fsl-arm-extra depends on 
this kernel anymore? (as I remember, its OK).

I'm sorry, I have already replied this email but I did not drop the 
diff, so my last email was blocked in moderation. Please, ignore that 
other one.
Otavio Salvador - March 13, 2014, 2:33 p.m.
On Thu, Mar 13, 2014 at 11:15 AM, Daiane Angolini
<daiane.angolini@freescale.com> wrote:
> On 13-03-2014 11:04, Otavio Salvador wrote:
>>
>> The 1.6 release cycle is focused in the 3.10.17-1.0.0 BSP and has no
>> compromise in test and maintain the 3.0.35 compatibility. This does
>> not mean the support as a whole will be dropped but no board in
>> meta-fsl-arm BSP ought to use it.
>>
>> Users which need to use Freescale reference designs with 3.0.35 ought
>> to keep using the Dora branch.
>>
>> Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
>> ---
>>
>> Changes in v2:
>> - new patch
>>
>>   ...Fix-getrusage-related-build-failure-on-gl.patch |   43 -
>>   ...fix-memset-related-crashes-caused-by-rece.patch |  259 -
>>   .../0003-ARM-7670-1-fix-the-memset-fix.patch       |   87 -
>>   ...6-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch |   43 -
>>   ...0005-ENGR00271359-Add-Multi-touch-support.patch |   98 -
>>   .../0006-Add-support-for-DVI-monitors.patch        |  227 -
>>   ...6-board-mx6q_sabresd-Register-SDHC3-first.patch |   38 -
>>   ...0-gpu-viante-4.6.9p13-kernel-part-integra.patch | 6261
>> --------------------
>>   ...m-vivante-Add-00-sufix-in-returned-bus-Id.patch |   31 -
>>   ...-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch |  143 -
>>   .../linux/linux-imx-3.0.35/mx6dl/defconfig         |  301 -
>>   .../linux/linux-imx-3.0.35/mx6q/defconfig          |  302 -
>>   .../linux/linux-imx-3.0.35/mx6s/defconfig          |  267 -
>>   .../linux/linux-imx-3.0.35/mx6sl/defconfig         |  267 -
>>   recipes-kernel/linux/linux-imx_3.0.35.bb           |   26 -
>>   15 files changed, 8393 deletions(-)
>>   delete mode 100644
>> recipes-kernel/linux/linux-imx-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
>>   delete mode 100644
>> recipes-kernel/linux/linux-imx-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
>>   delete mode 100644
>> recipes-kernel/linux/linux-imx-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
>>   delete mode 100644
>> recipes-kernel/linux/linux-imx-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
>>   delete mode 100644
>> recipes-kernel/linux/linux-imx-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
>>   delete mode 100644
>> recipes-kernel/linux/linux-imx-3.0.35/0006-Add-support-for-DVI-monitors.patch
>>   delete mode 100644
>> recipes-kernel/linux/linux-imx-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
>>   delete mode 100644
>> recipes-kernel/linux/linux-imx-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
>>   delete mode 100644
>> recipes-kernel/linux/linux-imx-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
>>   delete mode 100644
>> recipes-kernel/linux/linux-imx-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
>>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6dl/defconfig
>>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6q/defconfig
>>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6s/defconfig
>>   delete mode 100644 recipes-kernel/linux/linux-imx-3.0.35/mx6sl/defconfig
>>   delete mode 100644 recipes-kernel/linux/linux-imx_3.0.35.bb
>
>
>
> I'm OK with this patch, and I think it's the way to go now.

Great.

> Could you, please, confirm any board from meta-fsl-arm-extra depends on this
> kernel anymore? (as I remember, its OK).

Yes; last one was Congatec which I sent a patch to address it yesterday.

> I'm sorry, I have already replied this email but I did not drop the diff, so
> my last email was blocked in moderation. Please, ignore that other one.

Ooops; my fault and I ended accepting it.

Patch

diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch b/recipes-kernel/linux/linux-imx-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
deleted file mode 100644
index abc02c9..0000000
--- a/recipes-kernel/linux/linux-imx-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
+++ /dev/null
@@ -1,43 +0,0 @@ 
-From 503daf4789dd23e4dc1e16c256de0c163fc2bf87 Mon Sep 17 00:00:00 2001
-From: Markus Trippelsdorf <markus@trippelsdorf.de>
-Date: Wed, 4 Apr 2012 10:45:27 +0200
-Subject: [PATCH] perf tools: Fix getrusage() related build failure on glibc
- trunk
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-Organization: O.S. Systems Software LTDA.
-
-On a system running glibc trunk perf doesn't build:
-
-    CC builtin-sched.o
-builtin-sched.c: In function ‘get_cpu_usage_nsec_parent’: builtin-sched.c:399:16: error: storage size of ‘ru’ isn’t known builtin-sched.c:403:2: error: implicit declaration of function ‘getrusage’ [-Werror=implicit-function-declaration]
-    [...]
-
-Fix it by including sys/resource.h.
-
-Upstream-Status: Pending
-
-Signed-off-by: Markus Trippelsdorf <markus@trippelsdorf.de>
-Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
-Link: http://lkml.kernel.org/r/20120404084527.GA294@x4
-Signed-off-by: Ingo Molnar <mingo@kernel.org>
----
- tools/perf/builtin-sched.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
-index dcfe887..3632c2f 100644
---- a/tools/perf/builtin-sched.c
-+++ b/tools/perf/builtin-sched.c
-@@ -14,6 +14,7 @@
- #include "util/debug.h"
- 
- #include <sys/prctl.h>
-+#include <sys/resource.h>
- 
- #include <semaphore.h>
- #include <pthread.h>
--- 
-1.8.4.rc3
-
diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch b/recipes-kernel/linux/linux-imx-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
deleted file mode 100644
index 4c31e74..0000000
--- a/recipes-kernel/linux/linux-imx-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
+++ /dev/null
@@ -1,259 +0,0 @@ 
-From 2235b85f1c76d98b5f1e160cbd0a61a84c15e125 Mon Sep 17 00:00:00 2001
-From: Ivan Djelic <ivan.djelic@parrot.com>
-Date: Wed, 6 Mar 2013 20:09:27 +0100
-Subject: [PATCH] ARM: 7668/1: fix memset-related crashes caused by recent GCC
- (4.7.2) optimizations
-Organization: O.S. Systems Software LTDA.
-
-Recent GCC versions (e.g. GCC-4.7.2) perform optimizations based on
-assumptions about the implementation of memset and similar functions.
-The current ARM optimized memset code does not return the value of
-its first argument, as is usually expected from standard implementations.
-
-For instance in the following function:
-
-void debug_mutex_lock_common(struct mutex *lock, struct mutex_waiter *waiter)
-{
-	memset(waiter, MUTEX_DEBUG_INIT, sizeof(*waiter));
-	waiter->magic = waiter;
-	INIT_LIST_HEAD(&waiter->list);
-}
-
-compiled as:
-
-800554d0 <debug_mutex_lock_common>:
-800554d0:       e92d4008        push    {r3, lr}
-800554d4:       e1a00001        mov     r0, r1
-800554d8:       e3a02010        mov     r2, #16 ; 0x10
-800554dc:       e3a01011        mov     r1, #17 ; 0x11
-800554e0:       eb04426e        bl      80165ea0 <memset>
-800554e4:       e1a03000        mov     r3, r0
-800554e8:       e583000c        str     r0, [r3, #12]
-800554ec:       e5830000        str     r0, [r3]
-800554f0:       e5830004        str     r0, [r3, #4]
-800554f4:       e8bd8008        pop     {r3, pc}
-
-GCC assumes memset returns the value of pointer 'waiter' in register r0; causing
-register/memory corruptions.
-
-This patch fixes the return value of the assembly version of memset.
-It adds a 'mov' instruction and merges an additional load+store into
-existing load/store instructions.
-For ease of review, here is a breakdown of the patch into 4 simple steps:
-
-Step 1
-======
-Perform the following substitutions:
-ip -> r8, then
-r0 -> ip,
-and insert 'mov ip, r0' as the first statement of the function.
-At this point, we have a memset() implementation returning the proper result,
-but corrupting r8 on some paths (the ones that were using ip).
-
-Step 2
-======
-Make sure r8 is saved and restored when (! CALGN(1)+0) == 1:
-
-save r8:
--       str     lr, [sp, #-4]!
-+       stmfd   sp!, {r8, lr}
-
-and restore r8 on both exit paths:
--       ldmeqfd sp!, {pc}               @ Now <64 bytes to go.
-+       ldmeqfd sp!, {r8, pc}           @ Now <64 bytes to go.
-(...)
-        tst     r2, #16
-        stmneia ip!, {r1, r3, r8, lr}
--       ldr     lr, [sp], #4
-+       ldmfd   sp!, {r8, lr}
-
-Step 3
-======
-Make sure r8 is saved and restored when (! CALGN(1)+0) == 0:
-
-save r8:
--       stmfd   sp!, {r4-r7, lr}
-+       stmfd   sp!, {r4-r8, lr}
-
-and restore r8 on both exit paths:
-        bgt     3b
--       ldmeqfd sp!, {r4-r7, pc}
-+       ldmeqfd sp!, {r4-r8, pc}
-(...)
-        tst     r2, #16
-        stmneia ip!, {r4-r7}
--       ldmfd   sp!, {r4-r7, lr}
-+       ldmfd   sp!, {r4-r8, lr}
-
-Step 4
-======
-Rewrite register list "r4-r7, r8" as "r4-r8".
-
-Upstream-Status: Pending
-
-Signed-off-by: Ivan Djelic <ivan.djelic@parrot.com>
-Reviewed-by: Nicolas Pitre <nico@linaro.org>
-Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
-Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-(cherry picked from commit 455bd4c430b0c0a361f38e8658a0d6cb469942b5)
----
- arch/arm/lib/memset.S | 85 ++++++++++++++++++++++++++-------------------------
- 1 file changed, 44 insertions(+), 41 deletions(-)
-
-diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
-index 650d592..d912e73 100644
---- a/arch/arm/lib/memset.S
-+++ b/arch/arm/lib/memset.S
-@@ -19,9 +19,9 @@
- 1:	subs	r2, r2, #4		@ 1 do we have enough
- 	blt	5f			@ 1 bytes to align with?
- 	cmp	r3, #2			@ 1
--	strltb	r1, [r0], #1		@ 1
--	strleb	r1, [r0], #1		@ 1
--	strb	r1, [r0], #1		@ 1
-+	strltb	r1, [ip], #1		@ 1
-+	strleb	r1, [ip], #1		@ 1
-+	strb	r1, [ip], #1		@ 1
- 	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))
- /*
-  * The pointer is now aligned and the length is adjusted.  Try doing the
-@@ -29,10 +29,14 @@
-  */
- 
- ENTRY(memset)
--	ands	r3, r0, #3		@ 1 unaligned?
-+/*
-+ * Preserve the contents of r0 for the return value.
-+ */
-+	mov	ip, r0
-+	ands	r3, ip, #3		@ 1 unaligned?
- 	bne	1b			@ 1
- /*
-- * we know that the pointer in r0 is aligned to a word boundary.
-+ * we know that the pointer in ip is aligned to a word boundary.
-  */
- 	orr	r1, r1, r1, lsl #8
- 	orr	r1, r1, r1, lsl #16
-@@ -43,29 +47,28 @@ ENTRY(memset)
- #if ! CALGN(1)+0
- 
- /*
-- * We need an extra register for this loop - save the return address and
-- * use the LR
-+ * We need 2 extra registers for this loop - use r8 and the LR
-  */
--	str	lr, [sp, #-4]!
--	mov	ip, r1
-+	stmfd	sp!, {r8, lr}
-+	mov	r8, r1
- 	mov	lr, r1
- 
- 2:	subs	r2, r2, #64
--	stmgeia	r0!, {r1, r3, ip, lr}	@ 64 bytes at a time.
--	stmgeia	r0!, {r1, r3, ip, lr}
--	stmgeia	r0!, {r1, r3, ip, lr}
--	stmgeia	r0!, {r1, r3, ip, lr}
-+	stmgeia	ip!, {r1, r3, r8, lr}	@ 64 bytes at a time.
-+	stmgeia	ip!, {r1, r3, r8, lr}
-+	stmgeia	ip!, {r1, r3, r8, lr}
-+	stmgeia	ip!, {r1, r3, r8, lr}
- 	bgt	2b
--	ldmeqfd	sp!, {pc}		@ Now <64 bytes to go.
-+	ldmeqfd	sp!, {r8, pc}		@ Now <64 bytes to go.
- /*
-  * No need to correct the count; we're only testing bits from now on
-  */
- 	tst	r2, #32
--	stmneia	r0!, {r1, r3, ip, lr}
--	stmneia	r0!, {r1, r3, ip, lr}
-+	stmneia	ip!, {r1, r3, r8, lr}
-+	stmneia	ip!, {r1, r3, r8, lr}
- 	tst	r2, #16
--	stmneia	r0!, {r1, r3, ip, lr}
--	ldr	lr, [sp], #4
-+	stmneia	ip!, {r1, r3, r8, lr}
-+	ldmfd	sp!, {r8, lr}
- 
- #else
- 
-@@ -74,54 +77,54 @@ ENTRY(memset)
-  * whole cache lines at once.
-  */
- 
--	stmfd	sp!, {r4-r7, lr}
-+	stmfd	sp!, {r4-r8, lr}
- 	mov	r4, r1
- 	mov	r5, r1
- 	mov	r6, r1
- 	mov	r7, r1
--	mov	ip, r1
-+	mov	r8, r1
- 	mov	lr, r1
- 
- 	cmp	r2, #96
--	tstgt	r0, #31
-+	tstgt	ip, #31
- 	ble	3f
- 
--	and	ip, r0, #31
--	rsb	ip, ip, #32
--	sub	r2, r2, ip
--	movs	ip, ip, lsl #(32 - 4)
--	stmcsia	r0!, {r4, r5, r6, r7}
--	stmmiia	r0!, {r4, r5}
--	tst	ip, #(1 << 30)
--	mov	ip, r1
--	strne	r1, [r0], #4
-+	and	r8, ip, #31
-+	rsb	r8, r8, #32
-+	sub	r2, r2, r8
-+	movs	r8, r8, lsl #(32 - 4)
-+	stmcsia	ip!, {r4, r5, r6, r7}
-+	stmmiia	ip!, {r4, r5}
-+	tst	r8, #(1 << 30)
-+	mov	r8, r1
-+	strne	r1, [ip], #4
- 
- 3:	subs	r2, r2, #64
--	stmgeia	r0!, {r1, r3-r7, ip, lr}
--	stmgeia	r0!, {r1, r3-r7, ip, lr}
-+	stmgeia	ip!, {r1, r3-r8, lr}
-+	stmgeia	ip!, {r1, r3-r8, lr}
- 	bgt	3b
--	ldmeqfd	sp!, {r4-r7, pc}
-+	ldmeqfd	sp!, {r4-r8, pc}
- 
- 	tst	r2, #32
--	stmneia	r0!, {r1, r3-r7, ip, lr}
-+	stmneia	ip!, {r1, r3-r8, lr}
- 	tst	r2, #16
--	stmneia	r0!, {r4-r7}
--	ldmfd	sp!, {r4-r7, lr}
-+	stmneia	ip!, {r4-r7}
-+	ldmfd	sp!, {r4-r8, lr}
- 
- #endif
- 
- 4:	tst	r2, #8
--	stmneia	r0!, {r1, r3}
-+	stmneia	ip!, {r1, r3}
- 	tst	r2, #4
--	strne	r1, [r0], #4
-+	strne	r1, [ip], #4
- /*
-  * When we get here, we've got less than 4 bytes to zero.  We
-  * may have an unaligned pointer as well.
-  */
- 5:	tst	r2, #2
--	strneb	r1, [r0], #1
--	strneb	r1, [r0], #1
-+	strneb	r1, [ip], #1
-+	strneb	r1, [ip], #1
- 	tst	r2, #1
--	strneb	r1, [r0], #1
-+	strneb	r1, [ip], #1
- 	mov	pc, lr
- ENDPROC(memset)
--- 
-1.8.4.rc3
-
diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch b/recipes-kernel/linux/linux-imx-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
deleted file mode 100644
index b8d6f53..0000000
--- a/recipes-kernel/linux/linux-imx-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
+++ /dev/null
@@ -1,87 +0,0 @@ 
-From 2ba23fa6c4128febaaf57fe184420a7111caa237 Mon Sep 17 00:00:00 2001
-From: Nicolas Pitre <nicolas.pitre@linaro.org>
-Date: Tue, 12 Mar 2013 13:00:42 +0100
-Subject: [PATCH] ARM: 7670/1: fix the memset fix
-Organization: O.S. Systems Software LTDA.
-
-Commit 455bd4c430b0 ("ARM: 7668/1: fix memset-related crashes caused by
-recent GCC (4.7.2) optimizations") attempted to fix a compliance issue
-with the memset return value.  However the memset itself became broken
-by that patch for misaligned pointers.
-
-This fixes the above by branching over the entry code from the
-misaligned fixup code to avoid reloading the original pointer.
-
-Also, because the function entry alignment is wrong in the Thumb mode
-compilation, that fixup code is moved to the end.
-
-While at it, the entry instructions are slightly reworked to help dual
-issue pipelines.
-
-Upstream-Status: Pending
-
-Signed-off-by: Nicolas Pitre <nico@linaro.org>
-Tested-by: Alexander Holler <holler@ahsoftware.de>
-Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-(cherry picked from commit 418df63adac56841ef6b0f1fcf435bc64d4ed177)
----
- arch/arm/lib/memset.S | 33 +++++++++++++--------------------
- 1 file changed, 13 insertions(+), 20 deletions(-)
-
-diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
-index d912e73..94b0650 100644
---- a/arch/arm/lib/memset.S
-+++ b/arch/arm/lib/memset.S
-@@ -14,31 +14,15 @@
- 
- 	.text
- 	.align	5
--	.word	0
--
--1:	subs	r2, r2, #4		@ 1 do we have enough
--	blt	5f			@ 1 bytes to align with?
--	cmp	r3, #2			@ 1
--	strltb	r1, [ip], #1		@ 1
--	strleb	r1, [ip], #1		@ 1
--	strb	r1, [ip], #1		@ 1
--	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))
--/*
-- * The pointer is now aligned and the length is adjusted.  Try doing the
-- * memset again.
-- */
- 
- ENTRY(memset)
--/*
-- * Preserve the contents of r0 for the return value.
-- */
--	mov	ip, r0
--	ands	r3, ip, #3		@ 1 unaligned?
--	bne	1b			@ 1
-+	ands	r3, r0, #3		@ 1 unaligned?
-+	mov	ip, r0			@ preserve r0 as return value
-+	bne	6f			@ 1
- /*
-  * we know that the pointer in ip is aligned to a word boundary.
-  */
--	orr	r1, r1, r1, lsl #8
-+1:	orr	r1, r1, r1, lsl #8
- 	orr	r1, r1, r1, lsl #16
- 	mov	r3, r1
- 	cmp	r2, #16
-@@ -127,4 +111,13 @@ ENTRY(memset)
- 	tst	r2, #1
- 	strneb	r1, [ip], #1
- 	mov	pc, lr
-+
-+6:	subs	r2, r2, #4		@ 1 do we have enough
-+	blt	5b			@ 1 bytes to align with?
-+	cmp	r3, #2			@ 1
-+	strltb	r1, [ip], #1		@ 1
-+	strleb	r1, [ip], #1		@ 1
-+	strb	r1, [ip], #1		@ 1
-+	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))
-+	b	1b
- ENDPROC(memset)
--- 
-1.8.4.rc3
-
diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch b/recipes-kernel/linux/linux-imx-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
deleted file mode 100644
index 7316351..0000000
--- a/recipes-kernel/linux/linux-imx-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
+++ /dev/null
@@ -1,43 +0,0 @@ 
-From d8601292ae25e0af47aa4486055221ab44113f0e Mon Sep 17 00:00:00 2001
-From: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
-Date: Mon, 15 Jul 2013 15:34:54 -0500
-Subject: [PATCH] ENGR00271136 Fix build break when CONFIG_CLK_DEBUG is
- disabled
-Organization: O.S. Systems Software LTDA.
-
-clk structure member name is defined only when CONFIG_CLK_DEBUG is enabled.
-Hence need to encapsulate the code with this config.
-
-Patch received from imx community:
-https://community.freescale.com/thread/308482
-
-Upstream-Status: Pending
-
-Signed-off-by: xiongweihuang
-Signed-off-by: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
----
- arch/arm/plat-mxc/clock.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm/plat-mxc/clock.c b/arch/arm/plat-mxc/clock.c
-index 93347eb..1aa2664 100755
---- a/arch/arm/plat-mxc/clock.c
-+++ b/arch/arm/plat-mxc/clock.c
-@@ -58,12 +58,12 @@ static void __clk_disable(struct clk *clk)
- {
- 	if (clk == NULL || IS_ERR(clk))
- 		return;
--
-+#ifdef CONFIG_CLK_DEBUG
- 	if (!clk->usecount) {
- 		WARN(1, "clock enable/disable mismatch! clk  %s\n", clk->name);
- 		return;
- 	}
--
-+#endif
- 	if (!(--clk->usecount)) {
- 		if (clk->disable)
- 			clk->disable(clk);
--- 
-1.8.4.rc3
-
diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch b/recipes-kernel/linux/linux-imx-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
deleted file mode 100644
index cb20198..0000000
--- a/recipes-kernel/linux/linux-imx-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
+++ /dev/null
@@ -1,98 +0,0 @@ 
-From 538f4bb2f7a51f267395550a5be9f0ab2e426712 Mon Sep 17 00:00:00 2001
-From: Erik Boto <erik.boto@pelagicore.com>
-Date: Tue, 16 Jul 2013 12:06:05 -0500
-Subject: [PATCH] ENGR00271359 Add Multi-touch support
-Organization: O.S. Systems Software LTDA.
-
-The previous behavior of the driver did not work properly with Qt5
-QtQuick multi touch-point gestures, due to how touch-points are
-reported when removing a touch-point. My interpretation of the
-available documentation [1] was that the driver should report all
-touch-points between SYN_REPORTs, but it is not explicitly stated so.
-I've found another mail-thread [2] where the creator of the protocol
-states:
-
-"The protocol defines a generic way of sending a variable amount of
-contacts. The contact count is obtained by counting the number of
-non-empty finger packets between SYN_REPORT events."-Henrik Rydberg
-
-I think this verifies my assumption that all touch-points should be
-reported between SYN_REPORTs, otherwise it can not be used to obtain
-the count.
-
-[1] https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt
-[2] http://lists.x.org/archives/xorg-devel/2010-March/006466.html
-
-Upstream-Status: Pending
-
-Signed-off-by: Erik Boto <erik.boto@pelagicore.com>
-Signed-off-by: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
-(cherry picked from commit 7cba001c5a502680f6dbf902821726779a9c9287)
----
- drivers/input/touchscreen/egalax_ts.c | 36 +++++++++++++++++------------------
- 1 file changed, 18 insertions(+), 18 deletions(-)
-
-diff --git a/drivers/input/touchscreen/egalax_ts.c b/drivers/input/touchscreen/egalax_ts.c
-index 0b6cde7..271f820 100644
---- a/drivers/input/touchscreen/egalax_ts.c
-+++ b/drivers/input/touchscreen/egalax_ts.c
-@@ -133,7 +133,6 @@ retry:
- 	}
- 
- 	if (down) {
--		/* should also report old pointers */
- 		events[id].valid = valid;
- 		events[id].status = down;
- 		events[id].x = x;
-@@ -144,23 +143,6 @@ retry:
- 		input_report_abs(input_dev, ABS_Y, y);
- 		input_event(data->input_dev, EV_KEY, BTN_TOUCH, 1);
- 		input_report_abs(input_dev, ABS_PRESSURE, 1);
--#else
--		for (i = 0; i < MAX_SUPPORT_POINTS; i++) {
--			if (!events[i].valid)
--				continue;
--			dev_dbg(&client->dev, "report id:%d valid:%d x:%d y:%d",
--				i, valid, x, y);
--
--			input_report_abs(input_dev,
--					 ABS_MT_TRACKING_ID, i);
--			input_report_abs(input_dev,
--					 ABS_MT_TOUCH_MAJOR, 1);
--			input_report_abs(input_dev,
--					 ABS_MT_POSITION_X, events[i].x);
--			input_report_abs(input_dev,
--					 ABS_MT_POSITION_Y, events[i].y);
--			input_mt_sync(input_dev);
--		}
- #endif
- 	} else {
- 		dev_dbg(&client->dev, "release id:%d\n", id);
-@@ -176,6 +158,24 @@ retry:
- #endif
- 	}
- 
-+#ifndef CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH
-+	/* report all pointers */
-+	for (i = 0; i < MAX_SUPPORT_POINTS; i++) {
-+		if (!events[i].valid)
-+			continue;
-+		dev_dbg(&client->dev, "report id:%d valid:%d x:%d y:%d",
-+			i, valid, x, y);
-+			input_report_abs(input_dev,
-+				 ABS_MT_TRACKING_ID, i);
-+		input_report_abs(input_dev,
-+				 ABS_MT_TOUCH_MAJOR, 1);
-+		input_report_abs(input_dev,
-+				 ABS_MT_POSITION_X, events[i].x);
-+		input_report_abs(input_dev,
-+				 ABS_MT_POSITION_Y, events[i].y);
-+		input_mt_sync(input_dev);
-+	}
-+#endif
- 	input_sync(input_dev);
- 	return IRQ_HANDLED;
- }
--- 
-1.8.4.rc3
-
diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0006-Add-support-for-DVI-monitors.patch b/recipes-kernel/linux/linux-imx-3.0.35/0006-Add-support-for-DVI-monitors.patch
deleted file mode 100644
index 00a6b5c..0000000
--- a/recipes-kernel/linux/linux-imx-3.0.35/0006-Add-support-for-DVI-monitors.patch
+++ /dev/null
@@ -1,227 +0,0 @@ 
-From 3e6441d113f72b412081a2c87f39011e4c253a35 Mon Sep 17 00:00:00 2001
-From: Robert Winkler <robert.winkler@boundarydevices.com>
-Date: Fri, 19 Jul 2013 19:00:41 -0700
-Subject: [PATCH] Add support for DVI monitors
-Organization: O.S. Systems Software LTDA.
-
-Upstream-Status: Pending
-
-Signed-off-by: Robert Winkler <robert.winkler@boundarydevices.com>
----
- arch/arm/plat-mxc/include/mach/mxc_hdmi.h |  7 +++
- drivers/video/mxc_hdmi.c                  | 98 +++++++++++++------------------
- 2 files changed, 49 insertions(+), 56 deletions(-)
-
-diff --git a/arch/arm/plat-mxc/include/mach/mxc_hdmi.h b/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
-index 94f7638..af59c62 100644
---- a/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
-+++ b/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
-@@ -605,6 +605,10 @@ enum {
- 	HDMI_IH_MUTE_PHY_STAT0_TX_PHY_LOCK = 0x2,
- 	HDMI_IH_MUTE_PHY_STAT0_HPD = 0x1,
- 
-+/* IH and IH_MUTE convenience macro RX_SENSE | HPD*/
-+	HDMI_DVI_IH_STAT = 0x3D,
-+
-+
- /* IH_AHBDMAAUD_STAT0 field values */
- 	HDMI_IH_AHBDMAAUD_STAT0_ERROR = 0x20,
- 	HDMI_IH_AHBDMAAUD_STAT0_LOST = 0x10,
-@@ -903,6 +907,9 @@ enum {
- 	HDMI_PHY_HPD = 0x02,
- 	HDMI_PHY_TX_PHY_LOCK = 0x01,
- 
-+/* HDMI STAT convenience RX_SENSE | HPD */
-+	HDMI_DVI_STAT = 0xF2,
-+
- /* PHY_I2CM_SLAVE_ADDR field values */
- 	HDMI_PHY_I2CM_SLAVE_ADDR_PHY_GEN2 = 0x69,
- 	HDMI_PHY_I2CM_SLAVE_ADDR_HEAC_PHY = 0x49,
-diff --git a/drivers/video/mxc_hdmi.c b/drivers/video/mxc_hdmi.c
-index c5069aa..544f352 100644
---- a/drivers/video/mxc_hdmi.c
-+++ b/drivers/video/mxc_hdmi.c
-@@ -180,7 +180,6 @@ struct mxc_hdmi {
- 	bool dft_mode_set;
- 	char *dft_mode_str;
- 	int default_bpp;
--	u8 latest_intr_stat;
- 	bool irq_enabled;
- 	spinlock_t irq_lock;
- 	bool phy_enabled;
-@@ -1996,58 +1995,48 @@ static void hotplug_worker(struct work_struct *work)
- 	struct delayed_work *delay_work = to_delayed_work(work);
- 	struct mxc_hdmi *hdmi =
- 		container_of(delay_work, struct mxc_hdmi, hotplug_work);
--	u32 phy_int_stat, phy_int_pol, phy_int_mask;
--	u8 val;
-+	u32 hdmi_phy_stat0, hdmi_phy_pol0, hdmi_phy_mask0;
- 	unsigned long flags;
- 	char event_string[32];
- 	char *envp[] = { event_string, NULL };
- 
--	phy_int_stat = hdmi->latest_intr_stat;
--	phy_int_pol = hdmi_readb(HDMI_PHY_POL0);
- 
--	dev_dbg(&hdmi->pdev->dev, "phy_int_stat=0x%x, phy_int_pol=0x%x\n",
--			phy_int_stat, phy_int_pol);
-+	hdmi_phy_stat0 = hdmi_readb(HDMI_PHY_STAT0);
-+	hdmi_phy_pol0 = hdmi_readb(HDMI_PHY_POL0);
-+
-+	dev_dbg(&hdmi->pdev->dev, "hdmi_phy_stat0=0x%x, hdmi_phy_pol0=0x%x\n",
-+			hdmi_phy_stat0, hdmi_phy_pol0);
-+
-+	/* Make HPD intr active low to capture unplug event or
-+	 * active high to capture plugin event */
-+	hdmi_writeb((HDMI_DVI_STAT & ~hdmi_phy_stat0), HDMI_PHY_POL0);
- 
- 	/* check cable status */
--	if (phy_int_stat & HDMI_IH_PHY_STAT0_HPD) {
--		/* cable connection changes */
--		if (phy_int_pol & HDMI_PHY_HPD) {
--			/* Plugin event */
--			dev_dbg(&hdmi->pdev->dev, "EVENT=plugin\n");
--			mxc_hdmi_cable_connected(hdmi);
--
--			/* Make HPD intr active low to capture unplug event */
--			val = hdmi_readb(HDMI_PHY_POL0);
--			val &= ~HDMI_PHY_HPD;
--			hdmi_writeb(val, HDMI_PHY_POL0);
--
--			sprintf(event_string, "EVENT=plugin");
--			kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
-+	if (hdmi_phy_stat0 & HDMI_DVI_STAT) {
-+		/* Plugin event */
-+		dev_dbg(&hdmi->pdev->dev, "EVENT=plugin\n");
-+		mxc_hdmi_cable_connected(hdmi);
-+
-+		sprintf(event_string, "EVENT=plugin");
-+		kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
- #ifdef CONFIG_MXC_HDMI_CEC
--			mxc_hdmi_cec_handle(0x80);
-+		mxc_hdmi_cec_handle(0x80);
- #endif
--			hdmi_set_cable_state(1);
--
--		} else if (!(phy_int_pol & HDMI_PHY_HPD)) {
--			/* Plugout event */
--			dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n");
--			hdmi_set_cable_state(0);
--			mxc_hdmi_abort_stream();
--			mxc_hdmi_cable_disconnected(hdmi);
-+		hdmi_set_cable_state(1);
- 
--			/* Make HPD intr active high to capture plugin event */
--			val = hdmi_readb(HDMI_PHY_POL0);
--			val |= HDMI_PHY_HPD;
--			hdmi_writeb(val, HDMI_PHY_POL0);
-+	} else {
-+		/* Plugout event */
-+		dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n");
-+		hdmi_set_cable_state(0);
-+		mxc_hdmi_abort_stream();
-+		mxc_hdmi_cable_disconnected(hdmi);
- 
--			sprintf(event_string, "EVENT=plugout");
--			kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
-+		sprintf(event_string, "EVENT=plugout");
-+		kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
- #ifdef CONFIG_MXC_HDMI_CEC
--			mxc_hdmi_cec_handle(0x100);
-+		mxc_hdmi_cec_handle(0x100);
- #endif
- 
--		} else
--			dev_dbg(&hdmi->pdev->dev, "EVENT=none?\n");
- 	}
- 
- 	/* Lock here to ensure full powerdown sequence
-@@ -2055,12 +2044,12 @@ static void hotplug_worker(struct work_struct *work)
- 	spin_lock_irqsave(&hdmi->irq_lock, flags);
- 
- 	/* Re-enable HPD interrupts */
--	phy_int_mask = hdmi_readb(HDMI_PHY_MASK0);
--	phy_int_mask &= ~HDMI_PHY_HPD;
--	hdmi_writeb(phy_int_mask, HDMI_PHY_MASK0);
-+	hdmi_phy_mask0 = hdmi_readb(HDMI_PHY_MASK0);
-+	hdmi_phy_mask0 &= ~HDMI_DVI_STAT;
-+	hdmi_writeb(hdmi_phy_mask0, HDMI_PHY_MASK0);
- 
- 	/* Unmute interrupts */
--	hdmi_writeb(~HDMI_IH_MUTE_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0);
-+	hdmi_writeb(~HDMI_DVI_IH_STAT, HDMI_IH_MUTE_PHY_STAT0);
- 
- 	if (hdmi_readb(HDMI_IH_FC_STAT2) & HDMI_IH_FC_STAT2_OVERFLOW_MASK)
- 		mxc_hdmi_clear_overflow();
-@@ -2086,7 +2075,7 @@ static void hdcp_hdp_worker(struct work_struct *work)
- static irqreturn_t mxc_hdmi_hotplug(int irq, void *data)
- {
- 	struct mxc_hdmi *hdmi = data;
--	u8 val, intr_stat;
-+	u8 val;
- 	unsigned long flags;
- 
- 	spin_lock_irqsave(&hdmi->irq_lock, flags);
-@@ -2108,25 +2097,22 @@ static irqreturn_t mxc_hdmi_hotplug(int irq, void *data)
- 	 * HDMI registers.
- 	 */
- 	/* Capture status - used in hotplug_worker ISR */
--	intr_stat = hdmi_readb(HDMI_IH_PHY_STAT0);
--
--	if (intr_stat & HDMI_IH_PHY_STAT0_HPD) {
-+	if (hdmi_readb(HDMI_IH_PHY_STAT0) & HDMI_DVI_IH_STAT) {
- 
- 		dev_dbg(&hdmi->pdev->dev, "Hotplug interrupt received\n");
--		hdmi->latest_intr_stat = intr_stat;
- 
- 		/* Mute interrupts until handled */
- 
- 		val = hdmi_readb(HDMI_IH_MUTE_PHY_STAT0);
--		val |= HDMI_IH_MUTE_PHY_STAT0_HPD;
-+		val |= HDMI_DVI_IH_STAT;
- 		hdmi_writeb(val, HDMI_IH_MUTE_PHY_STAT0);
- 
- 		val = hdmi_readb(HDMI_PHY_MASK0);
--		val |= HDMI_PHY_HPD;
-+		val |= HDMI_DVI_STAT;
- 		hdmi_writeb(val, HDMI_PHY_MASK0);
- 
- 		/* Clear Hotplug interrupts */
--		hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
-+		hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
- 
- 		schedule_delayed_work(&(hdmi->hotplug_work), msecs_to_jiffies(20));
- 	}
-@@ -2282,13 +2268,13 @@ static void mxc_hdmi_fb_registered(struct mxc_hdmi *hdmi)
- 		    HDMI_PHY_I2CM_CTLINT_ADDR);
- 
- 	/* enable cable hot plug irq */
--	hdmi_writeb((u8)~HDMI_PHY_HPD, HDMI_PHY_MASK0);
-+	hdmi_writeb((u8)~HDMI_DVI_STAT, HDMI_PHY_MASK0);
- 
- 	/* Clear Hotplug interrupts */
--	hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
-+	hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
- 
- 	/* Unmute interrupts */
--	hdmi_writeb(~HDMI_IH_MUTE_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0);
-+	hdmi_writeb(~HDMI_DVI_IH_STAT, HDMI_IH_MUTE_PHY_STAT0);
- 
- 	hdmi->fb_reg = true;
- 
-@@ -2522,10 +2508,10 @@ static int mxc_hdmi_disp_init(struct mxc_dispdrv_handle *disp,
- 
- 	/* Configure registers related to HDMI interrupt
- 	 * generation before registering IRQ. */
--	hdmi_writeb(HDMI_PHY_HPD, HDMI_PHY_POL0);
-+	hdmi_writeb(HDMI_DVI_STAT, HDMI_PHY_POL0);
- 
- 	/* Clear Hotplug interrupts */
--	hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
-+	hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
- 
- 	hdmi->nb.notifier_call = mxc_hdmi_fb_event;
- 	ret = fb_register_client(&hdmi->nb);
--- 
-1.8.4.rc3
-
diff --git a/recipes-kernel/linux/linux-imx-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch b/recipes-kernel/linux/linux-imx-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
deleted file mode 100644
index d02aa40..0000000
--- a/recipes-kernel/linux/linux-imx-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
+++ /dev/null
@@ -1,38 +0,0 @@ 
-From cd31abbe08372fa870fac78ae845edd4859f8835 Mon Sep 17 00:00:00 2001
-From: Fabio Estevam <fabio.estevam@freescale.com>
-Date: Sat, 28 Sep 2013 18:46:18 -0300
-Subject: [PATCH] ARM: mach-mx6: board-mx6q_sabresd: Register SDHC3 first
-Organization: O.S. Systems Software LTDA.
-
-On sabresd boards we boot from SDHC3, so let's register it as mmc0.
-
-Currently eMMC is mmc0 and mmc1 can be SDHC3 or SDHC2 (if present).
-
-Registering SDHC3 is safer as we can always find the rootfs.
-
-Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
----
- arch/arm/mach-mx6/board-mx6q_sabresd.c | 5 +----
- 1 file changed, 1 insertion(+), 4 deletions(-)
-
-diff --git a/arch/arm/mach-mx6/board-mx6q_sabresd.c b/arch/arm/mach-mx6/board-mx6q_sabresd.c
-index 3f9a845..4e6b323 100644
---- a/arch/arm/mach-mx6/board-mx6q_sabresd.c
-+++ b/arch/arm/mach-mx6/board-mx6q_sabresd.c
-@@ -1847,12 +1847,9 @@ static void __init mx6_sabresd_board_init(void)
- 
- 	imx6q_add_pm_imx(0, &mx6q_sabresd_pm_data);
- 
--	/* Move sd4 to first because sd4 connect to emmc.
--	   Mfgtools want emmc is mmcblk0 and other sd card is mmcblk1.
--	*/
-+	imx6q_add_sdhci_usdhc_imx(2, &mx6q_sabresd_sd3_data);
- 	imx6q_add_sdhci_usdhc_imx(3, &mx6q_sabresd_sd4_data);
- 	imx6q_add_sdhci_usdhc_imx(1, &mx6q_sabresd_sd2_data);
--	imx6q_add_sdhci_usdhc_imx(2, &mx6q_sabresd_sd3_data);
- 	imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata);
- 	imx6q_sabresd_init_usb();
- 	/* SATA is not supported by MX6DL/Solo */
--- 
-1.8.4.rc3
-
diff --git a/recipes-kernel/linux/linux-imx-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch b/recipes-kernel/linux/linux-imx-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
deleted file mode 100644
index 1e039fd..0000000
--- a/recipes-kernel/linux/linux-imx-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
+++ /dev/null
@@ -1,6261 +0,0 @@ 
-From 2e575255b8c53d3cfe2af068411696fe3c40debb Mon Sep 17 00:00:00 2001
-From: Loren Huang <b02279@freescale.com>
-Date: Mon, 2 Sep 2013 12:16:48 +0800
-Subject: [PATCH 01/16] ENGR00278350 gpu:viante 4.6.9p13 kernel part
- integration
-
-Integrated 4.6.9p13 kernel part change.
-This integration is mainly for android test.
-Linux test will be focused on 3.10 kernel.
-
-Signed-off-by: Loren HUANG <b02279@freescale.com>
-Acked-by: Shawn Guo
----
- drivers/mxc/gpu-viv/Kbuild                         |   33 +-
- .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.c   |  177 ++--
- .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.h   |    9 +-
- .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.c   |    8 +-
- .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.h   |   13 +
- .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c  |  736 ++++++++++++-
- .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h  |    1 +
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c     |  125 ++-
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h     |   24 +-
- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c |   57 ++
- .../gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c  |   45 +-
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c  |   12 +
- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c   |   29 +
- .../hal/kernel/gc_hal_kernel_interrupt_vg.c        |    3 +
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c |    8 +-
- .../hal/kernel/gc_hal_kernel_video_memory.c        |   20 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h        |   84 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h   |  172 +++-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h   |  142 ++-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h |   37 +
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h |   46 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h   |  125 ++-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h    |   86 +-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h   | 1078 +++-----------------
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h |   48 +
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h  |   79 +-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h    |    2 +-
- .../hal/os/linux/kernel/gc_hal_kernel_device.c     |   17 +-
- .../hal/os/linux/kernel/gc_hal_kernel_device.h     |   16 +-
- .../hal/os/linux/kernel/gc_hal_kernel_driver.c     |   99 +-
- .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c |  655 ++++++++++--
- .../hal/os/linux/kernel/gc_hal_kernel_sync.c       |  174 ++++
- .../hal/os/linux/kernel/gc_hal_kernel_sync.h       |   71 ++
- 33 files changed, 2974 insertions(+), 1257 deletions(-)
- create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
- create mode 100644 drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
-
-diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild
-index 93b1259..2b277d6 100644
---- a/drivers/mxc/gpu-viv/Kbuild
-+++ b/drivers/mxc/gpu-viv/Kbuild
-@@ -45,8 +45,6 @@ OBJS := $(OS_KERNEL_DIR)/gc_hal_kernel_device.o \
-         $(OS_KERNEL_DIR)/gc_hal_kernel_os.o \
-         $(OS_KERNEL_DIR)/gc_hal_kernel_debugfs.o
- 
--ifeq ($(USE_3D_VG), 1)
--
- OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
-         $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
-         $(HAL_KERNEL_DIR)/gc_hal_kernel_db.o \
-@@ -69,19 +67,9 @@ OBJS +=\
-           $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_command_vg.o\
-           $(ARCH_VG_KERNEL_DIR)/gc_hal_kernel_hardware_vg.o
- endif
--else
--
--OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
--        $(HAL_KERNEL_DIR)/gc_hal_kernel_command.o \
--        $(HAL_KERNEL_DIR)/gc_hal_kernel_heap.o \
--        $(HAL_KERNEL_DIR)/gc_hal_kernel_interrupt.o \
--        $(HAL_KERNEL_DIR)/gc_hal_kernel_mmu.o \
--        $(HAL_KERNEL_DIR)/gc_hal_kernel_video_memory.o \
--        $(OS_KERNEL_DIR)/gc_hal_kernel_debug.o
--
--OBJS += $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware.o \
--        $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware_command.o
- 
-+ifneq ($(CONFIG_SYNC),)
-+OBJS += $(OS_KERNEL_DIR)/gc_hal_kernel_sync.o
- endif
- 
- ifeq ($(KERNELRELEASE), )
-@@ -129,23 +117,16 @@ ifeq ($(CONFIG_DOVE_GPU), 1)
- EXTRA_CFLAGS += -DCONFIG_DOVE_GPU=1
- endif
- 
--ifeq ($(USE_POWER_MANAGEMENT), 1)
--EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=1
--else
--EXTRA_CFLAGS += -DgcdPOWER_MANAGEMENT=0
--endif
--
- ifneq ($(USE_PLATFORM_DRIVER), 0)
- EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=1
- else
- EXTRA_CFLAGS += -DUSE_PLATFORM_DRIVER=0
- endif
- 
--ifeq ($(USE_PROFILER), 1)
-+
- EXTRA_CFLAGS += -DVIVANTE_PROFILER=1
--else
--EXTRA_CFLAGS += -DVIVANTE_PROFILER=0
--endif
-+EXTRA_CFLAGS += -DVIVANTE_PROFILER_CONTEXT=1
-+
- 
- ifeq ($(ANDROID), 1)
- EXTRA_CFLAGS += -DANDROID=1
-@@ -235,6 +216,10 @@ ifeq ($(USE_BANK_ALIGNMENT), 1)
-     endif
- endif
- 
-+ifneq ($(CONFIG_SYNC),)
-+EXTRA_CFLAGS += -DgcdANDROID_NATIVE_FENCE_SYNC=1
-+endif
-+
- EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel/inc
- EXTRA_CFLAGS += -I$(AQROOT)/hal/kernel
- EXTRA_CFLAGS += -I$(AQARCH)/hal/kernel
-diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
-index 70c2cd6..a17d2fd 100644
---- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
-+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c
-@@ -217,50 +217,17 @@ _IdentifyHardware(
-     return status;
- }
- 
--static gctTHREADFUNCRESULT gctTHREADFUNCTYPE
--_TimeIdleThread(
--    gctTHREADFUNCPARAMETER ThreadParameter
-+#if gcdPOWEROFF_TIMEOUT
-+void
-+_VGPowerTimerFunction(
-+    gctPOINTER Data
-     )
- {
--    gctUINT32           currentTime = 0;
--    gctBOOL             isAfter = gcvFALSE;
--    gceCHIPPOWERSTATE   state;
--
--    /* Cast the object. */
--    gckVGHARDWARE hardware = (gckVGHARDWARE) ThreadParameter;
--
--    while(gcvTRUE)
--    {
--        gcmkVERIFY_OK(gckOS_WaitSignal(hardware->os,
--            hardware->idleSignal, gcvINFINITE));
--
--        if (hardware->killThread)
--        {
--            break;
--        }
--
--        do
--        {
--            gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
--
--            gcmkVERIFY_OK(
--                gckOS_TicksAfter(currentTime, hardware->powerOffTime, &isAfter));
--
--            if (isAfter)
--            {
--                gcmkVERIFY_OK(gckVGHARDWARE_SetPowerManagementState(
--                    hardware, gcvPOWER_OFF_BROADCAST));
--            }
--
--            gcmkVERIFY_OK(gckOS_Delay(hardware->os, 200));
--
--            gcmkVERIFY_OK(gckVGHARDWARE_QueryPowerManagementState(
--                hardware, &state));
--
--        } while (state == gcvPOWER_IDLE);
--    }
--    return 0;
-+    gckVGHARDWARE hardware = (gckVGHARDWARE)Data;
-+    gcmkVERIFY_OK(
-+        gckVGHARDWARE_SetPowerManagementState(hardware, gcvPOWER_OFF_TIMEOUT));
- }
-+#endif
- 
- /******************************************************************************\
- ****************************** gckVGHARDWARE API code *****************************
-@@ -338,15 +305,21 @@ gckVGHARDWARE_Construct(
-         hardware->chipMinorFeatures2 = chipMinorFeatures2;
- 
-         hardware->powerMutex            = gcvNULL;
--        hardware->idleSignal            = gcvNULL;
-         hardware->chipPowerState        = gcvPOWER_ON;
-         hardware->chipPowerStateGlobal  = gcvPOWER_ON;
-         hardware->clockState            = gcvTRUE;
-         hardware->powerState            = gcvTRUE;
--        hardware->powerOffTimeout       = gcdPOWEROFF_TIMEOUT;
-+
-         hardware->powerOffTime          = 0;
--        hardware->timeIdleThread        = gcvNULL;
--        hardware->killThread            = gcvFALSE;
-+#if gcdPOWEROFF_TIMEOUT
-+        hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
-+
-+        gcmkVERIFY_OK(gckOS_CreateTimer(Os,
-+                                        _VGPowerTimerFunction,
-+                                        (gctPOINTER)hardware,
-+                                        &hardware->powerOffTimer));
-+#endif
-+
-         /* Determine whether FE 2.0 is present. */
-         hardware->fe20 = ((((gctUINT32) (hardware->chipFeatures)) >> (0 ? 28:28) & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))) == (0x1  & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))));
- 
-@@ -365,18 +338,10 @@ gckVGHARDWARE_Construct(
-         gcmkVERIFY_OK(gckVGHARDWARE_SetFastClear(hardware, -1));
- 
-         gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex));
--        gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvFALSE, &hardware->idleSignal));
- 
-         /* Enable power management by default. */
-         hardware->powerManagement = gcvTRUE;
- 
--        gcmkERR_BREAK(gckOS_StartThread(
--            hardware->os,
--            _TimeIdleThread,
--            hardware,
--            &hardware->timeIdleThread
--            ));
--
-         /* Return pointer to the gckVGHARDWARE object. */
-         *Hardware = hardware;
- 
-@@ -386,6 +351,14 @@ gckVGHARDWARE_Construct(
-     }
-     while (gcvFALSE);
- 
-+#if gcdPOWEROFF_TIMEOUT
-+        if (hardware->powerOffTimer != gcvNULL)
-+        {
-+            gcmkVERIFY_OK(gckOS_StopTimer(Os, hardware->powerOffTimer));
-+            gcmkVERIFY_OK(gckOS_DestroyTimer(Os, hardware->powerOffTimer));
-+        }
-+#endif
-+
-     if (hardware->pageTableDirty != gcvNULL)
-     {
-         gcmkVERIFY_OK(gckOS_AtomDestroy(Os, hardware->pageTableDirty));
-@@ -428,10 +401,6 @@ gckVGHARDWARE_Destroy(
-     /* Verify the arguments. */
-     gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
- 
--    Hardware->killThread  = gcvTRUE;
--    gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE));
--    gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread));
--
-     /* Mark the object as unknown. */
-     Hardware->object.type = gcvOBJ_UNKNOWN;
- 
-@@ -441,11 +410,10 @@ gckVGHARDWARE_Destroy(
-             Hardware->os, Hardware->powerMutex));
-     }
- 
--    if (Hardware->idleSignal != gcvNULL)
--    {
--        gcmkVERIFY_OK(gckOS_DestroySignal(
--            Hardware->os, Hardware->idleSignal));
--    }
-+#if gcdPOWEROFF_TIMEOUT
-+    gcmkVERIFY_OK(gckOS_StopTimer(Hardware->os, Hardware->powerOffTimer));
-+    gcmkVERIFY_OK(gckOS_DestroyTimer(Hardware->os, Hardware->powerOffTimer));
-+#endif
- 
-     if (Hardware->pageTableDirty != gcvNULL)
-     {
-@@ -1510,11 +1478,15 @@ gckVGHARDWARE_SetPowerManagementState(
-     gctBOOL commitMutex     = gcvFALSE;
-     gctBOOL mutexAcquired   = gcvFALSE;
- 
-+#if gcdPOWEROFF_TIMEOUT
-+    gctBOOL timeout = gcvFALSE;
-+    gctBOOL isAfter = gcvFALSE;
-+    gctUINT32 currentTime;
-+#endif
-+
-     gctBOOL broadcast = gcvFALSE;
-     gctUINT32 process, thread;
-     gctBOOL global = gcvFALSE;
--    gctUINT32   currentTime;
--
- 
- #if gcdENABLE_PROFILING
-     gctUINT64 time, freq, mutexTime, onTime, stallTime, stopTime, delayTime,
-@@ -1661,6 +1633,16 @@ gckVGHARDWARE_SetPowerManagementState(
-         global = gcvTRUE;
-         break;
- 
-+#if gcdPOWEROFF_TIMEOUT
-+    case gcvPOWER_OFF_TIMEOUT:
-+        /* Convert to OFF and note we are inside broadcast. */
-+        State     = gcvPOWER_OFF;
-+        broadcast = gcvTRUE;
-+        /* Check time out */
-+        timeout = gcvTRUE;
-+        break;
-+#endif
-+
-     default:
-         break;
-     }
-@@ -1719,6 +1701,31 @@ gckVGHARDWARE_SetPowerManagementState(
-     flag  = flags[Hardware->chipPowerState][State];
-     /*clock = clocks[State];*/
- 
-+#if gcdPOWEROFF_TIMEOUT
-+    if (timeout)
-+    {
-+        gcmkONERROR(gckOS_GetTicks(&currentTime));
-+
-+        gcmkONERROR(
-+            gckOS_TicksAfter(Hardware->powerOffTime, currentTime, &isAfter));
-+
-+        /* powerOffTime is pushed forward, give up.*/
-+        if (isAfter
-+        /* Expect a transition start from IDLE. */
-+        ||  (Hardware->chipPowerState == gcvPOWER_ON)
-+        ||  (Hardware->chipPowerState == gcvPOWER_OFF)
-+        )
-+        {
-+            /* Release the power mutex. */
-+            gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
-+
-+            /* No need to do anything. */
-+            gcmkFOOTER_NO();
-+            return gcvSTATUS_OK;
-+        }
-+    }
-+#endif
-+
-     if (flag == 0)
-     {
-         /* Release the power mutex. */
-@@ -1742,6 +1749,18 @@ gckVGHARDWARE_SetPowerManagementState(
-             return gcvSTATUS_OK;
-         }
-     }
-+    else
-+    {
-+        if (flag & gcvPOWER_FLAG_ACQUIRE)
-+        {
-+            /* Acquire the power management semaphore. */
-+            gcmkONERROR(gckOS_AcquireSemaphore(os, command->powerSemaphore));
-+            acquired = gcvTRUE;
-+
-+            /* avoid acquiring again. */
-+            flag &= ~gcvPOWER_FLAG_ACQUIRE;
-+        }
-+    }
- 
-     if (flag & (gcvPOWER_FLAG_INITIALIZE | gcvPOWER_FLAG_CLOCK_ON))
-     {
-@@ -1858,14 +1877,6 @@ gckVGHARDWARE_SetPowerManagementState(
-         Hardware->chipPowerStateGlobal = State;
-     }
- 
--    if (State == gcvPOWER_IDLE)
--    {
--        gcmkVERIFY_OK(gckOS_Signal(os, Hardware->idleSignal, gcvTRUE));
--    }
--        /* Reset power off time */
--    gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
--    Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
--
-     if (commitMutex)
-     {
-         /* Acquire the mutex. */
-@@ -1875,6 +1886,28 @@ gckVGHARDWARE_SetPowerManagementState(
-             ));
-     }
- 
-+#if gcdPOWEROFF_TIMEOUT
-+    /* Reset power off time */
-+    gcmkONERROR(gckOS_GetTicks(&currentTime));
-+
-+    Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
-+
-+    if (State == gcvPOWER_IDLE)
-+    {
-+        /* Start a timer to power off GPU when GPU enters IDLE or SUSPEND. */
-+        gcmkVERIFY_OK(gckOS_StartTimer(os,
-+                                       Hardware->powerOffTimer,
-+                                       Hardware->powerOffTimeout));
-+    }
-+    else
-+    {
-+        gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "Cancel powerOfftimer");
-+
-+        /* Cancel running timer when GPU enters ON or OFF. */
-+        gcmkVERIFY_OK(gckOS_StopTimer(os, Hardware->powerOffTimer));
-+    }
-+#endif
-+
-     /* Release the power mutex. */
-     gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
- 
-diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
-index 16b81ae..73d4594 100644
---- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
-+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
-@@ -53,7 +53,6 @@ struct _gckVGHARDWARE
-     gctBOOL                     clockState;
-     gctBOOL                     powerState;
-     gctPOINTER                  powerMutex;
--    gctSIGNAL                   idleSignal;
-     gctUINT32                   powerProcess;
-     gctUINT32                   powerThread;
-     gceCHIPPOWERSTATE           chipPowerState;
-@@ -61,11 +60,13 @@ struct _gckVGHARDWARE
-     gctISRMANAGERFUNC           startIsr;
-     gctISRMANAGERFUNC           stopIsr;
-     gctPOINTER                  isrContext;
-+    gctPOINTER                  pageTableDirty;
-+
-+#if gcdPOWEROFF_TIMEOUT
-     gctUINT32                   powerOffTime;
-     gctUINT32                   powerOffTimeout;
--    gctTHREAD                   timeIdleThread;
--    gctBOOL                     killThread;
--    gctPOINTER                  pageTableDirty;
-+    gctPOINTER                  powerOffTimer;
-+#endif
- 
-     gctBOOL                     powerManagement;
- };
-diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
-index 24003e7..42e6915 100644
---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
-+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
-@@ -181,7 +181,8 @@ _FlushPipe(
-                 ?   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
-                 :   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
-                   | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
--                  | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
-+                  | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
-+                  | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
- 
-         /* Semaphore from FE to PE. */
-         *buffer++
-@@ -620,7 +621,10 @@ _InitializeContextBuffer(
-         index += _State(Context, index, 0x10180 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
-         index += _State(Context, index, 0x10200 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
-         index += _State(Context, index, 0x10280 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
--        index += _State(Context, index, 0x02C00 >> 2, 0x00000000, 256, gcvFALSE, gcvFALSE);
-+        for (i = 0; i < 256 / 16; i += 1)
-+        {
-+            index += _State(Context, index, (0x02C00 >> 2) + i * 16, 0x00000000, 14, gcvFALSE, gcvFALSE);
-+        }
-         index += _State(Context, index, 0x10300 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
-         index += _State(Context, index, 0x10380 >> 2, 0x00321000, 32, gcvFALSE, gcvFALSE);
-         index += _State(Context, index, 0x10400 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
-diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
-index 7554045..5d2c7c7 100644
---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
-+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
-@@ -134,6 +134,19 @@ struct _gckCONTEXT
- #if gcdSECURE_USER
-     gctBOOL_PTR                 hint;
- #endif
-+
-+#if VIVANTE_PROFILER_CONTEXT
-+    gcsPROFILER_COUNTERS        latestProfiler;
-+    gcsPROFILER_COUNTERS        histroyProfiler;
-+    gctUINT32                   prevVSInstCount;
-+    gctUINT32                   prevVSBranchInstCount;
-+    gctUINT32                   prevVSTexInstCount;
-+    gctUINT32                   prevVSVertexCount;
-+    gctUINT32                   prevPSInstCount;
-+    gctUINT32                   prevPSBranchInstCount;
-+    gctUINT32                   prevPSTexInstCount;
-+    gctUINT32                   prevPSPixelCount;
-+#endif
- };
- 
- #ifdef __cplusplus
-diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
-index 00f3839..e02dc23 100644
---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
-+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
-@@ -21,6 +21,9 @@
- 
- #include "gc_hal.h"
- #include "gc_hal_kernel.h"
-+#if VIVANTE_PROFILER_CONTEXT
-+#include "gc_hal_kernel_context.h"
-+#endif
- 
- #define _GC_OBJ_ZONE    gcvZONE_HARDWARE
- 
-@@ -69,6 +72,7 @@ _IdentifyHardware(
-     gctUINT32 numConstants = 0;
-     gctUINT32 bufferSize = 0;
-     gctUINT32 varyingsCount = 0;
-+    gctBOOL useHZ;
- 
-     gcmkHEADER_ARG("Os=0x%x", Os);
- 
-@@ -209,6 +213,15 @@ _IdentifyHardware(
-                                      0x00088,
-                                      &Identity->chipMinorFeatures3));
- 
-+            /*The BG2 chip has no compression supertiled, and the bit of GCMinorFeature3BugFixes15 is n/a*/
-+            if(Identity->chipModel == gcv1000 && Identity->chipRevision == 0x5036)
-+            {
-+                Identity->chipMinorFeatures3
-+                    = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
-+                Identity->chipMinorFeatures3
-+                    = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27)));
-+            }
-+
-             /* Read chip minor featuress register #4. */
-             gcmkONERROR(
-                 gckOS_ReadRegisterEx(Os, Core,
-@@ -244,14 +257,31 @@ _IdentifyHardware(
-     if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
-                                            || (Identity->chipRevision == 0x5036)
-                                            || (Identity->chipRevision == 0x5037)))
--	 || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612)))
-+	 || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612))
-+     || ((Identity->chipModel == gcv860) && (Identity->chipRevision == 0x4647)))
-     {
-         Identity->superTileMode = 1;
-     }
- 
-+    if (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5245)
-+    {
-+        useHZ = ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 26:26) & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))))
-+             || ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 8:8) & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))));
-+    }
-+    else
-+    {
-+        useHZ = gcvFALSE;
-+    }
- 
--	/* Disable HZ when EZ is present for older chips. */
--	if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
-+    if (useHZ)
-+    {
-+        /* Disable EZ. */
-+        Identity->chipFeatures
-+            = ((((gctUINT32) (Identity->chipFeatures)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)));
-+    }
-+
-+    /* Disable HZ when EZ is present for older chips. */
-+    else if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
-     {
-         /* Disable HIERARCHICAL_Z. */
-         Identity->chipMinorFeatures
-@@ -470,6 +500,15 @@ _IdentifyHardware(
-          Identity->varyingsCount = 8;
-      }
- 
-+     /* For some cores, it consumes two varying for position, so the max varying vectors should minus one. */
-+     if ((Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5222) ||
-+         (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5208) ||
-+         ((Identity->chipModel == gcv2100 || Identity->chipModel == gcv2000) && Identity->chipRevision == 0x5108) ||
-+         (Identity->chipModel == gcv880 && (Identity->chipRevision == 0x5107 || Identity->chipRevision == 0x5106)))
-+     {
-+         Identity->varyingsCount -= 1;
-+     }
-+
-     /* Success. */
-     gcmkFOOTER();
-     return gcvSTATUS_OK;
-@@ -535,9 +574,9 @@ _DumpDebugRegisters(
-     IN gcsiDEBUG_REGISTERS_PTR Descriptor
-     )
- {
--    gceSTATUS status;
-+    gceSTATUS status = gcvSTATUS_OK;
-     gctUINT32 select;
--    gctUINT32 data;
-+    gctUINT32 data = 0;
-     gctUINT i;
- 
-     gcmkHEADER_ARG("Os=0x%X Descriptor=0x%X", Os, Descriptor);
-@@ -643,6 +682,42 @@ OnError:
-     return status;
- }
- 
-+gceSTATUS
-+_FlushCache(
-+    gckHARDWARE Hardware,
-+    gckCOMMAND Command
-+    )
-+{
-+    gceSTATUS status;
-+    gctSIZE_T bytes, requested;
-+    gctPOINTER buffer;
-+
-+    /* Get the size of the flush command. */
-+    gcmkONERROR(gckHARDWARE_Flush(Hardware,
-+                                  gcvFLUSH_ALL,
-+                                  gcvNULL,
-+                                  &requested));
-+
-+    /* Reserve space in the command queue. */
-+    gcmkONERROR(gckCOMMAND_Reserve(Command,
-+                                   requested,
-+                                   &buffer,
-+                                   &bytes));
-+
-+    /* Append a flush. */
-+    gcmkONERROR(gckHARDWARE_Flush(
-+        Hardware, gcvFLUSH_ALL, buffer, &bytes
-+        ));
-+
-+    /* Execute the command queue. */
-+    gcmkONERROR(gckCOMMAND_Execute(Command, requested));
-+
-+    return gcvSTATUS_OK;
-+
-+OnError:
-+    return status;
-+}
-+
- /******************************************************************************\
- ****************************** gckHARDWARE API code *****************************
- \******************************************************************************/
-@@ -809,6 +884,9 @@ gckHARDWARE_Construct(
-     /* Enable power management by default. */
-     hardware->powerManagement = gcvTRUE;
- 
-+    /* Disable profiler by default */
-+    hardware->gpuProfiler = gcvFALSE;
-+
-     /* Return pointer to the gckHARDWARE object. */
-     *Hardware = hardware;
- 
-@@ -1113,6 +1191,31 @@ gckHARDWARE_InitializeHardware(
-                                   ((((gctUINT32) (0x01590880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23)))));
-     }
- 
-+    if ((gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) == gcvFALSE)
-+     || (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) && (Hardware->identity.chipRevision < 0x5422))
-+    )
-+    {
-+        gctUINT32 data;
-+
-+        gcmkONERROR(
-+            gckOS_ReadRegisterEx(Hardware->os,
-+                                 Hardware->core,
-+                                 Hardware->powerBaseAddress
-+                                 + 0x00104,
-+                                 &data));
-+
-+
-+        data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15)));
-+
-+
-+        gcmkONERROR(
-+            gckOS_WriteRegisterEx(Hardware->os,
-+                                  Hardware->core,
-+                                  Hardware->powerBaseAddress
-+                                  + 0x00104,
-+                                  data));
-+    }
-+
-     /* Special workaround for this core
-     ** Make sure FE and TX are on different buses */
-     if ((Hardware->identity.chipModel == gcv2000)
-@@ -1152,7 +1255,9 @@ gckHARDWARE_InitializeHardware(
-     }
- 
-     if (Hardware->identity.chipModel >= gcv400
--    &&  Hardware->identity.chipModel != gcv420)
-+    &&  Hardware->identity.chipModel != gcv420
-+    &&  (((((gctUINT32) (Hardware->identity.chipMinorFeatures3)) >> (0 ? 15:15) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) != gcvTRUE)
-+    )
-     {
- 		gctUINT32 data;
- 
-@@ -2883,35 +2988,44 @@ gckHARDWARE_QueryShaderCaps(
-     OUT gctUINT * Varyings
-     )
- {
-+    gctUINT32 vsConstMax;
-+    gctUINT32 psConstMax;
-+
-     gcmkHEADER_ARG("Hardware=0x%x VertexUniforms=0x%x "
-                    "FragmentUniforms=0x%x Varyings=0x%x",
-                    Hardware, VertexUniforms,
-                    FragmentUniforms, Varyings);
- 
-+    if ((Hardware->identity.chipModel == gcv2000)
-+     && (Hardware->identity.chipRevision == 0x5118))
-+    {
-+        vsConstMax   = 256;
-+        psConstMax   = 64;
-+    }
-+    else if (Hardware->identity.numConstants > 256)
-+    {
-+        vsConstMax   = 256;
-+        psConstMax   = 256;
-+    }
-+    else if (Hardware->identity.numConstants == 256)
-+    {
-+        vsConstMax   = 256;
-+        psConstMax   = 256;
-+    }
-+    else
-+    {
-+        vsConstMax   = 168;
-+        psConstMax   = 64;
-+    }
-+
-     if (VertexUniforms != gcvNULL)
-     {
--		/* Return the vs shader const count. */
--        if (Hardware->identity.chipModel < gcv4000)
--        {
--            *VertexUniforms = 168;
--        }
--        else
--        {
--            *VertexUniforms = 256;
--        }
-+        *VertexUniforms = vsConstMax;
-     }
- 
-     if (FragmentUniforms != gcvNULL)
-     {
--		/* Return the ps shader const count. */
--        if (Hardware->identity.chipModel < gcv4000)
--        {
--            *FragmentUniforms = 64;
--        }
--        else
--        {
--            *FragmentUniforms = 256;
--        }
-+        *FragmentUniforms = psConstMax;
-     }
- 
-     if (Varyings != gcvNULL)
-@@ -3229,12 +3343,28 @@ gckHARDWARE_SetMMUv2(
-     gctBOOL commitEntered = gcvFALSE;
-     gctPOINTER pointer = gcvNULL;
-     gctBOOL acquired = gcvFALSE;
-+    gctBOOL config2D;
-+    gctSIZE_T configSize;
- 
-     gcmkHEADER_ARG("Hardware=0x%x Enable=%d", Hardware, Enable);
- 
-     /* Verify the arguments. */
-     gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
- 
-+    config2D =  gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D)
-+             && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D);
-+
-+    configSize = 4 * 4;
-+
-+    if (config2D)
-+    {
-+        configSize +=
-+            /* Pipe Select. */
-+            4 * 4
-+            /* Configure MMU States. */
-+          + 4 * 4;
-+    }
-+
-     /* Convert logical address into physical address. */
-     gcmkONERROR(
-         gckOS_GetPhysicalAddress(Hardware->os, MtlbAddress, &config));
-@@ -3281,7 +3411,7 @@ gckHARDWARE_SetMMUv2(
-     commitEntered = gcvTRUE;
- 
-     gcmkONERROR(gckCOMMAND_Reserve(
--        command, 16, &pointer, &bufferSize
-+        command, configSize, &pointer, &bufferSize
-         ));
- 
-     buffer = pointer;
-@@ -3300,10 +3430,43 @@ gckHARDWARE_SetMMUv2(
- 
-     buffer[3] = address;
- 
-+    if (config2D)
-+    {
-+        /* LoadState(AQPipeSelect, 1), pipe. */
-+        buffer[4]
-+            = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
-+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
-+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
-+
-+        buffer[5] = 0x1;
-+
-+        buffer[6]
-+            = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
-+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
-+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
-+
-+        buffer[7] = config;
-+
-+        buffer[8]
-+            = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
-+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
-+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
-+
-+        buffer[9] = address;
-+
-+        /* LoadState(AQPipeSelect, 1), pipe. */
-+        buffer[10]
-+            = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
-+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
-+            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
-+
-+        buffer[11] = 0x0;
-+    }
-+
-     gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
-         "Setup MMU: config=%08x, Safe Address=%08x\n.", config, address);
- 
--    gcmkONERROR(gckCOMMAND_Execute(command, 16));
-+    gcmkONERROR(gckCOMMAND_Execute(command, configSize));
- 
-     if (FromPower == gcvFALSE)
-     {
-@@ -3501,6 +3664,8 @@ gckHARDWARE_Flush(
-     gctUINT32 flush = 0;
-     gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
-     gceSTATUS status;
-+    gctBOOL fcFlushStall;
-+    gctUINT32 reserveBytes = 8;
- 
-     gcmkHEADER_ARG("Hardware=0x%x Flush=0x%x Logical=0x%x *Bytes=%lu",
-                    Hardware, Flush, Logical, gcmOPT_VALUE(Bytes));
-@@ -3511,6 +3676,16 @@ gckHARDWARE_Flush(
-     /* Get current pipe. */
-     pipe = Hardware->kernel->command->pipeSelect;
- 
-+    fcFlushStall
-+        = ((((gctUINT32) (Hardware->identity.chipMinorFeatures1)) >> (0 ? 31:31) & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))))
-+        && (Flush == gcvFLUSH_ALL)
-+        ;
-+
-+    if (fcFlushStall)
-+    {
-+        reserveBytes += 8;
-+    }
-+
-     /* Flush 3D color cache. */
-     if ((Flush & gcvFLUSH_COLOR) && (pipe == 0x0))
-     {
-@@ -3527,6 +3702,7 @@ gckHARDWARE_Flush(
-     if ((Flush & gcvFLUSH_TEXTURE) && (pipe == 0x0))
-     {
-         flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
-+        flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
-     }
- 
-     /* Flush 2D cache. */
-@@ -3550,7 +3726,7 @@ gckHARDWARE_Flush(
-         /* Copy to command queue. */
-         if (Logical != gcvNULL)
-         {
--            if (*Bytes < 8)
-+            if (*Bytes < reserveBytes)
-             {
-                 /* Command queue too small. */
-                 gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL);
-@@ -3565,12 +3741,26 @@ gckHARDWARE_Flush(
- 
-             gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
-                            "0x%x: FLUSH 0x%x", logical, flush);
-+
-+            if (fcFlushStall)
-+            {
-+                logical[2] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
-+                           | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
-+                           | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
-+
-+                logical[3] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
-+
-+
-+                gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
-+                               "0x%x: FLUSH 0x%x", logical + 3, logical[3]);
-+            }
-+
-         }
- 
-         if (Bytes != gcvNULL)
-         {
--            /* 8 bytes required. */
--            *Bytes = 8;
-+            /* bytes required. */
-+            *Bytes = reserveBytes;
-         }
-     }
- 
-@@ -4285,6 +4475,48 @@ gckHARDWARE_SetPowerManagementState(
-         }
-     }
- 
-+    /* Flush Cache before Power Off. */
-+    if (flag & gcvPOWER_FLAG_POWER_OFF)
-+    {
-+        if (Hardware->clockState == gcvFALSE)
-+        {
-+            /* Turn off the GPU power. */
-+            gcmkONERROR(
-+                    gckOS_SetGPUPower(os,
-+                        Hardware->core,
-+                        gcvTRUE,
-+                        gcvTRUE));
-+
-+            Hardware->clockState = gcvTRUE;
-+
-+            if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_DYNAMIC_FREQUENCY_SCALING) != gcvTRUE)
-+            {
-+                /* Write the clock control register. */
-+                gcmkONERROR(gckOS_WriteRegisterEx(os,
-+                                                  Hardware->core,
-+                                                  0x00000,
-+                                                  clocks[0]));
-+
-+                /* Done loading the frequency scaler. */
-+                gcmkONERROR(gckOS_WriteRegisterEx(os,
-+                                                  Hardware->core,
-+                                                  0x00000,
-+                                                  ((((gctUINT32) (clocks[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)))));
-+            }
-+        }
-+
-+        gcmkONERROR(gckCOMMAND_Start(command));
-+
-+        gcmkONERROR(_FlushCache(Hardware, command));
-+
-+        gckOS_Delay(gcvNULL, 1);
-+
-+        /* Stop the command parser. */
-+        gcmkONERROR(gckCOMMAND_Stop(command, gcvFALSE));
-+
-+        flag |= gcvPOWER_FLAG_CLOCK_OFF;
-+    }
-+
-     /* Get time until stopped. */
-     gcmkPROFILE_QUERY(time, stopTime);
- 
-@@ -4582,6 +4814,40 @@ gckHARDWARE_SetPowerManagement(
-     return gcvSTATUS_OK;
- }
- 
-+/*******************************************************************************
-+**
-+**  gckHARDWARE_SetGpuProfiler
-+**
-+**  Configure GPU profiler function.
-+**  Only used in driver initialization stage.
-+**
-+**  INPUT:
-+**
-+**      gckHARDWARE Harwdare
-+**          Pointer to an gckHARDWARE object.
-+**
-+**      gctBOOL GpuProfiler
-+**          GOU Profiler State.
-+**
-+*/
-+gceSTATUS
-+gckHARDWARE_SetGpuProfiler(
-+    IN gckHARDWARE Hardware,
-+    IN gctBOOL GpuProfiler
-+    )
-+{
-+    gcmkHEADER_ARG("Hardware=0x%x", Hardware);
-+
-+    /* Verify the arguments. */
-+    gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-+
-+    Hardware->gpuProfiler = GpuProfiler;
-+
-+    /* Success. */
-+    gcmkFOOTER_NO();
-+    return gcvSTATUS_OK;
-+}
-+
- #if gcdENABLE_FSCALE_VAL_ADJUST
- gceSTATUS
- gckHARDWARE_SetFscaleValue(
-@@ -5141,6 +5407,402 @@ OnError:
- }
- #endif
- 
-+#if VIVANTE_PROFILER_CONTEXT
-+#define gcmkUPDATE_PROFILE_DATA(data) \
-+    profilerHistroy->data += profiler->data
-+
-+gceSTATUS
-+gckHARDWARE_QueryContextProfile(
-+    IN gckHARDWARE Hardware,
-+    IN gctBOOL   Reset,
-+    IN gckCONTEXT Context,
-+    OUT gcsPROFILER_COUNTERS * Counters
-+    )
-+{
-+    gceSTATUS status;
-+    gckCOMMAND command = Hardware->kernel->command;
-+    gcsPROFILER_COUNTERS * profiler = Counters;
-+
-+    gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters);
-+
-+    /* Verify the arguments. */
-+    gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-+
-+    /* Acquire the context sequnence mutex. */
-+    gcmkONERROR(gckOS_AcquireMutex(
-+        command->os, command->mutexContextSeq, gcvINFINITE
-+        ));
-+
-+    /* Read the counters. */
-+    gcmkVERIFY_OK(gckOS_MemCopy(
-+        profiler, &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
-+        ));
-+
-+    if (Reset)
-+    {
-+        /* Reset counters. */
-+        gcmkVERIFY_OK(gckOS_ZeroMemory(
-+            &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
-+            ));
-+    }
-+
-+    gcmkVERIFY_OK(gckOS_ReleaseMutex(
-+        command->os, command->mutexContextSeq
-+        ));
-+
-+    /* Success. */
-+    gcmkFOOTER_NO();
-+    return gcvSTATUS_OK;
-+
-+OnError:
-+    /* Return the status. */
-+    gcmkFOOTER();
-+    return status;
-+}
-+
-+
-+gceSTATUS
-+gckHARDWARE_UpdateContextProfile(
-+    IN gckHARDWARE Hardware,
-+    IN gckCONTEXT Context
-+    )
-+{
-+    gceSTATUS status;
-+    gcsPROFILER_COUNTERS * profiler = &Context->latestProfiler;
-+    gcsPROFILER_COUNTERS * profilerHistroy = &Context->histroyProfiler;
-+    gctUINT i, clock;
-+    gctUINT32 colorKilled, colorDrawn, depthKilled, depthDrawn;
-+    gctUINT32 totalRead, totalWrite;
-+    gceCHIPMODEL chipModel;
-+    gctUINT32 chipRevision;
-+    gctUINT32 temp;
-+    gctBOOL needResetShader = gcvFALSE;
-+
-+    gcmkHEADER_ARG("Hardware=0x%x Context=0x%x", Hardware, Context);
-+
-+    /* Verify the arguments. */
-+    gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-+    gcmkVERIFY_OBJECT(Context, gcvOBJ_CONTEXT);
-+
-+    chipModel = Hardware->identity.chipModel;
-+    chipRevision = Hardware->identity.chipRevision;
-+    if (chipModel == gcv2000 || (chipModel == gcv2100 && chipRevision == 0x5118))
-+    {
-+        needResetShader = gcvTRUE;
-+    }
-+
-+    /* Read the counters. */
-+    gcmkONERROR(
-+        gckOS_ReadRegisterEx(Hardware->os,
-+                             Hardware->core,
-+                             0x00438,
-+                             &profiler->gpuCyclesCounter));
-+    gcmkUPDATE_PROFILE_DATA(gpuCyclesCounter);
-+
-+    gcmkONERROR(
-+        gckOS_ReadRegisterEx(Hardware->os,
-+                             Hardware->core,
-+                             0x00078,
-+                             &profiler->gpuTotalCyclesCounter));
-+    gcmkUPDATE_PROFILE_DATA(gpuTotalCyclesCounter);
-+
-+    gcmkONERROR(
-+        gckOS_ReadRegisterEx(Hardware->os,
-+                             Hardware->core,
-+                             0x0007C,
-+                             &profiler->gpuIdleCyclesCounter));
-+    gcmkUPDATE_PROFILE_DATA(gpuIdleCyclesCounter);
-+
-+    /* Read clock control register. */
-+    gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
-+                                     Hardware->core,
-+                                     0x00000,
-+                                     &clock));
-+
-+    profiler->gpuTotalRead64BytesPerFrame = 0;
-+    profiler->gpuTotalWrite64BytesPerFrame = 0;
-+    profiler->pe_pixel_count_killed_by_color_pipe = 0;
-+    profiler->pe_pixel_count_killed_by_depth_pipe = 0;
-+    profiler->pe_pixel_count_drawn_by_color_pipe = 0;
-+    profiler->pe_pixel_count_drawn_by_depth_pipe = 0;
-+
-+    /* Walk through all avaiable pixel pipes. */
-+    for (i = 0; i < Hardware->identity.pixelPipes; ++i)
-+    {
-+        /* Select proper pipe. */
-+        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
-+                                           Hardware->core,
-+                                           0x00000,
-+                                           ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20)))));
-+
-+        /* BW */
-+        gcmkONERROR(
-+        gckOS_ReadRegisterEx(Hardware->os,
-+                             Hardware->core,
-+                             0x00040,
-+                             &totalRead));
-+        gcmkONERROR(
-+        gckOS_ReadRegisterEx(Hardware->os,
-+                             Hardware->core,
-+                             0x00044,
-+                             &totalWrite));
-+
-+        profiler->gpuTotalRead64BytesPerFrame += totalRead;
-+        profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
-+        gcmkUPDATE_PROFILE_DATA(gpuTotalRead64BytesPerFrame);
-+        gcmkUPDATE_PROFILE_DATA(gpuTotalWrite64BytesPerFrame);
-+
-+        /* PE */
-+        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorKilled));
-+        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthKilled));
-+        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorDrawn));
-+        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthDrawn));
-+
-+        profiler->pe_pixel_count_killed_by_color_pipe += colorKilled;
-+        profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled;
-+        profiler->pe_pixel_count_drawn_by_color_pipe += colorDrawn;
-+        profiler->pe_pixel_count_drawn_by_depth_pipe += depthDrawn;
-+        gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe);
-+        gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe);
-+        gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_color_pipe);
-+        gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_depth_pipe);
-+    }
-+
-+    /* Reset clock control register. */
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
-+                                      Hardware->core,
-+                                      0x00000,
-+                                      clock));
-+
-+
-+
-+
-+    /* Reset counters. */
-+    gcmkONERROR(
-+        gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 1));
-+    gcmkONERROR(
-+        gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 0));
-+    gcmkONERROR(
-+        gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
-+    gcmkONERROR(
-+        gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
-+));
-+
-+    /* SH */
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_inst_counter));
-+    if (needResetShader)
-+    {
-+        temp = profiler->ps_inst_counter;
-+        profiler->ps_inst_counter -= Context->prevPSInstCount;
-+        Context->prevPSInstCount = temp;
-+    }
-+    gcmkUPDATE_PROFILE_DATA(ps_inst_counter);
-+
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_pixel_counter));
-+    if (needResetShader)
-+    {
-+        temp = profiler->rendered_pixel_counter;
-+        profiler->rendered_pixel_counter -= Context->prevPSPixelCount;
-+        Context->prevPSPixelCount = temp;
-+    }
-+    gcmkUPDATE_PROFILE_DATA(rendered_pixel_counter);
-+
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_inst_counter));
-+    if (needResetShader)
-+    {
-+        temp = profiler->vs_inst_counter;
-+        profiler->vs_inst_counter -= Context->prevVSInstCount;
-+        Context->prevVSInstCount = temp;
-+    }
-+    gcmkUPDATE_PROFILE_DATA(vs_inst_counter);
-+
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_vertice_counter));
-+    if (needResetShader)
-+    {
-+        temp = profiler->rendered_vertice_counter;
-+        profiler->rendered_vertice_counter -= Context->prevVSVertexCount;
-+        Context->prevVSVertexCount = temp;
-+    }
-+    gcmkUPDATE_PROFILE_DATA(rendered_vertice_counter);
-+
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_branch_inst_counter));
-+    if (needResetShader)
-+    {
-+        temp = profiler->vtx_branch_inst_counter;
-+        profiler->vtx_branch_inst_counter -= Context->prevVSBranchInstCount;
-+        Context->prevVSBranchInstCount = temp;
-+    }
-+    gcmkUPDATE_PROFILE_DATA(vtx_branch_inst_counter);
-+
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_texld_inst_counter));
-+    if (needResetShader)
-+    {
-+        temp = profiler->vtx_texld_inst_counter;
-+        profiler->vtx_texld_inst_counter -= Context->prevVSTexInstCount;
-+        Context->prevVSTexInstCount = temp;
-+    }
-+    gcmkUPDATE_PROFILE_DATA(vtx_texld_inst_counter);
-+
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_branch_inst_counter));
-+    if (needResetShader)
-+    {
-+        temp = profiler->pxl_branch_inst_counter;
-+        profiler->pxl_branch_inst_counter -= Context->prevPSBranchInstCount;
-+        Context->prevPSBranchInstCount = temp;
-+    }
-+    gcmkUPDATE_PROFILE_DATA(pxl_branch_inst_counter);
-+
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (14) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_texld_inst_counter));
-+    if (needResetShader)
-+    {
-+        temp = profiler->pxl_texld_inst_counter;
-+        profiler->pxl_texld_inst_counter -= Context->prevPSTexInstCount;
-+        Context->prevPSTexInstCount = temp;
-+    }
-+    gcmkUPDATE_PROFILE_DATA(pxl_texld_inst_counter);
-+
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
-+));
-+
-+    /* PA */
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_vtx_counter));
-+    gcmkUPDATE_PROFILE_DATA(pa_input_vtx_counter);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_prim_counter));
-+    gcmkUPDATE_PROFILE_DATA(pa_input_prim_counter);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_output_prim_counter));
-+    gcmkUPDATE_PROFILE_DATA(pa_output_prim_counter);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_depth_clipped_counter));
-+    gcmkUPDATE_PROFILE_DATA(pa_depth_clipped_counter);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_trivial_rejected_counter));
-+    gcmkUPDATE_PROFILE_DATA(pa_trivial_rejected_counter);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_culled_counter));
-+    gcmkUPDATE_PROFILE_DATA(pa_culled_counter);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
-+));
-+
-+    /* SE */
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_triangle_count));
-+    gcmkUPDATE_PROFILE_DATA(se_culled_triangle_count);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_lines_count));
-+    gcmkUPDATE_PROFILE_DATA(se_culled_lines_count);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
-+));
-+
-+    /* RA */
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_pixel_count));
-+    gcmkUPDATE_PROFILE_DATA(ra_valid_pixel_count);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_quad_count));
-+    gcmkUPDATE_PROFILE_DATA(ra_total_quad_count);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_quad_count_after_early_z));
-+    gcmkUPDATE_PROFILE_DATA(ra_valid_quad_count_after_early_z);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_primitive_count));
-+    gcmkUPDATE_PROFILE_DATA(ra_total_primitive_count);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_pipe_cache_miss_counter));
-+    gcmkUPDATE_PROFILE_DATA(ra_pipe_cache_miss_counter);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_prefetch_cache_miss_counter));
-+    gcmkUPDATE_PROFILE_DATA(ra_prefetch_cache_miss_counter);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
-+));
-+
-+    /* TX */
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_bilinear_requests));
-+    gcmkUPDATE_PROFILE_DATA(tx_total_bilinear_requests);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_trilinear_requests));
-+    gcmkUPDATE_PROFILE_DATA(tx_total_trilinear_requests);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_discarded_texture_requests));
-+    gcmkUPDATE_PROFILE_DATA(tx_total_discarded_texture_requests);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_texture_requests));
-+    gcmkUPDATE_PROFILE_DATA(tx_total_texture_requests);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_count));
-+    gcmkUPDATE_PROFILE_DATA(tx_mem_read_count);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_in_8B_count));
-+    gcmkUPDATE_PROFILE_DATA(tx_mem_read_in_8B_count);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_count));
-+    gcmkUPDATE_PROFILE_DATA(tx_cache_miss_count);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_hit_texel_count));
-+    gcmkUPDATE_PROFILE_DATA(tx_cache_hit_texel_count);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_texel_count));
-+    gcmkUPDATE_PROFILE_DATA(tx_cache_miss_texel_count);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
-+));
-+
-+    /* MC */
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_pipeline));
-+    gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_pipeline);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_IP));
-+    gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_IP);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_write_req_8B_from_pipeline));
-+    gcmkUPDATE_PROFILE_DATA(mc_total_write_req_8B_from_pipeline);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
-+));
-+
-+    /* HI */
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_read_request_stalled));
-+    gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_read_request_stalled);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_request_stalled));
-+    gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_request_stalled);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_data_stalled));
-+    gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_data_stalled);
-+    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
-+gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
-+));
-+
-+    /* Success. */
-+    gcmkFOOTER_NO();
-+    return gcvSTATUS_OK;
-+
-+OnError:
-+    /* Return the status. */
-+    gcmkFOOTER();
-+    return status;
-+}
-+#endif
-+
- static gceSTATUS
- _ResetGPU(
-     IN gckHARDWARE Hardware,
-@@ -5602,6 +6264,22 @@ gckHARDWARE_IsFeatureAvailable(
-             &&      ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
-         break;
- 
-+    case gcvFEATURE_PIPE_2D:
-+        available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 9:9) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))) == (0x1  & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))));
-+        break;
-+
-+    case gcvFEATURE_PIPE_3D:
-+#ifndef VIVANTE_NO_3D
-+        available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1  & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
-+#else
-+        available = gcvFALSE;
-+#endif
-+        break;
-+
-+    case gcvFEATURE_HALTI2:
-+        available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures4)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))));
-+        break;
-+
-     default:
-         gcmkFATAL("Invalid feature has been requested.");
-         available = gcvFALSE;
-diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
-index 37226b7..287ea60 100644
---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
-+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
-@@ -92,6 +92,7 @@ struct _gckHARDWARE
- #endif
- 
-     gctBOOL                     powerManagement;
-+    gctBOOL                     gpuProfiler;
- };
- 
- gceSTATUS
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
-index b7b0d28..12a5340 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
-@@ -128,19 +128,6 @@ _ResetFinishFunction(
- **          Pointer to a variable that will hold the pointer to the gckKERNEL
- **          object.
- */
--#ifdef ANDROID
--#if gcdNEW_PROFILER_FILE
--#define DEFAULT_PROFILE_FILE_NAME   "/sdcard/vprofiler.vpd"
--#else
--#define DEFAULT_PROFILE_FILE_NAME   "/sdcard/vprofiler.xml"
--#endif
--#else
--#if gcdNEW_PROFILER_FILE
--#define DEFAULT_PROFILE_FILE_NAME   "vprofiler.vpd"
--#else
--#define DEFAULT_PROFILE_FILE_NAME   "vprofiler.xml"
--#endif
--#endif
- 
- gceSTATUS
- gckKERNEL_Construct(
-@@ -302,17 +289,12 @@ gckKERNEL_Construct(
- 
- #if VIVANTE_PROFILER
-     /* Initialize profile setting */
--#if defined ANDROID
-     kernel->profileEnable = gcvFALSE;
--#else
--    kernel->profileEnable = gcvTRUE;
--#endif
-     kernel->profileCleanRegister = gcvTRUE;
-+#endif
- 
--    gcmkVERIFY_OK(
--        gckOS_MemCopy(kernel->profileFileName,
--                      DEFAULT_PROFILE_FILE_NAME,
--                      gcmSIZEOF(DEFAULT_PROFILE_FILE_NAME) + 1));
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+    gcmkONERROR(gckOS_CreateSyncTimeline(Os, &kernel->timeline));
- #endif
- 
-     /* Return pointer to the gckKERNEL object. */
-@@ -395,6 +377,13 @@ OnError:
-         }
- #endif
- 
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+        if (kernel->timeline)
-+        {
-+            gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Os, kernel->timeline));
-+        }
-+#endif
-+
-         gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, kernel));
-     }
- 
-@@ -525,6 +514,10 @@ gckKERNEL_Destroy(
-     }
- #endif
- 
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+    gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Kernel->os, Kernel->timeline));
-+#endif
-+
-     /* Mark the gckKERNEL object as unknown. */
-     Kernel->object.type = gcvOBJ_UNKNOWN;
- 
-@@ -1310,7 +1303,8 @@ gckKERNEL_Dispatch(
-         /* Commit a command and context buffer. */
-         gcmkONERROR(
-             gckCOMMAND_Commit(Kernel->command,
--                              gcmNAME_TO_PTR(Interface->u.Commit.context),
-+                              Interface->u.Commit.context ?
-+                                  gcmNAME_TO_PTR(Interface->u.Commit.context) : gcvNULL,
-                               gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer),
-                               gcmUINT64_TO_PTR(Interface->u.Commit.delta),
-                               gcmUINT64_TO_PTR(Interface->u.Commit.queue),
-@@ -1600,7 +1594,15 @@ gckKERNEL_Dispatch(
-         break;
- 
-     case gcvHAL_READ_ALL_PROFILE_REGISTERS:
--#if VIVANTE_PROFILER
-+#if VIVANTE_PROFILER && VIVANTE_PROFILER_CONTEXT
-+        /* Read profile data according to the context. */
-+        gcmkONERROR(
-+            gckHARDWARE_QueryContextProfile(
-+                Kernel->hardware,
-+                Kernel->profileCleanRegister,
-+                gcmNAME_TO_PTR(Interface->u.RegisterProfileData.context),
-+                &Interface->u.RegisterProfileData.counters));
-+#elif VIVANTE_PROFILER
-         /* Read all 3D profile registers. */
-         gcmkONERROR(
-             gckHARDWARE_QueryProfileRegisters(
-@@ -1628,11 +1630,6 @@ gckKERNEL_Dispatch(
- #if VIVANTE_PROFILER
-         /* Get profile setting */
-         Interface->u.GetProfileSetting.enable = Kernel->profileEnable;
--
--        gcmkVERIFY_OK(
--            gckOS_MemCopy(Interface->u.GetProfileSetting.fileName,
--                          Kernel->profileFileName,
--                          gcdMAX_PROFILE_FILE_NAME));
- #endif
- 
-         status = gcvSTATUS_OK;
-@@ -1640,12 +1637,13 @@ gckKERNEL_Dispatch(
-     case gcvHAL_SET_PROFILE_SETTING:
- #if VIVANTE_PROFILER
-         /* Set profile setting */
--        Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
--
--        gcmkVERIFY_OK(
--            gckOS_MemCopy(Kernel->profileFileName,
--                          Interface->u.SetProfileSetting.fileName,
--                          gcdMAX_PROFILE_FILE_NAME));
-+        if(Kernel->hardware->gpuProfiler)
-+            Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
-+        else
-+        {
-+            status = gcvSTATUS_NOT_SUPPORTED;
-+            break;
-+        }
- #endif
- 
-         status = gcvSTATUS_OK;
-@@ -2093,6 +2091,61 @@ gckKERNEL_Dispatch(
- #endif
-         break;
- 
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+    case gcvHAL_SYNC_POINT:
-+        {
-+            gctSYNC_POINT syncPoint;
-+
-+            switch (Interface->u.SyncPoint.command)
-+            {
-+            case gcvSYNC_POINT_CREATE:
-+                gcmkONERROR(gckOS_CreateSyncPoint(Kernel->os, &syncPoint));
-+
-+                Interface->u.SyncPoint.syncPoint = gcmPTR_TO_UINT64(syncPoint);
-+
-+                gcmkVERIFY_OK(
-+                    gckKERNEL_AddProcessDB(Kernel,
-+                                           processID, gcvDB_SYNC_POINT,
-+                                           syncPoint,
-+                                           gcvNULL,
-+                                           0));
-+                break;
-+
-+            case gcvSYNC_POINT_DESTROY:
-+                syncPoint = gcmUINT64_TO_PTR(Interface->u.SyncPoint.syncPoint);
-+
-+                gcmkONERROR(gckOS_DestroySyncPoint(Kernel->os, syncPoint));
-+
-+                gcmkVERIFY_OK(
-+                    gckKERNEL_RemoveProcessDB(Kernel,
-+                                              processID, gcvDB_SYNC_POINT,
-+                                              syncPoint));
-+                break;
-+
-+            default:
-+                gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
-+                break;
-+            }
-+        }
-+        break;
-+
-+    case gcvHAL_CREATE_NATIVE_FENCE:
-+        {
-+            gctINT fenceFD;
-+            gctSYNC_POINT syncPoint =
-+                gcmUINT64_TO_PTR(Interface->u.CreateNativeFence.syncPoint);
-+
-+            gcmkONERROR(
-+                gckOS_CreateNativeFence(Kernel->os,
-+                                        Kernel->timeline,
-+                                        syncPoint,
-+                                        &fenceFD));
-+
-+            Interface->u.CreateNativeFence.fenceFD = fenceFD;
-+        }
-+        break;
-+#endif
-+
-     default:
-         /* Invalid command. */
-         gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
-@@ -2856,6 +2909,8 @@ gckKERNEL_Recovery(
-         return gcvSTATUS_OK;
-     }
- 
-+    gcmkPRINT("[galcore]: GPU[%d] hang, automatic recovery.", Kernel->core);
-+
-     /* Start a timer to clear reset flag, before timer is expired,
-     ** other recovery request is ignored. */
-     gcmkVERIFY_OK(
-@@ -3382,7 +3437,7 @@ gckLINKQUEUE_Dequeue(
-     IN gckLINKQUEUE LinkQueue
-     )
- {
--    gcmASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
-+    gcmkASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
- 
-     LinkQueue->count--;
-     LinkQueue->front = (LinkQueue->front + 1) % gcdLINK_QUEUE_SIZE;
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
-index 5896e93..1c40df2 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
-@@ -140,8 +140,9 @@ typedef enum _gceDATABASE_TYPE
-     gcvDB_CONTEXT,                      /* Context */
-     gcvDB_IDLE,                         /* GPU idle. */
-     gcvDB_MAP_MEMORY,                   /* Map memory */
--    gcvDB_SHARED_INFO,                 /* Private data */
--    gcvDB_MAP_USER_MEMORY               /* Map user memory */
-+    gcvDB_SHARED_INFO,                  /* Private data */
-+    gcvDB_MAP_USER_MEMORY,              /* Map user memory */
-+    gcvDB_SYNC_POINT,                   /* Sync point. */
- }
- gceDATABASE_TYPE;
- 
-@@ -406,9 +407,6 @@ struct _gckKERNEL
-     /* Enable profiling */
-     gctBOOL                     profileEnable;
- 
--    /* The profile file name */
--    gctCHAR                     profileFileName[gcdMAX_PROFILE_FILE_NAME];
--
-     /* Clear profile register or not*/
-     gctBOOL                     profileCleanRegister;
- 
-@@ -445,6 +443,10 @@ struct _gckKERNEL
- #if gcdDVFS
-     gckDVFS                     dvfs;
- #endif
-+
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+    gctHANDLE                   timeline;
-+#endif
- };
- 
- struct _FrequencyHistory
-@@ -496,6 +498,11 @@ struct _gckCOMMAND
-     /* Context switching mutex. */
-     gctPOINTER                  mutexContext;
- 
-+#if VIVANTE_PROFILER_CONTEXT
-+    /* Context sequence mutex. */
-+    gctPOINTER                  mutexContextSeq;
-+#endif
-+
-     /* Command queue power semaphore. */
-     gctPOINTER                  powerSemaphore;
- 
-@@ -649,6 +656,8 @@ struct _gckEVENT
-     gctPOINTER                  eventListMutex;
- 
-     gctPOINTER                  submitTimer;
-+
-+    volatile gctBOOL            inNotify;
- };
- 
- /* Free all events belonging to a process. */
-@@ -668,6 +677,11 @@ gckEVENT_Stop(
- 	IN OUT gctSIZE_T * waitSize
-     );
- 
-+gceSTATUS
-+gckEVENT_WaitEmpty(
-+    IN gckEVENT Event
-+    );
-+
- /* gcuVIDMEM_NODE structure. */
- typedef union _gcuVIDMEM_NODE
- {
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
-index 9ee9ea1..73dab81 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
-@@ -494,6 +494,11 @@ gckCOMMAND_Construct(
-     /* Create the context switching mutex. */
-     gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContext));
- 
-+#if VIVANTE_PROFILER_CONTEXT
-+    /* Create the context switching mutex. */
-+    gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContextSeq));
-+#endif
-+
-     /* Create the power management semaphore. */
-     gcmkONERROR(gckOS_CreateSemaphore(os, &command->powerSemaphore));
- 
-@@ -572,6 +577,13 @@ OnError:
-             gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContext));
-         }
- 
-+#if VIVANTE_PROFILER_CONTEXT
-+        if (command->mutexContextSeq != gcvNULL)
-+        {
-+            gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContextSeq));
-+        }
-+#endif
-+
-         if (command->mutexQueue != gcvNULL)
-         {
-             gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexQueue));
-@@ -662,6 +674,11 @@ gckCOMMAND_Destroy(
-     /* Delete the context switching mutex. */
-     gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContext));
- 
-+#if VIVANTE_PROFILER_CONTEXT
-+    if (Command->mutexContextSeq != gcvNULL)
-+        gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContextSeq));
-+#endif
-+
-     /* Delete the command queue mutex. */
-     gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexQueue));
- 
-@@ -1127,6 +1144,10 @@ gckCOMMAND_Commit(
- # endif
- #endif
- 
-+#if VIVANTE_PROFILER_CONTEXT
-+    gctBOOL sequenceAcquired = gcvFALSE;
-+#endif
-+
-     gctPOINTER pointer = gcvNULL;
- 
-     gcmkHEADER_ARG(
-@@ -1145,6 +1166,17 @@ gckCOMMAND_Commit(
- 
-     gcmkONERROR(_FlushMMU(Command));
- 
-+#if VIVANTE_PROFILER_CONTEXT
-+    if((Command->kernel->hardware->gpuProfiler) && (Command->kernel->profileEnable))
-+    {
-+        /* Acquire the context sequnence mutex. */
-+        gcmkONERROR(gckOS_AcquireMutex(
-+            Command->os, Command->mutexContextSeq, gcvINFINITE
-+            ));
-+        sequenceAcquired = gcvTRUE;
-+    }
-+#endif
-+
-     /* Acquire the command queue. */
-     gcmkONERROR(gckCOMMAND_EnterCommit(Command, gcvFALSE));
-     commitEntered = gcvTRUE;
-@@ -2002,6 +2034,23 @@ gckCOMMAND_Commit(
-     gcmkONERROR(gckCOMMAND_ExitCommit(Command, gcvFALSE));
-     commitEntered = gcvFALSE;
- 
-+#if VIVANTE_PROFILER_CONTEXT
-+    if(sequenceAcquired)
-+    {
-+        gcmkONERROR(gckCOMMAND_Stall(Command, gcvTRUE));
-+        if (Command->currContext)
-+        {
-+            gcmkONERROR(gckHARDWARE_UpdateContextProfile(
-+                hardware,
-+                Command->currContext));
-+        }
-+
-+        /* Release the context switching mutex. */
-+        gcmkONERROR(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
-+        sequenceAcquired = gcvFALSE;
-+    }
-+#endif
-+
-     /* Loop while there are records in the queue. */
-     while (EventQueue != gcvNULL)
-     {
-@@ -2114,6 +2163,14 @@ OnError:
-         gcmkVERIFY_OK(gckCOMMAND_ExitCommit(Command, gcvFALSE));
-     }
- 
-+#if VIVANTE_PROFILER_CONTEXT
-+    if (sequenceAcquired)
-+    {
-+        /* Release the context sequence mutex. */
-+        gcmkVERIFY_OK(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
-+    }
-+#endif
-+
-     /* Unmap the command buffer pointer. */
-     if (commandBufferMapped)
-     {
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
-index 76c1c10..1a7c340 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
-@@ -2819,6 +2819,7 @@ gckVGCOMMAND_Construct(
-         ** Enable TS overflow interrupt.
-         */
- 
-+        command->info.tsOverflowInt = 0;
-         gcmkERR_BREAK(gckVGINTERRUPT_Enable(
-             Kernel->interrupt,
-             &command->info.tsOverflowInt,
-@@ -3406,38 +3407,26 @@ gckVGCOMMAND_Commit(
-         gctBOOL previousExecuted;
-         gctUINT controlIndex;
- 
-+        gcmkERR_BREAK(gckVGHARDWARE_SetPowerManagementState(
-+            Command->hardware, gcvPOWER_ON_AUTO
-+            ));
-+
-+        /* Acquire the power semaphore. */
-+        gcmkERR_BREAK(gckOS_AcquireSemaphore(
-+            Command->os, Command->powerSemaphore
-+            ));
-+
-         /* Acquire the mutex. */
--        gcmkERR_BREAK(gckOS_AcquireMutex(
-+        status = gckOS_AcquireMutex(
-             Command->os,
-             Command->commitMutex,
-             gcvINFINITE
--            ));
--
--        status = gckVGHARDWARE_SetPowerManagementState(
--            Command->hardware, gcvPOWER_ON_AUTO);
--
--        if (gcmIS_ERROR(status))
--        {
--            /* Acquire the mutex. */
--            gcmkVERIFY_OK(gckOS_ReleaseMutex(
--                Command->os,
--                Command->commitMutex
--                ));
--
--            break;
--        }
--            /* Acquire the power semaphore. */
--        status = gckOS_AcquireSemaphore(
--            Command->os, Command->powerSemaphore);
-+            );
- 
-         if (gcmIS_ERROR(status))
-         {
--            /* Acquire the mutex. */
--            gcmkVERIFY_OK(gckOS_ReleaseMutex(
--                Command->os,
--                Command->commitMutex
--                ));
--
-+            gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
-+                Command->os, Command->powerSemaphore));
-             break;
-         }
- 
-@@ -3669,14 +3658,14 @@ gckVGCOMMAND_Commit(
-         }
-         while (gcvFALSE);
- 
--        gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
--            Command->os, Command->powerSemaphore));
--
-         /* Release the mutex. */
-         gcmkCHECK_STATUS(gckOS_ReleaseMutex(
-             Command->os,
-             Command->commitMutex
-             ));
-+
-+        gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
-+            Command->os, Command->powerSemaphore));
-     }
-     while (gcvFALSE);
- 
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
-index 673d4f7..134351a 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
-@@ -1307,6 +1307,18 @@ gckKERNEL_DestroyProcessDB(
-             status = gckOS_FreeMemory(Kernel->os, record->physical);
-             break;
- 
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+        case gcvDB_SYNC_POINT:
-+            /* Free the user signal. */
-+            status = gckOS_DestroySyncPoint(Kernel->os,
-+                                            (gctSYNC_POINT) record->data);
-+
-+            gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
-+                           "DB: SYNC POINT %d (status=%d)",
-+                           (gctINT)(gctUINTPTR_T)record->data, status);
-+            break;
-+#endif
-+
-         default:
-             gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE,
-                            "DB: Correcupted record=0x%08x type=%d",
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
-index 217f7f1..2d81a56 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
-@@ -931,6 +931,7 @@ gckEVENT_AddList(
-         || (Interface->command == gcvHAL_TIMESTAMP)
-         || (Interface->command == gcvHAL_COMMIT_DONE)
-         || (Interface->command == gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER)
-+        || (Interface->command == gcvHAL_SYNC_POINT)
-         );
- 
-     /* Validate the source. */
-@@ -2131,6 +2132,9 @@ gckEVENT_Notify(
-                                        gcvINFINITE));
-         acquired = gcvTRUE;
- 
-+        /* We are in the notify loop. */
-+        Event->inNotify = gcvTRUE;
-+
-         /* Grab the event head. */
-         record = queue->head;
- 
-@@ -2463,6 +2467,17 @@ gckEVENT_Notify(
-                  break;
- #endif
- 
-+#if gcdANDROID_NATIVE_FENCE_SYNC
-+            case gcvHAL_SYNC_POINT:
-+                {
-+                    gctSYNC_POINT syncPoint;
-+
-+                    syncPoint = gcmUINT64_TO_PTR(record->info.u.SyncPoint.syncPoint);
-+                    status = gckOS_SignalSyncPoint(Event->os, syncPoint);
-+                }
-+                break;
-+#endif
-+
-             case gcvHAL_COMMIT_DONE:
-                 break;
- 
-@@ -2505,6 +2520,9 @@ gckEVENT_Notify(
-         gcmkONERROR(_TryToIdleGPU(Event));
-     }
- 
-+    /* We are out the notify loop. */
-+    Event->inNotify = gcvFALSE;
-+
-     /* Success. */
-     gcmkFOOTER_NO();
-     return gcvSTATUS_OK;
-@@ -2524,6 +2542,9 @@ OnError:
-     }
- #endif
- 
-+    /* We are out the notify loop. */
-+    Event->inNotify = gcvFALSE;
-+
-     /* Return the status. */
-     gcmkFOOTER();
-     return status;
-@@ -2871,3 +2892,11 @@ gckEVENT_Dump(
-     return gcvSTATUS_OK;
- }
- 
-+gceSTATUS gckEVENT_WaitEmpty(gckEVENT Event)
-+{
-+    gctBOOL isEmpty;
-+
-+    while (Event->inNotify || (gcmIS_SUCCESS(gckEVENT_IsEmpty(Event, &isEmpty)) && !isEmpty)) ;
-+
-+    return gcvSTATUS_OK;
-+}
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
-index 8ac187b..50bc63e 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
-@@ -794,6 +794,9 @@ gckVGINTERRUPT_Enque(
-             Interrupt->kernel->hardware, &triggered
-             ));
- 
-+        /* Mask out TS overflow interrupt */
-+        triggered &= 0xfffffffe;
-+
-         /* No interrupts to process? */
-         if (triggered == 0)
-         {
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
-index c7f67c7..e4ca497 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
-@@ -1436,7 +1436,7 @@ gckMMU_AllocatePages(
-     acquired = gcvTRUE;
- 
-     /* Allocate page table for current MMU. */
--    for (i = 0; i < mirrorPageTable->reference; i++)
-+    for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
-     {
-         if (Mmu == mirrorPageTable->mmus[i])
-         {
-@@ -1446,7 +1446,7 @@ gckMMU_AllocatePages(
-     }
- 
-     /* Allocate page table for other MMUs. */
--    for (i = 0; i < mirrorPageTable->reference; i++)
-+    for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
-     {
-         mmu = mirrorPageTable->mmus[i];
- 
-@@ -1500,7 +1500,7 @@ gckMMU_FreePages(
- 
-     offset = (gctUINT32)PageTable - (gctUINT32)Mmu->pageTableLogical;
- 
--    for (i = 0; i < mirrorPageTable->reference; i++)
-+    for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
-     {
-         mmu = mirrorPageTable->mmus[i];
- 
-@@ -1639,7 +1639,7 @@ gckMMU_SetPage(
-     _WritePageEntry(PageEntry, data);
- 
- #if gcdMIRROR_PAGETABLE
--    for (i = 0; i < mirrorPageTable->reference; i++)
-+    for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
-     {
-         mmu = mirrorPageTable->mmus[i];
- 
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
-index 8b8bbdc..3b5dd82 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
-@@ -1582,6 +1582,7 @@ _NeedVirtualMapping(
-     gctUINT32 end;
-     gcePOOL pool;
-     gctUINT32 offset;
-+    gctUINT32 baseAddress;
- 
-     gcmkHEADER_ARG("Node=0x%X", Node);
- 
-@@ -1601,10 +1602,16 @@ _NeedVirtualMapping(
-         else
- #endif
-         {
--            /* For cores which can't access all physical address. */
--            gcmkONERROR(gckHARDWARE_ConvertLogical(Kernel->hardware,
--                        Node->Virtual.logical,
--                        &phys));
-+            /* Convert logical address into a physical address. */
-+            gcmkONERROR(
-+                gckOS_GetPhysicalAddress(Kernel->os, Node->Virtual.logical, &phys));
-+
-+            gcmkONERROR(gckOS_GetBaseAddress(Kernel->os, &baseAddress));
-+
-+            gcmkASSERT(phys >= baseAddress);
-+
-+            /* Subtract baseAddress to get a GPU address used for programming. */
-+            phys -= baseAddress;
- 
-             /* If part of region is belong to gcvPOOL_VIRTUAL,
-             ** whole region has to be mapped. */
-@@ -1734,6 +1741,11 @@ gckVIDMEM_Lock(
-         gcmkONERROR(gckOS_AcquireMutex(os, Node->Virtual.mutex, gcvINFINITE));
-         acquired = gcvTRUE;
- 
-+#if gcdPAGED_MEMORY_CACHEABLE
-+        /* Force video memory cacheable. */
-+        Cacheable = gcvTRUE;
-+#endif
-+
-         gcmkONERROR(
-             gckOS_LockPages(os,
-                             Node->Virtual.physical,
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
-index 4406d7e..7312cc2 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
-@@ -123,6 +123,12 @@ extern "C" {
- 
- #define gcvINVALID_ADDRESS          ~0U
- 
-+#define gcmGET_PRE_ROTATION(rotate) \
-+    ((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)))
-+
-+#define gcmGET_POST_ROTATION(rotate) \
-+    ((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y))
-+
- /******************************************************************************\
- ******************************** gcsOBJECT Object *******************************
- \******************************************************************************/
-@@ -1124,6 +1130,60 @@ gckOS_UnmapUserMemory(
-     IN gctUINT32 Address
-     );
- 
-+/******************************************************************************\
-+************************** Android Native Fence Sync ***************************
-+\******************************************************************************/
-+gceSTATUS
-+gckOS_CreateSyncTimeline(
-+    IN gckOS Os,
-+    OUT gctHANDLE * Timeline
-+    );
-+
-+gceSTATUS
-+gckOS_DestroySyncTimeline(
-+    IN gckOS Os,
-+    IN gctHANDLE Timeline
-+    );
-+
-+gceSTATUS
-+gckOS_CreateSyncPoint(
-+    IN gckOS Os,
-+    OUT gctSYNC_POINT * SyncPoint
-+    );
-+
-+gceSTATUS
-+gckOS_ReferenceSyncPoint(
-+    IN gckOS Os,
-+    IN gctSYNC_POINT SyncPoint
-+    );
-+
-+gceSTATUS
-+gckOS_DestroySyncPoint(
-+    IN gckOS Os,
-+    IN gctSYNC_POINT SyncPoint
-+    );
-+
-+gceSTATUS
-+gckOS_SignalSyncPoint(
-+    IN gckOS Os,
-+    IN gctSYNC_POINT SyncPoint
-+    );
-+
-+gceSTATUS
-+gckOS_QuerySyncPoint(
-+    IN gckOS Os,
-+    IN gctSYNC_POINT SyncPoint,
-+    OUT gctBOOL_PTR State
-+    );
-+
-+gceSTATUS
-+gckOS_CreateNativeFence(
-+    IN gckOS Os,
-+    IN gctHANDLE Timeline,
-+    IN gctSYNC_POINT SyncPoint,
-+    OUT gctINT * FenceFD
-+    );
-+
- #if !USE_NEW_LINUX_SIGNAL
- /* Create signal to be used in the user space. */
- gceSTATUS
-@@ -1758,7 +1818,7 @@ gckKERNEL_Recovery(
- void
- gckKERNEL_SetTimeOut(
-     IN gckKERNEL Kernel,
--	IN gctUINT32 timeOut
-+    IN gctUINT32 timeOut
-     );
- 
- /* Get access to the user data. */
-@@ -2078,6 +2138,12 @@ gckHARDWARE_SetPowerManagement(
-     IN gctBOOL PowerManagement
-     );
- 
-+gceSTATUS
-+gckHARDWARE_SetGpuProfiler(
-+    IN gckHARDWARE Hardware,
-+    IN gctBOOL GpuProfiler
-+    );
-+
- #if gcdENABLE_FSCALE_VAL_ADJUST
- gceSTATUS
- gckHARDWARE_SetFscaleValue(
-@@ -2554,6 +2620,22 @@ gckHARDWARE_QueryProfileRegisters(
-     );
- #endif
- 
-+#if VIVANTE_PROFILER_CONTEXT
-+gceSTATUS
-+gckHARDWARE_QueryContextProfile(
-+    IN gckHARDWARE Hardware,
-+    IN gctBOOL   Clear,
-+    IN gckCONTEXT Context,
-+    OUT gcsPROFILER_COUNTERS * Counters
-+    );
-+
-+gceSTATUS
-+gckHARDWARE_UpdateContextProfile(
-+    IN gckHARDWARE Hardware,
-+    IN gckCONTEXT Context
-+    );
-+#endif
-+
- gceSTATUS
- gckOS_SignalQueryHardware(
-     IN gckOS Os,
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
-index 44689b0..9c17114 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
-@@ -71,10 +71,17 @@ typedef struct _gcoFENCE *              gcoFENCE;
- typedef struct _gcsSYNC_CONTEXT  *      gcsSYNC_CONTEXT_PTR;
- #endif
- 
-+typedef struct _gcoOS_SymbolsList gcoOS_SymbolsList;
-+
- /******************************************************************************\
- ******************************* Process local storage *************************
- \******************************************************************************/
- typedef struct _gcsPLS * gcsPLS_PTR;
-+
-+typedef void (* gctPLS_DESTRUCTOR) (
-+    gcsPLS_PTR
-+    );
-+
- typedef struct _gcsPLS
- {
-     /* Global objects. */
-@@ -103,6 +110,12 @@ typedef struct _gcsPLS
- 
-     /* PorcessID of the constrcutor process */
-     gctUINT32                   processID;
-+#if gcdFORCE_GAL_LOAD_TWICE
-+    /* ThreadID of the constrcutor process. */
-+    gctSIZE_T                   threadID;
-+    /* Flag for calling module destructor. */
-+    gctBOOL                     exiting;
-+#endif
- 
-     /* Reference count for destructor. */
-     gcsATOM_PTR                 reference;
-@@ -111,6 +124,8 @@ typedef struct _gcsPLS
-     gctBOOL                     bNeedSupportNP2Texture;
- #endif
- 
-+    /* Destructor for eglDisplayInfo. */
-+    gctPLS_DESTRUCTOR           destructor;
- }
- gcsPLS;
- 
-@@ -148,6 +163,11 @@ typedef struct _gcsTLS
- #endif
- 	gco2D						engine2D;
-     gctBOOL                     copied;
-+
-+#if gcdFORCE_GAL_LOAD_TWICE
-+    /* libGAL.so handle */
-+    gctHANDLE                   handle;
-+#endif
- }
- gcsTLS;
- 
-@@ -160,6 +180,7 @@ typedef enum _gcePLS_VALUE
-   gcePLS_VALUE_EGL_DISPLAY_INFO,
-   gcePLS_VALUE_EGL_SURFACE_INFO,
-   gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO,
-+  gcePLS_VALUE_EGL_DESTRUCTOR_INFO,
- }
- gcePLS_VALUE;
- 
-@@ -577,6 +598,12 @@ gcoHAL_Call(
-     IN OUT gcsHAL_INTERFACE_PTR Interface
-     );
- 
-+gceSTATUS
-+gcoHAL_GetPatchID(
-+    IN  gcoHAL Hal,
-+    OUT gcePATCH_ID * PatchID
-+    );
-+
- /* Schedule an event. */
- gceSTATUS
- gcoHAL_ScheduleEvent(
-@@ -637,6 +664,16 @@ gcoHAL_QuerySeparated3D2D(
-     IN gcoHAL Hal
-     );
- 
-+gceSTATUS
-+gcoHAL_QuerySpecialHint(
-+    IN gceSPECIAL_HINT Hint
-+    );
-+
-+gceSTATUS
-+gcoHAL_SetSpecialHintData(
-+    IN gcoHARDWARE Hardware
-+    );
-+
- /* Get pointer to gcoVG object. */
- gceSTATUS
- gcoHAL_GetVGEngine(
-@@ -786,7 +823,6 @@ gcoOS_FreeVideoMemory(
-     IN gctPOINTER Handle
-     );
- 
--#if gcdENABLE_BANK_ALIGNMENT
- gceSTATUS
- gcoSURF_GetBankOffsetBytes(
-     IN gcoSURF Surfce,
-@@ -794,7 +830,6 @@ gcoSURF_GetBankOffsetBytes(
-     IN gctUINT32 Stride,
-     IN gctUINT32_PTR Bytes
-     );
--#endif
- 
- /* Map user memory. */
- gceSTATUS
-@@ -918,6 +953,21 @@ gcoOS_Flush(
-     IN gctFILE File
-     );
- 
-+/* Close a file descriptor. */
-+gceSTATUS
-+gcoOS_CloseFD(
-+    IN gcoOS Os,
-+    IN gctINT FD
-+    );
-+
-+/* Dup file descriptor to another. */
-+gceSTATUS
-+gcoOS_DupFD(
-+    IN gcoOS Os,
-+    IN gctINT FD,
-+    OUT gctINT * FD2
-+    );
-+
- /* Create an endpoint for communication. */
- gceSTATUS
- gcoOS_Socket(
-@@ -977,6 +1027,14 @@ gcoOS_GetEnv(
-     OUT gctSTRING * Value
-     );
- 
-+/* Set environment variable value. */
-+gceSTATUS
-+gcoOS_SetEnv(
-+    IN gcoOS Os,
-+    IN gctCONST_STRING VarName,
-+    IN gctSTRING Value
-+    );
-+
- /* Get current working directory. */
- gceSTATUS
- gcoOS_GetCwd(
-@@ -1210,6 +1268,13 @@ gcoOS_DetectProcessByEncryptedName(
-     IN gctCONST_STRING Name
-     );
- 
-+#if defined(ANDROID)
-+gceSTATUS
-+gcoOS_DetectProgrameByEncryptedSymbols(
-+    IN gcoOS_SymbolsList Symbols
-+    );
-+#endif
-+
- /*----------------------------------------------------------------------------*/
- /*----- Atoms ----------------------------------------------------------------*/
- 
-@@ -1403,6 +1468,42 @@ gcoOS_UnmapSignal(
-     IN gctSIGNAL Signal
-     );
- 
-+/*----------------------------------------------------------------------------*/
-+/*----- Android Native Fence -------------------------------------------------*/
-+
-+/* Create sync point. */
-+gceSTATUS
-+gcoOS_CreateSyncPoint(
-+    IN gcoOS Os,
-+    OUT gctSYNC_POINT * SyncPoint
-+    );
-+
-+/* Destroy sync point. */
-+gceSTATUS
-+gcoOS_DestroySyncPoint(
-+    IN gcoOS Os,
-+    IN gctSYNC_POINT SyncPoint
-+    );
-+
-+/* Create native fence. */
-+gceSTATUS
-+gcoOS_CreateNativeFence(
-+    IN gcoOS Os,
-+    IN gctSYNC_POINT SyncPoint,
-+    OUT gctINT * FenceFD
-+    );
-+
-+/* Wait on native fence. */
-+gceSTATUS
-+gcoOS_WaitNativeFence(
-+    IN gcoOS Os,
-+    IN gctINT FenceFD,
-+    IN gctUINT32 Timeout
-+    );
-+
-+/*----------------------------------------------------------------------------*/
-+/*----- Memory Access and Cache ----------------------------------------------*/
-+
- /* Write a register. */
- gceSTATUS
- gcoOS_WriteRegister(
-@@ -1507,7 +1608,7 @@ gcoOS_QueryProfileTickRate(
- #   define gcmPROFILE_QUERY(start, ticks)   do { } while (gcvFALSE)
- #   define gcmPROFILE_ONLY(x)               do { } while (gcvFALSE)
- #   define gcmPROFILE_ELSE(x)               x
--#   define gcmPROFILE_DECLARE_ONLY(x)       typedef x
-+#   define gcmPROFILE_DECLARE_ONLY(x)       do { } while (gcvFALSE) 
- #   define gcmPROFILE_DECLARE_ELSE(x)       x
- #endif
- 
-@@ -1579,6 +1680,28 @@ typedef struct _gcsRECT
- }
- gcsRECT;
- 
-+typedef union _gcsPIXEL
-+{
-+    struct
-+    {
-+        gctFLOAT r, g, b, a;
-+        gctFLOAT d, s;
-+    } pf;
-+
-+    struct
-+    {
-+        gctINT32 r, g, b, a;
-+        gctINT32 d, s;
-+    } pi;
-+
-+    struct
-+    {
-+        gctUINT32 r, g, b, a;
-+        gctUINT32 d, s;
-+    } pui;
-+
-+} gcsPIXEL;
-+
- 
- /******************************************************************************\
- ********************************* gcoSURF Object ********************************
-@@ -1795,6 +1918,18 @@ gcoSURF_SetRotation(
-     );
- 
- gceSTATUS
-+gcoSURF_SetPreRotation(
-+    IN gcoSURF Surface,
-+    IN gceSURF_ROTATION Rotation
-+    );
-+
-+gceSTATUS
-+gcoSURF_GetPreRotation(
-+    IN gcoSURF Surface,
-+    IN gceSURF_ROTATION *Rotation
-+    );
-+
-+gceSTATUS
- gcoSURF_IsValid(
-     IN gcoSURF Surface
-     );
-@@ -1824,6 +1959,15 @@ gcoSURF_DisableTileStatus(
-     IN gcoSURF Surface,
-     IN gctBOOL Decompress
-     );
-+
-+gceSTATUS
-+gcoSURF_AlignResolveRect(
-+    IN gcoSURF Surf,
-+    IN gcsPOINT_PTR RectOrigin,
-+    IN gcsPOINT_PTR RectSize,
-+    OUT gcsPOINT_PTR AlignedOrigin,
-+    OUT gcsPOINT_PTR AlignedSize
-+    );
- #endif /* VIVANTE_NO_3D */
- 
- /* Get surface size. */
-@@ -1910,6 +2054,9 @@ gcoSURF_FillFromTile(
-     IN gcoSURF Surface
-     );
- 
-+/* Check if surface needs a filler. */
-+gceSTATUS gcoSURF_NeedFiller(IN gcoSURF Surface);
-+
- /* Fill surface with a value. */
- gceSTATUS
- gcoSURF_Fill(
-@@ -1949,6 +2096,19 @@ gcoSURF_SetBuffer(
-     IN gctUINT32 Physical
-     );
- 
-+/* Set the underlying video buffer for the surface wrapper. */
-+gceSTATUS
-+gcoSURF_SetVideoBuffer(
-+    IN gcoSURF Surface,
-+    IN gceSURF_TYPE Type,
-+    IN gceSURF_FORMAT Format,
-+    IN gctUINT Width,
-+    IN gctUINT Height,
-+    IN gctUINT Stride,
-+    IN gctPOINTER *LogicalPlane1,
-+    IN gctUINT32 *PhysicalPlane1
-+    );
-+
- /* Set the size of the surface in pixels and map the underlying buffer. */
- gceSTATUS
- gcoSURF_SetWindow(
-@@ -3705,6 +3865,12 @@ gcGetUserDebugOption(
-     void
-     );
- 
-+struct _gcoOS_SymbolsList
-+{
-+    gcePATCH_ID patchId;
-+    const char * symList[10];
-+};
-+
- #if gcdHAS_ELLIPSES
- #define gcmUSER_DEBUG_MSG(level, ...) \
-     do \
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
-index 8693c37..062224c 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
-@@ -39,12 +39,10 @@ extern "C" {
- #define GC_ENABLE_LOADTIME_OPT           1
- #endif
- 
--#define TEMP_OPT_CONSTANT_TEXLD_COORD    1
-+#define TEMP_OPT_CONSTANT_TEXLD_COORD    0
- 
- #define TEMP_SHADER_PATCH                1
- 
--#define ADD_PRE_ROTATION_TO_VS           0
--
- #define TEMP_INLINE_ALL_EXPANSION            1
- /******************************* IR VERSION ******************/
- #define gcdSL_IR_VERSION gcmCC('\0','\0','\0','\1')
-@@ -271,6 +269,7 @@ typedef enum _gcSL_OPCODE
- 	gcSL_ADDSAT,						/* 0x5C */  /* Integer only. */
- 	gcSL_SUBSAT,						/* 0x5D */  /* Integer only. */
- 	gcSL_MULSAT,						/* 0x5E */  /* Integer only. */
-+	gcSL_DP2,							/* 0x5F */
- 	gcSL_MAXOPCODE
- }
- gcSL_OPCODE;
-@@ -474,6 +473,9 @@ struct _gcsHINT
- 
-     gctBOOL     clipW;
- 
-+    /* Flag whether or not the shader has a KILL instruction. */
-+    gctBOOL     hasKill;
-+
-     /* Element count. */
-     gctUINT32   elementCount;
- 
-@@ -495,12 +497,18 @@ struct _gcsHINT
-     /* Balance maximum. */
-     gctUINT32   balanceMax;
- 
-+    /* Auto-shift balancing. */
-+    gctBOOL     autoShift;
-+
-     /* Flag whether the PS outputs the depth value or not. */
-     gctBOOL     psHasFragDepthOut;
- 
- 	/* Flag whether the ThreadWalker is in PS. */
- 	gctBOOL		threadWalkerInPS;
- 
-+    /* HW reg number for position of VS */
-+    gctUINT32   hwRegNoOfSIVPos;
-+
- #if gcdALPHA_KILL_IN_SHADER
-     /* States to set when alpha kill is enabled. */
-     gctUINT32   killStateAddress;
-@@ -687,12 +695,12 @@ typedef enum _gceSHADER_FLAGS
-     gcvSHADER_USE_ALPHA_KILL            = 0x100,
- #endif
- 
--#if ADD_PRE_ROTATION_TO_VS
-+#if gcdPRE_ROTATION && (ANDROID_SDK_VERSION >= 14)
-     gcvSHADER_VS_PRE_ROTATION           = 0x200,
- #endif
- 
- #if TEMP_INLINE_ALL_EXPANSION
--    gcvSHADER_INLINE_ALL_EXPANSION      = 0x200,
-+    gcvSHADER_INLINE_ALL_EXPANSION      = 0x400,
- #endif
- }
- gceSHADER_FLAGS;
-@@ -827,6 +835,7 @@ typedef struct _gcOPTIMIZER_OPTION
-     gctBOOL     dumpOptimizerVerbose;  /* dump result IR in each optimization phase */
-     gctBOOL     dumpBEGenertedCode;    /* dump generated machine code */
-     gctBOOL     dumpBEVerbose;         /* dump BE tree and optimization detail */
-+    gctBOOL     dumpBEFinalIR;         /* dump BE final IR */
- 
-     /* Code generation */
- 
-@@ -945,6 +954,8 @@ extern gcOPTIMIZER_OPTION theOptimizerOption;
-               gcmOPT_DUMP_CODEGEN_VERBOSE() )
- #define gcmOPT_DUMP_CODEGEN_VERBOSE()    \
-              (gcmGetOptimizerOption()->dumpBEVerbose != 0)
-+#define gcmOPT_DUMP_FINAL_IR()    \
-+             (gcmGetOptimizerOption()->dumpBEFinalIR != 0)
- 
- #define gcmOPT_SET_DUMP_SHADER_SRC(v)   \
-              gcmGetOptimizerOption()->dumpShaderSource = (v)
-@@ -1064,6 +1075,13 @@ typedef struct _gcNPOT_PATCH_PARAM
-     gctINT               texDimension;    /* 2 or 3 */
- }gcNPOT_PATCH_PARAM, *gcNPOT_PATCH_PARAM_PTR;
- 
-+typedef struct _gcZBIAS_PATCH_PARAM
-+{
-+    /* Driver uses this to program uniform that designating zbias */
-+    gctINT               uniformAddr;
-+    gctINT               channel;
-+}gcZBIAS_PATCH_PARAM, *gcZBIAS_PATCH_PARAM_PTR;
-+
- void
- gcGetOptionFromEnv(
-     IN OUT gcOPTIMIZER_OPTION * Option
-@@ -1556,6 +1574,43 @@ gcSHADER_AddUniform(
- 	OUT gcUNIFORM * Uniform
- 	);
- 
-+/*******************************************************************************
-+**							   gcSHADER_AddPreRotationUniform
-+********************************************************************************
-+**
-+**	Add an uniform to a gcSHADER object.
-+**
-+**	INPUT:
-+**
-+**		gcSHADER Shader
-+**			Pointer to a gcSHADER object.
-+**
-+**		gctCONST_STRING Name
-+**			Name of the uniform to add.
-+**
-+**		gcSHADER_TYPE Type
-+**			Type of the uniform to add.
-+**
-+**		gctSIZE_T Length
-+**			Array length of the uniform to add.  'Length' must be at least 1.
-+**
-+**		gctINT col
-+**			Which uniform.
-+**
-+**	OUTPUT:
-+**
-+**		gcUNIFORM * Uniform
-+**			Pointer to a variable receiving the gcUNIFORM object pointer.
-+*/
-+gceSTATUS
-+gcSHADER_AddPreRotationUniform(
-+	IN gcSHADER Shader,
-+	IN gctCONST_STRING Name,
-+	IN gcSHADER_TYPE Type,
-+	IN gctSIZE_T Length,
-+    IN gctINT col,
-+	OUT gcUNIFORM * Uniform
-+	);
- 
- /*******************************************************************************
- **							   gcSHADER_AddUniformEx
-@@ -1677,6 +1732,28 @@ gcSHADER_GetUniformCount(
- 	);
- 
- /*******************************************************************************
-+**                         gcSHADER_GetPreRotationUniform
-+********************************************************************************
-+**
-+**	Get the preRotate Uniform.
-+**
-+**	INPUT:
-+**
-+**		gcSHADER Shader
-+**			Pointer to a gcSHADER object.
-+**
-+**	OUTPUT:
-+**
-+**		gcUNIFORM ** pUniform
-+**			Pointer to a preRotation uniforms array.
-+*/
-+gceSTATUS
-+gcSHADER_GetPreRotationUniform(
-+	IN gcSHADER Shader,
-+	OUT gcUNIFORM ** pUniform
-+	);
-+
-+/*******************************************************************************
- **                             gcSHADER_GetUniform
- ********************************************************************************
- **
-@@ -3438,6 +3515,34 @@ gcUNIFORM_SetValueF(
- 	);
- 
- /*******************************************************************************
-+**  gcUNIFORM_ProgramF
-+**
-+**  Set the value of a uniform in floating point.
-+**
-+**  INPUT:
-+**
-+**      gctUINT32 Address
-+**          Address of Uniform.
-+**
-+**      gctSIZE_T Row/Col
-+**
-+**      const gctFLOAT * Value
-+**          Pointer to a buffer holding the floating point values for the
-+**          uniform.
-+**
-+**  OUTPUT:
-+**
-+**      Nothing.
-+*/
-+gceSTATUS
-+gcUNIFORM_ProgramF(
-+    IN gctUINT32 Address,
-+    IN gctSIZE_T Row,
-+    IN gctSIZE_T Col,
-+    IN const gctFLOAT * Value
-+    );
-+
-+/*******************************************************************************
- **						 gcUNIFORM_GetModelViewProjMatrix
- ********************************************************************************
- **
-@@ -3912,6 +4017,23 @@ gcRecompileShaders(
-     IN gctUINT32 *SamplerWrapS,
-     IN gctUINT32 *SamplerWrapT
-     );
-+
-+gceSTATUS
-+gcRecompileDepthBias(
-+    IN gcoHAL Hal,
-+    IN gcMACHINECODE_PTR pVsMachineCode,
-+    /*Recompile variables*/
-+    IN OUT gctPOINTER *ppRecompileStateBuffer,
-+    IN OUT gctSIZE_T *pRecompileStateBufferSize,
-+    IN OUT gcsHINT_PTR *ppRecompileHints,
-+    /* natvie state*/
-+    IN gctPOINTER pNativeStateBuffer,
-+    IN gctSIZE_T nativeStateBufferSize,
-+    IN gcsHINT_PTR pNativeHints,
-+	OUT gctINT * uniformAddr,
-+	OUT gctINT * uniformChannel
-+    );
-+
- /*******************************************************************************
- **                                gcSaveProgram
- ********************************************************************************
-@@ -4138,6 +4260,16 @@ gcSHADER_PatchNPOTForMachineCode(
-     IN OUT gcsHINT_PTR            pHints /* User needs copy original hints to this one, then passed this one in */
-     );
- 
-+gceSTATUS
-+gcSHADER_PatchZBiasForMachineCodeVS(
-+    IN     gcMACHINECODE_PTR       pMachineCode,
-+    IN OUT gcZBIAS_PATCH_PARAM_PTR pPatchParam,
-+    IN     gctUINT                 hwSupportedInstCount,
-+    OUT    gctPOINTER*             ppCmdBuffer,
-+    OUT    gctUINT32*              pByteSizeOfCmdBuffer,
-+    IN OUT gcsHINT_PTR             pHints /* User needs copy original hints to this one, then passed this one in */
-+    );
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
-index b056c52..fc8c395 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
-@@ -166,6 +166,12 @@ typedef enum _gceHAL_COMMAND_CODES
- 
-     /* Reset time stamp. */
-     gcvHAL_QUERY_RESET_TIME_STAMP,
-+
-+    /* Sync point operations. */
-+    gcvHAL_SYNC_POINT,
-+
-+    /* Create native fence and return its fd. */
-+    gcvHAL_CREATE_NATIVE_FENCE,
- }
- gceHAL_COMMAND_CODES;
- 
-@@ -723,6 +729,10 @@ typedef struct _gcsHAL_INTERFACE
-         /* gcvHAL_READ_ALL_PROFILE_REGISTERS */
-         struct _gcsHAL_READ_ALL_PROFILE_REGISTERS
-         {
-+#if VIVANTE_PROFILER_CONTEXT
-+            /* Context buffer object gckCONTEXT. Just a name. */
-+            IN gctUINT32                context;
-+#endif
-             /* Data read. */
-             OUT gcsPROFILER_COUNTERS    counters;
-         }
-@@ -978,6 +988,33 @@ typedef struct _gcsHAL_INTERFACE
-             OUT gctUINT64           timeStamp;
-         }
-         QueryResetTimeStamp;
-+
-+        struct _gcsHAL_SYNC_POINT
-+        {
-+            /* Command. */
-+            gceSYNC_POINT_COMMAND_CODES command;
-+
-+            /* Sync point. */
-+            IN OUT gctUINT64            syncPoint;
-+
-+            /* From where. */
-+            IN gceKERNEL_WHERE          fromWhere;
-+
-+            /* Signaled state. */
-+            OUT gctBOOL                 state;
-+        }
-+        SyncPoint;
-+
-+        struct _gcsHAL_CREATE_NATIVE_FENCE
-+        {
-+            /* Signal id to dup. */
-+            IN gctUINT64                syncPoint;
-+
-+            /* Native fence file descriptor. */
-+            OUT gctINT                  fenceFD;
-+
-+        }
-+        CreateNativeFence;
-     }
-     u;
- }
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
-index 8481375..3fb2fe4 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
-@@ -323,6 +323,15 @@ gcoSURF_Resolve(
-     IN gcoSURF DestSurface
-     );
- 
-+gceSTATUS
-+gcoSURF_IsHWResolveable(
-+    IN gcoSURF SrcSurface,
-+    IN gcoSURF DestSurface,
-+    IN gcsPOINT_PTR SrcOrigin,
-+    IN gcsPOINT_PTR DestOrigin,
-+    IN gcsPOINT_PTR RectSize
-+    );
-+
- /* Resolve rectangular area of a surface. */
- gceSTATUS
- gcoSURF_ResolveRect(
-@@ -345,6 +354,11 @@ gcoSURF_IsRenderable(
-     IN gcoSURF Surface
-     );
- 
-+gceSTATUS
-+gcoSURF_IsFormatRenderableAsRT(
-+    IN gcoSURF Surface
-+    );
-+
- #if gcdSYNC
- gceSTATUS
- gcoSURF_GetFence(
-@@ -1006,6 +1020,7 @@ typedef struct _gcsALPHA_INFO
-     gctBOOL                 test;
-     gceCOMPARE              compare;
-     gctUINT8                reference;
-+    gctFLOAT                floatReference;
- 
-     /* Alpha blending states. */
-     gctBOOL                 blend;
-@@ -1040,7 +1055,8 @@ gco3D_SetAlphaCompare(
- gceSTATUS
- gco3D_SetAlphaReference(
-     IN gco3D Engine,
--    IN gctUINT8 Reference
-+    IN gctUINT8 Reference,
-+    IN gctFLOAT FloatReference
-     );
- 
- /* Set alpha test reference in fixed point. */
-@@ -1504,6 +1520,19 @@ gcoTEXTURE_UploadSub(
-     IN gceSURF_FORMAT Format
-     );
- 
-+/* Upload YUV data to an gcoTEXTURE object. */
-+gceSTATUS
-+gcoTEXTURE_UploadYUV(
-+    IN gcoTEXTURE Texture,
-+    IN gceTEXTURE_FACE Face,
-+    IN gctUINT Width,
-+    IN gctUINT Height,
-+    IN gctUINT Slice,
-+    IN gctPOINTER Memory[3],
-+    IN gctINT Stride[3],
-+    IN gceSURF_FORMAT Format
-+    );
-+
- /* Upload compressed data to an gcoTEXTURE object. */
- gceSTATUS
- gcoTEXTURE_UploadCompressed(
-@@ -1621,6 +1650,13 @@ gcoTEXTURE_QueryCaps(
-     );
- 
- gceSTATUS
-+gcoTEXTURE_GetTiling(
-+    IN gcoTEXTURE Texture,
-+    IN gctINT preferLevel,
-+	OUT gceTILING * Tiling
-+    );
-+
-+gceSTATUS
- gcoTEXTURE_GetClosestFormat(
-     IN gcoHAL Hal,
-     IN gceSURF_FORMAT InFormat,
-@@ -2001,6 +2037,14 @@ gcoHAL_SetSharedInfo(
-     IN gctSIZE_T Bytes
-     );
- 
-+#if VIVANTE_PROFILER_CONTEXT
-+gceSTATUS
-+gcoHARDWARE_GetContext(
-+    IN gcoHARDWARE Hardware,
-+    OUT gctUINT32 * Context
-+    );
-+#endif
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
-index a1d9ae5..8e3c2f8 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
-@@ -146,10 +146,26 @@ typedef enum _gceFEATURE
-     gcvFEATURE_FRUSTUM_CLIP_FIX,
-     gcvFEATURE_TEXTURE_LINEAR,
-     gcvFEATURE_TEXTURE_YUV_ASSEMBLER,
-+    gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE,
-     gcvFEATURE_DYNAMIC_FREQUENCY_SCALING,
-     gcvFEATURE_BUGFIX15,
-+    gcvFEATURE_2D_GAMMA,
-+    gcvFEATURE_2D_COLOR_SPACE_CONVERSION,
-+    gcvFEATURE_2D_SUPER_TILE_VERSION,
-     gcvFEATURE_2D_MIRROR_EXTENSION,
-+    gcvFEATURE_2D_SUPER_TILE_V1,
-+    gcvFEATURE_2D_SUPER_TILE_V2,
-+    gcvFEATURE_2D_SUPER_TILE_V3,
-+    gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2,
-     gcvFEATURE_ELEMENT_INDEX_UINT,
-+    gcvFEATURE_2D_COMPRESSION,
-+    gcvFEATURE_2D_OPF_YUV_OUTPUT,
-+    gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT,
-+    gcvFEATURE_2D_YUV_MODE,
-+    gcvFEATURE_DECOMPRESS_Z16,
-+	gcvFEATURE_LINEAR_RENDER_TARGET,
-+    gcvFEATURE_BUG_FIXES8,
-+    gcvFEATURE_HALTI2,
- }
- gceFEATURE;
- 
-@@ -203,11 +219,14 @@ typedef enum _gceSURF_TYPE
-     gcvSURF_NO_VIDMEM      = 0x200, /* Used to allocate surfaces with no underlying vidmem node.
-                                        In Android, vidmem node is allocated by another process. */
-     gcvSURF_CACHEABLE      = 0x400, /* Used to allocate a cacheable surface */
--#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
-     gcvSURF_FLIP           = 0x800, /* The Resolve Target the will been flip resolve from RT */
--#endif
-     gcvSURF_TILE_STATUS_DIRTY  = 0x1000, /* Init tile status to all dirty */
- 
-+    gcvSURF_LINEAR             = 0x2000,
-+
-+    gcvSURF_TEXTURE_LINEAR               = gcvSURF_TEXTURE
-+                                         | gcvSURF_LINEAR,
-+
-     gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET
-                                          | gcvSURF_NO_TILE_STATUS,
- 
-@@ -217,6 +236,9 @@ typedef enum _gceSURF_TYPE
-     gcvSURF_DEPTH_NO_TILE_STATUS         = gcvSURF_DEPTH
-                                          | gcvSURF_NO_TILE_STATUS,
- 
-+    gcvSURF_DEPTH_TS_DIRTY               = gcvSURF_DEPTH
-+                                         | gcvSURF_TILE_STATUS_DIRTY,
-+
-     /* Supported surface types with no vidmem node. */
-     gcvSURF_BITMAP_NO_VIDMEM             = gcvSURF_BITMAP
-                                          | gcvSURF_NO_VIDMEM,
-@@ -231,10 +253,8 @@ typedef enum _gceSURF_TYPE
-     gcvSURF_CACHEABLE_BITMAP             = gcvSURF_BITMAP
-                                          | gcvSURF_CACHEABLE,
- 
--#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
-     gcvSURF_FLIP_BITMAP                  = gcvSURF_BITMAP
-                                          | gcvSURF_FLIP,
--#endif
- }
- gceSURF_TYPE;
- 
-@@ -263,6 +283,9 @@ typedef enum _gceSURF_ROTATION
-     gcvSURF_270_DEGREE,
-     gcvSURF_FLIP_X,
-     gcvSURF_FLIP_Y,
-+
-+	gcvSURF_POST_FLIP_X = 0x40000000,
-+    gcvSURF_POST_FLIP_Y = 0x80000000,
- }
- gceSURF_ROTATION;
- 
-@@ -622,21 +645,16 @@ gce2D_PORTER_DUFF_RULE;
- typedef enum _gce2D_YUV_COLOR_MODE
- {
-     gcv2D_YUV_601= 0,
--    gcv2D_YUV_709
--}
--gce2D_YUV_COLOR_MODE;
-+    gcv2D_YUV_709,
-+    gcv2D_YUV_USER_DEFINED,
-+    gcv2D_YUV_USER_DEFINED_CLAMP,
- 
--/* 2D Rotation and flipping. */
--typedef enum _gce2D_ORIENTATION
--{
--    gcv2D_0_DEGREE = 0,
--    gcv2D_90_DEGREE,
--    gcv2D_180_DEGREE,
--    gcv2D_270_DEGREE,
--    gcv2D_X_FLIP,
--    gcv2D_Y_FLIP
-+    /* Default setting is for src. gcv2D_YUV_DST
-+        can be ORed to set dst.
-+    */
-+    gcv2D_YUV_DST = 0x80000000,
- }
--gce2D_ORIENTATION;
-+gce2D_YUV_COLOR_MODE;
- 
- typedef enum _gce2D_COMMAND
- {
-@@ -656,21 +674,39 @@ typedef enum _gce2D_TILE_STATUS_CONFIG
-     gcv2D_TSC_ENABLE        = 0x00000001,
-     gcv2D_TSC_COMPRESSED    = 0x00000002,
-     gcv2D_TSC_DOWN_SAMPLER  = 0x00000004,
-+    gcv2D_TSC_2D_COMPRESSED = 0x00000008,
- }
- gce2D_TILE_STATUS_CONFIG;
- 
- typedef enum _gce2D_QUERY
- {
--    gcv2D_QUERY_RGB_ADDRESS_MAX_ALIGN       = 0,
--    gcv2D_QUERY_RGB_STRIDE_MAX_ALIGN,
--    gcv2D_QUERY_YUV_ADDRESS_MAX_ALIGN,
--    gcv2D_QUERY_YUV_STRIDE_MAX_ALIGN,
-+    gcv2D_QUERY_RGB_ADDRESS_MIN_ALIGN       = 0,
-+    gcv2D_QUERY_RGB_STRIDE_MIN_ALIGN,
-+    gcv2D_QUERY_YUV_ADDRESS_MIN_ALIGN,
-+    gcv2D_QUERY_YUV_STRIDE_MIN_ALIGN,
- }
- gce2D_QUERY;
- 
-+typedef enum _gce2D_SUPER_TILE_VERSION
-+{
-+    gcv2D_SUPER_TILE_VERSION_V1       = 1,
-+    gcv2D_SUPER_TILE_VERSION_V2       = 2,
-+    gcv2D_SUPER_TILE_VERSION_V3       = 3,
-+}
-+gce2D_SUPER_TILE_VERSION;
-+
- typedef enum _gce2D_STATE
- {
-     gcv2D_STATE_SPECIAL_FILTER_MIRROR_MODE       = 1,
-+    gcv2D_STATE_SUPER_TILE_VERSION,
-+    gcv2D_STATE_EN_GAMMA,
-+    gcv2D_STATE_DE_GAMMA,
-+    gcv2D_STATE_MULTI_SRC_BLIT_UNIFIED_DST_RECT,
-+
-+    gcv2D_STATE_ARRAY_EN_GAMMA                   = 0x10001,
-+    gcv2D_STATE_ARRAY_DE_GAMMA,
-+    gcv2D_STATE_ARRAY_CSC_YUV_TO_RGB,
-+    gcv2D_STATE_ARRAY_CSC_RGB_TO_YUV,
- }
- gce2D_STATE;
- 
-@@ -809,6 +845,15 @@ typedef enum _gceUSER_SIGNAL_COMMAND_CODES
- }
- gceUSER_SIGNAL_COMMAND_CODES;
- 
-+/* Sync point command codes. */
-+typedef enum _gceSYNC_POINT_COMMAND_CODES
-+{
-+    gcvSYNC_POINT_CREATE,
-+    gcvSYNC_POINT_DESTROY,
-+    gcvSYNC_POINT_SIGNAL,
-+}
-+gceSYNC_POINT_COMMAND_CODES;
-+
- /* Event locations. */
- typedef enum _gceKERNEL_WHERE
- {
-@@ -848,6 +893,44 @@ typedef enum _gceDEBUG_MESSAGE_TYPE
- }
- gceDEBUG_MESSAGE_TYPE;
- 
-+typedef enum _gceSPECIAL_HINT
-+{
-+    gceSPECIAL_HINT0,
-+    gceSPECIAL_HINT1,
-+    gceSPECIAL_HINT2,
-+    gceSPECIAL_HINT3,
-+    /* For disable dynamic stream/index */
-+    gceSPECIAL_HINT4
-+}
-+gceSPECIAL_HINT;
-+
-+typedef enum _gceMACHINECODE
-+{
-+    gcvMACHINECODE_HOVERJET0       = 0x0,
-+    gcvMACHINECODE_HOVERJET1      ,
-+
-+    gcvMACHINECODE_TAIJI0         ,
-+    gcvMACHINECODE_TAIJI1         ,
-+    gcvMACHINECODE_TAIJI2         ,
-+
-+    gcvMACHINECODE_ANTUTU0        ,
-+
-+    gcvMACHINECODE_GLB27_RELEASE_0,
-+    gcvMACHINECODE_GLB27_RELEASE_1,
-+
-+    gcvMACHINECODE_WAVESCAPE0     ,
-+    gcvMACHINECODE_WAVESCAPE1     ,
-+
-+    gcvMACHINECODE_NENAMARKV2_4_0 ,
-+    gcvMACHINECODE_NENAMARKV2_4_1 ,
-+
-+    gcvMACHINECODE_GLB25_RELEASE_0,
-+    gcvMACHINECODE_GLB25_RELEASE_1,
-+    gcvMACHINECODE_GLB25_RELEASE_2,
-+}
-+gceMACHINECODE;
-+
-+
- /******************************************************************************\
- ****************************** Object Declarations *****************************
- \******************************************************************************/
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
-index 9e2a8db..b53b618 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
-@@ -46,7 +46,7 @@
-         This define enables the profiler.
- */
- #ifndef VIVANTE_PROFILER
--#   define VIVANTE_PROFILER                     0
-+#   define VIVANTE_PROFILER                     1
- #endif
- 
- #ifndef VIVANTE_PROFILER_PERDRAW
-@@ -54,6 +54,15 @@
- #endif
- 
- /*
-+    VIVANTE_PROFILER_CONTEXT
-+
-+        This define enables the profiler according to each hw context.
-+*/
-+#ifndef VIVANTE_PROFILER_CONTEXT
-+#   define VIVANTE_PROFILER_CONTEXT             1
-+#endif
-+
-+/*
-     gcdUSE_VG
- 
-         Enable VG HAL layer (only for GC350).
-@@ -729,7 +738,24 @@
-         Use linear buffer for GPU apps so HWC can do 2D composition.
- */
- #ifndef gcdGPU_LINEAR_BUFFER_ENABLED
--#   define gcdGPU_LINEAR_BUFFER_ENABLED         0
-+#   define gcdGPU_LINEAR_BUFFER_ENABLED         1
-+#endif
-+
-+/*
-+    gcdENABLE_RENDER_INTO_WINDOW
-+
-+        Enable Render-Into-Window (ie, No-Resolve) feature on android.
-+        NOTE that even if enabled, it still depends on hardware feature and
-+        android application behavior. When hardware feature or application
-+        behavior can not support render into window mode, it will fail back
-+        to normal mode.
-+        When Render-Into-Window is finally used, window back buffer of android
-+        applications will be allocated matching render target tiling format.
-+        Otherwise buffer tiling is decided by the above option
-+        'gcdGPU_LINEAR_BUFFER_ENABLED'.
-+*/
-+#ifndef gcdENABLE_RENDER_INTO_WINDOW
-+#   define gcdENABLE_RENDER_INTO_WINDOW         1
- #endif
- 
- /*
-@@ -758,7 +784,11 @@
- #endif
- 
- #ifndef gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
--#   define  gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST    0
-+#   ifdef ANDROID
-+#      define  gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST    1
-+#   else
-+#      define  gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST    0
-+#   endif
- #endif
- 
- #ifndef gcdENABLE_PE_DITHER_FIX
-@@ -800,6 +830,10 @@
- #   define gcdDISALBE_EARLY_EARLY_Z             1
- #endif
- 
-+#ifndef gcdSHADER_SRC_BY_MACHINECODE
-+#   define gcdSHADER_SRC_BY_MACHINECODE         1
-+#endif
-+
- /*
-     gcdLINK_QUEUE_SIZE
- 
-@@ -849,11 +883,20 @@
- #define gcdUSE_NPOT_PATCH                       1
- #endif
- 
--
- #ifndef gcdSYNC
- #   define gcdSYNC                              1
- #endif
- 
-+#ifndef gcdENABLE_SPECIAL_HINT3
-+#   define gcdENABLE_SPECIAL_HINT3               1
-+#endif
-+
-+#if defined(ANDROID)
-+#ifndef gcdPRE_ROTATION
-+#   define gcdPRE_ROTATION                      1
-+#endif
-+#endif
-+
- /*
-     gcdDVFS
- 
-@@ -866,4 +909,39 @@
- #   define gcdDVFS_POLLING_TIME                  (gcdDVFS_ANAYLSE_WINDOW * 4)
- #endif
- 
-+/*
-+    gcdANDROID_NATIVE_FENCE_SYNC
-+
-+        Enable android native fence sync. It is introduced since jellybean-4.2.
-+        Depends on linux kernel option: CONFIG_SYNC.
-+
-+        0: Disabled
-+        1: Build framework for native fence sync feature, and EGL extension
-+        2: Enable async swap buffers for client
-+           * Native fence sync for client 'queueBuffer' in EGL, which is
-+             'acquireFenceFd' for layer in compositor side.
-+        3. Enable async hwcomposer composition.
-+           * 'releaseFenceFd' for layer in compositor side, which is native
-+             fence sync when client 'dequeueBuffer'
-+           * Native fence sync for compositor 'queueBuffer' in EGL, which is
-+             'acquireFenceFd' for framebuffer target for DC
-+ */
-+#ifndef gcdANDROID_NATIVE_FENCE_SYNC
-+#   define gcdANDROID_NATIVE_FENCE_SYNC        0
-+#endif
-+
-+#ifndef gcdFORCE_MIPMAP
-+#   define gcdFORCE_MIPMAP                     0
-+#endif
-+
-+/*
-+    gcdFORCE_GAL_LOAD_TWICE
-+
-+        When non-zero, each thread except the main one will load libGAL.so twice to avoid potential segmetantion fault when app using dlopen/dlclose.
-+        If threads exit arbitrarily, libGAL.so may not unload until the process quit.
-+ */
-+#ifndef gcdFORCE_GAL_LOAD_TWICE
-+#   define gcdFORCE_GAL_LOAD_TWICE             0
-+#endif
-+
- #endif /* __gc_hal_options_h_ */
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
-index 3e450ba..aed73aa 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
-@@ -45,509 +45,115 @@ extern "C" {
- #define gcdNEW_PROFILER_FILE    1
- #endif
- 
--/* OpenGL ES11 API IDs. */
--#define	ES11_ACTIVETEXTURE				1
--#define	ES11_ALPHAFUNC					(ES11_ACTIVETEXTURE				+ 1)
--#define	ES11_ALPHAFUNCX					(ES11_ALPHAFUNC					+ 1)
--#define	ES11_BINDBUFFER					(ES11_ALPHAFUNCX 				+ 1)
--#define	ES11_BINDTEXTURE				(ES11_BINDBUFFER 				+ 1)
--#define	ES11_BLENDFUNC					(ES11_BINDTEXTURE				+ 1)
--#define	ES11_BUFFERDATA					(ES11_BLENDFUNC					+ 1)
--#define	ES11_BUFFERSUBDATA				(ES11_BUFFERDATA				+ 1)
--#define	ES11_CLEAR						(ES11_BUFFERSUBDATA				+ 1)
--#define	ES11_CLEARCOLOR					(ES11_CLEAR						+ 1)
--#define	ES11_CLEARCOLORX				(ES11_CLEARCOLOR				+ 1)
--#define	ES11_CLEARDEPTHF				(ES11_CLEARCOLORX 				+ 1)
--#define	ES11_CLEARDEPTHX				(ES11_CLEARDEPTHF 				+ 1)
--#define	ES11_CLEARSTENCIL				(ES11_CLEARDEPTHX 				+ 1)
--#define	ES11_CLIENTACTIVETEXTURE    	(ES11_CLEARSTENCIL				+ 1)
--#define	ES11_CLIPPLANEF      			(ES11_CLIENTACTIVETEXTURE		+ 1)
--#define	ES11_CLIPPLANEX      			(ES11_CLIPPLANEF       			+ 1)
--#define	ES11_COLOR4F 					(ES11_CLIPPLANEX       			+ 1)
--#define	ES11_COLOR4UB        			(ES11_COLOR4F					+ 1)
--#define	ES11_COLOR4X 					(ES11_COLOR4UB					+ 1)
--#define	ES11_COLORMASK       			(ES11_COLOR4X					+ 1)
--#define	ES11_COLORPOINTER    			(ES11_COLORMASK        			+ 1)
--#define	ES11_COMPRESSEDTEXIMAGE2D   	(ES11_COLORPOINTER     			+ 1)
--#define	ES11_COMPRESSEDTEXSUBIMAGE2D	(ES11_COMPRESSEDTEXIMAGE2D    	+ 1)
--#define	ES11_COPYTEXIMAGE2D  			(ES11_COMPRESSEDTEXSUBIMAGE2D 	+ 1)
--#define	ES11_COPYTEXSUBIMAGE2D      	(ES11_COPYTEXIMAGE2D   			+ 1)
--#define	ES11_CULLFACE        			(ES11_COPYTEXSUBIMAGE2D			+ 1)
--#define	ES11_DELETEBUFFERS   			(ES11_CULLFACE         			+ 1)
--#define	ES11_DELETETEXTURES  			(ES11_DELETEBUFFERS    			+ 1)
--#define	ES11_DEPTHFUNC       			(ES11_DELETETEXTURES   			+ 1)
--#define	ES11_DEPTHMASK       			(ES11_DEPTHFUNC        			+ 1)
--#define	ES11_DEPTHRANGEF     			(ES11_DEPTHMASK        			+ 1)
--#define	ES11_DEPTHRANGEX     			(ES11_DEPTHRANGEF      			+ 1)
--#define	ES11_DISABLE 					(ES11_DEPTHRANGEX      			+ 1)
--#define	ES11_DISABLECLIENTSTATE     	(ES11_DISABLE					+ 1)
--#define	ES11_DRAWARRAYS      			(ES11_DISABLECLIENTSTATE		+ 1)
--#define	ES11_DRAWELEMENTS    			(ES11_DRAWARRAYS       			+ 1)
--#define	ES11_ENABLE  					(ES11_DRAWELEMENTS     			+ 1)
--#define	ES11_ENABLECLIENTSTATE      	(ES11_ENABLE					+ 1)
--#define	ES11_FINISH  					(ES11_ENABLECLIENTSTATE			+ 1)
--#define	ES11_FLUSH   					(ES11_FINISH   					+ 1)
--#define	ES11_FOGF    					(ES11_FLUSH    					+ 1)
--#define	ES11_FOGFV   					(ES11_FOGF     					+ 1)
--#define	ES11_FOGX    					(ES11_FOGFV    					+ 1)
--#define	ES11_FOGXV   					(ES11_FOGX     					+ 1)
--#define	ES11_FRONTFACE       			(ES11_FOGXV    					+ 1)
--#define	ES11_FRUSTUMF        			(ES11_FRONTFACE        			+ 1)
--#define	ES11_FRUSTUMX        			(ES11_FRUSTUMF         			+ 1)
--#define	ES11_GENBUFFERS      			(ES11_FRUSTUMX         			+ 1)
--#define	ES11_GENTEXTURES     			(ES11_GENBUFFERS       			+ 1)
--#define	ES11_GETBOOLEANV     			(ES11_GENTEXTURES      			+ 1)
--#define	ES11_GETBUFFERPARAMETERIV   	(ES11_GETBOOLEANV      			+ 1)
--#define	ES11_GETCLIPPLANEF   			(ES11_GETBUFFERPARAMETERIV		+ 1)
--#define	ES11_GETCLIPPLANEX   			(ES11_GETCLIPPLANEF    			+ 1)
--#define	ES11_GETERROR        			(ES11_GETCLIPPLANEX    			+ 1)
--#define	ES11_GETFIXEDV       			(ES11_GETERROR         			+ 1)
--#define	ES11_GETFLOATV       			(ES11_GETFIXEDV        			+ 1)
--#define	ES11_GETINTEGERV     			(ES11_GETFLOATV        			+ 1)
--#define	ES11_GETLIGHTFV      			(ES11_GETINTEGERV      			+ 1)
--#define	ES11_GETLIGHTXV      			(ES11_GETLIGHTFV       			+ 1)
--#define	ES11_GETMATERIALFV   			(ES11_GETLIGHTXV       			+ 1)
--#define	ES11_GETMATERIALXV   			(ES11_GETMATERIALFV    			+ 1)
--#define	ES11_GETPOINTERV     			(ES11_GETMATERIALXV    			+ 1)
--#define	ES11_GETSTRING       			(ES11_GETPOINTERV      			+ 1)
--#define	ES11_GETTEXENVFV     			(ES11_GETSTRING        			+ 1)
--#define	ES11_GETTEXENVIV     			(ES11_GETTEXENVFV      			+ 1)
--#define	ES11_GETTEXENVXV     			(ES11_GETTEXENVIV      			+ 1)
--#define	ES11_GETTEXPARAMETERFV      	(ES11_GETTEXENVXV      			+ 1)
--#define	ES11_GETTEXPARAMETERIV      	(ES11_GETTEXPARAMETERFV       	+ 1)
--#define	ES11_GETTEXPARAMETERXV      	(ES11_GETTEXPARAMETERIV       	+ 1)
--#define	ES11_HINT    					(ES11_GETTEXPARAMETERXV       	+ 1)
--#define	ES11_ISBUFFER        			(ES11_HINT     					+ 1)
--#define	ES11_ISENABLED       			(ES11_ISBUFFER 			        + 1)
--#define	ES11_ISTEXTURE       			(ES11_ISENABLED			        + 1)
--#define	ES11_LIGHTF  					(ES11_ISTEXTURE			        + 1)
--#define	ES11_LIGHTFV 					(ES11_LIGHTF   					+ 1)
--#define	ES11_LIGHTMODELF     			(ES11_LIGHTFV  					+ 1)
--#define	ES11_LIGHTMODELFV    			(ES11_LIGHTMODELF      			+ 1)
--#define	ES11_LIGHTMODELX     			(ES11_LIGHTMODELFV     			+ 1)
--#define	ES11_LIGHTMODELXV    			(ES11_LIGHTMODELX      			+ 1)
--#define	ES11_LIGHTX  					(ES11_LIGHTMODELXV     			+ 1)
--#define	ES11_LIGHTXV 					(ES11_LIGHTX   					+ 1)
--#define	ES11_LINEWIDTH       			(ES11_LIGHTXV  					+ 1)
--#define	ES11_LINEWIDTHX      			(ES11_LINEWIDTH        			+ 1)
--#define	ES11_LOADIDENTITY    			(ES11_LINEWIDTHX       			+ 1)
--#define	ES11_LOADMATRIXF     			(ES11_LOADIDENTITY     			+ 1)
--#define	ES11_LOADMATRIXX     			(ES11_LOADMATRIXF      			+ 1)
--#define	ES11_LOGICOP 					(ES11_LOADMATRIXX      			+ 1)
--#define	ES11_MATERIALF       			(ES11_LOGICOP					+ 1)
--#define	ES11_MATERIALFV      			(ES11_MATERIALF        			+ 1)
--#define	ES11_MATERIALX       			(ES11_MATERIALFV       			+ 1)
--#define	ES11_MATERIALXV      			(ES11_MATERIALX        			+ 1)
--#define	ES11_MATRIXMODE      			(ES11_MATERIALXV       			+ 1)
--#define	ES11_MULTITEXCOORD4F 			(ES11_MATRIXMODE       			+ 1)
--#define	ES11_MULTITEXCOORD4X 			(ES11_MULTITEXCOORD4F  			+ 1)
--#define	ES11_MULTMATRIXF     			(ES11_MULTITEXCOORD4X  			+ 1)
--#define	ES11_MULTMATRIXX     			(ES11_MULTMATRIXF      			+ 1)
--#define	ES11_NORMAL3F        			(ES11_MULTMATRIXX      			+ 1)
--#define	ES11_NORMAL3X        			(ES11_NORMAL3F         			+ 1)
--#define	ES11_NORMALPOINTER   			(ES11_NORMAL3X         			+ 1)
--#define	ES11_ORTHOF  					(ES11_NORMALPOINTER    			+ 1)
--#define	ES11_ORTHOX  					(ES11_ORTHOF   					+ 1)
--#define	ES11_PIXELSTOREI     			(ES11_ORTHOX   					+ 1)
--#define	ES11_POINTPARAMETERF 			(ES11_PIXELSTOREI      			+ 1)
--#define	ES11_POINTPARAMETERFV    		(ES11_POINTPARAMETERF  			+ 1)
--#define	ES11_POINTPARAMETERX 			(ES11_POINTPARAMETERFV 			+ 1)
--#define	ES11_POINTPARAMETERXV    		(ES11_POINTPARAMETERX  			+ 1)
--#define	ES11_POINTSIZE       			(ES11_POINTPARAMETERXV 			+ 1)
--#define	ES11_POINTSIZEX      			(ES11_POINTSIZE        			+ 1)
--#define	ES11_POLYGONOFFSET   			(ES11_POINTSIZEX       			+ 1)
--#define	ES11_POLYGONOFFSETX  			(ES11_POLYGONOFFSET    			+ 1)
--#define	ES11_POPMATRIX       			(ES11_POLYGONOFFSETX   			+ 1)
--#define	ES11_PUSHMATRIX      			(ES11_POPMATRIX        			+ 1)
--#define	ES11_READPIXELS      			(ES11_PUSHMATRIX       			+ 1)
--#define	ES11_ROTATEF 					(ES11_READPIXELS       			+ 1)
--#define	ES11_ROTATEX 					(ES11_ROTATEF  					+ 1)
--#define	ES11_SAMPLECOVERAGE  			(ES11_ROTATEX  					+ 1)
--#define	ES11_SAMPLECOVERAGEX 			(ES11_SAMPLECOVERAGE   			+ 1)
--#define	ES11_SCALEF  					(ES11_SAMPLECOVERAGEX  			+ 1)
--#define	ES11_SCALEX  					(ES11_SCALEF   					+ 1)
--#define	ES11_SCISSOR 					(ES11_SCALEX   					+ 1)
--#define	ES11_SHADEMODEL      			(ES11_SCISSOR  					+ 1)
--#define	ES11_STENCILFUNC     			(ES11_SHADEMODEL       			+ 1)
--#define	ES11_STENCILMASK     			(ES11_STENCILFUNC      			+ 1)
--#define	ES11_STENCILOP       			(ES11_STENCILMASK      			+ 1)
--#define	ES11_TEXCOORDPOINTER 			(ES11_STENCILOP        			+ 1)
--#define	ES11_TEXENVF 					(ES11_TEXCOORDPOINTER  			+ 1)
--#define	ES11_TEXENVFV     				(ES11_TEXENVF					+ 1)
--#define	ES11_TEXENVI 					(ES11_TEXENVFV					+ 1)
--#define	ES11_TEXENVIV     				(ES11_TEXENVI  					+ 1)
--#define	ES11_TEXENVX 					(ES11_TEXENVIV 					+ 1)
--#define	ES11_TEXENVXV        			(ES11_TEXENVX  					+ 1)
--#define	ES11_TEXIMAGE2D      			(ES11_TEXENVXV         			+ 1)
--#define	ES11_TEXPARAMETERF   			(ES11_TEXIMAGE2D       			+ 1)
--#define	ES11_TEXPARAMETERFV  			(ES11_TEXPARAMETERF    			+ 1)
--#define	ES11_TEXPARAMETERI   			(ES11_TEXPARAMETERFV   			+ 1)
--#define	ES11_TEXPARAMETERIV  			(ES11_TEXPARAMETERI    			+ 1)
--#define	ES11_TEXPARAMETERX   			(ES11_TEXPARAMETERIV   			+ 1)
--#define	ES11_TEXPARAMETERXV  			(ES11_TEXPARAMETERX    			+ 1)
--#define	ES11_TEXSUBIMAGE2D   			(ES11_TEXPARAMETERXV   			+ 1)
--#define	ES11_TRANSLATEF      			(ES11_TEXSUBIMAGE2D    			+ 1)
--#define	ES11_TRANSLATEX      			(ES11_TRANSLATEF       			+ 1)
--#define	ES11_VERTEXPOINTER   			(ES11_TRANSLATEX       			+ 1)
--#define	ES11_VIEWPORT        			(ES11_VERTEXPOINTER    			+ 1)
--#define ES11_BLENDEQUATIONOES           (ES11_VIEWPORT         			+ 1)
--#define ES11_BLENDFUNCSEPERATEOES       (ES11_BLENDEQUATIONOES       	+ 1)
--#define ES11_BLENDEQUATIONSEPARATEOES   (ES11_BLENDFUNCSEPERATEOES    	+ 1)
--#define ES11_GLMAPBUFFEROES             (ES11_BLENDEQUATIONSEPARATEOES 	+ 1)
--#define ES11_GLUNMAPBUFFEROES           (ES11_GLMAPBUFFEROES     		+ 1)
--#define ES11_GLGETBUFFERPOINTERVOES     (ES11_GLUNMAPBUFFEROES         	+ 1)
--#define	ES11_CALLS   					(ES11_GLGETBUFFERPOINTERVOES   	+ 1)
--#define	ES11_DRAWCALLS       			(ES11_CALLS						+ 1)
--#define	ES11_STATECHANGECALLS    		(ES11_DRAWCALLS					+ 1)
--#define	ES11_POINTCOUNT      			(ES11_STATECHANGECALLS			+ 1)
--#define	ES11_LINECOUNT       			(ES11_POINTCOUNT       			+ 1)
--#define	ES11_TRIANGLECOUNT   			(ES11_LINECOUNT        			+ 1)
--
--/* OpenGL ES2X API IDs. */
--#define	ES20_ACTIVETEXTURE				1
--#define	ES20_ATTACHSHADER							(ES20_ACTIVETEXTURE							+	1)
--#define	ES20_BINDATTRIBLOCATION						(ES20_ATTACHSHADER							+	1)
--#define	ES20_BINDBUFFER								(ES20_BINDATTRIBLOCATION					+	1)
--#define	ES20_BINDFRAMEBUFFER						(ES20_BINDBUFFER							+	1)
--#define	ES20_BINDRENDERBUFFER						(ES20_BINDFRAMEBUFFER						+	1)
--#define	ES20_BINDTEXTURE							(ES20_BINDRENDERBUFFER						+	1)
--#define	ES20_BLENDCOLOR								(ES20_BINDTEXTURE							+	1)
--#define	ES20_BLENDEQUATION							(ES20_BLENDCOLOR							+	1)
--#define	ES20_BLENDEQUATIONSEPARATE					(ES20_BLENDEQUATION							+	1)
--#define	ES20_BLENDFUNC								(ES20_BLENDEQUATIONSEPARATE					+	1)
--#define	ES20_BLENDFUNCSEPARATE						(ES20_BLENDFUNC								+	1)
--#define	ES20_BUFFERDATA								(ES20_BLENDFUNCSEPARATE						+	1)
--#define	ES20_BUFFERSUBDATA							(ES20_BUFFERDATA							+	1)
--#define	ES20_CHECKFRAMEBUFFERSTATUS					(ES20_BUFFERSUBDATA							+	1)
--#define	ES20_CLEAR									(ES20_CHECKFRAMEBUFFERSTATUS				+	1)
--#define	ES20_CLEARCOLOR								(ES20_CLEAR									+	1)
--#define	ES20_CLEARDEPTHF							(ES20_CLEARCOLOR							+	1)
--#define	ES20_CLEARSTENCIL							(ES20_CLEARDEPTHF							+	1)
--#define	ES20_COLORMASK								(ES20_CLEARSTENCIL							+	1)
--#define	ES20_COMPILESHADER							(ES20_COLORMASK								+	1)
--#define	ES20_COMPRESSEDTEXIMAGE2D					(ES20_COMPILESHADER							+	1)
--#define	ES20_COMPRESSEDTEXSUBIMAGE2D				(ES20_COMPRESSEDTEXIMAGE2D					+	1)
--#define	ES20_COPYTEXIMAGE2D							(ES20_COMPRESSEDTEXSUBIMAGE2D				+	1)
--#define	ES20_COPYTEXSUBIMAGE2D						(ES20_COPYTEXIMAGE2D						+	1)
--#define	ES20_CREATEPROGRAM							(ES20_COPYTEXSUBIMAGE2D						+	1)
--#define	ES20_CREATESHADER							(ES20_CREATEPROGRAM							+	1)
--#define	ES20_CULLFACE								(ES20_CREATESHADER							+	1)
--#define	ES20_DELETEBUFFERS							(ES20_CULLFACE								+	1)
--#define	ES20_DELETEFRAMEBUFFERS						(ES20_DELETEBUFFERS							+	1)
--#define	ES20_DELETEPROGRAM							(ES20_DELETEFRAMEBUFFERS					+	1)
--#define	ES20_DELETERENDERBUFFERS					(ES20_DELETEPROGRAM							+	1)
--#define	ES20_DELETESHADER							(ES20_DELETERENDERBUFFERS					+	1)
--#define	ES20_DELETETEXTURES							(ES20_DELETESHADER							+	1)
--#define	ES20_DEPTHFUNC								(ES20_DELETETEXTURES						+	1)
--#define	ES20_DEPTHMASK								(ES20_DEPTHFUNC								+	1)
--#define	ES20_DEPTHRANGEF							(ES20_DEPTHMASK								+	1)
--#define	ES20_DETACHSHADER							(ES20_DEPTHRANGEF							+	1)
--#define	ES20_DISABLE								(ES20_DETACHSHADER							+	1)
--#define	ES20_DISABLEVERTEXATTRIBARRAY				(ES20_DISABLE								+	1)
--#define	ES20_DRAWARRAYS								(ES20_DISABLEVERTEXATTRIBARRAY				+	1)
--#define	ES20_DRAWELEMENTS							(ES20_DRAWARRAYS							+	1)
--#define	ES20_ENABLE									(ES20_DRAWELEMENTS							+	1)
--#define	ES20_ENABLEVERTEXATTRIBARRAY				(ES20_ENABLE								+	1)
--#define	ES20_FINISH									(ES20_ENABLEVERTEXATTRIBARRAY				+	1)
--#define	ES20_FLUSH									(ES20_FINISH								+	1)
--#define	ES20_FRAMEBUFFERRENDERBUFFER				(ES20_FLUSH									+	1)
--#define	ES20_FRAMEBUFFERTEXTURE2D					(ES20_FRAMEBUFFERRENDERBUFFER				+	1)
--#define	ES20_FRONTFACE								(ES20_FRAMEBUFFERTEXTURE2D					+	1)
--#define	ES20_GENBUFFERS								(ES20_FRONTFACE								+	1)
--#define	ES20_GENERATEMIPMAP							(ES20_GENBUFFERS							+	1)
--#define	ES20_GENFRAMEBUFFERS						(ES20_GENERATEMIPMAP						+	1)
--#define	ES20_GENRENDERBUFFERS						(ES20_GENFRAMEBUFFERS						+	1)
--#define	ES20_GENTEXTURES							(ES20_GENRENDERBUFFERS						+	1)
--#define	ES20_GETACTIVEATTRIB						(ES20_GENTEXTURES							+	1)
--#define	ES20_GETACTIVEUNIFORM						(ES20_GETACTIVEATTRIB						+	1)
--#define	ES20_GETATTACHEDSHADERS						(ES20_GETACTIVEUNIFORM						+	1)
--#define	ES20_GETATTRIBLOCATION						(ES20_GETATTACHEDSHADERS					+	1)
--#define	ES20_GETBOOLEANV							(ES20_GETATTRIBLOCATION						+	1)
--#define	ES20_GETBUFFERPARAMETERIV					(ES20_GETBOOLEANV							+	1)
--#define	ES20_GETERROR								(ES20_GETBUFFERPARAMETERIV					+	1)
--#define	ES20_GETFLOATV								(ES20_GETERROR								+	1)
--#define	ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV	(ES20_GETFLOATV								+	1)
--#define	ES20_GETINTEGERV							(ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV	+	1)
--#define	ES20_GETPROGRAMIV							(ES20_GETINTEGERV							+	1)
--#define	ES20_GETPROGRAMINFOLOG						(ES20_GETPROGRAMIV							+	1)
--#define	ES20_GETRENDERBUFFERPARAMETERIV				(ES20_GETPROGRAMINFOLOG						+	1)
--#define	ES20_GETSHADERIV							(ES20_GETRENDERBUFFERPARAMETERIV			+	1)
--#define	ES20_GETSHADERINFOLOG						(ES20_GETSHADERIV							+	1)
--#define	ES20_GETSHADERPRECISIONFORMAT				(ES20_GETSHADERINFOLOG						+	1)
--#define	ES20_GETSHADERSOURCE						(ES20_GETSHADERPRECISIONFORMAT				+	1)
--#define	ES20_GETSTRING								(ES20_GETSHADERSOURCE						+	1)
--#define	ES20_GETTEXPARAMETERFV						(ES20_GETSTRING								+	1)
--#define	ES20_GETTEXPARAMETERIV						(ES20_GETTEXPARAMETERFV						+	1)
--#define	ES20_GETUNIFORMFV							(ES20_GETTEXPARAMETERIV						+	1)
--#define	ES20_GETUNIFORMIV							(ES20_GETUNIFORMFV							+	1)
--#define	ES20_GETUNIFORMLOCATION						(ES20_GETUNIFORMIV							+	1)
--#define	ES20_GETVERTEXATTRIBFV						(ES20_GETUNIFORMLOCATION					+	1)
--#define	ES20_GETVERTEXATTRIBIV						(ES20_GETVERTEXATTRIBFV						+	1)
--#define	ES20_GETVERTEXATTRIBPOINTERV				(ES20_GETVERTEXATTRIBIV						+	1)
--#define	ES20_HINT									(ES20_GETVERTEXATTRIBPOINTERV				+	1)
--#define	ES20_ISBUFFER								(ES20_HINT									+	1)
--#define	ES20_ISENABLED								(ES20_ISBUFFER								+	1)
--#define	ES20_ISFRAMEBUFFER							(ES20_ISENABLED								+	1)
--#define	ES20_ISPROGRAM								(ES20_ISFRAMEBUFFER							+	1)
--#define	ES20_ISRENDERBUFFER							(ES20_ISPROGRAM								+	1)
--#define	ES20_ISSHADER								(ES20_ISRENDERBUFFER						+	1)
--#define	ES20_ISTEXTURE								(ES20_ISSHADER								+	1)
--#define	ES20_LINEWIDTH								(ES20_ISTEXTURE								+	1)
--#define	ES20_LINKPROGRAM							(ES20_LINEWIDTH								+	1)
--#define	ES20_PIXELSTOREI							(ES20_LINKPROGRAM							+	1)
--#define	ES20_POLYGONOFFSET							(ES20_PIXELSTOREI							+	1)
--#define	ES20_READPIXELS								(ES20_POLYGONOFFSET							+	1)
--#define	ES20_RELEASESHADERCOMPILER					(ES20_READPIXELS							+	1)
--#define	ES20_RENDERBUFFERSTORAGE					(ES20_RELEASESHADERCOMPILER					+	1)
--#define	ES20_SAMPLECOVERAGE							(ES20_RENDERBUFFERSTORAGE					+	1)
--#define	ES20_SCISSOR								(ES20_SAMPLECOVERAGE						+	1)
--#define	ES20_SHADERBINARY							(ES20_SCISSOR								+	1)
--#define	ES20_SHADERSOURCE							(ES20_SHADERBINARY							+	1)
--#define	ES20_STENCILFUNC							(ES20_SHADERSOURCE							+	1)
--#define	ES20_STENCILFUNCSEPARATE					(ES20_STENCILFUNC							+	1)
--#define	ES20_STENCILMASK							(ES20_STENCILFUNCSEPARATE					+	1)
--#define	ES20_STENCILMASKSEPARATE					(ES20_STENCILMASK							+	1)
--#define	ES20_STENCILOP								(ES20_STENCILMASKSEPARATE					+	1)
--#define	ES20_STENCILOPSEPARATE						(ES20_STENCILOP								+	1)
--#define	ES20_TEXIMAGE2D								(ES20_STENCILOPSEPARATE						+	1)
--#define	ES20_TEXPARAMETERF							(ES20_TEXIMAGE2D							+	1)
--#define	ES20_TEXPARAMETERFV							(ES20_TEXPARAMETERF							+	1)
--#define	ES20_TEXPARAMETERI							(ES20_TEXPARAMETERFV						+	1)
--#define	ES20_TEXPARAMETERIV							(ES20_TEXPARAMETERI							+	1)
--#define	ES20_TEXSUBIMAGE2D							(ES20_TEXPARAMETERIV						+	1)
--#define	ES20_UNIFORM1F								(ES20_TEXSUBIMAGE2D							+	1)
--#define	ES20_UNIFORM1FV								(ES20_UNIFORM1F								+	1)
--#define	ES20_UNIFORM1I								(ES20_UNIFORM1FV							+	1)
--#define	ES20_UNIFORM1IV								(ES20_UNIFORM1I								+	1)
--#define	ES20_UNIFORM2F								(ES20_UNIFORM1IV							+	1)
--#define	ES20_UNIFORM2FV								(ES20_UNIFORM2F								+	1)
--#define	ES20_UNIFORM2I								(ES20_UNIFORM2FV							+	1)
--#define	ES20_UNIFORM2IV								(ES20_UNIFORM2I								+	1)
--#define	ES20_UNIFORM3F								(ES20_UNIFORM2IV							+	1)
--#define	ES20_UNIFORM3FV								(ES20_UNIFORM3F								+	1)
--#define	ES20_UNIFORM3I								(ES20_UNIFORM3FV							+	1)
--#define	ES20_UNIFORM3IV								(ES20_UNIFORM3I								+	1)
--#define	ES20_UNIFORM4F								(ES20_UNIFORM3IV							+	1)
--#define	ES20_UNIFORM4FV								(ES20_UNIFORM4F								+	1)
--#define	ES20_UNIFORM4I								(ES20_UNIFORM4FV							+	1)
--#define	ES20_UNIFORM4IV								(ES20_UNIFORM4I								+	1)
--#define	ES20_UNIFORMMATRIX2FV						(ES20_UNIFORM4IV							+	1)
--#define	ES20_UNIFORMMATRIX3FV						(ES20_UNIFORMMATRIX2FV						+	1)
--#define	ES20_UNIFORMMATRIX4FV						(ES20_UNIFORMMATRIX3FV						+	1)
--#define	ES20_USEPROGRAM								(ES20_UNIFORMMATRIX4FV						+	1)
--#define	ES20_VALIDATEPROGRAM						(ES20_USEPROGRAM							+	1)
--#define	ES20_VERTEXATTRIB1F							(ES20_VALIDATEPROGRAM						+	1)
--#define	ES20_VERTEXATTRIB1FV						(ES20_VERTEXATTRIB1F						+	1)
--#define	ES20_VERTEXATTRIB2F							(ES20_VERTEXATTRIB1FV						+	1)
--#define	ES20_VERTEXATTRIB2FV						(ES20_VERTEXATTRIB2F						+	1)
--#define	ES20_VERTEXATTRIB3F							(ES20_VERTEXATTRIB2FV						+	1)
--#define	ES20_VERTEXATTRIB3FV						(ES20_VERTEXATTRIB3F						+	1)
--#define	ES20_VERTEXATTRIB4F							(ES20_VERTEXATTRIB3FV						+	1)
--#define	ES20_VERTEXATTRIB4FV						(ES20_VERTEXATTRIB4F						+	1)
--#define	ES20_VERTEXATTRIBPOINTER					(ES20_VERTEXATTRIB4FV						+	1)
--#define	ES20_VIEWPORT								(ES20_VERTEXATTRIBPOINTER					+	1)
--#define ES20_GETPROGRAMBINARYOES                    (ES20_VIEWPORT                              +   1)
--#define ES20_PROGRAMBINARYOES                       (ES20_GETPROGRAMBINARYOES                   +   1)
--#define ES20_TEXIMAGE3DOES                          (ES20_PROGRAMBINARYOES                      +   1)
--#define ES20_TEXSUBIMAGE3DOES                       (ES20_TEXIMAGE3DOES                         +   1)
--#define ES20_COPYSUBIMAGE3DOES                      (ES20_TEXSUBIMAGE3DOES                      +   1)
--#define ES20_COMPRESSEDTEXIMAGE3DOES                (ES20_COPYSUBIMAGE3DOES                     +   1)
--#define ES20_COMPRESSEDTEXSUBIMAGE3DOES             (ES20_COMPRESSEDTEXIMAGE3DOES               +   1)
--#define ES20_FRAMEBUFFERTEXTURE3DOES                (ES20_COMPRESSEDTEXSUBIMAGE3DOES            +   1)
--#define ES20_BINDVERTEXARRAYOES                     (ES20_FRAMEBUFFERTEXTURE3DOES               +   1)
--#define ES20_GENVERTEXARRAYOES                      (ES20_BINDVERTEXARRAYOES                    +   1)
--#define ES20_ISVERTEXARRAYOES                       (ES20_GENVERTEXARRAYOES                     +   1)
--#define ES20_DELETEVERTEXARRAYOES                   (ES20_ISVERTEXARRAYOES                      +   1)
--#define ES20_GLMAPBUFFEROES                         (ES20_DELETEVERTEXARRAYOES                  +   1)
--#define ES20_GLUNMAPBUFFEROES                       (ES20_GLMAPBUFFEROES                        +   1)
--#define ES20_GLGETBUFFERPOINTERVOES                 (ES20_GLUNMAPBUFFEROES                      +   1)
--#define ES20_DISCARDFRAMEBUFFEREXT                  (ES20_GLGETBUFFERPOINTERVOES				+	1)
--#define	ES20_CALLS									(ES20_DISCARDFRAMEBUFFEREXT 				+	1)
--#define	ES20_DRAWCALLS								(ES20_CALLS									+	1)
--#define	ES20_STATECHANGECALLS						(ES20_DRAWCALLS								+	1)
--#define	ES20_POINTCOUNT								(ES20_STATECHANGECALLS						+	1)
--#define	ES20_LINECOUNT								(ES20_POINTCOUNT							+	1)
--#define	ES20_TRIANGLECOUNT							(ES20_LINECOUNT								+	1)
--
--/* OpenVG API IDs. */
--#define	VG11_APPENDPATH			     1
--#define	VG11_APPENDPATHDATA			(VG11_APPENDPATH				+ 1)
--#define	VG11_CHILDIMAGE				(VG11_APPENDPATHDATA			+ 1)
--#define	VG11_CLEAR					(VG11_CHILDIMAGE				+ 1)
--#define	VG11_CLEARGLYPH				(VG11_CLEAR						+ 1)
--#define	VG11_CLEARIMAGE				(VG11_CLEARGLYPH				+ 1)
--#define	VG11_CLEARPATH				(VG11_CLEARIMAGE				+ 1)
--#define	VG11_COLORMATRIX			(VG11_CLEARPATH					+ 1)
--#define	VG11_CONVOLVE				(VG11_COLORMATRIX				+ 1)
--#define	VG11_COPYIMAGE				(VG11_CONVOLVE					+ 1)
--#define	VG11_COPYMASK				(VG11_COPYIMAGE					+ 1)
--#define	VG11_COPYPIXELS				(VG11_COPYMASK					+ 1)
--#define	VG11_CREATEFONT				(VG11_COPYPIXELS				+ 1)
--#define	VG11_CREATEIMAGE			(VG11_CREATEFONT				+ 1)
--#define	VG11_CREATEMASKLAYER		(VG11_CREATEIMAGE				+ 1)
--#define	VG11_CREATEPAINT			(VG11_CREATEMASKLAYER			+ 1)
--#define	VG11_CREATEPATH				(VG11_CREATEPAINT				+ 1)
--#define	VG11_DESTROYFONT			(VG11_CREATEPATH				+ 1)
--#define	VG11_DESTROYIMAGE			(VG11_DESTROYFONT				+ 1)
--#define	VG11_DESTROYMASKLAYER		(VG11_DESTROYIMAGE				+ 1)
--#define	VG11_DESTROYPAINT			(VG11_DESTROYMASKLAYER			+ 1)
--#define	VG11_DESTROYPATH			(VG11_DESTROYPAINT				+ 1)
--#define	VG11_DRAWGLYPH				(VG11_DESTROYPATH				+ 1)
--#define	VG11_DRAWGLYPHS				(VG11_DRAWGLYPH					+ 1)
--#define	VG11_DRAWIMAGE				(VG11_DRAWGLYPHS				+ 1)
--#define	VG11_DRAWPATH				(VG11_DRAWIMAGE					+ 1)
--#define	VG11_FILLMASKLAYER			(VG11_DRAWPATH					+ 1)
--#define	VG11_FINISH					(VG11_FILLMASKLAYER				+ 1)
--#define	VG11_FLUSH					(VG11_FINISH					+ 1)
--#define	VG11_GAUSSIANBLUR			(VG11_FLUSH						+ 1)
--#define	VG11_GETCOLOR				(VG11_GAUSSIANBLUR				+ 1)
--#define	VG11_GETERROR				(VG11_GETCOLOR					+ 1)
--#define	VG11_GETF					(VG11_GETERROR					+ 1)
--#define	VG11_GETFV					(VG11_GETF						+ 1)
--#define	VG11_GETI					(VG11_GETFV						+ 1)
--#define	VG11_GETIMAGESUBDATA		(VG11_GETI						+ 1)
--#define	VG11_GETIV					(VG11_GETIMAGESUBDATA			+ 1)
--#define	VG11_GETMATRIX				(VG11_GETIV						+ 1)
--#define	VG11_GETPAINT				(VG11_GETMATRIX					+ 1)
--#define	VG11_GETPARAMETERF			(VG11_GETPAINT					+ 1)
--#define	VG11_GETPARAMETERFV			(VG11_GETPARAMETERF				+ 1)
--#define	VG11_GETPARAMETERI			(VG11_GETPARAMETERFV			+ 1)
--#define	VG11_GETPARAMETERIV			(VG11_GETPARAMETERI				+ 1)
--#define	VG11_GETPARAMETERVECTORSIZE	(VG11_GETPARAMETERIV			+ 1)
--#define	VG11_GETPARENT				(VG11_GETPARAMETERVECTORSIZE	+ 1)
--#define	VG11_GETPATHCAPABILITIES	(VG11_GETPARENT					+ 1)
--#define	VG11_GETPIXELS				(VG11_GETPATHCAPABILITIES		+ 1)
--#define	VG11_GETSTRING				(VG11_GETPIXELS					+ 1)
--#define	VG11_GETVECTORSIZE			(VG11_GETSTRING					+ 1)
--#define	VG11_HARDWAREQUERY			(VG11_GETVECTORSIZE				+ 1)
--#define	VG11_IMAGESUBDATA			(VG11_HARDWAREQUERY				+ 1)
--#define	VG11_INTERPOLATEPATH		(VG11_IMAGESUBDATA				+ 1)
--#define	VG11_LOADIDENTITY			(VG11_INTERPOLATEPATH			+ 1)
--#define	VG11_LOADMATRIX				(VG11_LOADIDENTITY				+ 1)
--#define	VG11_LOOKUP					(VG11_LOADMATRIX				+ 1)
--#define	VG11_LOOKUPSINGLE			(VG11_LOOKUP					+ 1)
--#define	VG11_MASK					(VG11_LOOKUPSINGLE				+ 1)
--#define	VG11_MODIFYPATHCOORDS		(VG11_MASK						+ 1)
--#define	VG11_MULTMATRIX				(VG11_MODIFYPATHCOORDS			+ 1)
--#define	VG11_PAINTPATTERN			(VG11_MULTMATRIX				+ 1)
--#define	VG11_PATHBOUNDS				(VG11_PAINTPATTERN				+ 1)
--#define	VG11_PATHLENGTH				(VG11_PATHBOUNDS				+ 1)
--#define	VG11_PATHTRANSFORMEDBOUNDS	(VG11_PATHLENGTH				+ 1)
--#define	VG11_POINTALONGPATH			(VG11_PATHTRANSFORMEDBOUNDS		+ 1)
--#define	VG11_READPIXELS				(VG11_POINTALONGPATH			+ 1)
--#define	VG11_REMOVEPATHCAPABILITIES	(VG11_READPIXELS				+ 1)
--#define	VG11_RENDERTOMASK			(VG11_REMOVEPATHCAPABILITIES	+ 1)
--#define	VG11_ROTATE					(VG11_RENDERTOMASK				+ 1)
--#define	VG11_SCALE					(VG11_ROTATE					+ 1)
--#define	VG11_SEPARABLECONVOLVE		(VG11_SCALE						+ 1)
--#define	VG11_SETCOLOR				(VG11_SEPARABLECONVOLVE			+ 1)
--#define	VG11_SETF					(VG11_SETCOLOR					+ 1)
--#define	VG11_SETFV					(VG11_SETF						+ 1)
--#define	VG11_SETGLYPHTOIMAGE		(VG11_SETFV						+ 1)
--#define	VG11_SETGLYPHTOPATH			(VG11_SETGLYPHTOIMAGE			+ 1)
--#define	VG11_SETI					(VG11_SETGLYPHTOPATH			+ 1)
--#define	VG11_SETIV					(VG11_SETI						+ 1)
--#define	VG11_SETPAINT				(VG11_SETIV						+ 1)
--#define	VG11_SETPARAMETERF			(VG11_SETPAINT					+ 1)
--#define	VG11_SETPARAMETERFV			(VG11_SETPARAMETERF				+ 1)
--#define	VG11_SETPARAMETERI			(VG11_SETPARAMETERFV			+ 1)
--#define	VG11_SETPARAMETERIV			(VG11_SETPARAMETERI				+ 1)
--#define	VG11_SETPIXELS				(VG11_SETPARAMETERIV			+ 1)
--#define	VG11_SHEAR					(VG11_SETPIXELS					+ 1)
--#define	VG11_TRANSFORMPATH			(VG11_SHEAR						+ 1)
--#define	VG11_TRANSLATE				(VG11_TRANSFORMPATH				+ 1)
--#define	VG11_WRITEPIXELS			(VG11_TRANSLATE					+ 1)
--#define VG11_CALLS                  (VG11_WRITEPIXELS               + 1)
--#define VG11_DRAWCALLS              (VG11_CALLS                     + 1)
--#define VG11_STATECHANGECALLS       (VG11_DRAWCALLS                 + 1)
--#define VG11_FILLCOUNT              (VG11_STATECHANGECALLS          + 1)
--#define VG11_STROKECOUNT            (VG11_FILLCOUNT                 + 1)
-+#define    ES11_CALLS              151
-+#define    ES11_DRAWCALLS          (ES11_CALLS             + 1)
-+#define    ES11_STATECHANGECALLS   (ES11_DRAWCALLS         + 1)
-+#define    ES11_POINTCOUNT         (ES11_STATECHANGECALLS  + 1)
-+#define    ES11_LINECOUNT          (ES11_POINTCOUNT        + 1)
-+#define    ES11_TRIANGLECOUNT      (ES11_LINECOUNT         + 1)
-+
-+#define    ES20_CALLS              159
-+#define    ES20_DRAWCALLS          (ES20_CALLS             + 1)
-+#define    ES20_STATECHANGECALLS   (ES20_DRAWCALLS         + 1)
-+#define    ES20_POINTCOUNT         (ES20_STATECHANGECALLS  + 1)
-+#define    ES20_LINECOUNT          (ES20_POINTCOUNT        + 1)
-+#define    ES20_TRIANGLECOUNT      (ES20_LINECOUNT         + 1)
-+
-+#define    VG11_CALLS              88
-+#define    VG11_DRAWCALLS          (VG11_CALLS              + 1)
-+#define    VG11_STATECHANGECALLS   (VG11_DRAWCALLS          + 1)
-+#define    VG11_FILLCOUNT          (VG11_STATECHANGECALLS   + 1)
-+#define    VG11_STROKECOUNT        (VG11_FILLCOUNT          + 1)
- /* End of Driver API ID Definitions. */
- 
- /* HAL & MISC IDs. */
--#define HAL_VERTBUFNEWBYTEALLOC		1
--#define HAL_VERTBUFTOTALBYTEALLOC	(HAL_VERTBUFNEWBYTEALLOC 	+ 1)
--#define HAL_VERTBUFNEWOBJALLOC		(HAL_VERTBUFTOTALBYTEALLOC	+ 1)
--#define HAL_VERTBUFTOTALOBJALLOC	(HAL_VERTBUFNEWOBJALLOC		+ 1)
--#define HAL_INDBUFNEWBYTEALLOC		(HAL_VERTBUFTOTALOBJALLOC	+ 1)
--#define HAL_INDBUFTOTALBYTEALLOC	(HAL_INDBUFNEWBYTEALLOC		+ 1)
--#define HAL_INDBUFNEWOBJALLOC		(HAL_INDBUFTOTALBYTEALLOC	+ 1)
--#define HAL_INDBUFTOTALOBJALLOC		(HAL_INDBUFNEWOBJALLOC		+ 1)
--#define HAL_TEXBUFNEWBYTEALLOC		(HAL_INDBUFTOTALOBJALLOC	+ 1)
--#define HAL_TEXBUFTOTALBYTEALLOC	(HAL_TEXBUFNEWBYTEALLOC		+ 1)
--#define HAL_TEXBUFNEWOBJALLOC		(HAL_TEXBUFTOTALBYTEALLOC	+ 1)
--#define HAL_TEXBUFTOTALOBJALLOC		(HAL_TEXBUFNEWOBJALLOC		+ 1)
--
--#define GPU_CYCLES		1
--#define GPU_READ64BYTE	(GPU_CYCLES		+ 1)
--#define GPU_WRITE64BYTE	(GPU_READ64BYTE	+ 1)
--#define GPU_TOTALCYCLES	(GPU_WRITE64BYTE	+ 1)
--#define GPU_IDLECYCLES	(GPU_TOTALCYCLES	+ 1)
--
--#define VS_INSTCOUNT			1
--#define VS_BRANCHINSTCOUNT		(VS_INSTCOUNT		+ 1)
--#define VS_TEXLDINSTCOUNT		(VS_BRANCHINSTCOUNT	+ 1)
--#define VS_RENDEREDVERTCOUNT	(VS_TEXLDINSTCOUNT	+ 1)
--
--#define PS_INSTCOUNT			1
--#define PS_BRANCHINSTCOUNT		(PS_INSTCOUNT		+ 1)
--#define PS_TEXLDINSTCOUNT		(PS_BRANCHINSTCOUNT	+ 1)
--#define PS_RENDEREDPIXCOUNT		(PS_TEXLDINSTCOUNT	+ 1)
--
--#define PA_INVERTCOUNT		1
--#define	PA_INPRIMCOUNT		(PA_INVERTCOUNT		+ 1)
--#define PA_OUTPRIMCOUNT		(PA_INPRIMCOUNT		+ 1)
--#define PA_DEPTHCLIPCOUNT	(PA_OUTPRIMCOUNT	+ 1)
--#define PA_TRIVIALREJCOUNT	(PA_DEPTHCLIPCOUNT	+ 1)
--#define PA_CULLCOUNT		(PA_TRIVIALREJCOUNT	+ 1)
--
--#define SE_TRIANGLECOUNT	1
--#define SE_LINECOUNT		(SE_TRIANGLECOUNT	+ 1)
--
--#define RA_VALIDPIXCOUNT		1
--#define RA_TOTALQUADCOUNT		(RA_VALIDPIXCOUNT		+ 1)
--#define RA_VALIDQUADCOUNTEZ		(RA_TOTALQUADCOUNT		+ 1)
--#define RA_TOTALPRIMCOUNT		(RA_VALIDQUADCOUNTEZ	+ 1)
--#define RA_PIPECACHEMISSCOUNT	(RA_TOTALPRIMCOUNT		+ 1)
--#define RA_PREFCACHEMISSCOUNT	(RA_PIPECACHEMISSCOUNT	+ 1)
--#define RA_EEZCULLCOUNT			(RA_PREFCACHEMISSCOUNT	+ 1)
--
--#define TX_TOTBILINEARREQ		1
--#define TX_TOTTRILINEARREQ		(TX_TOTBILINEARREQ		+ 1)
--#define TX_TOTDISCARDTEXREQ		(TX_TOTTRILINEARREQ		+ 1)
--#define TX_TOTTEXREQ			(TX_TOTDISCARDTEXREQ	+ 1)
--#define TX_MEMREADCOUNT			(TX_TOTTEXREQ			+ 1)
--#define TX_MEMREADIN8BCOUNT		(TX_MEMREADCOUNT		+ 1)
--#define TX_CACHEMISSCOUNT		(TX_MEMREADIN8BCOUNT	+ 1)
--#define TX_CACHEHITTEXELCOUNT	(TX_CACHEMISSCOUNT		+ 1)
--#define TX_CACHEMISSTEXELCOUNT	(TX_CACHEHITTEXELCOUNT	+ 1)
--
--#define PE_KILLEDBYCOLOR	1
--#define PE_KILLEDBYDEPTH	(PE_KILLEDBYCOLOR	+ 1)
--#define PE_DRAWNBYCOLOR		(PE_KILLEDBYDEPTH	+ 1)
--#define PE_DRAWNBYDEPTH		(PE_DRAWNBYCOLOR	+ 1)
--
--#define MC_READREQ8BPIPE	1
--#define MC_READREQ8BIP		(MC_READREQ8BPIPE	+ 1)
--#define MC_WRITEREQ8BPIPE	(MC_READREQ8BIP		+ 1)
--
--#define AXI_READREQSTALLED		1
--#define AXI_WRITEREQSTALLED		(AXI_READREQSTALLED		+ 1)
--#define AXI_WRITEDATASTALLED	(AXI_WRITEREQSTALLED	+ 1)
--
--#define PVS_INSTRCOUNT		1
--#define PVS_ALUINSTRCOUNT	(PVS_INSTRCOUNT		+ 1)
--#define PVS_TEXINSTRCOUNT	(PVS_ALUINSTRCOUNT	+ 1)
--#define PVS_ATTRIBCOUNT		(PVS_TEXINSTRCOUNT	+ 1)
--#define PVS_UNIFORMCOUNT	(PVS_ATTRIBCOUNT	+ 1)
--#define PVS_FUNCTIONCOUNT	(PVS_UNIFORMCOUNT	+ 1)
--
--#define PPS_INSTRCOUNT		1
--#define PPS_ALUINSTRCOUNT	(PPS_INSTRCOUNT		+ 1)
--#define PPS_TEXINSTRCOUNT	(PPS_ALUINSTRCOUNT	+ 1)
--#define PPS_ATTRIBCOUNT		(PPS_TEXINSTRCOUNT	+ 1)
--#define PPS_UNIFORMCOUNT	(PPS_ATTRIBCOUNT	+ 1)
--#define PPS_FUNCTIONCOUNT 	(PPS_UNIFORMCOUNT	+ 1)
-+#define HAL_VERTBUFNEWBYTEALLOC    1
-+#define HAL_VERTBUFTOTALBYTEALLOC  (HAL_VERTBUFNEWBYTEALLOC     + 1)
-+#define HAL_VERTBUFNEWOBJALLOC     (HAL_VERTBUFTOTALBYTEALLOC   + 1)
-+#define HAL_VERTBUFTOTALOBJALLOC   (HAL_VERTBUFNEWOBJALLOC      + 1)
-+#define HAL_INDBUFNEWBYTEALLOC     (HAL_VERTBUFTOTALOBJALLOC    + 1)
-+#define HAL_INDBUFTOTALBYTEALLOC   (HAL_INDBUFNEWBYTEALLOC      + 1)
-+#define HAL_INDBUFNEWOBJALLOC      (HAL_INDBUFTOTALBYTEALLOC    + 1)
-+#define HAL_INDBUFTOTALOBJALLOC    (HAL_INDBUFNEWOBJALLOC       + 1)
-+#define HAL_TEXBUFNEWBYTEALLOC     (HAL_INDBUFTOTALOBJALLOC     + 1)
-+#define HAL_TEXBUFTOTALBYTEALLOC   (HAL_TEXBUFNEWBYTEALLOC      + 1)
-+#define HAL_TEXBUFNEWOBJALLOC      (HAL_TEXBUFTOTALBYTEALLOC    + 1)
-+#define HAL_TEXBUFTOTALOBJALLOC    (HAL_TEXBUFNEWOBJALLOC       + 1)
-+
-+#define GPU_CYCLES           1
-+#define GPU_READ64BYTE       (GPU_CYCLES         + 1)
-+#define GPU_WRITE64BYTE      (GPU_READ64BYTE     + 1)
-+#define GPU_TOTALCYCLES      (GPU_WRITE64BYTE    + 1)
-+#define GPU_IDLECYCLES       (GPU_TOTALCYCLES    + 1)
-+
-+#define VS_INSTCOUNT          1
-+#define VS_BRANCHINSTCOUNT    (VS_INSTCOUNT          + 1)
-+#define VS_TEXLDINSTCOUNT     (VS_BRANCHINSTCOUNT    + 1)
-+#define VS_RENDEREDVERTCOUNT  (VS_TEXLDINSTCOUNT     + 1)
-+#define VS_SOURCE             (VS_RENDEREDVERTCOUNT  + 1)
-+
-+#define PS_INSTCOUNT          1
-+#define PS_BRANCHINSTCOUNT    (PS_INSTCOUNT          + 1)
-+#define PS_TEXLDINSTCOUNT     (PS_BRANCHINSTCOUNT    + 1)
-+#define PS_RENDEREDPIXCOUNT   (PS_TEXLDINSTCOUNT     + 1)
-+#define PS_SOURCE             (PS_RENDEREDPIXCOUNT   + 1)
-+
-+#define PA_INVERTCOUNT        1
-+#define PA_INPRIMCOUNT        (PA_INVERTCOUNT      + 1)
-+#define PA_OUTPRIMCOUNT       (PA_INPRIMCOUNT      + 1)
-+#define PA_DEPTHCLIPCOUNT     (PA_OUTPRIMCOUNT     + 1)
-+#define PA_TRIVIALREJCOUNT    (PA_DEPTHCLIPCOUNT   + 1)
-+#define PA_CULLCOUNT          (PA_TRIVIALREJCOUNT  + 1)
-+
-+#define SE_TRIANGLECOUNT      1
-+#define SE_LINECOUNT          (SE_TRIANGLECOUNT    + 1)
-+
-+#define RA_VALIDPIXCOUNT      1
-+#define RA_TOTALQUADCOUNT     (RA_VALIDPIXCOUNT      + 1)
-+#define RA_VALIDQUADCOUNTEZ   (RA_TOTALQUADCOUNT     + 1)
-+#define RA_TOTALPRIMCOUNT     (RA_VALIDQUADCOUNTEZ   + 1)
-+#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT     + 1)
-+#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
-+#define RA_EEZCULLCOUNT       (RA_PREFCACHEMISSCOUNT + 1)
-+
-+#define TX_TOTBILINEARREQ     1
-+#define TX_TOTTRILINEARREQ    (TX_TOTBILINEARREQ      + 1)
-+#define TX_TOTDISCARDTEXREQ   (TX_TOTTRILINEARREQ     + 1)
-+#define TX_TOTTEXREQ          (TX_TOTDISCARDTEXREQ    + 1)
-+#define TX_MEMREADCOUNT       (TX_TOTTEXREQ           + 1)
-+#define TX_MEMREADIN8BCOUNT   (TX_MEMREADCOUNT        + 1)
-+#define TX_CACHEMISSCOUNT     (TX_MEMREADIN8BCOUNT    + 1)
-+#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT      + 1)
-+#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
-+
-+#define PE_KILLEDBYCOLOR      1
-+#define PE_KILLEDBYDEPTH      (PE_KILLEDBYCOLOR    + 1)
-+#define PE_DRAWNBYCOLOR       (PE_KILLEDBYDEPTH    + 1)
-+#define PE_DRAWNBYDEPTH       (PE_DRAWNBYCOLOR     + 1)
-+
-+#define MC_READREQ8BPIPE      1
-+#define MC_READREQ8BIP        (MC_READREQ8BPIPE    + 1)
-+#define MC_WRITEREQ8BPIPE     (MC_READREQ8BIP      + 1)
-+
-+#define AXI_READREQSTALLED    1
-+#define AXI_WRITEREQSTALLED   (AXI_READREQSTALLED  + 1)
-+#define AXI_WRITEDATASTALLED  (AXI_WRITEREQSTALLED + 1)
-+
-+#define PVS_INSTRCOUNT        1
-+#define PVS_ALUINSTRCOUNT     (PVS_INSTRCOUNT      + 1)
-+#define PVS_TEXINSTRCOUNT     (PVS_ALUINSTRCOUNT   + 1)
-+#define PVS_ATTRIBCOUNT       (PVS_TEXINSTRCOUNT   + 1)
-+#define PVS_UNIFORMCOUNT      (PVS_ATTRIBCOUNT     + 1)
-+#define PVS_FUNCTIONCOUNT     (PVS_UNIFORMCOUNT    + 1)
-+#define PVS_SOURCE            (PVS_FUNCTIONCOUNT   + 1)
-+
-+#define PPS_INSTRCOUNT       1
-+#define PPS_ALUINSTRCOUNT    (PPS_INSTRCOUNT       + 1)
-+#define PPS_TEXINSTRCOUNT    (PPS_ALUINSTRCOUNT    + 1)
-+#define PPS_ATTRIBCOUNT      (PPS_TEXINSTRCOUNT    + 1)
-+#define PPS_UNIFORMCOUNT     (PPS_ATTRIBCOUNT      + 1)
-+#define PPS_FUNCTIONCOUNT    (PPS_UNIFORMCOUNT     + 1)
-+#define PPS_SOURCE           (PPS_FUNCTIONCOUNT    + 1)
- /* End of MISC Counter IDs. */
- 
- #ifdef gcdNEW_PROFILER_FILE
-@@ -578,8 +184,8 @@ extern "C" {
- #define VPG_ES11_TIME   0x170000
- #define VPG_ES20_TIME   0x180000
- #define VPG_FRAME       0x190000
--#define VPG_ES11_DRAW 0x200000
--#define VPG_ES20_DRAW 0x210000
-+#define VPG_ES11_DRAW   0x200000
-+#define VPG_ES20_DRAW   0x210000
- #define VPG_END         0xff0000
- 
- /* Info. */
-@@ -592,7 +198,7 @@ extern "C" {
- #define VPC_INFOSCREENSIZE      (VPC_INFODRIVERMODE + 1)
- 
- /* Counter Constants. */
--#define VPC_ELAPSETIME  		(VPG_TIME + 1)
-+#define VPC_ELAPSETIME          (VPG_TIME + 1)
- #define VPC_CPUTIME             (VPC_ELAPSETIME + 1)
- 
- #define VPC_MEMMAXRES           (VPG_MEM + 1)
-@@ -600,404 +206,28 @@ extern "C" {
- #define VPC_MEMUNSHAREDDATA     (VPC_MEMSHARED + 1)
- #define VPC_MEMUNSHAREDSTACK    (VPC_MEMUNSHAREDDATA + 1)
- 
--/* OpenGL ES11 Counters. */
--#define	VPC_ES11ACTIVETEXTURE			(VPG_ES11 +	ES11_ACTIVETEXTURE)
--#define	VPC_ES11ALPHAFUNC				(VPG_ES11 +	ES11_ALPHAFUNC)
--#define	VPC_ES11ALPHAFUNCX				(VPG_ES11 +	ES11_ALPHAFUNCX)
--#define	VPC_ES11BINDBUFFER				(VPG_ES11 +	ES11_BINDBUFFER)
--#define	VPC_ES11BINDTEXTURE				(VPG_ES11 +	ES11_BINDTEXTURE)
--#define	VPC_ES11BLENDFUNC				(VPG_ES11 +	ES11_BLENDFUNC)
--#define	VPC_ES11BUFFERDATA				(VPG_ES11 +	ES11_BUFFERDATA)
--#define	VPC_ES11BUFFERSUBDATA			(VPG_ES11 +	ES11_BUFFERSUBDATA)
--#define	VPC_ES11CLEAR					(VPG_ES11 +	ES11_CLEAR)
--#define	VPC_ES11CLEARCOLOR				(VPG_ES11 +	ES11_CLEARCOLOR)
--#define	VPC_ES11CLEARCOLORX				(VPG_ES11 +	ES11_CLEARCOLORX)
--#define	VPC_ES11CLEARDEPTHF				(VPG_ES11 +	ES11_CLEARDEPTHF)
--#define	VPC_ES11CLEARDEPTHX				(VPG_ES11 +	ES11_CLEARDEPTHX)
--#define	VPC_ES11CLEARSTENCIL			(VPG_ES11 +	ES11_CLEARSTENCIL)
--#define	VPC_ES11CLIENTACTIVETEXTURE		(VPG_ES11 +	ES11_CLIENTACTIVETEXTURE)
--#define	VPC_ES11CLIPPLANEF				(VPG_ES11 +	ES11_CLIPPLANEF)
--#define	VPC_ES11CLIPPLANEX				(VPG_ES11 +	ES11_CLIPPLANEX)
--#define	VPC_ES11COLOR4F					(VPG_ES11 +	ES11_COLOR4F)
--#define	VPC_ES11COLOR4UB				(VPG_ES11 +	ES11_COLOR4UB)
--#define	VPC_ES11COLOR4X					(VPG_ES11 +	ES11_COLOR4X)
--#define	VPC_ES11COLORMASK				(VPG_ES11 +	ES11_COLORMASK)
--#define	VPC_ES11COLORPOINTER			(VPG_ES11 +	ES11_COLORPOINTER)
--#define	VPC_ES11COMPRESSEDTEXIMAGE2D	(VPG_ES11 +	ES11_COMPRESSEDTEXIMAGE2D)
--#define	VPC_ES11COMPRESSEDTEXSUBIMAGE2D	(VPG_ES11 +	ES11_COMPRESSEDTEXSUBIMAGE2D)
--#define	VPC_ES11COPYTEXIMAGE2D			(VPG_ES11 +	ES11_COPYTEXIMAGE2D)
--#define	VPC_ES11COPYTEXSUBIMAGE2D		(VPG_ES11 +	ES11_COPYTEXSUBIMAGE2D)
--#define	VPC_ES11CULLFACE				(VPG_ES11 +	ES11_CULLFACE)
--#define	VPC_ES11DELETEBUFFERS			(VPG_ES11 +	ES11_DELETEBUFFERS)
--#define	VPC_ES11DELETETEXTURES			(VPG_ES11 +	ES11_DELETETEXTURES)
--#define	VPC_ES11DEPTHFUNC				(VPG_ES11 +	ES11_DEPTHFUNC)
--#define	VPC_ES11DEPTHMASK				(VPG_ES11 +	ES11_DEPTHMASK)
--#define	VPC_ES11DEPTHRANGEF				(VPG_ES11 +	ES11_DEPTHRANGEF)
--#define	VPC_ES11DEPTHRANGEX				(VPG_ES11 +	ES11_DEPTHRANGEX)
--#define	VPC_ES11DISABLE					(VPG_ES11 +	ES11_DISABLE)
--#define	VPC_ES11DISABLECLIENTSTATE		(VPG_ES11 +	ES11_DISABLECLIENTSTATE)
--#define	VPC_ES11DRAWARRAYS				(VPG_ES11 +	ES11_DRAWARRAYS)
--#define	VPC_ES11DRAWELEMENTS			(VPG_ES11 +	ES11_DRAWELEMENTS)
--#define	VPC_ES11ENABLE					(VPG_ES11 +	ES11_ENABLE)
--#define	VPC_ES11ENABLECLIENTSTATE		(VPG_ES11 +	ES11_ENABLECLIENTSTATE)
--#define	VPC_ES11FINISH					(VPG_ES11 +	ES11_FINISH)
--#define	VPC_ES11FLUSH					(VPG_ES11 +	ES11_FLUSH)
--#define	VPC_ES11FOGF					(VPG_ES11 +	ES11_FOGF)
--#define	VPC_ES11FOGFV					(VPG_ES11 +	ES11_FOGFV)
--#define	VPC_ES11FOGX					(VPG_ES11 +	ES11_FOGX)
--#define	VPC_ES11FOGXV					(VPG_ES11 +	ES11_FOGXV)
--#define	VPC_ES11FRONTFACE				(VPG_ES11 +	ES11_FRONTFACE)
--#define	VPC_ES11FRUSTUMF				(VPG_ES11 +	ES11_FRUSTUMF)
--#define	VPC_ES11FRUSTUMX				(VPG_ES11 +	ES11_FRUSTUMX)
--#define	VPC_ES11GENBUFFERS				(VPG_ES11 +	ES11_GENBUFFERS)
--#define	VPC_ES11GENTEXTURES				(VPG_ES11 +	ES11_GENTEXTURES)
--#define	VPC_ES11GETBOOLEANV				(VPG_ES11 +	ES11_GETBOOLEANV)
--#define	VPC_ES11GETBUFFERPARAMETERIV	(VPG_ES11 +	ES11_GETBUFFERPARAMETERIV)
--#define	VPC_ES11GETCLIPPLANEF			(VPG_ES11 +	ES11_GETCLIPPLANEF)
--#define	VPC_ES11GETCLIPPLANEX			(VPG_ES11 +	ES11_GETCLIPPLANEX)
--#define	VPC_ES11GETERROR				(VPG_ES11 +	ES11_GETERROR)
--#define	VPC_ES11GETFIXEDV				(VPG_ES11 +	ES11_GETFIXEDV)
--#define	VPC_ES11GETFLOATV				(VPG_ES11 +	ES11_GETFLOATV)
--#define	VPC_ES11GETINTEGERV				(VPG_ES11 +	ES11_GETINTEGERV)
--#define	VPC_ES11GETLIGHTFV				(VPG_ES11 +	ES11_GETLIGHTFV)
--#define	VPC_ES11GETLIGHTXV				(VPG_ES11 +	ES11_GETLIGHTXV)
--#define	VPC_ES11GETMATERIALFV			(VPG_ES11 +	ES11_GETMATERIALFV)
--#define	VPC_ES11GETMATERIALXV			(VPG_ES11 +	ES11_GETMATERIALXV)
--#define	VPC_ES11GETPOINTERV				(VPG_ES11 +	ES11_GETPOINTERV)
--#define	VPC_ES11GETSTRING				(VPG_ES11 +	ES11_GETSTRING)
--#define	VPC_ES11GETTEXENVFV				(VPG_ES11 +	ES11_GETTEXENVFV)
--#define	VPC_ES11GETTEXENVIV				(VPG_ES11 +	ES11_GETTEXENVIV)
--#define	VPC_ES11GETTEXENVXV				(VPG_ES11 +	ES11_GETTEXENVXV)
--#define	VPC_ES11GETTEXPARAMETERFV		(VPG_ES11 +	ES11_GETTEXPARAMETERFV)
--#define	VPC_ES11GETTEXPARAMETERIV		(VPG_ES11 +	ES11_GETTEXPARAMETERIV)
--#define	VPC_ES11GETTEXPARAMETERXV		(VPG_ES11 +	ES11_GETTEXPARAMETERXV)
--#define	VPC_ES11HINT					(VPG_ES11 +	ES11_HINT)
--#define	VPC_ES11ISBUFFER				(VPG_ES11 +	ES11_ISBUFFER)
--#define	VPC_ES11ISENABLED				(VPG_ES11 +	ES11_ISENABLED)
--#define	VPC_ES11ISTEXTURE				(VPG_ES11 +	ES11_ISTEXTURE)
--#define	VPC_ES11LIGHTF					(VPG_ES11 +	ES11_LIGHTF)
--#define	VPC_ES11LIGHTFV					(VPG_ES11 +	ES11_LIGHTFV)
--#define	VPC_ES11LIGHTMODELF				(VPG_ES11 +	ES11_LIGHTMODELF)
--#define	VPC_ES11LIGHTMODELFV			(VPG_ES11 +	ES11_LIGHTMODELFV)
--#define	VPC_ES11LIGHTMODELX				(VPG_ES11 +	ES11_LIGHTMODELX)
--#define	VPC_ES11LIGHTMODELXV			(VPG_ES11 +	ES11_LIGHTMODELXV)
--#define	VPC_ES11LIGHTX					(VPG_ES11 +	ES11_LIGHTX)
--#define	VPC_ES11LIGHTXV					(VPG_ES11 +	ES11_LIGHTXV)
--#define	VPC_ES11LINEWIDTH				(VPG_ES11 +	ES11_LINEWIDTH)
--#define	VPC_ES11LINEWIDTHX				(VPG_ES11 +	ES11_LINEWIDTHX)
--#define	VPC_ES11LOADIDENTITY			(VPG_ES11 +	ES11_LOADIDENTITY)
--#define	VPC_ES11LOADMATRIXF				(VPG_ES11 +	ES11_LOADMATRIXF)
--#define	VPC_ES11LOADMATRIXX				(VPG_ES11 +	ES11_LOADMATRIXX)
--#define	VPC_ES11LOGICOP					(VPG_ES11 +	ES11_LOGICOP)
--#define	VPC_ES11MATERIALF				(VPG_ES11 +	ES11_MATERIALF)
--#define	VPC_ES11MATERIALFV				(VPG_ES11 +	ES11_MATERIALFV)
--#define	VPC_ES11MATERIALX				(VPG_ES11 +	ES11_MATERIALX)
--#define	VPC_ES11MATERIALXV				(VPG_ES11 +	ES11_MATERIALXV)
--#define	VPC_ES11MATRIXMODE				(VPG_ES11 +	ES11_MATRIXMODE)
--#define	VPC_ES11MULTITEXCOORD4F			(VPG_ES11 +	ES11_MULTITEXCOORD4F)
--#define	VPC_ES11MULTITEXCOORD4X			(VPG_ES11 +	ES11_MULTITEXCOORD4X)
--#define	VPC_ES11MULTMATRIXF				(VPG_ES11 +	ES11_MULTMATRIXF)
--#define	VPC_ES11MULTMATRIXX				(VPG_ES11 +	ES11_MULTMATRIXX)
--#define	VPC_ES11NORMAL3F				(VPG_ES11 +	ES11_NORMAL3F)
--#define	VPC_ES11NORMAL3X				(VPG_ES11 +	ES11_NORMAL3X)
--#define	VPC_ES11NORMALPOINTER			(VPG_ES11 +	ES11_NORMALPOINTER)
--#define	VPC_ES11ORTHOF					(VPG_ES11 +	ES11_ORTHOF)
--#define	VPC_ES11ORTHOX					(VPG_ES11 +	ES11_ORTHOX)
--#define	VPC_ES11PIXELSTOREI				(VPG_ES11 +	ES11_PIXELSTOREI)
--#define	VPC_ES11POINTPARAMETERF			(VPG_ES11 +	ES11_POINTPARAMETERF)
--#define	VPC_ES11POINTPARAMETERFV		(VPG_ES11 +	ES11_POINTPARAMETERFV)
--#define	VPC_ES11POINTPARAMETERX			(VPG_ES11 +	ES11_POINTPARAMETERX)
--#define	VPC_ES11POINTPARAMETERXV		(VPG_ES11 +	ES11_POINTPARAMETERXV)
--#define	VPC_ES11POINTSIZE				(VPG_ES11 +	ES11_POINTSIZE)
--#define	VPC_ES11POINTSIZEX				(VPG_ES11 +	ES11_POINTSIZEX)
--#define	VPC_ES11POLYGONOFFSET			(VPG_ES11 +	ES11_POLYGONOFFSET)
--#define	VPC_ES11POLYGONOFFSETX			(VPG_ES11 +	ES11_POLYGONOFFSETX)
--#define	VPC_ES11POPMATRIX				(VPG_ES11 +	ES11_POPMATRIX)
--#define	VPC_ES11PUSHMATRIX				(VPG_ES11 +	ES11_PUSHMATRIX)
--#define	VPC_ES11READPIXELS				(VPG_ES11 +	ES11_READPIXELS)
--#define	VPC_ES11ROTATEF					(VPG_ES11 +	ES11_ROTATEF)
--#define	VPC_ES11ROTATEX					(VPG_ES11 +	ES11_ROTATEX)
--#define	VPC_ES11SAMPLECOVERAGE			(VPG_ES11 +	ES11_SAMPLECOVERAGE)
--#define	VPC_ES11SAMPLECOVERAGEX			(VPG_ES11 +	ES11_SAMPLECOVERAGEX)
--#define	VPC_ES11SCALEF					(VPG_ES11 +	ES11_SCALEF)
--#define	VPC_ES11SCALEX					(VPG_ES11 +	ES11_SCALEX)
--#define	VPC_ES11SCISSOR					(VPG_ES11 +	ES11_SCISSOR)
--#define	VPC_ES11SHADEMODEL				(VPG_ES11 +	ES11_SHADEMODEL)
--#define	VPC_ES11STENCILFUNC				(VPG_ES11 +	ES11_STENCILFUNC)
--#define	VPC_ES11STENCILMASK				(VPG_ES11 +	ES11_STENCILMASK)
--#define	VPC_ES11STENCILOP				(VPG_ES11 +	ES11_STENCILOP)
--#define	VPC_ES11TEXCOORDPOINTER			(VPG_ES11 +	ES11_TEXCOORDPOINTER)
--#define	VPC_ES11TEXENVF					(VPG_ES11 +	ES11_TEXENVF)
--#define	VPC_ES11TEXENVFV				(VPG_ES11 +	ES11_TEXENVFV)
--#define	VPC_ES11TEXENVI					(VPG_ES11 +	ES11_TEXENVI)
--#define	VPC_ES11TEXENVIV				(VPG_ES11 +	ES11_TEXENVIV)
--#define	VPC_ES11TEXENVX					(VPG_ES11 +	ES11_TEXENVX)
--#define	VPC_ES11TEXENVXV				(VPG_ES11 +	ES11_TEXENVXV)
--#define	VPC_ES11TEXIMAGE2D				(VPG_ES11 +	ES11_TEXIMAGE2D)
--#define	VPC_ES11TEXPARAMETERF			(VPG_ES11 +	ES11_TEXPARAMETERF)
--#define	VPC_ES11TEXPARAMETERFV			(VPG_ES11 +	ES11_TEXPARAMETERFV)
--#define	VPC_ES11TEXPARAMETERI			(VPG_ES11 +	ES11_TEXPARAMETERI)
--#define	VPC_ES11TEXPARAMETERIV			(VPG_ES11 +	ES11_TEXPARAMETERIV)
--#define	VPC_ES11TEXPARAMETERX			(VPG_ES11 +	ES11_TEXPARAMETERX)
--#define	VPC_ES11TEXPARAMETERXV			(VPG_ES11 +	ES11_TEXPARAMETERXV)
--#define	VPC_ES11TEXSUBIMAGE2D			(VPG_ES11 +	ES11_TEXSUBIMAGE2D)
--#define	VPC_ES11TRANSLATEF				(VPG_ES11 +	ES11_TRANSLATEF)
--#define	VPC_ES11TRANSLATEX				(VPG_ES11 +	ES11_TRANSLATEX)
--#define	VPC_ES11VERTEXPOINTER			(VPG_ES11 +	ES11_VERTEXPOINTER)
--#define	VPC_ES11VIEWPORT				(VPG_ES11 +	ES11_VIEWPORT)
- /* OpenGL ES11 Statics Counter IDs. */
--#define	VPC_ES11CALLS					(VPG_ES11 +	ES11_CALLS)
--#define	VPC_ES11DRAWCALLS				(VPG_ES11 +	ES11_DRAWCALLS)
--#define	VPC_ES11STATECHANGECALLS		(VPG_ES11 +	ES11_STATECHANGECALLS)
--#define	VPC_ES11POINTCOUNT				(VPG_ES11 +	ES11_POINTCOUNT)
--#define	VPC_ES11LINECOUNT				(VPG_ES11 +	ES11_LINECOUNT)
--#define	VPC_ES11TRIANGLECOUNT			(VPG_ES11 +	ES11_TRIANGLECOUNT)
--
--/* OpenGLES 2.x */
--#define	VPC_ES20ACTIVETEXTURE						(VPG_ES20 +	ES20_ACTIVETEXTURE)
--#define	VPC_ES20ATTACHSHADER						(VPG_ES20 +	ES20_ATTACHSHADER)
--#define	VPC_ES20BINDATTRIBLOCATION					(VPG_ES20 +	ES20_BINDATTRIBLOCATION)
--#define	VPC_ES20BINDBUFFER							(VPG_ES20 +	ES20_BINDBUFFER)
--#define	VPC_ES20BINDFRAMEBUFFER						(VPG_ES20 +	ES20_BINDFRAMEBUFFER)
--#define	VPC_ES20BINDRENDERBUFFER					(VPG_ES20 +	ES20_BINDRENDERBUFFER)
--#define	VPC_ES20BINDTEXTURE							(VPG_ES20 +	ES20_BINDTEXTURE)
--#define	VPC_ES20BLENDCOLOR							(VPG_ES20 +	ES20_BLENDCOLOR)
--#define	VPC_ES20BLENDEQUATION						(VPG_ES20 +	ES20_BLENDEQUATION)
--#define	VPC_ES20BLENDEQUATIONSEPARATE				(VPG_ES20 +	ES20_BLENDEQUATIONSEPARATE)
--#define	VPC_ES20BLENDFUNC							(VPG_ES20 +	ES20_BLENDFUNC)
--#define	VPC_ES20BLENDFUNCSEPARATE					(VPG_ES20 +	ES20_BLENDFUNCSEPARATE)
--#define	VPC_ES20BUFFERDATA							(VPG_ES20 +	ES20_BUFFERDATA)
--#define	VPC_ES20BUFFERSUBDATA						(VPG_ES20 +	ES20_BUFFERSUBDATA)
--#define	VPC_ES20CHECKFRAMEBUFFERSTATUS				(VPG_ES20 +	ES20_CHECKFRAMEBUFFERSTATUS)
--#define	VPC_ES20CLEAR								(VPG_ES20 +	ES20_CLEAR)
--#define	VPC_ES20CLEARCOLOR							(VPG_ES20 +	ES20_CLEARCOLOR)
--#define	VPC_ES20CLEARDEPTHF							(VPG_ES20 +	ES20_CLEARDEPTHF)
--#define	VPC_ES20CLEARSTENCIL						(VPG_ES20 +	ES20_CLEARSTENCIL)
--#define	VPC_ES20COLORMASK							(VPG_ES20 +	ES20_COLORMASK)
--#define	VPC_ES20COMPILESHADER						(VPG_ES20 +	ES20_COMPILESHADER)
--#define	VPC_ES20COMPRESSEDTEXIMAGE2D				(VPG_ES20 +	ES20_COMPRESSEDTEXIMAGE2D)
--#define	VPC_ES20COMPRESSEDTEXSUBIMAGE2D				(VPG_ES20 +	ES20_COMPRESSEDTEXSUBIMAGE2D)
--#define	VPC_ES20COPYTEXIMAGE2D						(VPG_ES20 +	ES20_COPYTEXIMAGE2D)
--#define	VPC_ES20COPYTEXSUBIMAGE2D					(VPG_ES20 +	ES20_COPYTEXSUBIMAGE2D)
--#define	VPC_ES20CREATEPROGRAM						(VPG_ES20 +	ES20_CREATEPROGRAM)
--#define	VPC_ES20CREATESHADER						(VPG_ES20 +	ES20_CREATESHADER)
--#define	VPC_ES20CULLFACE							(VPG_ES20 +	ES20_CULLFACE)
--#define	VPC_ES20DELETEBUFFERS						(VPG_ES20 +	ES20_DELETEBUFFERS)
--#define	VPC_ES20DELETEFRAMEBUFFERS					(VPG_ES20 +	ES20_DELETEFRAMEBUFFERS)
--#define	VPC_ES20DELETEPROGRAM						(VPG_ES20 +	ES20_DELETEPROGRAM)
--#define	VPC_ES20DELETERENDERBUFFERS					(VPG_ES20 +	ES20_DELETERENDERBUFFERS)
--#define	VPC_ES20DELETESHADER						(VPG_ES20 +	ES20_DELETESHADER)
--#define	VPC_ES20DELETETEXTURES						(VPG_ES20 +	ES20_DELETETEXTURES)
--#define	VPC_ES20DEPTHFUNC							(VPG_ES20 +	ES20_DEPTHFUNC)
--#define	VPC_ES20DEPTHMASK							(VPG_ES20 +	ES20_DEPTHMASK)
--#define	VPC_ES20DEPTHRANGEF							(VPG_ES20 +	ES20_DEPTHRANGEF)
--#define	VPC_ES20DETACHSHADER						(VPG_ES20 +	ES20_DETACHSHADER)
--#define	VPC_ES20DISABLE								(VPG_ES20 +	ES20_DISABLE)
--#define	VPC_ES20DISABLEVERTEXATTRIBARRAY			(VPG_ES20 +	ES20_DISABLEVERTEXATTRIBARRAY)
--#define	VPC_ES20DRAWARRAYS							(VPG_ES20 +	ES20_DRAWARRAYS)
--#define	VPC_ES20DRAWELEMENTS						(VPG_ES20 +	ES20_DRAWELEMENTS)
--#define	VPC_ES20ENABLE								(VPG_ES20 +	ES20_ENABLE)
--#define	VPC_ES20ENABLEVERTEXATTRIBARRAY				(VPG_ES20 +	ES20_ENABLEVERTEXATTRIBARRAY)
--#define	VPC_ES20FINISH								(VPG_ES20 +	ES20_FINISH)
--#define	VPC_ES20FLUSH								(VPG_ES20 +	ES20_FLUSH)
--#define	VPC_ES20FRAMEBUFFERRENDERBUFFER				(VPG_ES20 +	ES20_FRAMEBUFFERRENDERBUFFER)
--#define	VPC_ES20FRAMEBUFFERTEXTURE2D				(VPG_ES20 +	ES20_FRAMEBUFFERTEXTURE2D)
--#define	VPC_ES20FRONTFACE							(VPG_ES20 +	ES20_FRONTFACE)
--#define	VPC_ES20GENBUFFERS							(VPG_ES20 +	ES20_GENBUFFERS)
--#define	VPC_ES20GENERATEMIPMAP						(VPG_ES20 +	ES20_GENERATEMIPMAP)
--#define	VPC_ES20GENFRAMEBUFFERS						(VPG_ES20 +	ES20_GENFRAMEBUFFERS)
--#define	VPC_ES20GENRENDERBUFFERS					(VPG_ES20 +	ES20_GENRENDERBUFFERS)
--#define	VPC_ES20GENTEXTURES							(VPG_ES20 +	ES20_GENTEXTURES)
--#define	VPC_ES20GETACTIVEATTRIB						(VPG_ES20 +	ES20_GETACTIVEATTRIB)
--#define	VPC_ES20GETACTIVEUNIFORM					(VPG_ES20 +	ES20_GETACTIVEUNIFORM)
--#define	VPC_ES20GETATTACHEDSHADERS					(VPG_ES20 +	ES20_GETATTACHEDSHADERS)
--#define	VPC_ES20GETATTRIBLOCATION					(VPG_ES20 +	ES20_GETATTRIBLOCATION)
--#define	VPC_ES20GETBOOLEANV							(VPG_ES20 +	ES20_GETBOOLEANV)
--#define	VPC_ES20GETBUFFERPARAMETERIV				(VPG_ES20 +	ES20_GETBUFFERPARAMETERIV)
--#define	VPC_ES20GETERROR							(VPG_ES20 +	ES20_GETERROR)
--#define	VPC_ES20GETFLOATV							(VPG_ES20 +	ES20_GETFLOATV)
--#define	VPC_ES20GETFRAMEBUFFERATTACHMENTPARAMETERIV	(VPG_ES20 +	ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV)
--#define	VPC_ES20GETINTEGERV							(VPG_ES20 +	ES20_GETINTEGERV)
--#define	VPC_ES20GETPROGRAMIV						(VPG_ES20 +	ES20_GETPROGRAMIV)
--#define	VPC_ES20GETPROGRAMINFOLOG					(VPG_ES20 +	ES20_GETPROGRAMINFOLOG)
--#define	VPC_ES20GETRENDERBUFFERPARAMETERIV			(VPG_ES20 +	ES20_GETRENDERBUFFERPARAMETERIV)
--#define	VPC_ES20GETSHADERIV							(VPG_ES20 +	ES20_GETSHADERIV)
--#define	VPC_ES20GETSHADERINFOLOG					(VPG_ES20 +	ES20_GETSHADERINFOLOG)
--#define	VPC_ES20GETSHADERPRECISIONFORMAT			(VPG_ES20 +	ES20_GETSHADERPRECISIONFORMAT)
--#define	VPC_ES20GETSHADERSOURCE						(VPG_ES20 +	ES20_GETSHADERSOURCE)
--#define	VPC_ES20GETSTRING							(VPG_ES20 +	ES20_GETSTRING)
--#define	VPC_ES20GETTEXPARAMETERFV					(VPG_ES20 +	ES20_GETTEXPARAMETERFV)
--#define	VPC_ES20GETTEXPARAMETERIV					(VPG_ES20 +	ES20_GETTEXPARAMETERIV)
--#define	VPC_ES20GETUNIFORMFV						(VPG_ES20 +	ES20_GETUNIFORMFV)
--#define	VPC_ES20GETUNIFORMIV						(VPG_ES20 +	ES20_GETUNIFORMIV)
--#define	VPC_ES20GETUNIFORMLOCATION					(VPG_ES20 +	ES20_GETUNIFORMLOCATION)
--#define	VPC_ES20GETVERTEXATTRIBFV					(VPG_ES20 +	ES20_GETVERTEXATTRIBFV)
--#define	VPC_ES20GETVERTEXATTRIBIV					(VPG_ES20 +	ES20_GETVERTEXATTRIBIV)
--#define	VPC_ES20GETVERTEXATTRIBPOINTERV				(VPG_ES20 +	ES20_GETVERTEXATTRIBPOINTERV)
--#define	VPC_ES20HINT								(VPG_ES20 +	ES20_HINT)
--#define	VPC_ES20ISBUFFER							(VPG_ES20 +	ES20_ISBUFFER)
--#define	VPC_ES20ISENABLED							(VPG_ES20 +	ES20_ISENABLED)
--#define	VPC_ES20ISFRAMEBUFFER						(VPG_ES20 +	ES20_ISFRAMEBUFFER)
--#define	VPC_ES20ISPROGRAM							(VPG_ES20 +	ES20_ISPROGRAM)
--#define	VPC_ES20ISRENDERBUFFER						(VPG_ES20 +	ES20_ISRENDERBUFFER)
--#define	VPC_ES20ISSHADER							(VPG_ES20 +	ES20_ISSHADER)
--#define	VPC_ES20ISTEXTURE							(VPG_ES20 +	ES20_ISTEXTURE)
--#define	VPC_ES20LINEWIDTH							(VPG_ES20 +	ES20_LINEWIDTH)
--#define	VPC_ES20LINKPROGRAM							(VPG_ES20 +	ES20_LINKPROGRAM)
--#define	VPC_ES20PIXELSTOREI							(VPG_ES20 +	ES20_PIXELSTOREI)
--#define	VPC_ES20POLYGONOFFSET						(VPG_ES20 +	ES20_POLYGONOFFSET)
--#define	VPC_ES20READPIXELS							(VPG_ES20 +	ES20_READPIXELS)
--#define	VPC_ES20RELEASESHADERCOMPILER				(VPG_ES20 +	ES20_RELEASESHADERCOMPILER)
--#define	VPC_ES20RENDERBUFFERSTORAGE					(VPG_ES20 +	ES20_RENDERBUFFERSTORAGE)
--#define	VPC_ES20SAMPLECOVERAGE						(VPG_ES20 +	ES20_SAMPLECOVERAGE)
--#define	VPC_ES20SCISSOR								(VPG_ES20 +	ES20_SCISSOR)
--#define	VPC_ES20SHADERBINARY						(VPG_ES20 +	ES20_SHADERBINARY)
--#define	VPC_ES20SHADERSOURCE						(VPG_ES20 +	ES20_SHADERSOURCE)
--#define	VPC_ES20STENCILFUNC							(VPG_ES20 +	ES20_STENCILFUNC)
--#define	VPC_ES20STENCILFUNCSEPARATE					(VPG_ES20 +	ES20_STENCILFUNCSEPARATE)
--#define	VPC_ES20STENCILMASK							(VPG_ES20 +	ES20_STENCILMASK)
--#define	VPC_ES20STENCILMASKSEPARATE					(VPG_ES20 +	ES20_STENCILMASKSEPARATE)
--#define	VPC_ES20STENCILOP							(VPG_ES20 +	ES20_STENCILOP)
--#define	VPC_ES20STENCILOPSEPARATE					(VPG_ES20 +	ES20_STENCILOPSEPARATE)
--#define	VPC_ES20TEXIMAGE2D							(VPG_ES20 +	ES20_TEXIMAGE2D)
--#define	VPC_ES20TEXPARAMETERF						(VPG_ES20 +	ES20_TEXPARAMETERF)
--#define	VPC_ES20TEXPARAMETERFV						(VPG_ES20 +	ES20_TEXPARAMETERFV)
--#define	VPC_ES20TEXPARAMETERI						(VPG_ES20 +	ES20_TEXPARAMETERI)
--#define	VPC_ES20TEXPARAMETERIV						(VPG_ES20 +	ES20_TEXPARAMETERIV)
--#define	VPC_ES20TEXSUBIMAGE2D						(VPG_ES20 +	ES20_TEXSUBIMAGE2D)
--#define	VPC_ES20UNIFORM1F							(VPG_ES20 +	ES20_UNIFORM1F)
--#define	VPC_ES20UNIFORM1FV							(VPG_ES20 +	ES20_UNIFORM1FV)
--#define	VPC_ES20UNIFORM1I							(VPG_ES20 +	ES20_UNIFORM1I)
--#define	VPC_ES20UNIFORM1IV							(VPG_ES20 +	ES20_UNIFORM1IV)
--#define	VPC_ES20UNIFORM2F							(VPG_ES20 +	ES20_UNIFORM2F)
--#define	VPC_ES20UNIFORM2FV							(VPG_ES20 +	ES20_UNIFORM2FV)
--#define	VPC_ES20UNIFORM2I							(VPG_ES20 +	ES20_UNIFORM2I)
--#define	VPC_ES20UNIFORM2IV							(VPG_ES20 +	ES20_UNIFORM2IV)
--#define	VPC_ES20UNIFORM3F							(VPG_ES20 +	ES20_UNIFORM3F)
--#define	VPC_ES20UNIFORM3FV							(VPG_ES20 +	ES20_UNIFORM3FV)
--#define	VPC_ES20UNIFORM3I							(VPG_ES20 +	ES20_UNIFORM3I)
--#define	VPC_ES20UNIFORM3IV							(VPG_ES20 +	ES20_UNIFORM3IV)
--#define	VPC_ES20UNIFORM4F							(VPG_ES20 +	ES20_UNIFORM4F)
--#define	VPC_ES20UNIFORM4FV							(VPG_ES20 +	ES20_UNIFORM4FV)
--#define	VPC_ES20UNIFORM4I							(VPG_ES20 +	ES20_UNIFORM4I)
--#define	VPC_ES20UNIFORM4IV							(VPG_ES20 +	ES20_UNIFORM4IV)
--#define	VPC_ES20UNIFORMMATRIX2FV					(VPG_ES20 +	ES20_UNIFORMMATRIX2FV)
--#define	VPC_ES20UNIFORMMATRIX3FV					(VPG_ES20 +	ES20_UNIFORMMATRIX3FV)
--#define	VPC_ES20UNIFORMMATRIX4FV					(VPG_ES20 +	ES20_UNIFORMMATRIX4FV)
--#define	VPC_ES20USEPROGRAM							(VPG_ES20 +	ES20_USEPROGRAM)
--#define	VPC_ES20VALIDATEPROGRAM						(VPG_ES20 +	ES20_VALIDATEPROGRAM)
--#define	VPC_ES20VERTEXATTRIB1F						(VPG_ES20 +	ES20_VERTEXATTRIB1F)
--#define	VPC_ES20VERTEXATTRIB1FV						(VPG_ES20 +	ES20_VERTEXATTRIB1FV)
--#define	VPC_ES20VERTEXATTRIB2F						(VPG_ES20 +	ES20_VERTEXATTRIB2F)
--#define	VPC_ES20VERTEXATTRIB2FV						(VPG_ES20 +	ES20_VERTEXATTRIB2FV)
--#define	VPC_ES20VERTEXATTRIB3F						(VPG_ES20 +	ES20_VERTEXATTRIB3F)
--#define	VPC_ES20VERTEXATTRIB3FV						(VPG_ES20 +	ES20_VERTEXATTRIB3FV)
--#define	VPC_ES20VERTEXATTRIB4F						(VPG_ES20 +	ES20_VERTEXATTRIB4F)
--#define	VPC_ES20VERTEXATTRIB4FV						(VPG_ES20 +	ES20_VERTEXATTRIB4FV)
--#define	VPC_ES20VERTEXATTRIBPOINTER					(VPG_ES20 +	ES20_VERTEXATTRIBPOINTER)
--#define	VPC_ES20VIEWPORT							(VPG_ES20 +	ES20_VIEWPORT)
-+#define    VPC_ES11CALLS            (VPG_ES11 +    ES11_CALLS)
-+#define    VPC_ES11DRAWCALLS        (VPG_ES11 +    ES11_DRAWCALLS)
-+#define    VPC_ES11STATECHANGECALLS (VPG_ES11 +    ES11_STATECHANGECALLS)
-+#define    VPC_ES11POINTCOUNT       (VPG_ES11 +    ES11_POINTCOUNT)
-+#define    VPC_ES11LINECOUNT        (VPG_ES11 +    ES11_LINECOUNT)
-+#define    VPC_ES11TRIANGLECOUNT    (VPG_ES11 +    ES11_TRIANGLECOUNT)
-+
- /* OpenGL ES20 Statistics Counter IDs. */
--#define	VPC_ES20CALLS								(VPG_ES20 +	ES20_CALLS)
--#define	VPC_ES20DRAWCALLS							(VPG_ES20 +	ES20_DRAWCALLS)
--#define	VPC_ES20STATECHANGECALLS					(VPG_ES20 +	ES20_STATECHANGECALLS)
--#define	VPC_ES20POINTCOUNT							(VPG_ES20 +	ES20_POINTCOUNT)
--#define	VPC_ES20LINECOUNT							(VPG_ES20 +	ES20_LINECOUNT)
--#define	VPC_ES20TRIANGLECOUNT						(VPG_ES20 +	ES20_TRIANGLECOUNT)
--
--/* VG11 Counters. */
--#define	VPC_VG11APPENDPATH				(VPG_VG11 +	VG11_APPENDPATH)
--#define	VPC_VG11APPENDPATHDATA			(VPG_VG11 +	VG11_APPENDPATHDATA)
--#define	VPC_VG11CHILDIMAGE				(VPG_VG11 +	VG11_CHILDIMAGE)
--#define	VPC_VG11CLEAR					(VPG_VG11 +	VG11_CLEAR)
--#define	VPC_VG11CLEARGLYPH				(VPG_VG11 +	VG11_CLEARGLYPH)
--#define	VPC_VG11CLEARIMAGE				(VPG_VG11 +	VG11_CLEARIMAGE)
--#define	VPC_VG11CLEARPATH				(VPG_VG11 +	VG11_CLEARPATH)
--#define	VPC_VG11COLORMATRIX				(VPG_VG11 +	VG11_COLORMATRIX)
--#define	VPC_VG11CONVOLVE				(VPG_VG11 +	VG11_CONVOLVE)
--#define	VPC_VG11COPYIMAGE				(VPG_VG11 +	VG11_COPYIMAGE)
--#define	VPC_VG11COPYMASK				(VPG_VG11 +	VG11_COPYMASK)
--#define	VPC_VG11COPYPIXELS				(VPG_VG11 +	VG11_COPYPIXELS)
--#define	VPC_VG11CREATEFONT				(VPG_VG11 +	VG11_CREATEFONT)
--#define	VPC_VG11CREATEIMAGE				(VPG_VG11 +	VG11_CREATEIMAGE)
--#define	VPC_VG11CREATEMASKLAYER			(VPG_VG11 +	VG11_CREATEMASKLAYER)
--#define	VPC_VG11CREATEPAINT				(VPG_VG11 +	VG11_CREATEPAINT)
--#define	VPC_VG11CREATEPATH				(VPG_VG11 +	VG11_CREATEPATH)
--#define	VPC_VG11DESTROYFONT				(VPG_VG11 +	VG11_DESTROYFONT)
--#define	VPC_VG11DESTROYIMAGE			(VPG_VG11 +	VG11_DESTROYIMAGE)
--#define	VPC_VG11DESTROYMASKLAYER		(VPG_VG11 +	VG11_DESTROYMASKLAYER)
--#define	VPC_VG11DESTROYPAINT			(VPG_VG11 +	VG11_DESTROYPAINT)
--#define	VPC_VG11DESTROYPATH				(VPG_VG11 +	VG11_DESTROYPATH)
--#define	VPC_VG11DRAWGLYPH				(VPG_VG11 +	VG11_DRAWGLYPH)
--#define	VPC_VG11DRAWGLYPHS				(VPG_VG11 +	VG11_DRAWGLYPHS)
--#define	VPC_VG11DRAWIMAGE				(VPG_VG11 +	VG11_DRAWIMAGE)
--#define	VPC_VG11DRAWPATH				(VPG_VG11 +	VG11_DRAWPATH)
--#define	VPC_VG11FILLMASKLAYER			(VPG_VG11 +	VG11_FILLMASKLAYER)
--#define	VPC_VG11FINISH					(VPG_VG11 +	VG11_FINISH)
--#define	VPC_VG11FLUSH					(VPG_VG11 +	VG11_FLUSH)
--#define	VPC_VG11GAUSSIANBLUR			(VPG_VG11 +	VG11_GAUSSIANBLUR)
--#define	VPC_VG11GETCOLOR				(VPG_VG11 +	VG11_GETCOLOR)
--#define	VPC_VG11GETERROR				(VPG_VG11 +	VG11_GETERROR)
--#define	VPC_VG11GETF					(VPG_VG11 +	VG11_GETF)
--#define	VPC_VG11GETFV					(VPG_VG11 +	VG11_GETFV)
--#define	VPC_VG11GETI					(VPG_VG11 +	VG11_GETI)
--#define	VPC_VG11GETIMAGESUBDATA			(VPG_VG11 +	VG11_GETIMAGESUBDATA)
--#define	VPC_VG11GETIV					(VPG_VG11 +	VG11_GETIV)
--#define	VPC_VG11GETMATRIX				(VPG_VG11 +	VG11_GETMATRIX)
--#define	VPC_VG11GETPAINT				(VPG_VG11 +	VG11_GETPAINT)
--#define	VPC_VG11GETPARAMETERF			(VPG_VG11 +	VG11_GETPARAMETERF)
--#define	VPC_VG11GETPARAMETERFV			(VPG_VG11 +	VG11_GETPARAMETERFV)
--#define	VPC_VG11GETPARAMETERI			(VPG_VG11 +	VG11_GETPARAMETERI)
--#define	VPC_VG11GETPARAMETERIV			(VPG_VG11 +	VG11_GETPARAMETERIV)
--#define	VPC_VG11GETPARAMETERVECTORSIZE	(VPG_VG11 +	VG11_GETPARAMETERVECTORSIZE)
--#define	VPC_VG11GETPARENT				(VPG_VG11 +	VG11_GETPARENT)
--#define	VPC_VG11GETPATHCAPABILITIES		(VPG_VG11 +	VG11_GETPATHCAPABILITIES)
--#define	VPC_VG11GETPIXELS				(VPG_VG11 +	VG11_GETPIXELS)
--#define	VPC_VG11GETSTRING				(VPG_VG11 +	VG11_GETSTRING)
--#define	VPC_VG11GETVECTORSIZE			(VPG_VG11 +	VG11_GETVECTORSIZE)
--#define	VPC_VG11HARDWAREQUERY			(VPG_VG11 +	VG11_HARDWAREQUERY)
--#define	VPC_VG11IMAGESUBDATA			(VPG_VG11 +	VG11_IMAGESUBDATA)
--#define	VPC_VG11INTERPOLATEPATH			(VPG_VG11 +	VG11_INTERPOLATEPATH)
--#define	VPC_VG11LOADIDENTITY			(VPG_VG11 +	VG11_LOADIDENTITY)
--#define	VPC_VG11LOADMATRIX				(VPG_VG11 +	VG11_LOADMATRIX)
--#define	VPC_VG11LOOKUP					(VPG_VG11 +	VG11_LOOKUP)
--#define	VPC_VG11LOOKUPSINGLE			(VPG_VG11 +	VG11_LOOKUPSINGLE)
--#define	VPC_VG11MASK					(VPG_VG11 +	VG11_MASK)
--#define	VPC_VG11MODIFYPATHCOORDS		(VPG_VG11 +	VG11_MODIFYPATHCOORDS)
--#define	VPC_VG11MULTMATRIX				(VPG_VG11 +	VG11_MULTMATRIX)
--#define	VPC_VG11PAINTPATTERN			(VPG_VG11 +	VG11_PAINTPATTERN)
--#define	VPC_VG11PATHBOUNDS				(VPG_VG11 +	VG11_PATHBOUNDS)
--#define	VPC_VG11PATHLENGTH				(VPG_VG11 +	VG11_PATHLENGTH)
--#define	VPC_VG11PATHTRANSFORMEDBOUNDS	(VPG_VG11 +	VG11_PATHTRANSFORMEDBOUNDS)
--#define	VPC_VG11POINTALONGPATH			(VPG_VG11 +	VG11_POINTALONGPATH)
--#define	VPC_VG11READPIXELS				(VPG_VG11 +	VG11_READPIXELS)
--#define	VPC_VG11REMOVEPATHCAPABILITIES	(VPG_VG11 +	VG11_REMOVEPATHCAPABILITIES)
--#define	VPC_VG11RENDERTOMASK			(VPG_VG11 +	VG11_RENDERTOMASK)
--#define	VPC_VG11ROTATE					(VPG_VG11 +	VG11_ROTATE)
--#define	VPC_VG11SCALE					(VPG_VG11 +	VG11_SCALE)
--#define	VPC_VG11SEPARABLECONVOLVE		(VPG_VG11 +	VG11_SEPARABLECONVOLVE)
--#define	VPC_VG11SETCOLOR				(VPG_VG11 +	VG11_SETCOLOR)
--#define	VPC_VG11SETF					(VPG_VG11 +	VG11_SETF)
--#define	VPC_VG11SETFV					(VPG_VG11 +	VG11_SETFV)
--#define	VPC_VG11SETGLYPHTOIMAGE			(VPG_VG11 +	VG11_SETGLYPHTOIMAGE)
--#define	VPC_VG11SETGLYPHTOPATH			(VPG_VG11 +	VG11_SETGLYPHTOPATH)
--#define	VPC_VG11SETI					(VPG_VG11 +	VG11_SETI)
--#define	VPC_VG11SETIV					(VPG_VG11 +	VG11_SETIV)
--#define	VPC_VG11SETPAINT				(VPG_VG11 +	VG11_SETPAINT)
--#define	VPC_VG11SETPARAMETERF			(VPG_VG11 +	VG11_SETPARAMETERF)
--#define	VPC_VG11SETPARAMETERFV			(VPG_VG11 +	VG11_SETPARAMETERFV)
--#define	VPC_VG11SETPARAMETERI			(VPG_VG11 +	VG11_SETPARAMETERI)
--#define	VPC_VG11SETPARAMETERIV			(VPG_VG11 +	VG11_SETPARAMETERIV)
--#define	VPC_VG11SETPIXELS				(VPG_VG11 +	VG11_SETPIXELS)
--#define	VPC_VG11SHEAR					(VPG_VG11 +	VG11_SHEAR)
--#define	VPC_VG11TRANSFORMPATH			(VPG_VG11 +	VG11_TRANSFORMPATH)
--#define	VPC_VG11TRANSLATE				(VPG_VG11 +	VG11_TRANSLATE)
--#define	VPC_VG11WRITEPIXELS				(VPG_VG11 +	VG11_WRITEPIXELS)
-+#define    VPC_ES20CALLS            (VPG_ES20 +    ES20_CALLS)
-+#define    VPC_ES20DRAWCALLS        (VPG_ES20 +    ES20_DRAWCALLS)
-+#define    VPC_ES20STATECHANGECALLS (VPG_ES20 +    ES20_STATECHANGECALLS)
-+#define    VPC_ES20POINTCOUNT       (VPG_ES20 +    ES20_POINTCOUNT)
-+#define    VPC_ES20LINECOUNT        (VPG_ES20 +    ES20_LINECOUNT)
-+#define    VPC_ES20TRIANGLECOUNT    (VPG_ES20 +    ES20_TRIANGLECOUNT)
-+
- /* OpenVG Statistics Counter IDs. */
--#define	VPC_VG11CALLS					(VPG_VG11 +	VG11_CALLS)
--#define	VPC_VG11DRAWCALLS				(VPG_VG11 +	VG11_DRAWCALLS)
--#define	VPC_VG11STATECHANGECALLS		(VPG_VG11 +	VG11_STATECHANGECALLS)
--#define	VPC_VG11FILLCOUNT				(VPG_VG11 +	VG11_FILLCOUNT)
--#define	VPC_VG11STROKECOUNT				(VPG_VG11 +	VG11_STROKECOUNT)
-+#define    VPC_VG11CALLS            (VPG_VG11 +    VG11_CALLS)
-+#define    VPC_VG11DRAWCALLS        (VPG_VG11 +    VG11_DRAWCALLS)
-+#define    VPC_VG11STATECHANGECALLS (VPG_VG11 +    VG11_STATECHANGECALLS)
-+#define    VPC_VG11FILLCOUNT        (VPG_VG11 +    VG11_FILLCOUNT)
-+#define    VPC_VG11STROKECOUNT      (VPG_VG11 +    VG11_STROKECOUNT)
- 
- /* HAL Counters. */
- #define VPC_HALVERTBUFNEWBYTEALLOC      (VPG_HAL + HAL_VERTBUFNEWBYTEALLOC)
-@@ -1018,7 +248,7 @@ extern "C" {
- #define VPC_GPUREAD64BYTE               (VPG_GPU + GPU_READ64BYTE)
- #define VPC_GPUWRITE64BYTE              (VPG_GPU + GPU_WRITE64BYTE)
- #define VPC_GPUTOTALCYCLES              (VPG_GPU + GPU_TOTALCYCLES)
--#define VPC_GPUIDLECYCLES              (VPG_GPU + GPU_IDLECYCLES)
-+#define VPC_GPUIDLECYCLES               (VPG_GPU + GPU_IDLECYCLES)
- 
- /* HW: Shader Counters. */
- #define VPC_VSINSTCOUNT                 (VPG_VS + VS_INSTCOUNT)
-@@ -1026,9 +256,9 @@ extern "C" {
- #define VPC_VSTEXLDINSTCOUNT            (VPG_VS + VS_TEXLDINSTCOUNT)
- #define VPC_VSRENDEREDVERTCOUNT         (VPG_VS + VS_RENDEREDVERTCOUNT)
- /* HW: PS Count. */
--#define VPC_PSINSTCOUNT             	(VPG_PS + PS_INSTCOUNT)
--#define VPC_PSBRANCHINSTCOUNT       	(VPG_PS + PS_BRANCHINSTCOUNT)
--#define VPC_PSTEXLDINSTCOUNT        	(VPG_PS + PS_TEXLDINSTCOUNT)
-+#define VPC_PSINSTCOUNT                 (VPG_PS + PS_INSTCOUNT)
-+#define VPC_PSBRANCHINSTCOUNT           (VPG_PS + PS_BRANCHINSTCOUNT)
-+#define VPC_PSTEXLDINSTCOUNT            (VPG_PS + PS_TEXLDINSTCOUNT)
- #define VPC_PSRENDEREDPIXCOUNT          (VPG_PS + PS_RENDEREDPIXCOUNT)
- 
- 
-@@ -1071,7 +301,7 @@ extern "C" {
- #define VPC_PEDRAWNBYDEPTH              (VPG_PE + PE_DRAWNBYDEPTH)
- 
- /* HW: MC Counters. */
--#define VPC_MCREADREQ8BPIPE            	(VPG_MC + MC_READREQ8BPIPE)
-+#define VPC_MCREADREQ8BPIPE             (VPG_MC + MC_READREQ8BPIPE)
- #define VPC_MCREADREQ8BIP               (VPG_MC + MC_READREQ8BIP)
- #define VPC_MCWRITEREQ8BPIPE            (VPG_MC + MC_WRITEREQ8BPIPE)
- 
-@@ -1087,6 +317,7 @@ extern "C" {
- #define VPC_PVSATTRIBCOUNT          (VPG_PVS + PVS_ATTRIBCOUNT)
- #define VPC_PVSUNIFORMCOUNT         (VPG_PVS + PVS_UNIFORMCOUNT)
- #define VPC_PVSFUNCTIONCOUNT        (VPG_PVS + PVS_FUNCTIONCOUNT)
-+#define VPC_PVSSOURCE               (VPG_PVS + PVS_SOURCE)
- 
- #define VPC_PPSINSTRCOUNT           (VPG_PPS + PPS_INSTRCOUNT)
- #define VPC_PPSALUINSTRCOUNT        (VPG_PPS + PPS_ALUINSTRCOUNT)
-@@ -1094,7 +325,9 @@ extern "C" {
- #define VPC_PPSATTRIBCOUNT          (VPG_PPS + PPS_ATTRIBCOUNT)
- #define VPC_PPSUNIFORMCOUNT         (VPG_PPS + PPS_UNIFORMCOUNT)
- #define VPC_PPSFUNCTIONCOUNT        (VPG_PPS + PPS_FUNCTIONCOUNT)
-+#define VPC_PPSSOURCE               (VPG_PPS + PPS_SOURCE)
- 
-+#define VPC_PROGRAMHANDLE           (VPG_PROG + 1)
- 
- #define VPG_ES20_DRAW_NO  (VPG_ES20_DRAW + 1)
- #define VPG_ES11_DRAW_NO  (VPG_ES11_DRAW + 1)
-@@ -1118,8 +351,8 @@ typedef struct _gcsPROFILER_COUNTERS
- 
-     /* HW vairable counters. */
-     gctUINT32       gpuCyclesCounter;
--	gctUINT32       gpuTotalCyclesCounter;
--	gctUINT32       gpuIdleCyclesCounter;
-+    gctUINT32       gpuTotalCyclesCounter;
-+    gctUINT32       gpuIdleCyclesCounter;
-     gctUINT32       gpuTotalRead64BytesPerFrame;
-     gctUINT32       gpuTotalWrite64BytesPerFrame;
- 
-@@ -1158,7 +391,7 @@ typedef struct _gcsPROFILER_COUNTERS
-     gctUINT32       ra_total_primitive_count;
-     gctUINT32       ra_pipe_cache_miss_counter;
-     gctUINT32       ra_prefetch_cache_miss_counter;
--	gctUINT32       ra_eez_culled_counter;
-+    gctUINT32       ra_eez_culled_counter;
- 
-     /* TX */
-     gctUINT32       tx_total_bilinear_requests;
-@@ -1190,7 +423,7 @@ typedef struct _gcsPROFILER
-     gctBOOL         enableHal;
-     gctBOOL         enableHW;
-     gctBOOL         enableSH;
--	gctBOOL         isSyncMode;
-+    gctBOOL         isSyncMode;
- 
-     gctBOOL         useSocket;
-     gctINT          sockFd;
-@@ -1234,14 +467,17 @@ typedef struct _gcsPROFILER
-     gctUINT32       redundantStateChangeCalls;
- #endif
- 
--	gctUINT32       prevVSInstCount;
--	gctUINT32       prevVSBranchInstCount;
--	gctUINT32       prevVSTexInstCount;
--	gctUINT32       prevVSVertexCount;
--	gctUINT32       prevPSInstCount;
--	gctUINT32       prevPSBranchInstCount;
--	gctUINT32       prevPSTexInstCount;
--	gctUINT32       prevPSPixelCount;
-+    gctUINT32       prevVSInstCount;
-+    gctUINT32       prevVSBranchInstCount;
-+    gctUINT32       prevVSTexInstCount;
-+    gctUINT32       prevVSVertexCount;
-+    gctUINT32       prevPSInstCount;
-+    gctUINT32       prevPSBranchInstCount;
-+    gctUINT32       prevPSTexInstCount;
-+    gctUINT32       prevPSPixelCount;
-+
-+    char*           psSource;
-+    char*           vsSource;
- 
- }
- gcsPROFILER;
-@@ -1315,6 +551,18 @@ gcoPROFILER_Count(
- 	IN gctINT Value
- 	);
- 
-+gceSTATUS
-+gcoPROFILER_ShaderSourceFS(
-+    IN gcoHAL Hal,
-+    IN char* source
-+    );
-+
-+gceSTATUS
-+gcoPROFILER_ShaderSourceVS(
-+    IN gcoHAL Hal,
-+    IN char* source
-+    );
-+
- /* Profile input vertex shader. */
- gceSTATUS
- gcoPROFILER_ShaderVS(
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
-index bc4171e..6e4d830 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
-@@ -568,6 +568,23 @@ gco2D_MonoBlit(
- 	IN gceSURF_FORMAT DestFormat
- 	);
- 
-+gceSTATUS
-+gco2D_MonoBlitEx(
-+    IN gco2D        Engine,
-+    IN gctPOINTER   StreamBits,
-+    IN gctINT32     StreamStride,
-+    IN gctINT32     StreamWidth,
-+    IN gctINT32     StreamHeight,
-+    IN gctINT32     StreamX,
-+    IN gctINT32     StreamY,
-+    IN gctUINT32    FgColor,
-+    IN gctUINT32    BgColor,
-+    IN gcsRECT_PTR  SrcRect,
-+    IN gcsRECT_PTR  DstRect,
-+    IN gctUINT8     FgRop,
-+    IN gctUINT8     BgRop
-+    );
-+
- /* Set kernel size. */
- gceSTATUS
- gco2D_SetKernelSize(
-@@ -942,6 +959,15 @@ gco2D_SetSourceTileStatus(
-     );
- 
- gceSTATUS
-+gco2D_SetTargetTileStatus(
-+    IN gco2D Engine,
-+    IN gce2D_TILE_STATUS_CONFIG TileStatusConfig,
-+    IN gceSURF_FORMAT CompressedFormat,
-+    IN gctUINT32 ClearValue,
-+    IN gctUINT32 GpuAddress
-+    );
-+
-+gceSTATUS
- gco2D_QueryU32(
-     IN gco2D Engine,
-     IN gce2D_QUERY Item,
-@@ -955,6 +981,28 @@ gco2D_SetStateU32(
-     IN gctUINT32 Value
-     );
- 
-+gceSTATUS
-+gco2D_SetStateArrayI32(
-+    IN gco2D Engine,
-+    IN gce2D_STATE State,
-+    IN gctINT32_PTR Array,
-+    IN gctINT32 ArraySize
-+    );
-+
-+gceSTATUS
-+gco2D_SetStateArrayU32(
-+    IN gco2D Engine,
-+    IN gce2D_STATE State,
-+    IN gctUINT32_PTR Array,
-+    IN gctINT32 ArraySize
-+    );
-+
-+gceSTATUS
-+gco2D_SetTargetRect(
-+    IN gco2D Engine,
-+    IN gcsRECT_PTR Rect
-+    );
-+
- #ifdef __cplusplus
- }
- #endif
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
-index 5c0877d..14801aa 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
-@@ -128,6 +128,7 @@ typedef int                     gctBOOL;
- typedef gctBOOL *               gctBOOL_PTR;
- 
- typedef int                     gctINT;
-+typedef long                    gctLONG;
- typedef signed char             gctINT8;
- typedef signed short            gctINT16;
- typedef signed int              gctINT32;
-@@ -171,6 +172,7 @@ typedef void *                  gctFILE;
- typedef void *                  gctSIGNAL;
- typedef void *                  gctWINDOW;
- typedef void *                  gctIMAGE;
-+typedef void *                  gctSYNC_POINT;
- 
- typedef void *					gctSEMAPHORE;
- 
-@@ -941,12 +943,19 @@ typedef struct _gcsHAL_FRAME_INFO
-     OUT gctUINT                 readRequests[8];
-     OUT gctUINT                 writeRequests[8];
- 
-+    /* FE counters. */
-+    OUT gctUINT                 drawCount;
-+    OUT gctUINT                 vertexOutCount;
-+    OUT gctUINT                 vertexMissCount;
-+
-     /* 3D counters. */
-     OUT gctUINT                 vertexCount;
-     OUT gctUINT                 primitiveCount;
-     OUT gctUINT                 rejectedPrimitives;
-     OUT gctUINT                 culledPrimitives;
-     OUT gctUINT                 clippedPrimitives;
-+    OUT gctUINT                 droppedPrimitives;
-+    OUT gctUINT                 frustumClippedPrimitives;
-     OUT gctUINT                 outPrimitives;
-     OUT gctUINT                 inPrimitives;
-     OUT gctUINT                 culledQuadCount;
-@@ -964,18 +973,86 @@ typedef struct _gcsHAL_FRAME_INFO
-     OUT gctUINT                 shaderCycles;
-     OUT gctUINT                 vsInstructionCount;
-     OUT gctUINT                 vsTextureCount;
-+    OUT gctUINT                 vsBranchCount;
-+    OUT gctUINT                 vsVertices;
-     OUT gctUINT                 psInstructionCount;
-     OUT gctUINT                 psTextureCount;
-+    OUT gctUINT                 psBranchCount;
-+    OUT gctUINT                 psPixels;
- 
-     /* Texture counters. */
-     OUT gctUINT                 bilinearRequests;
-     OUT gctUINT                 trilinearRequests;
--    OUT gctUINT                 txBytes8;
-+    OUT gctUINT                 txBytes8[2];
-     OUT gctUINT                 txHitCount;
-     OUT gctUINT                 txMissCount;
- }
- gcsHAL_FRAME_INFO;
- 
-+typedef enum _gcePATCH_ID
-+{
-+    gcePATCH_UNKNOWN = 0xFFFFFFFF,
-+
-+    /* Benchmark list*/
-+    gcePATCH_GLB11 = 0x0,
-+    gcePATCH_GLB21,
-+    gcePATCH_GLB25,
-+    gcePATCH_GLB27,
-+
-+    gcePATCH_BM21,
-+    gcePATCH_MM,
-+    gcePATCH_MM06,
-+    gcePATCH_MM07,
-+    gcePATCH_QUADRANT,
-+    gcePATCH_ANTUTU,
-+    gcePATCH_SMARTBENCH,
-+    gcePATCH_JPCT,
-+    gcePATCH_NENAMARK,
-+    gcePATCH_NENAMARK2,
-+    gcePATCH_NEOCORE,
-+    gcePATCH_GLB,
-+    gcePATCH_GB,
-+    gcePATCH_RTESTVA,
-+    gcePATCH_BMX,
-+    gcePATCH_BMGUI,
-+
-+    /* Game list */
-+    gcePATCH_NBA2013,
-+    gcePATCH_BARDTALE,
-+    gcePATCH_BUSPARKING3D,
-+    gcePATCH_FISHBOODLE,
-+    gcePATCH_SUBWAYSURFER,
-+    gcePATCH_HIGHWAYDRIVER,
-+    gcePATCH_PREMIUM,
-+    gcePATCH_RACEILLEGAL,
-+    gcePATCH_BLABLA,
-+    gcePATCH_MEGARUN,
-+    gcePATCH_GALAXYONFIRE2,
-+    gcePATCH_GLOFTR3HM,
-+    gcePATCH_GLOFTSXHM,
-+    gcePATCH_GLOFTF3HM,
-+    gcePATCH_GLOFTGANG,
-+    gcePATCH_XRUNNER,
-+    gcePATCH_WP,
-+    gcePATCH_DEVIL,
-+    gcePATCH_HOLYARCH,
-+    gcePATCH_MUSE,
-+    gcePATCH_SG,
-+    gcePATCH_SIEGECRAFT,
-+    gcePATCH_CARCHALLENGE,
-+    gcePATCH_HEROESCALL,
-+    gcePATCH_MONOPOLY,
-+    gcePATCH_CTGL20,
-+    gcePATCH_FIREFOX,
-+    gcePATCH_CHORME,
-+    gcePATCH_DUOKANTV,
-+    gcePATCH_TESTAPP,
-+
-+    /* Count enum*/
-+    gcePATCH_COUNT,
-+}
-+gcePATCH_ID;
-+
- #if gcdLINK_QUEUE_SIZE
- typedef struct _gckLINKDATA * gckLINKDATA;
- struct _gckLINKDATA
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
-index 03cb4d6..2eab666 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
-@@ -28,7 +28,7 @@
- 
- #define gcvVERSION_PATCH        9
- 
--#define gcvVERSION_BUILD     6622
-+#define gcvVERSION_BUILD     9754
- 
- #define gcvVERSION_DATE      __DATE__
- 
-diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
-index 4d48bd5..b029428 100644
---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
-@@ -25,7 +25,9 @@
- #include <linux/mm.h>
- #include <linux/mman.h>
- #include <linux/slab.h>
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
- #include <mach/hardware.h>
-+#endif
- #include <linux/pm_runtime.h>
- 
- #define _GC_OBJ_ZONE    gcvZONE_DEVICE
-@@ -305,6 +307,7 @@ gckGALDEVICE_Construct(
-     IN gctUINT LogFileSize,
-     IN struct device *pdev,
-     IN gctINT PowerManagement,
-+    IN gctINT GpuProfiler,
-     OUT gckGALDEVICE *Device
-     )
- {
-@@ -369,6 +372,10 @@ gckGALDEVICE_Construct(
- #if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
-     /*get gpu regulator*/
-     device->gpu_regulator = regulator_get(pdev, "cpu_vddgpu");
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+    device->gpu_regulator = regulator_get(pdev, "vddpu");
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-     if (IS_ERR(device->gpu_regulator)) {
- 	gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
- 		"%s(%d): Failed to get gpu regulator  %s/%s \n",
-@@ -541,6 +548,10 @@ gckGALDEVICE_Construct(
-             device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
-             ));
- 
-+        gcmkONERROR(gckHARDWARE_SetGpuProfiler(
-+            device->kernels[gcvCORE_MAJOR]->hardware, GpuProfiler
-+            ));
-+
- #if COMMAND_PROCESSOR_VERSION == 1
-         /* Start the command queue. */
-         gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_MAJOR]->command));
-@@ -599,6 +610,7 @@ gckGALDEVICE_Construct(
-             device->kernels[gcvCORE_2D]->hardware, PowerManagement
-             ));
- 
-+
- #if COMMAND_PROCESSOR_VERSION == 1
-         /* Start the command queue. */
-         gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_2D]->command));
-@@ -635,6 +647,7 @@ gckGALDEVICE_Construct(
-             device->kernels[gcvCORE_VG]->vg->hardware,
-             PowerManagement
-             ));
-+
- #endif
-     }
-     else
-@@ -849,6 +862,7 @@ gckGALDEVICE_Construct(
-             }
-             else
-             {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
-                 mem_region = request_mem_region(
-                     ContiguousBase, ContiguousSize, "galcore managed memory"
-                     );
-@@ -864,6 +878,7 @@ gckGALDEVICE_Construct(
- 
-                     gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
-                 }
-+#endif
- 
-                 device->requestedContiguousBase  = ContiguousBase;
-                 device->requestedContiguousSize  = ContiguousSize;
-@@ -1107,7 +1122,7 @@ gckGALDEVICE_Destroy(
-             pm_runtime_disable(Device->pmdev);
- #endif
- 
--#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-         if (Device->gpu_regulator) {
-            regulator_put(Device->gpu_regulator);
-            Device->gpu_regulator = NULL;
-diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
-index dde4f03..c51432f 100644
---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
-@@ -26,6 +26,15 @@
- ******************************* gckGALDEVICE Structure *******************************
- \******************************************************************************/
- 
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
-+struct contiguous_mem_pool {
-+	struct dma_attrs attrs;
-+	dma_addr_t phys;
-+	void *virt;
-+	size_t size;
-+};
-+#endif
-+
- typedef struct _gckGALDEVICE
- {
-     /* Objects. */
-@@ -91,12 +100,16 @@ typedef struct _gckGALDEVICE
-     struct clk         *clk_2d_axi;