[meta-freescale] [meta-fsl-arm PATCH v2 3/3] linux-imx (3.0.35): Drop recipe from base BSP
Daiane Angolini
daiane.angolini at freescale.com
Thu Mar 13 07:10:38 PDT 2014
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 at 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 at 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 at trippelsdorf.de>
> -Cc: Peter Zijlstra <a.p.zijlstra at chello.nl>
> -Link: http://lkml.kernel.org/r/20120404084527.GA294@x4
> -Signed-off-by: Ingo Molnar <mingo at 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 at 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 at parrot.com>
> -Reviewed-by: Nicolas Pitre <nico at linaro.org>
> -Signed-off-by: Dirk Behme <dirk.behme at gmail.com>
> -Signed-off-by: Russell King <rmk+kernel at 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 at 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 at linaro.org>
> -Tested-by: Alexander Holler <holler at ahsoftware.de>
> -Signed-off-by: Russell King <rmk+kernel at 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 at 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 at 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 at 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 at pelagicore.com>
> -Signed-off-by: Mahesh Mahadevan <Mahesh.Mahadevan at 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 at 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 at 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 at 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 at 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 at 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 at 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(¤tTime));
> --
> -- 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(¤tTime));
> -+
> -+ 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(¤tTime));
> -- 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(¤tTime));
> -+
> -+ 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(¤t->mm->mmap_sem);
> -+
> - result = get_user_pages(current,
> - current->mm,
> - memory & PAGE_MASK,
> -@@ -5345,105 +5462,127 @@ OnError:
> - pages,
> - gcvNULL
> - );
> -+
> - up_read(¤t->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 at 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 at 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 at 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 at 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
More information about the meta-freescale
mailing list