From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.cnit.it (demetra.cnit.it [217.9.64.12]) by yocto-www.yoctoproject.org (Postfix) with ESMTP id BF9C4E00796 for ; Thu, 12 Dec 2013 06:22:48 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by mail.cnit.it (Postfix) with ESMTP id 75DA15412A; Thu, 12 Dec 2013 15:22:43 +0100 (CET) X-Virus-Scanned: by cnit.it Received: from mail.cnit.it ([127.0.0.1]) by localhost (demetra.cnit.it [127.0.0.1]) (amavisd-new, port 10026) with LMTP id j7LnQXiLz8WN; Thu, 12 Dec 2013 15:22:43 +0100 (CET) Received: from piovra.ll-int (tmed.dinfo.unifi.it [150.217.8.21]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.cnit.it (Postfix) with ESMTPSA id 34BFA540E5; Thu, 12 Dec 2013 15:22:43 +0100 (CET) From: Luca Simone Ronga To: meta-freescale@yoctoproject.org Date: Thu, 12 Dec 2013 15:22:03 +0100 Message-Id: <1386858123-22036-1-git-send-email-luca.ronga@cnit.it> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: References: MIME-Version: 1.0 X-Mailman-Approved-At: Thu, 12 Dec 2013 07:45:18 -0800 Cc: Luca Simone Ronga , Luca Simone Ronga Subject: [meta-fsl-arm-extra][PATCH] UDOO board machine X-BeenThere: meta-freescale@yoctoproject.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Usage and development list for the meta-fsl-* layers List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 12 Dec 2013 14:22:51 -0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Luca Simone Ronga Signed-off-by: Luca Simone Ronga --- 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 +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 +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 +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//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 +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 +Cc: Peter Zijlstra +Link: http://lkml.kernel.org/r/20120404084527.GA294@x4 +Signed-off-by: Ingo Molnar +--- + 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 ++#include + + #include + #include +-- +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 +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 : +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 +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 +Reviewed-by: Nicolas Pitre +Signed-off-by: Dirk Behme +Signed-off-by: Russell King +(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 +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 +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 +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 +Tested-by: Alexander Holler +Signed-off-by: Russell King +(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 +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 +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 +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 +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 +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 +--- + 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 +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 +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 +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 +Signed-off-by: Mahesh Mahadevan +(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 +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 +--- + 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 +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 +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 +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 +--- + 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 +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 +--- + 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 +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 +--- + 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 + #include + #include +-#include ++#include + #include + #include + #include +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