[meta-freescale] [meta-fsl-arm-extra][PATCH v2 3/3] cgtqmx6: Update Congatec-QMX6 Linux/kernel support

Alex de Cabo alejandro.de-cabo-garcia at congatec.com
Wed Aug 20 01:58:17 PDT 2014


Provides the recipes and patches to use 3.0.35 or 3.10.17 Linux/kernel
versions.

Signed-off-by: Alex de Cabo <alejandro.de-cabo-garcia at congatec.com>
---
 ...0-gpu-viante-4.6.9p13-kernel-part-integra.patch | 6261 ++++++++++++++++++++
 recipes-kernel/linux/linux-qmx6-3.0.35/defconfig   | 2745 +++++++++
 ...m-vivante-Add-00-sufix-in-returned-bus-Id.patch |   31 +
 ...-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch |  143 +
 recipes-kernel/linux/linux-qmx6-3.10.17/defconfig  |  360 ++
 recipes-kernel/linux/linux-qmx6_3.0.35.bb          |   24 +
 recipes-kernel/linux/linux-qmx6_3.10.17.bb         |   21 +
 7 files changed, 9585 insertions(+)
 create mode 100644 recipes-kernel/linux/linux-qmx6-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
 create mode 100644 recipes-kernel/linux/linux-qmx6-3.0.35/defconfig
 create mode 100644 recipes-kernel/linux/linux-qmx6-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
 create mode 100644 recipes-kernel/linux/linux-qmx6-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
 create mode 100644 recipes-kernel/linux/linux-qmx6-3.10.17/defconfig
 create mode 100644 recipes-kernel/linux/linux-qmx6_3.0.35.bb
 create mode 100644 recipes-kernel/linux/linux-qmx6_3.10.17.bb

diff --git a/recipes-kernel/linux/linux-qmx6-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch b/recipes-kernel/linux/linux-qmx6-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
new file mode 100644
index 0000000..1e039fd
--- /dev/null
+++ b/recipes-kernel/linux/linux-qmx6-3.0.35/ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch
@@ -0,0 +1,6261 @@
+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(&currentTime));
+-
+-            gcmkVERIFY_OK(
+-                gckOS_TicksAfter(currentTime, hardware->powerOffTime, &isAfter));
+-
+-            if (isAfter)
+-            {
+-                gcmkVERIFY_OK(gckVGHARDWARE_SetPowerManagementState(
+-                    hardware, gcvPOWER_OFF_BROADCAST));
+-            }
+-
+-            gcmkVERIFY_OK(gckOS_Delay(hardware->os, 200));
+-
+-            gcmkVERIFY_OK(gckVGHARDWARE_QueryPowerManagementState(
+-                hardware, &state));
+-
+-        } while (state == gcvPOWER_IDLE);
+-    }
+-    return 0;
++    gckVGHARDWARE hardware = (gckVGHARDWARE)Data;
++    gcmkVERIFY_OK(
++        gckVGHARDWARE_SetPowerManagementState(hardware, gcvPOWER_OFF_TIMEOUT));
+ }
++#endif
+ 
+ /******************************************************************************\
+ ****************************** gckVGHARDWARE API code *****************************
+@@ -338,15 +305,21 @@ gckVGHARDWARE_Construct(
+         hardware->chipMinorFeatures2 = chipMinorFeatures2;
+ 
+         hardware->powerMutex            = gcvNULL;
+-        hardware->idleSignal            = gcvNULL;
+         hardware->chipPowerState        = gcvPOWER_ON;
+         hardware->chipPowerStateGlobal  = gcvPOWER_ON;
+         hardware->clockState            = gcvTRUE;
+         hardware->powerState            = gcvTRUE;
+-        hardware->powerOffTimeout       = gcdPOWEROFF_TIMEOUT;
++
+         hardware->powerOffTime          = 0;
+-        hardware->timeIdleThread        = gcvNULL;
+-        hardware->killThread            = gcvFALSE;
++#if gcdPOWEROFF_TIMEOUT
++        hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT;
++
++        gcmkVERIFY_OK(gckOS_CreateTimer(Os,
++                                        _VGPowerTimerFunction,
++                                        (gctPOINTER)hardware,
++                                        &hardware->powerOffTimer));
++#endif
++
+         /* Determine whether FE 2.0 is present. */
+         hardware->fe20 = ((((gctUINT32) (hardware->chipFeatures)) >> (0 ? 28:28) & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))) == (0x1  & ((gctUINT32) ((((1 ? 28:28) - (0 ? 28:28) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 28:28) - (0 ? 28:28) + 1)))))));
+ 
+@@ -365,18 +338,10 @@ gckVGHARDWARE_Construct(
+         gcmkVERIFY_OK(gckVGHARDWARE_SetFastClear(hardware, -1));
+ 
+         gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex));
+-        gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvFALSE, &hardware->idleSignal));
+ 
+         /* Enable power management by default. */
+         hardware->powerManagement = gcvTRUE;
+ 
+-        gcmkERR_BREAK(gckOS_StartThread(
+-            hardware->os,
+-            _TimeIdleThread,
+-            hardware,
+-            &hardware->timeIdleThread
+-            ));
+-
+         /* Return pointer to the gckVGHARDWARE object. */
+         *Hardware = hardware;
+ 
+@@ -386,6 +351,14 @@ gckVGHARDWARE_Construct(
+     }
+     while (gcvFALSE);
+ 
++#if gcdPOWEROFF_TIMEOUT
++        if (hardware->powerOffTimer != gcvNULL)
++        {
++            gcmkVERIFY_OK(gckOS_StopTimer(Os, hardware->powerOffTimer));
++            gcmkVERIFY_OK(gckOS_DestroyTimer(Os, hardware->powerOffTimer));
++        }
++#endif
++
+     if (hardware->pageTableDirty != gcvNULL)
+     {
+         gcmkVERIFY_OK(gckOS_AtomDestroy(Os, hardware->pageTableDirty));
+@@ -428,10 +401,6 @@ gckVGHARDWARE_Destroy(
+     /* Verify the arguments. */
+     gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
+ 
+-    Hardware->killThread  = gcvTRUE;
+-    gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE));
+-    gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread));
+-
+     /* Mark the object as unknown. */
+     Hardware->object.type = gcvOBJ_UNKNOWN;
+ 
+@@ -441,11 +410,10 @@ gckVGHARDWARE_Destroy(
+             Hardware->os, Hardware->powerMutex));
+     }
+ 
+-    if (Hardware->idleSignal != gcvNULL)
+-    {
+-        gcmkVERIFY_OK(gckOS_DestroySignal(
+-            Hardware->os, Hardware->idleSignal));
+-    }
++#if gcdPOWEROFF_TIMEOUT
++    gcmkVERIFY_OK(gckOS_StopTimer(Hardware->os, Hardware->powerOffTimer));
++    gcmkVERIFY_OK(gckOS_DestroyTimer(Hardware->os, Hardware->powerOffTimer));
++#endif
+ 
+     if (Hardware->pageTableDirty != gcvNULL)
+     {
+@@ -1510,11 +1478,15 @@ gckVGHARDWARE_SetPowerManagementState(
+     gctBOOL commitMutex     = gcvFALSE;
+     gctBOOL mutexAcquired   = gcvFALSE;
+ 
++#if gcdPOWEROFF_TIMEOUT
++    gctBOOL timeout = gcvFALSE;
++    gctBOOL isAfter = gcvFALSE;
++    gctUINT32 currentTime;
++#endif
++
+     gctBOOL broadcast = gcvFALSE;
+     gctUINT32 process, thread;
+     gctBOOL global = gcvFALSE;
+-    gctUINT32   currentTime;
+-
+ 
+ #if gcdENABLE_PROFILING
+     gctUINT64 time, freq, mutexTime, onTime, stallTime, stopTime, delayTime,
+@@ -1661,6 +1633,16 @@ gckVGHARDWARE_SetPowerManagementState(
+         global = gcvTRUE;
+         break;
+ 
++#if gcdPOWEROFF_TIMEOUT
++    case gcvPOWER_OFF_TIMEOUT:
++        /* Convert to OFF and note we are inside broadcast. */
++        State     = gcvPOWER_OFF;
++        broadcast = gcvTRUE;
++        /* Check time out */
++        timeout = gcvTRUE;
++        break;
++#endif
++
+     default:
+         break;
+     }
+@@ -1719,6 +1701,31 @@ gckVGHARDWARE_SetPowerManagementState(
+     flag  = flags[Hardware->chipPowerState][State];
+     /*clock = clocks[State];*/
+ 
++#if gcdPOWEROFF_TIMEOUT
++    if (timeout)
++    {
++        gcmkONERROR(gckOS_GetTicks(&currentTime));
++
++        gcmkONERROR(
++            gckOS_TicksAfter(Hardware->powerOffTime, currentTime, &isAfter));
++
++        /* powerOffTime is pushed forward, give up.*/
++        if (isAfter
++        /* Expect a transition start from IDLE. */
++        ||  (Hardware->chipPowerState == gcvPOWER_ON)
++        ||  (Hardware->chipPowerState == gcvPOWER_OFF)
++        )
++        {
++            /* Release the power mutex. */
++            gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
++
++            /* No need to do anything. */
++            gcmkFOOTER_NO();
++            return gcvSTATUS_OK;
++        }
++    }
++#endif
++
+     if (flag == 0)
+     {
+         /* Release the power mutex. */
+@@ -1742,6 +1749,18 @@ gckVGHARDWARE_SetPowerManagementState(
+             return gcvSTATUS_OK;
+         }
+     }
++    else
++    {
++        if (flag & gcvPOWER_FLAG_ACQUIRE)
++        {
++            /* Acquire the power management semaphore. */
++            gcmkONERROR(gckOS_AcquireSemaphore(os, command->powerSemaphore));
++            acquired = gcvTRUE;
++
++            /* avoid acquiring again. */
++            flag &= ~gcvPOWER_FLAG_ACQUIRE;
++        }
++    }
+ 
+     if (flag & (gcvPOWER_FLAG_INITIALIZE | gcvPOWER_FLAG_CLOCK_ON))
+     {
+@@ -1858,14 +1877,6 @@ gckVGHARDWARE_SetPowerManagementState(
+         Hardware->chipPowerStateGlobal = State;
+     }
+ 
+-    if (State == gcvPOWER_IDLE)
+-    {
+-        gcmkVERIFY_OK(gckOS_Signal(os, Hardware->idleSignal, gcvTRUE));
+-    }
+-        /* Reset power off time */
+-    gcmkVERIFY_OK(gckOS_GetTicks(&currentTime));
+-    Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
+-
+     if (commitMutex)
+     {
+         /* Acquire the mutex. */
+@@ -1875,6 +1886,28 @@ gckVGHARDWARE_SetPowerManagementState(
+             ));
+     }
+ 
++#if gcdPOWEROFF_TIMEOUT
++    /* Reset power off time */
++    gcmkONERROR(gckOS_GetTicks(&currentTime));
++
++    Hardware->powerOffTime = currentTime + Hardware->powerOffTimeout;
++
++    if (State == gcvPOWER_IDLE)
++    {
++        /* Start a timer to power off GPU when GPU enters IDLE or SUSPEND. */
++        gcmkVERIFY_OK(gckOS_StartTimer(os,
++                                       Hardware->powerOffTimer,
++                                       Hardware->powerOffTimeout));
++    }
++    else
++    {
++        gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE, "Cancel powerOfftimer");
++
++        /* Cancel running timer when GPU enters ON or OFF. */
++        gcmkVERIFY_OK(gckOS_StopTimer(os, Hardware->powerOffTimer));
++    }
++#endif
++
+     /* Release the power mutex. */
+     gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerMutex));
+ 
+diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
+index 16b81ae..73d4594 100644
+--- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
++++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h
+@@ -53,7 +53,6 @@ struct _gckVGHARDWARE
+     gctBOOL                     clockState;
+     gctBOOL                     powerState;
+     gctPOINTER                  powerMutex;
+-    gctSIGNAL                   idleSignal;
+     gctUINT32                   powerProcess;
+     gctUINT32                   powerThread;
+     gceCHIPPOWERSTATE           chipPowerState;
+@@ -61,11 +60,13 @@ struct _gckVGHARDWARE
+     gctISRMANAGERFUNC           startIsr;
+     gctISRMANAGERFUNC           stopIsr;
+     gctPOINTER                  isrContext;
++    gctPOINTER                  pageTableDirty;
++
++#if gcdPOWEROFF_TIMEOUT
+     gctUINT32                   powerOffTime;
+     gctUINT32                   powerOffTimeout;
+-    gctTHREAD                   timeIdleThread;
+-    gctBOOL                     killThread;
+-    gctPOINTER                  pageTableDirty;
++    gctPOINTER                  powerOffTimer;
++#endif
+ 
+     gctBOOL                     powerManagement;
+ };
+diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
+index 24003e7..42e6915 100644
+--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
++++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.c
+@@ -181,7 +181,8 @@ _FlushPipe(
+                 ?   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 3:3) - (0 ? 3:3) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3)))
+                 :   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))
+                   | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 1:1) - (0 ? 1:1) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1)))
+-                  | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
++                  | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))
++                  | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
+ 
+         /* Semaphore from FE to PE. */
+         *buffer++
+@@ -620,7 +621,10 @@ _InitializeContextBuffer(
+         index += _State(Context, index, 0x10180 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+         index += _State(Context, index, 0x10200 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+         index += _State(Context, index, 0x10280 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+-        index += _State(Context, index, 0x02C00 >> 2, 0x00000000, 256, gcvFALSE, gcvFALSE);
++        for (i = 0; i < 256 / 16; i += 1)
++        {
++            index += _State(Context, index, (0x02C00 >> 2) + i * 16, 0x00000000, 14, gcvFALSE, gcvFALSE);
++        }
+         index += _State(Context, index, 0x10300 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+         index += _State(Context, index, 0x10380 >> 2, 0x00321000, 32, gcvFALSE, gcvFALSE);
+         index += _State(Context, index, 0x10400 >> 2, 0x00000000, 32, gcvFALSE, gcvFALSE);
+diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
+index 7554045..5d2c7c7 100644
+--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
++++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
+@@ -134,6 +134,19 @@ struct _gckCONTEXT
+ #if gcdSECURE_USER
+     gctBOOL_PTR                 hint;
+ #endif
++
++#if VIVANTE_PROFILER_CONTEXT
++    gcsPROFILER_COUNTERS        latestProfiler;
++    gcsPROFILER_COUNTERS        histroyProfiler;
++    gctUINT32                   prevVSInstCount;
++    gctUINT32                   prevVSBranchInstCount;
++    gctUINT32                   prevVSTexInstCount;
++    gctUINT32                   prevVSVertexCount;
++    gctUINT32                   prevPSInstCount;
++    gctUINT32                   prevPSBranchInstCount;
++    gctUINT32                   prevPSTexInstCount;
++    gctUINT32                   prevPSPixelCount;
++#endif
+ };
+ 
+ #ifdef __cplusplus
+diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
+index 00f3839..e02dc23 100644
+--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
++++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
+@@ -21,6 +21,9 @@
+ 
+ #include "gc_hal.h"
+ #include "gc_hal_kernel.h"
++#if VIVANTE_PROFILER_CONTEXT
++#include "gc_hal_kernel_context.h"
++#endif
+ 
+ #define _GC_OBJ_ZONE    gcvZONE_HARDWARE
+ 
+@@ -69,6 +72,7 @@ _IdentifyHardware(
+     gctUINT32 numConstants = 0;
+     gctUINT32 bufferSize = 0;
+     gctUINT32 varyingsCount = 0;
++    gctBOOL useHZ;
+ 
+     gcmkHEADER_ARG("Os=0x%x", Os);
+ 
+@@ -209,6 +213,15 @@ _IdentifyHardware(
+                                      0x00088,
+                                      &Identity->chipMinorFeatures3));
+ 
++            /*The BG2 chip has no compression supertiled, and the bit of GCMinorFeature3BugFixes15 is n/a*/
++            if(Identity->chipModel == gcv1000 && Identity->chipRevision == 0x5036)
++            {
++                Identity->chipMinorFeatures3
++                    = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
++                Identity->chipMinorFeatures3
++                    = ((((gctUINT32) (Identity->chipMinorFeatures3)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 27:27) - (0 ? 27:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 27:27) - (0 ? 27:27) + 1))))))) << (0 ? 27:27)));
++            }
++
+             /* Read chip minor featuress register #4. */
+             gcmkONERROR(
+                 gckOS_ReadRegisterEx(Os, Core,
+@@ -244,14 +257,31 @@ _IdentifyHardware(
+     if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
+                                            || (Identity->chipRevision == 0x5036)
+                                            || (Identity->chipRevision == 0x5037)))
+-	 || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612)))
++	 || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612))
++     || ((Identity->chipModel == gcv860) && (Identity->chipRevision == 0x4647)))
+     {
+         Identity->superTileMode = 1;
+     }
+ 
++    if (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5245)
++    {
++        useHZ = ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 26:26) & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 26:26) - (0 ? 26:26) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 26:26) - (0 ? 26:26) + 1)))))))
++             || ((((gctUINT32) (Identity->chipMinorFeatures3)) >> (0 ? 8:8) & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 8:8) - (0 ? 8:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 8:8) - (0 ? 8:8) + 1)))))));
++    }
++    else
++    {
++        useHZ = gcvFALSE;
++    }
+ 
+-	/* Disable HZ when EZ is present for older chips. */
+-	if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
++    if (useHZ)
++    {
++        /* Disable EZ. */
++        Identity->chipFeatures
++            = ((((gctUINT32) (Identity->chipFeatures)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)));
++    }
++
++    /* Disable HZ when EZ is present for older chips. */
++    else if (!((((gctUINT32) (Identity->chipFeatures)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))))
+     {
+         /* Disable HIERARCHICAL_Z. */
+         Identity->chipMinorFeatures
+@@ -470,6 +500,15 @@ _IdentifyHardware(
+          Identity->varyingsCount = 8;
+      }
+ 
++     /* For some cores, it consumes two varying for position, so the max varying vectors should minus one. */
++     if ((Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5222) ||
++         (Identity->chipModel == gcv4000 && Identity->chipRevision == 0x5208) ||
++         ((Identity->chipModel == gcv2100 || Identity->chipModel == gcv2000) && Identity->chipRevision == 0x5108) ||
++         (Identity->chipModel == gcv880 && (Identity->chipRevision == 0x5107 || Identity->chipRevision == 0x5106)))
++     {
++         Identity->varyingsCount -= 1;
++     }
++
+     /* Success. */
+     gcmkFOOTER();
+     return gcvSTATUS_OK;
+@@ -535,9 +574,9 @@ _DumpDebugRegisters(
+     IN gcsiDEBUG_REGISTERS_PTR Descriptor
+     )
+ {
+-    gceSTATUS status;
++    gceSTATUS status = gcvSTATUS_OK;
+     gctUINT32 select;
+-    gctUINT32 data;
++    gctUINT32 data = 0;
+     gctUINT i;
+ 
+     gcmkHEADER_ARG("Os=0x%X Descriptor=0x%X", Os, Descriptor);
+@@ -643,6 +682,42 @@ OnError:
+     return status;
+ }
+ 
++gceSTATUS
++_FlushCache(
++    gckHARDWARE Hardware,
++    gckCOMMAND Command
++    )
++{
++    gceSTATUS status;
++    gctSIZE_T bytes, requested;
++    gctPOINTER buffer;
++
++    /* Get the size of the flush command. */
++    gcmkONERROR(gckHARDWARE_Flush(Hardware,
++                                  gcvFLUSH_ALL,
++                                  gcvNULL,
++                                  &requested));
++
++    /* Reserve space in the command queue. */
++    gcmkONERROR(gckCOMMAND_Reserve(Command,
++                                   requested,
++                                   &buffer,
++                                   &bytes));
++
++    /* Append a flush. */
++    gcmkONERROR(gckHARDWARE_Flush(
++        Hardware, gcvFLUSH_ALL, buffer, &bytes
++        ));
++
++    /* Execute the command queue. */
++    gcmkONERROR(gckCOMMAND_Execute(Command, requested));
++
++    return gcvSTATUS_OK;
++
++OnError:
++    return status;
++}
++
+ /******************************************************************************\
+ ****************************** gckHARDWARE API code *****************************
+ \******************************************************************************/
+@@ -809,6 +884,9 @@ gckHARDWARE_Construct(
+     /* Enable power management by default. */
+     hardware->powerManagement = gcvTRUE;
+ 
++    /* Disable profiler by default */
++    hardware->gpuProfiler = gcvFALSE;
++
+     /* Return pointer to the gckHARDWARE object. */
+     *Hardware = hardware;
+ 
+@@ -1113,6 +1191,31 @@ gckHARDWARE_InitializeHardware(
+                                   ((((gctUINT32) (0x01590880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23)))));
+     }
+ 
++    if ((gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) == gcvFALSE)
++     || (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI2) && (Hardware->identity.chipRevision < 0x5422))
++    )
++    {
++        gctUINT32 data;
++
++        gcmkONERROR(
++            gckOS_ReadRegisterEx(Hardware->os,
++                                 Hardware->core,
++                                 Hardware->powerBaseAddress
++                                 + 0x00104,
++                                 &data));
++
++
++        data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) << (0 ? 15:15)));
++
++
++        gcmkONERROR(
++            gckOS_WriteRegisterEx(Hardware->os,
++                                  Hardware->core,
++                                  Hardware->powerBaseAddress
++                                  + 0x00104,
++                                  data));
++    }
++
+     /* Special workaround for this core
+     ** Make sure FE and TX are on different buses */
+     if ((Hardware->identity.chipModel == gcv2000)
+@@ -1152,7 +1255,9 @@ gckHARDWARE_InitializeHardware(
+     }
+ 
+     if (Hardware->identity.chipModel >= gcv400
+-    &&  Hardware->identity.chipModel != gcv420)
++    &&  Hardware->identity.chipModel != gcv420
++    &&  (((((gctUINT32) (Hardware->identity.chipMinorFeatures3)) >> (0 ? 15:15) & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 15:15) - (0 ? 15:15) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:15) - (0 ? 15:15) + 1))))))) != gcvTRUE)
++    )
+     {
+ 		gctUINT32 data;
+ 
+@@ -2883,35 +2988,44 @@ gckHARDWARE_QueryShaderCaps(
+     OUT gctUINT * Varyings
+     )
+ {
++    gctUINT32 vsConstMax;
++    gctUINT32 psConstMax;
++
+     gcmkHEADER_ARG("Hardware=0x%x VertexUniforms=0x%x "
+                    "FragmentUniforms=0x%x Varyings=0x%x",
+                    Hardware, VertexUniforms,
+                    FragmentUniforms, Varyings);
+ 
++    if ((Hardware->identity.chipModel == gcv2000)
++     && (Hardware->identity.chipRevision == 0x5118))
++    {
++        vsConstMax   = 256;
++        psConstMax   = 64;
++    }
++    else if (Hardware->identity.numConstants > 256)
++    {
++        vsConstMax   = 256;
++        psConstMax   = 256;
++    }
++    else if (Hardware->identity.numConstants == 256)
++    {
++        vsConstMax   = 256;
++        psConstMax   = 256;
++    }
++    else
++    {
++        vsConstMax   = 168;
++        psConstMax   = 64;
++    }
++
+     if (VertexUniforms != gcvNULL)
+     {
+-		/* Return the vs shader const count. */
+-        if (Hardware->identity.chipModel < gcv4000)
+-        {
+-            *VertexUniforms = 168;
+-        }
+-        else
+-        {
+-            *VertexUniforms = 256;
+-        }
++        *VertexUniforms = vsConstMax;
+     }
+ 
+     if (FragmentUniforms != gcvNULL)
+     {
+-		/* Return the ps shader const count. */
+-        if (Hardware->identity.chipModel < gcv4000)
+-        {
+-            *FragmentUniforms = 64;
+-        }
+-        else
+-        {
+-            *FragmentUniforms = 256;
+-        }
++        *FragmentUniforms = psConstMax;
+     }
+ 
+     if (Varyings != gcvNULL)
+@@ -3229,12 +3343,28 @@ gckHARDWARE_SetMMUv2(
+     gctBOOL commitEntered = gcvFALSE;
+     gctPOINTER pointer = gcvNULL;
+     gctBOOL acquired = gcvFALSE;
++    gctBOOL config2D;
++    gctSIZE_T configSize;
+ 
+     gcmkHEADER_ARG("Hardware=0x%x Enable=%d", Hardware, Enable);
+ 
+     /* Verify the arguments. */
+     gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
+ 
++    config2D =  gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_3D)
++             && gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_PIPE_2D);
++
++    configSize = 4 * 4;
++
++    if (config2D)
++    {
++        configSize +=
++            /* Pipe Select. */
++            4 * 4
++            /* Configure MMU States. */
++          + 4 * 4;
++    }
++
+     /* Convert logical address into physical address. */
+     gcmkONERROR(
+         gckOS_GetPhysicalAddress(Hardware->os, MtlbAddress, &config));
+@@ -3281,7 +3411,7 @@ gckHARDWARE_SetMMUv2(
+     commitEntered = gcvTRUE;
+ 
+     gcmkONERROR(gckCOMMAND_Reserve(
+-        command, 16, &pointer, &bufferSize
++        command, configSize, &pointer, &bufferSize
+         ));
+ 
+     buffer = pointer;
+@@ -3300,10 +3430,43 @@ gckHARDWARE_SetMMUv2(
+ 
+     buffer[3] = address;
+ 
++    if (config2D)
++    {
++        /* LoadState(AQPipeSelect, 1), pipe. */
++        buffer[4]
++            = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
++            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
++            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
++
++        buffer[5] = 0x1;
++
++        buffer[6]
++            = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
++            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0061) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
++            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
++
++        buffer[7] = config;
++
++        buffer[8]
++            = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
++            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0060) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
++            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
++
++        buffer[9] = address;
++
++        /* LoadState(AQPipeSelect, 1), pipe. */
++        buffer[10]
++            = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
++            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E00) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
++            | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
++
++        buffer[11] = 0x0;
++    }
++
+     gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+         "Setup MMU: config=%08x, Safe Address=%08x\n.", config, address);
+ 
+-    gcmkONERROR(gckCOMMAND_Execute(command, 16));
++    gcmkONERROR(gckCOMMAND_Execute(command, configSize));
+ 
+     if (FromPower == gcvFALSE)
+     {
+@@ -3501,6 +3664,8 @@ gckHARDWARE_Flush(
+     gctUINT32 flush = 0;
+     gctUINT32_PTR logical = (gctUINT32_PTR) Logical;
+     gceSTATUS status;
++    gctBOOL fcFlushStall;
++    gctUINT32 reserveBytes = 8;
+ 
+     gcmkHEADER_ARG("Hardware=0x%x Flush=0x%x Logical=0x%x *Bytes=%lu",
+                    Hardware, Flush, Logical, gcmOPT_VALUE(Bytes));
+@@ -3511,6 +3676,16 @@ gckHARDWARE_Flush(
+     /* Get current pipe. */
+     pipe = Hardware->kernel->command->pipeSelect;
+ 
++    fcFlushStall
++        = ((((gctUINT32) (Hardware->identity.chipMinorFeatures1)) >> (0 ? 31:31) & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1)))))))
++        && (Flush == gcvFLUSH_ALL)
++        ;
++
++    if (fcFlushStall)
++    {
++        reserveBytes += 8;
++    }
++
+     /* Flush 3D color cache. */
+     if ((Flush & gcvFLUSH_COLOR) && (pipe == 0x0))
+     {
+@@ -3527,6 +3702,7 @@ gckHARDWARE_Flush(
+     if ((Flush & gcvFLUSH_TEXTURE) && (pipe == 0x0))
+     {
+         flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)));
++        flush |= ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 4:4) - (0 ? 4:4) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4)));
+     }
+ 
+     /* Flush 2D cache. */
+@@ -3550,7 +3726,7 @@ gckHARDWARE_Flush(
+         /* Copy to command queue. */
+         if (Logical != gcvNULL)
+         {
+-            if (*Bytes < 8)
++            if (*Bytes < reserveBytes)
+             {
+                 /* Command queue too small. */
+                 gcmkONERROR(gcvSTATUS_BUFFER_TOO_SMALL);
+@@ -3565,12 +3741,26 @@ gckHARDWARE_Flush(
+ 
+             gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
+                            "0x%x: FLUSH 0x%x", logical, flush);
++
++            if (fcFlushStall)
++            {
++                logical[2] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? 31:27) - (0 ? 31:27) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27)))
++                           | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? 15:0) - (0 ? 15:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0)))
++                           | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 25:16) - (0 ? 25:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16)));
++
++                logical[3] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)));
++
++
++                gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
++                               "0x%x: FLUSH 0x%x", logical + 3, logical[3]);
++            }
++
+         }
+ 
+         if (Bytes != gcvNULL)
+         {
+-            /* 8 bytes required. */
+-            *Bytes = 8;
++            /* bytes required. */
++            *Bytes = reserveBytes;
+         }
+     }
+ 
+@@ -4285,6 +4475,48 @@ gckHARDWARE_SetPowerManagementState(
+         }
+     }
+ 
++    /* Flush Cache before Power Off. */
++    if (flag & gcvPOWER_FLAG_POWER_OFF)
++    {
++        if (Hardware->clockState == gcvFALSE)
++        {
++            /* Turn off the GPU power. */
++            gcmkONERROR(
++                    gckOS_SetGPUPower(os,
++                        Hardware->core,
++                        gcvTRUE,
++                        gcvTRUE));
++
++            Hardware->clockState = gcvTRUE;
++
++            if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_DYNAMIC_FREQUENCY_SCALING) != gcvTRUE)
++            {
++                /* Write the clock control register. */
++                gcmkONERROR(gckOS_WriteRegisterEx(os,
++                                                  Hardware->core,
++                                                  0x00000,
++                                                  clocks[0]));
++
++                /* Done loading the frequency scaler. */
++                gcmkONERROR(gckOS_WriteRegisterEx(os,
++                                                  Hardware->core,
++                                                  0x00000,
++                                                  ((((gctUINT32) (clocks[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)))));
++            }
++        }
++
++        gcmkONERROR(gckCOMMAND_Start(command));
++
++        gcmkONERROR(_FlushCache(Hardware, command));
++
++        gckOS_Delay(gcvNULL, 1);
++
++        /* Stop the command parser. */
++        gcmkONERROR(gckCOMMAND_Stop(command, gcvFALSE));
++
++        flag |= gcvPOWER_FLAG_CLOCK_OFF;
++    }
++
+     /* Get time until stopped. */
+     gcmkPROFILE_QUERY(time, stopTime);
+ 
+@@ -4582,6 +4814,40 @@ gckHARDWARE_SetPowerManagement(
+     return gcvSTATUS_OK;
+ }
+ 
++/*******************************************************************************
++**
++**  gckHARDWARE_SetGpuProfiler
++**
++**  Configure GPU profiler function.
++**  Only used in driver initialization stage.
++**
++**  INPUT:
++**
++**      gckHARDWARE Harwdare
++**          Pointer to an gckHARDWARE object.
++**
++**      gctBOOL GpuProfiler
++**          GOU Profiler State.
++**
++*/
++gceSTATUS
++gckHARDWARE_SetGpuProfiler(
++    IN gckHARDWARE Hardware,
++    IN gctBOOL GpuProfiler
++    )
++{
++    gcmkHEADER_ARG("Hardware=0x%x", Hardware);
++
++    /* Verify the arguments. */
++    gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
++
++    Hardware->gpuProfiler = GpuProfiler;
++
++    /* Success. */
++    gcmkFOOTER_NO();
++    return gcvSTATUS_OK;
++}
++
+ #if gcdENABLE_FSCALE_VAL_ADJUST
+ gceSTATUS
+ gckHARDWARE_SetFscaleValue(
+@@ -5141,6 +5407,402 @@ OnError:
+ }
+ #endif
+ 
++#if VIVANTE_PROFILER_CONTEXT
++#define gcmkUPDATE_PROFILE_DATA(data) \
++    profilerHistroy->data += profiler->data
++
++gceSTATUS
++gckHARDWARE_QueryContextProfile(
++    IN gckHARDWARE Hardware,
++    IN gctBOOL   Reset,
++    IN gckCONTEXT Context,
++    OUT gcsPROFILER_COUNTERS * Counters
++    )
++{
++    gceSTATUS status;
++    gckCOMMAND command = Hardware->kernel->command;
++    gcsPROFILER_COUNTERS * profiler = Counters;
++
++    gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters);
++
++    /* Verify the arguments. */
++    gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
++
++    /* Acquire the context sequnence mutex. */
++    gcmkONERROR(gckOS_AcquireMutex(
++        command->os, command->mutexContextSeq, gcvINFINITE
++        ));
++
++    /* Read the counters. */
++    gcmkVERIFY_OK(gckOS_MemCopy(
++        profiler, &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
++        ));
++
++    if (Reset)
++    {
++        /* Reset counters. */
++        gcmkVERIFY_OK(gckOS_ZeroMemory(
++            &Context->histroyProfiler, gcmSIZEOF(gcsPROFILER_COUNTERS)
++            ));
++    }
++
++    gcmkVERIFY_OK(gckOS_ReleaseMutex(
++        command->os, command->mutexContextSeq
++        ));
++
++    /* Success. */
++    gcmkFOOTER_NO();
++    return gcvSTATUS_OK;
++
++OnError:
++    /* Return the status. */
++    gcmkFOOTER();
++    return status;
++}
++
++
++gceSTATUS
++gckHARDWARE_UpdateContextProfile(
++    IN gckHARDWARE Hardware,
++    IN gckCONTEXT Context
++    )
++{
++    gceSTATUS status;
++    gcsPROFILER_COUNTERS * profiler = &Context->latestProfiler;
++    gcsPROFILER_COUNTERS * profilerHistroy = &Context->histroyProfiler;
++    gctUINT i, clock;
++    gctUINT32 colorKilled, colorDrawn, depthKilled, depthDrawn;
++    gctUINT32 totalRead, totalWrite;
++    gceCHIPMODEL chipModel;
++    gctUINT32 chipRevision;
++    gctUINT32 temp;
++    gctBOOL needResetShader = gcvFALSE;
++
++    gcmkHEADER_ARG("Hardware=0x%x Context=0x%x", Hardware, Context);
++
++    /* Verify the arguments. */
++    gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
++    gcmkVERIFY_OBJECT(Context, gcvOBJ_CONTEXT);
++
++    chipModel = Hardware->identity.chipModel;
++    chipRevision = Hardware->identity.chipRevision;
++    if (chipModel == gcv2000 || (chipModel == gcv2100 && chipRevision == 0x5118))
++    {
++        needResetShader = gcvTRUE;
++    }
++
++    /* Read the counters. */
++    gcmkONERROR(
++        gckOS_ReadRegisterEx(Hardware->os,
++                             Hardware->core,
++                             0x00438,
++                             &profiler->gpuCyclesCounter));
++    gcmkUPDATE_PROFILE_DATA(gpuCyclesCounter);
++
++    gcmkONERROR(
++        gckOS_ReadRegisterEx(Hardware->os,
++                             Hardware->core,
++                             0x00078,
++                             &profiler->gpuTotalCyclesCounter));
++    gcmkUPDATE_PROFILE_DATA(gpuTotalCyclesCounter);
++
++    gcmkONERROR(
++        gckOS_ReadRegisterEx(Hardware->os,
++                             Hardware->core,
++                             0x0007C,
++                             &profiler->gpuIdleCyclesCounter));
++    gcmkUPDATE_PROFILE_DATA(gpuIdleCyclesCounter);
++
++    /* Read clock control register. */
++    gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
++                                     Hardware->core,
++                                     0x00000,
++                                     &clock));
++
++    profiler->gpuTotalRead64BytesPerFrame = 0;
++    profiler->gpuTotalWrite64BytesPerFrame = 0;
++    profiler->pe_pixel_count_killed_by_color_pipe = 0;
++    profiler->pe_pixel_count_killed_by_depth_pipe = 0;
++    profiler->pe_pixel_count_drawn_by_color_pipe = 0;
++    profiler->pe_pixel_count_drawn_by_depth_pipe = 0;
++
++    /* Walk through all avaiable pixel pipes. */
++    for (i = 0; i < Hardware->identity.pixelPipes; ++i)
++    {
++        /* Select proper pipe. */
++        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
++                                           Hardware->core,
++                                           0x00000,
++                                           ((((gctUINT32) (clock)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20))) | (((gctUINT32) ((gctUINT32) (i) & ((gctUINT32) ((((1 ? 23:20) - (0 ? 23:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:20) - (0 ? 23:20) + 1))))))) << (0 ? 23:20)))));
++
++        /* BW */
++        gcmkONERROR(
++        gckOS_ReadRegisterEx(Hardware->os,
++                             Hardware->core,
++                             0x00040,
++                             &totalRead));
++        gcmkONERROR(
++        gckOS_ReadRegisterEx(Hardware->os,
++                             Hardware->core,
++                             0x00044,
++                             &totalWrite));
++
++        profiler->gpuTotalRead64BytesPerFrame += totalRead;
++        profiler->gpuTotalWrite64BytesPerFrame += totalWrite;
++        gcmkUPDATE_PROFILE_DATA(gpuTotalRead64BytesPerFrame);
++        gcmkUPDATE_PROFILE_DATA(gpuTotalWrite64BytesPerFrame);
++
++        /* PE */
++        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorKilled));
++        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthKilled));
++        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &colorDrawn));
++        gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470, ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))));gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00454, &depthDrawn));
++
++        profiler->pe_pixel_count_killed_by_color_pipe += colorKilled;
++        profiler->pe_pixel_count_killed_by_depth_pipe += depthKilled;
++        profiler->pe_pixel_count_drawn_by_color_pipe += colorDrawn;
++        profiler->pe_pixel_count_drawn_by_depth_pipe += depthDrawn;
++        gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_color_pipe);
++        gcmkUPDATE_PROFILE_DATA(pe_pixel_count_killed_by_depth_pipe);
++        gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_color_pipe);
++        gcmkUPDATE_PROFILE_DATA(pe_pixel_count_drawn_by_depth_pipe);
++    }
++
++    /* Reset clock control register. */
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
++                                      Hardware->core,
++                                      0x00000,
++                                      clock));
++
++
++
++
++    /* Reset counters. */
++    gcmkONERROR(
++        gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 1));
++    gcmkONERROR(
++        gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 0));
++    gcmkONERROR(
++        gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
++    gcmkONERROR(
++        gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
++gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
++));
++
++    /* SH */
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->ps_inst_counter));
++    if (needResetShader)
++    {
++        temp = profiler->ps_inst_counter;
++        profiler->ps_inst_counter -= Context->prevPSInstCount;
++        Context->prevPSInstCount = temp;
++    }
++    gcmkUPDATE_PROFILE_DATA(ps_inst_counter);
++
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_pixel_counter));
++    if (needResetShader)
++    {
++        temp = profiler->rendered_pixel_counter;
++        profiler->rendered_pixel_counter -= Context->prevPSPixelCount;
++        Context->prevPSPixelCount = temp;
++    }
++    gcmkUPDATE_PROFILE_DATA(rendered_pixel_counter);
++
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vs_inst_counter));
++    if (needResetShader)
++    {
++        temp = profiler->vs_inst_counter;
++        profiler->vs_inst_counter -= Context->prevVSInstCount;
++        Context->prevVSInstCount = temp;
++    }
++    gcmkUPDATE_PROFILE_DATA(vs_inst_counter);
++
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->rendered_vertice_counter));
++    if (needResetShader)
++    {
++        temp = profiler->rendered_vertice_counter;
++        profiler->rendered_vertice_counter -= Context->prevVSVertexCount;
++        Context->prevVSVertexCount = temp;
++    }
++    gcmkUPDATE_PROFILE_DATA(rendered_vertice_counter);
++
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (11) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_branch_inst_counter));
++    if (needResetShader)
++    {
++        temp = profiler->vtx_branch_inst_counter;
++        profiler->vtx_branch_inst_counter -= Context->prevVSBranchInstCount;
++        Context->prevVSBranchInstCount = temp;
++    }
++    gcmkUPDATE_PROFILE_DATA(vtx_branch_inst_counter);
++
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (12) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->vtx_texld_inst_counter));
++    if (needResetShader)
++    {
++        temp = profiler->vtx_texld_inst_counter;
++        profiler->vtx_texld_inst_counter -= Context->prevVSTexInstCount;
++        Context->prevVSTexInstCount = temp;
++    }
++    gcmkUPDATE_PROFILE_DATA(vtx_texld_inst_counter);
++
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (13) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_branch_inst_counter));
++    if (needResetShader)
++    {
++        temp = profiler->pxl_branch_inst_counter;
++        profiler->pxl_branch_inst_counter -= Context->prevPSBranchInstCount;
++        Context->prevPSBranchInstCount = temp;
++    }
++    gcmkUPDATE_PROFILE_DATA(pxl_branch_inst_counter);
++
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (14) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0045C, &profiler->pxl_texld_inst_counter));
++    if (needResetShader)
++    {
++        temp = profiler->pxl_texld_inst_counter;
++        profiler->pxl_texld_inst_counter -= Context->prevPSTexInstCount;
++        Context->prevPSTexInstCount = temp;
++    }
++    gcmkUPDATE_PROFILE_DATA(pxl_texld_inst_counter);
++
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00470,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
++));
++
++    /* PA */
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_vtx_counter));
++    gcmkUPDATE_PROFILE_DATA(pa_input_vtx_counter);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_input_prim_counter));
++    gcmkUPDATE_PROFILE_DATA(pa_input_prim_counter);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_output_prim_counter));
++    gcmkUPDATE_PROFILE_DATA(pa_output_prim_counter);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_depth_clipped_counter));
++    gcmkUPDATE_PROFILE_DATA(pa_depth_clipped_counter);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_trivial_rejected_counter));
++    gcmkUPDATE_PROFILE_DATA(pa_trivial_rejected_counter);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00460, &profiler->pa_culled_counter));
++    gcmkUPDATE_PROFILE_DATA(pa_culled_counter);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
++gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
++));
++
++    /* SE */
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_triangle_count));
++    gcmkUPDATE_PROFILE_DATA(se_culled_triangle_count);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00464, &profiler->se_culled_lines_count));
++    gcmkUPDATE_PROFILE_DATA(se_culled_lines_count);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
++gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
++));
++
++    /* RA */
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_pixel_count));
++    gcmkUPDATE_PROFILE_DATA(ra_valid_pixel_count);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_quad_count));
++    gcmkUPDATE_PROFILE_DATA(ra_total_quad_count);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_valid_quad_count_after_early_z));
++    gcmkUPDATE_PROFILE_DATA(ra_valid_quad_count_after_early_z);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_total_primitive_count));
++    gcmkUPDATE_PROFILE_DATA(ra_total_primitive_count);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_pipe_cache_miss_counter));
++    gcmkUPDATE_PROFILE_DATA(ra_pipe_cache_miss_counter);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (10) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00448, &profiler->ra_prefetch_cache_miss_counter));
++    gcmkUPDATE_PROFILE_DATA(ra_prefetch_cache_miss_counter);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) ));
++gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 23:16) - (0 ? 23:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:16) - (0 ? 23:16) + 1))))))) << (0 ? 23:16)))
++));
++
++    /* TX */
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_bilinear_requests));
++    gcmkUPDATE_PROFILE_DATA(tx_total_bilinear_requests);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_trilinear_requests));
++    gcmkUPDATE_PROFILE_DATA(tx_total_trilinear_requests);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_discarded_texture_requests));
++    gcmkUPDATE_PROFILE_DATA(tx_total_discarded_texture_requests);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_total_texture_requests));
++    gcmkUPDATE_PROFILE_DATA(tx_total_texture_requests);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (5) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_count));
++    gcmkUPDATE_PROFILE_DATA(tx_mem_read_count);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_mem_read_in_8B_count));
++    gcmkUPDATE_PROFILE_DATA(tx_mem_read_in_8B_count);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (7) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_count));
++    gcmkUPDATE_PROFILE_DATA(tx_cache_miss_count);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (8) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_hit_texel_count));
++    gcmkUPDATE_PROFILE_DATA(tx_cache_hit_texel_count);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (9) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0044C, &profiler->tx_cache_miss_texel_count));
++    gcmkUPDATE_PROFILE_DATA(tx_cache_miss_texel_count);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) ));
++gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00474,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 31:24) - (0 ? 31:24) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24)))
++));
++
++    /* MC */
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_pipeline));
++    gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_pipeline);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_read_req_8B_from_IP));
++    gcmkUPDATE_PROFILE_DATA(mc_total_read_req_8B_from_IP);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (3) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x00468, &profiler->mc_total_write_req_8B_from_pipeline));
++    gcmkUPDATE_PROFILE_DATA(mc_total_write_req_8B_from_pipeline);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) ));
++gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 7:0) - (0 ? 7:0) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0)))
++));
++
++    /* HI */
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_read_request_stalled));
++    gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_read_request_stalled);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_request_stalled));
++    gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_request_stalled);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (2) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
++gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os, Hardware->core, 0x0046C, &profiler->hi_axi_cycles_write_data_stalled));
++    gcmkUPDATE_PROFILE_DATA(hi_axi_cycles_write_data_stalled);
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (15) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) ));
++gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00478,   ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))
++));
++
++    /* Success. */
++    gcmkFOOTER_NO();
++    return gcvSTATUS_OK;
++
++OnError:
++    /* Return the status. */
++    gcmkFOOTER();
++    return status;
++}
++#endif
++
+ static gceSTATUS
+ _ResetGPU(
+     IN gckHARDWARE Hardware,
+@@ -5602,6 +6264,22 @@ gckHARDWARE_IsFeatureAvailable(
+             &&      ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
+         break;
+ 
++    case gcvFEATURE_PIPE_2D:
++        available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 9:9) & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))) == (0x1  & ((gctUINT32) ((((1 ? 9:9) - (0 ? 9:9) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 9:9) - (0 ? 9:9) + 1)))))));
++        break;
++
++    case gcvFEATURE_PIPE_3D:
++#ifndef VIVANTE_NO_3D
++        available = ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1  & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
++#else
++        available = gcvFALSE;
++#endif
++        break;
++
++    case gcvFEATURE_HALTI2:
++        available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures4)) >> (0 ? 16:16) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1)))))));
++        break;
++
+     default:
+         gcmkFATAL("Invalid feature has been requested.");
+         available = gcvFALSE;
+diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
+index 37226b7..287ea60 100644
+--- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
++++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h
+@@ -92,6 +92,7 @@ struct _gckHARDWARE
+ #endif
+ 
+     gctBOOL                     powerManagement;
++    gctBOOL                     gpuProfiler;
+ };
+ 
+ gceSTATUS
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
+index b7b0d28..12a5340 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
++++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
+@@ -128,19 +128,6 @@ _ResetFinishFunction(
+ **          Pointer to a variable that will hold the pointer to the gckKERNEL
+ **          object.
+ */
+-#ifdef ANDROID
+-#if gcdNEW_PROFILER_FILE
+-#define DEFAULT_PROFILE_FILE_NAME   "/sdcard/vprofiler.vpd"
+-#else
+-#define DEFAULT_PROFILE_FILE_NAME   "/sdcard/vprofiler.xml"
+-#endif
+-#else
+-#if gcdNEW_PROFILER_FILE
+-#define DEFAULT_PROFILE_FILE_NAME   "vprofiler.vpd"
+-#else
+-#define DEFAULT_PROFILE_FILE_NAME   "vprofiler.xml"
+-#endif
+-#endif
+ 
+ gceSTATUS
+ gckKERNEL_Construct(
+@@ -302,17 +289,12 @@ gckKERNEL_Construct(
+ 
+ #if VIVANTE_PROFILER
+     /* Initialize profile setting */
+-#if defined ANDROID
+     kernel->profileEnable = gcvFALSE;
+-#else
+-    kernel->profileEnable = gcvTRUE;
+-#endif
+     kernel->profileCleanRegister = gcvTRUE;
++#endif
+ 
+-    gcmkVERIFY_OK(
+-        gckOS_MemCopy(kernel->profileFileName,
+-                      DEFAULT_PROFILE_FILE_NAME,
+-                      gcmSIZEOF(DEFAULT_PROFILE_FILE_NAME) + 1));
++#if gcdANDROID_NATIVE_FENCE_SYNC
++    gcmkONERROR(gckOS_CreateSyncTimeline(Os, &kernel->timeline));
+ #endif
+ 
+     /* Return pointer to the gckKERNEL object. */
+@@ -395,6 +377,13 @@ OnError:
+         }
+ #endif
+ 
++#if gcdANDROID_NATIVE_FENCE_SYNC
++        if (kernel->timeline)
++        {
++            gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Os, kernel->timeline));
++        }
++#endif
++
+         gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, kernel));
+     }
+ 
+@@ -525,6 +514,10 @@ gckKERNEL_Destroy(
+     }
+ #endif
+ 
++#if gcdANDROID_NATIVE_FENCE_SYNC
++    gcmkVERIFY_OK(gckOS_DestroySyncTimeline(Kernel->os, Kernel->timeline));
++#endif
++
+     /* Mark the gckKERNEL object as unknown. */
+     Kernel->object.type = gcvOBJ_UNKNOWN;
+ 
+@@ -1310,7 +1303,8 @@ gckKERNEL_Dispatch(
+         /* Commit a command and context buffer. */
+         gcmkONERROR(
+             gckCOMMAND_Commit(Kernel->command,
+-                              gcmNAME_TO_PTR(Interface->u.Commit.context),
++                              Interface->u.Commit.context ?
++                                  gcmNAME_TO_PTR(Interface->u.Commit.context) : gcvNULL,
+                               gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer),
+                               gcmUINT64_TO_PTR(Interface->u.Commit.delta),
+                               gcmUINT64_TO_PTR(Interface->u.Commit.queue),
+@@ -1600,7 +1594,15 @@ gckKERNEL_Dispatch(
+         break;
+ 
+     case gcvHAL_READ_ALL_PROFILE_REGISTERS:
+-#if VIVANTE_PROFILER
++#if VIVANTE_PROFILER && VIVANTE_PROFILER_CONTEXT
++        /* Read profile data according to the context. */
++        gcmkONERROR(
++            gckHARDWARE_QueryContextProfile(
++                Kernel->hardware,
++                Kernel->profileCleanRegister,
++                gcmNAME_TO_PTR(Interface->u.RegisterProfileData.context),
++                &Interface->u.RegisterProfileData.counters));
++#elif VIVANTE_PROFILER
+         /* Read all 3D profile registers. */
+         gcmkONERROR(
+             gckHARDWARE_QueryProfileRegisters(
+@@ -1628,11 +1630,6 @@ gckKERNEL_Dispatch(
+ #if VIVANTE_PROFILER
+         /* Get profile setting */
+         Interface->u.GetProfileSetting.enable = Kernel->profileEnable;
+-
+-        gcmkVERIFY_OK(
+-            gckOS_MemCopy(Interface->u.GetProfileSetting.fileName,
+-                          Kernel->profileFileName,
+-                          gcdMAX_PROFILE_FILE_NAME));
+ #endif
+ 
+         status = gcvSTATUS_OK;
+@@ -1640,12 +1637,13 @@ gckKERNEL_Dispatch(
+     case gcvHAL_SET_PROFILE_SETTING:
+ #if VIVANTE_PROFILER
+         /* Set profile setting */
+-        Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
+-
+-        gcmkVERIFY_OK(
+-            gckOS_MemCopy(Kernel->profileFileName,
+-                          Interface->u.SetProfileSetting.fileName,
+-                          gcdMAX_PROFILE_FILE_NAME));
++        if(Kernel->hardware->gpuProfiler)
++            Kernel->profileEnable = Interface->u.SetProfileSetting.enable;
++        else
++        {
++            status = gcvSTATUS_NOT_SUPPORTED;
++            break;
++        }
+ #endif
+ 
+         status = gcvSTATUS_OK;
+@@ -2093,6 +2091,61 @@ gckKERNEL_Dispatch(
+ #endif
+         break;
+ 
++#if gcdANDROID_NATIVE_FENCE_SYNC
++    case gcvHAL_SYNC_POINT:
++        {
++            gctSYNC_POINT syncPoint;
++
++            switch (Interface->u.SyncPoint.command)
++            {
++            case gcvSYNC_POINT_CREATE:
++                gcmkONERROR(gckOS_CreateSyncPoint(Kernel->os, &syncPoint));
++
++                Interface->u.SyncPoint.syncPoint = gcmPTR_TO_UINT64(syncPoint);
++
++                gcmkVERIFY_OK(
++                    gckKERNEL_AddProcessDB(Kernel,
++                                           processID, gcvDB_SYNC_POINT,
++                                           syncPoint,
++                                           gcvNULL,
++                                           0));
++                break;
++
++            case gcvSYNC_POINT_DESTROY:
++                syncPoint = gcmUINT64_TO_PTR(Interface->u.SyncPoint.syncPoint);
++
++                gcmkONERROR(gckOS_DestroySyncPoint(Kernel->os, syncPoint));
++
++                gcmkVERIFY_OK(
++                    gckKERNEL_RemoveProcessDB(Kernel,
++                                              processID, gcvDB_SYNC_POINT,
++                                              syncPoint));
++                break;
++
++            default:
++                gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
++                break;
++            }
++        }
++        break;
++
++    case gcvHAL_CREATE_NATIVE_FENCE:
++        {
++            gctINT fenceFD;
++            gctSYNC_POINT syncPoint =
++                gcmUINT64_TO_PTR(Interface->u.CreateNativeFence.syncPoint);
++
++            gcmkONERROR(
++                gckOS_CreateNativeFence(Kernel->os,
++                                        Kernel->timeline,
++                                        syncPoint,
++                                        &fenceFD));
++
++            Interface->u.CreateNativeFence.fenceFD = fenceFD;
++        }
++        break;
++#endif
++
+     default:
+         /* Invalid command. */
+         gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
+@@ -2856,6 +2909,8 @@ gckKERNEL_Recovery(
+         return gcvSTATUS_OK;
+     }
+ 
++    gcmkPRINT("[galcore]: GPU[%d] hang, automatic recovery.", Kernel->core);
++
+     /* Start a timer to clear reset flag, before timer is expired,
+     ** other recovery request is ignored. */
+     gcmkVERIFY_OK(
+@@ -3382,7 +3437,7 @@ gckLINKQUEUE_Dequeue(
+     IN gckLINKQUEUE LinkQueue
+     )
+ {
+-    gcmASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
++    gcmkASSERT(LinkQueue->count == gcdLINK_QUEUE_SIZE);
+ 
+     LinkQueue->count--;
+     LinkQueue->front = (LinkQueue->front + 1) % gcdLINK_QUEUE_SIZE;
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
+index 5896e93..1c40df2 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
+@@ -140,8 +140,9 @@ typedef enum _gceDATABASE_TYPE
+     gcvDB_CONTEXT,                      /* Context */
+     gcvDB_IDLE,                         /* GPU idle. */
+     gcvDB_MAP_MEMORY,                   /* Map memory */
+-    gcvDB_SHARED_INFO,                 /* Private data */
+-    gcvDB_MAP_USER_MEMORY               /* Map user memory */
++    gcvDB_SHARED_INFO,                  /* Private data */
++    gcvDB_MAP_USER_MEMORY,              /* Map user memory */
++    gcvDB_SYNC_POINT,                   /* Sync point. */
+ }
+ gceDATABASE_TYPE;
+ 
+@@ -406,9 +407,6 @@ struct _gckKERNEL
+     /* Enable profiling */
+     gctBOOL                     profileEnable;
+ 
+-    /* The profile file name */
+-    gctCHAR                     profileFileName[gcdMAX_PROFILE_FILE_NAME];
+-
+     /* Clear profile register or not*/
+     gctBOOL                     profileCleanRegister;
+ 
+@@ -445,6 +443,10 @@ struct _gckKERNEL
+ #if gcdDVFS
+     gckDVFS                     dvfs;
+ #endif
++
++#if gcdANDROID_NATIVE_FENCE_SYNC
++    gctHANDLE                   timeline;
++#endif
+ };
+ 
+ struct _FrequencyHistory
+@@ -496,6 +498,11 @@ struct _gckCOMMAND
+     /* Context switching mutex. */
+     gctPOINTER                  mutexContext;
+ 
++#if VIVANTE_PROFILER_CONTEXT
++    /* Context sequence mutex. */
++    gctPOINTER                  mutexContextSeq;
++#endif
++
+     /* Command queue power semaphore. */
+     gctPOINTER                  powerSemaphore;
+ 
+@@ -649,6 +656,8 @@ struct _gckEVENT
+     gctPOINTER                  eventListMutex;
+ 
+     gctPOINTER                  submitTimer;
++
++    volatile gctBOOL            inNotify;
+ };
+ 
+ /* Free all events belonging to a process. */
+@@ -668,6 +677,11 @@ gckEVENT_Stop(
+ 	IN OUT gctSIZE_T * waitSize
+     );
+ 
++gceSTATUS
++gckEVENT_WaitEmpty(
++    IN gckEVENT Event
++    );
++
+ /* gcuVIDMEM_NODE structure. */
+ typedef union _gcuVIDMEM_NODE
+ {
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
+index 9ee9ea1..73dab81 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
++++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c
+@@ -494,6 +494,11 @@ gckCOMMAND_Construct(
+     /* Create the context switching mutex. */
+     gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContext));
+ 
++#if VIVANTE_PROFILER_CONTEXT
++    /* Create the context switching mutex. */
++    gcmkONERROR(gckOS_CreateMutex(os, &command->mutexContextSeq));
++#endif
++
+     /* Create the power management semaphore. */
+     gcmkONERROR(gckOS_CreateSemaphore(os, &command->powerSemaphore));
+ 
+@@ -572,6 +577,13 @@ OnError:
+             gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContext));
+         }
+ 
++#if VIVANTE_PROFILER_CONTEXT
++        if (command->mutexContextSeq != gcvNULL)
++        {
++            gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexContextSeq));
++        }
++#endif
++
+         if (command->mutexQueue != gcvNULL)
+         {
+             gcmkVERIFY_OK(gckOS_DeleteMutex(os, command->mutexQueue));
+@@ -662,6 +674,11 @@ gckCOMMAND_Destroy(
+     /* Delete the context switching mutex. */
+     gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContext));
+ 
++#if VIVANTE_PROFILER_CONTEXT
++    if (Command->mutexContextSeq != gcvNULL)
++        gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexContextSeq));
++#endif
++
+     /* Delete the command queue mutex. */
+     gcmkVERIFY_OK(gckOS_DeleteMutex(Command->os, Command->mutexQueue));
+ 
+@@ -1127,6 +1144,10 @@ gckCOMMAND_Commit(
+ # endif
+ #endif
+ 
++#if VIVANTE_PROFILER_CONTEXT
++    gctBOOL sequenceAcquired = gcvFALSE;
++#endif
++
+     gctPOINTER pointer = gcvNULL;
+ 
+     gcmkHEADER_ARG(
+@@ -1145,6 +1166,17 @@ gckCOMMAND_Commit(
+ 
+     gcmkONERROR(_FlushMMU(Command));
+ 
++#if VIVANTE_PROFILER_CONTEXT
++    if((Command->kernel->hardware->gpuProfiler) && (Command->kernel->profileEnable))
++    {
++        /* Acquire the context sequnence mutex. */
++        gcmkONERROR(gckOS_AcquireMutex(
++            Command->os, Command->mutexContextSeq, gcvINFINITE
++            ));
++        sequenceAcquired = gcvTRUE;
++    }
++#endif
++
+     /* Acquire the command queue. */
+     gcmkONERROR(gckCOMMAND_EnterCommit(Command, gcvFALSE));
+     commitEntered = gcvTRUE;
+@@ -2002,6 +2034,23 @@ gckCOMMAND_Commit(
+     gcmkONERROR(gckCOMMAND_ExitCommit(Command, gcvFALSE));
+     commitEntered = gcvFALSE;
+ 
++#if VIVANTE_PROFILER_CONTEXT
++    if(sequenceAcquired)
++    {
++        gcmkONERROR(gckCOMMAND_Stall(Command, gcvTRUE));
++        if (Command->currContext)
++        {
++            gcmkONERROR(gckHARDWARE_UpdateContextProfile(
++                hardware,
++                Command->currContext));
++        }
++
++        /* Release the context switching mutex. */
++        gcmkONERROR(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
++        sequenceAcquired = gcvFALSE;
++    }
++#endif
++
+     /* Loop while there are records in the queue. */
+     while (EventQueue != gcvNULL)
+     {
+@@ -2114,6 +2163,14 @@ OnError:
+         gcmkVERIFY_OK(gckCOMMAND_ExitCommit(Command, gcvFALSE));
+     }
+ 
++#if VIVANTE_PROFILER_CONTEXT
++    if (sequenceAcquired)
++    {
++        /* Release the context sequence mutex. */
++        gcmkVERIFY_OK(gckOS_ReleaseMutex(Command->os, Command->mutexContextSeq));
++    }
++#endif
++
+     /* Unmap the command buffer pointer. */
+     if (commandBufferMapped)
+     {
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
+index 76c1c10..1a7c340 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
++++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c
+@@ -2819,6 +2819,7 @@ gckVGCOMMAND_Construct(
+         ** Enable TS overflow interrupt.
+         */
+ 
++        command->info.tsOverflowInt = 0;
+         gcmkERR_BREAK(gckVGINTERRUPT_Enable(
+             Kernel->interrupt,
+             &command->info.tsOverflowInt,
+@@ -3406,38 +3407,26 @@ gckVGCOMMAND_Commit(
+         gctBOOL previousExecuted;
+         gctUINT controlIndex;
+ 
++        gcmkERR_BREAK(gckVGHARDWARE_SetPowerManagementState(
++            Command->hardware, gcvPOWER_ON_AUTO
++            ));
++
++        /* Acquire the power semaphore. */
++        gcmkERR_BREAK(gckOS_AcquireSemaphore(
++            Command->os, Command->powerSemaphore
++            ));
++
+         /* Acquire the mutex. */
+-        gcmkERR_BREAK(gckOS_AcquireMutex(
++        status = gckOS_AcquireMutex(
+             Command->os,
+             Command->commitMutex,
+             gcvINFINITE
+-            ));
+-
+-        status = gckVGHARDWARE_SetPowerManagementState(
+-            Command->hardware, gcvPOWER_ON_AUTO);
+-
+-        if (gcmIS_ERROR(status))
+-        {
+-            /* Acquire the mutex. */
+-            gcmkVERIFY_OK(gckOS_ReleaseMutex(
+-                Command->os,
+-                Command->commitMutex
+-                ));
+-
+-            break;
+-        }
+-            /* Acquire the power semaphore. */
+-        status = gckOS_AcquireSemaphore(
+-            Command->os, Command->powerSemaphore);
++            );
+ 
+         if (gcmIS_ERROR(status))
+         {
+-            /* Acquire the mutex. */
+-            gcmkVERIFY_OK(gckOS_ReleaseMutex(
+-                Command->os,
+-                Command->commitMutex
+-                ));
+-
++            gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
++                Command->os, Command->powerSemaphore));
+             break;
+         }
+ 
+@@ -3669,14 +3658,14 @@ gckVGCOMMAND_Commit(
+         }
+         while (gcvFALSE);
+ 
+-        gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
+-            Command->os, Command->powerSemaphore));
+-
+         /* Release the mutex. */
+         gcmkCHECK_STATUS(gckOS_ReleaseMutex(
+             Command->os,
+             Command->commitMutex
+             ));
++
++        gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
++            Command->os, Command->powerSemaphore));
+     }
+     while (gcvFALSE);
+ 
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
+index 673d4f7..134351a 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
++++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c
+@@ -1307,6 +1307,18 @@ gckKERNEL_DestroyProcessDB(
+             status = gckOS_FreeMemory(Kernel->os, record->physical);
+             break;
+ 
++#if gcdANDROID_NATIVE_FENCE_SYNC
++        case gcvDB_SYNC_POINT:
++            /* Free the user signal. */
++            status = gckOS_DestroySyncPoint(Kernel->os,
++                                            (gctSYNC_POINT) record->data);
++
++            gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
++                           "DB: SYNC POINT %d (status=%d)",
++                           (gctINT)(gctUINTPTR_T)record->data, status);
++            break;
++#endif
++
+         default:
+             gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE,
+                            "DB: Correcupted record=0x%08x type=%d",
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
+index 217f7f1..2d81a56 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
++++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c
+@@ -931,6 +931,7 @@ gckEVENT_AddList(
+         || (Interface->command == gcvHAL_TIMESTAMP)
+         || (Interface->command == gcvHAL_COMMIT_DONE)
+         || (Interface->command == gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER)
++        || (Interface->command == gcvHAL_SYNC_POINT)
+         );
+ 
+     /* Validate the source. */
+@@ -2131,6 +2132,9 @@ gckEVENT_Notify(
+                                        gcvINFINITE));
+         acquired = gcvTRUE;
+ 
++        /* We are in the notify loop. */
++        Event->inNotify = gcvTRUE;
++
+         /* Grab the event head. */
+         record = queue->head;
+ 
+@@ -2463,6 +2467,17 @@ gckEVENT_Notify(
+                  break;
+ #endif
+ 
++#if gcdANDROID_NATIVE_FENCE_SYNC
++            case gcvHAL_SYNC_POINT:
++                {
++                    gctSYNC_POINT syncPoint;
++
++                    syncPoint = gcmUINT64_TO_PTR(record->info.u.SyncPoint.syncPoint);
++                    status = gckOS_SignalSyncPoint(Event->os, syncPoint);
++                }
++                break;
++#endif
++
+             case gcvHAL_COMMIT_DONE:
+                 break;
+ 
+@@ -2505,6 +2520,9 @@ gckEVENT_Notify(
+         gcmkONERROR(_TryToIdleGPU(Event));
+     }
+ 
++    /* We are out the notify loop. */
++    Event->inNotify = gcvFALSE;
++
+     /* Success. */
+     gcmkFOOTER_NO();
+     return gcvSTATUS_OK;
+@@ -2524,6 +2542,9 @@ OnError:
+     }
+ #endif
+ 
++    /* We are out the notify loop. */
++    Event->inNotify = gcvFALSE;
++
+     /* Return the status. */
+     gcmkFOOTER();
+     return status;
+@@ -2871,3 +2892,11 @@ gckEVENT_Dump(
+     return gcvSTATUS_OK;
+ }
+ 
++gceSTATUS gckEVENT_WaitEmpty(gckEVENT Event)
++{
++    gctBOOL isEmpty;
++
++    while (Event->inNotify || (gcmIS_SUCCESS(gckEVENT_IsEmpty(Event, &isEmpty)) && !isEmpty)) ;
++
++    return gcvSTATUS_OK;
++}
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
+index 8ac187b..50bc63e 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
++++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
+@@ -794,6 +794,9 @@ gckVGINTERRUPT_Enque(
+             Interrupt->kernel->hardware, &triggered
+             ));
+ 
++        /* Mask out TS overflow interrupt */
++        triggered &= 0xfffffffe;
++
+         /* No interrupts to process? */
+         if (triggered == 0)
+         {
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
+index c7f67c7..e4ca497 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
++++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c
+@@ -1436,7 +1436,7 @@ gckMMU_AllocatePages(
+     acquired = gcvTRUE;
+ 
+     /* Allocate page table for current MMU. */
+-    for (i = 0; i < mirrorPageTable->reference; i++)
++    for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
+     {
+         if (Mmu == mirrorPageTable->mmus[i])
+         {
+@@ -1446,7 +1446,7 @@ gckMMU_AllocatePages(
+     }
+ 
+     /* Allocate page table for other MMUs. */
+-    for (i = 0; i < mirrorPageTable->reference; i++)
++    for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
+     {
+         mmu = mirrorPageTable->mmus[i];
+ 
+@@ -1500,7 +1500,7 @@ gckMMU_FreePages(
+ 
+     offset = (gctUINT32)PageTable - (gctUINT32)Mmu->pageTableLogical;
+ 
+-    for (i = 0; i < mirrorPageTable->reference; i++)
++    for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
+     {
+         mmu = mirrorPageTable->mmus[i];
+ 
+@@ -1639,7 +1639,7 @@ gckMMU_SetPage(
+     _WritePageEntry(PageEntry, data);
+ 
+ #if gcdMIRROR_PAGETABLE
+-    for (i = 0; i < mirrorPageTable->reference; i++)
++    for (i = 0; i < (gctINT)mirrorPageTable->reference; i++)
+     {
+         mmu = mirrorPageTable->mmus[i];
+ 
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
+index 8b8bbdc..3b5dd82 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
++++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c
+@@ -1582,6 +1582,7 @@ _NeedVirtualMapping(
+     gctUINT32 end;
+     gcePOOL pool;
+     gctUINT32 offset;
++    gctUINT32 baseAddress;
+ 
+     gcmkHEADER_ARG("Node=0x%X", Node);
+ 
+@@ -1601,10 +1602,16 @@ _NeedVirtualMapping(
+         else
+ #endif
+         {
+-            /* For cores which can't access all physical address. */
+-            gcmkONERROR(gckHARDWARE_ConvertLogical(Kernel->hardware,
+-                        Node->Virtual.logical,
+-                        &phys));
++            /* Convert logical address into a physical address. */
++            gcmkONERROR(
++                gckOS_GetPhysicalAddress(Kernel->os, Node->Virtual.logical, &phys));
++
++            gcmkONERROR(gckOS_GetBaseAddress(Kernel->os, &baseAddress));
++
++            gcmkASSERT(phys >= baseAddress);
++
++            /* Subtract baseAddress to get a GPU address used for programming. */
++            phys -= baseAddress;
+ 
+             /* If part of region is belong to gcvPOOL_VIRTUAL,
+             ** whole region has to be mapped. */
+@@ -1734,6 +1741,11 @@ gckVIDMEM_Lock(
+         gcmkONERROR(gckOS_AcquireMutex(os, Node->Virtual.mutex, gcvINFINITE));
+         acquired = gcvTRUE;
+ 
++#if gcdPAGED_MEMORY_CACHEABLE
++        /* Force video memory cacheable. */
++        Cacheable = gcvTRUE;
++#endif
++
+         gcmkONERROR(
+             gckOS_LockPages(os,
+                             Node->Virtual.physical,
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
+index 4406d7e..7312cc2 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
+@@ -123,6 +123,12 @@ extern "C" {
+ 
+ #define gcvINVALID_ADDRESS          ~0U
+ 
++#define gcmGET_PRE_ROTATION(rotate) \
++    ((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)))
++
++#define gcmGET_POST_ROTATION(rotate) \
++    ((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y))
++
+ /******************************************************************************\
+ ******************************** gcsOBJECT Object *******************************
+ \******************************************************************************/
+@@ -1124,6 +1130,60 @@ gckOS_UnmapUserMemory(
+     IN gctUINT32 Address
+     );
+ 
++/******************************************************************************\
++************************** Android Native Fence Sync ***************************
++\******************************************************************************/
++gceSTATUS
++gckOS_CreateSyncTimeline(
++    IN gckOS Os,
++    OUT gctHANDLE * Timeline
++    );
++
++gceSTATUS
++gckOS_DestroySyncTimeline(
++    IN gckOS Os,
++    IN gctHANDLE Timeline
++    );
++
++gceSTATUS
++gckOS_CreateSyncPoint(
++    IN gckOS Os,
++    OUT gctSYNC_POINT * SyncPoint
++    );
++
++gceSTATUS
++gckOS_ReferenceSyncPoint(
++    IN gckOS Os,
++    IN gctSYNC_POINT SyncPoint
++    );
++
++gceSTATUS
++gckOS_DestroySyncPoint(
++    IN gckOS Os,
++    IN gctSYNC_POINT SyncPoint
++    );
++
++gceSTATUS
++gckOS_SignalSyncPoint(
++    IN gckOS Os,
++    IN gctSYNC_POINT SyncPoint
++    );
++
++gceSTATUS
++gckOS_QuerySyncPoint(
++    IN gckOS Os,
++    IN gctSYNC_POINT SyncPoint,
++    OUT gctBOOL_PTR State
++    );
++
++gceSTATUS
++gckOS_CreateNativeFence(
++    IN gckOS Os,
++    IN gctHANDLE Timeline,
++    IN gctSYNC_POINT SyncPoint,
++    OUT gctINT * FenceFD
++    );
++
+ #if !USE_NEW_LINUX_SIGNAL
+ /* Create signal to be used in the user space. */
+ gceSTATUS
+@@ -1758,7 +1818,7 @@ gckKERNEL_Recovery(
+ void
+ gckKERNEL_SetTimeOut(
+     IN gckKERNEL Kernel,
+-	IN gctUINT32 timeOut
++    IN gctUINT32 timeOut
+     );
+ 
+ /* Get access to the user data. */
+@@ -2078,6 +2138,12 @@ gckHARDWARE_SetPowerManagement(
+     IN gctBOOL PowerManagement
+     );
+ 
++gceSTATUS
++gckHARDWARE_SetGpuProfiler(
++    IN gckHARDWARE Hardware,
++    IN gctBOOL GpuProfiler
++    );
++
+ #if gcdENABLE_FSCALE_VAL_ADJUST
+ gceSTATUS
+ gckHARDWARE_SetFscaleValue(
+@@ -2554,6 +2620,22 @@ gckHARDWARE_QueryProfileRegisters(
+     );
+ #endif
+ 
++#if VIVANTE_PROFILER_CONTEXT
++gceSTATUS
++gckHARDWARE_QueryContextProfile(
++    IN gckHARDWARE Hardware,
++    IN gctBOOL   Clear,
++    IN gckCONTEXT Context,
++    OUT gcsPROFILER_COUNTERS * Counters
++    );
++
++gceSTATUS
++gckHARDWARE_UpdateContextProfile(
++    IN gckHARDWARE Hardware,
++    IN gckCONTEXT Context
++    );
++#endif
++
+ gceSTATUS
+ gckOS_SignalQueryHardware(
+     IN gckOS Os,
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
+index 44689b0..9c17114 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h
+@@ -71,10 +71,17 @@ typedef struct _gcoFENCE *              gcoFENCE;
+ typedef struct _gcsSYNC_CONTEXT  *      gcsSYNC_CONTEXT_PTR;
+ #endif
+ 
++typedef struct _gcoOS_SymbolsList gcoOS_SymbolsList;
++
+ /******************************************************************************\
+ ******************************* Process local storage *************************
+ \******************************************************************************/
+ typedef struct _gcsPLS * gcsPLS_PTR;
++
++typedef void (* gctPLS_DESTRUCTOR) (
++    gcsPLS_PTR
++    );
++
+ typedef struct _gcsPLS
+ {
+     /* Global objects. */
+@@ -103,6 +110,12 @@ typedef struct _gcsPLS
+ 
+     /* PorcessID of the constrcutor process */
+     gctUINT32                   processID;
++#if gcdFORCE_GAL_LOAD_TWICE
++    /* ThreadID of the constrcutor process. */
++    gctSIZE_T                   threadID;
++    /* Flag for calling module destructor. */
++    gctBOOL                     exiting;
++#endif
+ 
+     /* Reference count for destructor. */
+     gcsATOM_PTR                 reference;
+@@ -111,6 +124,8 @@ typedef struct _gcsPLS
+     gctBOOL                     bNeedSupportNP2Texture;
+ #endif
+ 
++    /* Destructor for eglDisplayInfo. */
++    gctPLS_DESTRUCTOR           destructor;
+ }
+ gcsPLS;
+ 
+@@ -148,6 +163,11 @@ typedef struct _gcsTLS
+ #endif
+ 	gco2D						engine2D;
+     gctBOOL                     copied;
++
++#if gcdFORCE_GAL_LOAD_TWICE
++    /* libGAL.so handle */
++    gctHANDLE                   handle;
++#endif
+ }
+ gcsTLS;
+ 
+@@ -160,6 +180,7 @@ typedef enum _gcePLS_VALUE
+   gcePLS_VALUE_EGL_DISPLAY_INFO,
+   gcePLS_VALUE_EGL_SURFACE_INFO,
+   gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO,
++  gcePLS_VALUE_EGL_DESTRUCTOR_INFO,
+ }
+ gcePLS_VALUE;
+ 
+@@ -577,6 +598,12 @@ gcoHAL_Call(
+     IN OUT gcsHAL_INTERFACE_PTR Interface
+     );
+ 
++gceSTATUS
++gcoHAL_GetPatchID(
++    IN  gcoHAL Hal,
++    OUT gcePATCH_ID * PatchID
++    );
++
+ /* Schedule an event. */
+ gceSTATUS
+ gcoHAL_ScheduleEvent(
+@@ -637,6 +664,16 @@ gcoHAL_QuerySeparated3D2D(
+     IN gcoHAL Hal
+     );
+ 
++gceSTATUS
++gcoHAL_QuerySpecialHint(
++    IN gceSPECIAL_HINT Hint
++    );
++
++gceSTATUS
++gcoHAL_SetSpecialHintData(
++    IN gcoHARDWARE Hardware
++    );
++
+ /* Get pointer to gcoVG object. */
+ gceSTATUS
+ gcoHAL_GetVGEngine(
+@@ -786,7 +823,6 @@ gcoOS_FreeVideoMemory(
+     IN gctPOINTER Handle
+     );
+ 
+-#if gcdENABLE_BANK_ALIGNMENT
+ gceSTATUS
+ gcoSURF_GetBankOffsetBytes(
+     IN gcoSURF Surfce,
+@@ -794,7 +830,6 @@ gcoSURF_GetBankOffsetBytes(
+     IN gctUINT32 Stride,
+     IN gctUINT32_PTR Bytes
+     );
+-#endif
+ 
+ /* Map user memory. */
+ gceSTATUS
+@@ -918,6 +953,21 @@ gcoOS_Flush(
+     IN gctFILE File
+     );
+ 
++/* Close a file descriptor. */
++gceSTATUS
++gcoOS_CloseFD(
++    IN gcoOS Os,
++    IN gctINT FD
++    );
++
++/* Dup file descriptor to another. */
++gceSTATUS
++gcoOS_DupFD(
++    IN gcoOS Os,
++    IN gctINT FD,
++    OUT gctINT * FD2
++    );
++
+ /* Create an endpoint for communication. */
+ gceSTATUS
+ gcoOS_Socket(
+@@ -977,6 +1027,14 @@ gcoOS_GetEnv(
+     OUT gctSTRING * Value
+     );
+ 
++/* Set environment variable value. */
++gceSTATUS
++gcoOS_SetEnv(
++    IN gcoOS Os,
++    IN gctCONST_STRING VarName,
++    IN gctSTRING Value
++    );
++
+ /* Get current working directory. */
+ gceSTATUS
+ gcoOS_GetCwd(
+@@ -1210,6 +1268,13 @@ gcoOS_DetectProcessByEncryptedName(
+     IN gctCONST_STRING Name
+     );
+ 
++#if defined(ANDROID)
++gceSTATUS
++gcoOS_DetectProgrameByEncryptedSymbols(
++    IN gcoOS_SymbolsList Symbols
++    );
++#endif
++
+ /*----------------------------------------------------------------------------*/
+ /*----- Atoms ----------------------------------------------------------------*/
+ 
+@@ -1403,6 +1468,42 @@ gcoOS_UnmapSignal(
+     IN gctSIGNAL Signal
+     );
+ 
++/*----------------------------------------------------------------------------*/
++/*----- Android Native Fence -------------------------------------------------*/
++
++/* Create sync point. */
++gceSTATUS
++gcoOS_CreateSyncPoint(
++    IN gcoOS Os,
++    OUT gctSYNC_POINT * SyncPoint
++    );
++
++/* Destroy sync point. */
++gceSTATUS
++gcoOS_DestroySyncPoint(
++    IN gcoOS Os,
++    IN gctSYNC_POINT SyncPoint
++    );
++
++/* Create native fence. */
++gceSTATUS
++gcoOS_CreateNativeFence(
++    IN gcoOS Os,
++    IN gctSYNC_POINT SyncPoint,
++    OUT gctINT * FenceFD
++    );
++
++/* Wait on native fence. */
++gceSTATUS
++gcoOS_WaitNativeFence(
++    IN gcoOS Os,
++    IN gctINT FenceFD,
++    IN gctUINT32 Timeout
++    );
++
++/*----------------------------------------------------------------------------*/
++/*----- Memory Access and Cache ----------------------------------------------*/
++
+ /* Write a register. */
+ gceSTATUS
+ gcoOS_WriteRegister(
+@@ -1507,7 +1608,7 @@ gcoOS_QueryProfileTickRate(
+ #   define gcmPROFILE_QUERY(start, ticks)   do { } while (gcvFALSE)
+ #   define gcmPROFILE_ONLY(x)               do { } while (gcvFALSE)
+ #   define gcmPROFILE_ELSE(x)               x
+-#   define gcmPROFILE_DECLARE_ONLY(x)       typedef x
++#   define gcmPROFILE_DECLARE_ONLY(x)       do { } while (gcvFALSE) 
+ #   define gcmPROFILE_DECLARE_ELSE(x)       x
+ #endif
+ 
+@@ -1579,6 +1680,28 @@ typedef struct _gcsRECT
+ }
+ gcsRECT;
+ 
++typedef union _gcsPIXEL
++{
++    struct
++    {
++        gctFLOAT r, g, b, a;
++        gctFLOAT d, s;
++    } pf;
++
++    struct
++    {
++        gctINT32 r, g, b, a;
++        gctINT32 d, s;
++    } pi;
++
++    struct
++    {
++        gctUINT32 r, g, b, a;
++        gctUINT32 d, s;
++    } pui;
++
++} gcsPIXEL;
++
+ 
+ /******************************************************************************\
+ ********************************* gcoSURF Object ********************************
+@@ -1795,6 +1918,18 @@ gcoSURF_SetRotation(
+     );
+ 
+ gceSTATUS
++gcoSURF_SetPreRotation(
++    IN gcoSURF Surface,
++    IN gceSURF_ROTATION Rotation
++    );
++
++gceSTATUS
++gcoSURF_GetPreRotation(
++    IN gcoSURF Surface,
++    IN gceSURF_ROTATION *Rotation
++    );
++
++gceSTATUS
+ gcoSURF_IsValid(
+     IN gcoSURF Surface
+     );
+@@ -1824,6 +1959,15 @@ gcoSURF_DisableTileStatus(
+     IN gcoSURF Surface,
+     IN gctBOOL Decompress
+     );
++
++gceSTATUS
++gcoSURF_AlignResolveRect(
++    IN gcoSURF Surf,
++    IN gcsPOINT_PTR RectOrigin,
++    IN gcsPOINT_PTR RectSize,
++    OUT gcsPOINT_PTR AlignedOrigin,
++    OUT gcsPOINT_PTR AlignedSize
++    );
+ #endif /* VIVANTE_NO_3D */
+ 
+ /* Get surface size. */
+@@ -1910,6 +2054,9 @@ gcoSURF_FillFromTile(
+     IN gcoSURF Surface
+     );
+ 
++/* Check if surface needs a filler. */
++gceSTATUS gcoSURF_NeedFiller(IN gcoSURF Surface);
++
+ /* Fill surface with a value. */
+ gceSTATUS
+ gcoSURF_Fill(
+@@ -1949,6 +2096,19 @@ gcoSURF_SetBuffer(
+     IN gctUINT32 Physical
+     );
+ 
++/* Set the underlying video buffer for the surface wrapper. */
++gceSTATUS
++gcoSURF_SetVideoBuffer(
++    IN gcoSURF Surface,
++    IN gceSURF_TYPE Type,
++    IN gceSURF_FORMAT Format,
++    IN gctUINT Width,
++    IN gctUINT Height,
++    IN gctUINT Stride,
++    IN gctPOINTER *LogicalPlane1,
++    IN gctUINT32 *PhysicalPlane1
++    );
++
+ /* Set the size of the surface in pixels and map the underlying buffer. */
+ gceSTATUS
+ gcoSURF_SetWindow(
+@@ -3705,6 +3865,12 @@ gcGetUserDebugOption(
+     void
+     );
+ 
++struct _gcoOS_SymbolsList
++{
++    gcePATCH_ID patchId;
++    const char * symList[10];
++};
++
+ #if gcdHAS_ELLIPSES
+ #define gcmUSER_DEBUG_MSG(level, ...) \
+     do \
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
+index 8693c37..062224c 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h
+@@ -39,12 +39,10 @@ extern "C" {
+ #define GC_ENABLE_LOADTIME_OPT           1
+ #endif
+ 
+-#define TEMP_OPT_CONSTANT_TEXLD_COORD    1
++#define TEMP_OPT_CONSTANT_TEXLD_COORD    0
+ 
+ #define TEMP_SHADER_PATCH                1
+ 
+-#define ADD_PRE_ROTATION_TO_VS           0
+-
+ #define TEMP_INLINE_ALL_EXPANSION            1
+ /******************************* IR VERSION ******************/
+ #define gcdSL_IR_VERSION gcmCC('\0','\0','\0','\1')
+@@ -271,6 +269,7 @@ typedef enum _gcSL_OPCODE
+ 	gcSL_ADDSAT,						/* 0x5C */  /* Integer only. */
+ 	gcSL_SUBSAT,						/* 0x5D */  /* Integer only. */
+ 	gcSL_MULSAT,						/* 0x5E */  /* Integer only. */
++	gcSL_DP2,							/* 0x5F */
+ 	gcSL_MAXOPCODE
+ }
+ gcSL_OPCODE;
+@@ -474,6 +473,9 @@ struct _gcsHINT
+ 
+     gctBOOL     clipW;
+ 
++    /* Flag whether or not the shader has a KILL instruction. */
++    gctBOOL     hasKill;
++
+     /* Element count. */
+     gctUINT32   elementCount;
+ 
+@@ -495,12 +497,18 @@ struct _gcsHINT
+     /* Balance maximum. */
+     gctUINT32   balanceMax;
+ 
++    /* Auto-shift balancing. */
++    gctBOOL     autoShift;
++
+     /* Flag whether the PS outputs the depth value or not. */
+     gctBOOL     psHasFragDepthOut;
+ 
+ 	/* Flag whether the ThreadWalker is in PS. */
+ 	gctBOOL		threadWalkerInPS;
+ 
++    /* HW reg number for position of VS */
++    gctUINT32   hwRegNoOfSIVPos;
++
+ #if gcdALPHA_KILL_IN_SHADER
+     /* States to set when alpha kill is enabled. */
+     gctUINT32   killStateAddress;
+@@ -687,12 +695,12 @@ typedef enum _gceSHADER_FLAGS
+     gcvSHADER_USE_ALPHA_KILL            = 0x100,
+ #endif
+ 
+-#if ADD_PRE_ROTATION_TO_VS
++#if gcdPRE_ROTATION && (ANDROID_SDK_VERSION >= 14)
+     gcvSHADER_VS_PRE_ROTATION           = 0x200,
+ #endif
+ 
+ #if TEMP_INLINE_ALL_EXPANSION
+-    gcvSHADER_INLINE_ALL_EXPANSION      = 0x200,
++    gcvSHADER_INLINE_ALL_EXPANSION      = 0x400,
+ #endif
+ }
+ gceSHADER_FLAGS;
+@@ -827,6 +835,7 @@ typedef struct _gcOPTIMIZER_OPTION
+     gctBOOL     dumpOptimizerVerbose;  /* dump result IR in each optimization phase */
+     gctBOOL     dumpBEGenertedCode;    /* dump generated machine code */
+     gctBOOL     dumpBEVerbose;         /* dump BE tree and optimization detail */
++    gctBOOL     dumpBEFinalIR;         /* dump BE final IR */
+ 
+     /* Code generation */
+ 
+@@ -945,6 +954,8 @@ extern gcOPTIMIZER_OPTION theOptimizerOption;
+               gcmOPT_DUMP_CODEGEN_VERBOSE() )
+ #define gcmOPT_DUMP_CODEGEN_VERBOSE()    \
+              (gcmGetOptimizerOption()->dumpBEVerbose != 0)
++#define gcmOPT_DUMP_FINAL_IR()    \
++             (gcmGetOptimizerOption()->dumpBEFinalIR != 0)
+ 
+ #define gcmOPT_SET_DUMP_SHADER_SRC(v)   \
+              gcmGetOptimizerOption()->dumpShaderSource = (v)
+@@ -1064,6 +1075,13 @@ typedef struct _gcNPOT_PATCH_PARAM
+     gctINT               texDimension;    /* 2 or 3 */
+ }gcNPOT_PATCH_PARAM, *gcNPOT_PATCH_PARAM_PTR;
+ 
++typedef struct _gcZBIAS_PATCH_PARAM
++{
++    /* Driver uses this to program uniform that designating zbias */
++    gctINT               uniformAddr;
++    gctINT               channel;
++}gcZBIAS_PATCH_PARAM, *gcZBIAS_PATCH_PARAM_PTR;
++
+ void
+ gcGetOptionFromEnv(
+     IN OUT gcOPTIMIZER_OPTION * Option
+@@ -1556,6 +1574,43 @@ gcSHADER_AddUniform(
+ 	OUT gcUNIFORM * Uniform
+ 	);
+ 
++/*******************************************************************************
++**							   gcSHADER_AddPreRotationUniform
++********************************************************************************
++**
++**	Add an uniform to a gcSHADER object.
++**
++**	INPUT:
++**
++**		gcSHADER Shader
++**			Pointer to a gcSHADER object.
++**
++**		gctCONST_STRING Name
++**			Name of the uniform to add.
++**
++**		gcSHADER_TYPE Type
++**			Type of the uniform to add.
++**
++**		gctSIZE_T Length
++**			Array length of the uniform to add.  'Length' must be at least 1.
++**
++**		gctINT col
++**			Which uniform.
++**
++**	OUTPUT:
++**
++**		gcUNIFORM * Uniform
++**			Pointer to a variable receiving the gcUNIFORM object pointer.
++*/
++gceSTATUS
++gcSHADER_AddPreRotationUniform(
++	IN gcSHADER Shader,
++	IN gctCONST_STRING Name,
++	IN gcSHADER_TYPE Type,
++	IN gctSIZE_T Length,
++    IN gctINT col,
++	OUT gcUNIFORM * Uniform
++	);
+ 
+ /*******************************************************************************
+ **							   gcSHADER_AddUniformEx
+@@ -1677,6 +1732,28 @@ gcSHADER_GetUniformCount(
+ 	);
+ 
+ /*******************************************************************************
++**                         gcSHADER_GetPreRotationUniform
++********************************************************************************
++**
++**	Get the preRotate Uniform.
++**
++**	INPUT:
++**
++**		gcSHADER Shader
++**			Pointer to a gcSHADER object.
++**
++**	OUTPUT:
++**
++**		gcUNIFORM ** pUniform
++**			Pointer to a preRotation uniforms array.
++*/
++gceSTATUS
++gcSHADER_GetPreRotationUniform(
++	IN gcSHADER Shader,
++	OUT gcUNIFORM ** pUniform
++	);
++
++/*******************************************************************************
+ **                             gcSHADER_GetUniform
+ ********************************************************************************
+ **
+@@ -3438,6 +3515,34 @@ gcUNIFORM_SetValueF(
+ 	);
+ 
+ /*******************************************************************************
++**  gcUNIFORM_ProgramF
++**
++**  Set the value of a uniform in floating point.
++**
++**  INPUT:
++**
++**      gctUINT32 Address
++**          Address of Uniform.
++**
++**      gctSIZE_T Row/Col
++**
++**      const gctFLOAT * Value
++**          Pointer to a buffer holding the floating point values for the
++**          uniform.
++**
++**  OUTPUT:
++**
++**      Nothing.
++*/
++gceSTATUS
++gcUNIFORM_ProgramF(
++    IN gctUINT32 Address,
++    IN gctSIZE_T Row,
++    IN gctSIZE_T Col,
++    IN const gctFLOAT * Value
++    );
++
++/*******************************************************************************
+ **						 gcUNIFORM_GetModelViewProjMatrix
+ ********************************************************************************
+ **
+@@ -3912,6 +4017,23 @@ gcRecompileShaders(
+     IN gctUINT32 *SamplerWrapS,
+     IN gctUINT32 *SamplerWrapT
+     );
++
++gceSTATUS
++gcRecompileDepthBias(
++    IN gcoHAL Hal,
++    IN gcMACHINECODE_PTR pVsMachineCode,
++    /*Recompile variables*/
++    IN OUT gctPOINTER *ppRecompileStateBuffer,
++    IN OUT gctSIZE_T *pRecompileStateBufferSize,
++    IN OUT gcsHINT_PTR *ppRecompileHints,
++    /* natvie state*/
++    IN gctPOINTER pNativeStateBuffer,
++    IN gctSIZE_T nativeStateBufferSize,
++    IN gcsHINT_PTR pNativeHints,
++	OUT gctINT * uniformAddr,
++	OUT gctINT * uniformChannel
++    );
++
+ /*******************************************************************************
+ **                                gcSaveProgram
+ ********************************************************************************
+@@ -4138,6 +4260,16 @@ gcSHADER_PatchNPOTForMachineCode(
+     IN OUT gcsHINT_PTR            pHints /* User needs copy original hints to this one, then passed this one in */
+     );
+ 
++gceSTATUS
++gcSHADER_PatchZBiasForMachineCodeVS(
++    IN     gcMACHINECODE_PTR       pMachineCode,
++    IN OUT gcZBIAS_PATCH_PARAM_PTR pPatchParam,
++    IN     gctUINT                 hwSupportedInstCount,
++    OUT    gctPOINTER*             ppCmdBuffer,
++    OUT    gctUINT32*              pByteSizeOfCmdBuffer,
++    IN OUT gcsHINT_PTR             pHints /* User needs copy original hints to this one, then passed this one in */
++    );
++
+ #ifdef __cplusplus
+ }
+ #endif
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
+index b056c52..fc8c395 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h
+@@ -166,6 +166,12 @@ typedef enum _gceHAL_COMMAND_CODES
+ 
+     /* Reset time stamp. */
+     gcvHAL_QUERY_RESET_TIME_STAMP,
++
++    /* Sync point operations. */
++    gcvHAL_SYNC_POINT,
++
++    /* Create native fence and return its fd. */
++    gcvHAL_CREATE_NATIVE_FENCE,
+ }
+ gceHAL_COMMAND_CODES;
+ 
+@@ -723,6 +729,10 @@ typedef struct _gcsHAL_INTERFACE
+         /* gcvHAL_READ_ALL_PROFILE_REGISTERS */
+         struct _gcsHAL_READ_ALL_PROFILE_REGISTERS
+         {
++#if VIVANTE_PROFILER_CONTEXT
++            /* Context buffer object gckCONTEXT. Just a name. */
++            IN gctUINT32                context;
++#endif
+             /* Data read. */
+             OUT gcsPROFILER_COUNTERS    counters;
+         }
+@@ -978,6 +988,33 @@ typedef struct _gcsHAL_INTERFACE
+             OUT gctUINT64           timeStamp;
+         }
+         QueryResetTimeStamp;
++
++        struct _gcsHAL_SYNC_POINT
++        {
++            /* Command. */
++            gceSYNC_POINT_COMMAND_CODES command;
++
++            /* Sync point. */
++            IN OUT gctUINT64            syncPoint;
++
++            /* From where. */
++            IN gceKERNEL_WHERE          fromWhere;
++
++            /* Signaled state. */
++            OUT gctBOOL                 state;
++        }
++        SyncPoint;
++
++        struct _gcsHAL_CREATE_NATIVE_FENCE
++        {
++            /* Signal id to dup. */
++            IN gctUINT64                syncPoint;
++
++            /* Native fence file descriptor. */
++            OUT gctINT                  fenceFD;
++
++        }
++        CreateNativeFence;
+     }
+     u;
+ }
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
+index 8481375..3fb2fe4 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h
+@@ -323,6 +323,15 @@ gcoSURF_Resolve(
+     IN gcoSURF DestSurface
+     );
+ 
++gceSTATUS
++gcoSURF_IsHWResolveable(
++    IN gcoSURF SrcSurface,
++    IN gcoSURF DestSurface,
++    IN gcsPOINT_PTR SrcOrigin,
++    IN gcsPOINT_PTR DestOrigin,
++    IN gcsPOINT_PTR RectSize
++    );
++
+ /* Resolve rectangular area of a surface. */
+ gceSTATUS
+ gcoSURF_ResolveRect(
+@@ -345,6 +354,11 @@ gcoSURF_IsRenderable(
+     IN gcoSURF Surface
+     );
+ 
++gceSTATUS
++gcoSURF_IsFormatRenderableAsRT(
++    IN gcoSURF Surface
++    );
++
+ #if gcdSYNC
+ gceSTATUS
+ gcoSURF_GetFence(
+@@ -1006,6 +1020,7 @@ typedef struct _gcsALPHA_INFO
+     gctBOOL                 test;
+     gceCOMPARE              compare;
+     gctUINT8                reference;
++    gctFLOAT                floatReference;
+ 
+     /* Alpha blending states. */
+     gctBOOL                 blend;
+@@ -1040,7 +1055,8 @@ gco3D_SetAlphaCompare(
+ gceSTATUS
+ gco3D_SetAlphaReference(
+     IN gco3D Engine,
+-    IN gctUINT8 Reference
++    IN gctUINT8 Reference,
++    IN gctFLOAT FloatReference
+     );
+ 
+ /* Set alpha test reference in fixed point. */
+@@ -1504,6 +1520,19 @@ gcoTEXTURE_UploadSub(
+     IN gceSURF_FORMAT Format
+     );
+ 
++/* Upload YUV data to an gcoTEXTURE object. */
++gceSTATUS
++gcoTEXTURE_UploadYUV(
++    IN gcoTEXTURE Texture,
++    IN gceTEXTURE_FACE Face,
++    IN gctUINT Width,
++    IN gctUINT Height,
++    IN gctUINT Slice,
++    IN gctPOINTER Memory[3],
++    IN gctINT Stride[3],
++    IN gceSURF_FORMAT Format
++    );
++
+ /* Upload compressed data to an gcoTEXTURE object. */
+ gceSTATUS
+ gcoTEXTURE_UploadCompressed(
+@@ -1621,6 +1650,13 @@ gcoTEXTURE_QueryCaps(
+     );
+ 
+ gceSTATUS
++gcoTEXTURE_GetTiling(
++    IN gcoTEXTURE Texture,
++    IN gctINT preferLevel,
++	OUT gceTILING * Tiling
++    );
++
++gceSTATUS
+ gcoTEXTURE_GetClosestFormat(
+     IN gcoHAL Hal,
+     IN gceSURF_FORMAT InFormat,
+@@ -2001,6 +2037,14 @@ gcoHAL_SetSharedInfo(
+     IN gctSIZE_T Bytes
+     );
+ 
++#if VIVANTE_PROFILER_CONTEXT
++gceSTATUS
++gcoHARDWARE_GetContext(
++    IN gcoHARDWARE Hardware,
++    OUT gctUINT32 * Context
++    );
++#endif
++
+ #ifdef __cplusplus
+ }
+ #endif
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
+index a1d9ae5..8e3c2f8 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h
+@@ -146,10 +146,26 @@ typedef enum _gceFEATURE
+     gcvFEATURE_FRUSTUM_CLIP_FIX,
+     gcvFEATURE_TEXTURE_LINEAR,
+     gcvFEATURE_TEXTURE_YUV_ASSEMBLER,
++    gcvFEATURE_SHADER_HAS_INSTRUCTION_CACHE,
+     gcvFEATURE_DYNAMIC_FREQUENCY_SCALING,
+     gcvFEATURE_BUGFIX15,
++    gcvFEATURE_2D_GAMMA,
++    gcvFEATURE_2D_COLOR_SPACE_CONVERSION,
++    gcvFEATURE_2D_SUPER_TILE_VERSION,
+     gcvFEATURE_2D_MIRROR_EXTENSION,
++    gcvFEATURE_2D_SUPER_TILE_V1,
++    gcvFEATURE_2D_SUPER_TILE_V2,
++    gcvFEATURE_2D_SUPER_TILE_V3,
++    gcvFEATURE_2D_MULTI_SOURCE_BLT_EX2,
+     gcvFEATURE_ELEMENT_INDEX_UINT,
++    gcvFEATURE_2D_COMPRESSION,
++    gcvFEATURE_2D_OPF_YUV_OUTPUT,
++    gcvFEATURE_2D_MULTI_SRC_BLT_TO_UNIFIED_DST_RECT,
++    gcvFEATURE_2D_YUV_MODE,
++    gcvFEATURE_DECOMPRESS_Z16,
++	gcvFEATURE_LINEAR_RENDER_TARGET,
++    gcvFEATURE_BUG_FIXES8,
++    gcvFEATURE_HALTI2,
+ }
+ gceFEATURE;
+ 
+@@ -203,11 +219,14 @@ typedef enum _gceSURF_TYPE
+     gcvSURF_NO_VIDMEM      = 0x200, /* Used to allocate surfaces with no underlying vidmem node.
+                                        In Android, vidmem node is allocated by another process. */
+     gcvSURF_CACHEABLE      = 0x400, /* Used to allocate a cacheable surface */
+-#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
+     gcvSURF_FLIP           = 0x800, /* The Resolve Target the will been flip resolve from RT */
+-#endif
+     gcvSURF_TILE_STATUS_DIRTY  = 0x1000, /* Init tile status to all dirty */
+ 
++    gcvSURF_LINEAR             = 0x2000,
++
++    gcvSURF_TEXTURE_LINEAR               = gcvSURF_TEXTURE
++                                         | gcvSURF_LINEAR,
++
+     gcvSURF_RENDER_TARGET_NO_TILE_STATUS = gcvSURF_RENDER_TARGET
+                                          | gcvSURF_NO_TILE_STATUS,
+ 
+@@ -217,6 +236,9 @@ typedef enum _gceSURF_TYPE
+     gcvSURF_DEPTH_NO_TILE_STATUS         = gcvSURF_DEPTH
+                                          | gcvSURF_NO_TILE_STATUS,
+ 
++    gcvSURF_DEPTH_TS_DIRTY               = gcvSURF_DEPTH
++                                         | gcvSURF_TILE_STATUS_DIRTY,
++
+     /* Supported surface types with no vidmem node. */
+     gcvSURF_BITMAP_NO_VIDMEM             = gcvSURF_BITMAP
+                                          | gcvSURF_NO_VIDMEM,
+@@ -231,10 +253,8 @@ typedef enum _gceSURF_TYPE
+     gcvSURF_CACHEABLE_BITMAP             = gcvSURF_BITMAP
+                                          | gcvSURF_CACHEABLE,
+ 
+-#if gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
+     gcvSURF_FLIP_BITMAP                  = gcvSURF_BITMAP
+                                          | gcvSURF_FLIP,
+-#endif
+ }
+ gceSURF_TYPE;
+ 
+@@ -263,6 +283,9 @@ typedef enum _gceSURF_ROTATION
+     gcvSURF_270_DEGREE,
+     gcvSURF_FLIP_X,
+     gcvSURF_FLIP_Y,
++
++	gcvSURF_POST_FLIP_X = 0x40000000,
++    gcvSURF_POST_FLIP_Y = 0x80000000,
+ }
+ gceSURF_ROTATION;
+ 
+@@ -622,21 +645,16 @@ gce2D_PORTER_DUFF_RULE;
+ typedef enum _gce2D_YUV_COLOR_MODE
+ {
+     gcv2D_YUV_601= 0,
+-    gcv2D_YUV_709
+-}
+-gce2D_YUV_COLOR_MODE;
++    gcv2D_YUV_709,
++    gcv2D_YUV_USER_DEFINED,
++    gcv2D_YUV_USER_DEFINED_CLAMP,
+ 
+-/* 2D Rotation and flipping. */
+-typedef enum _gce2D_ORIENTATION
+-{
+-    gcv2D_0_DEGREE = 0,
+-    gcv2D_90_DEGREE,
+-    gcv2D_180_DEGREE,
+-    gcv2D_270_DEGREE,
+-    gcv2D_X_FLIP,
+-    gcv2D_Y_FLIP
++    /* Default setting is for src. gcv2D_YUV_DST
++        can be ORed to set dst.
++    */
++    gcv2D_YUV_DST = 0x80000000,
+ }
+-gce2D_ORIENTATION;
++gce2D_YUV_COLOR_MODE;
+ 
+ typedef enum _gce2D_COMMAND
+ {
+@@ -656,21 +674,39 @@ typedef enum _gce2D_TILE_STATUS_CONFIG
+     gcv2D_TSC_ENABLE        = 0x00000001,
+     gcv2D_TSC_COMPRESSED    = 0x00000002,
+     gcv2D_TSC_DOWN_SAMPLER  = 0x00000004,
++    gcv2D_TSC_2D_COMPRESSED = 0x00000008,
+ }
+ gce2D_TILE_STATUS_CONFIG;
+ 
+ typedef enum _gce2D_QUERY
+ {
+-    gcv2D_QUERY_RGB_ADDRESS_MAX_ALIGN       = 0,
+-    gcv2D_QUERY_RGB_STRIDE_MAX_ALIGN,
+-    gcv2D_QUERY_YUV_ADDRESS_MAX_ALIGN,
+-    gcv2D_QUERY_YUV_STRIDE_MAX_ALIGN,
++    gcv2D_QUERY_RGB_ADDRESS_MIN_ALIGN       = 0,
++    gcv2D_QUERY_RGB_STRIDE_MIN_ALIGN,
++    gcv2D_QUERY_YUV_ADDRESS_MIN_ALIGN,
++    gcv2D_QUERY_YUV_STRIDE_MIN_ALIGN,
+ }
+ gce2D_QUERY;
+ 
++typedef enum _gce2D_SUPER_TILE_VERSION
++{
++    gcv2D_SUPER_TILE_VERSION_V1       = 1,
++    gcv2D_SUPER_TILE_VERSION_V2       = 2,
++    gcv2D_SUPER_TILE_VERSION_V3       = 3,
++}
++gce2D_SUPER_TILE_VERSION;
++
+ typedef enum _gce2D_STATE
+ {
+     gcv2D_STATE_SPECIAL_FILTER_MIRROR_MODE       = 1,
++    gcv2D_STATE_SUPER_TILE_VERSION,
++    gcv2D_STATE_EN_GAMMA,
++    gcv2D_STATE_DE_GAMMA,
++    gcv2D_STATE_MULTI_SRC_BLIT_UNIFIED_DST_RECT,
++
++    gcv2D_STATE_ARRAY_EN_GAMMA                   = 0x10001,
++    gcv2D_STATE_ARRAY_DE_GAMMA,
++    gcv2D_STATE_ARRAY_CSC_YUV_TO_RGB,
++    gcv2D_STATE_ARRAY_CSC_RGB_TO_YUV,
+ }
+ gce2D_STATE;
+ 
+@@ -809,6 +845,15 @@ typedef enum _gceUSER_SIGNAL_COMMAND_CODES
+ }
+ gceUSER_SIGNAL_COMMAND_CODES;
+ 
++/* Sync point command codes. */
++typedef enum _gceSYNC_POINT_COMMAND_CODES
++{
++    gcvSYNC_POINT_CREATE,
++    gcvSYNC_POINT_DESTROY,
++    gcvSYNC_POINT_SIGNAL,
++}
++gceSYNC_POINT_COMMAND_CODES;
++
+ /* Event locations. */
+ typedef enum _gceKERNEL_WHERE
+ {
+@@ -848,6 +893,44 @@ typedef enum _gceDEBUG_MESSAGE_TYPE
+ }
+ gceDEBUG_MESSAGE_TYPE;
+ 
++typedef enum _gceSPECIAL_HINT
++{
++    gceSPECIAL_HINT0,
++    gceSPECIAL_HINT1,
++    gceSPECIAL_HINT2,
++    gceSPECIAL_HINT3,
++    /* For disable dynamic stream/index */
++    gceSPECIAL_HINT4
++}
++gceSPECIAL_HINT;
++
++typedef enum _gceMACHINECODE
++{
++    gcvMACHINECODE_HOVERJET0       = 0x0,
++    gcvMACHINECODE_HOVERJET1      ,
++
++    gcvMACHINECODE_TAIJI0         ,
++    gcvMACHINECODE_TAIJI1         ,
++    gcvMACHINECODE_TAIJI2         ,
++
++    gcvMACHINECODE_ANTUTU0        ,
++
++    gcvMACHINECODE_GLB27_RELEASE_0,
++    gcvMACHINECODE_GLB27_RELEASE_1,
++
++    gcvMACHINECODE_WAVESCAPE0     ,
++    gcvMACHINECODE_WAVESCAPE1     ,
++
++    gcvMACHINECODE_NENAMARKV2_4_0 ,
++    gcvMACHINECODE_NENAMARKV2_4_1 ,
++
++    gcvMACHINECODE_GLB25_RELEASE_0,
++    gcvMACHINECODE_GLB25_RELEASE_1,
++    gcvMACHINECODE_GLB25_RELEASE_2,
++}
++gceMACHINECODE;
++
++
+ /******************************************************************************\
+ ****************************** Object Declarations *****************************
+ \******************************************************************************/
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
+index 9e2a8db..b53b618 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h
+@@ -46,7 +46,7 @@
+         This define enables the profiler.
+ */
+ #ifndef VIVANTE_PROFILER
+-#   define VIVANTE_PROFILER                     0
++#   define VIVANTE_PROFILER                     1
+ #endif
+ 
+ #ifndef VIVANTE_PROFILER_PERDRAW
+@@ -54,6 +54,15 @@
+ #endif
+ 
+ /*
++    VIVANTE_PROFILER_CONTEXT
++
++        This define enables the profiler according to each hw context.
++*/
++#ifndef VIVANTE_PROFILER_CONTEXT
++#   define VIVANTE_PROFILER_CONTEXT             1
++#endif
++
++/*
+     gcdUSE_VG
+ 
+         Enable VG HAL layer (only for GC350).
+@@ -729,7 +738,24 @@
+         Use linear buffer for GPU apps so HWC can do 2D composition.
+ */
+ #ifndef gcdGPU_LINEAR_BUFFER_ENABLED
+-#   define gcdGPU_LINEAR_BUFFER_ENABLED         0
++#   define gcdGPU_LINEAR_BUFFER_ENABLED         1
++#endif
++
++/*
++    gcdENABLE_RENDER_INTO_WINDOW
++
++        Enable Render-Into-Window (ie, No-Resolve) feature on android.
++        NOTE that even if enabled, it still depends on hardware feature and
++        android application behavior. When hardware feature or application
++        behavior can not support render into window mode, it will fail back
++        to normal mode.
++        When Render-Into-Window is finally used, window back buffer of android
++        applications will be allocated matching render target tiling format.
++        Otherwise buffer tiling is decided by the above option
++        'gcdGPU_LINEAR_BUFFER_ENABLED'.
++*/
++#ifndef gcdENABLE_RENDER_INTO_WINDOW
++#   define gcdENABLE_RENDER_INTO_WINDOW         1
+ #endif
+ 
+ /*
+@@ -758,7 +784,11 @@
+ #endif
+ 
+ #ifndef gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST
+-#   define  gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST    0
++#   ifdef ANDROID
++#      define  gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST    1
++#   else
++#      define  gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST    0
++#   endif
+ #endif
+ 
+ #ifndef gcdENABLE_PE_DITHER_FIX
+@@ -800,6 +830,10 @@
+ #   define gcdDISALBE_EARLY_EARLY_Z             1
+ #endif
+ 
++#ifndef gcdSHADER_SRC_BY_MACHINECODE
++#   define gcdSHADER_SRC_BY_MACHINECODE         1
++#endif
++
+ /*
+     gcdLINK_QUEUE_SIZE
+ 
+@@ -849,11 +883,20 @@
+ #define gcdUSE_NPOT_PATCH                       1
+ #endif
+ 
+-
+ #ifndef gcdSYNC
+ #   define gcdSYNC                              1
+ #endif
+ 
++#ifndef gcdENABLE_SPECIAL_HINT3
++#   define gcdENABLE_SPECIAL_HINT3               1
++#endif
++
++#if defined(ANDROID)
++#ifndef gcdPRE_ROTATION
++#   define gcdPRE_ROTATION                      1
++#endif
++#endif
++
+ /*
+     gcdDVFS
+ 
+@@ -866,4 +909,39 @@
+ #   define gcdDVFS_POLLING_TIME                  (gcdDVFS_ANAYLSE_WINDOW * 4)
+ #endif
+ 
++/*
++    gcdANDROID_NATIVE_FENCE_SYNC
++
++        Enable android native fence sync. It is introduced since jellybean-4.2.
++        Depends on linux kernel option: CONFIG_SYNC.
++
++        0: Disabled
++        1: Build framework for native fence sync feature, and EGL extension
++        2: Enable async swap buffers for client
++           * Native fence sync for client 'queueBuffer' in EGL, which is
++             'acquireFenceFd' for layer in compositor side.
++        3. Enable async hwcomposer composition.
++           * 'releaseFenceFd' for layer in compositor side, which is native
++             fence sync when client 'dequeueBuffer'
++           * Native fence sync for compositor 'queueBuffer' in EGL, which is
++             'acquireFenceFd' for framebuffer target for DC
++ */
++#ifndef gcdANDROID_NATIVE_FENCE_SYNC
++#   define gcdANDROID_NATIVE_FENCE_SYNC        0
++#endif
++
++#ifndef gcdFORCE_MIPMAP
++#   define gcdFORCE_MIPMAP                     0
++#endif
++
++/*
++    gcdFORCE_GAL_LOAD_TWICE
++
++        When non-zero, each thread except the main one will load libGAL.so twice to avoid potential segmetantion fault when app using dlopen/dlclose.
++        If threads exit arbitrarily, libGAL.so may not unload until the process quit.
++ */
++#ifndef gcdFORCE_GAL_LOAD_TWICE
++#   define gcdFORCE_GAL_LOAD_TWICE             0
++#endif
++
+ #endif /* __gc_hal_options_h_ */
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
+index 3e450ba..aed73aa 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
+@@ -45,509 +45,115 @@ extern "C" {
+ #define gcdNEW_PROFILER_FILE    1
+ #endif
+ 
+-/* OpenGL ES11 API IDs. */
+-#define	ES11_ACTIVETEXTURE				1
+-#define	ES11_ALPHAFUNC					(ES11_ACTIVETEXTURE				+ 1)
+-#define	ES11_ALPHAFUNCX					(ES11_ALPHAFUNC					+ 1)
+-#define	ES11_BINDBUFFER					(ES11_ALPHAFUNCX 				+ 1)
+-#define	ES11_BINDTEXTURE				(ES11_BINDBUFFER 				+ 1)
+-#define	ES11_BLENDFUNC					(ES11_BINDTEXTURE				+ 1)
+-#define	ES11_BUFFERDATA					(ES11_BLENDFUNC					+ 1)
+-#define	ES11_BUFFERSUBDATA				(ES11_BUFFERDATA				+ 1)
+-#define	ES11_CLEAR						(ES11_BUFFERSUBDATA				+ 1)
+-#define	ES11_CLEARCOLOR					(ES11_CLEAR						+ 1)
+-#define	ES11_CLEARCOLORX				(ES11_CLEARCOLOR				+ 1)
+-#define	ES11_CLEARDEPTHF				(ES11_CLEARCOLORX 				+ 1)
+-#define	ES11_CLEARDEPTHX				(ES11_CLEARDEPTHF 				+ 1)
+-#define	ES11_CLEARSTENCIL				(ES11_CLEARDEPTHX 				+ 1)
+-#define	ES11_CLIENTACTIVETEXTURE    	(ES11_CLEARSTENCIL				+ 1)
+-#define	ES11_CLIPPLANEF      			(ES11_CLIENTACTIVETEXTURE		+ 1)
+-#define	ES11_CLIPPLANEX      			(ES11_CLIPPLANEF       			+ 1)
+-#define	ES11_COLOR4F 					(ES11_CLIPPLANEX       			+ 1)
+-#define	ES11_COLOR4UB        			(ES11_COLOR4F					+ 1)
+-#define	ES11_COLOR4X 					(ES11_COLOR4UB					+ 1)
+-#define	ES11_COLORMASK       			(ES11_COLOR4X					+ 1)
+-#define	ES11_COLORPOINTER    			(ES11_COLORMASK        			+ 1)
+-#define	ES11_COMPRESSEDTEXIMAGE2D   	(ES11_COLORPOINTER     			+ 1)
+-#define	ES11_COMPRESSEDTEXSUBIMAGE2D	(ES11_COMPRESSEDTEXIMAGE2D    	+ 1)
+-#define	ES11_COPYTEXIMAGE2D  			(ES11_COMPRESSEDTEXSUBIMAGE2D 	+ 1)
+-#define	ES11_COPYTEXSUBIMAGE2D      	(ES11_COPYTEXIMAGE2D   			+ 1)
+-#define	ES11_CULLFACE        			(ES11_COPYTEXSUBIMAGE2D			+ 1)
+-#define	ES11_DELETEBUFFERS   			(ES11_CULLFACE         			+ 1)
+-#define	ES11_DELETETEXTURES  			(ES11_DELETEBUFFERS    			+ 1)
+-#define	ES11_DEPTHFUNC       			(ES11_DELETETEXTURES   			+ 1)
+-#define	ES11_DEPTHMASK       			(ES11_DEPTHFUNC        			+ 1)
+-#define	ES11_DEPTHRANGEF     			(ES11_DEPTHMASK        			+ 1)
+-#define	ES11_DEPTHRANGEX     			(ES11_DEPTHRANGEF      			+ 1)
+-#define	ES11_DISABLE 					(ES11_DEPTHRANGEX      			+ 1)
+-#define	ES11_DISABLECLIENTSTATE     	(ES11_DISABLE					+ 1)
+-#define	ES11_DRAWARRAYS      			(ES11_DISABLECLIENTSTATE		+ 1)
+-#define	ES11_DRAWELEMENTS    			(ES11_DRAWARRAYS       			+ 1)
+-#define	ES11_ENABLE  					(ES11_DRAWELEMENTS     			+ 1)
+-#define	ES11_ENABLECLIENTSTATE      	(ES11_ENABLE					+ 1)
+-#define	ES11_FINISH  					(ES11_ENABLECLIENTSTATE			+ 1)
+-#define	ES11_FLUSH   					(ES11_FINISH   					+ 1)
+-#define	ES11_FOGF    					(ES11_FLUSH    					+ 1)
+-#define	ES11_FOGFV   					(ES11_FOGF     					+ 1)
+-#define	ES11_FOGX    					(ES11_FOGFV    					+ 1)
+-#define	ES11_FOGXV   					(ES11_FOGX     					+ 1)
+-#define	ES11_FRONTFACE       			(ES11_FOGXV    					+ 1)
+-#define	ES11_FRUSTUMF        			(ES11_FRONTFACE        			+ 1)
+-#define	ES11_FRUSTUMX        			(ES11_FRUSTUMF         			+ 1)
+-#define	ES11_GENBUFFERS      			(ES11_FRUSTUMX         			+ 1)
+-#define	ES11_GENTEXTURES     			(ES11_GENBUFFERS       			+ 1)
+-#define	ES11_GETBOOLEANV     			(ES11_GENTEXTURES      			+ 1)
+-#define	ES11_GETBUFFERPARAMETERIV   	(ES11_GETBOOLEANV      			+ 1)
+-#define	ES11_GETCLIPPLANEF   			(ES11_GETBUFFERPARAMETERIV		+ 1)
+-#define	ES11_GETCLIPPLANEX   			(ES11_GETCLIPPLANEF    			+ 1)
+-#define	ES11_GETERROR        			(ES11_GETCLIPPLANEX    			+ 1)
+-#define	ES11_GETFIXEDV       			(ES11_GETERROR         			+ 1)
+-#define	ES11_GETFLOATV       			(ES11_GETFIXEDV        			+ 1)
+-#define	ES11_GETINTEGERV     			(ES11_GETFLOATV        			+ 1)
+-#define	ES11_GETLIGHTFV      			(ES11_GETINTEGERV      			+ 1)
+-#define	ES11_GETLIGHTXV      			(ES11_GETLIGHTFV       			+ 1)
+-#define	ES11_GETMATERIALFV   			(ES11_GETLIGHTXV       			+ 1)
+-#define	ES11_GETMATERIALXV   			(ES11_GETMATERIALFV    			+ 1)
+-#define	ES11_GETPOINTERV     			(ES11_GETMATERIALXV    			+ 1)
+-#define	ES11_GETSTRING       			(ES11_GETPOINTERV      			+ 1)
+-#define	ES11_GETTEXENVFV     			(ES11_GETSTRING        			+ 1)
+-#define	ES11_GETTEXENVIV     			(ES11_GETTEXENVFV      			+ 1)
+-#define	ES11_GETTEXENVXV     			(ES11_GETTEXENVIV      			+ 1)
+-#define	ES11_GETTEXPARAMETERFV      	(ES11_GETTEXENVXV      			+ 1)
+-#define	ES11_GETTEXPARAMETERIV      	(ES11_GETTEXPARAMETERFV       	+ 1)
+-#define	ES11_GETTEXPARAMETERXV      	(ES11_GETTEXPARAMETERIV       	+ 1)
+-#define	ES11_HINT    					(ES11_GETTEXPARAMETERXV       	+ 1)
+-#define	ES11_ISBUFFER        			(ES11_HINT     					+ 1)
+-#define	ES11_ISENABLED       			(ES11_ISBUFFER 			        + 1)
+-#define	ES11_ISTEXTURE       			(ES11_ISENABLED			        + 1)
+-#define	ES11_LIGHTF  					(ES11_ISTEXTURE			        + 1)
+-#define	ES11_LIGHTFV 					(ES11_LIGHTF   					+ 1)
+-#define	ES11_LIGHTMODELF     			(ES11_LIGHTFV  					+ 1)
+-#define	ES11_LIGHTMODELFV    			(ES11_LIGHTMODELF      			+ 1)
+-#define	ES11_LIGHTMODELX     			(ES11_LIGHTMODELFV     			+ 1)
+-#define	ES11_LIGHTMODELXV    			(ES11_LIGHTMODELX      			+ 1)
+-#define	ES11_LIGHTX  					(ES11_LIGHTMODELXV     			+ 1)
+-#define	ES11_LIGHTXV 					(ES11_LIGHTX   					+ 1)
+-#define	ES11_LINEWIDTH       			(ES11_LIGHTXV  					+ 1)
+-#define	ES11_LINEWIDTHX      			(ES11_LINEWIDTH        			+ 1)
+-#define	ES11_LOADIDENTITY    			(ES11_LINEWIDTHX       			+ 1)
+-#define	ES11_LOADMATRIXF     			(ES11_LOADIDENTITY     			+ 1)
+-#define	ES11_LOADMATRIXX     			(ES11_LOADMATRIXF      			+ 1)
+-#define	ES11_LOGICOP 					(ES11_LOADMATRIXX      			+ 1)
+-#define	ES11_MATERIALF       			(ES11_LOGICOP					+ 1)
+-#define	ES11_MATERIALFV      			(ES11_MATERIALF        			+ 1)
+-#define	ES11_MATERIALX       			(ES11_MATERIALFV       			+ 1)
+-#define	ES11_MATERIALXV      			(ES11_MATERIALX        			+ 1)
+-#define	ES11_MATRIXMODE      			(ES11_MATERIALXV       			+ 1)
+-#define	ES11_MULTITEXCOORD4F 			(ES11_MATRIXMODE       			+ 1)
+-#define	ES11_MULTITEXCOORD4X 			(ES11_MULTITEXCOORD4F  			+ 1)
+-#define	ES11_MULTMATRIXF     			(ES11_MULTITEXCOORD4X  			+ 1)
+-#define	ES11_MULTMATRIXX     			(ES11_MULTMATRIXF      			+ 1)
+-#define	ES11_NORMAL3F        			(ES11_MULTMATRIXX      			+ 1)
+-#define	ES11_NORMAL3X        			(ES11_NORMAL3F         			+ 1)
+-#define	ES11_NORMALPOINTER   			(ES11_NORMAL3X         			+ 1)
+-#define	ES11_ORTHOF  					(ES11_NORMALPOINTER    			+ 1)
+-#define	ES11_ORTHOX  					(ES11_ORTHOF   					+ 1)
+-#define	ES11_PIXELSTOREI     			(ES11_ORTHOX   					+ 1)
+-#define	ES11_POINTPARAMETERF 			(ES11_PIXELSTOREI      			+ 1)
+-#define	ES11_POINTPARAMETERFV    		(ES11_POINTPARAMETERF  			+ 1)
+-#define	ES11_POINTPARAMETERX 			(ES11_POINTPARAMETERFV 			+ 1)
+-#define	ES11_POINTPARAMETERXV    		(ES11_POINTPARAMETERX  			+ 1)
+-#define	ES11_POINTSIZE       			(ES11_POINTPARAMETERXV 			+ 1)
+-#define	ES11_POINTSIZEX      			(ES11_POINTSIZE        			+ 1)
+-#define	ES11_POLYGONOFFSET   			(ES11_POINTSIZEX       			+ 1)
+-#define	ES11_POLYGONOFFSETX  			(ES11_POLYGONOFFSET    			+ 1)
+-#define	ES11_POPMATRIX       			(ES11_POLYGONOFFSETX   			+ 1)
+-#define	ES11_PUSHMATRIX      			(ES11_POPMATRIX        			+ 1)
+-#define	ES11_READPIXELS      			(ES11_PUSHMATRIX       			+ 1)
+-#define	ES11_ROTATEF 					(ES11_READPIXELS       			+ 1)
+-#define	ES11_ROTATEX 					(ES11_ROTATEF  					+ 1)
+-#define	ES11_SAMPLECOVERAGE  			(ES11_ROTATEX  					+ 1)
+-#define	ES11_SAMPLECOVERAGEX 			(ES11_SAMPLECOVERAGE   			+ 1)
+-#define	ES11_SCALEF  					(ES11_SAMPLECOVERAGEX  			+ 1)
+-#define	ES11_SCALEX  					(ES11_SCALEF   					+ 1)
+-#define	ES11_SCISSOR 					(ES11_SCALEX   					+ 1)
+-#define	ES11_SHADEMODEL      			(ES11_SCISSOR  					+ 1)
+-#define	ES11_STENCILFUNC     			(ES11_SHADEMODEL       			+ 1)
+-#define	ES11_STENCILMASK     			(ES11_STENCILFUNC      			+ 1)
+-#define	ES11_STENCILOP       			(ES11_STENCILMASK      			+ 1)
+-#define	ES11_TEXCOORDPOINTER 			(ES11_STENCILOP        			+ 1)
+-#define	ES11_TEXENVF 					(ES11_TEXCOORDPOINTER  			+ 1)
+-#define	ES11_TEXENVFV     				(ES11_TEXENVF					+ 1)
+-#define	ES11_TEXENVI 					(ES11_TEXENVFV					+ 1)
+-#define	ES11_TEXENVIV     				(ES11_TEXENVI  					+ 1)
+-#define	ES11_TEXENVX 					(ES11_TEXENVIV 					+ 1)
+-#define	ES11_TEXENVXV        			(ES11_TEXENVX  					+ 1)
+-#define	ES11_TEXIMAGE2D      			(ES11_TEXENVXV         			+ 1)
+-#define	ES11_TEXPARAMETERF   			(ES11_TEXIMAGE2D       			+ 1)
+-#define	ES11_TEXPARAMETERFV  			(ES11_TEXPARAMETERF    			+ 1)
+-#define	ES11_TEXPARAMETERI   			(ES11_TEXPARAMETERFV   			+ 1)
+-#define	ES11_TEXPARAMETERIV  			(ES11_TEXPARAMETERI    			+ 1)
+-#define	ES11_TEXPARAMETERX   			(ES11_TEXPARAMETERIV   			+ 1)
+-#define	ES11_TEXPARAMETERXV  			(ES11_TEXPARAMETERX    			+ 1)
+-#define	ES11_TEXSUBIMAGE2D   			(ES11_TEXPARAMETERXV   			+ 1)
+-#define	ES11_TRANSLATEF      			(ES11_TEXSUBIMAGE2D    			+ 1)
+-#define	ES11_TRANSLATEX      			(ES11_TRANSLATEF       			+ 1)
+-#define	ES11_VERTEXPOINTER   			(ES11_TRANSLATEX       			+ 1)
+-#define	ES11_VIEWPORT        			(ES11_VERTEXPOINTER    			+ 1)
+-#define ES11_BLENDEQUATIONOES           (ES11_VIEWPORT         			+ 1)
+-#define ES11_BLENDFUNCSEPERATEOES       (ES11_BLENDEQUATIONOES       	+ 1)
+-#define ES11_BLENDEQUATIONSEPARATEOES   (ES11_BLENDFUNCSEPERATEOES    	+ 1)
+-#define ES11_GLMAPBUFFEROES             (ES11_BLENDEQUATIONSEPARATEOES 	+ 1)
+-#define ES11_GLUNMAPBUFFEROES           (ES11_GLMAPBUFFEROES     		+ 1)
+-#define ES11_GLGETBUFFERPOINTERVOES     (ES11_GLUNMAPBUFFEROES         	+ 1)
+-#define	ES11_CALLS   					(ES11_GLGETBUFFERPOINTERVOES   	+ 1)
+-#define	ES11_DRAWCALLS       			(ES11_CALLS						+ 1)
+-#define	ES11_STATECHANGECALLS    		(ES11_DRAWCALLS					+ 1)
+-#define	ES11_POINTCOUNT      			(ES11_STATECHANGECALLS			+ 1)
+-#define	ES11_LINECOUNT       			(ES11_POINTCOUNT       			+ 1)
+-#define	ES11_TRIANGLECOUNT   			(ES11_LINECOUNT        			+ 1)
+-
+-/* OpenGL ES2X API IDs. */
+-#define	ES20_ACTIVETEXTURE				1
+-#define	ES20_ATTACHSHADER							(ES20_ACTIVETEXTURE							+	1)
+-#define	ES20_BINDATTRIBLOCATION						(ES20_ATTACHSHADER							+	1)
+-#define	ES20_BINDBUFFER								(ES20_BINDATTRIBLOCATION					+	1)
+-#define	ES20_BINDFRAMEBUFFER						(ES20_BINDBUFFER							+	1)
+-#define	ES20_BINDRENDERBUFFER						(ES20_BINDFRAMEBUFFER						+	1)
+-#define	ES20_BINDTEXTURE							(ES20_BINDRENDERBUFFER						+	1)
+-#define	ES20_BLENDCOLOR								(ES20_BINDTEXTURE							+	1)
+-#define	ES20_BLENDEQUATION							(ES20_BLENDCOLOR							+	1)
+-#define	ES20_BLENDEQUATIONSEPARATE					(ES20_BLENDEQUATION							+	1)
+-#define	ES20_BLENDFUNC								(ES20_BLENDEQUATIONSEPARATE					+	1)
+-#define	ES20_BLENDFUNCSEPARATE						(ES20_BLENDFUNC								+	1)
+-#define	ES20_BUFFERDATA								(ES20_BLENDFUNCSEPARATE						+	1)
+-#define	ES20_BUFFERSUBDATA							(ES20_BUFFERDATA							+	1)
+-#define	ES20_CHECKFRAMEBUFFERSTATUS					(ES20_BUFFERSUBDATA							+	1)
+-#define	ES20_CLEAR									(ES20_CHECKFRAMEBUFFERSTATUS				+	1)
+-#define	ES20_CLEARCOLOR								(ES20_CLEAR									+	1)
+-#define	ES20_CLEARDEPTHF							(ES20_CLEARCOLOR							+	1)
+-#define	ES20_CLEARSTENCIL							(ES20_CLEARDEPTHF							+	1)
+-#define	ES20_COLORMASK								(ES20_CLEARSTENCIL							+	1)
+-#define	ES20_COMPILESHADER							(ES20_COLORMASK								+	1)
+-#define	ES20_COMPRESSEDTEXIMAGE2D					(ES20_COMPILESHADER							+	1)
+-#define	ES20_COMPRESSEDTEXSUBIMAGE2D				(ES20_COMPRESSEDTEXIMAGE2D					+	1)
+-#define	ES20_COPYTEXIMAGE2D							(ES20_COMPRESSEDTEXSUBIMAGE2D				+	1)
+-#define	ES20_COPYTEXSUBIMAGE2D						(ES20_COPYTEXIMAGE2D						+	1)
+-#define	ES20_CREATEPROGRAM							(ES20_COPYTEXSUBIMAGE2D						+	1)
+-#define	ES20_CREATESHADER							(ES20_CREATEPROGRAM							+	1)
+-#define	ES20_CULLFACE								(ES20_CREATESHADER							+	1)
+-#define	ES20_DELETEBUFFERS							(ES20_CULLFACE								+	1)
+-#define	ES20_DELETEFRAMEBUFFERS						(ES20_DELETEBUFFERS							+	1)
+-#define	ES20_DELETEPROGRAM							(ES20_DELETEFRAMEBUFFERS					+	1)
+-#define	ES20_DELETERENDERBUFFERS					(ES20_DELETEPROGRAM							+	1)
+-#define	ES20_DELETESHADER							(ES20_DELETERENDERBUFFERS					+	1)
+-#define	ES20_DELETETEXTURES							(ES20_DELETESHADER							+	1)
+-#define	ES20_DEPTHFUNC								(ES20_DELETETEXTURES						+	1)
+-#define	ES20_DEPTHMASK								(ES20_DEPTHFUNC								+	1)
+-#define	ES20_DEPTHRANGEF							(ES20_DEPTHMASK								+	1)
+-#define	ES20_DETACHSHADER							(ES20_DEPTHRANGEF							+	1)
+-#define	ES20_DISABLE								(ES20_DETACHSHADER							+	1)
+-#define	ES20_DISABLEVERTEXATTRIBARRAY				(ES20_DISABLE								+	1)
+-#define	ES20_DRAWARRAYS								(ES20_DISABLEVERTEXATTRIBARRAY				+	1)
+-#define	ES20_DRAWELEMENTS							(ES20_DRAWARRAYS							+	1)
+-#define	ES20_ENABLE									(ES20_DRAWELEMENTS							+	1)
+-#define	ES20_ENABLEVERTEXATTRIBARRAY				(ES20_ENABLE								+	1)
+-#define	ES20_FINISH									(ES20_ENABLEVERTEXATTRIBARRAY				+	1)
+-#define	ES20_FLUSH									(ES20_FINISH								+	1)
+-#define	ES20_FRAMEBUFFERRENDERBUFFER				(ES20_FLUSH									+	1)
+-#define	ES20_FRAMEBUFFERTEXTURE2D					(ES20_FRAMEBUFFERRENDERBUFFER				+	1)
+-#define	ES20_FRONTFACE								(ES20_FRAMEBUFFERTEXTURE2D					+	1)
+-#define	ES20_GENBUFFERS								(ES20_FRONTFACE								+	1)
+-#define	ES20_GENERATEMIPMAP							(ES20_GENBUFFERS							+	1)
+-#define	ES20_GENFRAMEBUFFERS						(ES20_GENERATEMIPMAP						+	1)
+-#define	ES20_GENRENDERBUFFERS						(ES20_GENFRAMEBUFFERS						+	1)
+-#define	ES20_GENTEXTURES							(ES20_GENRENDERBUFFERS						+	1)
+-#define	ES20_GETACTIVEATTRIB						(ES20_GENTEXTURES							+	1)
+-#define	ES20_GETACTIVEUNIFORM						(ES20_GETACTIVEATTRIB						+	1)
+-#define	ES20_GETATTACHEDSHADERS						(ES20_GETACTIVEUNIFORM						+	1)
+-#define	ES20_GETATTRIBLOCATION						(ES20_GETATTACHEDSHADERS					+	1)
+-#define	ES20_GETBOOLEANV							(ES20_GETATTRIBLOCATION						+	1)
+-#define	ES20_GETBUFFERPARAMETERIV					(ES20_GETBOOLEANV							+	1)
+-#define	ES20_GETERROR								(ES20_GETBUFFERPARAMETERIV					+	1)
+-#define	ES20_GETFLOATV								(ES20_GETERROR								+	1)
+-#define	ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV	(ES20_GETFLOATV								+	1)
+-#define	ES20_GETINTEGERV							(ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV	+	1)
+-#define	ES20_GETPROGRAMIV							(ES20_GETINTEGERV							+	1)
+-#define	ES20_GETPROGRAMINFOLOG						(ES20_GETPROGRAMIV							+	1)
+-#define	ES20_GETRENDERBUFFERPARAMETERIV				(ES20_GETPROGRAMINFOLOG						+	1)
+-#define	ES20_GETSHADERIV							(ES20_GETRENDERBUFFERPARAMETERIV			+	1)
+-#define	ES20_GETSHADERINFOLOG						(ES20_GETSHADERIV							+	1)
+-#define	ES20_GETSHADERPRECISIONFORMAT				(ES20_GETSHADERINFOLOG						+	1)
+-#define	ES20_GETSHADERSOURCE						(ES20_GETSHADERPRECISIONFORMAT				+	1)
+-#define	ES20_GETSTRING								(ES20_GETSHADERSOURCE						+	1)
+-#define	ES20_GETTEXPARAMETERFV						(ES20_GETSTRING								+	1)
+-#define	ES20_GETTEXPARAMETERIV						(ES20_GETTEXPARAMETERFV						+	1)
+-#define	ES20_GETUNIFORMFV							(ES20_GETTEXPARAMETERIV						+	1)
+-#define	ES20_GETUNIFORMIV							(ES20_GETUNIFORMFV							+	1)
+-#define	ES20_GETUNIFORMLOCATION						(ES20_GETUNIFORMIV							+	1)
+-#define	ES20_GETVERTEXATTRIBFV						(ES20_GETUNIFORMLOCATION					+	1)
+-#define	ES20_GETVERTEXATTRIBIV						(ES20_GETVERTEXATTRIBFV						+	1)
+-#define	ES20_GETVERTEXATTRIBPOINTERV				(ES20_GETVERTEXATTRIBIV						+	1)
+-#define	ES20_HINT									(ES20_GETVERTEXATTRIBPOINTERV				+	1)
+-#define	ES20_ISBUFFER								(ES20_HINT									+	1)
+-#define	ES20_ISENABLED								(ES20_ISBUFFER								+	1)
+-#define	ES20_ISFRAMEBUFFER							(ES20_ISENABLED								+	1)
+-#define	ES20_ISPROGRAM								(ES20_ISFRAMEBUFFER							+	1)
+-#define	ES20_ISRENDERBUFFER							(ES20_ISPROGRAM								+	1)
+-#define	ES20_ISSHADER								(ES20_ISRENDERBUFFER						+	1)
+-#define	ES20_ISTEXTURE								(ES20_ISSHADER								+	1)
+-#define	ES20_LINEWIDTH								(ES20_ISTEXTURE								+	1)
+-#define	ES20_LINKPROGRAM							(ES20_LINEWIDTH								+	1)
+-#define	ES20_PIXELSTOREI							(ES20_LINKPROGRAM							+	1)
+-#define	ES20_POLYGONOFFSET							(ES20_PIXELSTOREI							+	1)
+-#define	ES20_READPIXELS								(ES20_POLYGONOFFSET							+	1)
+-#define	ES20_RELEASESHADERCOMPILER					(ES20_READPIXELS							+	1)
+-#define	ES20_RENDERBUFFERSTORAGE					(ES20_RELEASESHADERCOMPILER					+	1)
+-#define	ES20_SAMPLECOVERAGE							(ES20_RENDERBUFFERSTORAGE					+	1)
+-#define	ES20_SCISSOR								(ES20_SAMPLECOVERAGE						+	1)
+-#define	ES20_SHADERBINARY							(ES20_SCISSOR								+	1)
+-#define	ES20_SHADERSOURCE							(ES20_SHADERBINARY							+	1)
+-#define	ES20_STENCILFUNC							(ES20_SHADERSOURCE							+	1)
+-#define	ES20_STENCILFUNCSEPARATE					(ES20_STENCILFUNC							+	1)
+-#define	ES20_STENCILMASK							(ES20_STENCILFUNCSEPARATE					+	1)
+-#define	ES20_STENCILMASKSEPARATE					(ES20_STENCILMASK							+	1)
+-#define	ES20_STENCILOP								(ES20_STENCILMASKSEPARATE					+	1)
+-#define	ES20_STENCILOPSEPARATE						(ES20_STENCILOP								+	1)
+-#define	ES20_TEXIMAGE2D								(ES20_STENCILOPSEPARATE						+	1)
+-#define	ES20_TEXPARAMETERF							(ES20_TEXIMAGE2D							+	1)
+-#define	ES20_TEXPARAMETERFV							(ES20_TEXPARAMETERF							+	1)
+-#define	ES20_TEXPARAMETERI							(ES20_TEXPARAMETERFV						+	1)
+-#define	ES20_TEXPARAMETERIV							(ES20_TEXPARAMETERI							+	1)
+-#define	ES20_TEXSUBIMAGE2D							(ES20_TEXPARAMETERIV						+	1)
+-#define	ES20_UNIFORM1F								(ES20_TEXSUBIMAGE2D							+	1)
+-#define	ES20_UNIFORM1FV								(ES20_UNIFORM1F								+	1)
+-#define	ES20_UNIFORM1I								(ES20_UNIFORM1FV							+	1)
+-#define	ES20_UNIFORM1IV								(ES20_UNIFORM1I								+	1)
+-#define	ES20_UNIFORM2F								(ES20_UNIFORM1IV							+	1)
+-#define	ES20_UNIFORM2FV								(ES20_UNIFORM2F								+	1)
+-#define	ES20_UNIFORM2I								(ES20_UNIFORM2FV							+	1)
+-#define	ES20_UNIFORM2IV								(ES20_UNIFORM2I								+	1)
+-#define	ES20_UNIFORM3F								(ES20_UNIFORM2IV							+	1)
+-#define	ES20_UNIFORM3FV								(ES20_UNIFORM3F								+	1)
+-#define	ES20_UNIFORM3I								(ES20_UNIFORM3FV							+	1)
+-#define	ES20_UNIFORM3IV								(ES20_UNIFORM3I								+	1)
+-#define	ES20_UNIFORM4F								(ES20_UNIFORM3IV							+	1)
+-#define	ES20_UNIFORM4FV								(ES20_UNIFORM4F								+	1)
+-#define	ES20_UNIFORM4I								(ES20_UNIFORM4FV							+	1)
+-#define	ES20_UNIFORM4IV								(ES20_UNIFORM4I								+	1)
+-#define	ES20_UNIFORMMATRIX2FV						(ES20_UNIFORM4IV							+	1)
+-#define	ES20_UNIFORMMATRIX3FV						(ES20_UNIFORMMATRIX2FV						+	1)
+-#define	ES20_UNIFORMMATRIX4FV						(ES20_UNIFORMMATRIX3FV						+	1)
+-#define	ES20_USEPROGRAM								(ES20_UNIFORMMATRIX4FV						+	1)
+-#define	ES20_VALIDATEPROGRAM						(ES20_USEPROGRAM							+	1)
+-#define	ES20_VERTEXATTRIB1F							(ES20_VALIDATEPROGRAM						+	1)
+-#define	ES20_VERTEXATTRIB1FV						(ES20_VERTEXATTRIB1F						+	1)
+-#define	ES20_VERTEXATTRIB2F							(ES20_VERTEXATTRIB1FV						+	1)
+-#define	ES20_VERTEXATTRIB2FV						(ES20_VERTEXATTRIB2F						+	1)
+-#define	ES20_VERTEXATTRIB3F							(ES20_VERTEXATTRIB2FV						+	1)
+-#define	ES20_VERTEXATTRIB3FV						(ES20_VERTEXATTRIB3F						+	1)
+-#define	ES20_VERTEXATTRIB4F							(ES20_VERTEXATTRIB3FV						+	1)
+-#define	ES20_VERTEXATTRIB4FV						(ES20_VERTEXATTRIB4F						+	1)
+-#define	ES20_VERTEXATTRIBPOINTER					(ES20_VERTEXATTRIB4FV						+	1)
+-#define	ES20_VIEWPORT								(ES20_VERTEXATTRIBPOINTER					+	1)
+-#define ES20_GETPROGRAMBINARYOES                    (ES20_VIEWPORT                              +   1)
+-#define ES20_PROGRAMBINARYOES                       (ES20_GETPROGRAMBINARYOES                   +   1)
+-#define ES20_TEXIMAGE3DOES                          (ES20_PROGRAMBINARYOES                      +   1)
+-#define ES20_TEXSUBIMAGE3DOES                       (ES20_TEXIMAGE3DOES                         +   1)
+-#define ES20_COPYSUBIMAGE3DOES                      (ES20_TEXSUBIMAGE3DOES                      +   1)
+-#define ES20_COMPRESSEDTEXIMAGE3DOES                (ES20_COPYSUBIMAGE3DOES                     +   1)
+-#define ES20_COMPRESSEDTEXSUBIMAGE3DOES             (ES20_COMPRESSEDTEXIMAGE3DOES               +   1)
+-#define ES20_FRAMEBUFFERTEXTURE3DOES                (ES20_COMPRESSEDTEXSUBIMAGE3DOES            +   1)
+-#define ES20_BINDVERTEXARRAYOES                     (ES20_FRAMEBUFFERTEXTURE3DOES               +   1)
+-#define ES20_GENVERTEXARRAYOES                      (ES20_BINDVERTEXARRAYOES                    +   1)
+-#define ES20_ISVERTEXARRAYOES                       (ES20_GENVERTEXARRAYOES                     +   1)
+-#define ES20_DELETEVERTEXARRAYOES                   (ES20_ISVERTEXARRAYOES                      +   1)
+-#define ES20_GLMAPBUFFEROES                         (ES20_DELETEVERTEXARRAYOES                  +   1)
+-#define ES20_GLUNMAPBUFFEROES                       (ES20_GLMAPBUFFEROES                        +   1)
+-#define ES20_GLGETBUFFERPOINTERVOES                 (ES20_GLUNMAPBUFFEROES                      +   1)
+-#define ES20_DISCARDFRAMEBUFFEREXT                  (ES20_GLGETBUFFERPOINTERVOES				+	1)
+-#define	ES20_CALLS									(ES20_DISCARDFRAMEBUFFEREXT 				+	1)
+-#define	ES20_DRAWCALLS								(ES20_CALLS									+	1)
+-#define	ES20_STATECHANGECALLS						(ES20_DRAWCALLS								+	1)
+-#define	ES20_POINTCOUNT								(ES20_STATECHANGECALLS						+	1)
+-#define	ES20_LINECOUNT								(ES20_POINTCOUNT							+	1)
+-#define	ES20_TRIANGLECOUNT							(ES20_LINECOUNT								+	1)
+-
+-/* OpenVG API IDs. */
+-#define	VG11_APPENDPATH			     1
+-#define	VG11_APPENDPATHDATA			(VG11_APPENDPATH				+ 1)
+-#define	VG11_CHILDIMAGE				(VG11_APPENDPATHDATA			+ 1)
+-#define	VG11_CLEAR					(VG11_CHILDIMAGE				+ 1)
+-#define	VG11_CLEARGLYPH				(VG11_CLEAR						+ 1)
+-#define	VG11_CLEARIMAGE				(VG11_CLEARGLYPH				+ 1)
+-#define	VG11_CLEARPATH				(VG11_CLEARIMAGE				+ 1)
+-#define	VG11_COLORMATRIX			(VG11_CLEARPATH					+ 1)
+-#define	VG11_CONVOLVE				(VG11_COLORMATRIX				+ 1)
+-#define	VG11_COPYIMAGE				(VG11_CONVOLVE					+ 1)
+-#define	VG11_COPYMASK				(VG11_COPYIMAGE					+ 1)
+-#define	VG11_COPYPIXELS				(VG11_COPYMASK					+ 1)
+-#define	VG11_CREATEFONT				(VG11_COPYPIXELS				+ 1)
+-#define	VG11_CREATEIMAGE			(VG11_CREATEFONT				+ 1)
+-#define	VG11_CREATEMASKLAYER		(VG11_CREATEIMAGE				+ 1)
+-#define	VG11_CREATEPAINT			(VG11_CREATEMASKLAYER			+ 1)
+-#define	VG11_CREATEPATH				(VG11_CREATEPAINT				+ 1)
+-#define	VG11_DESTROYFONT			(VG11_CREATEPATH				+ 1)
+-#define	VG11_DESTROYIMAGE			(VG11_DESTROYFONT				+ 1)
+-#define	VG11_DESTROYMASKLAYER		(VG11_DESTROYIMAGE				+ 1)
+-#define	VG11_DESTROYPAINT			(VG11_DESTROYMASKLAYER			+ 1)
+-#define	VG11_DESTROYPATH			(VG11_DESTROYPAINT				+ 1)
+-#define	VG11_DRAWGLYPH				(VG11_DESTROYPATH				+ 1)
+-#define	VG11_DRAWGLYPHS				(VG11_DRAWGLYPH					+ 1)
+-#define	VG11_DRAWIMAGE				(VG11_DRAWGLYPHS				+ 1)
+-#define	VG11_DRAWPATH				(VG11_DRAWIMAGE					+ 1)
+-#define	VG11_FILLMASKLAYER			(VG11_DRAWPATH					+ 1)
+-#define	VG11_FINISH					(VG11_FILLMASKLAYER				+ 1)
+-#define	VG11_FLUSH					(VG11_FINISH					+ 1)
+-#define	VG11_GAUSSIANBLUR			(VG11_FLUSH						+ 1)
+-#define	VG11_GETCOLOR				(VG11_GAUSSIANBLUR				+ 1)
+-#define	VG11_GETERROR				(VG11_GETCOLOR					+ 1)
+-#define	VG11_GETF					(VG11_GETERROR					+ 1)
+-#define	VG11_GETFV					(VG11_GETF						+ 1)
+-#define	VG11_GETI					(VG11_GETFV						+ 1)
+-#define	VG11_GETIMAGESUBDATA		(VG11_GETI						+ 1)
+-#define	VG11_GETIV					(VG11_GETIMAGESUBDATA			+ 1)
+-#define	VG11_GETMATRIX				(VG11_GETIV						+ 1)
+-#define	VG11_GETPAINT				(VG11_GETMATRIX					+ 1)
+-#define	VG11_GETPARAMETERF			(VG11_GETPAINT					+ 1)
+-#define	VG11_GETPARAMETERFV			(VG11_GETPARAMETERF				+ 1)
+-#define	VG11_GETPARAMETERI			(VG11_GETPARAMETERFV			+ 1)
+-#define	VG11_GETPARAMETERIV			(VG11_GETPARAMETERI				+ 1)
+-#define	VG11_GETPARAMETERVECTORSIZE	(VG11_GETPARAMETERIV			+ 1)
+-#define	VG11_GETPARENT				(VG11_GETPARAMETERVECTORSIZE	+ 1)
+-#define	VG11_GETPATHCAPABILITIES	(VG11_GETPARENT					+ 1)
+-#define	VG11_GETPIXELS				(VG11_GETPATHCAPABILITIES		+ 1)
+-#define	VG11_GETSTRING				(VG11_GETPIXELS					+ 1)
+-#define	VG11_GETVECTORSIZE			(VG11_GETSTRING					+ 1)
+-#define	VG11_HARDWAREQUERY			(VG11_GETVECTORSIZE				+ 1)
+-#define	VG11_IMAGESUBDATA			(VG11_HARDWAREQUERY				+ 1)
+-#define	VG11_INTERPOLATEPATH		(VG11_IMAGESUBDATA				+ 1)
+-#define	VG11_LOADIDENTITY			(VG11_INTERPOLATEPATH			+ 1)
+-#define	VG11_LOADMATRIX				(VG11_LOADIDENTITY				+ 1)
+-#define	VG11_LOOKUP					(VG11_LOADMATRIX				+ 1)
+-#define	VG11_LOOKUPSINGLE			(VG11_LOOKUP					+ 1)
+-#define	VG11_MASK					(VG11_LOOKUPSINGLE				+ 1)
+-#define	VG11_MODIFYPATHCOORDS		(VG11_MASK						+ 1)
+-#define	VG11_MULTMATRIX				(VG11_MODIFYPATHCOORDS			+ 1)
+-#define	VG11_PAINTPATTERN			(VG11_MULTMATRIX				+ 1)
+-#define	VG11_PATHBOUNDS				(VG11_PAINTPATTERN				+ 1)
+-#define	VG11_PATHLENGTH				(VG11_PATHBOUNDS				+ 1)
+-#define	VG11_PATHTRANSFORMEDBOUNDS	(VG11_PATHLENGTH				+ 1)
+-#define	VG11_POINTALONGPATH			(VG11_PATHTRANSFORMEDBOUNDS		+ 1)
+-#define	VG11_READPIXELS				(VG11_POINTALONGPATH			+ 1)
+-#define	VG11_REMOVEPATHCAPABILITIES	(VG11_READPIXELS				+ 1)
+-#define	VG11_RENDERTOMASK			(VG11_REMOVEPATHCAPABILITIES	+ 1)
+-#define	VG11_ROTATE					(VG11_RENDERTOMASK				+ 1)
+-#define	VG11_SCALE					(VG11_ROTATE					+ 1)
+-#define	VG11_SEPARABLECONVOLVE		(VG11_SCALE						+ 1)
+-#define	VG11_SETCOLOR				(VG11_SEPARABLECONVOLVE			+ 1)
+-#define	VG11_SETF					(VG11_SETCOLOR					+ 1)
+-#define	VG11_SETFV					(VG11_SETF						+ 1)
+-#define	VG11_SETGLYPHTOIMAGE		(VG11_SETFV						+ 1)
+-#define	VG11_SETGLYPHTOPATH			(VG11_SETGLYPHTOIMAGE			+ 1)
+-#define	VG11_SETI					(VG11_SETGLYPHTOPATH			+ 1)
+-#define	VG11_SETIV					(VG11_SETI						+ 1)
+-#define	VG11_SETPAINT				(VG11_SETIV						+ 1)
+-#define	VG11_SETPARAMETERF			(VG11_SETPAINT					+ 1)
+-#define	VG11_SETPARAMETERFV			(VG11_SETPARAMETERF				+ 1)
+-#define	VG11_SETPARAMETERI			(VG11_SETPARAMETERFV			+ 1)
+-#define	VG11_SETPARAMETERIV			(VG11_SETPARAMETERI				+ 1)
+-#define	VG11_SETPIXELS				(VG11_SETPARAMETERIV			+ 1)
+-#define	VG11_SHEAR					(VG11_SETPIXELS					+ 1)
+-#define	VG11_TRANSFORMPATH			(VG11_SHEAR						+ 1)
+-#define	VG11_TRANSLATE				(VG11_TRANSFORMPATH				+ 1)
+-#define	VG11_WRITEPIXELS			(VG11_TRANSLATE					+ 1)
+-#define VG11_CALLS                  (VG11_WRITEPIXELS               + 1)
+-#define VG11_DRAWCALLS              (VG11_CALLS                     + 1)
+-#define VG11_STATECHANGECALLS       (VG11_DRAWCALLS                 + 1)
+-#define VG11_FILLCOUNT              (VG11_STATECHANGECALLS          + 1)
+-#define VG11_STROKECOUNT            (VG11_FILLCOUNT                 + 1)
++#define    ES11_CALLS              151
++#define    ES11_DRAWCALLS          (ES11_CALLS             + 1)
++#define    ES11_STATECHANGECALLS   (ES11_DRAWCALLS         + 1)
++#define    ES11_POINTCOUNT         (ES11_STATECHANGECALLS  + 1)
++#define    ES11_LINECOUNT          (ES11_POINTCOUNT        + 1)
++#define    ES11_TRIANGLECOUNT      (ES11_LINECOUNT         + 1)
++
++#define    ES20_CALLS              159
++#define    ES20_DRAWCALLS          (ES20_CALLS             + 1)
++#define    ES20_STATECHANGECALLS   (ES20_DRAWCALLS         + 1)
++#define    ES20_POINTCOUNT         (ES20_STATECHANGECALLS  + 1)
++#define    ES20_LINECOUNT          (ES20_POINTCOUNT        + 1)
++#define    ES20_TRIANGLECOUNT      (ES20_LINECOUNT         + 1)
++
++#define    VG11_CALLS              88
++#define    VG11_DRAWCALLS          (VG11_CALLS              + 1)
++#define    VG11_STATECHANGECALLS   (VG11_DRAWCALLS          + 1)
++#define    VG11_FILLCOUNT          (VG11_STATECHANGECALLS   + 1)
++#define    VG11_STROKECOUNT        (VG11_FILLCOUNT          + 1)
+ /* End of Driver API ID Definitions. */
+ 
+ /* HAL & MISC IDs. */
+-#define HAL_VERTBUFNEWBYTEALLOC		1
+-#define HAL_VERTBUFTOTALBYTEALLOC	(HAL_VERTBUFNEWBYTEALLOC 	+ 1)
+-#define HAL_VERTBUFNEWOBJALLOC		(HAL_VERTBUFTOTALBYTEALLOC	+ 1)
+-#define HAL_VERTBUFTOTALOBJALLOC	(HAL_VERTBUFNEWOBJALLOC		+ 1)
+-#define HAL_INDBUFNEWBYTEALLOC		(HAL_VERTBUFTOTALOBJALLOC	+ 1)
+-#define HAL_INDBUFTOTALBYTEALLOC	(HAL_INDBUFNEWBYTEALLOC		+ 1)
+-#define HAL_INDBUFNEWOBJALLOC		(HAL_INDBUFTOTALBYTEALLOC	+ 1)
+-#define HAL_INDBUFTOTALOBJALLOC		(HAL_INDBUFNEWOBJALLOC		+ 1)
+-#define HAL_TEXBUFNEWBYTEALLOC		(HAL_INDBUFTOTALOBJALLOC	+ 1)
+-#define HAL_TEXBUFTOTALBYTEALLOC	(HAL_TEXBUFNEWBYTEALLOC		+ 1)
+-#define HAL_TEXBUFNEWOBJALLOC		(HAL_TEXBUFTOTALBYTEALLOC	+ 1)
+-#define HAL_TEXBUFTOTALOBJALLOC		(HAL_TEXBUFNEWOBJALLOC		+ 1)
+-
+-#define GPU_CYCLES		1
+-#define GPU_READ64BYTE	(GPU_CYCLES		+ 1)
+-#define GPU_WRITE64BYTE	(GPU_READ64BYTE	+ 1)
+-#define GPU_TOTALCYCLES	(GPU_WRITE64BYTE	+ 1)
+-#define GPU_IDLECYCLES	(GPU_TOTALCYCLES	+ 1)
+-
+-#define VS_INSTCOUNT			1
+-#define VS_BRANCHINSTCOUNT		(VS_INSTCOUNT		+ 1)
+-#define VS_TEXLDINSTCOUNT		(VS_BRANCHINSTCOUNT	+ 1)
+-#define VS_RENDEREDVERTCOUNT	(VS_TEXLDINSTCOUNT	+ 1)
+-
+-#define PS_INSTCOUNT			1
+-#define PS_BRANCHINSTCOUNT		(PS_INSTCOUNT		+ 1)
+-#define PS_TEXLDINSTCOUNT		(PS_BRANCHINSTCOUNT	+ 1)
+-#define PS_RENDEREDPIXCOUNT		(PS_TEXLDINSTCOUNT	+ 1)
+-
+-#define PA_INVERTCOUNT		1
+-#define	PA_INPRIMCOUNT		(PA_INVERTCOUNT		+ 1)
+-#define PA_OUTPRIMCOUNT		(PA_INPRIMCOUNT		+ 1)
+-#define PA_DEPTHCLIPCOUNT	(PA_OUTPRIMCOUNT	+ 1)
+-#define PA_TRIVIALREJCOUNT	(PA_DEPTHCLIPCOUNT	+ 1)
+-#define PA_CULLCOUNT		(PA_TRIVIALREJCOUNT	+ 1)
+-
+-#define SE_TRIANGLECOUNT	1
+-#define SE_LINECOUNT		(SE_TRIANGLECOUNT	+ 1)
+-
+-#define RA_VALIDPIXCOUNT		1
+-#define RA_TOTALQUADCOUNT		(RA_VALIDPIXCOUNT		+ 1)
+-#define RA_VALIDQUADCOUNTEZ		(RA_TOTALQUADCOUNT		+ 1)
+-#define RA_TOTALPRIMCOUNT		(RA_VALIDQUADCOUNTEZ	+ 1)
+-#define RA_PIPECACHEMISSCOUNT	(RA_TOTALPRIMCOUNT		+ 1)
+-#define RA_PREFCACHEMISSCOUNT	(RA_PIPECACHEMISSCOUNT	+ 1)
+-#define RA_EEZCULLCOUNT			(RA_PREFCACHEMISSCOUNT	+ 1)
+-
+-#define TX_TOTBILINEARREQ		1
+-#define TX_TOTTRILINEARREQ		(TX_TOTBILINEARREQ		+ 1)
+-#define TX_TOTDISCARDTEXREQ		(TX_TOTTRILINEARREQ		+ 1)
+-#define TX_TOTTEXREQ			(TX_TOTDISCARDTEXREQ	+ 1)
+-#define TX_MEMREADCOUNT			(TX_TOTTEXREQ			+ 1)
+-#define TX_MEMREADIN8BCOUNT		(TX_MEMREADCOUNT		+ 1)
+-#define TX_CACHEMISSCOUNT		(TX_MEMREADIN8BCOUNT	+ 1)
+-#define TX_CACHEHITTEXELCOUNT	(TX_CACHEMISSCOUNT		+ 1)
+-#define TX_CACHEMISSTEXELCOUNT	(TX_CACHEHITTEXELCOUNT	+ 1)
+-
+-#define PE_KILLEDBYCOLOR	1
+-#define PE_KILLEDBYDEPTH	(PE_KILLEDBYCOLOR	+ 1)
+-#define PE_DRAWNBYCOLOR		(PE_KILLEDBYDEPTH	+ 1)
+-#define PE_DRAWNBYDEPTH		(PE_DRAWNBYCOLOR	+ 1)
+-
+-#define MC_READREQ8BPIPE	1
+-#define MC_READREQ8BIP		(MC_READREQ8BPIPE	+ 1)
+-#define MC_WRITEREQ8BPIPE	(MC_READREQ8BIP		+ 1)
+-
+-#define AXI_READREQSTALLED		1
+-#define AXI_WRITEREQSTALLED		(AXI_READREQSTALLED		+ 1)
+-#define AXI_WRITEDATASTALLED	(AXI_WRITEREQSTALLED	+ 1)
+-
+-#define PVS_INSTRCOUNT		1
+-#define PVS_ALUINSTRCOUNT	(PVS_INSTRCOUNT		+ 1)
+-#define PVS_TEXINSTRCOUNT	(PVS_ALUINSTRCOUNT	+ 1)
+-#define PVS_ATTRIBCOUNT		(PVS_TEXINSTRCOUNT	+ 1)
+-#define PVS_UNIFORMCOUNT	(PVS_ATTRIBCOUNT	+ 1)
+-#define PVS_FUNCTIONCOUNT	(PVS_UNIFORMCOUNT	+ 1)
+-
+-#define PPS_INSTRCOUNT		1
+-#define PPS_ALUINSTRCOUNT	(PPS_INSTRCOUNT		+ 1)
+-#define PPS_TEXINSTRCOUNT	(PPS_ALUINSTRCOUNT	+ 1)
+-#define PPS_ATTRIBCOUNT		(PPS_TEXINSTRCOUNT	+ 1)
+-#define PPS_UNIFORMCOUNT	(PPS_ATTRIBCOUNT	+ 1)
+-#define PPS_FUNCTIONCOUNT 	(PPS_UNIFORMCOUNT	+ 1)
++#define HAL_VERTBUFNEWBYTEALLOC    1
++#define HAL_VERTBUFTOTALBYTEALLOC  (HAL_VERTBUFNEWBYTEALLOC     + 1)
++#define HAL_VERTBUFNEWOBJALLOC     (HAL_VERTBUFTOTALBYTEALLOC   + 1)
++#define HAL_VERTBUFTOTALOBJALLOC   (HAL_VERTBUFNEWOBJALLOC      + 1)
++#define HAL_INDBUFNEWBYTEALLOC     (HAL_VERTBUFTOTALOBJALLOC    + 1)
++#define HAL_INDBUFTOTALBYTEALLOC   (HAL_INDBUFNEWBYTEALLOC      + 1)
++#define HAL_INDBUFNEWOBJALLOC      (HAL_INDBUFTOTALBYTEALLOC    + 1)
++#define HAL_INDBUFTOTALOBJALLOC    (HAL_INDBUFNEWOBJALLOC       + 1)
++#define HAL_TEXBUFNEWBYTEALLOC     (HAL_INDBUFTOTALOBJALLOC     + 1)
++#define HAL_TEXBUFTOTALBYTEALLOC   (HAL_TEXBUFNEWBYTEALLOC      + 1)
++#define HAL_TEXBUFNEWOBJALLOC      (HAL_TEXBUFTOTALBYTEALLOC    + 1)
++#define HAL_TEXBUFTOTALOBJALLOC    (HAL_TEXBUFNEWOBJALLOC       + 1)
++
++#define GPU_CYCLES           1
++#define GPU_READ64BYTE       (GPU_CYCLES         + 1)
++#define GPU_WRITE64BYTE      (GPU_READ64BYTE     + 1)
++#define GPU_TOTALCYCLES      (GPU_WRITE64BYTE    + 1)
++#define GPU_IDLECYCLES       (GPU_TOTALCYCLES    + 1)
++
++#define VS_INSTCOUNT          1
++#define VS_BRANCHINSTCOUNT    (VS_INSTCOUNT          + 1)
++#define VS_TEXLDINSTCOUNT     (VS_BRANCHINSTCOUNT    + 1)
++#define VS_RENDEREDVERTCOUNT  (VS_TEXLDINSTCOUNT     + 1)
++#define VS_SOURCE             (VS_RENDEREDVERTCOUNT  + 1)
++
++#define PS_INSTCOUNT          1
++#define PS_BRANCHINSTCOUNT    (PS_INSTCOUNT          + 1)
++#define PS_TEXLDINSTCOUNT     (PS_BRANCHINSTCOUNT    + 1)
++#define PS_RENDEREDPIXCOUNT   (PS_TEXLDINSTCOUNT     + 1)
++#define PS_SOURCE             (PS_RENDEREDPIXCOUNT   + 1)
++
++#define PA_INVERTCOUNT        1
++#define PA_INPRIMCOUNT        (PA_INVERTCOUNT      + 1)
++#define PA_OUTPRIMCOUNT       (PA_INPRIMCOUNT      + 1)
++#define PA_DEPTHCLIPCOUNT     (PA_OUTPRIMCOUNT     + 1)
++#define PA_TRIVIALREJCOUNT    (PA_DEPTHCLIPCOUNT   + 1)
++#define PA_CULLCOUNT          (PA_TRIVIALREJCOUNT  + 1)
++
++#define SE_TRIANGLECOUNT      1
++#define SE_LINECOUNT          (SE_TRIANGLECOUNT    + 1)
++
++#define RA_VALIDPIXCOUNT      1
++#define RA_TOTALQUADCOUNT     (RA_VALIDPIXCOUNT      + 1)
++#define RA_VALIDQUADCOUNTEZ   (RA_TOTALQUADCOUNT     + 1)
++#define RA_TOTALPRIMCOUNT     (RA_VALIDQUADCOUNTEZ   + 1)
++#define RA_PIPECACHEMISSCOUNT (RA_TOTALPRIMCOUNT     + 1)
++#define RA_PREFCACHEMISSCOUNT (RA_PIPECACHEMISSCOUNT + 1)
++#define RA_EEZCULLCOUNT       (RA_PREFCACHEMISSCOUNT + 1)
++
++#define TX_TOTBILINEARREQ     1
++#define TX_TOTTRILINEARREQ    (TX_TOTBILINEARREQ      + 1)
++#define TX_TOTDISCARDTEXREQ   (TX_TOTTRILINEARREQ     + 1)
++#define TX_TOTTEXREQ          (TX_TOTDISCARDTEXREQ    + 1)
++#define TX_MEMREADCOUNT       (TX_TOTTEXREQ           + 1)
++#define TX_MEMREADIN8BCOUNT   (TX_MEMREADCOUNT        + 1)
++#define TX_CACHEMISSCOUNT     (TX_MEMREADIN8BCOUNT    + 1)
++#define TX_CACHEHITTEXELCOUNT (TX_CACHEMISSCOUNT      + 1)
++#define TX_CACHEMISSTEXELCOUNT (TX_CACHEHITTEXELCOUNT + 1)
++
++#define PE_KILLEDBYCOLOR      1
++#define PE_KILLEDBYDEPTH      (PE_KILLEDBYCOLOR    + 1)
++#define PE_DRAWNBYCOLOR       (PE_KILLEDBYDEPTH    + 1)
++#define PE_DRAWNBYDEPTH       (PE_DRAWNBYCOLOR     + 1)
++
++#define MC_READREQ8BPIPE      1
++#define MC_READREQ8BIP        (MC_READREQ8BPIPE    + 1)
++#define MC_WRITEREQ8BPIPE     (MC_READREQ8BIP      + 1)
++
++#define AXI_READREQSTALLED    1
++#define AXI_WRITEREQSTALLED   (AXI_READREQSTALLED  + 1)
++#define AXI_WRITEDATASTALLED  (AXI_WRITEREQSTALLED + 1)
++
++#define PVS_INSTRCOUNT        1
++#define PVS_ALUINSTRCOUNT     (PVS_INSTRCOUNT      + 1)
++#define PVS_TEXINSTRCOUNT     (PVS_ALUINSTRCOUNT   + 1)
++#define PVS_ATTRIBCOUNT       (PVS_TEXINSTRCOUNT   + 1)
++#define PVS_UNIFORMCOUNT      (PVS_ATTRIBCOUNT     + 1)
++#define PVS_FUNCTIONCOUNT     (PVS_UNIFORMCOUNT    + 1)
++#define PVS_SOURCE            (PVS_FUNCTIONCOUNT   + 1)
++
++#define PPS_INSTRCOUNT       1
++#define PPS_ALUINSTRCOUNT    (PPS_INSTRCOUNT       + 1)
++#define PPS_TEXINSTRCOUNT    (PPS_ALUINSTRCOUNT    + 1)
++#define PPS_ATTRIBCOUNT      (PPS_TEXINSTRCOUNT    + 1)
++#define PPS_UNIFORMCOUNT     (PPS_ATTRIBCOUNT      + 1)
++#define PPS_FUNCTIONCOUNT    (PPS_UNIFORMCOUNT     + 1)
++#define PPS_SOURCE           (PPS_FUNCTIONCOUNT    + 1)
+ /* End of MISC Counter IDs. */
+ 
+ #ifdef gcdNEW_PROFILER_FILE
+@@ -578,8 +184,8 @@ extern "C" {
+ #define VPG_ES11_TIME   0x170000
+ #define VPG_ES20_TIME   0x180000
+ #define VPG_FRAME       0x190000
+-#define VPG_ES11_DRAW 0x200000
+-#define VPG_ES20_DRAW 0x210000
++#define VPG_ES11_DRAW   0x200000
++#define VPG_ES20_DRAW   0x210000
+ #define VPG_END         0xff0000
+ 
+ /* Info. */
+@@ -592,7 +198,7 @@ extern "C" {
+ #define VPC_INFOSCREENSIZE      (VPC_INFODRIVERMODE + 1)
+ 
+ /* Counter Constants. */
+-#define VPC_ELAPSETIME  		(VPG_TIME + 1)
++#define VPC_ELAPSETIME          (VPG_TIME + 1)
+ #define VPC_CPUTIME             (VPC_ELAPSETIME + 1)
+ 
+ #define VPC_MEMMAXRES           (VPG_MEM + 1)
+@@ -600,404 +206,28 @@ extern "C" {
+ #define VPC_MEMUNSHAREDDATA     (VPC_MEMSHARED + 1)
+ #define VPC_MEMUNSHAREDSTACK    (VPC_MEMUNSHAREDDATA + 1)
+ 
+-/* OpenGL ES11 Counters. */
+-#define	VPC_ES11ACTIVETEXTURE			(VPG_ES11 +	ES11_ACTIVETEXTURE)
+-#define	VPC_ES11ALPHAFUNC				(VPG_ES11 +	ES11_ALPHAFUNC)
+-#define	VPC_ES11ALPHAFUNCX				(VPG_ES11 +	ES11_ALPHAFUNCX)
+-#define	VPC_ES11BINDBUFFER				(VPG_ES11 +	ES11_BINDBUFFER)
+-#define	VPC_ES11BINDTEXTURE				(VPG_ES11 +	ES11_BINDTEXTURE)
+-#define	VPC_ES11BLENDFUNC				(VPG_ES11 +	ES11_BLENDFUNC)
+-#define	VPC_ES11BUFFERDATA				(VPG_ES11 +	ES11_BUFFERDATA)
+-#define	VPC_ES11BUFFERSUBDATA			(VPG_ES11 +	ES11_BUFFERSUBDATA)
+-#define	VPC_ES11CLEAR					(VPG_ES11 +	ES11_CLEAR)
+-#define	VPC_ES11CLEARCOLOR				(VPG_ES11 +	ES11_CLEARCOLOR)
+-#define	VPC_ES11CLEARCOLORX				(VPG_ES11 +	ES11_CLEARCOLORX)
+-#define	VPC_ES11CLEARDEPTHF				(VPG_ES11 +	ES11_CLEARDEPTHF)
+-#define	VPC_ES11CLEARDEPTHX				(VPG_ES11 +	ES11_CLEARDEPTHX)
+-#define	VPC_ES11CLEARSTENCIL			(VPG_ES11 +	ES11_CLEARSTENCIL)
+-#define	VPC_ES11CLIENTACTIVETEXTURE		(VPG_ES11 +	ES11_CLIENTACTIVETEXTURE)
+-#define	VPC_ES11CLIPPLANEF				(VPG_ES11 +	ES11_CLIPPLANEF)
+-#define	VPC_ES11CLIPPLANEX				(VPG_ES11 +	ES11_CLIPPLANEX)
+-#define	VPC_ES11COLOR4F					(VPG_ES11 +	ES11_COLOR4F)
+-#define	VPC_ES11COLOR4UB				(VPG_ES11 +	ES11_COLOR4UB)
+-#define	VPC_ES11COLOR4X					(VPG_ES11 +	ES11_COLOR4X)
+-#define	VPC_ES11COLORMASK				(VPG_ES11 +	ES11_COLORMASK)
+-#define	VPC_ES11COLORPOINTER			(VPG_ES11 +	ES11_COLORPOINTER)
+-#define	VPC_ES11COMPRESSEDTEXIMAGE2D	(VPG_ES11 +	ES11_COMPRESSEDTEXIMAGE2D)
+-#define	VPC_ES11COMPRESSEDTEXSUBIMAGE2D	(VPG_ES11 +	ES11_COMPRESSEDTEXSUBIMAGE2D)
+-#define	VPC_ES11COPYTEXIMAGE2D			(VPG_ES11 +	ES11_COPYTEXIMAGE2D)
+-#define	VPC_ES11COPYTEXSUBIMAGE2D		(VPG_ES11 +	ES11_COPYTEXSUBIMAGE2D)
+-#define	VPC_ES11CULLFACE				(VPG_ES11 +	ES11_CULLFACE)
+-#define	VPC_ES11DELETEBUFFERS			(VPG_ES11 +	ES11_DELETEBUFFERS)
+-#define	VPC_ES11DELETETEXTURES			(VPG_ES11 +	ES11_DELETETEXTURES)
+-#define	VPC_ES11DEPTHFUNC				(VPG_ES11 +	ES11_DEPTHFUNC)
+-#define	VPC_ES11DEPTHMASK				(VPG_ES11 +	ES11_DEPTHMASK)
+-#define	VPC_ES11DEPTHRANGEF				(VPG_ES11 +	ES11_DEPTHRANGEF)
+-#define	VPC_ES11DEPTHRANGEX				(VPG_ES11 +	ES11_DEPTHRANGEX)
+-#define	VPC_ES11DISABLE					(VPG_ES11 +	ES11_DISABLE)
+-#define	VPC_ES11DISABLECLIENTSTATE		(VPG_ES11 +	ES11_DISABLECLIENTSTATE)
+-#define	VPC_ES11DRAWARRAYS				(VPG_ES11 +	ES11_DRAWARRAYS)
+-#define	VPC_ES11DRAWELEMENTS			(VPG_ES11 +	ES11_DRAWELEMENTS)
+-#define	VPC_ES11ENABLE					(VPG_ES11 +	ES11_ENABLE)
+-#define	VPC_ES11ENABLECLIENTSTATE		(VPG_ES11 +	ES11_ENABLECLIENTSTATE)
+-#define	VPC_ES11FINISH					(VPG_ES11 +	ES11_FINISH)
+-#define	VPC_ES11FLUSH					(VPG_ES11 +	ES11_FLUSH)
+-#define	VPC_ES11FOGF					(VPG_ES11 +	ES11_FOGF)
+-#define	VPC_ES11FOGFV					(VPG_ES11 +	ES11_FOGFV)
+-#define	VPC_ES11FOGX					(VPG_ES11 +	ES11_FOGX)
+-#define	VPC_ES11FOGXV					(VPG_ES11 +	ES11_FOGXV)
+-#define	VPC_ES11FRONTFACE				(VPG_ES11 +	ES11_FRONTFACE)
+-#define	VPC_ES11FRUSTUMF				(VPG_ES11 +	ES11_FRUSTUMF)
+-#define	VPC_ES11FRUSTUMX				(VPG_ES11 +	ES11_FRUSTUMX)
+-#define	VPC_ES11GENBUFFERS				(VPG_ES11 +	ES11_GENBUFFERS)
+-#define	VPC_ES11GENTEXTURES				(VPG_ES11 +	ES11_GENTEXTURES)
+-#define	VPC_ES11GETBOOLEANV				(VPG_ES11 +	ES11_GETBOOLEANV)
+-#define	VPC_ES11GETBUFFERPARAMETERIV	(VPG_ES11 +	ES11_GETBUFFERPARAMETERIV)
+-#define	VPC_ES11GETCLIPPLANEF			(VPG_ES11 +	ES11_GETCLIPPLANEF)
+-#define	VPC_ES11GETCLIPPLANEX			(VPG_ES11 +	ES11_GETCLIPPLANEX)
+-#define	VPC_ES11GETERROR				(VPG_ES11 +	ES11_GETERROR)
+-#define	VPC_ES11GETFIXEDV				(VPG_ES11 +	ES11_GETFIXEDV)
+-#define	VPC_ES11GETFLOATV				(VPG_ES11 +	ES11_GETFLOATV)
+-#define	VPC_ES11GETINTEGERV				(VPG_ES11 +	ES11_GETINTEGERV)
+-#define	VPC_ES11GETLIGHTFV				(VPG_ES11 +	ES11_GETLIGHTFV)
+-#define	VPC_ES11GETLIGHTXV				(VPG_ES11 +	ES11_GETLIGHTXV)
+-#define	VPC_ES11GETMATERIALFV			(VPG_ES11 +	ES11_GETMATERIALFV)
+-#define	VPC_ES11GETMATERIALXV			(VPG_ES11 +	ES11_GETMATERIALXV)
+-#define	VPC_ES11GETPOINTERV				(VPG_ES11 +	ES11_GETPOINTERV)
+-#define	VPC_ES11GETSTRING				(VPG_ES11 +	ES11_GETSTRING)
+-#define	VPC_ES11GETTEXENVFV				(VPG_ES11 +	ES11_GETTEXENVFV)
+-#define	VPC_ES11GETTEXENVIV				(VPG_ES11 +	ES11_GETTEXENVIV)
+-#define	VPC_ES11GETTEXENVXV				(VPG_ES11 +	ES11_GETTEXENVXV)
+-#define	VPC_ES11GETTEXPARAMETERFV		(VPG_ES11 +	ES11_GETTEXPARAMETERFV)
+-#define	VPC_ES11GETTEXPARAMETERIV		(VPG_ES11 +	ES11_GETTEXPARAMETERIV)
+-#define	VPC_ES11GETTEXPARAMETERXV		(VPG_ES11 +	ES11_GETTEXPARAMETERXV)
+-#define	VPC_ES11HINT					(VPG_ES11 +	ES11_HINT)
+-#define	VPC_ES11ISBUFFER				(VPG_ES11 +	ES11_ISBUFFER)
+-#define	VPC_ES11ISENABLED				(VPG_ES11 +	ES11_ISENABLED)
+-#define	VPC_ES11ISTEXTURE				(VPG_ES11 +	ES11_ISTEXTURE)
+-#define	VPC_ES11LIGHTF					(VPG_ES11 +	ES11_LIGHTF)
+-#define	VPC_ES11LIGHTFV					(VPG_ES11 +	ES11_LIGHTFV)
+-#define	VPC_ES11LIGHTMODELF				(VPG_ES11 +	ES11_LIGHTMODELF)
+-#define	VPC_ES11LIGHTMODELFV			(VPG_ES11 +	ES11_LIGHTMODELFV)
+-#define	VPC_ES11LIGHTMODELX				(VPG_ES11 +	ES11_LIGHTMODELX)
+-#define	VPC_ES11LIGHTMODELXV			(VPG_ES11 +	ES11_LIGHTMODELXV)
+-#define	VPC_ES11LIGHTX					(VPG_ES11 +	ES11_LIGHTX)
+-#define	VPC_ES11LIGHTXV					(VPG_ES11 +	ES11_LIGHTXV)
+-#define	VPC_ES11LINEWIDTH				(VPG_ES11 +	ES11_LINEWIDTH)
+-#define	VPC_ES11LINEWIDTHX				(VPG_ES11 +	ES11_LINEWIDTHX)
+-#define	VPC_ES11LOADIDENTITY			(VPG_ES11 +	ES11_LOADIDENTITY)
+-#define	VPC_ES11LOADMATRIXF				(VPG_ES11 +	ES11_LOADMATRIXF)
+-#define	VPC_ES11LOADMATRIXX				(VPG_ES11 +	ES11_LOADMATRIXX)
+-#define	VPC_ES11LOGICOP					(VPG_ES11 +	ES11_LOGICOP)
+-#define	VPC_ES11MATERIALF				(VPG_ES11 +	ES11_MATERIALF)
+-#define	VPC_ES11MATERIALFV				(VPG_ES11 +	ES11_MATERIALFV)
+-#define	VPC_ES11MATERIALX				(VPG_ES11 +	ES11_MATERIALX)
+-#define	VPC_ES11MATERIALXV				(VPG_ES11 +	ES11_MATERIALXV)
+-#define	VPC_ES11MATRIXMODE				(VPG_ES11 +	ES11_MATRIXMODE)
+-#define	VPC_ES11MULTITEXCOORD4F			(VPG_ES11 +	ES11_MULTITEXCOORD4F)
+-#define	VPC_ES11MULTITEXCOORD4X			(VPG_ES11 +	ES11_MULTITEXCOORD4X)
+-#define	VPC_ES11MULTMATRIXF				(VPG_ES11 +	ES11_MULTMATRIXF)
+-#define	VPC_ES11MULTMATRIXX				(VPG_ES11 +	ES11_MULTMATRIXX)
+-#define	VPC_ES11NORMAL3F				(VPG_ES11 +	ES11_NORMAL3F)
+-#define	VPC_ES11NORMAL3X				(VPG_ES11 +	ES11_NORMAL3X)
+-#define	VPC_ES11NORMALPOINTER			(VPG_ES11 +	ES11_NORMALPOINTER)
+-#define	VPC_ES11ORTHOF					(VPG_ES11 +	ES11_ORTHOF)
+-#define	VPC_ES11ORTHOX					(VPG_ES11 +	ES11_ORTHOX)
+-#define	VPC_ES11PIXELSTOREI				(VPG_ES11 +	ES11_PIXELSTOREI)
+-#define	VPC_ES11POINTPARAMETERF			(VPG_ES11 +	ES11_POINTPARAMETERF)
+-#define	VPC_ES11POINTPARAMETERFV		(VPG_ES11 +	ES11_POINTPARAMETERFV)
+-#define	VPC_ES11POINTPARAMETERX			(VPG_ES11 +	ES11_POINTPARAMETERX)
+-#define	VPC_ES11POINTPARAMETERXV		(VPG_ES11 +	ES11_POINTPARAMETERXV)
+-#define	VPC_ES11POINTSIZE				(VPG_ES11 +	ES11_POINTSIZE)
+-#define	VPC_ES11POINTSIZEX				(VPG_ES11 +	ES11_POINTSIZEX)
+-#define	VPC_ES11POLYGONOFFSET			(VPG_ES11 +	ES11_POLYGONOFFSET)
+-#define	VPC_ES11POLYGONOFFSETX			(VPG_ES11 +	ES11_POLYGONOFFSETX)
+-#define	VPC_ES11POPMATRIX				(VPG_ES11 +	ES11_POPMATRIX)
+-#define	VPC_ES11PUSHMATRIX				(VPG_ES11 +	ES11_PUSHMATRIX)
+-#define	VPC_ES11READPIXELS				(VPG_ES11 +	ES11_READPIXELS)
+-#define	VPC_ES11ROTATEF					(VPG_ES11 +	ES11_ROTATEF)
+-#define	VPC_ES11ROTATEX					(VPG_ES11 +	ES11_ROTATEX)
+-#define	VPC_ES11SAMPLECOVERAGE			(VPG_ES11 +	ES11_SAMPLECOVERAGE)
+-#define	VPC_ES11SAMPLECOVERAGEX			(VPG_ES11 +	ES11_SAMPLECOVERAGEX)
+-#define	VPC_ES11SCALEF					(VPG_ES11 +	ES11_SCALEF)
+-#define	VPC_ES11SCALEX					(VPG_ES11 +	ES11_SCALEX)
+-#define	VPC_ES11SCISSOR					(VPG_ES11 +	ES11_SCISSOR)
+-#define	VPC_ES11SHADEMODEL				(VPG_ES11 +	ES11_SHADEMODEL)
+-#define	VPC_ES11STENCILFUNC				(VPG_ES11 +	ES11_STENCILFUNC)
+-#define	VPC_ES11STENCILMASK				(VPG_ES11 +	ES11_STENCILMASK)
+-#define	VPC_ES11STENCILOP				(VPG_ES11 +	ES11_STENCILOP)
+-#define	VPC_ES11TEXCOORDPOINTER			(VPG_ES11 +	ES11_TEXCOORDPOINTER)
+-#define	VPC_ES11TEXENVF					(VPG_ES11 +	ES11_TEXENVF)
+-#define	VPC_ES11TEXENVFV				(VPG_ES11 +	ES11_TEXENVFV)
+-#define	VPC_ES11TEXENVI					(VPG_ES11 +	ES11_TEXENVI)
+-#define	VPC_ES11TEXENVIV				(VPG_ES11 +	ES11_TEXENVIV)
+-#define	VPC_ES11TEXENVX					(VPG_ES11 +	ES11_TEXENVX)
+-#define	VPC_ES11TEXENVXV				(VPG_ES11 +	ES11_TEXENVXV)
+-#define	VPC_ES11TEXIMAGE2D				(VPG_ES11 +	ES11_TEXIMAGE2D)
+-#define	VPC_ES11TEXPARAMETERF			(VPG_ES11 +	ES11_TEXPARAMETERF)
+-#define	VPC_ES11TEXPARAMETERFV			(VPG_ES11 +	ES11_TEXPARAMETERFV)
+-#define	VPC_ES11TEXPARAMETERI			(VPG_ES11 +	ES11_TEXPARAMETERI)
+-#define	VPC_ES11TEXPARAMETERIV			(VPG_ES11 +	ES11_TEXPARAMETERIV)
+-#define	VPC_ES11TEXPARAMETERX			(VPG_ES11 +	ES11_TEXPARAMETERX)
+-#define	VPC_ES11TEXPARAMETERXV			(VPG_ES11 +	ES11_TEXPARAMETERXV)
+-#define	VPC_ES11TEXSUBIMAGE2D			(VPG_ES11 +	ES11_TEXSUBIMAGE2D)
+-#define	VPC_ES11TRANSLATEF				(VPG_ES11 +	ES11_TRANSLATEF)
+-#define	VPC_ES11TRANSLATEX				(VPG_ES11 +	ES11_TRANSLATEX)
+-#define	VPC_ES11VERTEXPOINTER			(VPG_ES11 +	ES11_VERTEXPOINTER)
+-#define	VPC_ES11VIEWPORT				(VPG_ES11 +	ES11_VIEWPORT)
+ /* OpenGL ES11 Statics Counter IDs. */
+-#define	VPC_ES11CALLS					(VPG_ES11 +	ES11_CALLS)
+-#define	VPC_ES11DRAWCALLS				(VPG_ES11 +	ES11_DRAWCALLS)
+-#define	VPC_ES11STATECHANGECALLS		(VPG_ES11 +	ES11_STATECHANGECALLS)
+-#define	VPC_ES11POINTCOUNT				(VPG_ES11 +	ES11_POINTCOUNT)
+-#define	VPC_ES11LINECOUNT				(VPG_ES11 +	ES11_LINECOUNT)
+-#define	VPC_ES11TRIANGLECOUNT			(VPG_ES11 +	ES11_TRIANGLECOUNT)
+-
+-/* OpenGLES 2.x */
+-#define	VPC_ES20ACTIVETEXTURE						(VPG_ES20 +	ES20_ACTIVETEXTURE)
+-#define	VPC_ES20ATTACHSHADER						(VPG_ES20 +	ES20_ATTACHSHADER)
+-#define	VPC_ES20BINDATTRIBLOCATION					(VPG_ES20 +	ES20_BINDATTRIBLOCATION)
+-#define	VPC_ES20BINDBUFFER							(VPG_ES20 +	ES20_BINDBUFFER)
+-#define	VPC_ES20BINDFRAMEBUFFER						(VPG_ES20 +	ES20_BINDFRAMEBUFFER)
+-#define	VPC_ES20BINDRENDERBUFFER					(VPG_ES20 +	ES20_BINDRENDERBUFFER)
+-#define	VPC_ES20BINDTEXTURE							(VPG_ES20 +	ES20_BINDTEXTURE)
+-#define	VPC_ES20BLENDCOLOR							(VPG_ES20 +	ES20_BLENDCOLOR)
+-#define	VPC_ES20BLENDEQUATION						(VPG_ES20 +	ES20_BLENDEQUATION)
+-#define	VPC_ES20BLENDEQUATIONSEPARATE				(VPG_ES20 +	ES20_BLENDEQUATIONSEPARATE)
+-#define	VPC_ES20BLENDFUNC							(VPG_ES20 +	ES20_BLENDFUNC)
+-#define	VPC_ES20BLENDFUNCSEPARATE					(VPG_ES20 +	ES20_BLENDFUNCSEPARATE)
+-#define	VPC_ES20BUFFERDATA							(VPG_ES20 +	ES20_BUFFERDATA)
+-#define	VPC_ES20BUFFERSUBDATA						(VPG_ES20 +	ES20_BUFFERSUBDATA)
+-#define	VPC_ES20CHECKFRAMEBUFFERSTATUS				(VPG_ES20 +	ES20_CHECKFRAMEBUFFERSTATUS)
+-#define	VPC_ES20CLEAR								(VPG_ES20 +	ES20_CLEAR)
+-#define	VPC_ES20CLEARCOLOR							(VPG_ES20 +	ES20_CLEARCOLOR)
+-#define	VPC_ES20CLEARDEPTHF							(VPG_ES20 +	ES20_CLEARDEPTHF)
+-#define	VPC_ES20CLEARSTENCIL						(VPG_ES20 +	ES20_CLEARSTENCIL)
+-#define	VPC_ES20COLORMASK							(VPG_ES20 +	ES20_COLORMASK)
+-#define	VPC_ES20COMPILESHADER						(VPG_ES20 +	ES20_COMPILESHADER)
+-#define	VPC_ES20COMPRESSEDTEXIMAGE2D				(VPG_ES20 +	ES20_COMPRESSEDTEXIMAGE2D)
+-#define	VPC_ES20COMPRESSEDTEXSUBIMAGE2D				(VPG_ES20 +	ES20_COMPRESSEDTEXSUBIMAGE2D)
+-#define	VPC_ES20COPYTEXIMAGE2D						(VPG_ES20 +	ES20_COPYTEXIMAGE2D)
+-#define	VPC_ES20COPYTEXSUBIMAGE2D					(VPG_ES20 +	ES20_COPYTEXSUBIMAGE2D)
+-#define	VPC_ES20CREATEPROGRAM						(VPG_ES20 +	ES20_CREATEPROGRAM)
+-#define	VPC_ES20CREATESHADER						(VPG_ES20 +	ES20_CREATESHADER)
+-#define	VPC_ES20CULLFACE							(VPG_ES20 +	ES20_CULLFACE)
+-#define	VPC_ES20DELETEBUFFERS						(VPG_ES20 +	ES20_DELETEBUFFERS)
+-#define	VPC_ES20DELETEFRAMEBUFFERS					(VPG_ES20 +	ES20_DELETEFRAMEBUFFERS)
+-#define	VPC_ES20DELETEPROGRAM						(VPG_ES20 +	ES20_DELETEPROGRAM)
+-#define	VPC_ES20DELETERENDERBUFFERS					(VPG_ES20 +	ES20_DELETERENDERBUFFERS)
+-#define	VPC_ES20DELETESHADER						(VPG_ES20 +	ES20_DELETESHADER)
+-#define	VPC_ES20DELETETEXTURES						(VPG_ES20 +	ES20_DELETETEXTURES)
+-#define	VPC_ES20DEPTHFUNC							(VPG_ES20 +	ES20_DEPTHFUNC)
+-#define	VPC_ES20DEPTHMASK							(VPG_ES20 +	ES20_DEPTHMASK)
+-#define	VPC_ES20DEPTHRANGEF							(VPG_ES20 +	ES20_DEPTHRANGEF)
+-#define	VPC_ES20DETACHSHADER						(VPG_ES20 +	ES20_DETACHSHADER)
+-#define	VPC_ES20DISABLE								(VPG_ES20 +	ES20_DISABLE)
+-#define	VPC_ES20DISABLEVERTEXATTRIBARRAY			(VPG_ES20 +	ES20_DISABLEVERTEXATTRIBARRAY)
+-#define	VPC_ES20DRAWARRAYS							(VPG_ES20 +	ES20_DRAWARRAYS)
+-#define	VPC_ES20DRAWELEMENTS						(VPG_ES20 +	ES20_DRAWELEMENTS)
+-#define	VPC_ES20ENABLE								(VPG_ES20 +	ES20_ENABLE)
+-#define	VPC_ES20ENABLEVERTEXATTRIBARRAY				(VPG_ES20 +	ES20_ENABLEVERTEXATTRIBARRAY)
+-#define	VPC_ES20FINISH								(VPG_ES20 +	ES20_FINISH)
+-#define	VPC_ES20FLUSH								(VPG_ES20 +	ES20_FLUSH)
+-#define	VPC_ES20FRAMEBUFFERRENDERBUFFER				(VPG_ES20 +	ES20_FRAMEBUFFERRENDERBUFFER)
+-#define	VPC_ES20FRAMEBUFFERTEXTURE2D				(VPG_ES20 +	ES20_FRAMEBUFFERTEXTURE2D)
+-#define	VPC_ES20FRONTFACE							(VPG_ES20 +	ES20_FRONTFACE)
+-#define	VPC_ES20GENBUFFERS							(VPG_ES20 +	ES20_GENBUFFERS)
+-#define	VPC_ES20GENERATEMIPMAP						(VPG_ES20 +	ES20_GENERATEMIPMAP)
+-#define	VPC_ES20GENFRAMEBUFFERS						(VPG_ES20 +	ES20_GENFRAMEBUFFERS)
+-#define	VPC_ES20GENRENDERBUFFERS					(VPG_ES20 +	ES20_GENRENDERBUFFERS)
+-#define	VPC_ES20GENTEXTURES							(VPG_ES20 +	ES20_GENTEXTURES)
+-#define	VPC_ES20GETACTIVEATTRIB						(VPG_ES20 +	ES20_GETACTIVEATTRIB)
+-#define	VPC_ES20GETACTIVEUNIFORM					(VPG_ES20 +	ES20_GETACTIVEUNIFORM)
+-#define	VPC_ES20GETATTACHEDSHADERS					(VPG_ES20 +	ES20_GETATTACHEDSHADERS)
+-#define	VPC_ES20GETATTRIBLOCATION					(VPG_ES20 +	ES20_GETATTRIBLOCATION)
+-#define	VPC_ES20GETBOOLEANV							(VPG_ES20 +	ES20_GETBOOLEANV)
+-#define	VPC_ES20GETBUFFERPARAMETERIV				(VPG_ES20 +	ES20_GETBUFFERPARAMETERIV)
+-#define	VPC_ES20GETERROR							(VPG_ES20 +	ES20_GETERROR)
+-#define	VPC_ES20GETFLOATV							(VPG_ES20 +	ES20_GETFLOATV)
+-#define	VPC_ES20GETFRAMEBUFFERATTACHMENTPARAMETERIV	(VPG_ES20 +	ES20_GETFRAMEBUFFERATTACHMENTPARAMETERIV)
+-#define	VPC_ES20GETINTEGERV							(VPG_ES20 +	ES20_GETINTEGERV)
+-#define	VPC_ES20GETPROGRAMIV						(VPG_ES20 +	ES20_GETPROGRAMIV)
+-#define	VPC_ES20GETPROGRAMINFOLOG					(VPG_ES20 +	ES20_GETPROGRAMINFOLOG)
+-#define	VPC_ES20GETRENDERBUFFERPARAMETERIV			(VPG_ES20 +	ES20_GETRENDERBUFFERPARAMETERIV)
+-#define	VPC_ES20GETSHADERIV							(VPG_ES20 +	ES20_GETSHADERIV)
+-#define	VPC_ES20GETSHADERINFOLOG					(VPG_ES20 +	ES20_GETSHADERINFOLOG)
+-#define	VPC_ES20GETSHADERPRECISIONFORMAT			(VPG_ES20 +	ES20_GETSHADERPRECISIONFORMAT)
+-#define	VPC_ES20GETSHADERSOURCE						(VPG_ES20 +	ES20_GETSHADERSOURCE)
+-#define	VPC_ES20GETSTRING							(VPG_ES20 +	ES20_GETSTRING)
+-#define	VPC_ES20GETTEXPARAMETERFV					(VPG_ES20 +	ES20_GETTEXPARAMETERFV)
+-#define	VPC_ES20GETTEXPARAMETERIV					(VPG_ES20 +	ES20_GETTEXPARAMETERIV)
+-#define	VPC_ES20GETUNIFORMFV						(VPG_ES20 +	ES20_GETUNIFORMFV)
+-#define	VPC_ES20GETUNIFORMIV						(VPG_ES20 +	ES20_GETUNIFORMIV)
+-#define	VPC_ES20GETUNIFORMLOCATION					(VPG_ES20 +	ES20_GETUNIFORMLOCATION)
+-#define	VPC_ES20GETVERTEXATTRIBFV					(VPG_ES20 +	ES20_GETVERTEXATTRIBFV)
+-#define	VPC_ES20GETVERTEXATTRIBIV					(VPG_ES20 +	ES20_GETVERTEXATTRIBIV)
+-#define	VPC_ES20GETVERTEXATTRIBPOINTERV				(VPG_ES20 +	ES20_GETVERTEXATTRIBPOINTERV)
+-#define	VPC_ES20HINT								(VPG_ES20 +	ES20_HINT)
+-#define	VPC_ES20ISBUFFER							(VPG_ES20 +	ES20_ISBUFFER)
+-#define	VPC_ES20ISENABLED							(VPG_ES20 +	ES20_ISENABLED)
+-#define	VPC_ES20ISFRAMEBUFFER						(VPG_ES20 +	ES20_ISFRAMEBUFFER)
+-#define	VPC_ES20ISPROGRAM							(VPG_ES20 +	ES20_ISPROGRAM)
+-#define	VPC_ES20ISRENDERBUFFER						(VPG_ES20 +	ES20_ISRENDERBUFFER)
+-#define	VPC_ES20ISSHADER							(VPG_ES20 +	ES20_ISSHADER)
+-#define	VPC_ES20ISTEXTURE							(VPG_ES20 +	ES20_ISTEXTURE)
+-#define	VPC_ES20LINEWIDTH							(VPG_ES20 +	ES20_LINEWIDTH)
+-#define	VPC_ES20LINKPROGRAM							(VPG_ES20 +	ES20_LINKPROGRAM)
+-#define	VPC_ES20PIXELSTOREI							(VPG_ES20 +	ES20_PIXELSTOREI)
+-#define	VPC_ES20POLYGONOFFSET						(VPG_ES20 +	ES20_POLYGONOFFSET)
+-#define	VPC_ES20READPIXELS							(VPG_ES20 +	ES20_READPIXELS)
+-#define	VPC_ES20RELEASESHADERCOMPILER				(VPG_ES20 +	ES20_RELEASESHADERCOMPILER)
+-#define	VPC_ES20RENDERBUFFERSTORAGE					(VPG_ES20 +	ES20_RENDERBUFFERSTORAGE)
+-#define	VPC_ES20SAMPLECOVERAGE						(VPG_ES20 +	ES20_SAMPLECOVERAGE)
+-#define	VPC_ES20SCISSOR								(VPG_ES20 +	ES20_SCISSOR)
+-#define	VPC_ES20SHADERBINARY						(VPG_ES20 +	ES20_SHADERBINARY)
+-#define	VPC_ES20SHADERSOURCE						(VPG_ES20 +	ES20_SHADERSOURCE)
+-#define	VPC_ES20STENCILFUNC							(VPG_ES20 +	ES20_STENCILFUNC)
+-#define	VPC_ES20STENCILFUNCSEPARATE					(VPG_ES20 +	ES20_STENCILFUNCSEPARATE)
+-#define	VPC_ES20STENCILMASK							(VPG_ES20 +	ES20_STENCILMASK)
+-#define	VPC_ES20STENCILMASKSEPARATE					(VPG_ES20 +	ES20_STENCILMASKSEPARATE)
+-#define	VPC_ES20STENCILOP							(VPG_ES20 +	ES20_STENCILOP)
+-#define	VPC_ES20STENCILOPSEPARATE					(VPG_ES20 +	ES20_STENCILOPSEPARATE)
+-#define	VPC_ES20TEXIMAGE2D							(VPG_ES20 +	ES20_TEXIMAGE2D)
+-#define	VPC_ES20TEXPARAMETERF						(VPG_ES20 +	ES20_TEXPARAMETERF)
+-#define	VPC_ES20TEXPARAMETERFV						(VPG_ES20 +	ES20_TEXPARAMETERFV)
+-#define	VPC_ES20TEXPARAMETERI						(VPG_ES20 +	ES20_TEXPARAMETERI)
+-#define	VPC_ES20TEXPARAMETERIV						(VPG_ES20 +	ES20_TEXPARAMETERIV)
+-#define	VPC_ES20TEXSUBIMAGE2D						(VPG_ES20 +	ES20_TEXSUBIMAGE2D)
+-#define	VPC_ES20UNIFORM1F							(VPG_ES20 +	ES20_UNIFORM1F)
+-#define	VPC_ES20UNIFORM1FV							(VPG_ES20 +	ES20_UNIFORM1FV)
+-#define	VPC_ES20UNIFORM1I							(VPG_ES20 +	ES20_UNIFORM1I)
+-#define	VPC_ES20UNIFORM1IV							(VPG_ES20 +	ES20_UNIFORM1IV)
+-#define	VPC_ES20UNIFORM2F							(VPG_ES20 +	ES20_UNIFORM2F)
+-#define	VPC_ES20UNIFORM2FV							(VPG_ES20 +	ES20_UNIFORM2FV)
+-#define	VPC_ES20UNIFORM2I							(VPG_ES20 +	ES20_UNIFORM2I)
+-#define	VPC_ES20UNIFORM2IV							(VPG_ES20 +	ES20_UNIFORM2IV)
+-#define	VPC_ES20UNIFORM3F							(VPG_ES20 +	ES20_UNIFORM3F)
+-#define	VPC_ES20UNIFORM3FV							(VPG_ES20 +	ES20_UNIFORM3FV)
+-#define	VPC_ES20UNIFORM3I							(VPG_ES20 +	ES20_UNIFORM3I)
+-#define	VPC_ES20UNIFORM3IV							(VPG_ES20 +	ES20_UNIFORM3IV)
+-#define	VPC_ES20UNIFORM4F							(VPG_ES20 +	ES20_UNIFORM4F)
+-#define	VPC_ES20UNIFORM4FV							(VPG_ES20 +	ES20_UNIFORM4FV)
+-#define	VPC_ES20UNIFORM4I							(VPG_ES20 +	ES20_UNIFORM4I)
+-#define	VPC_ES20UNIFORM4IV							(VPG_ES20 +	ES20_UNIFORM4IV)
+-#define	VPC_ES20UNIFORMMATRIX2FV					(VPG_ES20 +	ES20_UNIFORMMATRIX2FV)
+-#define	VPC_ES20UNIFORMMATRIX3FV					(VPG_ES20 +	ES20_UNIFORMMATRIX3FV)
+-#define	VPC_ES20UNIFORMMATRIX4FV					(VPG_ES20 +	ES20_UNIFORMMATRIX4FV)
+-#define	VPC_ES20USEPROGRAM							(VPG_ES20 +	ES20_USEPROGRAM)
+-#define	VPC_ES20VALIDATEPROGRAM						(VPG_ES20 +	ES20_VALIDATEPROGRAM)
+-#define	VPC_ES20VERTEXATTRIB1F						(VPG_ES20 +	ES20_VERTEXATTRIB1F)
+-#define	VPC_ES20VERTEXATTRIB1FV						(VPG_ES20 +	ES20_VERTEXATTRIB1FV)
+-#define	VPC_ES20VERTEXATTRIB2F						(VPG_ES20 +	ES20_VERTEXATTRIB2F)
+-#define	VPC_ES20VERTEXATTRIB2FV						(VPG_ES20 +	ES20_VERTEXATTRIB2FV)
+-#define	VPC_ES20VERTEXATTRIB3F						(VPG_ES20 +	ES20_VERTEXATTRIB3F)
+-#define	VPC_ES20VERTEXATTRIB3FV						(VPG_ES20 +	ES20_VERTEXATTRIB3FV)
+-#define	VPC_ES20VERTEXATTRIB4F						(VPG_ES20 +	ES20_VERTEXATTRIB4F)
+-#define	VPC_ES20VERTEXATTRIB4FV						(VPG_ES20 +	ES20_VERTEXATTRIB4FV)
+-#define	VPC_ES20VERTEXATTRIBPOINTER					(VPG_ES20 +	ES20_VERTEXATTRIBPOINTER)
+-#define	VPC_ES20VIEWPORT							(VPG_ES20 +	ES20_VIEWPORT)
++#define    VPC_ES11CALLS            (VPG_ES11 +    ES11_CALLS)
++#define    VPC_ES11DRAWCALLS        (VPG_ES11 +    ES11_DRAWCALLS)
++#define    VPC_ES11STATECHANGECALLS (VPG_ES11 +    ES11_STATECHANGECALLS)
++#define    VPC_ES11POINTCOUNT       (VPG_ES11 +    ES11_POINTCOUNT)
++#define    VPC_ES11LINECOUNT        (VPG_ES11 +    ES11_LINECOUNT)
++#define    VPC_ES11TRIANGLECOUNT    (VPG_ES11 +    ES11_TRIANGLECOUNT)
++
+ /* OpenGL ES20 Statistics Counter IDs. */
+-#define	VPC_ES20CALLS								(VPG_ES20 +	ES20_CALLS)
+-#define	VPC_ES20DRAWCALLS							(VPG_ES20 +	ES20_DRAWCALLS)
+-#define	VPC_ES20STATECHANGECALLS					(VPG_ES20 +	ES20_STATECHANGECALLS)
+-#define	VPC_ES20POINTCOUNT							(VPG_ES20 +	ES20_POINTCOUNT)
+-#define	VPC_ES20LINECOUNT							(VPG_ES20 +	ES20_LINECOUNT)
+-#define	VPC_ES20TRIANGLECOUNT						(VPG_ES20 +	ES20_TRIANGLECOUNT)
+-
+-/* VG11 Counters. */
+-#define	VPC_VG11APPENDPATH				(VPG_VG11 +	VG11_APPENDPATH)
+-#define	VPC_VG11APPENDPATHDATA			(VPG_VG11 +	VG11_APPENDPATHDATA)
+-#define	VPC_VG11CHILDIMAGE				(VPG_VG11 +	VG11_CHILDIMAGE)
+-#define	VPC_VG11CLEAR					(VPG_VG11 +	VG11_CLEAR)
+-#define	VPC_VG11CLEARGLYPH				(VPG_VG11 +	VG11_CLEARGLYPH)
+-#define	VPC_VG11CLEARIMAGE				(VPG_VG11 +	VG11_CLEARIMAGE)
+-#define	VPC_VG11CLEARPATH				(VPG_VG11 +	VG11_CLEARPATH)
+-#define	VPC_VG11COLORMATRIX				(VPG_VG11 +	VG11_COLORMATRIX)
+-#define	VPC_VG11CONVOLVE				(VPG_VG11 +	VG11_CONVOLVE)
+-#define	VPC_VG11COPYIMAGE				(VPG_VG11 +	VG11_COPYIMAGE)
+-#define	VPC_VG11COPYMASK				(VPG_VG11 +	VG11_COPYMASK)
+-#define	VPC_VG11COPYPIXELS				(VPG_VG11 +	VG11_COPYPIXELS)
+-#define	VPC_VG11CREATEFONT				(VPG_VG11 +	VG11_CREATEFONT)
+-#define	VPC_VG11CREATEIMAGE				(VPG_VG11 +	VG11_CREATEIMAGE)
+-#define	VPC_VG11CREATEMASKLAYER			(VPG_VG11 +	VG11_CREATEMASKLAYER)
+-#define	VPC_VG11CREATEPAINT				(VPG_VG11 +	VG11_CREATEPAINT)
+-#define	VPC_VG11CREATEPATH				(VPG_VG11 +	VG11_CREATEPATH)
+-#define	VPC_VG11DESTROYFONT				(VPG_VG11 +	VG11_DESTROYFONT)
+-#define	VPC_VG11DESTROYIMAGE			(VPG_VG11 +	VG11_DESTROYIMAGE)
+-#define	VPC_VG11DESTROYMASKLAYER		(VPG_VG11 +	VG11_DESTROYMASKLAYER)
+-#define	VPC_VG11DESTROYPAINT			(VPG_VG11 +	VG11_DESTROYPAINT)
+-#define	VPC_VG11DESTROYPATH				(VPG_VG11 +	VG11_DESTROYPATH)
+-#define	VPC_VG11DRAWGLYPH				(VPG_VG11 +	VG11_DRAWGLYPH)
+-#define	VPC_VG11DRAWGLYPHS				(VPG_VG11 +	VG11_DRAWGLYPHS)
+-#define	VPC_VG11DRAWIMAGE				(VPG_VG11 +	VG11_DRAWIMAGE)
+-#define	VPC_VG11DRAWPATH				(VPG_VG11 +	VG11_DRAWPATH)
+-#define	VPC_VG11FILLMASKLAYER			(VPG_VG11 +	VG11_FILLMASKLAYER)
+-#define	VPC_VG11FINISH					(VPG_VG11 +	VG11_FINISH)
+-#define	VPC_VG11FLUSH					(VPG_VG11 +	VG11_FLUSH)
+-#define	VPC_VG11GAUSSIANBLUR			(VPG_VG11 +	VG11_GAUSSIANBLUR)
+-#define	VPC_VG11GETCOLOR				(VPG_VG11 +	VG11_GETCOLOR)
+-#define	VPC_VG11GETERROR				(VPG_VG11 +	VG11_GETERROR)
+-#define	VPC_VG11GETF					(VPG_VG11 +	VG11_GETF)
+-#define	VPC_VG11GETFV					(VPG_VG11 +	VG11_GETFV)
+-#define	VPC_VG11GETI					(VPG_VG11 +	VG11_GETI)
+-#define	VPC_VG11GETIMAGESUBDATA			(VPG_VG11 +	VG11_GETIMAGESUBDATA)
+-#define	VPC_VG11GETIV					(VPG_VG11 +	VG11_GETIV)
+-#define	VPC_VG11GETMATRIX				(VPG_VG11 +	VG11_GETMATRIX)
+-#define	VPC_VG11GETPAINT				(VPG_VG11 +	VG11_GETPAINT)
+-#define	VPC_VG11GETPARAMETERF			(VPG_VG11 +	VG11_GETPARAMETERF)
+-#define	VPC_VG11GETPARAMETERFV			(VPG_VG11 +	VG11_GETPARAMETERFV)
+-#define	VPC_VG11GETPARAMETERI			(VPG_VG11 +	VG11_GETPARAMETERI)
+-#define	VPC_VG11GETPARAMETERIV			(VPG_VG11 +	VG11_GETPARAMETERIV)
+-#define	VPC_VG11GETPARAMETERVECTORSIZE	(VPG_VG11 +	VG11_GETPARAMETERVECTORSIZE)
+-#define	VPC_VG11GETPARENT				(VPG_VG11 +	VG11_GETPARENT)
+-#define	VPC_VG11GETPATHCAPABILITIES		(VPG_VG11 +	VG11_GETPATHCAPABILITIES)
+-#define	VPC_VG11GETPIXELS				(VPG_VG11 +	VG11_GETPIXELS)
+-#define	VPC_VG11GETSTRING				(VPG_VG11 +	VG11_GETSTRING)
+-#define	VPC_VG11GETVECTORSIZE			(VPG_VG11 +	VG11_GETVECTORSIZE)
+-#define	VPC_VG11HARDWAREQUERY			(VPG_VG11 +	VG11_HARDWAREQUERY)
+-#define	VPC_VG11IMAGESUBDATA			(VPG_VG11 +	VG11_IMAGESUBDATA)
+-#define	VPC_VG11INTERPOLATEPATH			(VPG_VG11 +	VG11_INTERPOLATEPATH)
+-#define	VPC_VG11LOADIDENTITY			(VPG_VG11 +	VG11_LOADIDENTITY)
+-#define	VPC_VG11LOADMATRIX				(VPG_VG11 +	VG11_LOADMATRIX)
+-#define	VPC_VG11LOOKUP					(VPG_VG11 +	VG11_LOOKUP)
+-#define	VPC_VG11LOOKUPSINGLE			(VPG_VG11 +	VG11_LOOKUPSINGLE)
+-#define	VPC_VG11MASK					(VPG_VG11 +	VG11_MASK)
+-#define	VPC_VG11MODIFYPATHCOORDS		(VPG_VG11 +	VG11_MODIFYPATHCOORDS)
+-#define	VPC_VG11MULTMATRIX				(VPG_VG11 +	VG11_MULTMATRIX)
+-#define	VPC_VG11PAINTPATTERN			(VPG_VG11 +	VG11_PAINTPATTERN)
+-#define	VPC_VG11PATHBOUNDS				(VPG_VG11 +	VG11_PATHBOUNDS)
+-#define	VPC_VG11PATHLENGTH				(VPG_VG11 +	VG11_PATHLENGTH)
+-#define	VPC_VG11PATHTRANSFORMEDBOUNDS	(VPG_VG11 +	VG11_PATHTRANSFORMEDBOUNDS)
+-#define	VPC_VG11POINTALONGPATH			(VPG_VG11 +	VG11_POINTALONGPATH)
+-#define	VPC_VG11READPIXELS				(VPG_VG11 +	VG11_READPIXELS)
+-#define	VPC_VG11REMOVEPATHCAPABILITIES	(VPG_VG11 +	VG11_REMOVEPATHCAPABILITIES)
+-#define	VPC_VG11RENDERTOMASK			(VPG_VG11 +	VG11_RENDERTOMASK)
+-#define	VPC_VG11ROTATE					(VPG_VG11 +	VG11_ROTATE)
+-#define	VPC_VG11SCALE					(VPG_VG11 +	VG11_SCALE)
+-#define	VPC_VG11SEPARABLECONVOLVE		(VPG_VG11 +	VG11_SEPARABLECONVOLVE)
+-#define	VPC_VG11SETCOLOR				(VPG_VG11 +	VG11_SETCOLOR)
+-#define	VPC_VG11SETF					(VPG_VG11 +	VG11_SETF)
+-#define	VPC_VG11SETFV					(VPG_VG11 +	VG11_SETFV)
+-#define	VPC_VG11SETGLYPHTOIMAGE			(VPG_VG11 +	VG11_SETGLYPHTOIMAGE)
+-#define	VPC_VG11SETGLYPHTOPATH			(VPG_VG11 +	VG11_SETGLYPHTOPATH)
+-#define	VPC_VG11SETI					(VPG_VG11 +	VG11_SETI)
+-#define	VPC_VG11SETIV					(VPG_VG11 +	VG11_SETIV)
+-#define	VPC_VG11SETPAINT				(VPG_VG11 +	VG11_SETPAINT)
+-#define	VPC_VG11SETPARAMETERF			(VPG_VG11 +	VG11_SETPARAMETERF)
+-#define	VPC_VG11SETPARAMETERFV			(VPG_VG11 +	VG11_SETPARAMETERFV)
+-#define	VPC_VG11SETPARAMETERI			(VPG_VG11 +	VG11_SETPARAMETERI)
+-#define	VPC_VG11SETPARAMETERIV			(VPG_VG11 +	VG11_SETPARAMETERIV)
+-#define	VPC_VG11SETPIXELS				(VPG_VG11 +	VG11_SETPIXELS)
+-#define	VPC_VG11SHEAR					(VPG_VG11 +	VG11_SHEAR)
+-#define	VPC_VG11TRANSFORMPATH			(VPG_VG11 +	VG11_TRANSFORMPATH)
+-#define	VPC_VG11TRANSLATE				(VPG_VG11 +	VG11_TRANSLATE)
+-#define	VPC_VG11WRITEPIXELS				(VPG_VG11 +	VG11_WRITEPIXELS)
++#define    VPC_ES20CALLS            (VPG_ES20 +    ES20_CALLS)
++#define    VPC_ES20DRAWCALLS        (VPG_ES20 +    ES20_DRAWCALLS)
++#define    VPC_ES20STATECHANGECALLS (VPG_ES20 +    ES20_STATECHANGECALLS)
++#define    VPC_ES20POINTCOUNT       (VPG_ES20 +    ES20_POINTCOUNT)
++#define    VPC_ES20LINECOUNT        (VPG_ES20 +    ES20_LINECOUNT)
++#define    VPC_ES20TRIANGLECOUNT    (VPG_ES20 +    ES20_TRIANGLECOUNT)
++
+ /* OpenVG Statistics Counter IDs. */
+-#define	VPC_VG11CALLS					(VPG_VG11 +	VG11_CALLS)
+-#define	VPC_VG11DRAWCALLS				(VPG_VG11 +	VG11_DRAWCALLS)
+-#define	VPC_VG11STATECHANGECALLS		(VPG_VG11 +	VG11_STATECHANGECALLS)
+-#define	VPC_VG11FILLCOUNT				(VPG_VG11 +	VG11_FILLCOUNT)
+-#define	VPC_VG11STROKECOUNT				(VPG_VG11 +	VG11_STROKECOUNT)
++#define    VPC_VG11CALLS            (VPG_VG11 +    VG11_CALLS)
++#define    VPC_VG11DRAWCALLS        (VPG_VG11 +    VG11_DRAWCALLS)
++#define    VPC_VG11STATECHANGECALLS (VPG_VG11 +    VG11_STATECHANGECALLS)
++#define    VPC_VG11FILLCOUNT        (VPG_VG11 +    VG11_FILLCOUNT)
++#define    VPC_VG11STROKECOUNT      (VPG_VG11 +    VG11_STROKECOUNT)
+ 
+ /* HAL Counters. */
+ #define VPC_HALVERTBUFNEWBYTEALLOC      (VPG_HAL + HAL_VERTBUFNEWBYTEALLOC)
+@@ -1018,7 +248,7 @@ extern "C" {
+ #define VPC_GPUREAD64BYTE               (VPG_GPU + GPU_READ64BYTE)
+ #define VPC_GPUWRITE64BYTE              (VPG_GPU + GPU_WRITE64BYTE)
+ #define VPC_GPUTOTALCYCLES              (VPG_GPU + GPU_TOTALCYCLES)
+-#define VPC_GPUIDLECYCLES              (VPG_GPU + GPU_IDLECYCLES)
++#define VPC_GPUIDLECYCLES               (VPG_GPU + GPU_IDLECYCLES)
+ 
+ /* HW: Shader Counters. */
+ #define VPC_VSINSTCOUNT                 (VPG_VS + VS_INSTCOUNT)
+@@ -1026,9 +256,9 @@ extern "C" {
+ #define VPC_VSTEXLDINSTCOUNT            (VPG_VS + VS_TEXLDINSTCOUNT)
+ #define VPC_VSRENDEREDVERTCOUNT         (VPG_VS + VS_RENDEREDVERTCOUNT)
+ /* HW: PS Count. */
+-#define VPC_PSINSTCOUNT             	(VPG_PS + PS_INSTCOUNT)
+-#define VPC_PSBRANCHINSTCOUNT       	(VPG_PS + PS_BRANCHINSTCOUNT)
+-#define VPC_PSTEXLDINSTCOUNT        	(VPG_PS + PS_TEXLDINSTCOUNT)
++#define VPC_PSINSTCOUNT                 (VPG_PS + PS_INSTCOUNT)
++#define VPC_PSBRANCHINSTCOUNT           (VPG_PS + PS_BRANCHINSTCOUNT)
++#define VPC_PSTEXLDINSTCOUNT            (VPG_PS + PS_TEXLDINSTCOUNT)
+ #define VPC_PSRENDEREDPIXCOUNT          (VPG_PS + PS_RENDEREDPIXCOUNT)
+ 
+ 
+@@ -1071,7 +301,7 @@ extern "C" {
+ #define VPC_PEDRAWNBYDEPTH              (VPG_PE + PE_DRAWNBYDEPTH)
+ 
+ /* HW: MC Counters. */
+-#define VPC_MCREADREQ8BPIPE            	(VPG_MC + MC_READREQ8BPIPE)
++#define VPC_MCREADREQ8BPIPE             (VPG_MC + MC_READREQ8BPIPE)
+ #define VPC_MCREADREQ8BIP               (VPG_MC + MC_READREQ8BIP)
+ #define VPC_MCWRITEREQ8BPIPE            (VPG_MC + MC_WRITEREQ8BPIPE)
+ 
+@@ -1087,6 +317,7 @@ extern "C" {
+ #define VPC_PVSATTRIBCOUNT          (VPG_PVS + PVS_ATTRIBCOUNT)
+ #define VPC_PVSUNIFORMCOUNT         (VPG_PVS + PVS_UNIFORMCOUNT)
+ #define VPC_PVSFUNCTIONCOUNT        (VPG_PVS + PVS_FUNCTIONCOUNT)
++#define VPC_PVSSOURCE               (VPG_PVS + PVS_SOURCE)
+ 
+ #define VPC_PPSINSTRCOUNT           (VPG_PPS + PPS_INSTRCOUNT)
+ #define VPC_PPSALUINSTRCOUNT        (VPG_PPS + PPS_ALUINSTRCOUNT)
+@@ -1094,7 +325,9 @@ extern "C" {
+ #define VPC_PPSATTRIBCOUNT          (VPG_PPS + PPS_ATTRIBCOUNT)
+ #define VPC_PPSUNIFORMCOUNT         (VPG_PPS + PPS_UNIFORMCOUNT)
+ #define VPC_PPSFUNCTIONCOUNT        (VPG_PPS + PPS_FUNCTIONCOUNT)
++#define VPC_PPSSOURCE               (VPG_PPS + PPS_SOURCE)
+ 
++#define VPC_PROGRAMHANDLE           (VPG_PROG + 1)
+ 
+ #define VPG_ES20_DRAW_NO  (VPG_ES20_DRAW + 1)
+ #define VPG_ES11_DRAW_NO  (VPG_ES11_DRAW + 1)
+@@ -1118,8 +351,8 @@ typedef struct _gcsPROFILER_COUNTERS
+ 
+     /* HW vairable counters. */
+     gctUINT32       gpuCyclesCounter;
+-	gctUINT32       gpuTotalCyclesCounter;
+-	gctUINT32       gpuIdleCyclesCounter;
++    gctUINT32       gpuTotalCyclesCounter;
++    gctUINT32       gpuIdleCyclesCounter;
+     gctUINT32       gpuTotalRead64BytesPerFrame;
+     gctUINT32       gpuTotalWrite64BytesPerFrame;
+ 
+@@ -1158,7 +391,7 @@ typedef struct _gcsPROFILER_COUNTERS
+     gctUINT32       ra_total_primitive_count;
+     gctUINT32       ra_pipe_cache_miss_counter;
+     gctUINT32       ra_prefetch_cache_miss_counter;
+-	gctUINT32       ra_eez_culled_counter;
++    gctUINT32       ra_eez_culled_counter;
+ 
+     /* TX */
+     gctUINT32       tx_total_bilinear_requests;
+@@ -1190,7 +423,7 @@ typedef struct _gcsPROFILER
+     gctBOOL         enableHal;
+     gctBOOL         enableHW;
+     gctBOOL         enableSH;
+-	gctBOOL         isSyncMode;
++    gctBOOL         isSyncMode;
+ 
+     gctBOOL         useSocket;
+     gctINT          sockFd;
+@@ -1234,14 +467,17 @@ typedef struct _gcsPROFILER
+     gctUINT32       redundantStateChangeCalls;
+ #endif
+ 
+-	gctUINT32       prevVSInstCount;
+-	gctUINT32       prevVSBranchInstCount;
+-	gctUINT32       prevVSTexInstCount;
+-	gctUINT32       prevVSVertexCount;
+-	gctUINT32       prevPSInstCount;
+-	gctUINT32       prevPSBranchInstCount;
+-	gctUINT32       prevPSTexInstCount;
+-	gctUINT32       prevPSPixelCount;
++    gctUINT32       prevVSInstCount;
++    gctUINT32       prevVSBranchInstCount;
++    gctUINT32       prevVSTexInstCount;
++    gctUINT32       prevVSVertexCount;
++    gctUINT32       prevPSInstCount;
++    gctUINT32       prevPSBranchInstCount;
++    gctUINT32       prevPSTexInstCount;
++    gctUINT32       prevPSPixelCount;
++
++    char*           psSource;
++    char*           vsSource;
+ 
+ }
+ gcsPROFILER;
+@@ -1315,6 +551,18 @@ gcoPROFILER_Count(
+ 	IN gctINT Value
+ 	);
+ 
++gceSTATUS
++gcoPROFILER_ShaderSourceFS(
++    IN gcoHAL Hal,
++    IN char* source
++    );
++
++gceSTATUS
++gcoPROFILER_ShaderSourceVS(
++    IN gcoHAL Hal,
++    IN char* source
++    );
++
+ /* Profile input vertex shader. */
+ gceSTATUS
+ gcoPROFILER_ShaderVS(
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
+index bc4171e..6e4d830 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
+@@ -568,6 +568,23 @@ gco2D_MonoBlit(
+ 	IN gceSURF_FORMAT DestFormat
+ 	);
+ 
++gceSTATUS
++gco2D_MonoBlitEx(
++    IN gco2D        Engine,
++    IN gctPOINTER   StreamBits,
++    IN gctINT32     StreamStride,
++    IN gctINT32     StreamWidth,
++    IN gctINT32     StreamHeight,
++    IN gctINT32     StreamX,
++    IN gctINT32     StreamY,
++    IN gctUINT32    FgColor,
++    IN gctUINT32    BgColor,
++    IN gcsRECT_PTR  SrcRect,
++    IN gcsRECT_PTR  DstRect,
++    IN gctUINT8     FgRop,
++    IN gctUINT8     BgRop
++    );
++
+ /* Set kernel size. */
+ gceSTATUS
+ gco2D_SetKernelSize(
+@@ -942,6 +959,15 @@ gco2D_SetSourceTileStatus(
+     );
+ 
+ gceSTATUS
++gco2D_SetTargetTileStatus(
++    IN gco2D Engine,
++    IN gce2D_TILE_STATUS_CONFIG TileStatusConfig,
++    IN gceSURF_FORMAT CompressedFormat,
++    IN gctUINT32 ClearValue,
++    IN gctUINT32 GpuAddress
++    );
++
++gceSTATUS
+ gco2D_QueryU32(
+     IN gco2D Engine,
+     IN gce2D_QUERY Item,
+@@ -955,6 +981,28 @@ gco2D_SetStateU32(
+     IN gctUINT32 Value
+     );
+ 
++gceSTATUS
++gco2D_SetStateArrayI32(
++    IN gco2D Engine,
++    IN gce2D_STATE State,
++    IN gctINT32_PTR Array,
++    IN gctINT32 ArraySize
++    );
++
++gceSTATUS
++gco2D_SetStateArrayU32(
++    IN gco2D Engine,
++    IN gce2D_STATE State,
++    IN gctUINT32_PTR Array,
++    IN gctINT32 ArraySize
++    );
++
++gceSTATUS
++gco2D_SetTargetRect(
++    IN gco2D Engine,
++    IN gcsRECT_PTR Rect
++    );
++
+ #ifdef __cplusplus
+ }
+ #endif
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
+index 5c0877d..14801aa 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
+@@ -128,6 +128,7 @@ typedef int                     gctBOOL;
+ typedef gctBOOL *               gctBOOL_PTR;
+ 
+ typedef int                     gctINT;
++typedef long                    gctLONG;
+ typedef signed char             gctINT8;
+ typedef signed short            gctINT16;
+ typedef signed int              gctINT32;
+@@ -171,6 +172,7 @@ typedef void *                  gctFILE;
+ typedef void *                  gctSIGNAL;
+ typedef void *                  gctWINDOW;
+ typedef void *                  gctIMAGE;
++typedef void *                  gctSYNC_POINT;
+ 
+ typedef void *					gctSEMAPHORE;
+ 
+@@ -941,12 +943,19 @@ typedef struct _gcsHAL_FRAME_INFO
+     OUT gctUINT                 readRequests[8];
+     OUT gctUINT                 writeRequests[8];
+ 
++    /* FE counters. */
++    OUT gctUINT                 drawCount;
++    OUT gctUINT                 vertexOutCount;
++    OUT gctUINT                 vertexMissCount;
++
+     /* 3D counters. */
+     OUT gctUINT                 vertexCount;
+     OUT gctUINT                 primitiveCount;
+     OUT gctUINT                 rejectedPrimitives;
+     OUT gctUINT                 culledPrimitives;
+     OUT gctUINT                 clippedPrimitives;
++    OUT gctUINT                 droppedPrimitives;
++    OUT gctUINT                 frustumClippedPrimitives;
+     OUT gctUINT                 outPrimitives;
+     OUT gctUINT                 inPrimitives;
+     OUT gctUINT                 culledQuadCount;
+@@ -964,18 +973,86 @@ typedef struct _gcsHAL_FRAME_INFO
+     OUT gctUINT                 shaderCycles;
+     OUT gctUINT                 vsInstructionCount;
+     OUT gctUINT                 vsTextureCount;
++    OUT gctUINT                 vsBranchCount;
++    OUT gctUINT                 vsVertices;
+     OUT gctUINT                 psInstructionCount;
+     OUT gctUINT                 psTextureCount;
++    OUT gctUINT                 psBranchCount;
++    OUT gctUINT                 psPixels;
+ 
+     /* Texture counters. */
+     OUT gctUINT                 bilinearRequests;
+     OUT gctUINT                 trilinearRequests;
+-    OUT gctUINT                 txBytes8;
++    OUT gctUINT                 txBytes8[2];
+     OUT gctUINT                 txHitCount;
+     OUT gctUINT                 txMissCount;
+ }
+ gcsHAL_FRAME_INFO;
+ 
++typedef enum _gcePATCH_ID
++{
++    gcePATCH_UNKNOWN = 0xFFFFFFFF,
++
++    /* Benchmark list*/
++    gcePATCH_GLB11 = 0x0,
++    gcePATCH_GLB21,
++    gcePATCH_GLB25,
++    gcePATCH_GLB27,
++
++    gcePATCH_BM21,
++    gcePATCH_MM,
++    gcePATCH_MM06,
++    gcePATCH_MM07,
++    gcePATCH_QUADRANT,
++    gcePATCH_ANTUTU,
++    gcePATCH_SMARTBENCH,
++    gcePATCH_JPCT,
++    gcePATCH_NENAMARK,
++    gcePATCH_NENAMARK2,
++    gcePATCH_NEOCORE,
++    gcePATCH_GLB,
++    gcePATCH_GB,
++    gcePATCH_RTESTVA,
++    gcePATCH_BMX,
++    gcePATCH_BMGUI,
++
++    /* Game list */
++    gcePATCH_NBA2013,
++    gcePATCH_BARDTALE,
++    gcePATCH_BUSPARKING3D,
++    gcePATCH_FISHBOODLE,
++    gcePATCH_SUBWAYSURFER,
++    gcePATCH_HIGHWAYDRIVER,
++    gcePATCH_PREMIUM,
++    gcePATCH_RACEILLEGAL,
++    gcePATCH_BLABLA,
++    gcePATCH_MEGARUN,
++    gcePATCH_GALAXYONFIRE2,
++    gcePATCH_GLOFTR3HM,
++    gcePATCH_GLOFTSXHM,
++    gcePATCH_GLOFTF3HM,
++    gcePATCH_GLOFTGANG,
++    gcePATCH_XRUNNER,
++    gcePATCH_WP,
++    gcePATCH_DEVIL,
++    gcePATCH_HOLYARCH,
++    gcePATCH_MUSE,
++    gcePATCH_SG,
++    gcePATCH_SIEGECRAFT,
++    gcePATCH_CARCHALLENGE,
++    gcePATCH_HEROESCALL,
++    gcePATCH_MONOPOLY,
++    gcePATCH_CTGL20,
++    gcePATCH_FIREFOX,
++    gcePATCH_CHORME,
++    gcePATCH_DUOKANTV,
++    gcePATCH_TESTAPP,
++
++    /* Count enum*/
++    gcePATCH_COUNT,
++}
++gcePATCH_ID;
++
+ #if gcdLINK_QUEUE_SIZE
+ typedef struct _gckLINKDATA * gckLINKDATA;
+ struct _gckLINKDATA
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
+index 03cb4d6..2eab666 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h
+@@ -28,7 +28,7 @@
+ 
+ #define gcvVERSION_PATCH        9
+ 
+-#define gcvVERSION_BUILD     6622
++#define gcvVERSION_BUILD     9754
+ 
+ #define gcvVERSION_DATE      __DATE__
+ 
+diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
+index 4d48bd5..b029428 100644
+--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
++++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
+@@ -25,7 +25,9 @@
+ #include <linux/mm.h>
+ #include <linux/mman.h>
+ #include <linux/slab.h>
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
+ #include <mach/hardware.h>
++#endif
+ #include <linux/pm_runtime.h>
+ 
+ #define _GC_OBJ_ZONE    gcvZONE_DEVICE
+@@ -305,6 +307,7 @@ gckGALDEVICE_Construct(
+     IN gctUINT LogFileSize,
+     IN struct device *pdev,
+     IN gctINT PowerManagement,
++    IN gctINT GpuProfiler,
+     OUT gckGALDEVICE *Device
+     )
+ {
+@@ -369,6 +372,10 @@ gckGALDEVICE_Construct(
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
+     /*get gpu regulator*/
+     device->gpu_regulator = regulator_get(pdev, "cpu_vddgpu");
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++    device->gpu_regulator = regulator_get(pdev, "vddpu");
++#endif
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+     if (IS_ERR(device->gpu_regulator)) {
+ 	gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER,
+ 		"%s(%d): Failed to get gpu regulator  %s/%s \n",
+@@ -541,6 +548,10 @@ gckGALDEVICE_Construct(
+             device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
+             ));
+ 
++        gcmkONERROR(gckHARDWARE_SetGpuProfiler(
++            device->kernels[gcvCORE_MAJOR]->hardware, GpuProfiler
++            ));
++
+ #if COMMAND_PROCESSOR_VERSION == 1
+         /* Start the command queue. */
+         gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_MAJOR]->command));
+@@ -599,6 +610,7 @@ gckGALDEVICE_Construct(
+             device->kernels[gcvCORE_2D]->hardware, PowerManagement
+             ));
+ 
++
+ #if COMMAND_PROCESSOR_VERSION == 1
+         /* Start the command queue. */
+         gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_2D]->command));
+@@ -635,6 +647,7 @@ gckGALDEVICE_Construct(
+             device->kernels[gcvCORE_VG]->vg->hardware,
+             PowerManagement
+             ));
++
+ #endif
+     }
+     else
+@@ -849,6 +862,7 @@ gckGALDEVICE_Construct(
+             }
+             else
+             {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
+                 mem_region = request_mem_region(
+                     ContiguousBase, ContiguousSize, "galcore managed memory"
+                     );
+@@ -864,6 +878,7 @@ gckGALDEVICE_Construct(
+ 
+                     gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+                 }
++#endif
+ 
+                 device->requestedContiguousBase  = ContiguousBase;
+                 device->requestedContiguousSize  = ContiguousSize;
+@@ -1107,7 +1122,7 @@ gckGALDEVICE_Destroy(
+             pm_runtime_disable(Device->pmdev);
+ #endif
+ 
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+         if (Device->gpu_regulator) {
+            regulator_put(Device->gpu_regulator);
+            Device->gpu_regulator = NULL;
+diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
+index dde4f03..c51432f 100644
+--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
++++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
+@@ -26,6 +26,15 @@
+ ******************************* gckGALDEVICE Structure *******************************
+ \******************************************************************************/
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++struct contiguous_mem_pool {
++	struct dma_attrs attrs;
++	dma_addr_t phys;
++	void *virt;
++	size_t size;
++};
++#endif
++
+ typedef struct _gckGALDEVICE
+ {
+     /* Objects. */
+@@ -91,12 +100,16 @@ typedef struct _gckGALDEVICE
+     struct clk         *clk_2d_axi;
+     struct clk         *clk_vg_axi;
+ 
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+     /*Power management.*/
+     struct regulator      *gpu_regulator;
+ #endif
+ 	/*Run time pm*/
+ 	struct device		*pmdev;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++	struct contiguous_mem_pool *pool;
++	struct reset_control *rstc[gcdMAX_GPU_COUNT];
++#endif
+ }
+ * gckGALDEVICE;
+ 
+@@ -171,6 +184,7 @@ gceSTATUS gckGALDEVICE_Construct(
+     IN gctUINT LogFileSize,
+     IN struct device *pdev,
+     IN gctINT PowerManagement,
++    IN gctINT GpuProfiler,
+     OUT gckGALDEVICE *Device
+     );
+ 
+diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
+index bacd531..88a7e4e6 100644
+--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
++++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
+@@ -1,7 +1,7 @@
+ /****************************************************************************
+ *
+ *    Copyright (C) 2005 - 2013 by Vivante Corp.
+-*    Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
++*    Copyright (C) 2011-2013 Freescale Semiconductor, Inc.
+ *
+ *    This program is free software; you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+@@ -69,14 +69,26 @@ task_notify_func(struct notifier_block *self, unsigned long val, void *data)
+ #include <mach/viv_gpu.h>
+ #else
+ #include <linux/pm_runtime.h>
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
+ #include <mach/busfreq.h>
++#else
++#include <linux/reset.h>
++#endif
+ #endif
+ /* Zone used for header/footer. */
+ #define _GC_OBJ_ZONE    gcvZONE_DRIVER
+ 
+ #if gcdENABLE_FSCALE_VAL_ADJUST
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++#include <linux/device_cooling.h>
++#define REG_THERMAL_NOTIFIER(a) register_devfreq_cooling_notifier(a);
++#define UNREG_THERMAL_NOTIFIER(a) unregister_devfreq_cooling_notifier(a);
++#else
+ extern int register_thermal_notifier(struct notifier_block *nb);
+ extern int unregister_thermal_notifier(struct notifier_block *nb);
++#define REG_THERMAL_NOTIFIER(a) register_thermal_notifier(a);
++#define UNREG_THERMAL_NOTIFIER(a) unregister_thermal_notifier(a);
++#endif
+ #endif
+ 
+ MODULE_DESCRIPTION("Vivante Graphics Driver");
+@@ -116,7 +128,11 @@ module_param(registerMemBaseVG, ulong, 0644);
+ static ulong registerMemSizeVG = 2 << 10;
+ module_param(registerMemSizeVG, ulong, 0644);
+ 
++#if gcdENABLE_FSCALE_VAL_ADJUST
++static ulong contiguousSize = 128 << 20;
++#else
+ static ulong contiguousSize = 4 << 20;
++#endif
+ module_param(contiguousSize, ulong, 0644);
+ 
+ static ulong contiguousBase = 0;
+@@ -134,6 +150,9 @@ module_param(compression, int, 0644);
+ static int powerManagement = 1;
+ module_param(powerManagement, int, 0644);
+ 
++static int gpuProfiler = 0;
++module_param(gpuProfiler, int, 0644);
++
+ static int signal = 48;
+ module_param(signal, int, 0644);
+ 
+@@ -786,7 +805,9 @@ static int drv_init(struct device *pdev)
+ 
+     printk(KERN_INFO "Galcore version %d.%d.%d.%d\n",
+         gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD);
+-
++    /* when enable gpu profiler, we need to turn off gpu powerMangement */
++    if(gpuProfiler)
++        powerManagement = 0;
+     if (showArgs)
+     {
+         printk("galcore options:\n");
+@@ -818,6 +839,7 @@ static int drv_init(struct device *pdev)
+         printk("  physSize          = 0x%08lX\n", physSize);
+         printk("  logFileSize       = %d KB \n",  logFileSize);
+         printk("  powerManagement   = %d\n",      powerManagement);
++        printk("  gpuProfiler   = %d\n",      gpuProfiler);
+ #if ENABLE_GPU_CLOCK_BY_DRIVER
+         printk("  coreClock       = %lu\n",     coreClock);
+ #endif
+@@ -841,9 +863,14 @@ static int drv_init(struct device *pdev)
+         logFileSize,
+         pdev,
+         powerManagement,
++        gpuProfiler,
+         &device
+         ));
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++	device->pool = dev_get_drvdata(pdev);
++#endif
++
+     /* Start the GAL device. */
+     gcmkONERROR(gckGALDEVICE_Start(device));
+ 
+@@ -1028,11 +1055,18 @@ static struct notifier_block thermal_hot_pm_notifier = {
+ 
+ 
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
++static int gpu_probe(struct platform_device *pdev)
++#else
+ static int __devinit gpu_probe(struct platform_device *pdev)
++#endif
+ {
+     int ret = -ENODEV;
+     struct resource* res;
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++	struct contiguous_mem_pool *pool;
++	struct reset_control *rstc;
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
+ 	struct device_node *dn =pdev->dev.of_node;
+ 	const u32 *prop;
+ #else
+@@ -1077,7 +1111,22 @@ static int __devinit gpu_probe(struct platform_device *pdev)
+         registerMemSizeVG = res->end - res->start + 1;
+     }
+ 
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++	pool = devm_kzalloc(&pdev->dev, sizeof(*pool), GFP_KERNEL);
++	if (!pool)
++		return -ENOMEM;
++	pool->size = contiguousSize;
++	init_dma_attrs(&pool->attrs);
++	dma_set_attr(DMA_ATTR_WRITE_COMBINE, &pool->attrs);
++	pool->virt = dma_alloc_attrs(&pdev->dev, pool->size, &pool->phys,
++				     GFP_KERNEL, &pool->attrs);
++	if (!pool->virt) {
++		dev_err(&pdev->dev, "Failed to allocate contiguous memory\n");
++		return -ENOMEM;
++	}
++	contiguousBase = pool->phys;
++	dev_set_drvdata(&pdev->dev, pool);
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
+ 	prop = of_get_property(dn, "contiguousbase", NULL);
+ 	if(prop)
+ 		contiguousBase = *prop;
+@@ -1095,30 +1144,56 @@ static int __devinit gpu_probe(struct platform_device *pdev)
+ 
+     if (!ret)
+     {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++	rstc = devm_reset_control_get(&pdev->dev, "gpu3d");
++	galDevice->rstc[gcvCORE_MAJOR] = IS_ERR(rstc) ? NULL : rstc;
++
++	rstc = devm_reset_control_get(&pdev->dev, "gpu2d");
++	galDevice->rstc[gcvCORE_2D] = IS_ERR(rstc) ? NULL : rstc;
++
++	rstc = devm_reset_control_get(&pdev->dev, "gpuvg");
++	galDevice->rstc[gcvCORE_VG] = IS_ERR(rstc) ? NULL : rstc;
++#endif
+         platform_set_drvdata(pdev, galDevice);
+ 
+ #if gcdENABLE_FSCALE_VAL_ADJUST
+-        if(galDevice->kernels[gcvCORE_MAJOR])
+-            register_thermal_notifier(&thermal_hot_pm_notifier);
++        if (galDevice->kernels[gcvCORE_MAJOR])
++            REG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
+ #endif
+         gcmkFOOTER_NO();
+         return ret;
+     }
+ #if gcdENABLE_FSCALE_VAL_ADJUST
+-    unregister_thermal_notifier(&thermal_hot_pm_notifier);
++    UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++	dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
++		       &pool->attrs);
+ #endif
+     gcmkFOOTER_ARG(KERN_INFO "Failed to register gpu driver: %d\n", ret);
+     return ret;
+ }
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
++static int gpu_remove(struct platform_device *pdev)
++#else
+ static int __devexit gpu_remove(struct platform_device *pdev)
++#endif
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++	gckGALDEVICE device = platform_get_drvdata(pdev);
++	struct contiguous_mem_pool *pool = device->pool;
++#endif
+     gcmkHEADER();
+ #if gcdENABLE_FSCALE_VAL_ADJUST
+     if(galDevice->kernels[gcvCORE_MAJOR])
+-        unregister_thermal_notifier(&thermal_hot_pm_notifier);
++        UNREG_THERMAL_NOTIFIER(&thermal_hot_pm_notifier);
+ #endif
+     drv_exit();
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++	dma_free_attrs(&pdev->dev, pool->size, pool->virt, pool->phys,
++		       &pool->attrs);
++#endif
+     gcmkFOOTER_NO();
+     return 0;
+ }
+@@ -1254,13 +1329,17 @@ MODULE_DEVICE_TABLE(of, mxs_gpu_dt_ids);
+ #ifdef CONFIG_PM
+ static int gpu_runtime_suspend(struct device *dev)
+ {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
+ 	release_bus_freq(BUS_FREQ_HIGH);
++#endif
+ 	return 0;
+ }
+ 
+ static int gpu_runtime_resume(struct device *dev)
+ {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
+ 	request_bus_freq(BUS_FREQ_HIGH);
++#endif
+ 	return 0;
+ }
+ 
+@@ -1284,7 +1363,11 @@ static const struct dev_pm_ops gpu_pm_ops = {
+ 
+ static struct platform_driver gpu_driver = {
+     .probe      = gpu_probe,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
++    .remove     = gpu_remove,
++#else
+     .remove     = __devexit_p(gpu_remove),
++#endif
+ 
+     .suspend    = gpu_suspend,
+     .resume     = gpu_resume,
+diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
+index e7edc39..331c73f 100644
+--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
++++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
+@@ -30,19 +30,30 @@
+ #include <linux/dma-mapping.h>
+ #include <linux/slab.h>
+ #include <linux/idr.h>
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
+ #include <mach/hardware.h>
++#endif
+ #include <linux/workqueue.h>
+ #include <linux/idr.h>
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,23)
+ #include <linux/math64.h>
+ #endif
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++#include <linux/reset.h>
++static inline void imx_gpc_power_up_pu(bool flag) {}
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
+ #include <mach/common.h>
+ #endif
+ #include <linux/delay.h>
+ #include <linux/pm_runtime.h>
+ 
+ 
++#if gcdANDROID_NATIVE_FENCE_SYNC
++#include <linux/file.h>
++#include "gc_hal_kernel_sync.h"
++#endif
++
++
+ #define _GC_OBJ_ZONE    gcvZONE_OS
+ 
+ /*******************************************************************************
+@@ -148,6 +159,7 @@ typedef struct _gcsINTEGER_DB
+ {
+     struct idr                  idr;
+     spinlock_t                  lock;
++    gctINT                      curr;
+ }
+ gcsINTEGER_DB;
+ 
+@@ -180,6 +192,14 @@ struct _gckOS
+     /* signal id database. */
+     gcsINTEGER_DB               signalDB;
+ 
++#if gcdANDROID_NATIVE_FENCE_SYNC
++    /* Lock. */
++    gctPOINTER                  syncPointMutex;
++
++    /* sync point id database. */
++    gcsINTEGER_DB               syncPointDB;
++#endif
++
+     gcsUSER_MAPPING_PTR         userMap;
+     gctPOINTER                  debugLock;
+ 
+@@ -215,6 +235,25 @@ typedef struct _gcsSIGNAL
+ }
+ gcsSIGNAL;
+ 
++#if gcdANDROID_NATIVE_FENCE_SYNC
++typedef struct _gcsSYNC_POINT * gcsSYNC_POINT_PTR;
++typedef struct _gcsSYNC_POINT
++{
++    /* The reference counter. */
++    atomic_t ref;
++
++    /* State. */
++    atomic_t state;
++
++    /* timeline. */
++    struct sync_timeline * timeline;
++
++    /* ID. */
++    gctUINT32 id;
++}
++gcsSYNC_POINT;
++#endif
++
+ typedef struct _gcsPageInfo * gcsPageInfo_PTR;
+ typedef struct _gcsPageInfo
+ {
+@@ -767,7 +806,32 @@ _AllocateIntegerId(
+     )
+ {
+     int result;
++    gctINT next;
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
++    idr_preload(GFP_KERNEL | gcdNOWARN);
+ 
++    spin_lock(&Database->lock);
++
++    next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
++    result = idr_alloc(&Database->idr, KernelPointer, next, 0, GFP_ATOMIC);
++
++    if (!result)
++    {
++        Database->curr = *Id;
++    }
++
++    spin_unlock(&Database->lock);
++
++    idr_preload_end();
++
++    if (result < 0)
++    {
++        return gcvSTATUS_OUT_OF_RESOURCES;
++    }
++
++    *Id = result;
++#else
+ again:
+     if (idr_pre_get(&Database->idr, GFP_KERNEL | gcdNOWARN) == 0)
+     {
+@@ -776,8 +840,15 @@ again:
+ 
+     spin_lock(&Database->lock);
+ 
+-    /* Try to get a id greater than 0. */
+-    result = idr_get_new_above(&Database->idr, KernelPointer, 1, Id);
++    next = (Database->curr + 1 <= 0) ? 1 : Database->curr + 1;
++
++    /* Try to get a id greater than current id. */
++    result = idr_get_new_above(&Database->idr, KernelPointer, next, Id);
++
++    if (!result)
++    {
++        Database->curr = *Id;
++    }
+ 
+     spin_unlock(&Database->lock);
+ 
+@@ -790,6 +861,7 @@ again:
+     {
+         return gcvSTATUS_OUT_OF_RESOURCES;
+     }
++#endif
+ 
+     return gcvSTATUS_OK;
+ }
+@@ -1008,6 +1080,21 @@ gckOS_Construct(
+     /* Initialize signal id database. */
+     idr_init(&os->signalDB.idr);
+ 
++#if gcdANDROID_NATIVE_FENCE_SYNC
++    /*
++     * Initialize the sync point manager.
++     */
++
++    /* Initialize mutex. */
++    gcmkONERROR(gckOS_CreateMutex(os, &os->syncPointMutex));
++
++    /* Initialize sync point id database lock. */
++    spin_lock_init(&os->syncPointDB.lock);
++
++    /* Initialize sync point id database. */
++    idr_init(&os->syncPointDB.idr);
++#endif
++
+ #if gcdUSE_NON_PAGED_MEMORY_CACHE
+     os->cacheSize = 0;
+     os->cacheHead = gcvNULL;
+@@ -1031,6 +1118,15 @@ gckOS_Construct(
+     return gcvSTATUS_OK;
+ 
+ OnError:
++
++#if gcdANDROID_NATIVE_FENCE_SYNC
++    if (os->syncPointMutex != gcvNULL)
++    {
++        gcmkVERIFY_OK(
++            gckOS_DeleteMutex(os, os->syncPointMutex));
++    }
++#endif
++
+     if (os->signalMutex != gcvNULL)
+     {
+         gcmkVERIFY_OK(
+@@ -1104,6 +1200,15 @@ gckOS_Destroy(
+     _FreeAllNonPagedMemoryCache(Os);
+ #endif
+ 
++#if gcdANDROID_NATIVE_FENCE_SYNC
++    /*
++     * Destroy the sync point manager.
++     */
++
++    /* Destroy the mutex. */
++    gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Os->syncPointMutex));
++#endif
++
+     /*
+      * Destroy the signal manager.
+      */
+@@ -1961,12 +2066,6 @@ gckOS_AllocateNonPagedMemory(
+         gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
+     }
+ 
+-    if ((Os->device->baseAddress & 0x80000000) != (mdl->dmaHandle & 0x80000000))
+-    {
+-        mdl->dmaHandle = (mdl->dmaHandle & ~0x80000000)
+-                       | (Os->device->baseAddress & 0x80000000);
+-    }
+-
+     mdl->addr = addr;
+ 
+     /* Return allocated memory. */
+@@ -2307,6 +2406,7 @@ gckOS_ReadRegisterEx(
+ 
+     /* Verify the arguments. */
+     gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
++    gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
+     gcmkVERIFY_ARGUMENT(Data != gcvNULL);
+ 
+     *Data = readl((gctUINT8 *)Os->device->registerBases[Core] + Address);
+@@ -2357,6 +2457,8 @@ gckOS_WriteRegisterEx(
+ {
+     gcmkHEADER_ARG("Os=0x%X Core=%d Address=0x%X Data=0x%08x", Os, Core, Address, Data);
+ 
++    gcmkVERIFY_ARGUMENT(Address < Os->device->requestedRegisterMemSizes[Core]);
++
+     writel(Data, (gctUINT8 *)Os->device->registerBases[Core] + Address);
+ 
+     /* Success. */
+@@ -2799,16 +2901,25 @@ gckOS_MapPhysical(
+ 
+     if (mdl == gcvNULL)
+     {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++	struct contiguous_mem_pool *pool = Os->device->pool;
++
++	if (Physical >= pool->phys && Physical < pool->phys + pool->size)
++		logical = (gctPOINTER)(Physical - pool->phys + pool->virt);
++	else
++		logical = gcvNULL;
++#else
+         /* Map memory as cached memory. */
+         request_mem_region(physical, Bytes, "MapRegion");
+         logical = (gctPOINTER) ioremap_nocache(physical, Bytes);
++#endif
+ 
+         if (logical == gcvNULL)
+         {
+             gcmkTRACE_ZONE(
+                 gcvLEVEL_INFO, gcvZONE_OS,
+-                "%s(%d): Failed to ioremap",
+-                __FUNCTION__, __LINE__
++                "%s(%d): Failed to map physical address 0x%08x",
++                __FUNCTION__, __LINE__, Physical
+                 );
+ 
+             MEMORY_UNLOCK(Os);
+@@ -3621,7 +3732,7 @@ gckOS_Delay(
+     if (Delay > 0)
+     {
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
+-        ktime_t delay = ktime_set(0, Delay * NSEC_PER_MSEC);
++        ktime_t delay = ktime_set(Delay/1000, (Delay%1000) * NSEC_PER_MSEC);
+         __set_current_state(TASK_UNINTERRUPTIBLE);
+         schedule_hrtimeout(&delay, HRTIMER_MODE_REL);
+ #else
+@@ -3881,8 +3992,13 @@ gckOS_AllocatePagedMemoryEx(
+ 
+     if (Contiguous)
+     {
+-        /* Get contiguous pages, and suppress warning (stack dump) from kernel when
+-           we run out of memory. */
++        gctUINT32 order = get_order(bytes);
++
++        if (order >= MAX_ORDER)
++        {
++            gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
++        }
++
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
+         addr =
+             alloc_pages_exact(numPages * PAGE_SIZE, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY);
+@@ -3894,12 +4010,12 @@ gckOS_AllocatePagedMemoryEx(
+         mdl->exact = gcvTRUE;
+ #else
+         mdl->u.contiguousPages =
+-            alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, GetOrder(numPages));
++            alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, order);
+ #endif
+         if (mdl->u.contiguousPages == gcvNULL)
+         {
+             mdl->u.contiguousPages =
+-                alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, GetOrder(numPages));
++                alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, order);
+ 
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
+             mdl->exact = gcvFALSE;
+@@ -4239,13 +4355,13 @@ gckOS_LockPages(
+         }
+ 
+         mdlMap->vma->vm_flags |= gcdVM_FLAGS;
+-#if !gcdPAGED_MEMORY_CACHEABLE
++
+         if (Cacheable == gcvFALSE)
+         {
+             /* Make this mapping non-cached. */
+             mdlMap->vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
+         }
+-#endif
++
+         addr = mdl->addr;
+ 
+         /* Now map all the vmalloc pages to this user address. */
+@@ -5336,6 +5452,7 @@ OnError:
+         {
+             /* Get the user pages. */
+             down_read(&current->mm->mmap_sem);
++
+             result = get_user_pages(current,
+                     current->mm,
+                     memory & PAGE_MASK,
+@@ -5345,105 +5462,127 @@ OnError:
+                     pages,
+                     gcvNULL
+                     );
++
+             up_read(&current->mm->mmap_sem);
+ 
+             if (result <=0 || result < pageCount)
+             {
+                 struct vm_area_struct *vma;
+ 
+-                /* Free the page table. */
+-                if (pages != gcvNULL)
++                /* Release the pages if any. */
++                if (result > 0)
+                 {
+-                    /* Release the pages if any. */
+-                    if (result > 0)
++                    for (i = 0; i < result; i++)
+                     {
+-                        for (i = 0; i < result; i++)
++                        if (pages[i] == gcvNULL)
+                         {
+-                            if (pages[i] == gcvNULL)
+-                            {
+-                                break;
+-                            }
+-
+-                            page_cache_release(pages[i]);
++                            break;
+                         }
++
++                        page_cache_release(pages[i]);
++                        pages[i] = gcvNULL;
+                     }
+ 
+-                    kfree(pages);
+-                    pages = gcvNULL;
++                    result = 0;
+                 }
+ 
+                 vma = find_vma(current->mm, memory);
+ 
+-                if (vma && (vma->vm_flags & VM_PFNMAP) )
++                if (vma && (vma->vm_flags & VM_PFNMAP))
+                 {
+                     pte_t       * pte;
+                     spinlock_t  * ptl;
+-                    unsigned long pfn;
++                    gctUINTPTR_T logical = memory;
+ 
+-                    pgd_t * pgd = pgd_offset(current->mm, memory);
+-                    pud_t * pud = pud_offset(pgd, memory);
+-                    if (pud)
++                    for (i = 0; i < pageCount; i++)
+                     {
+-                        pmd_t * pmd = pmd_offset(pud, memory);
+-                        pte = pte_offset_map_lock(current->mm, pmd, memory, &ptl);
+-                        if (!pte)
++                        pgd_t * pgd = pgd_offset(current->mm, logical);
++                        pud_t * pud = pud_offset(pgd, logical);
++
++                        if (pud)
++                        {
++                            pmd_t * pmd = pmd_offset(pud, logical);
++                            pte = pte_offset_map_lock(current->mm, pmd, logical, &ptl);
++                            if (!pte)
++                            {
++                                gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
++                            }
++                        }
++                        else
+                         {
+                             gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
+                         }
++
++                        pages[i] = pte_page(*pte);
++                        pte_unmap_unlock(pte, ptl);
++
++                        /* Advance to next. */
++                        logical += PAGE_SIZE;
+                     }
+-                    else
++                }
++                else
++                {
++                    gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
++                }
++
++                /* Check if this memory is contiguous for old mmu. */
++                if (Os->device->kernels[Core]->hardware->mmuVersion == 0)
++                {
++                    for (i = 1; i < pageCount; i++)
+                     {
+-                        gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
++                        if (pages[i] != nth_page(pages[0], i))
++                        {
++                            /* Non-contiguous. */
++                            break;
++                        }
+                     }
+ 
+-                    pfn      = pte_pfn(*pte);
+-
+-                    physical = (pfn << PAGE_SHIFT) | (memory & ~PAGE_MASK);
++                    if (i == pageCount)
++                    {
++                        /* Contiguous memory. */
++                        physical = page_to_phys(pages[0]) | (memory & ~PAGE_MASK);
+ 
+-                    pte_unmap_unlock(pte, ptl);
++                        if (!((physical - Os->device->baseAddress) & 0x80000000))
++                        {
++                            kfree(pages);
++                            pages = gcvNULL;
+ 
+-                    if ((Os->device->kernels[Core]->hardware->mmuVersion == 0)
+-                            && !((physical - Os->device->baseAddress) & 0x80000000))
+-                    {
+-                        info->pages = gcvNULL;
+-                        info->pageTable = gcvNULL;
++                            info->pages = gcvNULL;
++                            info->pageTable = gcvNULL;
+ 
+-                        MEMORY_MAP_UNLOCK(Os);
++                            MEMORY_MAP_UNLOCK(Os);
+ 
+-                        *Address = physical - Os->device->baseAddress;
+-                        *Info    = info;
++                            *Address = physical - Os->device->baseAddress;
++                            *Info    = info;
+ 
+-                        gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
+-                                *Info, *Address);
++                            gcmkFOOTER_ARG("*Info=0x%X *Address=0x%08x",
++                                           *Info, *Address);
+ 
+-                        return gcvSTATUS_OK;
++                            return gcvSTATUS_OK;
++                        }
+                     }
+                 }
+-                else
++
++                /* Reference pages. */
++                for (i = 0; i < pageCount; i++)
+                 {
+-                    gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
++                    get_page(pages[i]);
+                 }
+             }
+         }
+ 
+-        if (pages)
+-        {
+-            for (i = 0; i < pageCount; i++)
+-            {
+-                /* Flush(clean) the data cache. */
+-                gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
+-                                 (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
+-                                 (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
+-                                 PAGE_SIZE));
+-            }
+-        }
+-        else
++        for (i = 0; i < pageCount; i++)
+         {
++#ifdef CONFIG_ARM
++            gctUINT32 data;
++            get_user(data, (gctUINT32*)((memory & PAGE_MASK) + i * PAGE_SIZE));
++#endif
++
+             /* Flush(clean) the data cache. */
+             gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
+-                             (gctPOINTER)(gctUINTPTR_T)(physical & PAGE_MASK),
+-                             (gctPOINTER)(memory & PAGE_MASK),
+-                             PAGE_SIZE * pageCount));
++                             (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
++                             (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
++                             PAGE_SIZE));
+         }
+ 
+ #if gcdENABLE_VG
+@@ -5464,20 +5603,14 @@ OnError:
+                                               (gctPOINTER *) &pageTable,
+                                               &address));
+         }
++
+         /* Fill the page table. */
+         for (i = 0; i < pageCount; i++)
+         {
+             gctUINT32 phys;
+             gctUINT32_PTR tab = pageTable + i * (PAGE_SIZE/4096);
+ 
+-            if (pages)
+-            {
+-                phys = page_to_phys(pages[i]);
+-            }
+-            else
+-            {
+-                phys = (physical & PAGE_MASK) + i * PAGE_SIZE;
+-            }
++            phys = page_to_phys(pages[i]);
+ 
+ #if gcdENABLE_VG
+             if (Core == gcvCORE_VG)
+@@ -6126,7 +6259,7 @@ gckOS_CacheClean(
+ #else
+     dma_sync_single_for_device(
+               gcvNULL,
+-              Physical,
++              (dma_addr_t)Physical,
+               Bytes,
+               DMA_TO_DEVICE);
+ #endif
+@@ -6205,7 +6338,7 @@ gckOS_CacheInvalidate(
+ #else
+     dma_sync_single_for_device(
+               gcvNULL,
+-              Physical,
++              (dma_addr_t)Physical,
+               Bytes,
+               DMA_FROM_DEVICE);
+ #endif
+@@ -6279,7 +6412,7 @@ gckOS_CacheFlush(
+ #else
+     dma_sync_single_for_device(
+               gcvNULL,
+-              Physical,
++              (dma_addr_t)Physical,
+               Bytes,
+               DMA_BIDIRECTIONAL);
+ #endif
+@@ -6827,6 +6960,9 @@ gckOS_SetGPUPower(
+     struct clk *clk_2dcore = Os->device->clk_2d_core;
+     struct clk *clk_2d_axi = Os->device->clk_2d_axi;
+     struct clk *clk_vg_axi = Os->device->clk_vg_axi;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++    int ret;
++#endif
+ 
+     gctBOOL oldClockState = gcvFALSE;
+     gctBOOL oldPowerState = gcvFALSE;
+@@ -6852,9 +6988,13 @@ gckOS_SetGPUPower(
+     }
+ 	if((Power == gcvTRUE) && (oldPowerState == gcvFALSE))
+ 	{
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
+-        if(!IS_ERR(Os->device->gpu_regulator))
+-            regulator_enable(Os->device->gpu_regulator);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++        if(!IS_ERR(Os->device->gpu_regulator)) {
++            ret = regulator_enable(Os->device->gpu_regulator);
++            if (ret != 0)
++                gckOS_Print("%s(%d): fail to enable pu regulator %d!\n",
++                    __FUNCTION__, __LINE__, ret);
++        }
+ #else
+         imx_gpc_power_up_pu(true);
+ #endif
+@@ -6969,7 +7109,7 @@ gckOS_SetGPUPower(
+ 		pm_runtime_put_sync(Os->device->pmdev);
+ #endif
+ 
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+         if(!IS_ERR(Os->device->gpu_regulator))
+             regulator_disable(Os->device->gpu_regulator);
+ #else
+@@ -7033,6 +7173,10 @@ gckOS_ResetGPU(
+     }
+ 
+     gcmkFOOTER_NO();
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
++	struct reset_control *rstc = Os->device->rstc[Core];
++	if (rstc)
++		reset_control_reset(rstc);
+ #else
+     imx_src_reset_gpu((int)Core);
+ #endif
+@@ -8529,3 +8673,338 @@ gckOS_GetProcessNameByPid(
+     return gcvSTATUS_OK;
+ }
+ 
++#if gcdANDROID_NATIVE_FENCE_SYNC
++
++gceSTATUS
++gckOS_CreateSyncPoint(
++    IN gckOS Os,
++    OUT gctSYNC_POINT * SyncPoint
++    )
++{
++    gceSTATUS status;
++    gcsSYNC_POINT_PTR syncPoint;
++
++    gcmkHEADER_ARG("Os=0x%X", Os);
++
++    /* Verify the arguments. */
++    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
++
++    /* Create an sync point structure. */
++    syncPoint = (gcsSYNC_POINT_PTR) kmalloc(
++            sizeof(gcsSYNC_POINT), GFP_KERNEL | gcdNOWARN);
++
++    if (syncPoint == gcvNULL)
++    {
++        gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
++    }
++
++    /* Initialize the sync point. */
++    atomic_set(&syncPoint->ref, 1);
++    atomic_set(&syncPoint->state, 0);
++
++    gcmkONERROR(_AllocateIntegerId(&Os->syncPointDB, syncPoint, &syncPoint->id));
++
++    *SyncPoint = (gctSYNC_POINT)(gctUINTPTR_T)syncPoint->id;
++
++    gcmkFOOTER_ARG("*SyncPonint=%d", syncPoint->id);
++    return gcvSTATUS_OK;
++
++OnError:
++    if (syncPoint != gcvNULL)
++    {
++        kfree(syncPoint);
++    }
++
++    gcmkFOOTER();
++    return status;
++}
++
++gceSTATUS
++gckOS_ReferenceSyncPoint(
++    IN gckOS Os,
++    IN gctSYNC_POINT SyncPoint
++    )
++{
++    gceSTATUS status;
++    gcsSYNC_POINT_PTR syncPoint;
++
++    gcmkHEADER_ARG("Os=0x%X", Os);
++
++    /* Verify the arguments. */
++    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
++    gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
++
++    gcmkONERROR(
++        _QueryIntegerId(&Os->syncPointDB,
++                        (gctUINT32)(gctUINTPTR_T)SyncPoint,
++                        (gctPOINTER)&syncPoint));
++
++    /* Initialize the sync point. */
++    atomic_inc(&syncPoint->ref);
++
++    gcmkFOOTER_NO();
++    return gcvSTATUS_OK;
++
++OnError:
++    gcmkFOOTER();
++    return status;
++}
++
++gceSTATUS
++gckOS_DestroySyncPoint(
++    IN gckOS Os,
++    IN gctSYNC_POINT SyncPoint
++    )
++{
++    gceSTATUS status;
++    gcsSYNC_POINT_PTR syncPoint;
++    gctBOOL acquired = gcvFALSE;
++
++    gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
++
++    /* Verify the arguments. */
++    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
++    gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
++
++    gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
++    acquired = gcvTRUE;
++
++    gcmkONERROR(
++        _QueryIntegerId(&Os->syncPointDB,
++                        (gctUINT32)(gctUINTPTR_T)SyncPoint,
++                        (gctPOINTER)&syncPoint));
++
++    gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
++
++    if (atomic_dec_and_test(&syncPoint->ref))
++    {
++        gcmkVERIFY_OK(_DestroyIntegerId(&Os->syncPointDB, syncPoint->id));
++
++        /* Free the sgianl. */
++        syncPoint->timeline = gcvNULL;
++        kfree(syncPoint);
++    }
++
++    gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
++    acquired = gcvFALSE;
++
++    /* Success. */
++    gcmkFOOTER_NO();
++    return gcvSTATUS_OK;
++
++OnError:
++    if (acquired)
++    {
++        /* Release the mutex. */
++        gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
++    }
++
++    gcmkFOOTER();
++    return status;
++}
++
++gceSTATUS
++gckOS_SignalSyncPoint(
++    IN gckOS Os,
++    IN gctSYNC_POINT SyncPoint
++    )
++{
++    gceSTATUS status;
++    gcsSYNC_POINT_PTR syncPoint;
++    gctBOOL acquired = gcvFALSE;
++
++    gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
++
++    /* Verify the arguments. */
++    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
++    gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
++
++    gcmkONERROR(gckOS_AcquireMutex(Os, Os->syncPointMutex, gcvINFINITE));
++    acquired = gcvTRUE;
++
++    gcmkONERROR(
++        _QueryIntegerId(&Os->syncPointDB,
++                        (gctUINT32)(gctUINTPTR_T)SyncPoint,
++                        (gctPOINTER)&syncPoint));
++
++    gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
++
++    /* Get state. */
++    atomic_set(&syncPoint->state, gcvTRUE);
++
++    /* Signal timeline. */
++    if (syncPoint->timeline)
++    {
++        sync_timeline_signal(syncPoint->timeline);
++    }
++
++    gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
++    acquired = gcvFALSE;
++
++    /* Success. */
++    gcmkFOOTER_NO();
++    return gcvSTATUS_OK;
++
++OnError:
++    if (acquired)
++    {
++        /* Release the mutex. */
++        gcmkVERIFY_OK(gckOS_ReleaseMutex(Os, Os->syncPointMutex));
++    }
++
++    gcmkFOOTER();
++    return status;
++}
++
++gceSTATUS
++gckOS_QuerySyncPoint(
++    IN gckOS Os,
++    IN gctSYNC_POINT SyncPoint,
++    OUT gctBOOL_PTR State
++    )
++{
++    gceSTATUS status;
++    gcsSYNC_POINT_PTR syncPoint;
++
++    gcmkHEADER_ARG("Os=0x%X SyncPoint=%d", Os, (gctUINT32)(gctUINTPTR_T)SyncPoint);
++
++    /* Verify the arguments. */
++    gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
++    gcmkVERIFY_ARGUMENT(SyncPoint != gcvNULL);
++
++    gcmkONERROR(
++        _QueryIntegerId(&Os->syncPointDB,
++                        (gctUINT32)(gctUINTPTR_T)SyncPoint,
++                        (gctPOINTER)&syncPoint));
++
++    gcmkASSERT(syncPoint->id == (gctUINT32)(gctUINTPTR_T)SyncPoint);
++
++    /* Get state. */
++    *State = atomic_read(&syncPoint->state);
++
++    /* Success. */
++    gcmkFOOTER_ARG("*State=%d", *State);
++    return gcvSTATUS_OK;
++
++OnError:
++    gcmkFOOTER();
++    return status;
++}
++
++gceSTATUS
++gckOS_CreateSyncTimeline(
++    IN gckOS Os,
++    OUT gctHANDLE * Timeline
++    )
++{
++    struct viv_sync_timeline * timeline;
++
++    /* Create viv sync timeline. */
++    timeline = viv_sync_timeline_create("viv timeline", Os);
++
++    if (timeline == gcvNULL)
++    {
++        /* Out of memory. */
++        return gcvSTATUS_OUT_OF_MEMORY;
++    }
++
++    *Timeline = (gctHANDLE) timeline;
++    return gcvSTATUS_OK;
++}
++
++gceSTATUS
++gckOS_DestroySyncTimeline(
++    IN gckOS Os,
++    IN gctHANDLE Timeline
++    )
++{
++    struct viv_sync_timeline * timeline;
++    gcmkASSERT(Timeline != gcvNULL);
++
++    /* Destroy timeline. */
++    timeline = (struct viv_sync_timeline *) Timeline;
++    sync_timeline_destroy(&timeline->obj);
++
++    return gcvSTATUS_OK;
++}
++
++gceSTATUS
++gckOS_CreateNativeFence(
++    IN gckOS Os,
++    IN gctHANDLE Timeline,
++    IN gctSYNC_POINT SyncPoint,
++    OUT gctINT * FenceFD
++    )
++{
++    int fd = -1;
++    struct viv_sync_timeline *timeline;
++    struct sync_pt * pt = gcvNULL;
++    struct sync_fence * fence;
++    char name[32];
++    gcsSYNC_POINT_PTR syncPoint;
++    gceSTATUS status;
++
++    gcmkHEADER_ARG("Os=0x%X Timeline=0x%X SyncPoint=%d",
++                   Os, Timeline, (gctUINT)(gctUINTPTR_T)SyncPoint);
++
++    gcmkONERROR(
++        _QueryIntegerId(&Os->syncPointDB,
++                        (gctUINT32)(gctUINTPTR_T)SyncPoint,
++                        (gctPOINTER)&syncPoint));
++
++    /* Cast timeline. */
++    timeline = (struct viv_sync_timeline *) Timeline;
++
++    fd = get_unused_fd();
++
++    if (fd < 0)
++    {
++        /* Out of resources. */
++        gcmkONERROR(gcvSTATUS_OUT_OF_RESOURCES);
++    }
++
++    /* Create viv_sync_pt. */
++    pt = viv_sync_pt_create(timeline, SyncPoint);
++
++    if (pt == gcvNULL)
++    {
++        gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
++    }
++
++    /* Reference sync_timeline. */
++    syncPoint->timeline = &timeline->obj;
++
++    /* Build fence name. */
++    snprintf(name, 32, "viv sync_fence-%u", (gctUINT)(gctUINTPTR_T)SyncPoint);
++
++    /* Create sync_fence. */
++    fence = sync_fence_create(name, pt);
++
++    if (fence == NULL)
++    {
++        gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
++    }
++
++    /* Install fence to fd. */
++    sync_fence_install(fence, fd);
++
++    *FenceFD = fd;
++    gcmkFOOTER_ARG("*FenceFD=%d", fd);
++    return gcvSTATUS_OK;
++
++OnError:
++    /* Error roll back. */
++    if (pt)
++    {
++        sync_pt_free(pt);
++    }
++
++    if (fd > 0)
++    {
++        put_unused_fd(fd);
++    }
++
++    gcmkFOOTER();
++    return status;
++}
++#endif
+diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
+new file mode 100644
+index 0000000..7efae1c
+--- /dev/null
++++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.c
+@@ -0,0 +1,174 @@
++/****************************************************************************
++*
++*    Copyright (C) 2005 - 2013 by Vivante Corp.
++*
++*    This program is free software; you can redistribute it and/or modify
++*    it under the terms of the GNU General Public License as published by
++*    the Free Software Foundation; either version 2 of the license, or
++*    (at your option) any later version.
++*
++*    This program is distributed in the hope that it will be useful,
++*    but WITHOUT ANY WARRANTY; without even the implied warranty of
++*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++*    GNU General Public License for more details.
++*
++*    You should have received a copy of the GNU General Public License
++*    along with this program; if not write to the Free Software
++*    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*
++*****************************************************************************/
++
++
++#include <linux/kernel.h>
++#include <linux/file.h>
++#include <linux/fs.h>
++#include <linux/miscdevice.h>
++#include <linux/module.h>
++#include <linux/syscalls.h>
++#include <linux/uaccess.h>
++
++#include "gc_hal_kernel_sync.h"
++
++#if gcdANDROID_NATIVE_FENCE_SYNC
++
++static struct sync_pt *
++viv_sync_pt_dup(
++    struct sync_pt * sync_pt
++    )
++{
++    gceSTATUS status;
++    struct viv_sync_pt *pt;
++    struct viv_sync_pt *src;
++    struct viv_sync_timeline *obj;
++
++    src = (struct viv_sync_pt *) sync_pt;
++    obj = (struct viv_sync_timeline *) sync_pt->parent;
++
++    /* Create the new sync_pt. */
++    pt = (struct viv_sync_pt *)
++        sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
++
++    pt->stamp = src->stamp;
++    pt->sync = src->sync;
++
++    /* Reference sync point. */
++    status = gckOS_ReferenceSyncPoint(obj->os, pt->sync);
++
++    if (gcmIS_ERROR(status))
++    {
++        sync_pt_free((struct sync_pt *)pt);
++        return NULL;
++    }
++
++    return (struct sync_pt *)pt;
++}
++
++static int
++viv_sync_pt_has_signaled(
++    struct sync_pt * sync_pt
++    )
++{
++    gceSTATUS status;
++    gctBOOL state;
++    struct viv_sync_pt * pt;
++    struct viv_sync_timeline * obj;
++
++    pt  = (struct viv_sync_pt *)sync_pt;
++    obj = (struct viv_sync_timeline *)sync_pt->parent;
++
++    status = gckOS_QuerySyncPoint(obj->os, pt->sync, &state);
++
++    if (gcmIS_ERROR(status))
++    {
++        /* Error. */
++        return -1;
++    }
++
++    return state;
++}
++
++static int
++viv_sync_pt_compare(
++    struct sync_pt * a,
++    struct sync_pt * b
++    )
++{
++    int ret;
++    struct viv_sync_pt * pt1 = (struct viv_sync_pt *) a;
++    struct viv_sync_pt * pt2 = (struct viv_sync_pt *) b;
++
++    ret = (pt1->stamp <  pt2->stamp) ? -1
++        : (pt1->stamp == pt2->stamp) ?  0
++        : 1;
++
++    return ret;
++}
++
++static void
++viv_sync_pt_free(
++    struct sync_pt * sync_pt
++    )
++{
++    struct viv_sync_pt * pt;
++    struct viv_sync_timeline * obj;
++
++    pt  = (struct viv_sync_pt *) sync_pt;
++    obj = (struct viv_sync_timeline *) sync_pt->parent;
++
++    gckOS_DestroySyncPoint(obj->os, pt->sync);
++}
++
++static struct sync_timeline_ops viv_timeline_ops =
++{
++    .driver_name = "viv_sync",
++    .dup = viv_sync_pt_dup,
++    .has_signaled = viv_sync_pt_has_signaled,
++    .compare = viv_sync_pt_compare,
++    .free_pt = viv_sync_pt_free,
++};
++
++struct viv_sync_timeline *
++viv_sync_timeline_create(
++    const char * name,
++    gckOS os
++    )
++{
++    struct viv_sync_timeline * obj;
++
++    obj = (struct viv_sync_timeline *)
++        sync_timeline_create(&viv_timeline_ops, sizeof(struct viv_sync_timeline), name);
++
++    obj->os    = os;
++    obj->stamp = 0;
++
++    return obj;
++}
++
++struct sync_pt *
++viv_sync_pt_create(
++    struct viv_sync_timeline * obj,
++    gctSYNC_POINT SyncPoint
++    )
++{
++    gceSTATUS status;
++    struct viv_sync_pt * pt;
++
++    pt = (struct viv_sync_pt *)
++        sync_pt_create(&obj->obj, sizeof(struct viv_sync_pt));
++
++    pt->stamp = obj->stamp++;
++    pt->sync  = SyncPoint;
++
++    /* Dup signal. */
++    status = gckOS_ReferenceSyncPoint(obj->os, SyncPoint);
++
++    if (gcmIS_ERROR(status))
++    {
++        sync_pt_free((struct sync_pt *)pt);
++        return NULL;
++    }
++
++    return (struct sync_pt *) pt;
++}
++
++#endif
+diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
+new file mode 100644
+index 0000000..6fc12e5
+--- /dev/null
++++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_sync.h
+@@ -0,0 +1,71 @@
++/****************************************************************************
++*
++*    Copyright (C) 2005 - 2013 by Vivante Corp.
++*
++*    This program is free software; you can redistribute it and/or modify
++*    it under the terms of the GNU General Public License as published by
++*    the Free Software Foundation; either version 2 of the license, or
++*    (at your option) any later version.
++*
++*    This program is distributed in the hope that it will be useful,
++*    but WITHOUT ANY WARRANTY; without even the implied warranty of
++*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++*    GNU General Public License for more details.
++*
++*    You should have received a copy of the GNU General Public License
++*    along with this program; if not write to the Free Software
++*    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*
++*****************************************************************************/
++
++
++#ifndef __gc_hal_kernel_sync_h_
++#define __gc_hal_kernel_sync_h_
++
++#include <linux/types.h>
++
++#include <linux/sync.h>
++
++#include <gc_hal.h>
++#include <gc_hal_base.h>
++
++struct viv_sync_timeline
++{
++    /* Parent object. */
++    struct sync_timeline obj;
++
++    /* Timestamp when sync_pt is created. */
++    gctUINT stamp;
++
++    /* Pointer to os struct. */
++    gckOS os;
++};
++
++
++struct viv_sync_pt
++{
++    /* Parent object. */
++    struct sync_pt pt;
++
++    /* Reference sync point*/
++    gctSYNC_POINT sync;
++
++    /* Timestamp when sync_pt is created. */
++    gctUINT stamp;
++};
++
++/* Create viv_sync_timeline object. */
++struct viv_sync_timeline *
++viv_sync_timeline_create(
++    const char * Name,
++    gckOS Os
++    );
++
++/* Create viv_sync_pt object. */
++struct sync_pt *
++viv_sync_pt_create(
++    struct viv_sync_timeline * Obj,
++    gctSYNC_POINT SyncPoint
++    );
++
++#endif /* __gc_hal_kernel_sync_h_ */
+-- 
+1.7.9.5
+
diff --git a/recipes-kernel/linux/linux-qmx6-3.0.35/defconfig b/recipes-kernel/linux/linux-qmx6-3.0.35/defconfig
new file mode 100644
index 0000000..272c8c9
--- /dev/null
+++ b/recipes-kernel/linux/linux-qmx6-3.0.35/defconfig
@@ -0,0 +1,2745 @@
+#
+# Automatically generated make config: don't edit
+# Linux/arm 3.0.35 Kernel Configuration
+#
+CONFIG_ARM=y
+CONFIG_HAVE_PWM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_HAVE_SCHED_CLOCK=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_ARCH_USES_GETTIMEOFFSET is not set
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_KTIME_SCALAR=y
+CONFIG_HAVE_PROC_CPU=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_LOCKBREAK=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_NEED_DMA_MAP_STATE=y
+CONFIG_FIQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+# CONFIG_ARM_PATCH_PHYS_VIRT is not set
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_HAVE_IRQ_WORK=y
+CONFIG_IRQ_WORK=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_CROSS_COMPILE=""
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_KERNEL_GZIP=y
+# CONFIG_KERNEL_LZMA is not set
+# CONFIG_KERNEL_LZO is not set
+CONFIG_DEFAULT_HOSTNAME="(none)"
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_FHANDLE is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+CONFIG_HAVE_GENERIC_HARDIRQS=y
+
+#
+# IRQ subsystem
+#
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HAVE_SPARSE_IRQ=y
+CONFIG_GENERIC_IRQ_SHOW=y
+# CONFIG_SPARSE_IRQ is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_PREEMPT_RCU=y
+CONFIG_PREEMPT_RCU=y
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_RCU_BOOST is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+# CONFIG_NAMESPACES is not set
+# CONFIG_SCHED_AUTOGROUP is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_XZ is not set
+# CONFIG_RD_LZO is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EXPERT=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_EMBEDDED=y
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_PERF_USE_VMALLOC=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_PERF_EVENTS=y
+# CONFIG_PERF_COUNTERS is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLUB_DEBUG=y
+CONFIG_COMPAT_BRK=y
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_USE_GENERIC_SMP_HELPERS=y
+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_DMA_API_DEBUG=y
+CONFIG_HAVE_HW_BREAKPOINT=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_SPIN_UNLOCK is not set
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_READ_UNLOCK is not set
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_WRITE_UNLOCK is not set
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+CONFIG_MUTEX_SPIN_ON_OWNER=y
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_VEXPRESS is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CNS3XXX is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+CONFIG_ARCH_MXC=y
+# CONFIG_ARCH_MXS is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_DOVE is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_LPC32XX is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_NUC93X is not set
+# CONFIG_ARCH_TEGRA is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_SHMOBILE is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5P64X0 is not set
+# CONFIG_ARCH_S5PC100 is not set
+# CONFIG_ARCH_S5PV210 is not set
+# CONFIG_ARCH_EXYNOS4 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_TCC_926 is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_U8500 is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_PLAT_SPEAR is not set
+# CONFIG_ARCH_VT8500 is not set
+CONFIG_GPIO_PCA953X=y
+# CONFIG_KEYBOARD_GPIO_POLLED is not set
+CONFIG_IMX_HAVE_PLATFORM_DMA=y
+CONFIG_IMX_HAVE_PLATFORM_FEC=y
+CONFIG_IMX_HAVE_PLATFORM_FLEXCAN=y
+CONFIG_IMX_HAVE_PLATFORM_FSL_USB2_UDC=y
+CONFIG_IMX_HAVE_PLATFORM_GPMI_NFC=y
+CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_SNVS_RTC=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_CAAM=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_I2C=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_SSI=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_UART=y
+CONFIG_IMX_HAVE_PLATFORM_MXC_EHCI=y
+CONFIG_IMX_HAVE_PLATFORM_MXC_PWM=y
+CONFIG_IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX=y
+CONFIG_IMX_HAVE_PLATFORM_SPI_IMX=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_IPUV3=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_VPU=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_DVFS=y
+CONFIG_IMX_HAVE_PLATFORM_AHCI=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_OCOTP=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_VIIM=y
+CONFIG_IMX_HAVE_PLATFORM_PERFMON=y
+CONFIG_IMX_HAVE_PLATFORM_LDB=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_PXP=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_SPDIF=y
+CONFIG_IMX_HAVE_PLATFORM_VIV_GPU=y
+CONFIG_IMX_HAVE_PLATFORM_MXC_HDMI=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_ANATOP_THERMAL=y
+CONFIG_IMX_HAVE_PLATFORM_FSL_OTG=y
+CONFIG_IMX_HAVE_PLATFORM_FSL_USB_WAKEUP=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_PM=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_ASRC=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_MIPI_DSI=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_MIPI_CSI2=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_VDOA=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_PCIE=y
+
+#
+# Freescale MXC Implementations
+#
+# CONFIG_ARCH_MX1 is not set
+# CONFIG_ARCH_MX2 is not set
+# CONFIG_ARCH_MX25 is not set
+# CONFIG_ARCH_MX3 is not set
+# CONFIG_ARCH_MX503 is not set
+# CONFIG_ARCH_MX51 is not set
+CONFIG_ARCH_MX6=y
+CONFIG_ARCH_MX6Q=y
+CONFIG_FORCE_MAX_ZONEORDER=14
+CONFIG_SOC_IMX6Q=y
+# CONFIG_MACH_MX6Q_ARM2 is not set
+# CONFIG_MACH_MX6SL_ARM2 is not set
+# CONFIG_MACH_MX6SL_EVK is not set
+# CONFIG_MACH_MX6Q_SABRELITE is not set
+CONFIG_MACH_MX6Q_QMX6=y
+# CONFIG_MACH_MX6Q_SABRESD is not set
+# CONFIG_MACH_MX6Q_SABREAUTO is not set
+# CONFIG_MACH_MX6Q_HDMIDONGLE is not set
+
+#
+# MX6 Options:
+#
+# CONFIG_IMX_PCIE is not set
+CONFIG_USB_EHCI_ARC_H1=y
+CONFIG_USB_FSL_ARC_OTG=y
+# CONFIG_MX6_INTER_LDO_BYPASS is not set
+# CONFIG_MX6_CLK_FOR_BOOTUI_TRANS is not set
+CONFIG_ISP1504_MXC=y
+# CONFIG_MXC_IRQ_PRIOR is not set
+CONFIG_MXC_PWM=y
+# CONFIG_MXC_DEBUG_BOARD is not set
+CONFIG_MXC_REBOOT_MFGMODE=y
+# CONFIG_MXC_REBOOT_ANDROID_CMD is not set
+CONFIG_ARCH_MXC_IOMUX_V3=y
+CONFIG_ARCH_MXC_AUDMUX_V2=y
+CONFIG_IRAM_ALLOC=y
+CONFIG_CLK_DEBUG=y
+CONFIG_DMA_ZONE_SIZE=184
+
+#
+# System MMU
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_V7=y
+CONFIG_CPU_32v6K=y
+CONFIG_CPU_32v7=y
+CONFIG_CPU_ABRT_EV7=y
+CONFIG_CPU_PABRT_V7=y
+CONFIG_CPU_CACHE_V7=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V7=y
+CONFIG_CPU_HAS_ASID=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_ARM_THUMBEE is not set
+# CONFIG_SWP_EMULATE is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+CONFIG_OUTER_CACHE=y
+CONFIG_OUTER_CACHE_SYNC=y
+CONFIG_CACHE_L2X0=y
+CONFIG_CACHE_PL310=y
+CONFIG_ARM_L1_CACHE_SHIFT=5
+CONFIG_ARM_DMA_MEM_BUFFERABLE=y
+CONFIG_CPU_HAS_PMU=y
+# CONFIG_ARM_ERRATA_430973 is not set
+# CONFIG_ARM_ERRATA_458693 is not set
+# CONFIG_ARM_ERRATA_460075 is not set
+# CONFIG_ARM_ERRATA_742230 is not set
+# CONFIG_ARM_ERRATA_742231 is not set
+# CONFIG_PL310_ERRATA_588369 is not set
+# CONFIG_ARM_ERRATA_720789 is not set
+# CONFIG_PL310_ERRATA_727915 is not set
+CONFIG_ARM_ERRATA_743622=y
+CONFIG_ARM_ERRATA_751472=y
+# CONFIG_ARM_ERRATA_753970 is not set
+CONFIG_ARM_ERRATA_754322=y
+# CONFIG_ARM_ERRATA_754327 is not set
+CONFIG_ARM_ERRATA_775420=y
+CONFIG_ARM_GIC=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+# CONFIG_PCI_SYSCALL is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
+# CONFIG_PCCARD is not set
+CONFIG_ARM_ERRATA_764369=y
+CONFIG_PL310_ERRATA_769419=y
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_SMP=y
+CONFIG_SMP_ON_UP=y
+CONFIG_HAVE_ARM_SCU=y
+CONFIG_HAVE_ARM_TWD=y
+# CONFIG_VMSPLIT_3G is not set
+CONFIG_VMSPLIT_2G=y
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0x80000000
+CONFIG_NR_CPUS=4
+CONFIG_HOTPLUG_CPU=y
+CONFIG_LOCAL_TIMERS=y
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+# CONFIG_THUMB2_KERNEL is not set
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+CONFIG_HAVE_ARCH_PFN_VALID=y
+CONFIG_HIGHMEM=y
+# CONFIG_HIGHPTE is not set
+CONFIG_HW_PERF_EVENTS=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_HAVE_MEMBLOCK=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_COMPACTION=y
+CONFIG_MIGRATION=y
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_KSM=y
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+# CONFIG_CLEANCACHE is not set
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+# CONFIG_SECCOMP is not set
+# CONFIG_CC_STACKPROTECTOR is not set
+# CONFIG_DEPRECATED_PARAM_STRUCT is not set
+
+#
+# Boot options
+#
+# CONFIG_USE_OF is not set
+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_CMDLINE_FROM_BOOTLOADER=y
+# CONFIG_CMDLINE_EXTEND is not set
+# CONFIG_CMDLINE_FORCE is not set
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+# CONFIG_CRASH_DUMP is not set
+# CONFIG_AUTO_ZRELADDR is not set
+
+#
+# CPU Power Management
+#
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+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_INTERACTIVE=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_IMX=y
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_VFP=y
+CONFIG_VFPv3=y
+CONFIG_NEON=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_SUSPEND=y
+# CONFIG_PM_TEST_SUSPEND is not set
+CONFIG_SUSPEND_DEVICE_TIME_DEBUG=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_PM_SLEEP=y
+CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_RUNTIME=y
+CONFIG_PM=y
+CONFIG_PM_DEBUG=y
+# CONFIG_PM_ADVANCED_DEBUG is not set
+CONFIG_CAN_PM_TRACE=y
+CONFIG_APM_EMULATION=y
+CONFIG_PM_RUNTIME_CLK=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE_DEMUX is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_L2TP is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=y
+CONFIG_LLC2=y
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+# CONFIG_BATMAN_ADV is not set
+CONFIG_RPS=y
+CONFIG_RFS_ACCEL=y
+CONFIG_XPS=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_CAN=y
+CONFIG_CAN_RAW=y
+CONFIG_CAN_BCM=y
+
+#
+# CAN Device Drivers
+#
+CONFIG_CAN_VCAN=y
+# CONFIG_CAN_SLCAN is not set
+CONFIG_CAN_DEV=y
+CONFIG_CAN_CALC_BITTIMING=y
+# CONFIG_CAN_MCP251X is not set
+CONFIG_HAVE_CAN_FLEXCAN=y
+CONFIG_CAN_FLEXCAN=y
+# CONFIG_CAN_SJA1000 is not set
+# CONFIG_CAN_C_CAN is not set
+
+#
+# CAN USB interfaces
+#
+# CONFIG_CAN_EMS_USB is not set
+# CONFIG_CAN_ESD_USB2 is not set
+# CONFIG_CAN_SOFTING is not set
+# CONFIG_CAN_DEBUG_DEVICES is not set
+# CONFIG_IRDA is not set
+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
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIBTUSB=y
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+# CONFIG_BT_HCIUART_H4 is not set
+# CONFIG_BT_HCIUART_BCSP is not set
+CONFIG_BT_HCIUART_ATH3K=y
+# CONFIG_BT_HCIUART_LL is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+CONFIG_BT_HCIVHCI=y
+# CONFIG_BT_MRVL is not set
+# CONFIG_BT_ATH3K is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_WIRELESS=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WEXT_CORE=y
+CONFIG_WEXT_PROC=y
+CONFIG_WEXT_SPY=y
+CONFIG_WEXT_PRIV=y
+CONFIG_CFG80211=y
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+# CONFIG_CFG80211_REG_DEBUG is not set
+CONFIG_CFG80211_DEFAULT_PS=y
+# CONFIG_CFG80211_DEBUGFS is not set
+# CONFIG_CFG80211_INTERNAL_REGDB is not set
+CONFIG_CFG80211_WEXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_LIB80211=y
+CONFIG_LIB80211_CRYPT_WEP=y
+CONFIG_LIB80211_CRYPT_CCMP=y
+CONFIG_LIB80211_CRYPT_TKIP=y
+# CONFIG_LIB80211_DEBUG is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_WIMAX is not set
+CONFIG_RFKILL=y
+CONFIG_RFKILL_LEDS=y
+CONFIG_RFKILL_INPUT=y
+# CONFIG_RFKILL_REGULATOR is not set
+# CONFIG_RFKILL_GPIO is not set
+# CONFIG_NET_9P is not set
+# CONFIG_CAIF is not set
+# CONFIG_CEPH_LIB is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_SM_FTL is not set
+# CONFIG_MTD_OOPS is not set
+# CONFIG_MTD_SWAP is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+# CONFIG_MTD_PHYSMAP_COMPAT is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+CONFIG_MTD_M25P80=y
+CONFIG_M25PXX_USE_FAST_READ=y
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND_ECC=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_BCH is not set
+# CONFIG_MTD_SM_COMMON is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_GPMI_NAND is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_DRBD is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+# CONFIG_BLK_DEV_RBD is not set
+# CONFIG_SENSORS_LIS3LV02D is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+# CONFIG_INTEL_MID_PTI is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_APDS9802ALS is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_ISL29020 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_SENSORS_BH1780 is not set
+# CONFIG_SENSORS_BH1770 is not set
+# CONFIG_SENSORS_APDS990X is not set
+# CONFIG_HMC6352 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_BMP085 is not set
+CONFIG_MXS_PERFMON=m
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IWMC3200TOP is not set
+
+#
+# Texas Instruments shared transport line discipline
+#
+# CONFIG_TI_ST is not set
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_SENSORS_LIS3_I2C is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI_MOD=y
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_ISCSI_BOOT_SYSFS is not set
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_ATA_VERBOSE_ERROR=y
+# CONFIG_SATA_PMP is not set
+
+#
+# Controllers with non-SFF native interface
+#
+CONFIG_SATA_AHCI_PLATFORM=y
+CONFIG_ATA_SFF=y
+
+#
+# SFF controllers with custom DMA interface
+#
+CONFIG_ATA_BMDMA=y
+
+#
+# SATA SFF controllers with BMDMA
+#
+# CONFIG_SATA_MV is not set
+
+#
+# PATA SFF controllers with BMDMA
+#
+# CONFIG_PATA_ARASAN_CF is not set
+
+#
+# PIO-only SFF controllers
+#
+# CONFIG_PATA_PLATFORM is not set
+
+#
+# Generic fallback / legacy drivers
+#
+# CONFIG_MD is not set
+# CONFIG_TARGET_CORE is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_MII=y
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+CONFIG_MICREL_PHY=y
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_ETHOC is not set
+# CONFIG_SMC911X is not set
+CONFIG_SMSC911X=y
+# CONFIG_SMSC911X_ARCH_HOOKS is not set
+# CONFIG_DNET is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
+CONFIG_FEC=y
+CONFIG_FEC_NAPI=y
+# CONFIG_FEC_1588 is not set
+# CONFIG_FTMAC100 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+CONFIG_WLAN=y
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_USB_NET_RNDIS_WLAN is not set
+CONFIG_ATH_COMMON=m
+# CONFIG_ATH_DEBUG is not set
+CONFIG_ATH6KL=m
+# CONFIG_ATH6KL_DEBUG is not set
+CONFIG_HOSTAP=y
+# CONFIG_HOSTAP_FIRMWARE is not set
+# CONFIG_IWM is not set
+# CONFIG_LIBERTAS is not set
+# CONFIG_MWIFIEX is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_HSO is not set
+# CONFIG_USB_IPHETH is not set
+# CONFIG_WAN is not set
+
+#
+# CAIF transport drivers
+#
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+CONFIG_INPUT_POLLDEV=y
+# CONFIG_INPUT_SPARSEKMAP is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_APMPOWER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+# CONFIG_KEYBOARD_ADP5589 is not set
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_QT1070 is not set
+# CONFIG_KEYBOARD_QT2160 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_KEYBOARD_TCA6416 is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_MCS is not set
+# CONFIG_KEYBOARD_MPR121 is not set
+# CONFIG_KEYBOARD_IMX is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set
+# CONFIG_TOUCHSCREEN_BU21013 is not set
+# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
+# CONFIG_TOUCHSCREEN_DYNAPRO is not set
+# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_EETI is not set
+CONFIG_TOUCHSCREEN_EGALAX=y
+# CONFIG_TOUCHSCREEN_ELAN is not set
+# CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MAX11801 is not set
+# CONFIG_TOUCHSCREEN_MCS5000 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_WM97XX is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_NOVATEK is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2005 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
+# CONFIG_TOUCHSCREEN_ST1232 is not set
+# CONFIG_TOUCHSCREEN_P1003 is not set
+# CONFIG_TOUCHSCREEN_TPS6507X is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_AD714X is not set
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_CM109 is not set
+CONFIG_INPUT_UINPUT=y
+# CONFIG_INPUT_PCF8574 is not set
+# CONFIG_INPUT_PWM_BEEPER is not set
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+# CONFIG_INPUT_ADXL34X is not set
+# CONFIG_INPUT_CMA3000 is not set
+CONFIG_INPUT_ISL29023=y
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_AMBAKMI is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_ALTERA_PS2 is not set
+# CONFIG_SERIO_PS2MULT is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_N_GSM is not set
+# CONFIG_TRACE_SINK is not set
+CONFIG_DEVKMEM=y
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_AMBA_PL010 is not set
+# CONFIG_SERIAL_AMBA_PL011 is not set
+# CONFIG_SERIAL_MAX3100 is not set
+# CONFIG_SERIAL_MAX3107 is not set
+CONFIG_SERIAL_IMX=y
+CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_TIMBERDALE is not set
+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
+# CONFIG_SERIAL_ALTERA_UART is not set
+# CONFIG_SERIAL_IFX6X60 is not set
+# CONFIG_SERIAL_XILINX_PS_UART is not set
+# CONFIG_TTY_PRINTK is not set
+CONFIG_FSL_OTP=y
+# CONFIG_HVC_DCC is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_RAMOOPS is not set
+CONFIG_MXS_VIIM=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_MUX=y
+
+#
+# Multiplexer I2C Chip support
+#
+CONFIG_I2C_MUX_GPIO=y
+# CONFIG_I2C_MUX_PCA9541 is not set
+# CONFIG_I2C_MUX_PCA954x is not set
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=m
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_IMX=y
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_PXA_PCI is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_XILINX is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_DIOLAN_U2C is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_ALTERA is not set
+CONFIG_SPI_BITBANG=y
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_IMX_VER_2_3=y
+CONFIG_SPI_IMX=y
+# CONFIG_SPI_OC_TINY is not set
+# CONFIG_SPI_PL022 is not set
+# CONFIG_SPI_PXA2XX_PCI is not set
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_DESIGNWARE is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+
+#
+# PPS generators support
+#
+
+#
+# PTP clock support
+#
+
+#
+# Enable Device Drivers -> PPS to see the PTP clock options.
+#
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO drivers:
+#
+# CONFIG_GPIO_BASIC_MMIO is not set
+# CONFIG_GPIO_IT8761E is not set
+# CONFIG_GPIO_PL061 is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX7300 is not set
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X_IRQ is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_SX150X is not set
+# CONFIG_GPIO_WM8994 is not set
+# CONFIG_GPIO_ADP5588 is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+# CONFIG_GPIO_74X164 is not set
+
+#
+# AC97 GPIO expanders:
+#
+
+#
+# MODULbus GPIO expanders:
+#
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_APM_POWER is not set
+# CONFIG_TEST_POWER is not set
+# CONFIG_BATTERY_DS2780 is not set
+# CONFIG_BATTERY_DS2782 is not set
+# CONFIG_BATTERY_BQ20Z75 is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_MAX17040 is not set
+# CONFIG_BATTERY_MAX17042 is not set
+# CONFIG_CHARGER_ISP1704 is not set
+# CONFIG_CHARGER_MAX8903 is not set
+# CONFIG_SABRESD_MAX8903 is not set
+# CONFIG_CHARGER_GPIO is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Native drivers
+#
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADT7411 is not set
+# CONFIG_SENSORS_ADT7462 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7475 is not set
+# CONFIG_SENSORS_ASC7621 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS620 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_G760A is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_GPIO_FAN is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_JC42 is not set
+# CONFIG_SENSORS_LINEAGE is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM73 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_LTC4151 is not set
+# CONFIG_SENSORS_LTC4215 is not set
+# CONFIG_SENSORS_LTC4245 is not set
+# CONFIG_SENSORS_LTC4261 is not set
+# CONFIG_SENSORS_LM95241 is not set
+# CONFIG_SENSORS_MAX1111 is not set
+# CONFIG_SENSORS_MAX16065 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6639 is not set
+# CONFIG_SENSORS_MAX6642 is not set
+# CONFIG_SENSORS_MAX17135 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_PMBUS is not set
+# CONFIG_SENSORS_SHT15 is not set
+# CONFIG_SENSORS_SHT21 is not set
+# CONFIG_SENSORS_SMM665 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_EMC1403 is not set
+# CONFIG_SENSORS_EMC2103 is not set
+# CONFIG_SENSORS_EMC6W201 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_SCH5627 is not set
+# CONFIG_SENSORS_ADS1015 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_ADS7871 is not set
+# CONFIG_SENSORS_AMC6821 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_TMP102 is not set
+# CONFIG_SENSORS_TMP401 is not set
+# CONFIG_SENSORS_TMP421 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83795 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+CONFIG_SENSORS_MAG3110=y
+# CONFIG_MXC_MMA8450 is not set
+CONFIG_MXC_MMA8451=y
+CONFIG_THERMAL=y
+# CONFIG_THERMAL_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+# CONFIG_ARM_SP805_WATCHDOG is not set
+# CONFIG_MPCORE_WATCHDOG is not set
+# CONFIG_MAX63XX_WATCHDOG is not set
+CONFIG_IMX2_WDT=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+CONFIG_BCMA_POSSIBLE=y
+
+#
+# Broadcom specific AMBA
+#
+# CONFIG_BCMA is not set
+CONFIG_MFD_SUPPORT=y
+CONFIG_MFD_CORE=y
+# CONFIG_MFD_88PM860X is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_I2CPLD is not set
+# CONFIG_UCB1400_CORE is not set
+# CONFIG_TPS6105X is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TPS6507X is not set
+# CONFIG_MFD_TPS6586X is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_STMPE is not set
+# CONFIG_MFD_TC3589X is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_MAX8925 is not set
+# CONFIG_MFD_MAX8997 is not set
+# CONFIG_MFD_MAX8998 is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X_I2C is not set
+# CONFIG_MFD_WM831X_SPI is not set
+# CONFIG_MFD_WM8350_I2C is not set
+CONFIG_MFD_WM8994=y
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_PMIC_DIALOG is not set
+# CONFIG_MFD_MC_PMIC is not set
+# CONFIG_MFD_MC34708 is not set
+CONFIG_MFD_PFUZE=y
+# CONFIG_MFD_MC13XXX is not set
+# CONFIG_ABX500_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_MFD_WL1273_CORE is not set
+# CONFIG_MFD_TPS65910 is not set
+# CONFIG_MFD_MAX17135 is not set
+CONFIG_MFD_MXC_HDMI=y
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+# CONFIG_REGULATOR_DUMMY is not set
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_REGULATOR_MAX1586 is not set
+# CONFIG_REGULATOR_MAX8649 is not set
+# CONFIG_REGULATOR_MAX8660 is not set
+# CONFIG_REGULATOR_MAX8952 is not set
+# CONFIG_REGULATOR_WM8994 is not set
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_REGULATOR_LP3972 is not set
+# CONFIG_REGULATOR_MC34708 is not set
+CONFIG_REGULATOR_PFUZE100=y
+# CONFIG_REGULATOR_TPS65023 is not set
+# CONFIG_REGULATOR_TPS6507X is not set
+# CONFIG_REGULATOR_ISL6271A is not set
+# CONFIG_REGULATOR_AD5398 is not set
+CONFIG_REGULATOR_ANATOP=y
+# CONFIG_REGULATOR_TPS6524X is not set
+CONFIG_MEDIA_SUPPORT=y
+
+#
+# Multimedia core support
+#
+# CONFIG_MEDIA_CONTROLLER is not set
+CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_V4L2_COMMON=y
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_MEDIA=y
+
+#
+# Multimedia drivers
+#
+# CONFIG_RC_CORE is not set
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=y
+# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=y
+CONFIG_MEDIA_TUNER_TDA8290=y
+CONFIG_MEDIA_TUNER_TDA827X=y
+CONFIG_MEDIA_TUNER_TDA18271=y
+CONFIG_MEDIA_TUNER_TDA9887=y
+CONFIG_MEDIA_TUNER_TEA5761=y
+CONFIG_MEDIA_TUNER_TEA5767=y
+CONFIG_MEDIA_TUNER_MT20XX=y
+CONFIG_MEDIA_TUNER_XC2028=y
+CONFIG_MEDIA_TUNER_XC5000=y
+CONFIG_MEDIA_TUNER_MC44S803=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEOBUF_GEN=y
+CONFIG_VIDEOBUF_DMA_CONTIG=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
+
+#
+# Encoders, decoders, sensors and other helper chips
+#
+
+#
+# Audio decoders, processors and mixers
+#
+# CONFIG_VIDEO_TVAUDIO is not set
+# CONFIG_VIDEO_TDA7432 is not set
+# CONFIG_VIDEO_TDA9840 is not set
+# CONFIG_VIDEO_TEA6415C is not set
+# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_MSP3400 is not set
+# CONFIG_VIDEO_CS5345 is not set
+# CONFIG_VIDEO_CS53L32A is not set
+# CONFIG_VIDEO_TLV320AIC23B is not set
+# CONFIG_VIDEO_WM8775 is not set
+# CONFIG_VIDEO_WM8739 is not set
+# CONFIG_VIDEO_VP27SMPX is not set
+
+#
+# RDS decoders
+#
+# CONFIG_VIDEO_SAA6588 is not set
+
+#
+# Video decoders
+#
+# CONFIG_VIDEO_ADV7180 is not set
+# CONFIG_VIDEO_BT819 is not set
+# CONFIG_VIDEO_BT856 is not set
+# CONFIG_VIDEO_BT866 is not set
+# CONFIG_VIDEO_KS0127 is not set
+# CONFIG_VIDEO_SAA7110 is not set
+# CONFIG_VIDEO_SAA711X is not set
+# CONFIG_VIDEO_SAA7191 is not set
+# CONFIG_VIDEO_TVP514X is not set
+# CONFIG_VIDEO_TVP5150 is not set
+# CONFIG_VIDEO_TVP7002 is not set
+# CONFIG_VIDEO_VPX3220 is not set
+
+#
+# Video and audio decoders
+#
+# CONFIG_VIDEO_SAA717X is not set
+# CONFIG_VIDEO_CX25840 is not set
+
+#
+# MPEG video encoders
+#
+# CONFIG_VIDEO_CX2341X is not set
+
+#
+# Video encoders
+#
+# CONFIG_VIDEO_SAA7127 is not set
+# CONFIG_VIDEO_SAA7185 is not set
+# CONFIG_VIDEO_ADV7170 is not set
+# CONFIG_VIDEO_ADV7175 is not set
+# CONFIG_VIDEO_ADV7343 is not set
+# CONFIG_VIDEO_AK881X is not set
+
+#
+# Camera sensor devices
+#
+# CONFIG_VIDEO_OV7670 is not set
+# CONFIG_VIDEO_MT9V011 is not set
+# CONFIG_VIDEO_TCM825X is not set
+
+#
+# Video improvement chips
+#
+# CONFIG_VIDEO_UPD64031A is not set
+# CONFIG_VIDEO_UPD64083 is not set
+
+#
+# Miscelaneous helper chips
+#
+# CONFIG_VIDEO_THS7303 is not set
+# CONFIG_VIDEO_M52790 is not set
+# CONFIG_VIDEO_VIVI is not set
+CONFIG_VIDEO_MXC_CAMERA=m
+
+#
+# MXC Camera/V4L2 PRP Features support
+#
+CONFIG_VIDEO_MXC_IPU_CAMERA=y
+# CONFIG_VIDEO_MXC_CSI_CAMERA is not set
+# CONFIG_MXC_CAMERA_MICRON111 is not set
+# CONFIG_MXC_CAMERA_OV2640 is not set
+CONFIG_MXC_CAMERA_OV3640=m
+CONFIG_MXC_CAMERA_OV5640=m
+CONFIG_MXC_CAMERA_OV8820_MIPI=m
+CONFIG_MXC_CAMERA_OV5642=m
+CONFIG_MXC_CAMERA_OV5640_MIPI=m
+# CONFIG_MXC_MIPI_CSI2_TVIN_ADV7280 is not set
+CONFIG_MXC_CAMERA_SENSOR_CLK=m
+CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m
+CONFIG_MXC_IPU_PRP_ENC=m
+CONFIG_MXC_IPU_CSI_ENC=m
+CONFIG_VIDEO_MXC_OUTPUT=y
+CONFIG_VIDEO_MXC_IPU_OUTPUT=y
+# CONFIG_VIDEO_MXC_IPUV1_WVGA_OUTPUT is not set
+# CONFIG_VIDEO_MXC_OPL is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_TIMBERDALE is not set
+# CONFIG_VIDEO_SR030PC30 is not set
+# CONFIG_VIDEO_NOON010PC30 is not set
+# CONFIG_SOC_CAMERA is not set
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+CONFIG_USB_GSPCA=m
+# CONFIG_USB_M5602 is not set
+# CONFIG_USB_STV06XX is not set
+# CONFIG_USB_GL860 is not set
+# CONFIG_USB_GSPCA_BENQ is not set
+# CONFIG_USB_GSPCA_CONEX is not set
+# CONFIG_USB_GSPCA_CPIA1 is not set
+# CONFIG_USB_GSPCA_ETOMS is not set
+# CONFIG_USB_GSPCA_FINEPIX is not set
+# CONFIG_USB_GSPCA_JEILINJ is not set
+# CONFIG_USB_GSPCA_KINECT is not set
+# CONFIG_USB_GSPCA_KONICA is not set
+# CONFIG_USB_GSPCA_MARS is not set
+# CONFIG_USB_GSPCA_MR97310A is not set
+# CONFIG_USB_GSPCA_NW80X is not set
+# CONFIG_USB_GSPCA_OV519 is not set
+# CONFIG_USB_GSPCA_OV534 is not set
+# CONFIG_USB_GSPCA_OV534_9 is not set
+# CONFIG_USB_GSPCA_PAC207 is not set
+# CONFIG_USB_GSPCA_PAC7302 is not set
+# CONFIG_USB_GSPCA_PAC7311 is not set
+# CONFIG_USB_GSPCA_SN9C2028 is not set
+# CONFIG_USB_GSPCA_SN9C20X is not set
+# CONFIG_USB_GSPCA_SONIXB is not set
+# CONFIG_USB_GSPCA_SONIXJ is not set
+# CONFIG_USB_GSPCA_SPCA500 is not set
+# CONFIG_USB_GSPCA_SPCA501 is not set
+# CONFIG_USB_GSPCA_SPCA505 is not set
+# CONFIG_USB_GSPCA_SPCA506 is not set
+# CONFIG_USB_GSPCA_SPCA508 is not set
+# CONFIG_USB_GSPCA_SPCA561 is not set
+# CONFIG_USB_GSPCA_SPCA1528 is not set
+# CONFIG_USB_GSPCA_SQ905 is not set
+# CONFIG_USB_GSPCA_SQ905C is not set
+# CONFIG_USB_GSPCA_SQ930X is not set
+# CONFIG_USB_GSPCA_STK014 is not set
+# CONFIG_USB_GSPCA_STV0680 is not set
+# CONFIG_USB_GSPCA_SUNPLUS is not set
+# CONFIG_USB_GSPCA_T613 is not set
+# CONFIG_USB_GSPCA_TV8532 is not set
+# CONFIG_USB_GSPCA_VC032X is not set
+# CONFIG_USB_GSPCA_VICAM is not set
+# CONFIG_USB_GSPCA_XIRLINK_CIT is not set
+# CONFIG_USB_GSPCA_ZC3XX is not set
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_HDPVR is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+# CONFIG_USB_STKWEBCAM is not set
+# CONFIG_USB_S2255 is not set
+# CONFIG_V4L_MEM2MEM_DRIVERS is not set
+# CONFIG_RADIO_ADAPTERS is not set
+
+#
+# Graphics support
+#
+CONFIG_DRM=m
+CONFIG_DRM_VIVANTE=m
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_WMT_GE_ROPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_ARMCLCD is not set
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_TMIO is not set
+# CONFIG_FB_UDL is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_BROADSHEET is not set
+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_BACKLIGHT_ADP8860 is not set
+# CONFIG_BACKLIGHT_ADP8870 is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+CONFIG_FB_MXC=y
+CONFIG_FB_MXC_EDID=y
+CONFIG_FB_MXC_SYNC_PANEL=y
+# CONFIG_FB_MXC_EPSON_VGA_SYNC_PANEL is not set
+CONFIG_FB_MXC_LDB=y
+CONFIG_FB_MXC_MIPI_DSI=y
+CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
+# CONFIG_FB_MXC_CLAA_WVGA_SYNC_PANEL is not set
+# CONFIG_FB_MXC_SEIKO_WVGA_SYNC_PANEL is not set
+# CONFIG_FB_MXC_SII902X is not set
+# CONFIG_FB_MXC_CH7026 is not set
+# CONFIG_FB_MXC_TVOUT_CH7024 is not set
+# CONFIG_FB_MXC_ASYNC_PANEL is not set
+CONFIG_FB_MXC_EINK_PANEL=y
+# CONFIG_FB_MXC_EINK_AUTO_UPDATE_MODE is not set
+# CONFIG_FB_MXC_SIPIX_PANEL is not set
+# CONFIG_FB_MXC_ELCDIF_FB is not set
+CONFIG_FB_MXC_HDMI=y
+
+#
+# Console display driver support
+#
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_SOUND=y
+# CONFIG_SOUND_OSS_CORE is not set
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=y
+CONFIG_SND_RAWMIDI=y
+CONFIG_SND_JACK=y
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_MIXER_OSS is not set
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_HRTIMER is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+# CONFIG_SND_RAWMIDI_SEQ is not set
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
+CONFIG_SND_DRIVERS=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_ALOOP is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+CONFIG_SND_ARM=y
+# CONFIG_SND_ARMAACI is not set
+CONFIG_SND_SPI=y
+CONFIG_SND_USB=y
+CONFIG_SND_USB_AUDIO=y
+# CONFIG_SND_USB_UA101 is not set
+# CONFIG_SND_USB_CAIAQ is not set
+# CONFIG_SND_USB_6FIRE is not set
+CONFIG_SND_SOC=y
+# CONFIG_SND_SOC_CACHE_LZO is not set
+CONFIG_SND_SOC_AC97_BUS=y
+CONFIG_SND_IMX_SOC=y
+CONFIG_SND_MXC_SOC_MX2=y
+CONFIG_SND_MXC_SOC_SPDIF_DAI=y
+CONFIG_SND_SOC_IMX_SGTL5000=y
+# CONFIG_SND_SOC_IMX_WM8958 is not set
+CONFIG_SND_SOC_IMX_WM8962=y
+# CONFIG_SND_SOC_IMX_SI4763 is not set
+CONFIG_SND_SOC_IMX_SPDIF=y
+CONFIG_SND_SOC_IMX_HDMI=y
+CONFIG_SND_SOC_I2C_AND_SPI=y
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_MXC_HDMI=y
+CONFIG_SND_SOC_MXC_SPDIF=y
+CONFIG_SND_SOC_SGTL5000=y
+CONFIG_SND_SOC_WM8962=y
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+CONFIG_HIDRAW=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_A4TECH=m
+# CONFIG_HID_ACRUX is not set
+CONFIG_HID_APPLE=m
+CONFIG_HID_BELKIN=m
+CONFIG_HID_CHERRY=m
+CONFIG_HID_CHICONY=m
+# CONFIG_HID_PRODIKEYS is not set
+CONFIG_HID_CYPRESS=m
+# CONFIG_HID_DRAGONRISE is not set
+# CONFIG_HID_EMS_FF is not set
+# CONFIG_HID_ELECOM is not set
+CONFIG_HID_EZKEY=m
+# CONFIG_HID_KEYTOUCH is not set
+# CONFIG_HID_KYE is not set
+# CONFIG_HID_UCLOGIC is not set
+# CONFIG_HID_WALTOP is not set
+CONFIG_HID_GYRATION=m
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+# CONFIG_HID_LCPOWER is not set
+CONFIG_HID_LOGITECH=m
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+# CONFIG_LOGIG940_FF is not set
+# CONFIG_LOGIWII_FF is not set
+# CONFIG_HID_MAGICMOUSE is not set
+CONFIG_HID_MICROSOFT=m
+CONFIG_HID_MONTEREY=m
+# CONFIG_HID_MULTITOUCH is not set
+# CONFIG_HID_NTRIG is not set
+# CONFIG_HID_ORTEK is not set
+CONFIG_HID_PANTHERLORD=m
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=m
+# CONFIG_HID_PICOLCD is not set
+# CONFIG_HID_QUANTA is not set
+# CONFIG_HID_ROCCAT is not set
+# CONFIG_HID_ROCCAT_ARVO is not set
+# CONFIG_HID_ROCCAT_KONE is not set
+# CONFIG_HID_ROCCAT_KONEPLUS is not set
+# CONFIG_HID_ROCCAT_KOVAPLUS is not set
+# CONFIG_HID_ROCCAT_PYRA is not set
+CONFIG_HID_SAMSUNG=m
+CONFIG_HID_SONY=m
+CONFIG_HID_SUNPLUS=m
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_WACOM is not set
+# CONFIG_HID_ZEROPLUS is not set
+# CONFIG_HID_ZYDACRON is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+CONFIG_USB_OTG=y
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+# CONFIG_USB_MON is not set
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_ARC=y
+CONFIG_USB_EHCI_ARC_OTG=y
+# CONFIG_USB_EHCI_ARC_HSIC is not set
+# CONFIG_USB_STATIC_IRAM is not set
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_EHCI_MXC is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_REALTEK is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_STORAGE_ENE_UB6250 is not set
+# CONFIG_USB_UAS is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_YUREX is not set
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+CONFIG_USB_GADGET_ARC=y
+# CONFIG_IMX_USB_CHARGER is not set
+CONFIG_USB_ARC=y
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_FUSB300 is not set
+# CONFIG_USB_GADGET_R8A66597 is not set
+# CONFIG_USB_GADGET_PXA_U2O is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_AUDIO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_ETH_EEM is not set
+# CONFIG_USB_G_NCM is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FUNCTIONFS is not set
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_FSL_UTP is not set
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+# CONFIG_USB_MASS_STORAGE is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+# CONFIG_USB_G_MULTI is not set
+# CONFIG_USB_G_HID is not set
+# CONFIG_USB_G_DBGP is not set
+# CONFIG_USB_G_WEBCAM is not set
+
+#
+# OTG and related infrastructure
+#
+CONFIG_USB_OTG_UTILS=y
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ULPI is not set
+# CONFIG_NOP_USB_XCEIV is not set
+CONFIG_MXC_OTG=y
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+# CONFIG_MMC_CLKGATE is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_MINORS=8
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_ARMMMCI is not set
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_IO_ACCESSORS=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_ESDHC_IMX=y
+# CONFIG_MMC_DW is not set
+# CONFIG_MMC_VUB300 is not set
+# CONFIG_MMC_USHC is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_LM3530 is not set
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_LP5521 is not set
+# CONFIG_LEDS_LP5523 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_PWM is not set
+# CONFIG_LEDS_REGULATOR is not set
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_LT3593 is not set
+CONFIG_LEDS_TRIGGERS=y
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGER_TIMER is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+CONFIG_LEDS_TRIGGER_GPIO=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+
+#
+# LED Triggers
+#
+# CONFIG_NFC_DEVICES is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS3232 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_ISL12022 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+CONFIG_RTC_DRV_M41T80=y
+# CONFIG_RTC_DRV_M41T80_WDT is not set
+# CONFIG_RTC_DRV_BQ32K is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+# CONFIG_RTC_DRV_EM3027 is not set
+# CONFIG_RTC_DRV_RV3029C2 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T93 is not set
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_MXC is not set
+# CONFIG_RTC_DRV_MXC_V2 is not set
+# CONFIG_RTC_DRV_SNVS is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_PL030 is not set
+# CONFIG_RTC_DRV_PL031 is not set
+CONFIG_DMADEVICES=y
+# CONFIG_DMADEVICES_DEBUG is not set
+
+#
+# DMA Devices
+#
+# CONFIG_AMBA_PL08X is not set
+# CONFIG_DW_DMAC is not set
+CONFIG_MXC_PXP_V2=y
+CONFIG_MXC_PXP_CLIENT_DEVICE=y
+# CONFIG_TIMB_DMA is not set
+CONFIG_IMX_SDMA=y
+CONFIG_MXS_DMA=y
+CONFIG_DMA_ENGINE=y
+
+#
+# DMA Clients
+#
+# CONFIG_NET_DMA is not set
+# CONFIG_ASYNC_TX_DMA is not set
+# CONFIG_DMATEST is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+# CONFIG_STAGING is not set
+CONFIG_CLKDEV_LOOKUP=y
+CONFIG_CLKSRC_MMIO=y
+
+#
+# MXC support drivers
+#
+CONFIG_MXC_IPU=y
+CONFIG_MXC_IPU_V3=y
+CONFIG_MXC_IPU_V3H=y
+
+#
+# MXC SSI support
+#
+# CONFIG_MXC_SSI is not set
+
+#
+# MXC Digital Audio Multiplexer support
+#
+# CONFIG_MXC_DAM is not set
+
+#
+# MXC PMIC support
+#
+# CONFIG_MXC_PMIC_MC13783 is not set
+# CONFIG_MXC_PMIC_MC13892 is not set
+# CONFIG_MXC_PMIC_MC34704 is not set
+# CONFIG_MXC_PMIC_MC9SDZ60 is not set
+# CONFIG_MXC_PMIC_MC9S08DZ60 is not set
+
+#
+# MXC Security Drivers
+#
+# CONFIG_MXC_SECURITY_SCC is not set
+# CONFIG_MXC_SECURITY_RNG is not set
+
+#
+# MXC MPEG4 Encoder Kernel module support
+#
+# CONFIG_MXC_HMP4E is not set
+
+#
+# MXC HARDWARE EVENT
+#
+# CONFIG_MXC_HWEVENT is not set
+
+#
+# MXC VPU(Video Processing Unit) support
+#
+CONFIG_MXC_VPU=y
+# CONFIG_MXC_VPU_DEBUG is not set
+# CONFIG_MX6_VPU_352M is not set
+
+#
+# MXC Asynchronous Sample Rate Converter support
+#
+CONFIG_MXC_ASRC=y
+
+#
+# MXC Bluetooth support
+#
+
+#
+# Broadcom GPS ioctrl support
+#
+
+#
+# MXC Media Local Bus Driver
+#
+CONFIG_MXC_MLB=y
+CONFIG_MXC_MLB150=m
+
+#
+# i.MX ADC support
+#
+# CONFIG_IMX_ADC is not set
+
+#
+# MXC Vivante GPU support
+#
+CONFIG_MXC_GPU_VIV=y
+
+#
+# ANATOP_THERMAL
+#
+CONFIG_ANATOP_THERMAL=y
+
+#
+# MXC MIPI Support
+#
+CONFIG_MXC_MIPI_CSI2=y
+
+#
+# MXC HDMI CEC (Consumer Electronics Control) support
+#
+# CONFIG_MXC_HDMI_CEC is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_XATTR=y
+# CONFIG_EXT4_FS_POSIX_ACL is not set
+# CONFIG_EXT4_FS_SECURITY is not set
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=y
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_FANOTIFY is not set
+# CONFIG_QUOTA is not set
+# CONFIG_QUOTACTL is not set
+CONFIG_AUTOFS4_FS=m
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_TMPFS_XATTR is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_UBIFS_FS=y
+# CONFIG_UBIFS_FS_XATTR is not set
+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+# CONFIG_LOGFS is not set
+CONFIG_CRAMFS=y
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_PSTORE is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_CEPH_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+CONFIG_EFI_PARTITION=y
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_SECTION_MISMATCH is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_HARDLOCKUP_DETECTOR is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+# CONFIG_SPARSE_RCU_POINTER is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_MEMORY_INIT is not set
+CONFIG_RCU_CPU_STALL_TIMEOUT=60
+CONFIG_RCU_CPU_STALL_VERBOSE=y
+# CONFIG_LKDTM is not set
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_HAVE_C_RECORDMCOUNT=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_ATOMIC64_SELFTEST is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_TEST_KSTRTOX is not set
+# CONFIG_STRICT_DEVMEM is not set
+CONFIG_ARM_UNWIND=y
+# CONFIG_DEBUG_USER is not set
+CONFIG_OC_ETM=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY_DMESG_RESTRICT is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP2=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
+CONFIG_CRYPTO_GF128MUL=y
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_PCRYPT is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_AUTHENC=y
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_CRYPTODEV is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+CONFIG_CRYPTO_CCM=y
+CONFIG_CRYPTO_GCM=y
+CONFIG_CRYPTO_SEQIV=y
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTR=y
+CONFIG_CRYPTO_CTS=y
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_LRW=y
+CONFIG_CRYPTO_PCBC=y
+CONFIG_CRYPTO_XTS=y
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+CONFIG_CRYPTO_GHASH=y
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_MICHAEL_MIC=y
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+# CONFIG_CRYPTO_USER_API_HASH is not set
+# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
+CONFIG_CRYPTO_HW=y
+CONFIG_CRYPTO_DEV_FSL_CAAM=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE=9
+CONFIG_CRYPTO_DEV_FSL_CAAM_INTC=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_COUNT_THLD=255
+CONFIG_CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD=2048
+CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API=y
+# CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_TEST is not set
+CONFIG_CRYPTO_DEV_FSL_CAAM_SM=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_SM_SLOTSIZE=7
+CONFIG_CRYPTO_DEV_FSL_CAAM_SM_TEST=y
+CONFIG_CRYPTO_DEV_FSL_CAAM_SECVIO=y
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_RATIONAL=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+# CONFIG_XZ_DEC is not set
+# CONFIG_XZ_DEC_BCJ is not set
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_GENERIC_ALLOCATOR=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_CPU_RMAP=y
+CONFIG_NLATTR=y
+# CONFIG_AVERAGE is not set
diff --git a/recipes-kernel/linux/linux-qmx6-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch b/recipes-kernel/linux/linux-qmx6-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
new file mode 100644
index 0000000..815d02c
--- /dev/null
+++ b/recipes-kernel/linux/linux-qmx6-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
@@ -0,0 +1,31 @@
+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-qmx6-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch b/recipes-kernel/linux/linux-qmx6-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
new file mode 100644
index 0000000..0a20b3f
--- /dev/null
+++ b/recipes-kernel/linux/linux-qmx6-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
@@ -0,0 +1,143 @@
+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-qmx6-3.10.17/defconfig b/recipes-kernel/linux/linux-qmx6-3.10.17/defconfig
new file mode 100644
index 0000000..e99db5d
--- /dev/null
+++ b/recipes-kernel/linux/linux-qmx6-3.10.17/defconfig
@@ -0,0 +1,360 @@
+CONFIG_KERNEL_LZO=y
+CONFIG_SYSVIPC=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=18
+CONFIG_CGROUPS=y
+CONFIG_RELAY=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_EXPERT=y
+CONFIG_PERF_EVENTS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+# CONFIG_BLK_DEV_BSG is not set
+CONFIG_GPIO_PCA953X=y
+CONFIG_ARCH_MXC=y
+CONFIG_MXC_DEBUG_BOARD=y
+CONFIG_MACH_IMX51_DT=y
+CONFIG_MACH_EUKREA_CPUIMX51SD=y
+CONFIG_SOC_IMX53=y
+CONFIG_SOC_IMX6Q=y
+CONFIG_SOC_IMX6SL=y
+CONFIG_SOC_VF610=y
+# CONFIG_SWP_EMULATE is not set
+CONFIG_SMP=y
+CONFIG_VMSPLIT_2G=y
+CONFIG_PREEMPT=y
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_HIGHMEM=y
+CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=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_ARM_IMX6_CPUFREQ=y
+CONFIG_CPU_IDLE=y
+CONFIG_VFP=y
+CONFIG_NEON=y
+CONFIG_BINFMT_MISC=m
+CONFIG_PM_RUNTIME=y
+CONFIG_PM_DEBUG=y
+CONFIG_PM_TEST_SUSPEND=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_IPV6=y
+CONFIG_NETFILTER=y
+CONFIG_VLAN_8021Q=y
+CONFIG_CAN=y
+CONFIG_CAN_FLEXCAN=y
+CONFIG_CFG80211=y
+CONFIG_CFG80211_WEXT=y
+CONFIG_MAC80211=y
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_STANDALONE is not set
+CONFIG_CMA=y
+CONFIG_CMA_SIZE_MBYTES=320
+CONFIG_IMX_WEIM=y
+CONFIG_CONNECTOR=y
+CONFIG_MTD=y
+CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_PHYSMAP_OF=y
+CONFIG_MTD_DATAFLASH=y
+CONFIG_MTD_M25P80=y
+CONFIG_MTD_SST25L=y
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_GPMI_NAND=y
+CONFIG_MTD_NAND_MXC=y
+CONFIG_MTD_UBI=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=65536
+CONFIG_EEPROM_AT24=y
+CONFIG_EEPROM_AT25=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_MULTI_LUN=y
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SCAN_ASYNC=y
+# CONFIG_SCSI_LOWLEVEL is not set
+CONFIG_ATA=y
+CONFIG_SATA_AHCI_PLATFORM=y
+CONFIG_AHCI_IMX=y
+CONFIG_PATA_IMX=y
+CONFIG_NETDEVICES=y
+# CONFIG_NET_VENDOR_BROADCOM is not set
+CONFIG_CS89x0=y
+CONFIG_CS89x0_PLATFORM=y
+# CONFIG_NET_VENDOR_FARADAY is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+CONFIG_SMC91X=y
+CONFIG_SMC911X=y
+CONFIG_SMSC911X=y
+# CONFIG_NET_VENDOR_STMICRO is not set
+CONFIG_ATH_CARDS=y
+CONFIG_ATH6KL=m
+CONFIG_ATH6KL_SDIO=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_EVBUG=m
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_IMX=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ELANTECH=y
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_EGALAX=y
+CONFIG_TOUCHSCREEN_ELAN=y
+CONFIG_TOUCHSCREEN_MAX11801=y
+CONFIG_TOUCHSCREEN_MC13783=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_MMA8450=y
+CONFIG_INPUT_ISL29023=y
+CONFIG_SERIO_SERPORT=m
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_DEVKMEM is not set
+CONFIG_SERIAL_IMX=y
+CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_FSL_LPUART=y
+CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
+CONFIG_FSL_OTP=y
+CONFIG_MXS_VIIM=y
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_MUX=y
+CONFIG_I2C_MUX_GPIO=y
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_I2C_ALGOPCF=m
+CONFIG_I2C_ALGOPCA=m
+CONFIG_I2C_IMX=y
+CONFIG_SPI=y
+CONFIG_SPI_IMX=y
+CONFIG_GPIO_SYSFS=y
+CONFIG_POWER_SUPPLY=y
+CONFIG_SABRESD_MAX8903=y
+CONFIG_IMX6_USB_CHARGER=y
+CONFIG_SENSORS_MAX17135=y
+CONFIG_SENSORS_MAG3110=y
+CONFIG_THERMAL=y
+CONFIG_CPU_THERMAL=y
+CONFIG_IMX_THERMAL=y
+CONFIG_DEVICE_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_IMX2_WDT=y
+CONFIG_MFD_DA9052_I2C=y
+CONFIG_MFD_MC13XXX_SPI=y
+CONFIG_MFD_MC13XXX_I2C=y
+CONFIG_MFD_MAX17135=y
+CONFIG_MFD_SI476X_CORE=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_DA9052=y
+CONFIG_REGULATOR_ANATOP=y
+CONFIG_REGULATOR_MC13783=y
+CONFIG_REGULATOR_MC13892=y
+CONFIG_REGULATOR_MAX17135=y
+CONFIG_REGULATOR_PFUZE100=y
+CONFIG_MEDIA_SUPPORT=y
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_RADIO_SUPPORT=y
+CONFIG_VIDEO_V4L2_INT_DEVICE=y
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_VIDEO_MXC_OUTPUT=y
+CONFIG_VIDEO_MXC_CAPTURE=m
+CONFIG_VIDEO_MXC_CSI_CAMERA=m
+CONFIG_MXC_CAMERA_OV5640=m
+CONFIG_MXC_CAMERA_OV5642=m
+CONFIG_MXC_CAMERA_OV5640_MIPI=m
+CONFIG_MXC_TVIN_ADV7180=m
+CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=m
+CONFIG_VIDEO_MXC_IPU_OUTPUT=y
+CONFIG_VIDEO_MXC_PXP_V4L2=y
+CONFIG_SOC_CAMERA=y
+CONFIG_VIDEO_MX3=y
+CONFIG_RADIO_SI476X=y
+CONFIG_SOC_CAMERA_OV2640=y
+CONFIG_DRM=y
+CONFIG_DRM_VIVANTE=y
+CONFIG_FB=y
+CONFIG_FB_MXS=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_L4F00242T03=y
+CONFIG_LCD_PLATFORM=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_PWM=y
+CONFIG_FB_MXC_SYNC_PANEL=y
+CONFIG_FB_MXC_LDB=y
+CONFIG_FB_MXC_MIPI_DSI=y
+CONFIG_FB_MXC_TRULY_WVGA_SYNC_PANEL=y
+CONFIG_FB_MXC_HDMI=y
+CONFIG_FB_MXC_EINK_PANEL=y
+CONFIG_FB_MXS_SII902X=y
+CONFIG_HANNSTAR_CABC=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_SOC=y
+CONFIG_SND_IMX_SOC=y
+CONFIG_SND_SOC_EUKREA_TLV320=y
+CONFIG_SND_SOC_IMX_CS42888=y
+CONFIG_SND_SOC_IMX_WM8962=y
+CONFIG_SND_SOC_IMX_SGTL5000=y
+CONFIG_SND_SOC_IMX_SPDIF=y
+CONFIG_SND_SOC_IMX_MC13783=y
+CONFIG_SND_SOC_IMX_HDMI=y
+CONFIG_SND_SOC_IMX_SI476X=y
+CONFIG_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_CHIPIDEA=y
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+CONFIG_USB_PHY=y
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_USB_MXS_PHY=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_MASS_STORAGE=m
+CONFIG_USB_G_SERIAL=m
+CONFIG_MMC=y
+CONFIG_MMC_UNSAFE_RESUME=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_ESDHC_IMX=y
+CONFIG_MXC_IPU=y
+CONFIG_MXC_GPU_VIV=y
+CONFIG_MXC_ASRC=y
+CONFIG_MXC_MIPI_CSI2=y
+CONFIG_MXC_MLB150=m
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_GPIO=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+CONFIG_RTC_DRV_M41T80=y
+CONFIG_RTC_DRV_MC13XXX=y
+CONFIG_RTC_DRV_MXC=y
+CONFIG_RTC_DRV_SNVS=y
+CONFIG_DMADEVICES=y
+CONFIG_MXC_PXP_V2=y
+CONFIG_IMX_SDMA=y
+CONFIG_MXS_DMA=y
+CONFIG_STAGING=y
+CONFIG_COMMON_CLK_DEBUG=y
+# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_PWM=y
+CONFIG_PWM_IMX=y
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+CONFIG_AUTOFS4_FS=y
+CONFIG_FUSE_FS=y
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+CONFIG_JFFS2_FS=y
+CONFIG_UBIFS_FS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_ROOT_NFS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_UTF8=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_FTRACE is not set
+CONFIG_SECURITYFS=y
+CONFIG_CRYPTO_USER=y
+CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_CCM=y
+CONFIG_CRYPTO_GCM=y
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTS=y
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_LRW=y
+CONFIG_CRYPTO_XTS=y
+CONFIG_CRYPTO_MD4=y
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_RMD128=y
+CONFIG_CRYPTO_RMD160=y
+CONFIG_CRYPTO_RMD256=y
+CONFIG_CRYPTO_RMD320=y
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=y
+CONFIG_CRYPTO_SHA512=y
+CONFIG_CRYPTO_TGR192=y
+CONFIG_CRYPTO_WP512=y
+CONFIG_CRYPTO_BLOWFISH=y
+CONFIG_CRYPTO_CAMELLIA=y
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_TWOFISH=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
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
diff --git a/recipes-kernel/linux/linux-qmx6_3.0.35.bb b/recipes-kernel/linux/linux-qmx6_3.0.35.bb
new file mode 100644
index 0000000..d870403
--- /dev/null
+++ b/recipes-kernel/linux/linux-qmx6_3.0.35.bb
@@ -0,0 +1,24 @@
+LICENSE = "GPLv2"
+
+require recipes-kernel/linux/linux-imx.inc
+
+PROVIDES = "virtual/kernel linux-mainline"
+
+PV = "3.0.35"
+GTBRANCH = "cgt_imx_3.0.35_4.1.0-1"
+
+# SRC_URI for QMX6 kernel
+SRC_URI = "git://git.congatec.com/arm/qmx6_kernel.git;protocol=http;branch=${CGTBRANCH} \
+           file://defconfig \
+           file://drm-vivante-Add-00-sufix-in-returned-bus-Id.patch \
+	   file://epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch \
+	   file://ENGR00278350-gpu-viante-4.6.9p13-kernel-part-integra.patch"
+
+# QMX6 branch - based on 4.1.0 from Congatec git
+SRC_URI[md5sum] = "a2b4e0ce12284b4d07846442d4e3b8ef"
+SRC_URI[sha256sum] = "e6ab472379dacf71d08e0af3044a733b24bd2dcdebbb45c79b813d1229029af6"
+
+SRCREV = "e71f9009fd9555033e5bc3bf82a2e8ccf9f09895"
+LOCALVERSION = "-4.1.0+qmx6"
+
+COMPATIBLE_MACHINE = "(cgtqmx6)"
diff --git a/recipes-kernel/linux/linux-qmx6_3.10.17.bb b/recipes-kernel/linux/linux-qmx6_3.10.17.bb
new file mode 100644
index 0000000..b5b0996
--- /dev/null
+++ b/recipes-kernel/linux/linux-qmx6_3.10.17.bb
@@ -0,0 +1,21 @@
+LICENSE = "GPLv2"
+
+require recipes-kernel/linux/linux-imx.inc
+require recipes-kernel/linux/linux-dtb.inc
+
+DEPENDS += "lzop-native bc-native"
+
+PROVIDES = "virtual/kernel linux-mainline"
+
+PV = "3.10.17"
+CGTBRANCH = "cgt_imx_3.10.17_1.0.0"
+
+# SRC_URI for QMX6 kernel
+SRC_URI = "git://git.congatec.com/arm/qmx6_kernel.git;protocol=http;branch=${CGTBRANCH} \
+           file://defconfig \
+"
+
+SRCREV = "4138f5b7185179918be2aa826f594aefde9e4b7c"
+LOCALVERSION = "-1.0.0_qmx6"
+
+COMPATIBLE_MACHINE = "(cgtqmx6)"
-- 
1.9.1



More information about the meta-freescale mailing list