All of lore.kernel.org
 help / color / mirror / Atom feed
* [meta-fsl-arm-extra][PATCH] UDOO board machine
@ 2013-12-12 14:22 Luca Simone Ronga
  2013-12-12 17:00 ` John Weber
  0 siblings, 1 reply; 4+ messages in thread
From: Luca Simone Ronga @ 2013-12-12 14:22 UTC (permalink / raw)
  To: meta-freescale; +Cc: Luca Simone Ronga, Luca Simone Ronga

From: Luca Simone Ronga <luca.simone.ronga@gmail.com>


Signed-off-by: Luca Simone Ronga <luca.ronga@cnit.it>
---
 conf/machine/udoo-quad.conf                        |   26 +
 .../0001-modified-UDOO-conf-for-yocto-meta.patch   |   49 +
 recipes-bsp/u-boot/u-boot-unico_2013.bb            |   24 +
 ...8-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch | 1040 +++++++
 ...Fix-getrusage-related-build-failure-on-gl.patch |   43 +
 ...fix-memset-related-crashes-caused-by-rece.patch |  259 ++
 ...5-gpu-Add-global-value-for-minimum-3D-clo.patch |   62 +
 .../0003-ARM-7670-1-fix-the-memset-fix.patch       |   87 +
 ...4-4-gpu-use-new-PU-power-on-off-interface.patch |   53 +
 ...8-1-GPU-Integrate-4.6.9p12-release-kernel.patch | 2006 +++++++++++++
 ...6-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch |   43 +
 ...5-GPU-Correct-suspend-resume-calling-afte.patch |   61 +
 ...0005-ENGR00271359-Add-Multi-touch-support.patch |   98 +
 .../0006-Add-support-for-DVI-monitors.patch        |  227 ++
 ...0-gpu-Correct-section-mismatch-in-gpu-ker.patch |   60 +
 ...6-board-mx6q_sabresd-Register-SDHC3-first.patch |   38 +
 recipes-kernel/linux/linux-unico-3.0.35/defconfig  | 3149 ++++++++++++++++++++
 ...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-unico.inc               |   17 +
 recipes-kernel/linux/linux-unico_3.0.35.bb         |   46 +
 21 files changed, 7562 insertions(+)
 create mode 100644 conf/machine/udoo-quad.conf
 create mode 100644 recipes-bsp/u-boot/u-boot-unico/0001-modified-UDOO-conf-for-yocto-meta.patch
 create mode 100644 recipes-bsp/u-boot/u-boot-unico_2013.bb
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0001-ENGR00255688-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0002-ENGR00265465-gpu-Add-global-value-for-minimum-3D-clo.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0004-ENGR00264288-1-GPU-Integrate-4.6.9p12-release-kernel.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0005-ENGR00264275-GPU-Correct-suspend-resume-calling-afte.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0006-Add-support-for-DVI-monitors.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0006-ENGR00265130-gpu-Correct-section-mismatch-in-gpu-ker.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/defconfig
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
 create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
 create mode 100644 recipes-kernel/linux/linux-unico.inc
 create mode 100644 recipes-kernel/linux/linux-unico_3.0.35.bb

diff --git a/conf/machine/udoo-quad.conf b/conf/machine/udoo-quad.conf
new file mode 100644
index 0000000..09da0e7
--- /dev/null
+++ b/conf/machine/udoo-quad.conf
@@ -0,0 +1,26 @@
+#@TYPE: Machine
+#@NAME: UDOO Quad
+#@SOC: i.MX6Q
+#@DESCRIPTION: Machine configuration for UDOO Quad
+
+include conf/machine/include/imx-base.inc
+include conf/machine/include/tune-cortexa9.inc
+
+SOC_FAMILY = "mx6:mx6q:udoo"
+
+PREFERRED_PROVIDER_virtual/kernel ?= "linux-unico"
+
+PREFERRED_PROVIDER_u-boot = "u-boot-unico"
+
+PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
+
+UBOOT_MACHINE = "udoo_quad_config"
+
+KERNEL_DEVICETREE = "imx6q-udoo.dtb"
+
+SERIAL_CONSOLE = "115200 ttymxc1"
+
+MACHINE_FEATURES += " pci wifi"
+
+#MACHINE_EXTRA_RRECOMMENDS += " broadcom-nvram-config"
+
diff --git a/recipes-bsp/u-boot/u-boot-unico/0001-modified-UDOO-conf-for-yocto-meta.patch b/recipes-bsp/u-boot/u-boot-unico/0001-modified-UDOO-conf-for-yocto-meta.patch
new file mode 100644
index 0000000..25c2886
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-unico/0001-modified-UDOO-conf-for-yocto-meta.patch
@@ -0,0 +1,49 @@
+From 0f536350a5add4ffa8d4ff874fca7bbccc57b63b Mon Sep 17 00:00:00 2001
+From: udoo <udoo@udoo-virtual-machine.(none)>
+Date: Mon, 9 Dec 2013 12:38:44 +0100
+Subject: [PATCH] modified UDOO conf for yocto meta
+
+---
+ include/configs/udoo.h |   10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/include/configs/udoo.h b/include/configs/udoo.h
+index 7632bb7..394d0e7 100644
+--- a/include/configs/udoo.h
++++ b/include/configs/udoo.h
+@@ -124,7 +124,7 @@
+ 
+ #define CONFIG_EXTRA_ENV_SETTINGS \
+ 	"script=boot.scr\0" \
+-	"uimage=/boot/uImage\0" \
++	"uimage=uImage\0" \
+ 	"console=ttymxc1\0" \
+ 	"splashpos=m,m\0" \
+ 	"fdt_high=0xffffffff\0" \
+@@ -136,7 +136,7 @@
+ 	"hdmi_patch=\0" \
+ 	"mmcdev=0\0" \
+ 	"mmcpart=1\0" \
+-	"mmcroot=/dev/mmcblk0p1 rootwait rw\0" \
++	"mmcroot=/dev/mmcblk0p2 rootwait rw\0" \
+ 	"update_sd_firmware_filename=u-boot.imx\0" \
+ 	"update_sd_firmware=" \
+ 	 "if test ${ip_dyn} = yes; then " \
+@@ -156,11 +156,11 @@
+ 	 "${hdmi_patch} " \
+ 	 "fbmem=24M video=mxcfb0:dev=hdmi,1920x1080M@60,bpp=32\0" \
+ 	"loadbootscript=" \
+-	 "ext2load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
++	 "fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
+ 	"bootscript=echo Running bootscript from mmc ...; " \
+ 	 "source\0" \
+-	"loaduimage=ext2load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${uimage}\0" \
+-	"loadfdt=ext2load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
++	"loaduimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${uimage}\0" \
++	"loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
+ 	"mmcboot=echo Booting from mmc ...; " \
+ 	 "run mmcargs; " \
+ 	 "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
+-- 
+1.7.9.5
+
diff --git a/recipes-bsp/u-boot/u-boot-unico_2013.bb b/recipes-bsp/u-boot/u-boot-unico_2013.bb
new file mode 100644
index 0000000..83cfbe9
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-unico_2013.bb
@@ -0,0 +1,24 @@
+require recipes-bsp/u-boot/u-boot.inc
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://Licenses/README;md5=6bc50ecab884fce80cd3ef3da8852b08"
+
+SRC_URI[md5sum] = "c0f064a9e9d1eb3c91ab166a631af080"
+SRC_URI[sha256sum] = "46273bb1da340814451ef781ee7fba50faf44541c694e2d333d5f351f691d6fa"
+
+COMPATIBLE_MACHINE = "(mx6)"
+DEPENDS_mxs += "elftosb-native openssl-native"
+PROVIDES += "u-boot"
+PV="unico2013"
+
+SRCREV = "b48999bc21243676a80f94ff1d2cd78418aca013"
+SRC_URI = "git://github.com/UDOOboard/U-Boot_Unico-2013.git \
+	   file://0001-modified-UDOO-conf-for-yocto-meta.patch"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE += 'HOSTCC="${BUILD_CC} ${BUILD_CPPFLAGS}" \
+                 HOSTLDFLAGS="-L${STAGING_BASE_LIBDIR_NATIVE} -L${STAGING_LIBDIR_NATIVE}" \
+                 HOSTSTRIP=true'
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0001-ENGR00255688-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch b/recipes-kernel/linux/linux-unico-3.0.35/0001-ENGR00255688-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch
new file mode 100644
index 0000000..9c7cd44
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0001-ENGR00255688-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch
@@ -0,0 +1,1040 @@
+From 46e3a6de5adb9379f9d6eef2c038c2f18637d407 Mon Sep 17 00:00:00 2001
+From: Loren Huang <b02279@freescale.com>
+Date: Mon, 25 Mar 2013 15:43:57 +0800
+Subject: [PATCH 1/6] ENGR00255688 4.6.9p11.1 [gpu]GPU Kernel driver
+ integration
+
+4.6.9p11.1 GPU kernel driver integration
+Cherry pick from imx_3.0.35
+
+Upstream-Status: Backport [3.5.7-1.0.0]
+
+Signed-off-by: Loren Huang <b02279@freescale.com>
+Acked-by: Lily Zhang
+---
+ drivers/mxc/gpu-viv/Kbuild                         |   2 +-
+ .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.c   |   2 +-
+ .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c  |   7 +-
+ drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h     |   2 +-
+ drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c  |  53 ++++--
+ .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c   |   5 +-
+ drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 178 ++++++++++++---------
+ .../hal/kernel/gc_hal_kernel_video_memory.c        |   3 +-
+ .../gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h    |  13 +-
+ drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h |  25 +++
+ .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h    |  35 ++++
+ .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h    |   2 +-
+ .../hal/os/linux/kernel/gc_hal_kernel_driver.c     |   2 +-
+ .../hal/os/linux/kernel/gc_hal_kernel_linux.h      |   6 +
+ .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c |  82 +++++++++-
+ 15 files changed, 304 insertions(+), 113 deletions(-)
+
+diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild
+index 0b18a7b..93b1259 100644
+--- a/drivers/mxc/gpu-viv/Kbuild
++++ b/drivers/mxc/gpu-viv/Kbuild
+@@ -1,6 +1,6 @@
+ ##############################################################################
+ #
+-#    Copyright (C) 2005 - 2012 by Vivante Corp.
++#    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
+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 22e1f27..24003e7 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
+@@ -471,7 +471,7 @@ _InitializeContextBuffer(
+     index += _SwitchPipe(Context, index, gcvPIPE_3D);
+ 
+     /* Current context pointer. */
+-#if gcdDEBUG 
++#if gcdDEBUG
+     index += _State(Context, index, 0x03850 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
+ #endif
+ 
+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 a87259e..3829999 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
+@@ -232,7 +232,8 @@ _IdentifyHardware(
+     }
+ 
+     /* Exception for GC1000, revision 5035 &  GC800, revision 4612 */
+-    if (((Identity->chipModel == gcv1000) && (Identity->chipRevision == 0x5035))
++    if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
++                                           || (Identity->chipRevision == 0x5036)))
+ 	 || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612)))
+     {
+         Identity->superTileMode = 1;
+@@ -751,7 +752,7 @@ gckHARDWARE_Construct(
+     /* Initialize the fast clear. */
+     gcmkONERROR(gckHARDWARE_SetFastClear(hardware, -1, -1));
+ 
+-#if !gcdENABLE_128B_MERGE  
++#if !gcdENABLE_128B_MERGE
+ 
+     if (((((gctUINT32) (hardware->identity.chipMinorFeatures2)) >> (0 ? 21:21) & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1)))))) == (0x1  & ((gctUINT32) ((((1 ? 21:21) - (0 ? 21:21) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 21:21) - (0 ? 21:21) + 1))))))))
+     {
+@@ -1027,7 +1028,7 @@ gckHARDWARE_InitializeHardware(
+                                       0x00424,
+                                       baseAddress));
+ 
+-#if !VIVANTE_PROFILER 
++#if !VIVANTE_PROFILER
+     {
+         gctUINT32 data;
+ 
+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 1da80b7..5896e93 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
+@@ -186,7 +186,7 @@ typedef struct _gcsDATABASE
+     gctUINT64                           idle;
+ 
+     /* Pointer to database. */
+-    gcsDATABASE_RECORD_PTR              list;
++    gcsDATABASE_RECORD_PTR              list[48];
+ 
+ #if gcdSECURE_USER
+     /* Secure cache. */
+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 1fb18fb..bc5f083 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
+@@ -26,6 +26,9 @@
+ /*******************************************************************************
+ ***** Private fuctions ********************************************************/
+ 
++#define _GetSlot(database, x) \
++    (gctUINT32)(((gcmPTR_TO_UINT64(x) >> 7) % gcmCOUNTOF(database->list)))
++
+ /*******************************************************************************
+ **  gckKERNEL_NewDatabase
+ **
+@@ -56,6 +59,7 @@ gckKERNEL_NewDatabase(
+     gcsDATABASE_PTR database;
+     gctBOOL acquired = gcvFALSE;
+     gctSIZE_T slot;
++    gcsDATABASE_PTR existingDatabase;
+ 
+     gcmkHEADER_ARG("Kernel=0x%x ProcessID=%d", Kernel, ProcessID);
+ 
+@@ -63,6 +67,21 @@ gckKERNEL_NewDatabase(
+     gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->db->dbMutex, gcvINFINITE));
+     acquired = gcvTRUE;
+ 
++    /* Compute the hash for the database. */
++    slot = ProcessID % gcmCOUNTOF(Kernel->db->db);
++
++    /* Walk the hash list. */
++    for (existingDatabase = Kernel->db->db[slot];
++         existingDatabase != gcvNULL;
++         existingDatabase = existingDatabase->next)
++    {
++        if (existingDatabase->processID == ProcessID)
++        {
++            /* One process can't be added twice. */
++            gcmkONERROR(gcvSTATUS_NOT_SUPPORTED);
++        }
++    }
++
+     if (Kernel->db->freeDatabase != gcvNULL)
+     {
+         /* Allocate a database from the free list. */
+@@ -81,9 +100,6 @@ gckKERNEL_NewDatabase(
+         database = pointer;
+     }
+ 
+-    /* Compute the hash for the database. */
+-    slot = ProcessID % gcmCOUNTOF(Kernel->db->db);
+-
+     /* Insert the database into the hash. */
+     database->next   = Kernel->db->db[slot];
+     Kernel->db->db[slot] = database;
+@@ -350,6 +366,7 @@ static gceSTATUS
+ gckKERNEL_NewRecord(
+     IN gckKERNEL Kernel,
+     IN gcsDATABASE_PTR Database,
++    IN gctUINT32 Slot,
+     OUT gcsDATABASE_RECORD_PTR * Record
+     )
+ {
+@@ -383,8 +400,8 @@ gckKERNEL_NewRecord(
+     }
+ 
+     /* Insert the record in the database. */
+-    record->next   = Database->list;
+-    Database->list = record;
++    record->next         = Database->list[Slot];
++    Database->list[Slot] = record;
+ 
+     /* Release the database mutex. */
+     gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->db->dbMutex));
+@@ -449,6 +466,7 @@ gckKERNEL_DeleteRecord(
+     gceSTATUS status;
+     gctBOOL acquired = gcvFALSE;
+     gcsDATABASE_RECORD_PTR record, previous;
++    gctUINT32 slot = _GetSlot(Database, Data);
+ 
+     gcmkHEADER_ARG("Kernel=0x%x Database=0x%x Type=%d Data=0x%x",
+                    Kernel, Database, Type, Data);
+@@ -458,8 +476,9 @@ gckKERNEL_DeleteRecord(
+         gckOS_AcquireMutex(Kernel->os, Kernel->db->dbMutex, gcvINFINITE));
+     acquired = gcvTRUE;
+ 
++
+     /* Scan the database for this record. */
+-    for (record = Database->list, previous = gcvNULL;
++    for (record = Database->list[slot], previous = gcvNULL;
+          record != gcvNULL;
+          record = record->next
+     )
+@@ -490,7 +509,7 @@ gckKERNEL_DeleteRecord(
+     /* Remove record from database. */
+     if (previous == gcvNULL)
+     {
+-        Database->list = record->next;
++        Database->list[slot] = record->next;
+     }
+     else
+     {
+@@ -557,6 +576,7 @@ gckKERNEL_FindRecord(
+     gceSTATUS status;
+     gctBOOL acquired = gcvFALSE;
+     gcsDATABASE_RECORD_PTR record;
++    gctUINT32 slot = _GetSlot(Database, Data);
+ 
+     gcmkHEADER_ARG("Kernel=0x%x Database=0x%x Type=%d Data=0x%x",
+                    Kernel, Database, Type, Data);
+@@ -567,7 +587,7 @@ gckKERNEL_FindRecord(
+     acquired = gcvTRUE;
+ 
+     /* Scan the database for this record. */
+-    for (record = Database->list;
++    for (record = Database->list[slot];
+          record != gcvNULL;
+          record = record->next
+     )
+@@ -642,6 +662,7 @@ gckKERNEL_CreateProcessDB(
+ {
+     gceSTATUS status;
+     gcsDATABASE_PTR database = gcvNULL;
++    gctUINT32 i;
+ 
+     gcmkHEADER_ARG("Kernel=0x%x ProcessID=%d", Kernel, ProcessID);
+ 
+@@ -668,7 +689,11 @@ gckKERNEL_CreateProcessDB(
+     database->mapUserMemory.bytes      = 0;
+     database->mapUserMemory.maxBytes   = 0;
+     database->mapUserMemory.totalBytes = 0;
+-    database->list                  = gcvNULL;
++
++    for (i = 0; i < gcmCOUNTOF(database->list); i++)
++    {
++        database->list[i]              = gcvNULL;
++    }
+ 
+ #if gcdSECURE_USER
+     {
+@@ -848,7 +873,7 @@ gckKERNEL_AddProcessDB(
+     gcmkONERROR(gckKERNEL_FindDatabase(Kernel, ProcessID, gcvFALSE, &database));
+ 
+     /* Create a new record in the database. */
+-    gcmkONERROR(gckKERNEL_NewRecord(Kernel, database, &record));
++    gcmkONERROR(gckKERNEL_NewRecord(Kernel, database, _GetSlot(database, Pointer), &record));
+ 
+     /* Initialize the record. */
+     record->kernel   = Kernel;
+@@ -1086,6 +1111,7 @@ gckKERNEL_DestroyProcessDB(
+     gctPHYS_ADDR physical;
+     gcuVIDMEM_NODE_PTR node;
+     gckKERNEL kernel = Kernel;
++    gctUINT32 i;
+ 
+     gcmkHEADER_ARG("Kernel=0x%x ProcessID=%d", Kernel, ProcessID);
+ 
+@@ -1126,8 +1152,11 @@ gckKERNEL_DestroyProcessDB(
+                        ProcessID);
+     }
+ 
++    for(i = 0; i < gcmCOUNTOF(database->list); i++)
++    {
++
+     /* Walk all records. */
+-    for (record = database->list; record != gcvNULL; record = next)
++    for (record = database->list[i]; record != gcvNULL; record = next)
+     {
+         /* Next next record. */
+         next = record->next;
+@@ -1293,6 +1322,8 @@ gckKERNEL_DestroyProcessDB(
+                                            gcvNULL));
+     }
+ 
++    }
++
+     /* Delete the database. */
+     gcmkONERROR(gckKERNEL_DeleteDatabase(Kernel, database));
+ 
+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 f78d096..217f7f1 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
+@@ -959,6 +959,8 @@ gckEVENT_AddList(
+     record->kernel = Event->kernel;
+ #endif
+ 
++    gcmkONERROR(__RemoveRecordFromProcessDB(Event, record));
++
+     /* Acquire the mutex. */
+     gcmkONERROR(gckOS_AcquireMutex(Event->os, Event->eventListMutex, gcvINFINITE));
+     acquired = gcvTRUE;
+@@ -1539,9 +1541,6 @@ gckEVENT_Submit(
+             gcmkONERROR(gckOS_ReleaseMutex(Event->os, Event->eventListMutex));
+             acquired = gcvFALSE;
+ 
+-            gcmkONERROR(__RemoveRecordFromProcessDB(Event,
+-                Event->queues[id].head));
+-
+ #if gcdNULL_DRIVER
+             /* Notify immediately on infinite hardware. */
+             gcmkONERROR(gckEVENT_Interrupt(Event, 1 << id));
+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 0c71e28..43c9297 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
+@@ -97,6 +97,43 @@ static gcsMirrorPageTable_PTR mirrorPageTable = gcvNULL;
+ static gctPOINTER mirrorPageTableMutex = gcvNULL;
+ #endif
+ 
++static void
++_WritePageEntry(
++    IN gctUINT32_PTR PageEntry,
++    IN gctUINT32     EntryValue
++    )
++{
++    static gctUINT16 data = 0xff00;
++
++    if (*(gctUINT8 *)&data == 0xff)
++    {
++        *PageEntry = gcmSWAB32(EntryValue);
++    }
++    else
++    {
++        *PageEntry = EntryValue;
++    }
++}
++
++static gctUINT32
++_ReadPageEntry(
++    IN gctUINT32_PTR PageEntry
++    )
++{
++    static gctUINT16 data = 0xff00;
++    gctUINT32 entryValue;
++
++    if (*(gctUINT8 *)&data == 0xff)
++    {
++        entryValue = *PageEntry;
++        return gcmSWAB32(entryValue);
++    }
++    else
++    {
++        return *PageEntry;
++    }
++}
++
+ static gceSTATUS
+ _FillPageTable(
+     IN gctUINT32_PTR PageTable,
+@@ -108,7 +145,7 @@ _FillPageTable(
+ 
+     for (i = 0; i < PageCount; i++)
+     {
+-        PageTable[i] = EntryValue;
++        _WritePageEntry(PageTable + i, EntryValue);
+     }
+ 
+     return gcvSTATUS_OK;
+@@ -132,16 +169,16 @@ _Link(
+         gctUINT32_PTR pageTable = Mmu->pageTableLogical;
+ 
+         /* Dispatch on node type. */
+-        switch (gcmENTRY_TYPE(pageTable[Index]))
++        switch (gcmENTRY_TYPE(_ReadPageEntry(&pageTable[Index])))
+         {
+         case gcvMMU_SINGLE:
+             /* Set single index. */
+-            pageTable[Index] = (Next << 8) | gcvMMU_SINGLE;
++            _WritePageEntry(&pageTable[Index], (Next << 8) | gcvMMU_SINGLE);
+             break;
+ 
+         case gcvMMU_FREE:
+             /* Set index. */
+-            pageTable[Index + 1] = Next;
++            _WritePageEntry(&pageTable[Index + 1], Next);
+             break;
+ 
+         default:
+@@ -167,13 +204,13 @@ _AddFree(
+     if (Count == 1)
+     {
+         /* Initialize a single page node. */
+-        pageTable[Node] = (~((1U<<8)-1)) | gcvMMU_SINGLE;
++        _WritePageEntry(pageTable + Node, (~((1U<<8)-1)) | gcvMMU_SINGLE);
+     }
+     else
+     {
+         /* Initialize the node. */
+-        pageTable[Node + 0] = (Count << 8) | gcvMMU_FREE;
+-        pageTable[Node + 1] = ~0U;
++        _WritePageEntry(pageTable + Node + 0, (Count << 8) | gcvMMU_FREE);
++        _WritePageEntry(pageTable + Node + 1, ~0U);
+     }
+ 
+     /* Append the node. */
+@@ -196,7 +233,7 @@ _Collect(
+     for (i = 0; i < Mmu->pageTableEntries; ++i)
+     {
+         /* Dispatch based on type of page. */
+-        switch (gcmENTRY_TYPE(pageTable[i]))
++        switch (gcmENTRY_TYPE(_ReadPageEntry(&pageTable[i])))
+         {
+         case gcvMMU_USED:
+             /* Used page, so close any open node. */
+@@ -229,10 +266,10 @@ _Collect(
+             }
+ 
+             /* Advance the count. */
+-            count += pageTable[i] >> 8;
++            count += _ReadPageEntry(&pageTable[i]) >> 8;
+ 
+             /* Advance the index into the page table. */
+-            i     += (pageTable[i] >> 8) - 1;
++            i     += (_ReadPageEntry(&pageTable[i]) >> 8) - 1;
+             break;
+ 
+         default:
+@@ -341,19 +378,20 @@ _FillFlatMapping(
+                 gcmkONERROR(gcvSTATUS_NOT_ALIGNED);
+             }
+ 
+-            *(Mmu->mtlbLogical + mStart)
+-                      = stlb->physBase
+-                        /* 64KB page size */
+-                        | (1 << 2)
+-                        /* Ignore exception */
+-                        | (0 << 1)
+-                        /* Present */
+-                        | (1 << 0);
++            _WritePageEntry(Mmu->mtlbLogical + mStart,
++                            stlb->physBase
++                            /* 64KB page size */
++                            | (1 << 2)
++                            /* Ignore exception */
++                            | (0 << 1)
++                            /* Present */
++                            | (1 << 0)
++                            );
+ #if gcdMMU_TABLE_DUMP
+             gckOS_Print("%s(%d): insert MTLB[%d]: %08x\n",
+                 __FUNCTION__, __LINE__,
+                 mStart,
+-                *(Mmu->mtlbLogical + mStart));
++                _ReadPageEntry(Mmu->mtlbLogical + mStart));
+ #endif
+ 
+             stlb->mtlbIndex = mStart;
+@@ -368,12 +406,12 @@ _FillFlatMapping(
+             while (sStart <= last)
+             {
+                 gcmkASSERT(!(start & gcdMMU_PAGE_64K_MASK));
+-                *(stlb->logical + sStart) = _SetPage(start);
++                _WritePageEntry(stlb->logical + sStart, _SetPage(start));
+ #if gcdMMU_TABLE_DUMP
+                 gckOS_Print("%s(%d): insert STLB[%d]: %08x\n",
+                     __FUNCTION__, __LINE__,
+                     sStart,
+-                    *(stlb->logical + sStart));
++                    _ReadPageEntry(stlb->logical + sStart));
+ #endif
+                 /* next page. */
+                 start += gcdMMU_PAGE_64K_SIZE;
+@@ -428,7 +466,7 @@ OnError:
+         if (pre->mtlbEntryNum != 0)
+         {
+             gcmkASSERT(pre->mtlbEntryNum == 1);
+-            *(Mmu->mtlbLogical + pre->mtlbIndex) = 0;
++            _WritePageEntry(Mmu->mtlbLogical + pre->mtlbIndex, 0);
+         }
+ 
+         gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Mmu->os, pre));
+@@ -493,8 +531,8 @@ _SetupDynamicSpace(
+ 
+     /* Initilization. */
+     pageTable      = Mmu->pageTableLogical;
+-    pageTable[0]   = (Mmu->pageTableEntries << 8) | gcvMMU_FREE;
+-    pageTable[1]   = ~0U;
++    _WritePageEntry(pageTable,     (Mmu->pageTableEntries << 8) | gcvMMU_FREE);
++    _WritePageEntry(pageTable + 1, ~0U);
+     Mmu->heapList  = 0;
+     Mmu->freeNodes = gcvFALSE;
+ 
+@@ -509,18 +547,20 @@ _SetupDynamicSpace(
+     /* Map to Master TLB. */
+     for (; i < gcdMMU_MTLB_ENTRY_NUM; i++)
+     {
+-        Mmu->mtlbLogical[i] = physical
+-                            /* 4KB page size */
+-                            | (0 << 2)
+-                            /* Ignore exception */
+-                            | (0 << 1)
+-                            /* Present */
+-                            | (1 << 0);
++        _WritePageEntry(Mmu->mtlbLogical + i,
++                        physical
++                        /* 4KB page size */
++                        | (0 << 2)
++                        /* Ignore exception */
++                        | (0 << 1)
++                        /* Present */
++                        | (1 << 0)
++                        );
+ #if gcdMMU_TABLE_DUMP
+         gckOS_Print("%s(%d): insert MTLB[%d]: %08x\n",
+                 __FUNCTION__, __LINE__,
+                 i,
+-                *(Mmu->mtlbLogical + i));
++                _ReadPageEntry(Mmu->mtlbLogical + i));
+ #endif
+         physical += gcdMMU_STLB_4K_SIZE;
+     }
+@@ -645,18 +685,11 @@ _Construct(
+         pageTable      = mmu->pageTableLogical;
+ 
+ #if gcdMMU_CLEAR_VALUE
+-        {
+-            gctUINT32 i;
+-
+-            for (i = 0; i < mmu->pageTableEntries; ++i)
+-            {
+-                pageTable[i] = gcdMMU_CLEAR_VALUE;
+-            }
+-        }
++        _FillPageTable(pageTable, mmu->pageTableEntries, gcdMMU_CLEAR_VALUE);
+ #endif
+ 
+-        pageTable[0]   = (mmu->pageTableEntries << 8) | gcvMMU_FREE;
+-        pageTable[1]   = ~0U;
++        _WritePageEntry(pageTable,     (mmu->pageTableEntries << 8) | gcvMMU_FREE);
++        _WritePageEntry(pageTable + 1, ~0U);
+         mmu->heapList  = 0;
+         mmu->freeNodes = gcvFALSE;
+ 
+@@ -797,7 +830,7 @@ _Destroy(
+         if (pre->mtlbEntryNum != 0)
+         {
+             gcmkASSERT(pre->mtlbEntryNum == 1);
+-            *(Mmu->mtlbLogical + pre->mtlbIndex) = 0;
++            _WritePageEntry(Mmu->mtlbLogical + pre->mtlbIndex, 0);
+ #if gcdMMU_TABLE_DUMP
+             gckOS_Print("%s(%d): clean MTLB[%d]\n",
+                 __FUNCTION__, __LINE__,
+@@ -1044,7 +1077,7 @@ _AllocatePages(
+         for (index = Mmu->heapList; !gotIt && (index < Mmu->pageTableEntries);)
+         {
+             /* Check the node type. */
+-            switch (gcmENTRY_TYPE(pageTable[index]))
++            switch (gcmENTRY_TYPE(_ReadPageEntry(&pageTable[index])))
+             {
+             case gcvMMU_SINGLE:
+                 /* Single odes are valid if we only need 1 page. */
+@@ -1056,13 +1089,13 @@ _AllocatePages(
+                 {
+                     /* Move to next node. */
+                     previous = index;
+-                    index    = pageTable[index] >> 8;
++                    index    = _ReadPageEntry(&pageTable[index]) >> 8;
+                 }
+                 break;
+ 
+             case gcvMMU_FREE:
+                 /* Test if the node has enough space. */
+-                if (PageCount <= (pageTable[index] >> 8))
++                if (PageCount <= (_ReadPageEntry(&pageTable[index]) >> 8))
+                 {
+                     gotIt = gcvTRUE;
+                 }
+@@ -1070,7 +1103,7 @@ _AllocatePages(
+                 {
+                     /* Move to next node. */
+                     previous = index;
+-                    index    = pageTable[index + 1];
++                    index    = _ReadPageEntry(&pageTable[index + 1]);
+                 }
+                 break;
+ 
+@@ -1099,36 +1132,36 @@ _AllocatePages(
+         }
+     }
+ 
+-    switch (gcmENTRY_TYPE(pageTable[index]))
++    switch (gcmENTRY_TYPE(_ReadPageEntry(&pageTable[index])))
+     {
+     case gcvMMU_SINGLE:
+         /* Unlink single node from free list. */
+         gcmkONERROR(
+-            _Link(Mmu, previous, pageTable[index] >> 8));
++            _Link(Mmu, previous, _ReadPageEntry(&pageTable[index]) >> 8));
+         break;
+ 
+     case gcvMMU_FREE:
+         /* Check how many pages will be left. */
+-        left = (pageTable[index] >> 8) - PageCount;
++        left = (_ReadPageEntry(&pageTable[index]) >> 8) - PageCount;
+         switch (left)
+         {
+         case 0:
+             /* The entire node is consumed, just unlink it. */
+             gcmkONERROR(
+-                _Link(Mmu, previous, pageTable[index + 1]));
++                _Link(Mmu, previous, _ReadPageEntry(&pageTable[index + 1])));
+             break;
+ 
+         case 1:
+             /* One page will remain.  Convert the node to a single node and
+             ** advance the index. */
+-            pageTable[index] = (pageTable[index + 1] << 8) | gcvMMU_SINGLE;
++            _WritePageEntry(&pageTable[index], (_ReadPageEntry(&pageTable[index + 1]) << 8) | gcvMMU_SINGLE);
+             index ++;
+             break;
+ 
+         default:
+             /* Enough pages remain for a new node.  However, we will just adjust
+             ** the size of the current node and advance the index. */
+-            pageTable[index] = (left << 8) | gcvMMU_FREE;
++            _WritePageEntry(&pageTable[index], (left << 8) | gcvMMU_FREE);
+             index += left;
+             break;
+         }
+@@ -1232,35 +1265,32 @@ _FreePages(
+ #if gcdMMU_CLEAR_VALUE
+     if (Mmu->hardware->mmuVersion == 0)
+     {
+-        gctUINT32 i;
+-
+-        for (i = 0; i < PageCount; ++i)
+-        {
+-            pageTable[i] = gcdMMU_CLEAR_VALUE;
+-        }
++        _FillPageTable(pageTable, PageCount, gcdMMU_CLEAR_VALUE);
+     }
+ #endif
+ 
+     if (PageCount == 1)
+     {
+         /* Single page node. */
+-        pageTable[0] = (~((1U<<8)-1)) | gcvMMU_SINGLE
++        _WritePageEntry(pageTable,
++                        (~((1U<<8)-1)) | gcvMMU_SINGLE
+ #if gcdUSE_MMU_EXCEPTION
+-                     /* Enable exception */
+-                     | (1 << 1)
++                        /* Enable exception */
++                        | 1 << 1
+ #endif
+-                     ;
++                        );
+     }
+     else
+     {
+         /* Mark the node as free. */
+-        pageTable[0] = (PageCount << 8) | gcvMMU_FREE
++        _WritePageEntry(pageTable,
++                        (PageCount << 8) | gcvMMU_FREE
+ #if gcdUSE_MMU_EXCEPTION
+-                     /* Enable exception */
+-                     | (1 << 1)
++                        /* Enable exception */
++                        | 1 << 1
+ #endif
+-                     ;
+-        pageTable[1] = ~0U;
++                       );
++        _WritePageEntry(pageTable + 1, ~0U);
+ 
+ #if gcdUSE_MMU_EXCEPTION
+         /* Enable exception */
+@@ -1509,12 +1539,8 @@ gckMMU_SetPage(
+         data = _SetPage(PageAddress);
+     }
+ 
+-    if (Mmu->hardware->bigEndian)
+-    {
+-        data = gcmSWAB32(data);
+-    }
++    _WritePageEntry(PageEntry, data);
+ 
+-    *PageEntry = data;
+ #if gcdMIRROR_PAGETABLE
+     for (i = 0; i < mirrorPageTable->reference; i++)
+     {
+@@ -1526,11 +1552,11 @@ gckMMU_SetPage(
+ 
+             if (mmu->hardware->mmuVersion == 0)
+             {
+-                *pageEntry = PageAddress;
++                _WritePageEntry(pageEntry, PageAddress);
+             }
+             else
+             {
+-                *pageEntry = _SetPage(PageAddress);
++                _WritePageEntry(pageEntry, _SetPage(PageAddress));
+             }
+         }
+ 
+@@ -1734,7 +1760,7 @@ gckMMU_DumpPageTableEntry(
+               * gcdMMU_STLB_4K_ENTRY_NUM
+               + stlb;
+ 
+-        gcmkPRINT("    Page table entry = 0x%08X", pageTable[index]);
++        gcmkPRINT("    Page table entry = 0x%08X", _ReadPageEntry(pageTable + index));
+     }
+ 
+     gcmkFOOTER_NO();
+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 d49aa64..8a442a2 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
+@@ -1027,7 +1027,8 @@ gckVIDMEM_AllocateLinear(
+     )
+     {
+         /* The left memory is for small memory.*/
+-        gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
++        status = gcvSTATUS_OUT_OF_MEMORY;
++        goto OnError;
+     }
+ #endif
+ 
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h
+index 496276e..06eea79 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h
+@@ -227,7 +227,8 @@ gcoOS_GetDisplayInfoEx(
+     );
+ 
+ gceSTATUS
+-gcoOS_GetNextDisplayInfoEx(
++gcoOS_GetNextDisplayInfoExByIndex(
++    IN gctINT Index,
+     IN HALNativeDisplayType Display,
+     IN HALNativeWindowType Window,
+     IN gctUINT DisplayInfoSize,
+@@ -274,15 +275,15 @@ gcoOS_SetDisplayVirtualEx(
+ 
+ gceSTATUS
+ gcoOS_SetSwapInterval(
+-	IN HALNativeDisplayType Display,
+-	IN gctINT Interval
++    IN HALNativeDisplayType Display,
++    IN gctINT Interval
+ );
+ 
+ gceSTATUS
+ gcoOS_GetSwapInterval(
+-	IN HALNativeDisplayType Display,
+-	IN gctINT_PTR Min,
+-	IN gctINT_PTR Max
++    IN HALNativeDisplayType Display,
++    IN gctINT_PTR Min,
++    IN gctINT_PTR Max
+ );
+ 
+ gceSTATUS
+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 d441d1d..249b61b 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
+@@ -1430,6 +1430,16 @@ typedef enum _gceTEXTURE_FACE
+ }
+ gceTEXTURE_FACE;
+ 
++#if gcdFORCE_MIPMAP
++typedef enum
++{
++    gcvForceMipDisabled  = 0,
++    gcvForceMipEnable    = 1,
++    gcvForceMipGenerated = 2,
++    gcvForceMipNever     = 3,
++}gceFORCE_MIPMAP;
++#endif
++
+ typedef struct _gcsTEXTURE
+ {
+     /* Addressing modes. */
+@@ -1446,6 +1456,10 @@ typedef struct _gcsTEXTURE
+     gceTEXTURE_FILTER           mipFilter;
+     gctUINT                     anisoFilter;
+     gctBOOL                     forceTopLevel;
++    gctBOOL                     autoMipmap;
++#if gcdFORCE_MIPMAP
++    gceFORCE_MIPMAP             forceMipmap;
++#endif
+     /* Level of detail. */
+     gctFIXED_POINT              lodBias;
+     gctFIXED_POINT              lodMin;
+@@ -1479,7 +1493,18 @@ gceSTATUS
+ gcoTEXTURE_Destroy(
+     IN gcoTEXTURE Texture
+     );
++#if gcdFORCE_MIPMAP
++gceSTATUS
++gcoTEXTURE_DestroyForceMipmap(
++    IN gcoTEXTURE Texture
++    );
+ 
++gceSTATUS
++gcoTEXTURE_GetMipLevels(
++    IN gcoTEXTURE Texture,
++    OUT gctINT * levels
++    );
++#endif
+ /* Replace a mipmap in gcoTEXTURE object. */
+ gceSTATUS
+ gcoTEXTURE_ReplaceMipMap(
+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 86e9133..afe83d0 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
+@@ -114,6 +114,30 @@
+ #define COMMAND_PROCESSOR_VERSION               1
+ 
+ /*
++    gcdDUMP_KEY
++
++        Set this to a string that appears in 'cat /proc/<pid>/cmdline'. E.g. 'camera'.
++        HAL will create dumps for the processes matching this key.
++*/
++#ifndef gcdDUMP_KEY
++#   define gcdDUMP_KEY                          "process"
++#endif
++
++/*
++    gcdDUMP_PATH
++
++        The dump file location. Some processes cannot write to the sdcard.
++        Try apps' data dir, e.g. /data/data/com.android.launcher
++*/
++#ifndef gcdDUMP_PATH
++#if defined(ANDROID)
++#   define gcdDUMP_PATH                         "/mnt/sdcard/"
++#else
++#   define gcdDUMP_PATH                         "./"
++#endif
++#endif
++
++/*
+     gcdDUMP
+ 
+         When set to 1, a dump of all states and memory uploads, as well as other
+@@ -342,6 +366,17 @@
+ #endif
+ 
+ /*
++    gcdUSER_HEAP_ALLOCATOR
++
++        Set to 1 to enable user mode heap allocator for fast memory allocation
++        and destroying. Otherwise, memory allocation/destroying in user mode
++        will be directly managed by system. Only for linux for now.
++*/
++#ifndef gcdUSER_HEAP_ALLOCATOR
++#   define gcdUSER_HEAP_ALLOCATOR               1
++#endif
++
++/*
+     gcdHEAP_SIZE
+ 
+         Set the allocation size for the internal heaps.  Each time a heap is
+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 2881604..808fde0 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     1210
++#define gcvVERSION_BUILD     4651
+ 
+ #define gcvVERSION_DATE      __DATE__
+ 
+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 4e3819c..2ed3d0e 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
+@@ -663,7 +663,7 @@ static int drv_mmap(
+ 
+ #if !gcdPAGED_MEMORY_CACHEABLE
+     vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
+-    vma->vm_flags    |= VM_IO | VM_DONTCOPY | VM_DONTEXPAND;
++    vma->vm_flags    |= gcdVM_FLAGS;
+ #endif
+     vma->vm_pgoff     = 0;
+ 
+diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h
+index 9c0bcd5..3c148f6 100644
+--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h
++++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.h
+@@ -73,6 +73,12 @@
+ 
+ #define GetPageCount(size, offset) 	((((size) + ((offset) & ~PAGE_CACHE_MASK)) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT)
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION (3,7,0)
++#define gcdVM_FLAGS (VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_DONTDUMP)
++#else
++#define gcdVM_FLAGS (VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_RESERVED)
++#endif
++
+ static inline gctINT
+ GetOrder(
+ 	IN gctINT numPages
+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 c07ded8..9c2bae6 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
+@@ -869,6 +869,60 @@ _UnmapUserLogical(
+ #endif
+ }
+ 
++gceSTATUS
++_QueryProcessPageTable(
++    IN gctPOINTER Logical,
++    OUT gctUINT32 * Address
++    )
++{
++    spinlock_t *lock;
++    gctUINTPTR_T logical = (gctUINTPTR_T)Logical;
++    pgd_t *pgd;
++    pud_t *pud;
++    pmd_t *pmd;
++    pte_t *pte;
++
++    if (!current->mm)
++    {
++        return gcvSTATUS_NOT_FOUND;
++    }
++
++    pgd = pgd_offset(current->mm, logical);
++    if (pgd_none(*pgd) || pgd_bad(*pgd))
++    {
++        return gcvSTATUS_NOT_FOUND;
++    }
++
++    pud = pud_offset(pgd, logical);
++    if (pud_none(*pud) || pud_bad(*pud))
++    {
++        return gcvSTATUS_NOT_FOUND;
++    }
++
++    pmd = pmd_offset(pud, logical);
++    if (pmd_none(*pmd) || pmd_bad(*pmd))
++    {
++        return gcvSTATUS_NOT_FOUND;
++    }
++
++    pte = pte_offset_map_lock(current->mm, pmd, logical, &lock);
++    if (!pte)
++    {
++        return gcvSTATUS_NOT_FOUND;
++    }
++
++    if (!pte_present(*pte))
++    {
++        pte_unmap_unlock(pte, lock);
++        return gcvSTATUS_NOT_FOUND;
++    }
++
++    *Address = (pte_pfn(*pte) << PAGE_SHIFT) | (logical & ~PAGE_MASK);
++    pte_unmap_unlock(pte, lock);
++
++    return gcvSTATUS_OK;
++}
++
+ /*******************************************************************************
+ **
+ **  gckOS_Construct
+@@ -1106,6 +1160,9 @@ _CreateKernelVirtualMapping(
+                     numPages,
+                     0,
+                     PAGE_KERNEL);
++
++        /* Trigger a page fault. */
++        memset(addr, 0, numPages * PAGE_SIZE);
+     }
+ #else
+     struct page ** pages;
+@@ -1136,6 +1193,9 @@ _CreateKernelVirtualMapping(
+     /* ioremap() can't work on system memory since 2.6.38. */
+     addr = vmap(pages, numPages, 0, gcmkNONPAGED_MEMROY_PROT(PAGE_KERNEL));
+ 
++    /* Trigger a page fault. */
++    memset(addr, 0, numPages * PAGE_SIZE);
++
+     if (free)
+     {
+         kfree(pages);
+@@ -1540,7 +1600,7 @@ gckOS_MapMemory(
+ #else
+ #if !gcdPAGED_MEMORY_CACHEABLE
+         mdlMap->vma->vm_page_prot = gcmkPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
+-        mdlMap->vma->vm_flags |= VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_RESERVED;
++        mdlMap->vma->vm_flags |= gcdVM_FLAGS;
+ #   endif
+         mdlMap->vma->vm_pgoff = 0;
+ 
+@@ -1987,7 +2047,7 @@ gckOS_AllocateNonPagedMemory(
+         }
+ #else
+         mdlMap->vma->vm_page_prot = gcmkNONPAGED_MEMROY_PROT(mdlMap->vma->vm_page_prot);
+-        mdlMap->vma->vm_flags |= VM_IO | VM_DONTCOPY | VM_DONTEXPAND | VM_RESERVED;
++        mdlMap->vma->vm_flags |= gcdVM_FLAGS;
+         mdlMap->vma->vm_pgoff = 0;
+ 
+         if (remap_pfn_range(mdlMap->vma,
+@@ -2367,12 +2427,18 @@ gckOS_GetPhysicalAddress(
+     gcmkVERIFY_OBJECT(Os, gcvOBJ_OS);
+     gcmkVERIFY_ARGUMENT(Address != gcvNULL);
+ 
+-    /* Get current process ID. */
+-    processID = _GetProcessID();
++    /* Query page table of current process first. */
++    status = _QueryProcessPageTable(Logical, Address);
+ 
+-    /* Route through other function. */
+-    gcmkONERROR(
+-        gckOS_GetPhysicalAddressProcess(Os, Logical, processID, Address));
++    if (gcmIS_ERROR(status))
++    {
++        /* Get current process ID. */
++        processID = _GetProcessID();
++
++        /* Route through other function. */
++        gcmkONERROR(
++            gckOS_GetPhysicalAddressProcess(Os, Logical, processID, Address));
++    }
+ 
+     /* Success. */
+     gcmkFOOTER_ARG("*Address=0x%08x", *Address);
+@@ -4139,7 +4205,7 @@ gckOS_LockPages(
+             return gcvSTATUS_OUT_OF_RESOURCES;
+         }
+ 
+-        mdlMap->vma->vm_flags |= VM_RESERVED;
++        mdlMap->vma->vm_flags |= gcdVM_FLAGS;
+ #if !gcdPAGED_MEMORY_CACHEABLE
+         if (Cacheable == gcvFALSE)
+         {
+-- 
+1.8.3.2
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch b/recipes-kernel/linux/linux-unico-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
new file mode 100644
index 0000000..abc02c9
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
@@ -0,0 +1,43 @@
+From 503daf4789dd23e4dc1e16c256de0c163fc2bf87 Mon Sep 17 00:00:00 2001
+From: Markus Trippelsdorf <markus@trippelsdorf.de>
+Date: Wed, 4 Apr 2012 10:45:27 +0200
+Subject: [PATCH] perf tools: Fix getrusage() related build failure on glibc
+ trunk
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+Organization: O.S. Systems Software LTDA.
+
+On a system running glibc trunk perf doesn't build:
+
+    CC builtin-sched.o
+builtin-sched.c: In function ‘get_cpu_usage_nsec_parent’: builtin-sched.c:399:16: error: storage size of ‘ru’ isn’t known builtin-sched.c:403:2: error: implicit declaration of function ‘getrusage’ [-Werror=implicit-function-declaration]
+    [...]
+
+Fix it by including sys/resource.h.
+
+Upstream-Status: Pending
+
+Signed-off-by: Markus Trippelsdorf <markus@trippelsdorf.de>
+Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Link: http://lkml.kernel.org/r/20120404084527.GA294@x4
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+---
+ tools/perf/builtin-sched.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
+index dcfe887..3632c2f 100644
+--- a/tools/perf/builtin-sched.c
++++ b/tools/perf/builtin-sched.c
+@@ -14,6 +14,7 @@
+ #include "util/debug.h"
+ 
+ #include <sys/prctl.h>
++#include <sys/resource.h>
+ 
+ #include <semaphore.h>
+ #include <pthread.h>
+-- 
+1.8.4.rc3
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch b/recipes-kernel/linux/linux-unico-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
new file mode 100644
index 0000000..4c31e74
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
@@ -0,0 +1,259 @@
+From 2235b85f1c76d98b5f1e160cbd0a61a84c15e125 Mon Sep 17 00:00:00 2001
+From: Ivan Djelic <ivan.djelic@parrot.com>
+Date: Wed, 6 Mar 2013 20:09:27 +0100
+Subject: [PATCH] ARM: 7668/1: fix memset-related crashes caused by recent GCC
+ (4.7.2) optimizations
+Organization: O.S. Systems Software LTDA.
+
+Recent GCC versions (e.g. GCC-4.7.2) perform optimizations based on
+assumptions about the implementation of memset and similar functions.
+The current ARM optimized memset code does not return the value of
+its first argument, as is usually expected from standard implementations.
+
+For instance in the following function:
+
+void debug_mutex_lock_common(struct mutex *lock, struct mutex_waiter *waiter)
+{
+	memset(waiter, MUTEX_DEBUG_INIT, sizeof(*waiter));
+	waiter->magic = waiter;
+	INIT_LIST_HEAD(&waiter->list);
+}
+
+compiled as:
+
+800554d0 <debug_mutex_lock_common>:
+800554d0:       e92d4008        push    {r3, lr}
+800554d4:       e1a00001        mov     r0, r1
+800554d8:       e3a02010        mov     r2, #16 ; 0x10
+800554dc:       e3a01011        mov     r1, #17 ; 0x11
+800554e0:       eb04426e        bl      80165ea0 <memset>
+800554e4:       e1a03000        mov     r3, r0
+800554e8:       e583000c        str     r0, [r3, #12]
+800554ec:       e5830000        str     r0, [r3]
+800554f0:       e5830004        str     r0, [r3, #4]
+800554f4:       e8bd8008        pop     {r3, pc}
+
+GCC assumes memset returns the value of pointer 'waiter' in register r0; causing
+register/memory corruptions.
+
+This patch fixes the return value of the assembly version of memset.
+It adds a 'mov' instruction and merges an additional load+store into
+existing load/store instructions.
+For ease of review, here is a breakdown of the patch into 4 simple steps:
+
+Step 1
+======
+Perform the following substitutions:
+ip -> r8, then
+r0 -> ip,
+and insert 'mov ip, r0' as the first statement of the function.
+At this point, we have a memset() implementation returning the proper result,
+but corrupting r8 on some paths (the ones that were using ip).
+
+Step 2
+======
+Make sure r8 is saved and restored when (! CALGN(1)+0) == 1:
+
+save r8:
+-       str     lr, [sp, #-4]!
++       stmfd   sp!, {r8, lr}
+
+and restore r8 on both exit paths:
+-       ldmeqfd sp!, {pc}               @ Now <64 bytes to go.
++       ldmeqfd sp!, {r8, pc}           @ Now <64 bytes to go.
+(...)
+        tst     r2, #16
+        stmneia ip!, {r1, r3, r8, lr}
+-       ldr     lr, [sp], #4
++       ldmfd   sp!, {r8, lr}
+
+Step 3
+======
+Make sure r8 is saved and restored when (! CALGN(1)+0) == 0:
+
+save r8:
+-       stmfd   sp!, {r4-r7, lr}
++       stmfd   sp!, {r4-r8, lr}
+
+and restore r8 on both exit paths:
+        bgt     3b
+-       ldmeqfd sp!, {r4-r7, pc}
++       ldmeqfd sp!, {r4-r8, pc}
+(...)
+        tst     r2, #16
+        stmneia ip!, {r4-r7}
+-       ldmfd   sp!, {r4-r7, lr}
++       ldmfd   sp!, {r4-r8, lr}
+
+Step 4
+======
+Rewrite register list "r4-r7, r8" as "r4-r8".
+
+Upstream-Status: Pending
+
+Signed-off-by: Ivan Djelic <ivan.djelic@parrot.com>
+Reviewed-by: Nicolas Pitre <nico@linaro.org>
+Signed-off-by: Dirk Behme <dirk.behme@gmail.com>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+(cherry picked from commit 455bd4c430b0c0a361f38e8658a0d6cb469942b5)
+---
+ arch/arm/lib/memset.S | 85 ++++++++++++++++++++++++++-------------------------
+ 1 file changed, 44 insertions(+), 41 deletions(-)
+
+diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
+index 650d592..d912e73 100644
+--- a/arch/arm/lib/memset.S
++++ b/arch/arm/lib/memset.S
+@@ -19,9 +19,9 @@
+ 1:	subs	r2, r2, #4		@ 1 do we have enough
+ 	blt	5f			@ 1 bytes to align with?
+ 	cmp	r3, #2			@ 1
+-	strltb	r1, [r0], #1		@ 1
+-	strleb	r1, [r0], #1		@ 1
+-	strb	r1, [r0], #1		@ 1
++	strltb	r1, [ip], #1		@ 1
++	strleb	r1, [ip], #1		@ 1
++	strb	r1, [ip], #1		@ 1
+ 	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))
+ /*
+  * The pointer is now aligned and the length is adjusted.  Try doing the
+@@ -29,10 +29,14 @@
+  */
+ 
+ ENTRY(memset)
+-	ands	r3, r0, #3		@ 1 unaligned?
++/*
++ * Preserve the contents of r0 for the return value.
++ */
++	mov	ip, r0
++	ands	r3, ip, #3		@ 1 unaligned?
+ 	bne	1b			@ 1
+ /*
+- * we know that the pointer in r0 is aligned to a word boundary.
++ * we know that the pointer in ip is aligned to a word boundary.
+  */
+ 	orr	r1, r1, r1, lsl #8
+ 	orr	r1, r1, r1, lsl #16
+@@ -43,29 +47,28 @@ ENTRY(memset)
+ #if ! CALGN(1)+0
+ 
+ /*
+- * We need an extra register for this loop - save the return address and
+- * use the LR
++ * We need 2 extra registers for this loop - use r8 and the LR
+  */
+-	str	lr, [sp, #-4]!
+-	mov	ip, r1
++	stmfd	sp!, {r8, lr}
++	mov	r8, r1
+ 	mov	lr, r1
+ 
+ 2:	subs	r2, r2, #64
+-	stmgeia	r0!, {r1, r3, ip, lr}	@ 64 bytes at a time.
+-	stmgeia	r0!, {r1, r3, ip, lr}
+-	stmgeia	r0!, {r1, r3, ip, lr}
+-	stmgeia	r0!, {r1, r3, ip, lr}
++	stmgeia	ip!, {r1, r3, r8, lr}	@ 64 bytes at a time.
++	stmgeia	ip!, {r1, r3, r8, lr}
++	stmgeia	ip!, {r1, r3, r8, lr}
++	stmgeia	ip!, {r1, r3, r8, lr}
+ 	bgt	2b
+-	ldmeqfd	sp!, {pc}		@ Now <64 bytes to go.
++	ldmeqfd	sp!, {r8, pc}		@ Now <64 bytes to go.
+ /*
+  * No need to correct the count; we're only testing bits from now on
+  */
+ 	tst	r2, #32
+-	stmneia	r0!, {r1, r3, ip, lr}
+-	stmneia	r0!, {r1, r3, ip, lr}
++	stmneia	ip!, {r1, r3, r8, lr}
++	stmneia	ip!, {r1, r3, r8, lr}
+ 	tst	r2, #16
+-	stmneia	r0!, {r1, r3, ip, lr}
+-	ldr	lr, [sp], #4
++	stmneia	ip!, {r1, r3, r8, lr}
++	ldmfd	sp!, {r8, lr}
+ 
+ #else
+ 
+@@ -74,54 +77,54 @@ ENTRY(memset)
+  * whole cache lines at once.
+  */
+ 
+-	stmfd	sp!, {r4-r7, lr}
++	stmfd	sp!, {r4-r8, lr}
+ 	mov	r4, r1
+ 	mov	r5, r1
+ 	mov	r6, r1
+ 	mov	r7, r1
+-	mov	ip, r1
++	mov	r8, r1
+ 	mov	lr, r1
+ 
+ 	cmp	r2, #96
+-	tstgt	r0, #31
++	tstgt	ip, #31
+ 	ble	3f
+ 
+-	and	ip, r0, #31
+-	rsb	ip, ip, #32
+-	sub	r2, r2, ip
+-	movs	ip, ip, lsl #(32 - 4)
+-	stmcsia	r0!, {r4, r5, r6, r7}
+-	stmmiia	r0!, {r4, r5}
+-	tst	ip, #(1 << 30)
+-	mov	ip, r1
+-	strne	r1, [r0], #4
++	and	r8, ip, #31
++	rsb	r8, r8, #32
++	sub	r2, r2, r8
++	movs	r8, r8, lsl #(32 - 4)
++	stmcsia	ip!, {r4, r5, r6, r7}
++	stmmiia	ip!, {r4, r5}
++	tst	r8, #(1 << 30)
++	mov	r8, r1
++	strne	r1, [ip], #4
+ 
+ 3:	subs	r2, r2, #64
+-	stmgeia	r0!, {r1, r3-r7, ip, lr}
+-	stmgeia	r0!, {r1, r3-r7, ip, lr}
++	stmgeia	ip!, {r1, r3-r8, lr}
++	stmgeia	ip!, {r1, r3-r8, lr}
+ 	bgt	3b
+-	ldmeqfd	sp!, {r4-r7, pc}
++	ldmeqfd	sp!, {r4-r8, pc}
+ 
+ 	tst	r2, #32
+-	stmneia	r0!, {r1, r3-r7, ip, lr}
++	stmneia	ip!, {r1, r3-r8, lr}
+ 	tst	r2, #16
+-	stmneia	r0!, {r4-r7}
+-	ldmfd	sp!, {r4-r7, lr}
++	stmneia	ip!, {r4-r7}
++	ldmfd	sp!, {r4-r8, lr}
+ 
+ #endif
+ 
+ 4:	tst	r2, #8
+-	stmneia	r0!, {r1, r3}
++	stmneia	ip!, {r1, r3}
+ 	tst	r2, #4
+-	strne	r1, [r0], #4
++	strne	r1, [ip], #4
+ /*
+  * When we get here, we've got less than 4 bytes to zero.  We
+  * may have an unaligned pointer as well.
+  */
+ 5:	tst	r2, #2
+-	strneb	r1, [r0], #1
+-	strneb	r1, [r0], #1
++	strneb	r1, [ip], #1
++	strneb	r1, [ip], #1
+ 	tst	r2, #1
+-	strneb	r1, [r0], #1
++	strneb	r1, [ip], #1
+ 	mov	pc, lr
+ ENDPROC(memset)
+-- 
+1.8.4.rc3
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0002-ENGR00265465-gpu-Add-global-value-for-minimum-3D-clo.patch b/recipes-kernel/linux/linux-unico-3.0.35/0002-ENGR00265465-gpu-Add-global-value-for-minimum-3D-clo.patch
new file mode 100644
index 0000000..5725ab7
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0002-ENGR00265465-gpu-Add-global-value-for-minimum-3D-clo.patch
@@ -0,0 +1,62 @@
+From 2df4dba8faa9a781a5a1c6c09d646d2b692c9a0c Mon Sep 17 00:00:00 2001
+From: Loren Huang <b02279@freescale.com>
+Date: Tue, 4 Jun 2013 15:08:15 +0800
+Subject: [PATCH 2/6] ENGR00265465 gpu:Add global value for minimum 3D clock
+ export
+
+Add global value gpu3DMinClock so that minimum 3D clock can be change by user.
+When gpu min clock is too low, it may cause IPU starvation issue in certain case.
+Use echo x > /sys/module/galcore/parameters/gpu3DMinClock to change it.
+
+Cherry-pick from 3.0.35 branch.
+
+Upstream-Status: Backport [3.5.7-1.0.0]
+
+Signed-off-by: Loren Huang <b02279@freescale.com>
+Acked-by: Lily Zhang
+---
+ drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | 6 +++++-
+ drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c    | 3 +++
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+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 3829999..ebd36fe 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
+@@ -36,6 +36,7 @@ typedef struct _gcsiDEBUG_REGISTERS
+ }
+ gcsiDEBUG_REGISTERS;
+ 
++extern int gpu3DMinClock;
+ /******************************************************************************\
+ ********************************* Support Code *********************************
+ \******************************************************************************/
+@@ -4630,7 +4631,10 @@ gckHARDWARE_GetFscaleValue(
+     )
+ {
+     *FscaleValue = Hardware->powerOnFscaleVal;
+-    *MinFscaleValue = 1;
++    if ((gpu3DMinClock > 0) && (gpu3DMinClock <= 64) && (Hardware->core == gcvCORE_MAJOR))
++        *MinFscaleValue = gpu3DMinClock;
++    else
++        *MinFscaleValue = 1;
+     *MaxFscaleValue = 64;
+ 
+     return gcvSTATUS_OK;
+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 2ed3d0e..64cace1 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
+@@ -146,6 +146,9 @@ module_param(logFileSize,uint, 0644);
+ static int showArgs = 0;
+ module_param(showArgs, int, 0644);
+ 
++int gpu3DMinClock = 0;
++module_param(gpu3DMinClock, int, 0644);
++
+ #if ENABLE_GPU_CLOCK_BY_DRIVER
+     unsigned long coreClock = 156000000;
+     module_param(coreClock, ulong, 0644);
+-- 
+1.8.3.2
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch b/recipes-kernel/linux/linux-unico-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
new file mode 100644
index 0000000..b8d6f53
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
@@ -0,0 +1,87 @@
+From 2ba23fa6c4128febaaf57fe184420a7111caa237 Mon Sep 17 00:00:00 2001
+From: Nicolas Pitre <nicolas.pitre@linaro.org>
+Date: Tue, 12 Mar 2013 13:00:42 +0100
+Subject: [PATCH] ARM: 7670/1: fix the memset fix
+Organization: O.S. Systems Software LTDA.
+
+Commit 455bd4c430b0 ("ARM: 7668/1: fix memset-related crashes caused by
+recent GCC (4.7.2) optimizations") attempted to fix a compliance issue
+with the memset return value.  However the memset itself became broken
+by that patch for misaligned pointers.
+
+This fixes the above by branching over the entry code from the
+misaligned fixup code to avoid reloading the original pointer.
+
+Also, because the function entry alignment is wrong in the Thumb mode
+compilation, that fixup code is moved to the end.
+
+While at it, the entry instructions are slightly reworked to help dual
+issue pipelines.
+
+Upstream-Status: Pending
+
+Signed-off-by: Nicolas Pitre <nico@linaro.org>
+Tested-by: Alexander Holler <holler@ahsoftware.de>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+(cherry picked from commit 418df63adac56841ef6b0f1fcf435bc64d4ed177)
+---
+ arch/arm/lib/memset.S | 33 +++++++++++++--------------------
+ 1 file changed, 13 insertions(+), 20 deletions(-)
+
+diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S
+index d912e73..94b0650 100644
+--- a/arch/arm/lib/memset.S
++++ b/arch/arm/lib/memset.S
+@@ -14,31 +14,15 @@
+ 
+ 	.text
+ 	.align	5
+-	.word	0
+-
+-1:	subs	r2, r2, #4		@ 1 do we have enough
+-	blt	5f			@ 1 bytes to align with?
+-	cmp	r3, #2			@ 1
+-	strltb	r1, [ip], #1		@ 1
+-	strleb	r1, [ip], #1		@ 1
+-	strb	r1, [ip], #1		@ 1
+-	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))
+-/*
+- * The pointer is now aligned and the length is adjusted.  Try doing the
+- * memset again.
+- */
+ 
+ ENTRY(memset)
+-/*
+- * Preserve the contents of r0 for the return value.
+- */
+-	mov	ip, r0
+-	ands	r3, ip, #3		@ 1 unaligned?
+-	bne	1b			@ 1
++	ands	r3, r0, #3		@ 1 unaligned?
++	mov	ip, r0			@ preserve r0 as return value
++	bne	6f			@ 1
+ /*
+  * we know that the pointer in ip is aligned to a word boundary.
+  */
+-	orr	r1, r1, r1, lsl #8
++1:	orr	r1, r1, r1, lsl #8
+ 	orr	r1, r1, r1, lsl #16
+ 	mov	r3, r1
+ 	cmp	r2, #16
+@@ -127,4 +111,13 @@ ENTRY(memset)
+ 	tst	r2, #1
+ 	strneb	r1, [ip], #1
+ 	mov	pc, lr
++
++6:	subs	r2, r2, #4		@ 1 do we have enough
++	blt	5b			@ 1 bytes to align with?
++	cmp	r3, #2			@ 1
++	strltb	r1, [ip], #1		@ 1
++	strleb	r1, [ip], #1		@ 1
++	strb	r1, [ip], #1		@ 1
++	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))
++	b	1b
+ ENDPROC(memset)
+-- 
+1.8.4.rc3
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch b/recipes-kernel/linux/linux-unico-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch
new file mode 100644
index 0000000..23a415d
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch
@@ -0,0 +1,53 @@
+From 1579de9397783ab5321c80f1e76661653ef38ccd Mon Sep 17 00:00:00 2001
+From: Robin Gong <b38343@freescale.com>
+Date: Thu, 9 May 2013 11:45:55 +0800
+Subject: [PATCH 3/6] ENGR00261814-4 gpu: use new PU power on/off interface
+
+use new PU power on/off interface in GPU driver
+
+Upstream-Status: Backport [3.5.7-1.0.0]
+
+Signed-off-by: Robin Gong <b38343@freescale.com>
+Acked-by: Lily Zhang
+---
+ .../mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c   | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+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 9c2bae6..dfbc699 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
+@@ -6819,8 +6819,13 @@ gckOS_SetGPUPower(
+     }
+ 	if((Power == gcvTRUE) && (oldPowerState == gcvFALSE))
+ 	{
+-		if(!IS_ERR(Os->device->gpu_regulator))
+-            regulator_enable(Os->device->gpu_regulator);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)		
++	    if(!IS_ERR(Os->device->gpu_regulator))
++            	regulator_enable(Os->device->gpu_regulator);
++#else
++	    imx_gpc_power_up_pu(true);
++#endif
++
+ #ifdef CONFIG_PM
+ 		pm_runtime_get_sync(Os->device->pmdev);
+ #endif
+@@ -6930,8 +6935,13 @@ gckOS_SetGPUPower(
+ #ifdef CONFIG_PM
+ 		pm_runtime_put_sync(Os->device->pmdev);
+ #endif
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)		
+ 		if(!IS_ERR(Os->device->gpu_regulator))
+-            regulator_disable(Os->device->gpu_regulator);
++			regulator_disable(Os->device->gpu_regulator);
++#else
++    		imx_gpc_power_up_pu(false);
++#endif
+ 	}
+     /* TODO: Put your code here. */
+     gcmkFOOTER_NO();
+-- 
+1.8.3.2
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0004-ENGR00264288-1-GPU-Integrate-4.6.9p12-release-kernel.patch b/recipes-kernel/linux/linux-unico-3.0.35/0004-ENGR00264288-1-GPU-Integrate-4.6.9p12-release-kernel.patch
new file mode 100644
index 0000000..08ca88a
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0004-ENGR00264288-1-GPU-Integrate-4.6.9p12-release-kernel.patch
@@ -0,0 +1,2006 @@
+From c090a0238315094d245de2503b6f9a5bce0bda03 Mon Sep 17 00:00:00 2001
+From: Loren Huang <b02279@freescale.com>
+Date: Mon, 27 May 2013 17:45:48 +0800
+Subject: [PATCH 4/6] ENGR00264288-1 [GPU]Integrate 4.6.9p12 release kernel
+ part code
+
+Integrate 4.6.9p12 release kernel part code.
+Cherry-pick from 3.0.35 branch.
+
+Upstream-Status: Backport [3.5.7-1.0.0]
+
+Signed-off-by: Loren Huang <b02279@freescale.com>
+Acked-by: Lily Zhang
+---
+ .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.c   |  63 +++-
+ .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.h   |   2 +
+ .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c  | 174 ++++++++---
+ .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h  |   2 +
+ drivers/mxc/gpu-viv/config                         |   1 -
+ drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c     | 329 +++++++--------------
+ .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c |   6 +-
+ .../gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c  |  14 +-
+ drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c  |   6 +-
+ drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 119 +++++++-
+ .../hal/kernel/gc_hal_kernel_video_memory.c        |   3 +
+ drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h        |   6 +
+ drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h   |  34 +--
+ .../mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h   |  20 +-
+ drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h |  35 ++-
+ drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h |  62 +---
+ drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h   |   7 -
+ .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h    |  31 +-
+ .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h    |   2 +-
+ drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h     |   6 +
+ .../hal/os/linux/kernel/gc_hal_kernel_device.c     |  13 +
+ .../hal/os/linux/kernel/gc_hal_kernel_device.h     |   1 +
+ .../hal/os/linux/kernel/gc_hal_kernel_driver.c     |  10 +-
+ .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c |  74 +++--
+ .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h |   3 +
+ 25 files changed, 574 insertions(+), 449 deletions(-)
+
+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 4a6010d..70c2cd6 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,7 +217,6 @@ _IdentifyHardware(
+     return status;
+ }
+ 
+-#if gcdPOWER_MANAGEMENT
+ static gctTHREADFUNCRESULT gctTHREADFUNCTYPE
+ _TimeIdleThread(
+     gctTHREADFUNCPARAMETER ThreadParameter
+@@ -262,8 +261,6 @@ _TimeIdleThread(
+     }
+     return 0;
+ }
+-#endif
+-
+ 
+ /******************************************************************************\
+ ****************************** gckVGHARDWARE API code *****************************
+@@ -309,6 +306,7 @@ gckVGHARDWARE_Construct(
+     do
+     {
+         gcmkERR_BREAK(gckOS_SetGPUPower(Os, gcvCORE_VG, gcvTRUE, gcvTRUE));
++
+         status = _ResetGPU(Os);
+ 
+         if (status != gcvSTATUS_OK)
+@@ -368,14 +366,17 @@ gckVGHARDWARE_Construct(
+ 
+         gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex));
+         gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvFALSE, &hardware->idleSignal));
+-#if gcdPOWER_MANAGEMENT
++
++        /* Enable power management by default. */
++        hardware->powerManagement = gcvTRUE;
++
+         gcmkERR_BREAK(gckOS_StartThread(
+             hardware->os,
+             _TimeIdleThread,
+             hardware,
+             &hardware->timeIdleThread
+             ));
+-#endif
++
+         /* Return pointer to the gckVGHARDWARE object. */
+         *Hardware = hardware;
+ 
+@@ -395,6 +396,8 @@ gckVGHARDWARE_Construct(
+         gcmkVERIFY_OK(gckOS_Free(Os, hardware));
+     }
+ 
++    gcmkVERIFY_OK(gckOS_SetGPUPower(Os, gcvCORE_VG, gcvFALSE, gcvFALSE));
++
+     gcmkFOOTER();
+     /* Return the status. */
+     return status;
+@@ -425,11 +428,10 @@ gckVGHARDWARE_Destroy(
+     /* Verify the arguments. */
+     gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
+ 
+-#if gcdPOWER_MANAGEMENT
+     Hardware->killThread  = gcvTRUE;
+     gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE));
+     gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread));
+-#endif
++
+     /* Mark the object as unknown. */
+     Hardware->object.type = gcvOBJ_UNKNOWN;
+ 
+@@ -1432,7 +1434,6 @@ gckVGHARDWARE_ReadInterrupt(
+     return status;
+ }
+ 
+-#if gcdPOWER_MANAGEMENT
+ static gceSTATUS _CommandStall(
+     gckVGHARDWARE Hardware)
+ {
+@@ -1477,7 +1478,6 @@ static gceSTATUS _CommandStall(
+     /* Return the status. */
+     return status;
+ }
+-#endif
+ 
+ /*******************************************************************************
+ **
+@@ -1500,7 +1500,6 @@ gckVGHARDWARE_SetPowerManagementState(
+     IN gceCHIPPOWERSTATE State
+     )
+ {
+-#if gcdPOWER_MANAGEMENT
+     gceSTATUS status;
+     gckVGCOMMAND command = gcvNULL;
+     gckOS os;
+@@ -1600,6 +1599,12 @@ gckVGHARDWARE_SetPowerManagementState(
+     command = Hardware->kernel->command;
+     gcmkVERIFY_OBJECT(command, gcvOBJ_COMMAND);
+ 
++    if (Hardware->powerManagement == gcvFALSE)
++    {
++        gcmkFOOTER_NO();
++        return gcvSTATUS_OK;
++    }
++
+     /* Start profiler. */
+     gcmkPROFILE_INIT(freq, time);
+ 
+@@ -1914,10 +1919,6 @@ OnError:
+     /* Return the status. */
+     gcmkFOOTER();
+     return status;
+-#else /* gcdPOWER_MANAGEMENT */
+-    /* Do nothing */
+-    return gcvSTATUS_OK;
+-#endif
+ }
+ 
+ /*******************************************************************************
+@@ -1955,6 +1956,40 @@ gckVGHARDWARE_QueryPowerManagementState(
+     return gcvSTATUS_OK;
+ }
+ 
++/*******************************************************************************
++**
++**  gckVGHARDWARE_SetPowerManagement
++**
++**  Configure GPU power management function.
++**  Only used in driver initialization stage.
++**
++**  INPUT:
++**
++**      gckVGHARDWARE Harwdare
++**          Pointer to an gckHARDWARE object.
++**
++**      gctBOOL PowerManagement
++**          Power Mangement State.
++**
++*/
++gceSTATUS
++gckVGHARDWARE_SetPowerManagement(
++    IN gckVGHARDWARE Hardware,
++    IN gctBOOL PowerManagement
++    )
++{
++    gcmkHEADER_ARG("Hardware=0x%x", Hardware);
++
++    /* Verify the arguments. */
++    gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
++
++    Hardware->powerManagement = PowerManagement;
++
++    /* Success. */
++    gcmkFOOTER_NO();
++    return gcvSTATUS_OK;
++}
++
+ gceSTATUS
+ gckVGHARDWARE_SetPowerOffTimeout(
+     IN gckVGHARDWARE  Hardware,
+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 83a603e..16b81ae 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
+@@ -66,6 +66,8 @@ struct _gckVGHARDWARE
+     gctTHREAD                   timeIdleThread;
+     gctBOOL                     killThread;
+     gctPOINTER                  pageTableDirty;
++
++    gctBOOL                     powerManagement;
+ };
+ 
+ #endif /* __gc_hal_kernel_hardware_h_ */
+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 ebd36fe..00f3839 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
+@@ -176,6 +176,7 @@ _IdentifyHardware(
+         Identity->chipMinorFeatures1 = 0;
+         Identity->chipMinorFeatures2 = 0;
+         Identity->chipMinorFeatures3 = 0;
++        Identity->chipMinorFeatures4 = 0;
+     }
+     else
+     {
+@@ -207,13 +208,20 @@ _IdentifyHardware(
+                 gckOS_ReadRegisterEx(Os, Core,
+                                      0x00088,
+                                      &Identity->chipMinorFeatures3));
++
++            /* Read chip minor featuress register #4. */
++            gcmkONERROR(
++                gckOS_ReadRegisterEx(Os, Core,
++                                     0x00094,
++                                     &Identity->chipMinorFeatures4));
+         }
+         else
+         {
+-            /* Chip doesn't has minor features register #1 or 2 or 3. */
++            /* Chip doesn't has minor features register #1 or 2 or 3 or 4. */
+             Identity->chipMinorFeatures1 = 0;
+             Identity->chipMinorFeatures2 = 0;
+             Identity->chipMinorFeatures3 = 0;
++            Identity->chipMinorFeatures4 = 0;
+         }
+     }
+ 
+@@ -234,14 +242,14 @@ _IdentifyHardware(
+ 
+     /* Exception for GC1000, revision 5035 &  GC800, revision 4612 */
+     if (((Identity->chipModel == gcv1000) && ((Identity->chipRevision == 0x5035)
+-                                           || (Identity->chipRevision == 0x5036)))
++                                           || (Identity->chipRevision == 0x5036)
++                                           || (Identity->chipRevision == 0x5037)))
+ 	 || ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4612)))
+     {
+         Identity->superTileMode = 1;
+     }
+ 
+ 
+-
+ 	/* 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))))))))
+     {
+@@ -285,6 +293,10 @@ _IdentifyHardware(
+                    "Identity: chipMinorFeatures3=0x%08X",
+                    Identity->chipMinorFeatures3);
+ 
++    gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
++                   "Identity: chipMinorFeatures4=0x%08X",
++                   Identity->chipMinorFeatures4);
++
+     /***************************************************************************
+     ** Get chip specs.
+     */
+@@ -576,7 +588,6 @@ OnError:
+     return status;
+ }
+ 
+-#if gcdPOWER_MANAGEMENT
+ static gceSTATUS
+ _IsGPUPresent(
+     IN gckHARDWARE Hardware
+@@ -631,7 +642,6 @@ OnError:
+     gcmkFOOTER();
+     return status;
+ }
+-#endif
+ 
+ /******************************************************************************\
+ ****************************** gckHARDWARE API code *****************************
+@@ -708,6 +718,7 @@ gckHARDWARE_Construct(
+ 
+     case gcv300:
+     case gcv320:
++    case gcv420:
+         hardware->type = gcvHARDWARE_2D;
+         /*set outstanding limit*/
+         gcmkONERROR(gckOS_ReadRegisterEx(Os, Core, 0x00414, &axi_ot));
+@@ -795,6 +806,9 @@ gckHARDWARE_Construct(
+     hardware->linkQueue.count = 0;
+ #endif
+ 
++    /* Enable power management by default. */
++    hardware->powerManagement = gcvTRUE;
++
+     /* Return pointer to the gckHARDWARE object. */
+     *Hardware = hardware;
+ 
+@@ -1404,6 +1418,7 @@ gckHARDWARE_QueryChipIdentity(
+     Identity->chipMinorFeatures1 = Hardware->identity.chipMinorFeatures1;
+     Identity->chipMinorFeatures2 = Hardware->identity.chipMinorFeatures2;
+     Identity->chipMinorFeatures3 = Hardware->identity.chipMinorFeatures3;
++    Identity->chipMinorFeatures4 = Hardware->identity.chipMinorFeatures4;
+ 
+     /* Return chip specs. */
+     Identity->streamCount            = Hardware->identity.streamCount;
+@@ -3129,7 +3144,7 @@ gckHARDWARE_FlushMMU(
+             | ((((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]
+-            = (((((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))) &  ((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) );
++            = (((((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))) &  ((((gctUINT32) (~0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 7:7) - (0 ? 7:7) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))));
+ 
+         /* Arm the PE-FE Semaphore. */
+         buffer[10]
+@@ -3660,7 +3675,7 @@ typedef enum
+ }
+ gcePOWER_FLAGS;
+ 
+-#if gcmIS_DEBUG(gcdDEBUG_TRACE) && gcdPOWER_MANAGEMENT
++#if gcmIS_DEBUG(gcdDEBUG_TRACE)
+ static gctCONST_STRING
+ _PowerEnum(gceCHIPPOWERSTATE State)
+ {
+@@ -3709,7 +3724,6 @@ gckHARDWARE_SetPowerManagementState(
+     IN gceCHIPPOWERSTATE State
+     )
+ {
+-#if gcdPOWER_MANAGEMENT
+     gceSTATUS status;
+     gckCOMMAND command = gcvNULL;
+     gckOS os;
+@@ -3841,6 +3855,12 @@ gckHARDWARE_SetPowerManagementState(
+     command = Hardware->kernel->command;
+     gcmkVERIFY_OBJECT(command, gcvOBJ_COMMAND);
+ 
++    if (Hardware->powerManagement == gcvFALSE)
++    {
++        gcmkFOOTER_NO();
++        return gcvSTATUS_OK;
++    }
++
+     /* Start profiler. */
+     gcmkPROFILE_INIT(freq, time);
+ 
+@@ -4491,10 +4511,6 @@ OnError:
+     /* Return the status. */
+     gcmkFOOTER();
+     return status;
+-#else /* gcdPOWER_MANAGEMENT */
+-    /* Do nothing */
+-    return gcvSTATUS_OK;
+-#endif
+ }
+ 
+ /*******************************************************************************
+@@ -4532,6 +4548,40 @@ gckHARDWARE_QueryPowerManagementState(
+     return gcvSTATUS_OK;
+ }
+ 
++/*******************************************************************************
++**
++**  gckHARDWARE_SetPowerManagement
++**
++**  Configure GPU power management function.
++**  Only used in driver initialization stage.
++**
++**  INPUT:
++**
++**      gckHARDWARE Harwdare
++**          Pointer to an gckHARDWARE object.
++**
++**      gctBOOL PowerManagement
++**          Power Mangement State.
++**
++*/
++gceSTATUS
++gckHARDWARE_SetPowerManagement(
++    IN gckHARDWARE Hardware,
++    IN gctBOOL PowerManagement
++    )
++{
++    gcmkHEADER_ARG("Hardware=0x%x", Hardware);
++
++    /* Verify the arguments. */
++    gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
++
++    Hardware->powerManagement = PowerManagement;
++
++    /* Success. */
++    gcmkFOOTER_NO();
++    return gcvSTATUS_OK;
++}
++
+ #if gcdENABLE_FSCALE_VAL_ADJUST
+ gceSTATUS
+ gckHARDWARE_SetFscaleValue(
+@@ -4767,6 +4817,21 @@ OnError:
+                              GC_DEBUG_SIGNALS_##block##_Address, \
+                              &profiler->data))
+ 
++#define gcmkREAD_DEBUG_REGISTER_N(control, block, index, data) \
++    gcmkONERROR(\
++        gckOS_WriteRegisterEx(Hardware->os, \
++                              Hardware->core, \
++                              GC_DEBUG_CONTROL##control##_Address, \
++                              gcmSETFIELD(0, \
++                                          GC_DEBUG_CONTROL##control, \
++                                          block, \
++                                          index))); \
++    gcmkONERROR(\
++        gckOS_ReadRegisterEx(Hardware->os, \
++                             Hardware->core, \
++                             GC_DEBUG_SIGNALS_##block##_Address, \
++                             &data))
++
+ #define gcmkRESET_DEBUG_REGISTER(control, block) \
+     gcmkONERROR(\
+         gckOS_WriteRegisterEx(Hardware->os, \
+@@ -4857,6 +4922,9 @@ gckHARDWARE_QueryProfileRegisters(
+ {
+     gceSTATUS status;
+     gcsPROFILER_COUNTERS * profiler = Counters;
++    gctUINT i, clock;
++    gctUINT32 colorKilled, colorDrawn, depthKilled, depthDrawn;
++    gctUINT32 totalRead, totalWrite;
+ 
+     gcmkHEADER_ARG("Hardware=0x%x Counters=0x%x", Hardware, Counters);
+ 
+@@ -4867,16 +4935,6 @@ gckHARDWARE_QueryProfileRegisters(
+     gcmkONERROR(
+         gckOS_ReadRegisterEx(Hardware->os,
+                              Hardware->core,
+-                             0x00040,
+-                             &profiler->gpuTotalRead64BytesPerFrame));
+-    gcmkONERROR(
+-        gckOS_ReadRegisterEx(Hardware->os,
+-                             Hardware->core,
+-                             0x00044,
+-                             &profiler->gpuTotalWrite64BytesPerFrame));
+-    gcmkONERROR(
+-        gckOS_ReadRegisterEx(Hardware->os,
+-                             Hardware->core,
+                              0x00438,
+                              &profiler->gpuCyclesCounter));
+ 
+@@ -4892,8 +4950,63 @@ gckHARDWARE_QueryProfileRegisters(
+                              0x0007C,
+                              &profiler->gpuIdleCyclesCounter));
+ 
+-    if(Reset){
+ 
++    /* 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;
++
++        /* 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;
++    }
++
++    /* Reset clock control register. */
++    gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
++                                      Hardware->core,
++                                      0x00000,
++                                      clock));
++
++    if(Reset){
+             /* Reset counters. */
+             gcmkONERROR(
+                 gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x0003C, 1));
+@@ -4903,19 +5016,10 @@ gckHARDWARE_QueryProfileRegisters(
+                 gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00438, 0));
+             gcmkONERROR(
+                 gckOS_WriteRegisterEx(Hardware->os, Hardware->core, 0x00078, 0));
+-        }
+-    /* 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, &profiler->pe_pixel_count_killed_by_color_pipe));
+-    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, &profiler->pe_pixel_count_killed_by_depth_pipe));
+-    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, &profiler->pe_pixel_count_drawn_by_color_pipe));
+-    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, &profiler->pe_pixel_count_drawn_by_depth_pipe));
+-    if(Reset){     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) (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))) ));
+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 517b35c..37226b7 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
+@@ -90,6 +90,8 @@ struct _gckHARDWARE
+ #if gcdLINK_QUEUE_SIZE
+     struct _gckLINKQUEUE        linkQueue;
+ #endif
++
++    gctBOOL                     powerManagement;
+ };
+ 
+ gceSTATUS
+diff --git a/drivers/mxc/gpu-viv/config b/drivers/mxc/gpu-viv/config
+index 1196efa..cdd143e 100644
+--- a/drivers/mxc/gpu-viv/config
++++ b/drivers/mxc/gpu-viv/config
+@@ -22,7 +22,6 @@
+ ARCH_TYPE                         ?= arm
+ SDK_DIR                           ?= $(AQROOT)/build/sdk
+ USE_3D_VG                         ?= 1
+-USE_POWER_MANAGEMENT              ?= 1
+ FORCE_ALL_VIDEO_MEMORY_CACHED     ?= 0
+ NONPAGED_MEMORY_CACHEABLE         ?= 0
+ NONPAGED_MEMORY_BUFFERABLE        ?= 1
+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 7964585..b7b0d28 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
++++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
+@@ -904,9 +904,6 @@ gckKERNEL_Dispatch(
+     gctSIGNAL   signal;
+ #endif
+ 
+-    gcsDATABASE_RECORD record;
+-    gctPOINTER    data;
+-
+     gcmkHEADER_ARG("Kernel=0x%x FromUser=%d Interface=0x%x",
+                    Kernel, FromUser, Interface);
+ 
+@@ -1940,249 +1937,133 @@ gckKERNEL_Dispatch(
+ #endif
+ 
+     case gcvHAL_GET_SHARED_INFO:
+-        bytes = (gctSIZE_T) Interface->u.GetSharedInfo.size;
+-
+-        if (Interface->u.GetSharedInfo.dataId != 0)
++        if (Interface->u.GetSharedInfo.data == gcvNULL)
+         {
+-            gcmkONERROR(gckKERNEL_FindProcessDB(Kernel,
+-                        Interface->u.GetSharedInfo.pid,
+-                        0,
+-                        gcvDB_SHARED_INFO,
+-                        gcmINT2PTR(Interface->u.GetSharedInfo.dataId),
+-                        &record));
+-
+-            /* find a record in db, check size */
+-            if (record.bytes != bytes)
+-            {
+-                /* Size change is not allowed */
+-                gcmkONERROR(gcvSTATUS_INVALID_DATA);
+-            }
+-
+-            /* fetch data */
+-            gcmkONERROR(gckOS_CopyToUserData(
+-                Kernel->os,
+-                record.physical,
+-                gcmUINT64_TO_PTR(Interface->u.GetSharedInfo.data),
+-                bytes
+-                ));
+-
++            gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
+         }
+-
+-        if ((node = gcmUINT64_TO_PTR(Interface->u.GetSharedInfo.node)) != gcvNULL)
++        else
+         {
+-            switch (Interface->u.GetSharedInfo.infoType)
+-                {
+-                case gcvVIDMEM_INFO_GENERIC:
+-                    { /* Generic data stored */
+-                        if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
+-                        {
+-                            data = &node->VidMem.sharedInfo;
+-
+-                        }
+-                        else
+-                        {
+-                            data = &node->Virtual.sharedInfo;
+-                        }
++            gctUINT32 pid    = Interface->u.GetSharedInfo.pid;
++            gctUINT32 dataId = Interface->u.GetSharedInfo.dataId;
++            gctSIZE_T bytes  = Interface->u.GetSharedInfo.bytes;
++            gctPOINTER data  = Interface->u.GetSharedInfo.data;
++            gcsDATABASE_RECORD record;
+ 
+-                         gcmkONERROR(gckOS_CopyToUserData(
+-                             Kernel->os,
+-                             data,
+-                             gcmUINT64_TO_PTR(Interface->u.GetSharedInfo.nodeData),
+-                             sizeof(gcsVIDMEM_NODE_SHARED_INFO)
+-                             ));
+-                    }
+-                    break;
+-
+-                case gcvVIDMEM_INFO_DIRTY_RECTANGLE:
+-                    { /* Dirty rectangle stored */
+-                        gcsVIDMEM_NODE_SHARED_INFO *storedSharedInfo;
+-                        gcsVIDMEM_NODE_SHARED_INFO alignedSharedInfo;
+-
+-                        if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
+-                        {
+-                            storedSharedInfo = &node->VidMem.sharedInfo;
+-                        }
+-                        else
+-                        {
+-                            storedSharedInfo = &node->Virtual.sharedInfo;
+-                        }
+-
+-                        /* Stored shared info holds the unaligned dirty rectangle.
+-                           Align it first.                                         */
+-
+-                        /* Hardware requires 64-byte aligned address, and 16x4 pixel aligned rectsize.
+-                           We simply align to 32 pixels which covers both 16- and 32-bpp formats. */
+-
+-                        /* Make sure we have a legit rectangle. */
+-                        gcmkASSERT((storedSharedInfo->RectSize.width != 0) && (storedSharedInfo->RectSize.height != 0));
+-
+-                        alignedSharedInfo.SrcOrigin.x = gcmALIGN_BASE(storedSharedInfo->SrcOrigin.x, 32);
+-                        alignedSharedInfo.RectSize.width = gcmALIGN((storedSharedInfo->RectSize.width + (storedSharedInfo->SrcOrigin.x - alignedSharedInfo.SrcOrigin.x)), 16);
+-
+-                        alignedSharedInfo.SrcOrigin.y = gcmALIGN_BASE(storedSharedInfo->SrcOrigin.y, 4);
+-                        alignedSharedInfo.RectSize.height = gcmALIGN((storedSharedInfo->RectSize.height + (storedSharedInfo->SrcOrigin.y - alignedSharedInfo.SrcOrigin.y)), 4);
+-
+-                        gcmkONERROR(gckOS_CopyToUserData(
+-                            Kernel->os,
+-                            &alignedSharedInfo,
+-                            gcmUINT64_TO_PTR(Interface->u.GetSharedInfo.nodeData),
+-                            sizeof(gcsVIDMEM_NODE_SHARED_INFO)
+-                            ));
+-
+-                        gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_KERNEL,
+-                                        "Node = %p, unaligned rectangle (l=%d, t=%d, w=%d, h=%d) aligned to (l=%d, t=%d, w=%d, h=%d)", node,
+-                                        storedSharedInfo->SrcOrigin.x, storedSharedInfo->SrcOrigin.y,
+-                                        storedSharedInfo->RectSize.width, storedSharedInfo->RectSize.height,
+-                                        alignedSharedInfo.SrcOrigin.x, alignedSharedInfo.SrcOrigin.y,
+-                                        alignedSharedInfo.RectSize.width, alignedSharedInfo.RectSize.height);
++            /* Find record. */
++            gcmkONERROR(
++                gckKERNEL_FindProcessDB(Kernel,
++                                        pid,
++                                        0,
++                                        gcvDB_SHARED_INFO,
++                                        gcmINT2PTR(dataId),
++                                        &record));
++
++            /* Check memory size. */
++            if (bytes < record.bytes)
++            {
++                /* Insufficient memory to hold shared data. */
++                gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
++            }
+ 
+-                        /* Rectangle */
+-                        storedSharedInfo->SrcOrigin.x =
+-                        storedSharedInfo->SrcOrigin.y =
+-                        storedSharedInfo->RectSize.width =
+-                        storedSharedInfo->RectSize.height = 0;
+-                    }
+-                    break;
+-                }
++            /* Copy to user. */
++            status = gckOS_CopyToUserData(Kernel->os,
++                                          record.physical,
++                                          data,
++                                          record.bytes);
++
++            /*
++             * Remove from process db.
++             * Every time when shared info is taken, the record is erased in
++             * kernel side.
++             */
++            gcmkVERIFY_OK(
++                gckKERNEL_RemoveProcessDB(Kernel,
++                                          pid,
++                                          gcvDB_SHARED_INFO,
++                                          gcmINT2PTR(dataId)));
++            /* Free existed data. */
++            gcmkVERIFY_OK(
++                gckOS_FreeMemory(Kernel->os, record.physical));
+         }
+         break;
+ 
+     case gcvHAL_SET_SHARED_INFO:
+-        bytes = (gctSIZE_T) Interface->u.SetSharedInfo.size;
+-
+-        if (Interface->u.SetSharedInfo.dataId != 0)
+         {
+-            status = gckKERNEL_FindProcessDB(Kernel, processID, 0,
+-                        gcvDB_SHARED_INFO,
+-                        gcmINT2PTR(Interface->u.SetSharedInfo.dataId),
+-                        &record);
+-
+-            if (status == gcvSTATUS_INVALID_DATA)
+-            {
+-                /* private data has not been created yet */
+-                /* Note: we count on DestoryProcessDB to free it */
+-                gcmkONERROR(gckOS_AllocateMemory(
+-                    Kernel->os,
+-                    bytes,
+-                    &data
+-                    ));
+-
+-                gcmkONERROR(
+-                    gckKERNEL_AddProcessDB(Kernel, processID,
+-                        gcvDB_SHARED_INFO,
+-                        gcmINT2PTR(Interface->u.SetSharedInfo.dataId),
+-                        data,
+-                        bytes
+-                        ));
+-            }
+-            else
++            gctUINT32 dataId = Interface->u.SetSharedInfo.dataId;
++            gctPOINTER data  = Interface->u.SetSharedInfo.data;
++            gctUINT32 bytes  = Interface->u.SetSharedInfo.bytes;
++            gctPOINTER memory = gcvNULL;
++            gcsDATABASE_RECORD record;
++
++            if (gcmIS_SUCCESS(gckKERNEL_FindProcessDB(Kernel,
++                                                     processID,
++                                                     0,
++                                                     gcvDB_SHARED_INFO,
++                                                     gcmINT2PTR(dataId),
++                                                     &record)))
+             {
+-                /* bail on other errors */
+-                gcmkONERROR(status);
+-
+-                /* find a record in db, check size */
+-                if (record.bytes != bytes)
++                /* Find a record with the same id. */
++                if (bytes != record.bytes)
+                 {
+-                    /* Size change is not allowed */
+-                    gcmkONERROR(gcvSTATUS_INVALID_DATA);
++                    /* Remove from process db. */
++                    gcmkVERIFY_OK(
++                        gckKERNEL_RemoveProcessDB(Kernel,
++                                                  processID,
++                                                  gcvDB_SHARED_INFO,
++                                                  gcmINT2PTR(dataId)));
++
++                    /* Free existed data. */
++                    gcmkVERIFY_OK(
++                        gckOS_FreeMemory(Kernel->os, record.physical));
+                 }
+-
+-                /* get storage address */
+-                data = record.physical;
+-            }
+-
+-            gcmkONERROR(gckOS_CopyFromUserData(
+-                Kernel->os,
+-                data,
+-                gcmUINT64_TO_PTR(Interface->u.SetSharedInfo.data),
+-                bytes
+-                ));
+-        }
+-
+-        if ((node = gcmUINT64_TO_PTR(Interface->u.SetSharedInfo.node)) != gcvNULL)
+-        {
+-            switch (Interface->u.SetSharedInfo.infoType)
++                else
+                 {
+-                case gcvVIDMEM_INFO_GENERIC:
+-                    { /* Generic data stored */
+-                        if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
+-                        {
+-                            data = &node->VidMem.sharedInfo;
+-                        }
+-                        else
+-                        {
+-                            data = &node->Virtual.sharedInfo;
+-                        }
+-
+-                        gcmkONERROR(gckOS_CopyFromUserData(
+-                            Kernel->os,
+-                            data,
+-                            gcmUINT64_TO_PTR(Interface->u.SetSharedInfo.nodeData),
+-                            sizeof(gcsVIDMEM_NODE_SHARED_INFO)
+-                            ));
+-                    }
+-                    break;
++                    /* Re-use allocated memory. */
++                    memory = record.physical;
++                }
++            }
+ 
+-                case gcvVIDMEM_INFO_DIRTY_RECTANGLE:
+-                    { /* Dirty rectangle stored */
+-                        gcsVIDMEM_NODE_SHARED_INFO newSharedInfo;
+-                        gcsVIDMEM_NODE_SHARED_INFO *currentSharedInfo;
+-                        gctINT dirtyX, dirtyY, right, bottom;
+-
+-                        /* Expand the dirty rectangle stored in the node to include the rectangle passed in. */
+-                        gcmkONERROR(gckOS_CopyFromUserData(
+-                            Kernel->os,
+-                            &newSharedInfo,
+-                            gcmUINT64_TO_PTR(Interface->u.SetSharedInfo.nodeData),
+-                            gcmSIZEOF(gcsVIDMEM_NODE_SHARED_INFO)
+-                            ));
+-
+-                        if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
+-                        {
+-                            currentSharedInfo = &node->VidMem.sharedInfo;
+-                        }
+-                        else
+-                        {
+-                            currentSharedInfo = &node->Virtual.sharedInfo;
+-                        }
++            if ((data == gcvNULL) || (bytes == 0))
++            {
++                /* Nothing to record. */
++                break;
++            }
+ 
+-                        gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_KERNEL, "Node = %p Stored rectangle (l=%d, t=%d, w=%d, h=%d)", node,
+-                                        currentSharedInfo->SrcOrigin.x, currentSharedInfo->SrcOrigin.y,
+-                                        currentSharedInfo->RectSize.width, currentSharedInfo->RectSize.height);
++            if (bytes > 1024)
++            {
++                /* Limite data size. */
++                gcmkONERROR(gcvSTATUS_TOO_COMPLEX);
++            }
+ 
+-                        gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_KERNEL, "To combine with (l=%d, t=%d, w=%d, h=%d)",
+-                                        newSharedInfo.SrcOrigin.x, newSharedInfo.SrcOrigin.y,
+-                                        newSharedInfo.RectSize.width, newSharedInfo.RectSize.height);
++            if (memory == gcvNULL)
++            {
++                /* Allocate memory for holding shared data. */
++                gcmkONERROR(
++                    gckOS_AllocateMemory(Kernel->os, bytes, &memory));
+ 
+-                        if ((currentSharedInfo->RectSize.width == 0) || (currentSharedInfo->RectSize.height == 0))
+-                        { /* Setting it for the first time */
+-                            currentSharedInfo->SrcOrigin.x = newSharedInfo.SrcOrigin.x;
+-                            currentSharedInfo->SrcOrigin.y = newSharedInfo.SrcOrigin.y;
+-                            currentSharedInfo->RectSize.width = newSharedInfo.RectSize.width;
+-                            currentSharedInfo->RectSize.height = newSharedInfo.RectSize.height;
+-                        }
+-                        else
+-                        {
+-                            /* Expand the stored rectangle to include newly locked rectangle */
+-                            dirtyX = (newSharedInfo.SrcOrigin.x < currentSharedInfo->SrcOrigin.x) ? newSharedInfo.SrcOrigin.x : currentSharedInfo->SrcOrigin.x;
+-                            right = gcmMAX((currentSharedInfo->SrcOrigin.x + currentSharedInfo->RectSize.width), (newSharedInfo.SrcOrigin.x + newSharedInfo.RectSize.width));
+-                            currentSharedInfo->RectSize.width = right - dirtyX;
+-                            currentSharedInfo->SrcOrigin.x = dirtyX;
+-
+-                            dirtyY = (newSharedInfo.SrcOrigin.y < currentSharedInfo->SrcOrigin.y) ? newSharedInfo.SrcOrigin.y : currentSharedInfo->SrcOrigin.y;
+-                            bottom = gcmMAX((currentSharedInfo->SrcOrigin.y + currentSharedInfo->RectSize.height), (newSharedInfo.SrcOrigin.y + newSharedInfo.RectSize.height));
+-                            currentSharedInfo->RectSize.height = bottom - dirtyY;
+-                            currentSharedInfo->SrcOrigin.y = dirtyY;
+-                        }
++                /* Add to process db. */
++                status = gckKERNEL_AddProcessDB(Kernel,
++                                                processID,
++                                                gcvDB_SHARED_INFO,
++                                                gcmINT2PTR(dataId),
++                                                memory,
++                                                bytes);
+ 
+-                        gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_KERNEL, "Combined rectangle (l=%d, t=%d, w=%d, h=%d)",
+-                                       currentSharedInfo->SrcOrigin.x, currentSharedInfo->SrcOrigin.y,
+-                                       currentSharedInfo->RectSize.width, currentSharedInfo->RectSize.height);
+-                    }
++                if (gcmIS_ERROR(status))
++                {
++                    /* Failed to add process db. Free allocated memory. */
++                    gcmkVERIFY_OK(gckOS_FreeMemory(Kernel->os, memory));
+                     break;
+                 }
+-        }
++            }
+ 
++            /* Copy shared data to kernel memory. */
++            gcmkONERROR(
++                gckOS_CopyFromUserData(Kernel->os,
++                                       memory,
++                                       data,
++                                       bytes));
++        }
+         break;
+ 
+     case gcvHAL_SET_FSCALE_VALUE:
+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 66ce0d1..9ee9ea1 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
+@@ -2047,14 +2047,14 @@ gckCOMMAND_Commit(
+         EventQueue = nextEventRecord;
+     }
+ 
+-#if gcdPOWER_MANAGEMENT
+-    if (Command->kernel->eventObj->queueHead == gcvNULL)
++    if (Command->kernel->eventObj->queueHead == gcvNULL
++     && Command->kernel->hardware->powerManagement == gcvTRUE
++    )
+     {
+         /* Commit done event by which work thread knows all jobs done. */
+         gcmkVERIFY_OK(
+             gckEVENT_CommitDone(Command->kernel->eventObj, gcvKERNEL_PIXEL));
+     }
+-#endif
+ 
+     /* Submit events. */
+     status = gckEVENT_Submit(Command->kernel->eventObj, gcvTRUE, gcvFALSE);
+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 9685a5d..76c1c10 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
+@@ -1234,7 +1234,6 @@ _EventHandler_BusError(
+     return gcvSTATUS_OK;
+ }
+ 
+-#if gcdPOWER_MANAGEMENT
+ /******************************************************************************\
+ ****************************** Power Stall Handler *******************************
+ \******************************************************************************/
+@@ -1250,7 +1249,6 @@ _EventHandler_PowerStall(
+         Kernel->command->powerStallSignal,
+         gcvTRUE);
+ }
+-#endif
+ 
+ /******************************************************************************\
+ ******************************** Task Routines *********************************
+@@ -1965,15 +1963,12 @@ gcmDECLARE_INTERRUPT_HANDLER(COMMAND, 0)
+                             );
+                     }
+                 }
+-#if gcdPOWER_MANAGEMENT
+                 else
+                 {
+-
+                     status = gckVGHARDWARE_SetPowerManagementState(
+                                 Kernel->command->hardware, gcvPOWER_IDLE_BROADCAST
+                                 );
+                 }
+-#endif
+ 
+                 /* Break out of the loop. */
+                 break;
+@@ -2848,7 +2843,7 @@ gckVGCOMMAND_Construct(
+             _EventHandler_BusError
+             ));
+ 
+-#if gcdPOWER_MANAGEMENT
++
+         command->powerStallInt = 30;
+         /* Enable the interrupt. */
+         gcmkERR_BREAK(gckVGINTERRUPT_Enable(
+@@ -2856,7 +2851,6 @@ gckVGCOMMAND_Construct(
+             &command->powerStallInt,
+             _EventHandler_PowerStall
+             ));
+-#endif
+ 
+         /***********************************************************************
+         ** Task management initialization.
+@@ -3419,7 +3413,6 @@ gckVGCOMMAND_Commit(
+             gcvINFINITE
+             ));
+ 
+-#if gcdPOWER_MANAGEMENT
+         status = gckVGHARDWARE_SetPowerManagementState(
+             Command->hardware, gcvPOWER_ON_AUTO);
+ 
+@@ -3447,7 +3440,7 @@ gckVGCOMMAND_Commit(
+ 
+             break;
+         }
+-#endif
++
+         gcmkERR_BREAK(_FlushMMU(Command));
+ 
+         do
+@@ -3676,10 +3669,9 @@ gckVGCOMMAND_Commit(
+         }
+         while (gcvFALSE);
+ 
+-#if gcdPOWER_MANAGEMENT
+         gcmkVERIFY_OK(gckOS_ReleaseSemaphore(
+             Command->os, Command->powerSemaphore));
+-#endif
++
+         /* Release the mutex. */
+         gcmkCHECK_STATUS(gckOS_ReleaseMutex(
+             Command->os,
+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 bc5f083..673d4f7 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
+@@ -1303,9 +1303,9 @@ gckKERNEL_DestroyProcessDB(
+                            gcmPTR2INT(record->data), status);
+             break;
+ 
+-                    case gcvDB_SHARED_INFO:
+-                        status = gckOS_FreeMemory(Kernel->os, record->physical);
+-                        break;
++        case gcvDB_SHARED_INFO:
++            status = gckOS_FreeMemory(Kernel->os, record->physical);
++            break;
+ 
+         default:
+             gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE,
+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 43c9297..c7f67c7 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
+@@ -97,6 +97,14 @@ static gcsMirrorPageTable_PTR mirrorPageTable = gcvNULL;
+ static gctPOINTER mirrorPageTableMutex = gcvNULL;
+ #endif
+ 
++typedef struct _gcsDynamicSpaceNode * gcsDynamicSpaceNode_PTR;
++typedef struct _gcsDynamicSpaceNode
++{
++    gctUINT32       start;
++    gctINT32        entries;
++}
++gcsDynamicSpaceNode;
++
+ static void
+ _WritePageEntry(
+     IN gctUINT32_PTR PageEntry,
+@@ -482,30 +490,117 @@ OnError:
+ }
+ 
+ static gceSTATUS
++_FindDynamicSpace(
++    IN gckMMU Mmu,
++    OUT gcsDynamicSpaceNode_PTR *Array,
++    OUT gctINT * Size
++    )
++{
++    gceSTATUS status = gcvSTATUS_OK;
++    gctPOINTER pointer = gcvNULL;
++    gcsDynamicSpaceNode_PTR array = gcvNULL;
++    gctINT size = 0;
++    gctINT i = 0, nodeStart = -1, nodeEntries = 0;
++
++    /* Allocate memory for the array. */
++    gcmkONERROR(gckOS_Allocate(Mmu->os,
++                               gcmSIZEOF(*array) * (gcdMMU_MTLB_ENTRY_NUM / 2),
++                               &pointer));
++
++    array = (gcsDynamicSpaceNode_PTR)pointer;
++
++    /* Loop all the entries. */
++    while (i < gcdMMU_MTLB_ENTRY_NUM)
++    {
++        if (!Mmu->mtlbLogical[i])
++        {
++            if (nodeStart < 0)
++            {
++                /* This is the first entry of the dynamic space. */
++                nodeStart   = i;
++                nodeEntries = 1;
++            }
++            else
++            {
++                /* Other entries of the dynamic space. */
++                nodeEntries++;
++            }
++        }
++        else if (nodeStart >= 0)
++        {
++            /* Save the previous node. */
++            array[size].start   = nodeStart;
++            array[size].entries = nodeEntries;
++            size++;
++
++            /* Reset the start. */
++            nodeStart   = -1;
++            nodeEntries = 0;
++        }
++
++        i++;
++    }
++
++    /* Save the previous node. */
++    if (nodeStart >= 0)
++    {
++        array[size].start   = nodeStart;
++        array[size].entries = nodeEntries;
++        size++;
++    }
++
++#if gcdMMU_TABLE_DUMP
++    for (i = 0; i < size; i++)
++    {
++        gckOS_Print("%s(%d): [%d]: start=%d, entries=%d.\n",
++                __FUNCTION__, __LINE__,
++                i,
++                array[i].start,
++                array[i].entries);
++    }
++#endif
++
++    *Array = array;
++    *Size  = size;
++
++    return gcvSTATUS_OK;
++
++OnError:
++    if (pointer != gcvNULL)
++    {
++        gckOS_Free(Mmu->os, pointer);
++    }
++
++    return status;
++}
++
++static gceSTATUS
+ _SetupDynamicSpace(
+     IN gckMMU Mmu
+     )
+ {
+     gceSTATUS status;
+-    gctINT i;
++    gcsDynamicSpaceNode_PTR nodeArray = gcvNULL;
++    gctINT i, nodeArraySize = 0;
+     gctUINT32 physical;
+-    gctINT numEntries;
++    gctINT numEntries = 0;
+     gctUINT32_PTR pageTable;
+     gctBOOL acquired = gcvFALSE;
+ 
+-    /* find the start of dynamic address space. */
+-    for (i = 0; i < gcdMMU_MTLB_ENTRY_NUM; i++)
++    /* Find all the dynamic address space. */
++    gcmkONERROR(_FindDynamicSpace(Mmu, &nodeArray, &nodeArraySize));
++
++    /* TODO: We only use the largest one for now. */
++    for (i = 0; i < nodeArraySize; i++)
+     {
+-        if (!Mmu->mtlbLogical[i])
++        if (nodeArray[i].entries > numEntries)
+         {
+-            break;
++            Mmu->dynamicMappingStart = nodeArray[i].start;
++            numEntries               = nodeArray[i].entries;
+         }
+     }
+ 
+-    Mmu->dynamicMappingStart = i;
+-
+-    /* Number of entries in Master TLB for dynamic mapping. */
+-    numEntries = gcdMMU_MTLB_ENTRY_NUM - i;
++    gckOS_Free(Mmu->os, (gctPOINTER)nodeArray);
+ 
+     Mmu->pageTableSize = numEntries * 4096;
+ 
+@@ -545,7 +640,9 @@ _SetupDynamicSpace(
+     acquired = gcvTRUE;
+ 
+     /* Map to Master TLB. */
+-    for (; i < gcdMMU_MTLB_ENTRY_NUM; i++)
++    for (i = (gctINT)Mmu->dynamicMappingStart;
++         i < (gctINT)Mmu->dynamicMappingStart + numEntries;
++         i++)
+     {
+         _WritePageEntry(Mmu->mtlbLogical + i,
+                         physical
+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 8a442a2..8b8bbdc 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
+@@ -2144,6 +2144,9 @@ gckVIDMEM_Unlock(
+ 
+             if (!Node->Virtual.contiguous
+             &&  (Node->Virtual.lockeds[Kernel->core] == 1)
++#if gcdENABLE_VG
++            && (Kernel->vg == gcvNULL)
++#endif
+             )
+             {
+                 if (Type == gcvSURF_BITMAP)
+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 7077412..4406d7e 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
+@@ -2072,6 +2072,12 @@ gckHARDWARE_QueryPowerManagementState(
+     OUT gceCHIPPOWERSTATE* State
+     );
+ 
++gceSTATUS
++gckHARDWARE_SetPowerManagement(
++    IN gckHARDWARE Hardware,
++    IN gctBOOL PowerManagement
++    );
++
+ #if gcdENABLE_FSCALE_VAL_ADJUST
+ gceSTATUS
+ gckHARDWARE_SetFscaleValue(
+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 ac86399..44689b0 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
+@@ -74,7 +74,6 @@ typedef struct _gcsSYNC_CONTEXT  *      gcsSYNC_CONTEXT_PTR;
+ /******************************************************************************\
+ ******************************* Process local storage *************************
+ \******************************************************************************/
+-
+ typedef struct _gcsPLS * gcsPLS_PTR;
+ typedef struct _gcsPLS
+ {
+@@ -107,6 +106,7 @@ typedef struct _gcsPLS
+ 
+     /* Reference count for destructor. */
+     gcsATOM_PTR                 reference;
++    gctBOOL                     bKFS;
+ #if gcdUSE_NPOT_PATCH
+     gctBOOL                     bNeedSupportNP2Texture;
+ #endif
+@@ -123,7 +123,7 @@ extern gcsPLS gcPLS;
+ typedef struct _gcsTLS * gcsTLS_PTR;
+ 
+ typedef void (* gctTLS_DESTRUCTOR) (
+-    gcsTLS_PTR TLS
++    gcsTLS_PTR
+     );
+ 
+ typedef struct _gcsTLS
+@@ -658,8 +658,6 @@ gcoHAL_QueryChipFeature(
+     IN gceFEATURE   Feature);
+ 
+ #endif
+-
+-
+ /******************************************************************************\
+ ********************************** gcoOS Object *********************************
+ \******************************************************************************/
+@@ -1775,20 +1773,6 @@ gcoSURF_QueryVidMemNode(
+     OUT gctUINT_PTR Bytes
+     );
+ 
+-/*  Set usage attribute of a surface. */
+-gceSTATUS
+-gcoSURF_SetUsage(
+-    IN gcoSURF Surface,
+-    IN gceSURF_USAGE Usage
+-    );
+-
+-/*  Return usage attribute of a surface. */
+-gceSTATUS
+-gcoSURF_QueryUsage(
+-    IN gcoSURF Surface,
+-    OUT gceSURF_USAGE *Usage
+-    );
+-
+ /* Set the color type of the surface. */
+ gceSTATUS
+ gcoSURF_SetColorType(
+@@ -1975,6 +1959,14 @@ gcoSURF_SetWindow(
+     IN gctUINT Height
+     );
+ 
++/* Set width/height alignment of the surface directly and calculate stride/size. This is only for dri backend now. Please be careful before use. */
++gceSTATUS
++gcoSURF_SetAlignment(
++    IN gcoSURF Surface,
++    IN gctUINT Width,
++    IN gctUINT Height
++    );
++
+ /* Increase reference count of the surface. */
+ gceSTATUS
+ gcoSURF_ReferenceSurface(
+@@ -2009,6 +2001,12 @@ gcoSURF_SetOffset(
+     );
+ 
+ gceSTATUS
++gcoSURF_GetOffset(
++    IN gcoSURF Surface,
++    OUT gctUINT *Offset
++    );
++
++gceSTATUS
+ gcoSURF_NODE_Cache(
+     IN gcsSURF_NODE_PTR Node,
+     IN gctPOINTER Logical,
+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 4a0870f..8693c37 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
+@@ -36,12 +36,16 @@ extern "C" {
+ #endif
+ 
+ #ifndef GC_ENABLE_LOADTIME_OPT
+-#define GC_ENABLE_LOADTIME_OPT      1
++#define GC_ENABLE_LOADTIME_OPT           1
+ #endif
+ 
+ #define TEMP_OPT_CONSTANT_TEXLD_COORD    1
+ 
+-#define TEMP_SHADER_PATCH            1
++#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')
+ 
+@@ -683,6 +687,13 @@ typedef enum _gceSHADER_FLAGS
+     gcvSHADER_USE_ALPHA_KILL            = 0x100,
+ #endif
+ 
++#if ADD_PRE_ROTATION_TO_VS
++    gcvSHADER_VS_PRE_ROTATION           = 0x200,
++#endif
++
++#if TEMP_INLINE_ALL_EXPANSION
++    gcvSHADER_INLINE_ALL_EXPANSION      = 0x200,
++#endif
+ }
+ gceSHADER_FLAGS;
+ 
+@@ -771,10 +782,15 @@ typedef enum _gceSHADER_OPTIMIZATION
+     /* optimize varying packing */
+     gcvOPTIMIZATION_VARYINGPACKING              = 1 << 22,
+ 
++#if TEMP_INLINE_ALL_EXPANSION
++	gcvOPTIMIZATION_INLINE_ALL_EXPANSION        = 1 << 23,
++#endif
++
+     /*  Full optimization. */
+     /*  Note that gcvOPTIMIZATION_LOAD_SW_WORKAROUND is off. */
+ 	gcvOPTIMIZATION_FULL                        = 0x7FFFFFFF &
+                                                   ~gcvOPTIMIZATION_LOAD_SW_WORKAROUND &
++                                                  ~gcvOPTIMIZATION_INLINE_ALL_EXPANSION &
+                                                   ~gcvOPTIMIZATION_POWER_OPTIMIZATION,
+ 
+ 	/* Optimization Unit Test flag. */
+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 028bbd1..b056c52 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
+@@ -210,6 +210,9 @@ typedef struct _gcsHAL_QUERY_CHIP_IDENTITY
+     /* Supported minor feature 3 fields. */
+     gctUINT32                   chipMinorFeatures3;
+ 
++    /* Supported minor feature 4 fields. */
++    gctUINT32                   chipMinorFeatures4;
++
+     /* Number of streams supported. */
+     gctUINT32                   streamCount;
+ 
+@@ -929,30 +932,30 @@ typedef struct _gcsHAL_INTERFACE
+ 
+         struct _gcsHAL_GET_SHARED_INFO
+         {
++            /* Process id. */
+             IN gctUINT32            pid;
++
++            /* Data id. */
+             IN gctUINT32            dataId;
+-            /* gcuVIDMEM_NODE_PTR */
+-            IN gctUINT64            node;
+-            /* gctUINT8_PTR */
+-            OUT gctUINT64           data;
+-            /* fix size. gctUINT8_PTR*/
+-            OUT gctUINT64           nodeData;
+-            gctUINT64               size;
+-            IN gceVIDMEM_NODE_SHARED_INFO_TYPE infoType;
++
++            /* Data size. */
++            IN gctSIZE_T            bytes;
++
++            /* Pointer to save the shared data. */
++            OUT gctPOINTER          data;
+         }
+         GetSharedInfo;
+ 
+         struct _gcsHAL_SET_SHARED_INFO
+         {
++            /* Data id. */
+             IN gctUINT32            dataId;
+-            /* gcuVIDMEM_NODE_PTR */
+-            IN gctUINT64   node;
+-            /* gctUINT8_PTR */
+-            IN gctUINT64         data;
+-            /* gctUINT8_PTR */
+-            IN gctUINT64         nodeData;
+-            IN gctUINT64            size;
+-            IN gceVIDMEM_NODE_SHARED_INFO_TYPE infoType;
++
++            /* Data to be shared. */
++            IN gctPOINTER           data;
++
++            /* Data size. */
++            IN gctSIZE_T            bytes;
+         }
+         SetSharedInfo;
+ 
+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 249b61b..8481375 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,50 +323,6 @@ gcoSURF_Resolve(
+     IN gcoSURF DestSurface
+     );
+ 
+-/* Export the render target. */
+-gceSTATUS
+-gcoSURF_ExportRenderTarget(
+-    IN gcoSURF SrcSurface
+-);
+-
+-/* Import the render target. */
+-gceSTATUS
+-gcoSURF_ImportRenderTarget(
+-    IN gctUINT32 Pid,
+-    IN gcoSURF SrcSurface
+-);
+-
+-/* Save the Resolve info to kernel. */
+-gceSTATUS
+-gcoSURF_PrepareRemoteResolveRect(
+-    IN gcoSURF SrcSurface,
+-    IN gcsPOINT_PTR SrcOrigin,
+-    IN gcsPOINT_PTR DestOrigin,
+-    IN gcsPOINT_PTR RectSize
+-    );
+-
+-/* Resolve using the rectangle info previously saved in the vid mem node. */
+-gceSTATUS
+-gcoSURF_ResolveFromStoredRect(
+-    IN gcoSURF SrcSurface,
+-    IN gcoSURF DestSurface
+-    );
+-
+-/* Using the info that Process Pid saved to do resolve. */
+-gceSTATUS
+-gcoSURF_RemoteResolveRect(
+-    IN gcoSURF SrcSurface,
+-    IN gcoSURF DestSurface,
+-    IN gctBOOL *resolveDiscarded
+-    );
+-
+-/* Return the "resolve submitted indicator" signal. */
+-gceSTATUS
+-gcoSURF_GetRTSignal(
+-    IN gcoSURF RTSurface,
+-    OUT gctSIGNAL * resolveSubmittedSignal
+-    );
+-
+ /* Resolve rectangular area of a surface. */
+ gceSTATUS
+ gcoSURF_ResolveRect(
+@@ -1684,6 +1640,12 @@ gcoTEXTURE_IsRenderable(
+     );
+ 
+ gceSTATUS
++gcoTEXTURE_IsRenderableEx(
++    IN gcoTEXTURE Texture,
++    IN gctUINT Level
++    );
++
++gceSTATUS
+ gcoTEXTURE_IsComplete(
+     IN gcoTEXTURE Texture,
+     IN gctINT MaxLevel
+@@ -2028,21 +1990,15 @@ gceSTATUS
+ gcoHAL_GetSharedInfo(
+     IN gctUINT32 Pid,
+     IN gctUINT32 DataId,
+-    OUT gctUINT8_PTR Data,
+     IN gctSIZE_T Bytes,
+-    IN gctUINT64 Node,
+-    OUT gctUINT8_PTR NodeData,
+-    IN gceVIDMEM_NODE_SHARED_INFO_TYPE SharedInfoType
++    OUT gctPOINTER Data
+     );
+ 
+ gceSTATUS
+ gcoHAL_SetSharedInfo(
+     IN gctUINT32 DataId,
+-    IN gctUINT8_PTR Data,
+-    IN gctSIZE_T Bytes,
+-    IN gctUINT64 Node,
+-    IN gctUINT8_PTR NodeData,
+-    IN gceVIDMEM_NODE_SHARED_INFO_TYPE SharedInfoType
++    IN gctPOINTER Data,
++    IN gctSIZE_T Bytes
+     );
+ 
+ #ifdef __cplusplus
+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 cf6b425..a1d9ae5 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
+@@ -181,13 +181,6 @@ typedef enum _gceCACHEOPERATION
+ }
+ gceCACHEOPERATION;
+ 
+-typedef enum _gceVIDMEM_NODE_SHARED_INFO_TYPE
+-{
+-    gcvVIDMEM_INFO_GENERIC,
+-    gcvVIDMEM_INFO_DIRTY_RECTANGLE
+-}
+-gceVIDMEM_NODE_SHARED_INFO_TYPE;
+-
+ /* Surface types. */
+ typedef enum _gceSURF_TYPE
+ {
+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 afe83d0..9e2a8db 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
+@@ -391,15 +391,6 @@
+ #endif
+ 
+ /*
+-    gcdPOWER_MANAGEMENT
+-
+-        This define enables the power management code.
+-*/
+-#ifndef gcdPOWER_MANAGEMENT
+-#   define gcdPOWER_MANAGEMENT                  1
+-#endif
+-
+-/*
+     gcdPOWER_SUSNPEND_WHEN_IDLE
+ 
+         Set to 1 to make GPU enter gcvPOWER_SUSPEND when idle detected,
+@@ -428,7 +419,7 @@
+         If the value is 0, no timeout will be checked for.
+ */
+ #ifndef gcdGPU_TIMEOUT
+-#   if gcdFPGA_BUILD
++#if gcdFPGA_BUILD
+ #       define gcdGPU_TIMEOUT                   0
+ #   else
+ #       define gcdGPU_TIMEOUT                   20000
+@@ -726,31 +717,13 @@
+ 
+         Support swap with a specific rectangle.
+ 
+-        Set the rectangle with eglSetSwapRectangleANDROID api.
++        Set the rectangle with eglSetSwapRectangleVIV api.
+ */
+ #ifndef gcdSUPPORT_SWAP_RECTANGLE
+ #   define gcdSUPPORT_SWAP_RECTANGLE            0
+ #endif
+ 
+ /*
+-    gcdDEFER_RESOLVES
+-
+-        Support deferred resolves for 3D apps.
+-*/
+-#ifndef gcdDEFER_RESOLVES
+-#   define gcdDEFER_RESOLVES                    0
+-#endif
+-
+-/*
+-    gcdCOPYBLT_OPTIMIZATION
+-
+-        Combine dirty areas resulting from Android's copyBlt.
+-*/
+-#ifndef gcdCOPYBLT_OPTIMIZATION
+-#   define gcdCOPYBLT_OPTIMIZATION              0
+-#endif
+-
+-/*
+     gcdGPU_LINEAR_BUFFER_ENABLED
+ 
+         Use linear buffer for GPU apps so HWC can do 2D composition.
+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 808fde0..03cb4d6 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     4651
++#define gcvVERSION_BUILD     6622
+ 
+ #define gcvVERSION_DATE      __DATE__
+ 
+diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h
+index 5ff0281..2a910e8 100644
+--- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h
++++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h
+@@ -552,6 +552,12 @@ gckVGHARDWARE_QueryPowerManagementState(
+     );
+ 
+ gceSTATUS
++gckVGHARDWARE_SetPowerManagement(
++    IN gckVGHARDWARE Hardware,
++    IN gctBOOL PowerManagement
++    );
++
++gceSTATUS
+ gckVGHARDWARE_SetPowerOffTimeout(
+     IN gckVGHARDWARE  Hardware,
+     IN gctUINT32    Timeout
+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 7168f0e..168987a 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
+@@ -304,6 +304,7 @@ gckGALDEVICE_Construct(
+     IN gctINT Signal,
+     IN gctUINT LogFileSize,
+     IN struct device *pdev,
++    IN gctINT PowerManagement,
+     OUT gckGALDEVICE *Device
+     )
+ {
+@@ -538,6 +539,9 @@ gckGALDEVICE_Construct(
+             device->kernels[gcvCORE_MAJOR]->hardware, FastClear, Compression
+             ));
+ 
++        gcmkONERROR(gckHARDWARE_SetPowerManagement(
++            device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
++            ));
+ 
+ #if COMMAND_PROCESSOR_VERSION == 1
+         /* Start the command queue. */
+@@ -593,6 +597,10 @@ gckGALDEVICE_Construct(
+             device
+             ));
+ 
++        gcmkONERROR(gckHARDWARE_SetPowerManagement(
++            device->kernels[gcvCORE_2D]->hardware, PowerManagement
++            ));
++
+ #if COMMAND_PROCESSOR_VERSION == 1
+         /* Start the command queue. */
+         gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_2D]->command));
+@@ -624,6 +632,11 @@ gckGALDEVICE_Construct(
+             device->coreMapping[gcvHARDWARE_VG] = gcvCORE_VG;
+         }
+ 
++
++        gcmkONERROR(gckVGHARDWARE_SetPowerManagement(
++            device->kernels[gcvCORE_VG]->vg->hardware,
++            PowerManagement
++            ));
+ #endif
+     }
+     else
+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 460f022..d488fc8 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
+@@ -169,6 +169,7 @@ gceSTATUS gckGALDEVICE_Construct(
+     IN gctINT Signal,
+     IN gctUINT LogFileSize,
+     IN struct device *pdev,
++    IN gctINT PowerManagement,
+     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 64cace1..183000d 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
+@@ -131,6 +131,9 @@ module_param(fastClear, int, 0644);
+ static int compression = -1;
+ module_param(compression, int, 0644);
+ 
++static int powerManagement = 1;
++module_param(powerManagement, int, 0644);
++
+ static int signal = 48;
+ module_param(signal, int, 0644);
+ 
+@@ -781,6 +784,9 @@ static int drv_init(struct device *pdev)
+     }
+ #endif
+ 
++    printk(KERN_INFO "Galcore version %d.%d.%d.%d\n",
++        gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD);
++
+     if (showArgs)
+     {
+         printk("galcore options:\n");
+@@ -810,7 +816,8 @@ static int drv_init(struct device *pdev)
+         printk("  signal            = %d\n",      signal);
+         printk("  baseAddress       = 0x%08lX\n", baseAddress);
+         printk("  physSize          = 0x%08lX\n", physSize);
+-	printk(" logFileSize         = %d KB \n",     logFileSize);
++        printk("  logFileSize       = %d KB \n",  logFileSize);
++        printk("  powerManagement   = %d\n",      powerManagement);
+ #if ENABLE_GPU_CLOCK_BY_DRIVER
+         printk("  coreClock       = %lu\n",     coreClock);
+ #endif
+@@ -833,6 +840,7 @@ static int drv_init(struct device *pdev)
+         bankSize, fastClear, compression, baseAddress, physSize, signal,
+         logFileSize,
+         pdev,
++        powerManagement,
+         &device
+         ));
+ 
+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 dfbc699..6a0295d 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
+@@ -55,6 +55,7 @@ const char * _PLATFORM = "\n\0$PLATFORM$Linux$\n";
+ #endif
+ 
+ #define USER_SIGNAL_TABLE_LEN_INIT  64
++#define gcdSUPPRESS_OOM_MESSAGE 1
+ 
+ #define MEMORY_LOCK(os) \
+     gcmkVERIFY_OK(gckOS_AcquireMutex( \
+@@ -85,6 +86,12 @@ const char * _PLATFORM = "\n\0$PLATFORM$Linux$\n";
+ #define gcmkNONPAGED_MEMROY_PROT(x) pgprot_noncached(x)
+ #endif
+ 
++#if gcdSUPPRESS_OOM_MESSAGE
++#define gcdNOWARN __GFP_NOWARN
++#else
++#define gcdNOWARN 0
++#endif
++
+ #define gcdINFINITE_TIMEOUT     (60 * 1000)
+ #define gcdDETECT_TIMEOUT       0
+ #define gcdDETECT_DMA_ADDRESS   1
+@@ -261,7 +268,7 @@ _CreateMdl(
+ 
+     gcmkHEADER_ARG("ProcessID=%d", ProcessID);
+ 
+-    mdl = (PLINUX_MDL)kzalloc(sizeof(struct _LINUX_MDL), GFP_KERNEL | __GFP_NOWARN);
++    mdl = (PLINUX_MDL)kzalloc(sizeof(struct _LINUX_MDL), GFP_KERNEL | gcdNOWARN);
+     if (mdl == gcvNULL)
+     {
+         gcmkFOOTER_NO();
+@@ -322,7 +329,7 @@ _CreateMdlMap(
+ 
+     gcmkHEADER_ARG("Mdl=0x%X ProcessID=%d", Mdl, ProcessID);
+ 
+-    mdlMap = (PLINUX_MDL_MAP)kmalloc(sizeof(struct _LINUX_MDL_MAP), GFP_KERNEL | __GFP_NOWARN);
++    mdlMap = (PLINUX_MDL_MAP)kmalloc(sizeof(struct _LINUX_MDL_MAP), GFP_KERNEL | gcdNOWARN);
+     if (mdlMap == gcvNULL)
+     {
+         gcmkFOOTER_NO();
+@@ -481,7 +488,7 @@ _NonContiguousAlloc(
+ 
+     size = NumPages * sizeof(struct page *);
+ 
+-    pages = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
++    pages = kmalloc(size, GFP_KERNEL | gcdNOWARN);
+ 
+     if (!pages)
+     {
+@@ -496,7 +503,7 @@ _NonContiguousAlloc(
+ 
+     for (i = 0; i < NumPages; i++)
+     {
+-        p = alloc_page(GFP_KERNEL | __GFP_HIGHMEM | __GFP_NOWARN);
++        p = alloc_page(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN);
+ 
+         if (!p)
+         {
+@@ -762,7 +769,7 @@ _AllocateIntegerId(
+     int result;
+ 
+ again:
+-    if (idr_pre_get(&Database->idr, GFP_KERNEL | __GFP_NOWARN) == 0)
++    if (idr_pre_get(&Database->idr, GFP_KERNEL | gcdNOWARN) == 0)
+     {
+         return gcvSTATUS_OUT_OF_MEMORY;
+     }
+@@ -954,7 +961,7 @@ gckOS_Construct(
+     gcmkVERIFY_ARGUMENT(Os != gcvNULL);
+ 
+     /* Allocate the gckOS object. */
+-    os = (gckOS) kmalloc(gcmSIZEOF(struct _gckOS), GFP_KERNEL | __GFP_NOWARN);
++    os = (gckOS) kmalloc(gcmSIZEOF(struct _gckOS), GFP_KERNEL | gcdNOWARN);
+ 
+     if (os == gcvNULL)
+     {
+@@ -1171,7 +1178,7 @@ _CreateKernelVirtualMapping(
+ 
+     if (Mdl->contiguous)
+     {
+-        pages = kmalloc(sizeof(struct page *) * numPages, GFP_KERNEL | __GFP_NOWARN);
++        pages = kmalloc(sizeof(struct page *) * numPages, GFP_KERNEL | gcdNOWARN);
+ 
+         if (!pages)
+         {
+@@ -1385,7 +1392,7 @@ gckOS_AllocateMemory(
+     }
+     else
+     {
+-        memory = (gctPOINTER) kmalloc(Bytes, GFP_KERNEL | __GFP_NOWARN);
++        memory = (gctPOINTER) kmalloc(Bytes, GFP_KERNEL | gcdNOWARN);
+     }
+ 
+     if (memory == gcvNULL)
+@@ -1904,7 +1911,7 @@ gckOS_AllocateNonPagedMemory(
+         addr = dma_alloc_coherent(gcvNULL,
+                 mdl->numPages * PAGE_SIZE,
+                 &mdl->dmaHandle,
+-                GFP_KERNEL | __GFP_NOWARN);
++                GFP_KERNEL | gcdNOWARN);
+     }
+ #else
+     size    = mdl->numPages * PAGE_SIZE;
+@@ -1915,7 +1922,7 @@ gckOS_AllocateNonPagedMemory(
+     if (page == gcvNULL)
+ #endif
+     {
+-        page = alloc_pages(GFP_KERNEL | __GFP_NOWARN, order);
++        page = alloc_pages(GFP_KERNEL | gcdNOWARN, order);
+     }
+ 
+     if (page == gcvNULL)
+@@ -3848,6 +3855,9 @@ gckOS_AllocatePagedMemoryEx(
+     gctSIZE_T bytes;
+     gctBOOL locked = gcvFALSE;
+     gceSTATUS status;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
++    gctPOINTER addr = gcvNULL;
++#endif
+ 
+     gcmkHEADER_ARG("Os=0x%X Contiguous=%d Bytes=%lu", Os, Contiguous, Bytes);
+ 
+@@ -3873,13 +3883,27 @@ gckOS_AllocatePagedMemoryEx(
+     {
+         /* Get contiguous pages, and suppress warning (stack dump) from kernel when
+            we run out of memory. */
+-        mdl->u.contiguousPages =
+-            alloc_pages(GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY, GetOrder(numPages));
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
++        addr =
++            alloc_pages_exact(numPages * PAGE_SIZE, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY);
+ 
++        mdl->u.contiguousPages = addr
++                               ? virt_to_page(addr)
++                               : gcvNULL;
++
++        mdl->exact = gcvTRUE;
++#else
++        mdl->u.contiguousPages =
++            alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, GetOrder(numPages));
++#endif
+         if (mdl->u.contiguousPages == gcvNULL)
+         {
+             mdl->u.contiguousPages =
+-                alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | __GFP_NOWARN, GetOrder(numPages));
++                alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, GetOrder(numPages));
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
++            mdl->exact = gcvFALSE;
++#endif
+         }
+     }
+     else
+@@ -4024,7 +4048,16 @@ gckOS_FreePagedMemory(
+ 
+     if (mdl->contiguous)
+     {
+-        __free_pages(mdl->u.contiguousPages, GetOrder(mdl->numPages));
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
++        if (mdl->exact == gcvTRUE)
++        {
++            free_pages_exact(page_address(mdl->u.contiguousPages), mdl->numPages * PAGE_SIZE);
++        }
++        else
++#endif
++        {
++            __free_pages(mdl->u.contiguousPages, GetOrder(mdl->numPages));
++        }
+     }
+     else
+     {
+@@ -4859,7 +4892,7 @@ gckOS_MapUserPointer(
+     gcmkVERIFY_ARGUMENT(Size > 0);
+     gcmkVERIFY_ARGUMENT(KernelPointer != gcvNULL);
+ 
+-    buf = kmalloc(Size, GFP_KERNEL | __GFP_NOWARN);
++    buf = kmalloc(Size, GFP_KERNEL | gcdNOWARN);
+     if (buf == gcvNULL)
+     {
+         gcmkTRACE(
+@@ -5274,7 +5307,7 @@ OnError:
+         MEMORY_MAP_LOCK(Os);
+ 
+         /* Allocate the Info struct. */
+-        info = (gcsPageInfo_PTR)kmalloc(sizeof(gcsPageInfo), GFP_KERNEL | __GFP_NOWARN);
++        info = (gcsPageInfo_PTR)kmalloc(sizeof(gcsPageInfo), GFP_KERNEL | gcdNOWARN);
+ 
+         if (info == gcvNULL)
+         {
+@@ -5283,7 +5316,7 @@ OnError:
+         }
+ 
+         /* Allocate the array of page addresses. */
+-        pages = (struct page **)kmalloc(pageCount * sizeof(struct page *), GFP_KERNEL | __GFP_NOWARN);
++        pages = (struct page **)kmalloc(pageCount * sizeof(struct page *), GFP_KERNEL | gcdNOWARN);
+ 
+         if (pages == gcvNULL)
+         {
+@@ -6502,7 +6535,7 @@ gckOS_CreateSemaphore(
+     gcmkVERIFY_ARGUMENT(Semaphore != gcvNULL);
+ 
+     /* Allocate the semaphore structure. */
+-    sem = (struct semaphore *)kmalloc(gcmSIZEOF(struct semaphore), GFP_KERNEL | __GFP_NOWARN);
++    sem = (struct semaphore *)kmalloc(gcmSIZEOF(struct semaphore), GFP_KERNEL | gcdNOWARN);
+     if (sem == gcvNULL)
+     {
+         gcmkONERROR(gcvSTATUS_OUT_OF_MEMORY);
+@@ -6942,6 +6975,7 @@ gckOS_SetGPUPower(
+ #else
+     		imx_gpc_power_up_pu(false);
+ #endif
++
+ 	}
+     /* TODO: Put your code here. */
+     gcmkFOOTER_NO();
+@@ -7255,7 +7289,7 @@ gckOS_CreateSignal(
+     gcmkVERIFY_ARGUMENT(Signal != gcvNULL);
+ 
+     /* Create an event structure. */
+-    signal = (gcsSIGNAL_PTR) kmalloc(sizeof(gcsSIGNAL), GFP_KERNEL | __GFP_NOWARN);
++    signal = (gcsSIGNAL_PTR) kmalloc(sizeof(gcsSIGNAL), GFP_KERNEL | gcdNOWARN);
+ 
+     if (signal == gcvNULL)
+     {
+@@ -8000,7 +8034,7 @@ gckOS_CreateSemaphoreVG(
+     do
+     {
+         /* Allocate the semaphore structure. */
+-    	newSemaphore = (struct semaphore *)kmalloc(gcmSIZEOF(struct semaphore), GFP_KERNEL | __GFP_NOWARN);
++    	newSemaphore = (struct semaphore *)kmalloc(gcmSIZEOF(struct semaphore), GFP_KERNEL | gcdNOWARN);
+     	if (newSemaphore == gcvNULL)
+     	{
+         	gcmkERR_BREAK(gcvSTATUS_OUT_OF_MEMORY);
+diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
+index e970477..006632c 100644
+--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
++++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
+@@ -54,6 +54,9 @@ typedef struct _LINUX_MDL
+     gctINT                  numPages;
+     gctINT                  pagedMem;
+     gctBOOL                 contiguous;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
++    gctBOOL                 exact;
++#endif
+     dma_addr_t              dmaHandle;
+     PLINUX_MDL_MAP          maps;
+     struct _LINUX_MDL *     prev;
+-- 
+1.8.3.2
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch b/recipes-kernel/linux/linux-unico-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
new file mode 100644
index 0000000..7316351
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
@@ -0,0 +1,43 @@
+From d8601292ae25e0af47aa4486055221ab44113f0e Mon Sep 17 00:00:00 2001
+From: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
+Date: Mon, 15 Jul 2013 15:34:54 -0500
+Subject: [PATCH] ENGR00271136 Fix build break when CONFIG_CLK_DEBUG is
+ disabled
+Organization: O.S. Systems Software LTDA.
+
+clk structure member name is defined only when CONFIG_CLK_DEBUG is enabled.
+Hence need to encapsulate the code with this config.
+
+Patch received from imx community:
+https://community.freescale.com/thread/308482
+
+Upstream-Status: Pending
+
+Signed-off-by: xiongweihuang
+Signed-off-by: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
+---
+ arch/arm/plat-mxc/clock.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/plat-mxc/clock.c b/arch/arm/plat-mxc/clock.c
+index 93347eb..1aa2664 100755
+--- a/arch/arm/plat-mxc/clock.c
++++ b/arch/arm/plat-mxc/clock.c
+@@ -58,12 +58,12 @@ static void __clk_disable(struct clk *clk)
+ {
+ 	if (clk == NULL || IS_ERR(clk))
+ 		return;
+-
++#ifdef CONFIG_CLK_DEBUG
+ 	if (!clk->usecount) {
+ 		WARN(1, "clock enable/disable mismatch! clk  %s\n", clk->name);
+ 		return;
+ 	}
+-
++#endif
+ 	if (!(--clk->usecount)) {
+ 		if (clk->disable)
+ 			clk->disable(clk);
+-- 
+1.8.4.rc3
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0005-ENGR00264275-GPU-Correct-suspend-resume-calling-afte.patch b/recipes-kernel/linux/linux-unico-3.0.35/0005-ENGR00264275-GPU-Correct-suspend-resume-calling-afte.patch
new file mode 100644
index 0000000..fa937e4
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0005-ENGR00264275-GPU-Correct-suspend-resume-calling-afte.patch
@@ -0,0 +1,61 @@
+From a845abe4589366d3e37b5a646be6337984074b28 Mon Sep 17 00:00:00 2001
+From: Loren HUANG <b02279@freescale.com>
+Date: Wed, 22 May 2013 17:21:30 +0800
+Subject: [PATCH 5/6] ENGR00264275 [GPU]Correct suspend/resume calling after
+ adding runtime pm.
+
+After enabling runtime pm the suspend/resume entry is changed.
+
+-Add new entry for suspend/resume in runtime pm frame work.
+-Add static define for all runtime pm function.
+
+Upstream-Status: Backport [3.5.7-1.0.0]
+
+Signed-off-by: Loren HUANG <b02279@freescale.com>
+Acked-by: Lily Zhang
+---
+ .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c   | 16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
+
+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 183000d..3632a6c 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
+@@ -1252,20 +1252,32 @@ static const struct of_device_id mxs_gpu_dt_ids[] = {
+ MODULE_DEVICE_TABLE(of, mxs_gpu_dt_ids);
+ 
+ #ifdef CONFIG_PM
+-int gpu_runtime_suspend(struct device *dev)
++static int gpu_runtime_suspend(struct device *dev)
+ {
+ 	release_bus_freq(BUS_FREQ_HIGH);
+ 	return 0;
+ }
+ 
+-int gpu_runtime_resume(struct device *dev)
++static int gpu_runtime_resume(struct device *dev)
+ {
+ 	request_bus_freq(BUS_FREQ_HIGH);
+ 	return 0;
+ }
+ 
++static int gpu_system_suspend(struct device *dev)
++{
++	pm_message_t state={0};
++	return gpu_suspend(to_platform_device(dev), state);
++}
++
++static int gpu_system_resume(struct device *dev)
++{
++	return gpu_resume(to_platform_device(dev));
++}
++
+ static const struct dev_pm_ops gpu_pm_ops = {
+ 	SET_RUNTIME_PM_OPS(gpu_runtime_suspend, gpu_runtime_resume, NULL)
++	SET_SYSTEM_SLEEP_PM_OPS(gpu_system_suspend, gpu_system_resume)
+ };
+ #endif
+ #endif
+-- 
+1.8.3.2
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch b/recipes-kernel/linux/linux-unico-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
new file mode 100644
index 0000000..cb20198
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
@@ -0,0 +1,98 @@
+From 538f4bb2f7a51f267395550a5be9f0ab2e426712 Mon Sep 17 00:00:00 2001
+From: Erik Boto <erik.boto@pelagicore.com>
+Date: Tue, 16 Jul 2013 12:06:05 -0500
+Subject: [PATCH] ENGR00271359 Add Multi-touch support
+Organization: O.S. Systems Software LTDA.
+
+The previous behavior of the driver did not work properly with Qt5
+QtQuick multi touch-point gestures, due to how touch-points are
+reported when removing a touch-point. My interpretation of the
+available documentation [1] was that the driver should report all
+touch-points between SYN_REPORTs, but it is not explicitly stated so.
+I've found another mail-thread [2] where the creator of the protocol
+states:
+
+"The protocol defines a generic way of sending a variable amount of
+contacts. The contact count is obtained by counting the number of
+non-empty finger packets between SYN_REPORT events."-Henrik Rydberg
+
+I think this verifies my assumption that all touch-points should be
+reported between SYN_REPORTs, otherwise it can not be used to obtain
+the count.
+
+[1] https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt
+[2] http://lists.x.org/archives/xorg-devel/2010-March/006466.html
+
+Upstream-Status: Pending
+
+Signed-off-by: Erik Boto <erik.boto@pelagicore.com>
+Signed-off-by: Mahesh Mahadevan <Mahesh.Mahadevan@freescale.com>
+(cherry picked from commit 7cba001c5a502680f6dbf902821726779a9c9287)
+---
+ drivers/input/touchscreen/egalax_ts.c | 36 +++++++++++++++++------------------
+ 1 file changed, 18 insertions(+), 18 deletions(-)
+
+diff --git a/drivers/input/touchscreen/egalax_ts.c b/drivers/input/touchscreen/egalax_ts.c
+index 0b6cde7..271f820 100644
+--- a/drivers/input/touchscreen/egalax_ts.c
++++ b/drivers/input/touchscreen/egalax_ts.c
+@@ -133,7 +133,6 @@ retry:
+ 	}
+ 
+ 	if (down) {
+-		/* should also report old pointers */
+ 		events[id].valid = valid;
+ 		events[id].status = down;
+ 		events[id].x = x;
+@@ -144,23 +143,6 @@ retry:
+ 		input_report_abs(input_dev, ABS_Y, y);
+ 		input_event(data->input_dev, EV_KEY, BTN_TOUCH, 1);
+ 		input_report_abs(input_dev, ABS_PRESSURE, 1);
+-#else
+-		for (i = 0; i < MAX_SUPPORT_POINTS; i++) {
+-			if (!events[i].valid)
+-				continue;
+-			dev_dbg(&client->dev, "report id:%d valid:%d x:%d y:%d",
+-				i, valid, x, y);
+-
+-			input_report_abs(input_dev,
+-					 ABS_MT_TRACKING_ID, i);
+-			input_report_abs(input_dev,
+-					 ABS_MT_TOUCH_MAJOR, 1);
+-			input_report_abs(input_dev,
+-					 ABS_MT_POSITION_X, events[i].x);
+-			input_report_abs(input_dev,
+-					 ABS_MT_POSITION_Y, events[i].y);
+-			input_mt_sync(input_dev);
+-		}
+ #endif
+ 	} else {
+ 		dev_dbg(&client->dev, "release id:%d\n", id);
+@@ -176,6 +158,24 @@ retry:
+ #endif
+ 	}
+ 
++#ifndef CONFIG_TOUCHSCREEN_EGALAX_SINGLE_TOUCH
++	/* report all pointers */
++	for (i = 0; i < MAX_SUPPORT_POINTS; i++) {
++		if (!events[i].valid)
++			continue;
++		dev_dbg(&client->dev, "report id:%d valid:%d x:%d y:%d",
++			i, valid, x, y);
++			input_report_abs(input_dev,
++				 ABS_MT_TRACKING_ID, i);
++		input_report_abs(input_dev,
++				 ABS_MT_TOUCH_MAJOR, 1);
++		input_report_abs(input_dev,
++				 ABS_MT_POSITION_X, events[i].x);
++		input_report_abs(input_dev,
++				 ABS_MT_POSITION_Y, events[i].y);
++		input_mt_sync(input_dev);
++	}
++#endif
+ 	input_sync(input_dev);
+ 	return IRQ_HANDLED;
+ }
+-- 
+1.8.4.rc3
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0006-Add-support-for-DVI-monitors.patch b/recipes-kernel/linux/linux-unico-3.0.35/0006-Add-support-for-DVI-monitors.patch
new file mode 100644
index 0000000..00a6b5c
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0006-Add-support-for-DVI-monitors.patch
@@ -0,0 +1,227 @@
+From 3e6441d113f72b412081a2c87f39011e4c253a35 Mon Sep 17 00:00:00 2001
+From: Robert Winkler <robert.winkler@boundarydevices.com>
+Date: Fri, 19 Jul 2013 19:00:41 -0700
+Subject: [PATCH] Add support for DVI monitors
+Organization: O.S. Systems Software LTDA.
+
+Upstream-Status: Pending
+
+Signed-off-by: Robert Winkler <robert.winkler@boundarydevices.com>
+---
+ arch/arm/plat-mxc/include/mach/mxc_hdmi.h |  7 +++
+ drivers/video/mxc_hdmi.c                  | 98 +++++++++++++------------------
+ 2 files changed, 49 insertions(+), 56 deletions(-)
+
+diff --git a/arch/arm/plat-mxc/include/mach/mxc_hdmi.h b/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
+index 94f7638..af59c62 100644
+--- a/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
++++ b/arch/arm/plat-mxc/include/mach/mxc_hdmi.h
+@@ -605,6 +605,10 @@ enum {
+ 	HDMI_IH_MUTE_PHY_STAT0_TX_PHY_LOCK = 0x2,
+ 	HDMI_IH_MUTE_PHY_STAT0_HPD = 0x1,
+ 
++/* IH and IH_MUTE convenience macro RX_SENSE | HPD*/
++	HDMI_DVI_IH_STAT = 0x3D,
++
++
+ /* IH_AHBDMAAUD_STAT0 field values */
+ 	HDMI_IH_AHBDMAAUD_STAT0_ERROR = 0x20,
+ 	HDMI_IH_AHBDMAAUD_STAT0_LOST = 0x10,
+@@ -903,6 +907,9 @@ enum {
+ 	HDMI_PHY_HPD = 0x02,
+ 	HDMI_PHY_TX_PHY_LOCK = 0x01,
+ 
++/* HDMI STAT convenience RX_SENSE | HPD */
++	HDMI_DVI_STAT = 0xF2,
++
+ /* PHY_I2CM_SLAVE_ADDR field values */
+ 	HDMI_PHY_I2CM_SLAVE_ADDR_PHY_GEN2 = 0x69,
+ 	HDMI_PHY_I2CM_SLAVE_ADDR_HEAC_PHY = 0x49,
+diff --git a/drivers/video/mxc_hdmi.c b/drivers/video/mxc_hdmi.c
+index c5069aa..544f352 100644
+--- a/drivers/video/mxc_hdmi.c
++++ b/drivers/video/mxc_hdmi.c
+@@ -180,7 +180,6 @@ struct mxc_hdmi {
+ 	bool dft_mode_set;
+ 	char *dft_mode_str;
+ 	int default_bpp;
+-	u8 latest_intr_stat;
+ 	bool irq_enabled;
+ 	spinlock_t irq_lock;
+ 	bool phy_enabled;
+@@ -1996,58 +1995,48 @@ static void hotplug_worker(struct work_struct *work)
+ 	struct delayed_work *delay_work = to_delayed_work(work);
+ 	struct mxc_hdmi *hdmi =
+ 		container_of(delay_work, struct mxc_hdmi, hotplug_work);
+-	u32 phy_int_stat, phy_int_pol, phy_int_mask;
+-	u8 val;
++	u32 hdmi_phy_stat0, hdmi_phy_pol0, hdmi_phy_mask0;
+ 	unsigned long flags;
+ 	char event_string[32];
+ 	char *envp[] = { event_string, NULL };
+ 
+-	phy_int_stat = hdmi->latest_intr_stat;
+-	phy_int_pol = hdmi_readb(HDMI_PHY_POL0);
+ 
+-	dev_dbg(&hdmi->pdev->dev, "phy_int_stat=0x%x, phy_int_pol=0x%x\n",
+-			phy_int_stat, phy_int_pol);
++	hdmi_phy_stat0 = hdmi_readb(HDMI_PHY_STAT0);
++	hdmi_phy_pol0 = hdmi_readb(HDMI_PHY_POL0);
++
++	dev_dbg(&hdmi->pdev->dev, "hdmi_phy_stat0=0x%x, hdmi_phy_pol0=0x%x\n",
++			hdmi_phy_stat0, hdmi_phy_pol0);
++
++	/* Make HPD intr active low to capture unplug event or
++	 * active high to capture plugin event */
++	hdmi_writeb((HDMI_DVI_STAT & ~hdmi_phy_stat0), HDMI_PHY_POL0);
+ 
+ 	/* check cable status */
+-	if (phy_int_stat & HDMI_IH_PHY_STAT0_HPD) {
+-		/* cable connection changes */
+-		if (phy_int_pol & HDMI_PHY_HPD) {
+-			/* Plugin event */
+-			dev_dbg(&hdmi->pdev->dev, "EVENT=plugin\n");
+-			mxc_hdmi_cable_connected(hdmi);
+-
+-			/* Make HPD intr active low to capture unplug event */
+-			val = hdmi_readb(HDMI_PHY_POL0);
+-			val &= ~HDMI_PHY_HPD;
+-			hdmi_writeb(val, HDMI_PHY_POL0);
+-
+-			sprintf(event_string, "EVENT=plugin");
+-			kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
++	if (hdmi_phy_stat0 & HDMI_DVI_STAT) {
++		/* Plugin event */
++		dev_dbg(&hdmi->pdev->dev, "EVENT=plugin\n");
++		mxc_hdmi_cable_connected(hdmi);
++
++		sprintf(event_string, "EVENT=plugin");
++		kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
+ #ifdef CONFIG_MXC_HDMI_CEC
+-			mxc_hdmi_cec_handle(0x80);
++		mxc_hdmi_cec_handle(0x80);
+ #endif
+-			hdmi_set_cable_state(1);
+-
+-		} else if (!(phy_int_pol & HDMI_PHY_HPD)) {
+-			/* Plugout event */
+-			dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n");
+-			hdmi_set_cable_state(0);
+-			mxc_hdmi_abort_stream();
+-			mxc_hdmi_cable_disconnected(hdmi);
++		hdmi_set_cable_state(1);
+ 
+-			/* Make HPD intr active high to capture plugin event */
+-			val = hdmi_readb(HDMI_PHY_POL0);
+-			val |= HDMI_PHY_HPD;
+-			hdmi_writeb(val, HDMI_PHY_POL0);
++	} else {
++		/* Plugout event */
++		dev_dbg(&hdmi->pdev->dev, "EVENT=plugout\n");
++		hdmi_set_cable_state(0);
++		mxc_hdmi_abort_stream();
++		mxc_hdmi_cable_disconnected(hdmi);
+ 
+-			sprintf(event_string, "EVENT=plugout");
+-			kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
++		sprintf(event_string, "EVENT=plugout");
++		kobject_uevent_env(&hdmi->pdev->dev.kobj, KOBJ_CHANGE, envp);
+ #ifdef CONFIG_MXC_HDMI_CEC
+-			mxc_hdmi_cec_handle(0x100);
++		mxc_hdmi_cec_handle(0x100);
+ #endif
+ 
+-		} else
+-			dev_dbg(&hdmi->pdev->dev, "EVENT=none?\n");
+ 	}
+ 
+ 	/* Lock here to ensure full powerdown sequence
+@@ -2055,12 +2044,12 @@ static void hotplug_worker(struct work_struct *work)
+ 	spin_lock_irqsave(&hdmi->irq_lock, flags);
+ 
+ 	/* Re-enable HPD interrupts */
+-	phy_int_mask = hdmi_readb(HDMI_PHY_MASK0);
+-	phy_int_mask &= ~HDMI_PHY_HPD;
+-	hdmi_writeb(phy_int_mask, HDMI_PHY_MASK0);
++	hdmi_phy_mask0 = hdmi_readb(HDMI_PHY_MASK0);
++	hdmi_phy_mask0 &= ~HDMI_DVI_STAT;
++	hdmi_writeb(hdmi_phy_mask0, HDMI_PHY_MASK0);
+ 
+ 	/* Unmute interrupts */
+-	hdmi_writeb(~HDMI_IH_MUTE_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0);
++	hdmi_writeb(~HDMI_DVI_IH_STAT, HDMI_IH_MUTE_PHY_STAT0);
+ 
+ 	if (hdmi_readb(HDMI_IH_FC_STAT2) & HDMI_IH_FC_STAT2_OVERFLOW_MASK)
+ 		mxc_hdmi_clear_overflow();
+@@ -2086,7 +2075,7 @@ static void hdcp_hdp_worker(struct work_struct *work)
+ static irqreturn_t mxc_hdmi_hotplug(int irq, void *data)
+ {
+ 	struct mxc_hdmi *hdmi = data;
+-	u8 val, intr_stat;
++	u8 val;
+ 	unsigned long flags;
+ 
+ 	spin_lock_irqsave(&hdmi->irq_lock, flags);
+@@ -2108,25 +2097,22 @@ static irqreturn_t mxc_hdmi_hotplug(int irq, void *data)
+ 	 * HDMI registers.
+ 	 */
+ 	/* Capture status - used in hotplug_worker ISR */
+-	intr_stat = hdmi_readb(HDMI_IH_PHY_STAT0);
+-
+-	if (intr_stat & HDMI_IH_PHY_STAT0_HPD) {
++	if (hdmi_readb(HDMI_IH_PHY_STAT0) & HDMI_DVI_IH_STAT) {
+ 
+ 		dev_dbg(&hdmi->pdev->dev, "Hotplug interrupt received\n");
+-		hdmi->latest_intr_stat = intr_stat;
+ 
+ 		/* Mute interrupts until handled */
+ 
+ 		val = hdmi_readb(HDMI_IH_MUTE_PHY_STAT0);
+-		val |= HDMI_IH_MUTE_PHY_STAT0_HPD;
++		val |= HDMI_DVI_IH_STAT;
+ 		hdmi_writeb(val, HDMI_IH_MUTE_PHY_STAT0);
+ 
+ 		val = hdmi_readb(HDMI_PHY_MASK0);
+-		val |= HDMI_PHY_HPD;
++		val |= HDMI_DVI_STAT;
+ 		hdmi_writeb(val, HDMI_PHY_MASK0);
+ 
+ 		/* Clear Hotplug interrupts */
+-		hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
++		hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
+ 
+ 		schedule_delayed_work(&(hdmi->hotplug_work), msecs_to_jiffies(20));
+ 	}
+@@ -2282,13 +2268,13 @@ static void mxc_hdmi_fb_registered(struct mxc_hdmi *hdmi)
+ 		    HDMI_PHY_I2CM_CTLINT_ADDR);
+ 
+ 	/* enable cable hot plug irq */
+-	hdmi_writeb((u8)~HDMI_PHY_HPD, HDMI_PHY_MASK0);
++	hdmi_writeb((u8)~HDMI_DVI_STAT, HDMI_PHY_MASK0);
+ 
+ 	/* Clear Hotplug interrupts */
+-	hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
++	hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
+ 
+ 	/* Unmute interrupts */
+-	hdmi_writeb(~HDMI_IH_MUTE_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0);
++	hdmi_writeb(~HDMI_DVI_IH_STAT, HDMI_IH_MUTE_PHY_STAT0);
+ 
+ 	hdmi->fb_reg = true;
+ 
+@@ -2522,10 +2508,10 @@ static int mxc_hdmi_disp_init(struct mxc_dispdrv_handle *disp,
+ 
+ 	/* Configure registers related to HDMI interrupt
+ 	 * generation before registering IRQ. */
+-	hdmi_writeb(HDMI_PHY_HPD, HDMI_PHY_POL0);
++	hdmi_writeb(HDMI_DVI_STAT, HDMI_PHY_POL0);
+ 
+ 	/* Clear Hotplug interrupts */
+-	hdmi_writeb(HDMI_IH_PHY_STAT0_HPD, HDMI_IH_PHY_STAT0);
++	hdmi_writeb(HDMI_DVI_IH_STAT, HDMI_IH_PHY_STAT0);
+ 
+ 	hdmi->nb.notifier_call = mxc_hdmi_fb_event;
+ 	ret = fb_register_client(&hdmi->nb);
+-- 
+1.8.4.rc3
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0006-ENGR00265130-gpu-Correct-section-mismatch-in-gpu-ker.patch b/recipes-kernel/linux/linux-unico-3.0.35/0006-ENGR00265130-gpu-Correct-section-mismatch-in-gpu-ker.patch
new file mode 100644
index 0000000..43407a1
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0006-ENGR00265130-gpu-Correct-section-mismatch-in-gpu-ker.patch
@@ -0,0 +1,60 @@
+From 376d63e9b981118f83646a836ce6626e541de1a3 Mon Sep 17 00:00:00 2001
+From: Loren HUANG <b02279@freescale.com>
+Date: Fri, 31 May 2013 18:29:58 +0800
+Subject: [PATCH 6/6] ENGR00265130 gpu:Correct section mismatch in gpu kernel
+ driver
+
+-Remove the __devinit for suspend/resume function.
+-Replace __devinit to __devexit for remove function.
+
+Upstream-Status: Backport [3.5.7-1.0.0]
+
+Signed-off-by: Loren HUANG <b02279@freescale.com>
+Acked-by: Lily Zhang
+---
+ drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+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 3632a6c..9d9dc57 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
+@@ -1111,7 +1111,7 @@ static int __devinit gpu_probe(struct platform_device *pdev)
+     return ret;
+ }
+ 
+-static int __devinit gpu_remove(struct platform_device *pdev)
++static int __devexit gpu_remove(struct platform_device *pdev)
+ {
+     gcmkHEADER();
+ #if gcdENABLE_FSCALE_VAL_ADJUST
+@@ -1123,7 +1123,7 @@ static int __devinit gpu_remove(struct platform_device *pdev)
+     return 0;
+ }
+ 
+-static int __devinit gpu_suspend(struct platform_device *dev, pm_message_t state)
++static int gpu_suspend(struct platform_device *dev, pm_message_t state)
+ {
+     gceSTATUS status;
+     gckGALDEVICE device;
+@@ -1173,7 +1173,7 @@ static int __devinit gpu_suspend(struct platform_device *dev, pm_message_t state
+     return 0;
+ }
+ 
+-static int __devinit gpu_resume(struct platform_device *dev)
++static int gpu_resume(struct platform_device *dev)
+ {
+     gceSTATUS status;
+     gckGALDEVICE device;
+@@ -1284,7 +1284,7 @@ static const struct dev_pm_ops gpu_pm_ops = {
+ 
+ static struct platform_driver gpu_driver = {
+     .probe      = gpu_probe,
+-    .remove     = gpu_remove,
++    .remove     = __devexit_p(gpu_remove),
+ 
+     .suspend    = gpu_suspend,
+     .resume     = gpu_resume,
+-- 
+1.8.3.2
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch b/recipes-kernel/linux/linux-unico-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
new file mode 100644
index 0000000..d02aa40
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
@@ -0,0 +1,38 @@
+From cd31abbe08372fa870fac78ae845edd4859f8835 Mon Sep 17 00:00:00 2001
+From: Fabio Estevam <fabio.estevam@freescale.com>
+Date: Sat, 28 Sep 2013 18:46:18 -0300
+Subject: [PATCH] ARM: mach-mx6: board-mx6q_sabresd: Register SDHC3 first
+Organization: O.S. Systems Software LTDA.
+
+On sabresd boards we boot from SDHC3, so let's register it as mmc0.
+
+Currently eMMC is mmc0 and mmc1 can be SDHC3 or SDHC2 (if present).
+
+Registering SDHC3 is safer as we can always find the rootfs.
+
+Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
+---
+ arch/arm/mach-mx6/board-mx6q_sabresd.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/arch/arm/mach-mx6/board-mx6q_sabresd.c b/arch/arm/mach-mx6/board-mx6q_sabresd.c
+index 3f9a845..4e6b323 100644
+--- a/arch/arm/mach-mx6/board-mx6q_sabresd.c
++++ b/arch/arm/mach-mx6/board-mx6q_sabresd.c
+@@ -1847,12 +1847,9 @@ static void __init mx6_sabresd_board_init(void)
+ 
+ 	imx6q_add_pm_imx(0, &mx6q_sabresd_pm_data);
+ 
+-	/* Move sd4 to first because sd4 connect to emmc.
+-	   Mfgtools want emmc is mmcblk0 and other sd card is mmcblk1.
+-	*/
++	imx6q_add_sdhci_usdhc_imx(2, &mx6q_sabresd_sd3_data);
+ 	imx6q_add_sdhci_usdhc_imx(3, &mx6q_sabresd_sd4_data);
+ 	imx6q_add_sdhci_usdhc_imx(1, &mx6q_sabresd_sd2_data);
+-	imx6q_add_sdhci_usdhc_imx(2, &mx6q_sabresd_sd3_data);
+ 	imx_add_viv_gpu(&imx6_gpu_data, &imx6q_gpu_pdata);
+ 	imx6q_sabresd_init_usb();
+ 	/* SATA is not supported by MX6DL/Solo */
+-- 
+1.8.4.rc3
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/defconfig b/recipes-kernel/linux/linux-unico-3.0.35/defconfig
new file mode 100644
index 0000000..62efa5a
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico-3.0.35/defconfig
@@ -0,0 +1,3149 @@
+#
+# 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 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_PCI_QUIRKS=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_MXC_MLB=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_ESAI=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_ELCDIF=y
+CONFIG_IMX_HAVE_PLATFORM_IMX_EPDC=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_MACH_IMX_BLUETOOTH_RFKILL is not set
+CONFIG_ARCH_MX6Q=y
+CONFIG_FORCE_MAX_ZONEORDER=14
+CONFIG_SOC_IMX6Q=y
+CONFIG_MACH_MX6Q_ARM2=y
+# CONFIG_MACH_MX6SL_ARM2 is not set
+# CONFIG_MACH_MX6SL_EVK is not set
+# CONFIG_MACH_MX6Q_SABRELITE is not set
+# CONFIG_MACH_MX6Q_SABRESD is not set
+# CONFIG_MACH_MX6Q_SABREAUTO is not set
+# CONFIG_MACH_MX6Q_HDMIDONGLE is not set
+CONFIG_SOM_SECO=y
+# CONFIG_MACH_MX6_SECO_Q7 is not set
+# CONFIG_MACH_MX6_SECO_UQ7 is not set
+CONFIG_MACH_MX6_SECO_UDOO=y
+
+#
+# MX6 Options:
+#
+
+#
+# UDOO Option
+#
+# CONFIG_UDOO_DUAL_REVB is not set
+CONFIG_UDOO_SATA_AHCI=y
+CONFIG_UDOO_SND_SOC_IMX_AC97_VT1613=y
+
+#
+# External i.MX6 Pinmuxing options
+#
+
+#
+# Testing...
+#
+# CONFIG_SPDIF_SUPPORT is not set
+CONFIG_IMX_PCIE=y
+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_MX6_ENET_IRQ_TO_GPIO 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 is not set
+# CONFIG_ARM_ERRATA_753970 is not set
+CONFIG_ARM_ERRATA_754322=y
+# CONFIG_ARM_ERRATA_754327 is not set
+CONFIG_ARM_GIC=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+CONFIG_PCI=y
+CONFIG_PCI_SYSCALL=y
+CONFIG_ARCH_SUPPORTS_MSI=y
+# CONFIG_PCI_MSI is not set
+# CONFIG_PCI_STUB is not set
+# CONFIG_PCI_IOV is not set
+# CONFIG_PCIEPORTBUS is not set
+# CONFIG_PCCARD is not set
+# CONFIG_ARM_ERRATA_764369 is not set
+# CONFIG_PL310_ERRATA_769419 is not set
+
+#
+# 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 is not set
+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_PCH_CAN is not set
+# 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=y
+CONFIG_MAC80211_HAS_RC=y
+# CONFIG_MAC80211_RC_PID is not set
+CONFIG_MAC80211_RC_MINSTREL=y
+CONFIG_MAC80211_RC_MINSTREL_HT=y
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
+# CONFIG_MAC80211_MESH is not set
+# CONFIG_MAC80211_LEDS is not set
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_MENU 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_INTEL_VR_NOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# 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_DENALI is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_RICOH is not set
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_CAFE is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+CONFIG_MTD_NAND_GPMI_NAND=y
+# 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_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# 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_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM 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_PHANTOM is not set
+# CONFIG_INTEL_MID_PTI is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_HP_ILO 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_PCH_PHUB is not set
+CONFIG_MXS_PERFMON=y
+CONFIG_UDOO_ARD=y
+# 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_CB710_CORE 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_SCSI_CXGB3_ISCSI is not set
+# CONFIG_SCSI_CXGB4_ISCSI is not set
+# CONFIG_SCSI_BNX2_ISCSI is not set
+# CONFIG_SCSI_BNX2X_FCOE is not set
+# CONFIG_BE2ISCSI is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_HPSA is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_3W_SAS is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_MVSAS is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_MPT2SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_FCOE is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_PMCRAID is not set
+# CONFIG_SCSI_PM8001 is not set
+# CONFIG_SCSI_SRP is not set
+# CONFIG_SCSI_BFA_FC 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=y
+CONFIG_SATA_AHCI_PLATFORM=y
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_SATA_ACARD_AHCI is not set
+# CONFIG_SATA_SIL24 is not set
+CONFIG_ATA_SFF=y
+
+#
+# SFF controllers with custom DMA interface
+#
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_SX4 is not set
+CONFIG_ATA_BMDMA=y
+
+#
+# SATA SFF controllers with BMDMA
+#
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+
+#
+# PATA SFF controllers with BMDMA
+#
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARASAN_CF is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATIIXP is not set
+# CONFIG_PATA_ATP867X is not set
+# CONFIG_PATA_CMD64X is not set
+# CONFIG_PATA_CS5520 is not set
+# CONFIG_PATA_CS5530 is not set
+# CONFIG_PATA_CS5536 is not set
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_PATA_HPT366 is not set
+# CONFIG_PATA_HPT37X is not set
+# CONFIG_PATA_HPT3X2N is not set
+# CONFIG_PATA_HPT3X3 is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_IT821X is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NINJA32 is not set
+# CONFIG_PATA_NS87415 is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RDC is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SCH is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_TOSHIBA is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+
+#
+# PIO-only SFF controllers
+#
+# CONFIG_PATA_CMD640_PCI is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_PLATFORM is not set
+# CONFIG_PATA_RZ1000 is not set
+
+#
+# Generic fallback / legacy drivers
+#
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_LEGACY is not set
+# CONFIG_MD is not set
+# CONFIG_TARGET_CORE is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_FIREWIRE_NOSY is not set
+# CONFIG_I2O 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_ARCNET 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_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM 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_NET_TULIP is not set
+# CONFIG_HP100 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_NET_PCI 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_ATL2 is not set
+# CONFIG_FTMAC100 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+CONFIG_WLAN=y
+# CONFIG_LIBERTAS_THINFIRM is not set
+# CONFIG_ATMEL is not set
+# CONFIG_AT76C50X_USB is not set
+# CONFIG_PRISM54 is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_USB_NET_RNDIS_WLAN is not set
+# CONFIG_RTL8180 is not set
+# CONFIG_RTL8187 is not set
+# CONFIG_ADM8211 is not set
+# CONFIG_MAC80211_HWSIM is not set
+# CONFIG_MWL8K is not set
+CONFIG_ATH_COMMON=m
+# CONFIG_ATH_DEBUG is not set
+# CONFIG_ATH5K is not set
+# CONFIG_ATH5K_PCI is not set
+# CONFIG_ATH9K is not set
+# CONFIG_ATH9K_HTC is not set
+# CONFIG_CARL9170 is not set
+CONFIG_ATH6KL=m
+# CONFIG_ATH6KL_DEBUG is not set
+# CONFIG_B43 is not set
+# CONFIG_B43LEGACY is not set
+CONFIG_HOSTAP=y
+# CONFIG_HOSTAP_FIRMWARE is not set
+# CONFIG_HOSTAP_PLX is not set
+# CONFIG_HOSTAP_PCI is not set
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_IWLAGN is not set
+# CONFIG_IWL4965 is not set
+# CONFIG_IWL3945 is not set
+# CONFIG_IWM is not set
+# CONFIG_LIBERTAS is not set
+# CONFIG_HERMES is not set
+# CONFIG_P54_COMMON is not set
+CONFIG_RT2X00=y
+# CONFIG_RT2400PCI is not set
+# CONFIG_RT2500PCI is not set
+# CONFIG_RT61PCI is not set
+# CONFIG_RT2800PCI is not set
+# CONFIG_RT2500USB is not set
+# CONFIG_RT73USB is not set
+CONFIG_RT2800USB=y
+CONFIG_RT2800USB_RT33XX=y
+CONFIG_RT2800USB_RT35XX=y
+CONFIG_RT2800USB_RT53XX=y
+CONFIG_RT2800USB_UNKNOWN=y
+CONFIG_RT2800_LIB=y
+CONFIG_RT2X00_LIB_USB=y
+CONFIG_RT2X00_LIB=y
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_CRYPTO=y
+CONFIG_RT2X00_LIB_LEDS=y
+# CONFIG_RT2X00_DEBUG is not set
+# CONFIG_RTL8192CE is not set
+# CONFIG_RTL8192SE is not set
+# CONFIG_RTL8192CU is not set
+# CONFIG_WL1251 is not set
+# CONFIG_WL12XX_MENU is not set
+# CONFIG_ZD1211RW 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_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_VMXNET3 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=y
+# 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=y
+# 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_TSC2006=y
+# CONFIG_TOUCHSCREEN_TSC2004 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_PCIPS2 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_NOZOMI 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_MFD_HSU is not set
+CONFIG_SERIAL_IMX=y
+CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+# 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_PCH_UART 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_APPLICOM is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+# 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 is not set
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=m
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# PC SMBus host controller drivers
+#
+# CONFIG_I2C_ALI1535 is not set
+# CONFIG_I2C_ALI1563 is not set
+# CONFIG_I2C_ALI15X3 is not set
+# CONFIG_I2C_AMD756 is not set
+# CONFIG_I2C_AMD8111 is not set
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_ISCH is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+
+#
+# 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_INTEL_MID is not set
+# 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
+# CONFIG_I2C_EG20T 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_TOPCLIFF_PCH 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
+# CONFIG_GPIO_VX855 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:
+#
+# CONFIG_GPIO_BT8XX is not set
+# CONFIG_GPIO_ML_IOH is not set
+# CONFIG_GPIO_RDC321X is not set
+
+#
+# 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=y
+# 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_I5K_AMB 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=y
+# 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_SIS5595 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_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 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
+# CONFIG_ALIM7101_WDT is not set
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+
+#
+# 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_TIMBERDALE is not set
+# CONFIG_LPC_SCH is not set
+# CONFIG_MFD_RDC321X is not set
+# CONFIG_MFD_JANZ_CMODIO is not set
+# CONFIG_MFD_VX855 is not set
+# CONFIG_MFD_WL1273_CORE is not set
+# CONFIG_MFD_TPS65910 is not set
+CONFIG_MFD_MAX17135=y
+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_REGULATOR_MAX17135=y
+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_VIDEOBUF2_CORE=y
+CONFIG_VIDEOBUF2_MEMOPS=y
+CONFIG_VIDEOBUF2_VMALLOC=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=y
+CONFIG_VIDEO_MXC_CAMERA=y
+
+#
+# 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 is not set
+# CONFIG_MXC_CAMERA_OV5640 is not set
+# CONFIG_MXC_CAMERA_OV8820_MIPI is not set
+# CONFIG_MXC_CAMERA_OV5642 is not set
+# CONFIG_MXC_TVIN_ADV7180 is not set
+CONFIG_MXC_CAMERA_OV5640_MIPI=y
+# CONFIG_MXC_MIPI_CSI2_TVIN_ADV7280 is not set
+CONFIG_MXC_CAMERA_SENSOR_CLK=y
+CONFIG_MXC_IPU_DEVICE_QUEUE_SDC=y
+# CONFIG_MXC_IPU_PRP_VF_SDC is not set
+CONFIG_MXC_IPU_PRP_ENC=y
+CONFIG_MXC_IPU_CSI_ENC=y
+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_ZORAN is not set
+# CONFIG_VIDEO_SAA7134 is not set
+# CONFIG_VIDEO_MXB is not set
+# CONFIG_VIDEO_HEXIUM_ORION is not set
+# CONFIG_VIDEO_HEXIUM_GEMINI is not set
+# CONFIG_VIDEO_TIMBERDALE is not set
+# CONFIG_VIDEO_CAFE_CCIC 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=y
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+# CONFIG_USB_GSPCA 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_VGA_ARB=y
+CONFIG_VGA_ARB_MAX_GPUS=16
+CONFIG_DRM=m
+CONFIG_DRM_VIVANTE=m
+# CONFIG_STUB_POULSBO is not set
+# 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_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_ARMCLCD is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_S3 is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_VT8623 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+# CONFIG_FB_CARMINE 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_MB862XX 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
+# CONFIG_FORCE_HDMI_FIXED_EDID is not set
+# CONFIG_FORCE_HDMI_HP_DETECT is not set
+
+#
+# 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_PCI=y
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AW2 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_OXYGEN is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_CS5535AUDIO is not set
+# CONFIG_SND_CTXFI is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_INDIGOIOX is not set
+# CONFIG_SND_INDIGODJX is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_LOLA is not set
+# CONFIG_SND_LX6464ES is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VIRTUOSO is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI 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_CS42888=y
+# CONFIG_SND_SOC_IMX_SI4763 is not set
+CONFIG_SND_SOC_IMX_SPDIF=y
+CONFIG_SND_SOC_IMX_HDMI=y
+CONFIG_SND_SOC_IMX_AC97_VT1613=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_CS42888=y
+CONFIG_SND_SOC_WM8962=y
+CONFIG_SND_SOC_VT1613=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=y
+# CONFIG_HID_ACRUX is not set
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+# CONFIG_HID_PRODIKEYS is not set
+CONFIG_HID_CYPRESS=y
+# CONFIG_HID_DRAGONRISE is not set
+# CONFIG_HID_EMS_FF is not set
+# CONFIG_HID_ELECOM is not set
+CONFIG_HID_EZKEY=y
+# 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=y
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+# CONFIG_HID_LCPOWER is not set
+CONFIG_HID_LOGITECH=y
+# 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=y
+CONFIG_HID_MONTEREY=y
+# CONFIG_HID_MULTITOUCH is not set
+# CONFIG_HID_NTRIG is not set
+# CONFIG_HID_ORTEK is not set
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+# 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=y
+CONFIG_HID_SONY=y
+CONFIG_HID_SUNPLUS=y
+# 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=y
+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_XHCI_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_FSL_USB_TEST_MODE is not set
+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 is not set
+# 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_OHCI_HCD is not set
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_WHCI_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=y
+CONFIG_USB_SERIAL_CONSOLE=y
+# CONFIG_USB_EZUSB is not set
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP210X is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_IUU is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_MOTOROLA is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_QCAUX is not set
+# CONFIG_USB_SERIAL_QUALCOMM is not set
+# CONFIG_USB_SERIAL_SPCP8X5 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_SYMBOL is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_OPTICON is not set
+# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
+# CONFIG_USB_SERIAL_ZIO is not set
+# CONFIG_USB_SERIAL_SSU100 is not set
+CONFIG_USB_SERIAL_DEBUG=y
+
+#
+# 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_AMD5536UDC is not set
+# CONFIG_USB_GADGET_CI13XXX_PCI is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LANGWELL is not set
+# CONFIG_USB_GADGET_EG20T 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 is not set
+CONFIG_USB_ETH=y
+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 is not set
+# CONFIG_USB_MASS_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# 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_UWB is not set
+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_PCI is not set
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_ESDHC_IMX=y
+# CONFIG_MMC_TIFM_SD is not set
+# CONFIG_MMC_CB710 is not set
+# CONFIG_MMC_VIA_SDMMC is not set
+# 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_INFINIBAND 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 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=y
+
+#
+# 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=y
+# 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=y
+
+#
+# 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
+
+#
+# SECO_MXC_SYSTEM
+#
+
+#
+# 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=y
+# 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=y
+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_HIFN_795X is not set
+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=y
+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_GENERIC_ALLOCATOR=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_CPU_RMAP=y
+CONFIG_NLATTR=y
+CONFIG_AVERAGE=y
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch b/recipes-kernel/linux/linux-unico-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-unico-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@ossystems.com.br>
+Date: Thu, 22 Aug 2013 16:31:29 -0300
+Subject: [PATCH] drm/vivante: Add ":00" sufix in returned bus Id
+
+This makes the 3.0.35 compatible with a Xorg driver build for 3.5.7 or
+newer kernels.
+
+Upstream-Status: Inapropriate [embedded specific]
+
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ drivers/gpu/drm/vivante/vivante_drv.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/vivante/vivante_drv.c b/drivers/gpu/drm/vivante/vivante_drv.c
+index 4224608..cea360d 100644
+--- a/drivers/gpu/drm/vivante/vivante_drv.c
++++ b/drivers/gpu/drm/vivante/vivante_drv.c
+@@ -55,7 +55,7 @@
+ 
+ #include "drm_pciids.h"
+ 
+-static char platformdevicename[] = "Vivante GCCore";
++static char platformdevicename[] = "Vivante GCCore:00";
+ static struct platform_device *pplatformdev;
+ 
+ static struct drm_driver driver = {
+-- 
+1.8.4.rc1
+
diff --git a/recipes-kernel/linux/linux-unico-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch b/recipes-kernel/linux/linux-unico-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-unico-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@ossystems.com.br>
+Date: Sat, 19 Oct 2013 10:55:11 -0300
+Subject: [PATCH] epdc: Rename mxcfb_epdc_kernel.h to mxc_epdc.h
+Organization: O.S. Systems Software LTDA.
+
+This allow for forward compatibility with imx-test >= 3.10.9-1.0.0.
+
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ drivers/video/mxc/mxc_epdc_fb.c   |  2 +-
+ include/linux/mxcfb_epdc.h        | 49 +++++++++++++++++++++++++++++++++++++++
+ include/linux/mxcfb_epdc_kernel.h | 49 ---------------------------------------
+ 3 files changed, 50 insertions(+), 50 deletions(-)
+ create mode 100644 include/linux/mxcfb_epdc.h
+ delete mode 100644 include/linux/mxcfb_epdc_kernel.h
+
+diff --git a/drivers/video/mxc/mxc_epdc_fb.c b/drivers/video/mxc/mxc_epdc_fb.c
+index 4103498..b3ef8ea 100644
+--- a/drivers/video/mxc/mxc_epdc_fb.c
++++ b/drivers/video/mxc/mxc_epdc_fb.c
+@@ -43,7 +43,7 @@
+ #include <linux/dmaengine.h>
+ #include <linux/pxp_dma.h>
+ #include <linux/mxcfb.h>
+-#include <linux/mxcfb_epdc_kernel.h>
++#include <linux/mxcfb_epdc.h>
+ #include <linux/gpio.h>
+ #include <linux/regulator/driver.h>
+ #include <linux/fsl_devices.h>
+diff --git a/include/linux/mxcfb_epdc.h b/include/linux/mxcfb_epdc.h
+new file mode 100644
+index 0000000..06fea6f
+--- /dev/null
++++ b/include/linux/mxcfb_epdc.h
+@@ -0,0 +1,49 @@
++/*
++ * Copyright (C) 2010-2012 Freescale Semiconductor, Inc. All Rights Reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
++ *
++ */
++#ifndef _MXCFB_EPDC_KERNEL
++#define _MXCFB_EPDC_KERNEL
++
++void mxc_epdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
++						struct fb_info *info);
++int mxc_epdc_fb_set_temperature(int temperature, struct fb_info *info);
++int mxc_epdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
++int mxc_epdc_fb_send_update(struct mxcfb_update_data *upd_data,
++				   struct fb_info *info);
++int mxc_epdc_fb_wait_update_complete(
++				struct mxcfb_update_marker_data *marker_data,
++				struct fb_info *info);
++int mxc_epdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
++					    struct fb_info *info);
++int mxc_epdc_get_pwrdown_delay(struct fb_info *info);
++int mxc_epdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
++
++void mxc_spdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
++						struct fb_info *info);
++int mxc_spdc_fb_set_temperature(int temperature, struct fb_info *info);
++int mxc_spdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
++int mxc_spdc_fb_send_update(struct mxcfb_update_data *upd_data,
++				   struct fb_info *info);
++int mxc_spdc_fb_wait_update_complete(
++				struct mxcfb_update_marker_data *marker_data,
++				struct fb_info *info);
++int mxc_spdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
++					    struct fb_info *info);
++int mxc_spdc_get_pwrdown_delay(struct fb_info *info);
++int mxc_spdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
++#endif
+diff --git a/include/linux/mxcfb_epdc_kernel.h b/include/linux/mxcfb_epdc_kernel.h
+deleted file mode 100644
+index 06fea6f..0000000
+--- a/include/linux/mxcfb_epdc_kernel.h
++++ /dev/null
+@@ -1,49 +0,0 @@
+-/*
+- * Copyright (C) 2010-2012 Freescale Semiconductor, Inc. All Rights Reserved.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+- *
+- */
+-#ifndef _MXCFB_EPDC_KERNEL
+-#define _MXCFB_EPDC_KERNEL
+-
+-void mxc_epdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
+-						struct fb_info *info);
+-int mxc_epdc_fb_set_temperature(int temperature, struct fb_info *info);
+-int mxc_epdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
+-int mxc_epdc_fb_send_update(struct mxcfb_update_data *upd_data,
+-				   struct fb_info *info);
+-int mxc_epdc_fb_wait_update_complete(
+-				struct mxcfb_update_marker_data *marker_data,
+-				struct fb_info *info);
+-int mxc_epdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
+-					    struct fb_info *info);
+-int mxc_epdc_get_pwrdown_delay(struct fb_info *info);
+-int mxc_epdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
+-
+-void mxc_spdc_fb_set_waveform_modes(struct mxcfb_waveform_modes *modes,
+-						struct fb_info *info);
+-int mxc_spdc_fb_set_temperature(int temperature, struct fb_info *info);
+-int mxc_spdc_fb_set_auto_update(u32 auto_mode, struct fb_info *info);
+-int mxc_spdc_fb_send_update(struct mxcfb_update_data *upd_data,
+-				   struct fb_info *info);
+-int mxc_spdc_fb_wait_update_complete(
+-				struct mxcfb_update_marker_data *marker_data,
+-				struct fb_info *info);
+-int mxc_spdc_fb_set_pwrdown_delay(u32 pwrdown_delay,
+-					    struct fb_info *info);
+-int mxc_spdc_get_pwrdown_delay(struct fb_info *info);
+-int mxc_spdc_fb_set_upd_scheme(u32 upd_scheme, struct fb_info *info);
+-#endif
+-- 
+1.8.4.rc3
+
diff --git a/recipes-kernel/linux/linux-unico.inc b/recipes-kernel/linux/linux-unico.inc
new file mode 100644
index 0000000..7d2935a
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico.inc
@@ -0,0 +1,17 @@
+# Adapted from linux-imx.inc, copyright (C) 2012, 2013 O.S. Systems Software LTDA
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Linux kernel UNICO for UDOO"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
+
+require recipes-kernel/linux/linux-imx.inc
+
+# Put a local version until we have a true SRCREV to point to
+LOCALVERSION ?= "+yocto"
+SCMVERSION ?= "y"
+
+# SRC_URI for wandboard kernel
+SRC_URI = "git://github.com/UDOOboard/Kernel_Unico.git \
+           file://defconfig \
+"
diff --git a/recipes-kernel/linux/linux-unico_3.0.35.bb b/recipes-kernel/linux/linux-unico_3.0.35.bb
new file mode 100644
index 0000000..f36044f
--- /dev/null
+++ b/recipes-kernel/linux/linux-unico_3.0.35.bb
@@ -0,0 +1,46 @@
+# Adapted from linux-imx.inc, copyright (C) 2012, 2013 O.S. Systems Software LTDA
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+include linux-unico.inc
+
+# Kernel_Unico is a branch from 3.0.35 so we apply the 3.0.35 patches
+SRCREV = "029e85168c08c8c9a8a6dd308b388599be608948"
+LOCALVERSION = "-3.0.35-unico"
+
+# Patches need for Yocto and not applied by Freescale when doing 4.1.0 branch
+SRC_URI += "file://drm-vivante-Add-00-sufix-in-returned-bus-Id.patch \
+            file://epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch\
+	    file://0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch \
+            file://0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch \
+            file://0003-ARM-7670-1-fix-the-memset-fix.patch \
+            file://0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch \
+            file://0005-ENGR00271359-Add-Multi-touch-support.patch \
+            file://0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch\
+            file://0001-ENGR00255688-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch \
+            file://0002-ENGR00265465-gpu-Add-global-value-for-minimum-3D-clo.patch \
+            file://0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch \
+            file://0004-ENGR00264288-1-GPU-Integrate-4.6.9p12-release-kernel.patch \
+            file://0005-ENGR00264275-GPU-Correct-suspend-resume-calling-afte.patch \
+            file://0006-ENGR00265130-gpu-Correct-section-mismatch-in-gpu-ker.patch"
+
+#SRC_URI += "file://drm-vivante-Add-00-sufix-in-returned-bus-Id.patch \
+#            file://epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch \
+#            file://0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch \
+#            file://0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch \
+#            file://0003-ARM-7670-1-fix-the-memset-fix.patch \
+#            file://0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch \
+#            file://0005-ENGR00271359-Add-Multi-touch-support.patch \
+#            file://0006-Add-support-for-DVI-monitors.patch \
+#            file://0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch"
+
+
+# GPU support patches
+#SRC_URI += "file://drm-vivante-Add-00-sufix-in-returned-bus-Id.patch \
+#            file://0001-ENGR00255688-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch \
+#            file://0002-ENGR00265465-gpu-Add-global-value-for-minimum-3D-clo.patch \
+#            file://0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch \
+#            file://0004-ENGR00264288-1-GPU-Integrate-4.6.9p12-release-kernel.patch \
+#            file://0005-ENGR00264275-GPU-Correct-suspend-resume-calling-afte.patch \
+#            file://0006-ENGR00265130-gpu-Correct-section-mismatch-in-gpu-ker.patch"
+
+COMPATIBLE_MACHINE = "(mx6)"
-- 
1.7.10.4



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [meta-fsl-arm-extra][PATCH] UDOO board machine
  2013-12-12 14:22 [meta-fsl-arm-extra][PATCH] UDOO board machine Luca Simone Ronga
@ 2013-12-12 17:00 ` John Weber
  2013-12-13 15:03   ` Otavio Salvador
  0 siblings, 1 reply; 4+ messages in thread
From: John Weber @ 2013-12-12 17:00 UTC (permalink / raw)
  To: meta-freescale

Hi Luca -

I'm not sure if the policy has changed, but I think you'll need to send separate 
patches series for the machine, U-boot, and the kernel, rather than bundling 
them all up in one large patch.  These should be maintained separately.

A couple of other things:
- Normally, the defconfig needs to be saved using make savedefconfig from the 
kernel Kbuild system.  This significantly reduces the size of the defconfig file 
and makes for easier comparison/control later on.
- Since you are maintaining a separate kernel repository on Github, why not 
consider incorporating some of these patches into the kernel instead of 
maintaining them separately in the recipe?  The ARM GCC patches (ARM 7670 and 
the memset fix) are examples.

John

On 12/12/13 8:22 AM, Luca Simone Ronga wrote:
> From: Luca Simone Ronga <luca.simone.ronga@gmail.com>
>
>
> Signed-off-by: Luca Simone Ronga <luca.ronga@cnit.it>
> ---
>   conf/machine/udoo-quad.conf                        |   26 +
>   .../0001-modified-UDOO-conf-for-yocto-meta.patch   |   49 +
>   recipes-bsp/u-boot/u-boot-unico_2013.bb            |   24 +
>   ...8-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch | 1040 +++++++
>   ...Fix-getrusage-related-build-failure-on-gl.patch |   43 +
>   ...fix-memset-related-crashes-caused-by-rece.patch |  259 ++
>   ...5-gpu-Add-global-value-for-minimum-3D-clo.patch |   62 +
>   .../0003-ARM-7670-1-fix-the-memset-fix.patch       |   87 +
>   ...4-4-gpu-use-new-PU-power-on-off-interface.patch |   53 +
>   ...8-1-GPU-Integrate-4.6.9p12-release-kernel.patch | 2006 +++++++++++++
>   ...6-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch |   43 +
>   ...5-GPU-Correct-suspend-resume-calling-afte.patch |   61 +
>   ...0005-ENGR00271359-Add-Multi-touch-support.patch |   98 +
>   .../0006-Add-support-for-DVI-monitors.patch        |  227 ++
>   ...0-gpu-Correct-section-mismatch-in-gpu-ker.patch |   60 +
>   ...6-board-mx6q_sabresd-Register-SDHC3-first.patch |   38 +
>   recipes-kernel/linux/linux-unico-3.0.35/defconfig  | 3149 ++++++++++++++++++++
>   ...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-unico.inc               |   17 +
>   recipes-kernel/linux/linux-unico_3.0.35.bb         |   46 +
>   21 files changed, 7562 insertions(+)
>   create mode 100644 conf/machine/udoo-quad.conf
>   create mode 100644 recipes-bsp/u-boot/u-boot-unico/0001-modified-UDOO-conf-for-yocto-meta.patch
>   create mode 100644 recipes-bsp/u-boot/u-boot-unico_2013.bb
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0001-ENGR00255688-4.6.9p11.1-gpu-GPU-Kernel-driver-integr.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0001-perf-tools-Fix-getrusage-related-build-failure-on-gl.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0002-ARM-7668-1-fix-memset-related-crashes-caused-by-rece.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0002-ENGR00265465-gpu-Add-global-value-for-minimum-3D-clo.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0003-ARM-7670-1-fix-the-memset-fix.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0003-ENGR00261814-4-gpu-use-new-PU-power-on-off-interface.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0004-ENGR00264288-1-GPU-Integrate-4.6.9p12-release-kernel.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0004-ENGR00271136-Fix-build-break-when-CONFIG_CLK_DEBUG-i.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0005-ENGR00264275-GPU-Correct-suspend-resume-calling-afte.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0005-ENGR00271359-Add-Multi-touch-support.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0006-Add-support-for-DVI-monitors.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0006-ENGR00265130-gpu-Correct-section-mismatch-in-gpu-ker.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/0007-ARM-mach-mx6-board-mx6q_sabresd-Register-SDHC3-first.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/defconfig
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/drm-vivante-Add-00-sufix-in-returned-bus-Id.patch
>   create mode 100644 recipes-kernel/linux/linux-unico-3.0.35/epdc-Rename-mxcfb_epdc_kernel.h-to-mxc_epdc.h.patch
>   create mode 100644 recipes-kernel/linux/linux-unico.inc
>   create mode 100644 recipes-kernel/linux/linux-unico_3.0.35.bb
>



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [meta-fsl-arm-extra][PATCH] UDOO board machine
  2013-12-12 17:00 ` John Weber
@ 2013-12-13 15:03   ` Otavio Salvador
  2013-12-13 15:48     ` Luca Simone Ronga
  0 siblings, 1 reply; 4+ messages in thread
From: Otavio Salvador @ 2013-12-13 15:03 UTC (permalink / raw)
  To: John Weber, Luca Simone Ronga; +Cc: meta-freescale

On Thu, Dec 12, 2013 at 3:00 PM, John Weber <rjohnweber@gmail.com> wrote:
> Hi Luca -
>
> I'm not sure if the policy has changed, but I think you'll need to send
> separate patches series for the machine, U-boot, and the kernel, rather than
> bundling them all up in one large patch.  These should be maintained
> separately.
>
> A couple of other things:
> - Normally, the defconfig needs to be saved using make savedefconfig from
> the kernel Kbuild system.  This significantly reduces the size of the
> defconfig file and makes for easier comparison/control later on.
> - Since you are maintaining a separate kernel repository on Github, why not
> consider incorporating some of these patches into the kernel instead of
> maintaining them separately in the recipe?  The ARM GCC patches (ARM 7670
> and the memset fix) are examples.

Your remarks are correct; by the way, use linux-udoo and u-boot-udoo
recipes as 'unico' is too generic.

-- 
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [meta-fsl-arm-extra][PATCH] UDOO board machine
  2013-12-13 15:03   ` Otavio Salvador
@ 2013-12-13 15:48     ` Luca Simone Ronga
  0 siblings, 0 replies; 4+ messages in thread
From: Luca Simone Ronga @ 2013-12-13 15:48 UTC (permalink / raw)
  To: Otavio Salvador; +Cc: meta-freescale

[-- Attachment #1: Type: text/plain, Size: 1332 bytes --]

OK thanks,
I will prepare the mods and will post again.
L.



2013/12/13 Otavio Salvador <otavio@ossystems.com.br>

> On Thu, Dec 12, 2013 at 3:00 PM, John Weber <rjohnweber@gmail.com> wrote:
> > Hi Luca -
> >
> > I'm not sure if the policy has changed, but I think you'll need to send
> > separate patches series for the machine, U-boot, and the kernel, rather
> than
> > bundling them all up in one large patch.  These should be maintained
> > separately.
> >
> > A couple of other things:
> > - Normally, the defconfig needs to be saved using make savedefconfig from
> > the kernel Kbuild system.  This significantly reduces the size of the
> > defconfig file and makes for easier comparison/control later on.
> > - Since you are maintaining a separate kernel repository on Github, why
> not
> > consider incorporating some of these patches into the kernel instead of
> > maintaining them separately in the recipe?  The ARM GCC patches (ARM 7670
> > and the memset fix) are examples.
>
> Your remarks are correct; by the way, use linux-udoo and u-boot-udoo
> recipes as 'unico' is too generic.
>
> --
> Otavio Salvador                             O.S. Systems
> http://www.ossystems.com.br        http://code.ossystems.com.br
> Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750
>

[-- Attachment #2: Type: text/html, Size: 2123 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-12-13 15:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-12-12 14:22 [meta-fsl-arm-extra][PATCH] UDOO board machine Luca Simone Ronga
2013-12-12 17:00 ` John Weber
2013-12-13 15:03   ` Otavio Salvador
2013-12-13 15:48     ` Luca Simone Ronga

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.