[meta-freescale] [meta-fsl-arm-extra PATCH 1/2] linux-wandboard: Remove usused patch and INC_PR
Otavio Salvador
otavio at ossystems.com.br
Mon Jul 22 14:50:39 PDT 2013
The kernel is based on Freescale 3.0.35-4.0.0 kernel and has the
4.6.9p11 Vivante GPU code applied so the patch is unused but was
leftover.
The INC_PR were not being used so this has been dropped as well.
Change-Id: I24b39fa3302760d15edb49ffe889a5b3e017f595
Signed-off-by: Otavio Salvador <otavio at ossystems.com.br>
---
...1005-gpu-4.6.9p11-kernel-code-integration.patch | 6294 --------------------
recipes-kernel/linux/linux-wandboard.inc | 2 -
2 files changed, 6296 deletions(-)
delete mode 100644 recipes-kernel/linux/linux-wandboard-3.0.35/0001-ENGR00251005-gpu-4.6.9p11-kernel-code-integration.patch
diff --git a/recipes-kernel/linux/linux-wandboard-3.0.35/0001-ENGR00251005-gpu-4.6.9p11-kernel-code-integration.patch b/recipes-kernel/linux/linux-wandboard-3.0.35/0001-ENGR00251005-gpu-4.6.9p11-kernel-code-integration.patch
deleted file mode 100644
index 1e64c4f..0000000
--- a/recipes-kernel/linux/linux-wandboard-3.0.35/0001-ENGR00251005-gpu-4.6.9p11-kernel-code-integration.patch
+++ /dev/null
@@ -1,6294 +0,0 @@
-From 9af09f417b8f9d2205087f23e88931f64d649995 Mon Sep 17 00:00:00 2001
-From: Loren Huang <b02279 at freescale.com>
-Date: Fri, 15 Feb 2013 23:34:51 +0800
-Subject: [PATCH] ENGR00251005 [gpu]4.6.9p11 kernel code integration
-
--4.6.9p11 kernel code integration
--Additionally release runtime pm and regulator when destory gpu driver
-to avoid reference count mismatch.
-
-Upstream-Status: Pending
-
-Signed-off-by: Loren Huang <b02279 at freescale.com>
-Acked-by: Lily Zhang
----
- drivers/mxc/gpu-viv/Kbuild | 3 +-
- .../hal/kernel/gc_hal_kernel_hardware_command_vg.c | 4 +-
- .../hal/kernel/gc_hal_kernel_hardware_command_vg.h | 5 +-
- .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.c | 4 +-
- .../GC350/hal/kernel/gc_hal_kernel_hardware_vg.h | 5 +-
- .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.c | 19 +-
- .../arch/XAQ2/hal/kernel/gc_hal_kernel_context.h | 4 +-
- .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c | 217 ++++++-
- .../arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h | 4 +-
- drivers/mxc/gpu-viv/config | 2 +-
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | 700 +++++++++++++++++----
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | 86 ++-
- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_command.c | 24 +-
- .../gpu-viv/hal/kernel/gc_hal_kernel_command_vg.c | 18 +-
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c | 57 +-
- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c | 4 +-
- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c | 163 ++---
- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_heap.c | 4 +-
- .../hal/kernel/gc_hal_kernel_interrupt_vg.c | 4 +-
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu.c | 23 +-
- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu_vg.c | 4 +-
- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_power.c | 347 ++++++++++
- .../mxc/gpu-viv/hal/kernel/gc_hal_kernel_precomp.h | 4 +-
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c | 130 ++--
- drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.h | 5 +-
- .../hal/kernel/gc_hal_kernel_video_memory.c | 4 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h | 125 +++-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h | 62 +-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h | 27 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h | 270 ++++----
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_driver_vg.h | 9 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_dump.h | 3 +-
- .../gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h | 4 +-
- .../hal/kernel/inc/gc_hal_eglplatform_type.h | 3 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine.h | 39 +-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h | 11 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_enum.h | 16 +-
- .../gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h | 49 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_mem.h | 16 +-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_options.h | 25 +-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h | 2 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h | 4 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_rename.h | 4 +-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_statistics.h | 3 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h | 27 +-
- .../mxc/gpu-viv/hal/kernel/inc/gc_hal_version.h | 6 +-
- drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_vg.h | 7 +-
- .../hal/os/linux/kernel/gc_hal_kernel_debug.h | 4 +-
- .../hal/os/linux/kernel/gc_hal_kernel_debugfs.c | 2 +-
- .../hal/os/linux/kernel/gc_hal_kernel_debugfs.h | 4 +-
- .../hal/os/linux/kernel/gc_hal_kernel_device.c | 59 +-
- .../hal/os/linux/kernel/gc_hal_kernel_device.h | 7 +-
- .../hal/os/linux/kernel/gc_hal_kernel_driver.c | 27 +-
- .../hal/os/linux/kernel/gc_hal_kernel_linux.c | 20 +-
- .../hal/os/linux/kernel/gc_hal_kernel_linux.h | 4 +-
- .../hal/os/linux/kernel/gc_hal_kernel_math.c | 4 +-
- .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c | 158 ++++-
- .../gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h | 12 +-
- 58 files changed, 2170 insertions(+), 687 deletions(-)
- create mode 100644 drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_power.c
-
-diff --git a/drivers/mxc/gpu-viv/Kbuild b/drivers/mxc/gpu-viv/Kbuild
-index bc5ec02..0b18a7b 100644
---- a/drivers/mxc/gpu-viv/Kbuild
-+++ b/drivers/mxc/gpu-viv/Kbuild
-@@ -54,7 +54,8 @@ OBJS += $(HAL_KERNEL_DIR)/gc_hal_kernel.o \
- $(HAL_KERNEL_DIR)/gc_hal_kernel_event.o \
- $(HAL_KERNEL_DIR)/gc_hal_kernel_heap.o \
- $(HAL_KERNEL_DIR)/gc_hal_kernel_mmu.o \
-- $(HAL_KERNEL_DIR)/gc_hal_kernel_video_memory.o
-+ $(HAL_KERNEL_DIR)/gc_hal_kernel_video_memory.o \
-+ $(HAL_KERNEL_DIR)/gc_hal_kernel_power.o
-
- OBJS += $(ARCH_KERNEL_DIR)/gc_hal_kernel_context.o \
- $(ARCH_KERNEL_DIR)/gc_hal_kernel_hardware.o
-diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.c b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.c
-index a8b9922..cf40e3f 100644
---- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.c
-+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.c
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal.h"
- #include "gc_hal_kernel.h"
-
-diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.h b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.h
-index e2a9f8e..aa767ee 100644
---- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.h
-+++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_command_vg.h
-@@ -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
-@@ -19,9 +19,6 @@
- *****************************************************************************/
-
-
--
--
--
- #ifndef __gc_hal_kernel_hardware_command_vg_h_
- #define __gc_hal_kernel_hardware_command_vg_h_
-
-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 29b3e8c..4a6010d 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal.h"
- #include "gc_hal_kernel.h"
- #include "gc_hal_kernel_hardware_command_vg.h"
-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 e3714b7..83a603e 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
-@@ -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
-@@ -19,9 +19,6 @@
- *****************************************************************************/
-
-
--
--
--
- #ifndef __gc_hal_kernel_hardware_vg_h_
- #define __gc_hal_kernel_hardware_vg_h_
-
-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 a52c1c8..22e1f27 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
-@@ -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
-@@ -19,9 +19,6 @@
- *****************************************************************************/
-
-
--
--
--
- #include "gc_hal.h"
- #include "gc_hal_kernel.h"
- #include "gc_hal_kernel_context.h"
-@@ -474,7 +471,7 @@ _InitializeContextBuffer(
- index += _SwitchPipe(Context, index, gcvPIPE_3D);
-
- /* Current context pointer. */
--#if gcdDEBUG && 1
-+#if gcdDEBUG
- index += _State(Context, index, 0x03850 >> 2, 0x00000000, 1, gcvFALSE, gcvFALSE);
- #endif
-
-@@ -1257,11 +1254,11 @@ gckCONTEXT_Construct(
- }
-
- /* Copy the current context. */
-- gcmkONERROR(gckOS_MemCopy(
-+ gckOS_MemCopy(
- tempContext->logical,
- currContext->logical,
- context->totalSize
-- ));
-+ );
-
- /* Get the next context buffer. */
- tempContext = tempContext->next;
-@@ -1442,7 +1439,7 @@ gckCONTEXT_Update(
- gcmkONERROR(gckKERNEL_OpenUserData(
- kernel, needCopy,
- Context->recordArray,
-- kDelta->recordArray, Context->recordArraySize,
-+ gcmUINT64_TO_PTR(kDelta->recordArray), Context->recordArraySize,
- (gctPOINTER *) &recordArray
- ));
-
-@@ -1551,13 +1548,13 @@ gckCONTEXT_Update(
- gcmkASSERT(kDelta->refCount >= 0);
-
- /* Get the next state delta. */
-- nDelta = kDelta->next;
-+ nDelta = gcmUINT64_TO_PTR(kDelta->next);
-
- /* Get access to the state records. */
- gcmkONERROR(gckKERNEL_CloseUserData(
- kernel, needCopy,
- gcvFALSE,
-- kDelta->recordArray, Context->recordArraySize,
-+ gcmUINT64_TO_PTR(kDelta->recordArray), Context->recordArraySize,
- (gctPOINTER *) &recordArray
- ));
-
-@@ -1704,7 +1701,7 @@ OnError:
- gcmkVERIFY_OK(gckKERNEL_CloseUserData(
- kernel, needCopy,
- gcvFALSE,
-- kDelta->recordArray, Context->recordArraySize,
-+ gcmUINT64_TO_PTR(kDelta->recordArray), Context->recordArraySize,
- (gctPOINTER *) &recordArray
- ));
- }
-diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
-index a5030de..7554045 100644
---- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
-+++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_context.h
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_kernel_context_h_
- #define __gc_hal_kernel_context_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 d3624d1..a87259e 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal.h"
- #include "gc_hal_kernel.h"
-
-@@ -258,6 +256,13 @@ _IdentifyHardware(
- = ((((gctUINT32) (Identity->chipMinorFeatures2)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 5:5) - (0 ? 5:5) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5)));
- }
-
-+ if ((Identity->chipModel == gcv800) && (Identity->chipRevision == 0x4605))
-+ {
-+ /* Correct feature bit: RTL does not have such feature. */
-+ Identity->chipFeatures
-+ = ((((gctUINT32) (Identity->chipFeatures)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? 31:31) - (0 ? 31:31) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31)));
-+ }
-+
- gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
- "Identity: chipFeatures=0x%08X",
- Identity->chipFeatures);
-@@ -819,7 +824,7 @@ OnError:
- if (hardware->powerOffTimer != gcvNULL)
- {
- gcmkVERIFY_OK(gckOS_StopTimer(Os, hardware->powerOffTimer));
-- gcmkVERIFY_OK(gckOS_DestoryTimer(Os, hardware->powerOffTimer));
-+ gcmkVERIFY_OK(gckOS_DestroyTimer(Os, hardware->powerOffTimer));
- }
- #endif
-
-@@ -872,7 +877,7 @@ gckHARDWARE_Destroy(
-
- #if gcdPOWEROFF_TIMEOUT
- gcmkVERIFY_OK(gckOS_StopTimer(Hardware->os, Hardware->powerOffTimer));
-- gcmkVERIFY_OK(gckOS_DestoryTimer(Hardware->os, Hardware->powerOffTimer));
-+ gcmkVERIFY_OK(gckOS_DestroyTimer(Hardware->os, Hardware->powerOffTimer));
- #endif
-
- gcmkVERIFY_OK(gckOS_AtomDestroy(Hardware->os, Hardware->pageTableDirty));
-@@ -4399,6 +4404,13 @@ gckHARDWARE_SetPowerManagementState(
- /* Save the new power state. */
- Hardware->chipPowerState = State;
-
-+#if gcdDVFS
-+ if (State == gcvPOWER_ON && Hardware->kernel->dvfs)
-+ {
-+ gckDVFS_Start(Hardware->kernel->dvfs);
-+ }
-+#endif
-+
- #if gcdPOWEROFF_TIMEOUT
- /* Reset power off time */
- gcmkONERROR(gckOS_GetTicks(¤tTime));
-@@ -5476,7 +5488,9 @@ gckHARDWARE_IsFeatureAvailable(
- available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures)) >> (0 ? 22:22) & ((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1)))))));
- break;
- case gcvFEATURE_DYNAMIC_FREQUENCY_SCALING:
-- available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures2)) >> (0 ? 14:14) & ((gctUINT32) ((((1 ? 14:14) - (0 ? 14:14) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 14:14) - (0 ? 14:14) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 14:14) - (0 ? 14:14) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 14:14) - (0 ? 14:14) + 1)))))));
-+ /* This feature doesn't apply for 2D cores. */
-+ available = ((((gctUINT32) (Hardware->identity.chipMinorFeatures2)) >> (0 ? 14:14) & ((gctUINT32) ((((1 ? 14:14) - (0 ? 14:14) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 14:14) - (0 ? 14:14) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 14:14) - (0 ? 14:14) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 14:14) - (0 ? 14:14) + 1)))))))
-+ && ((((gctUINT32) (Hardware->identity.chipFeatures)) >> (0 ? 2:2) & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))) == (0x1 & ((gctUINT32) ((((1 ? 2:2) - (0 ? 2:2) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 2:2) - (0 ? 2:2) + 1)))))));
- break;
-
- default:
-@@ -6231,3 +6245,194 @@ OnError:
- }
- #endif
-
-+#if gcdDVFS
-+#define READ_FROM_EATER1 0
-+
-+gceSTATUS
-+gckHARDWARE_QueryLoad(
-+ IN gckHARDWARE Hardware,
-+ OUT gctUINT32 * Load
-+ )
-+{
-+ gctUINT32 debug1;
-+ gceSTATUS status;
-+ gcmkHEADER_ARG("Hardware=0x%X", Hardware);
-+
-+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-+ gcmkVERIFY_ARGUMENT(Load != gcvNULL);
-+
-+ gckOS_AcquireMutex(Hardware->os, Hardware->powerMutex, gcvINFINITE);
-+
-+ if (Hardware->chipPowerState == gcvPOWER_ON)
-+ {
-+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x00110,
-+ Load));
-+#if READ_FROM_EATER1
-+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x00134,
-+ Load));
-+#endif
-+
-+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x00114,
-+ &debug1));
-+
-+ /* Patch result of 0x110 with result of 0x114. */
-+ if ((debug1 & 0xFF) == 1)
-+ {
-+ *Load &= ~0xFF;
-+ *Load |= 1;
-+ }
-+
-+ if (((debug1 & 0xFF00) >> 8) == 1)
-+ {
-+ *Load &= ~(0xFF << 8);
-+ *Load |= 1 << 8;
-+ }
-+
-+ if (((debug1 & 0xFF0000) >> 16) == 1)
-+ {
-+ *Load &= ~(0xFF << 16);
-+ *Load |= 1 << 16;
-+ }
-+
-+ if (((debug1 & 0xFF000000) >> 24) == 1)
-+ {
-+ *Load &= ~(0xFF << 24);
-+ *Load |= 1 << 24;
-+ }
-+ }
-+ else
-+ {
-+ status = gcvSTATUS_INVALID_REQUEST;
-+ }
-+
-+OnError:
-+
-+ gckOS_ReleaseMutex(Hardware->os, Hardware->powerMutex);
-+
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+gceSTATUS
-+gckHARDWARE_SetDVFSPeroid(
-+ IN gckHARDWARE Hardware,
-+ OUT gctUINT32 Frequency
-+ )
-+{
-+ gceSTATUS status;
-+ gctUINT32 period;
-+ gctUINT32 eater;
-+
-+#if READ_FROM_EATER1
-+ gctUINT32 period1;
-+ gctUINT32 eater1;
-+#endif
-+
-+ gcmkHEADER_ARG("Hardware=0x%X Frequency=%d", Hardware, Frequency);
-+
-+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-+
-+ period = 0;
-+
-+ while((64 << period) < (gcdDVFS_ANAYLSE_WINDOW * Frequency * 1000) )
-+ {
-+ period++;
-+ }
-+
-+#if READ_FROM_EATER1
-+ /*
-+ * Peroid = F * 1000 * 1000 / (60 * 16 * 1024);
-+ */
-+ period1 = Frequency * 6250 / 6114;
-+#endif
-+
-+ gckOS_AcquireMutex(Hardware->os, Hardware->powerMutex, gcvINFINITE);
-+
-+ if (Hardware->chipPowerState == gcvPOWER_ON)
-+ {
-+ /* Get current configure. */
-+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x0010C,
-+ &eater));
-+
-+ /* Change peroid. */
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x0010C,
-+ ((((gctUINT32) (eater)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) | (((gctUINT32) ((gctUINT32) (period) & ((gctUINT32) ((((1 ? 15:8) - (0 ? 15:8) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8)))));
-+
-+#if READ_FROM_EATER1
-+ /* Config eater1. */
-+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x00130,
-+ &eater1));
-+
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x00130,
-+ ((((gctUINT32) (eater1)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 31:16) - (0 ? 31:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:16) - (0 ? 31:16) + 1))))))) << (0 ? 31:16))) | (((gctUINT32) ((gctUINT32) (period1) & ((gctUINT32) ((((1 ? 31:16) - (0 ? 31:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 31:16) - (0 ? 31:16) + 1))))))) << (0 ? 31:16)))));
-+#endif
-+ }
-+ else
-+ {
-+ status = gcvSTATUS_INVALID_REQUEST;
-+ }
-+
-+OnError:
-+ gckOS_ReleaseMutex(Hardware->os, Hardware->powerMutex);
-+
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+gceSTATUS
-+gckHARDWARE_InitDVFS(
-+ IN gckHARDWARE Hardware
-+ )
-+{
-+ gceSTATUS status;
-+ gctUINT32 data;
-+
-+ gcmkHEADER_ARG("Hardware=0x%X", Hardware);
-+
-+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-+
-+ gcmkONERROR(gckOS_ReadRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x0010C,
-+ &data));
-+
-+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)));
-+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1))))))) << (0 ? 18:18))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 18:18) - (0 ? 18:18) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 18:18) - (0 ? 18:18) + 1))))))) << (0 ? 18:18)));
-+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 19:19) - (0 ? 19:19) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19)));
-+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ? 20:20))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 20:20) - (0 ? 20:20) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ? 20:20)));
-+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? 23:23) - (0 ? 23:23) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23)));
-+ data = ((((gctUINT32) (data)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1))))))) << (0 ? 22:22))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? 22:22) - (0 ? 22:22) + 1) == 32) ? ~0 : (~(~0 << ((1 ? 22:22) - (0 ? 22:22) + 1))))))) << (0 ? 22:22)));
-+
-+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_HARDWARE,
-+ "DVFS Configure=0x%X",
-+ data);
-+
-+ gcmkONERROR(gckOS_WriteRegisterEx(Hardware->os,
-+ Hardware->core,
-+ 0x0010C,
-+ data));
-+
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ gcmkFOOTER();
-+ return status;
-+}
-+#endif
-+
-+
-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 9ecfca7..517b35c 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_kernel_hardware_h_
- #define __gc_hal_kernel_hardware_h_
-
-diff --git a/drivers/mxc/gpu-viv/config b/drivers/mxc/gpu-viv/config
-index 7e6e867..1196efa 100644
---- a/drivers/mxc/gpu-viv/config
-+++ b/drivers/mxc/gpu-viv/config
-@@ -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/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
-index 0cb9244..c567640 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_precomp.h"
-
- #define _GC_OBJ_ZONE gcvZONE_KERNEL
-@@ -176,6 +174,15 @@ gckKERNEL_Construct(
- kernel->command = gcvNULL;
- kernel->eventObj = gcvNULL;
- kernel->mmu = gcvNULL;
-+#if gcdDVFS
-+ kernel->dvfs = gcvNULL;
-+#endif
-+
-+ /* Initialize the gckKERNEL object. */
-+ kernel->object.type = gcvOBJ_KERNEL;
-+ kernel->os = Os;
-+ kernel->core = Core;
-+
-
- if (SharedDB == gcvNULL)
- {
-@@ -200,6 +207,12 @@ gckKERNEL_Construct(
-
- /* Construct a database mutex. */
- gcmkONERROR(gckOS_CreateMutex(Os, &kernel->db->dbMutex));
-+
-+ /* Construct a id-pointer database. */
-+ gcmkONERROR(gckKERNEL_CreateIntegerDatabase(kernel, &kernel->db->pointerDatabase));
-+
-+ /* Construct a id-pointer database mutex. */
-+ gcmkONERROR(gckOS_CreateMutex(Os, &kernel->db->pointerDatabaseMutex));
- }
- else
- {
-@@ -215,11 +228,6 @@ gckKERNEL_Construct(
-
- kernel->timeOut = gcdGPU_TIMEOUT;
-
-- /* Initialize the gckKERNEL object. */
-- kernel->object.type = gcvOBJ_KERNEL;
-- kernel->os = Os;
-- kernel->core = Core;
--
- /* Save context. */
- kernel->context = Context;
-
-@@ -279,6 +287,16 @@ gckKERNEL_Construct(
- (gctTIMERFUNCTION)_ResetFinishFunction,
- (gctPOINTER)kernel,
- &kernel->resetFlagClearTimer));
-+ kernel->resetTimeStamp = 0;
-+#endif
-+
-+#if gcdDVFS
-+ if (gckHARDWARE_IsFeatureAvailable(kernel->hardware,
-+ gcvFEATURE_DYNAMIC_FREQUENCY_SCALING))
-+ {
-+ gcmkONERROR(gckDVFS_Construct(kernel->hardware, &kernel->dvfs));
-+ gcmkONERROR(gckDVFS_Start(kernel->dvfs));
-+ }
- #endif
- }
-
-@@ -346,7 +364,7 @@ OnError:
- if (kernel->resetFlagClearTimer)
- {
- gcmkVERIFY_OK(gckOS_StopTimer(Os, kernel->resetFlagClearTimer));
-- gcmkVERIFY_OK(gckOS_DestoryTimer(Os, kernel->resetFlagClearTimer));
-+ gcmkVERIFY_OK(gckOS_DestroyTimer(Os, kernel->resetFlagClearTimer));
- }
- #endif
-
-@@ -369,6 +387,14 @@ OnError:
- }
- #endif
-
-+#if gcdDVFS
-+ if (kernel->dvfs)
-+ {
-+ gcmkVERIFY_OK(gckDVFS_Stop(kernel->dvfs));
-+ gcmkVERIFY_OK(gckDVFS_Destroy(kernel->dvfs));
-+ }
-+#endif
-+
- gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Os, kernel));
- }
-
-@@ -444,6 +470,13 @@ gckKERNEL_Destroy(
-
- /* Destroy the database mutex. */
- gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->db->dbMutex));
-+
-+
-+ /* Destroy id-pointer database. */
-+ gcmkVERIFY_OK(gckKERNEL_DestroyIntegerDatabase(Kernel, Kernel->db->pointerDatabase));
-+
-+ /* Destroy id-pointer database mutex. */
-+ gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->db->pointerDatabaseMutex));
- }
-
- #if gcdENABLE_VG
-@@ -472,7 +505,7 @@ gckKERNEL_Destroy(
- if (Kernel->resetFlagClearTimer)
- {
- gcmkVERIFY_OK(gckOS_StopTimer(Kernel->os, Kernel->resetFlagClearTimer));
-- gcmkVERIFY_OK(gckOS_DestoryTimer(Kernel->os, Kernel->resetFlagClearTimer));
-+ gcmkVERIFY_OK(gckOS_DestroyTimer(Kernel->os, Kernel->resetFlagClearTimer));
- }
- #endif
- }
-@@ -484,6 +517,14 @@ gckKERNEL_Destroy(
- gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->virtualBufferLock));
- #endif
-
-+#if gcdDVFS
-+ if (Kernel->dvfs)
-+ {
-+ gcmkVERIFY_OK(gckDVFS_Stop(Kernel->dvfs));
-+ gcmkVERIFY_OK(gckDVFS_Destroy(Kernel->dvfs));
-+ }
-+#endif
-+
- /* Mark the gckKERNEL object as unknown. */
- Kernel->object.type = gcvOBJ_UNKNOWN;
-
-@@ -848,11 +889,14 @@ gckKERNEL_Dispatch(
- gcuVIDMEM_NODE_PTR node = gcvNULL;
- gctBOOL locked = gcvFALSE;
- gctPHYS_ADDR physical = gcvNULL;
-+ gctPOINTER logical = gcvNULL;
-+ gctPOINTER info = gcvNULL;
-+ gckCONTEXT context = gcvNULL;
- gctUINT32 address;
- gctUINT32 processID;
-+ gckKERNEL kernel = Kernel;
- #if gcdSECURE_USER
- gcskSECURE_CACHE_PTR cache;
-- gctPOINTER logical;
- #endif
- gctBOOL asynchronous;
- gctPOINTER paddr = gcvNULL;
-@@ -910,156 +954,185 @@ gckKERNEL_Dispatch(
- break;
-
- case gcvHAL_MAP_MEMORY:
-- physical = Interface->u.MapMemory.physical;
-+ physical = gcmINT2PTR(Interface->u.MapMemory.physical);
-
- /* Map memory. */
- gcmkONERROR(
- gckKERNEL_MapMemory(Kernel,
- physical,
-- Interface->u.MapMemory.bytes,
-- &Interface->u.MapMemory.logical));
-+ (gctSIZE_T) Interface->u.MapMemory.bytes,
-+ &logical));
-+
-+ Interface->u.MapMemory.logical = gcmPTR_TO_UINT64(logical);
-+
- gcmkVERIFY_OK(
- gckKERNEL_AddProcessDB(Kernel,
- processID, gcvDB_MAP_MEMORY,
-- Interface->u.MapMemory.logical,
-+ logical,
- physical,
-- Interface->u.MapMemory.bytes));
-+ (gctSIZE_T) Interface->u.MapMemory.bytes));
- break;
-
- case gcvHAL_UNMAP_MEMORY:
-- physical = Interface->u.UnmapMemory.physical;
-+ physical = gcmINT2PTR(Interface->u.UnmapMemory.physical);
-
- /* Unmap memory. */
- gcmkONERROR(
- gckKERNEL_UnmapMemory(Kernel,
- physical,
-- Interface->u.UnmapMemory.bytes,
-- Interface->u.UnmapMemory.logical));
-+ (gctSIZE_T) Interface->u.UnmapMemory.bytes,
-+ gcmUINT64_TO_PTR(Interface->u.UnmapMemory.logical)));
- gcmkVERIFY_OK(
- gckKERNEL_RemoveProcessDB(Kernel,
- processID, gcvDB_MAP_MEMORY,
-- Interface->u.UnmapMemory.logical));
-+ gcmUINT64_TO_PTR(Interface->u.UnmapMemory.logical)));
- break;
-
- case gcvHAL_ALLOCATE_NON_PAGED_MEMORY:
-+ bytes = (gctSIZE_T) Interface->u.AllocateNonPagedMemory.bytes;
-+
- /* Allocate non-paged memory. */
- gcmkONERROR(
- gckOS_AllocateNonPagedMemory(
- Kernel->os,
- FromUser,
-- &Interface->u.AllocateNonPagedMemory.bytes,
-- &Interface->u.AllocateNonPagedMemory.physical,
-- &Interface->u.AllocateNonPagedMemory.logical));
-+ &bytes,
-+ &physical,
-+ &logical));
-+
-+ Interface->u.AllocateNonPagedMemory.bytes = bytes;
-+ Interface->u.AllocateNonPagedMemory.logical = gcmPTR_TO_UINT64(logical);
-+ Interface->u.AllocateNonPagedMemory.physical = gcmPTR_TO_NAME(physical);
-
- gcmkVERIFY_OK(
- gckKERNEL_AddProcessDB(Kernel,
- processID, gcvDB_NON_PAGED,
-- Interface->u.AllocateNonPagedMemory.logical,
-- Interface->u.AllocateNonPagedMemory.physical,
-- Interface->u.AllocateNonPagedMemory.bytes));
-+ logical,
-+ gcmINT2PTR(Interface->u.AllocateNonPagedMemory.physical),
-+ bytes));
-+
- break;
-
- case gcvHAL_ALLOCATE_VIRTUAL_COMMAND_BUFFER:
- #if gcdVIRTUAL_COMMAND_BUFFER
-+ bytes = (gctSIZE_T) Interface->u.AllocateVirtualCommandBuffer.bytes;
-+
- gcmkONERROR(
- gckKERNEL_AllocateVirtualCommandBuffer(
- Kernel,
- FromUser,
-- &Interface->u.AllocateVirtualCommandBuffer.bytes,
-- &Interface->u.AllocateVirtualCommandBuffer.physical,
-- &Interface->u.AllocateVirtualCommandBuffer.logical));
-+ &bytes,
-+ &physical,
-+ &logical));
-+
-+ Interface->u.AllocateVirtualCommandBuffer.bytes = bytes;
-+ Interface->u.AllocateVirtualCommandBuffer.logical = gcmPTR_TO_UINT64(logical);
-+ Interface->u.AllocateVirtualCommandBuffer.physical = gcmPTR_TO_NAME(physical);
-
- gcmkVERIFY_OK(
- gckKERNEL_AddProcessDB(Kernel,
- processID, gcvDB_COMMAND_BUFFER,
-- Interface->u.AllocateVirtualCommandBuffer.logical,
-- Interface->u.AllocateVirtualCommandBuffer.physical,
-- Interface->u.AllocateVirtualCommandBuffer.bytes));
-+ logical,
-+ gcmINT2PTR(Interface->u.AllocateVirtualCommandBuffer.physical),
-+ bytes));
- #else
- status = gcvSTATUS_NOT_SUPPORTED;
- #endif
- break;
-
- case gcvHAL_FREE_NON_PAGED_MEMORY:
-- physical = Interface->u.FreeNonPagedMemory.physical;
-+ physical = gcmNAME_TO_PTR(Interface->u.FreeNonPagedMemory.physical);
-
- /* Unmap user logical out of physical memory first. */
- gcmkONERROR(gckOS_UnmapUserLogical(Kernel->os,
- physical,
-- Interface->u.FreeNonPagedMemory.bytes,
-- Interface->u.FreeNonPagedMemory.logical));
-+ (gctSIZE_T) Interface->u.FreeNonPagedMemory.bytes,
-+ gcmUINT64_TO_PTR(Interface->u.FreeNonPagedMemory.logical)));
-
- /* Free non-paged memory. */
- gcmkONERROR(
- gckOS_FreeNonPagedMemory(Kernel->os,
-- Interface->u.FreeNonPagedMemory.bytes,
-+ (gctSIZE_T) Interface->u.FreeNonPagedMemory.bytes,
- physical,
-- Interface->u.FreeNonPagedMemory.logical));
-+ gcmUINT64_TO_PTR(Interface->u.FreeNonPagedMemory.logical)));
-
- gcmkVERIFY_OK(
- gckKERNEL_RemoveProcessDB(Kernel,
- processID, gcvDB_NON_PAGED,
-- Interface->u.FreeNonPagedMemory.logical));
-+ gcmUINT64_TO_PTR(Interface->u.FreeNonPagedMemory.logical)));
-
- #if gcdSECURE_USER
- gcmkVERIFY_OK(gckKERNEL_FlushTranslationCache(
- Kernel,
- cache,
-- Interface->u.FreeNonPagedMemory.logical,
-+ gcmUINT64_TO_PTR(Interface->u.FreeNonPagedMemory.logical),
- Interface->u.FreeNonPagedMemory.bytes));
- #endif
-+
-+ gcmRELEASE_NAME(Interface->u.FreeNonPagedMemory.physical);
-+
- break;
-
- case gcvHAL_ALLOCATE_CONTIGUOUS_MEMORY:
-+ bytes = (gctSIZE_T) Interface->u.AllocateContiguousMemory.bytes;
-+
- /* Allocate contiguous memory. */
- gcmkONERROR(gckOS_AllocateContiguous(
- Kernel->os,
- FromUser,
-- &Interface->u.AllocateContiguousMemory.bytes,
-- &Interface->u.AllocateContiguousMemory.physical,
-- &Interface->u.AllocateContiguousMemory.logical));
-+ &bytes,
-+ &physical,
-+ &logical));
-+
-+ Interface->u.AllocateContiguousMemory.bytes = bytes;
-+ Interface->u.AllocateContiguousMemory.logical = gcmPTR_TO_UINT64(logical);
-+ Interface->u.AllocateContiguousMemory.physical = gcmPTR_TO_NAME(physical);
-
- gcmkONERROR(gckHARDWARE_ConvertLogical(
- Kernel->hardware,
-- Interface->u.AllocateContiguousMemory.logical,
-+ gcmUINT64_TO_PTR(Interface->u.AllocateContiguousMemory.logical),
- &Interface->u.AllocateContiguousMemory.address));
-
- gcmkVERIFY_OK(gckKERNEL_AddProcessDB(
- Kernel,
- processID, gcvDB_CONTIGUOUS,
-- Interface->u.AllocateContiguousMemory.logical,
-- Interface->u.AllocateContiguousMemory.physical,
-- Interface->u.AllocateContiguousMemory.bytes));
-+ logical,
-+ gcmINT2PTR(Interface->u.AllocateContiguousMemory.physical),
-+ bytes));
-+
- break;
-
- case gcvHAL_FREE_CONTIGUOUS_MEMORY:
-- physical = Interface->u.FreeContiguousMemory.physical;
-+ physical = gcmNAME_TO_PTR(Interface->u.FreeContiguousMemory.physical);
-
- /* Unmap user logical out of physical memory first. */
- gcmkONERROR(gckOS_UnmapUserLogical(Kernel->os,
- physical,
-- Interface->u.FreeContiguousMemory.bytes,
-- Interface->u.FreeContiguousMemory.logical));
-+ (gctSIZE_T) Interface->u.FreeContiguousMemory.bytes,
-+ gcmUINT64_TO_PTR(Interface->u.FreeContiguousMemory.logical)));
-
- /* Free contiguous memory. */
- gcmkONERROR(
- gckOS_FreeContiguous(Kernel->os,
- physical,
-- Interface->u.FreeContiguousMemory.logical,
-- Interface->u.FreeContiguousMemory.bytes));
-+ gcmUINT64_TO_PTR(Interface->u.FreeContiguousMemory.logical),
-+ (gctSIZE_T) Interface->u.FreeContiguousMemory.bytes));
-
- gcmkVERIFY_OK(
- gckKERNEL_RemoveProcessDB(Kernel,
- processID, gcvDB_CONTIGUOUS,
-- Interface->u.FreeNonPagedMemory.logical));
-+ gcmUINT64_TO_PTR(Interface->u.FreeNonPagedMemory.logical)));
-
- #if gcdSECURE_USER
- gcmkVERIFY_OK(gckKERNEL_FlushTranslationCache(
- Kernel,
- cache,
-- Interface->u.FreeContiguousMemory.logical,
-+ gcmUINT64_TO_PTR(Interface->u.FreeContiguousMemory.logical),
- Interface->u.FreeContiguousMemory.bytes));
- #endif
-+
-+ gcmRELEASE_NAME(Interface->u.FreeContiguousMemory.physical);
-+
- break;
-
- case gcvHAL_ALLOCATE_VIDEO_MEMORY:
-@@ -1076,10 +1149,8 @@ gckKERNEL_Dispatch(
- Interface->u.AllocateLinearVideoMemory.bytes,
- Interface->u.AllocateLinearVideoMemory.alignment,
- Interface->u.AllocateLinearVideoMemory.type,
-- &Interface->u.AllocateLinearVideoMemory.node));
-+ &node));
-
-- /* Get actual size of node. */
-- node = Interface->u.AllocateLinearVideoMemory.node;
- if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
- {
- bytes = node->VidMem.bytes;
-@@ -1092,14 +1163,17 @@ gckKERNEL_Dispatch(
- gcmkONERROR(
- gckKERNEL_AddProcessDB(Kernel,
- processID, gcvDB_VIDEO_MEMORY,
-- Interface->u.AllocateLinearVideoMemory.node,
-+ node,
- gcvNULL,
- bytes));
-+
-+ /* Get the node. */
-+ Interface->u.AllocateLinearVideoMemory.node = gcmPTR_TO_UINT64(node);
- break;
-
- case gcvHAL_FREE_VIDEO_MEMORY:
-+ node = gcmUINT64_TO_PTR(Interface->u.FreeVideoMemory.node);
- #ifdef __QNXNTO__
-- node = Interface->u.FreeVideoMemory.node;
- if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM
- && node->VidMem.logical != gcvNULL)
- {
-@@ -1113,25 +1187,27 @@ gckKERNEL_Dispatch(
- #endif
- /* Free video memory. */
- gcmkONERROR(
-- gckVIDMEM_Free(Interface->u.FreeVideoMemory.node));
-+ gckVIDMEM_Free(node));
-
- gcmkONERROR(
- gckKERNEL_RemoveProcessDB(Kernel,
- processID, gcvDB_VIDEO_MEMORY,
-- Interface->u.FreeVideoMemory.node));
-+ node));
-+
- break;
-
- case gcvHAL_LOCK_VIDEO_MEMORY:
-+ node = gcmUINT64_TO_PTR(Interface->u.LockVideoMemory.node);
-+
- /* Lock video memory. */
- gcmkONERROR(
- gckVIDMEM_Lock(Kernel,
-- Interface->u.LockVideoMemory.node,
-+ node,
- Interface->u.LockVideoMemory.cacheable,
- &Interface->u.LockVideoMemory.address));
-
- locked = gcvTRUE;
-
-- node = Interface->u.LockVideoMemory.node;
- if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
- {
- /* Map video memory address into user space. */
-@@ -1148,18 +1224,20 @@ gckKERNEL_Dispatch(
- }
- gcmkASSERT(node->VidMem.logical != gcvNULL);
-
-- Interface->u.LockVideoMemory.memory = node->VidMem.logical;
-+ Interface->u.LockVideoMemory.memory = gcmPTR_TO_UINT64(node->VidMem.logical);
- #else
- gcmkONERROR(
- gckKERNEL_MapVideoMemory(Kernel,
- FromUser,
- Interface->u.LockVideoMemory.address,
-- &Interface->u.LockVideoMemory.memory));
-+ &logical));
-+
-+ Interface->u.LockVideoMemory.memory = gcmPTR_TO_UINT64(logical);
- #endif
- }
- else
- {
-- Interface->u.LockVideoMemory.memory = node->Virtual.logical;
-+ Interface->u.LockVideoMemory.memory = gcmPTR_TO_UINT64(node->Virtual.logical);
-
- /* Success. */
- status = gcvSTATUS_OK;
-@@ -1168,12 +1246,12 @@ gckKERNEL_Dispatch(
- #if gcdSECURE_USER
- /* Return logical address as physical address. */
- Interface->u.LockVideoMemory.address =
-- gcmPTR2INT(Interface->u.LockVideoMemory.memory);
-+ Interface->u.LockVideoMemory.memory;
- #endif
- gcmkONERROR(
- gckKERNEL_AddProcessDB(Kernel,
- processID, gcvDB_VIDEO_MEMORY_LOCKED,
-- Interface->u.LockVideoMemory.node,
-+ node,
- gcvNULL,
- 0));
-
-@@ -1181,7 +1259,7 @@ gckKERNEL_Dispatch(
-
- case gcvHAL_UNLOCK_VIDEO_MEMORY:
- /* Unlock video memory. */
-- node = Interface->u.UnlockVideoMemory.node;
-+ node = gcmUINT64_TO_PTR(Interface->u.UnlockVideoMemory.node);
-
- #if gcdSECURE_USER
- /* Save node information before it disappears. */
-@@ -1220,26 +1298,25 @@ gckKERNEL_Dispatch(
- gcmkONERROR(
- gckKERNEL_RemoveProcessDB(Kernel,
- processID, gcvDB_VIDEO_MEMORY_LOCKED,
-- Interface->u.UnlockVideoMemory.node));
-+ node));
- }
--
- break;
-
- case gcvHAL_EVENT_COMMIT:
- /* Commit an event queue. */
- gcmkONERROR(
- gckEVENT_Commit(Kernel->eventObj,
-- Interface->u.Event.queue));
-+ gcmUINT64_TO_PTR(Interface->u.Event.queue)));
- break;
-
- case gcvHAL_COMMIT:
- /* Commit a command and context buffer. */
- gcmkONERROR(
- gckCOMMAND_Commit(Kernel->command,
-- Interface->u.Commit.context,
-- Interface->u.Commit.commandBuffer,
-- Interface->u.Commit.delta,
-- Interface->u.Commit.queue,
-+ gcmNAME_TO_PTR(Interface->u.Commit.context),
-+ gcmUINT64_TO_PTR(Interface->u.Commit.commandBuffer),
-+ gcmUINT64_TO_PTR(Interface->u.Commit.delta),
-+ gcmUINT64_TO_PTR(Interface->u.Commit.queue),
- processID));
- break;
-
-@@ -1253,42 +1330,49 @@ gckKERNEL_Dispatch(
- gcmkONERROR(
- gckOS_MapUserMemory(Kernel->os,
- Kernel->core,
-- Interface->u.MapUserMemory.memory,
-+ gcmUINT64_TO_PTR(Interface->u.MapUserMemory.memory),
- Interface->u.MapUserMemory.physical,
-- Interface->u.MapUserMemory.size,
-- &Interface->u.MapUserMemory.info,
-+ (gctSIZE_T) Interface->u.MapUserMemory.size,
-+ &info,
- &Interface->u.MapUserMemory.address));
-+
-+ Interface->u.MapUserMemory.info = gcmPTR_TO_NAME(info);
-+
- gcmkVERIFY_OK(
- gckKERNEL_AddProcessDB(Kernel,
- processID, gcvDB_MAP_USER_MEMORY,
-- Interface->u.MapUserMemory.info,
-- Interface->u.MapUserMemory.memory,
-- Interface->u.MapUserMemory.size));
-+ gcmINT2PTR(Interface->u.MapUserMemory.info),
-+ gcmUINT64_TO_PTR(Interface->u.MapUserMemory.memory),
-+ (gctSIZE_T) Interface->u.MapUserMemory.size));
- break;
-
- case gcvHAL_UNMAP_USER_MEMORY:
- address = Interface->u.UnmapUserMemory.address;
-+ info = gcmNAME_TO_PTR(Interface->u.UnmapUserMemory.info);
-
- /* Unmap user memory. */
- gcmkONERROR(
- gckOS_UnmapUserMemory(Kernel->os,
- Kernel->core,
-- Interface->u.UnmapUserMemory.memory,
-- Interface->u.UnmapUserMemory.size,
-- Interface->u.UnmapUserMemory.info,
-+ gcmUINT64_TO_PTR(Interface->u.UnmapUserMemory.memory),
-+ (gctSIZE_T) Interface->u.UnmapUserMemory.size,
-+ info,
- address));
-
- #if gcdSECURE_USER
- gcmkVERIFY_OK(gckKERNEL_FlushTranslationCache(
- Kernel,
- cache,
-- Interface->u.UnmapUserMemory.memory,
-+ gcmUINT64_TO_PTR(Interface->u.UnmapUserMemory.memory),
- Interface->u.UnmapUserMemory.size));
- #endif
- gcmkVERIFY_OK(
- gckKERNEL_RemoveProcessDB(Kernel,
- processID, gcvDB_MAP_USER_MEMORY,
-- Interface->u.UnmapUserMemory.info));
-+ gcmINT2PTR(Interface->u.UnmapUserMemory.info)));
-+
-+ gcmRELEASE_NAME(Interface->u.UnmapUserMemory.info);
-+
- break;
-
- #if !USE_NEW_LINUX_SIGNAL
-@@ -1537,7 +1621,7 @@ gckKERNEL_Dispatch(
- gcmkONERROR(
- gckHARDWARE_ProfileEngine2D(
- Kernel->hardware,
-- Interface->u.RegisterProfileData2D.hwProfile2D));
-+ gcmUINT64_TO_PTR(Interface->u.RegisterProfileData2D.hwProfile2D)));
- #else
- status = gcvSTATUS_OK;
- #endif
-@@ -1652,14 +1736,15 @@ gckKERNEL_Dispatch(
- break;
-
- case gcvHAL_CACHE:
-- if (Interface->u.Cache.node == gcvNULL)
-+ node = gcmUINT64_TO_PTR(Interface->u.Cache.node);
-+ if (node == gcvNULL)
- {
- /* FIXME Surface wrap some memory which is not allocated by us,
- ** So we don't have physical address to handle outer cache, ignore it*/
- status = gcvSTATUS_OK;
- break;
- }
-- else if (Interface->u.Cache.node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
-+ else if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
- {
- /* Video memory has no physical handles. */
- physical = gcvNULL;
-@@ -1667,9 +1752,11 @@ gckKERNEL_Dispatch(
- else
- {
- /* Grab physical handle. */
-- physical = Interface->u.Cache.node->Virtual.physical;
-+ physical = node->Virtual.physical;
- }
-
-+ logical = gcmUINT64_TO_PTR(Interface->u.Cache.logical);
-+ bytes = (gctSIZE_T) Interface->u.Cache.bytes;
- switch(Interface->u.Cache.operation)
- {
- case gcvCACHE_FLUSH:
-@@ -1678,8 +1765,8 @@ gckKERNEL_Dispatch(
- processID,
- physical,
- paddr,
-- Interface->u.Cache.logical,
-- Interface->u.Cache.bytes);
-+ logical,
-+ bytes);
- break;
- case gcvCACHE_CLEAN:
- /* Clean the cache. */
-@@ -1687,8 +1774,8 @@ gckKERNEL_Dispatch(
- processID,
- physical,
- paddr,
-- Interface->u.Cache.logical,
-- Interface->u.Cache.bytes);
-+ logical,
-+ bytes);
- break;
- case gcvCACHE_INVALIDATE:
- /* Invalidate the cache. */
-@@ -1696,13 +1783,13 @@ gckKERNEL_Dispatch(
- processID,
- physical,
- paddr,
-- Interface->u.Cache.logical,
-- Interface->u.Cache.bytes);
-+ logical,
-+ bytes);
- break;
-
- case gcvCACHE_MEMORY_BARRIER:
- status = gckOS_MemoryBarrier(Kernel->os,
-- Interface->u.Cache.logical);
-+ logical);
- break;
- default:
- status = gcvSTATUS_INVALID_ARGUMENT;
-@@ -1802,14 +1889,17 @@ gckKERNEL_Dispatch(
- /* Attach user process. */
- gcmkONERROR(
- gckCOMMAND_Attach(Kernel->command,
-- &Interface->u.Attach.context,
-- &Interface->u.Attach.stateCount,
-+ &context,
-+ &bytes,
- processID));
-
-+ Interface->u.Attach.stateCount = bytes;
-+ Interface->u.Attach.context = gcmPTR_TO_NAME(context);
-+
- gcmkVERIFY_OK(
- gckKERNEL_AddProcessDB(Kernel,
- processID, gcvDB_CONTEXT,
-- Interface->u.Attach.context,
-+ gcmINT2PTR(Interface->u.Attach.context),
- gcvNULL,
- 0));
- break;
-@@ -1818,15 +1908,18 @@ gckKERNEL_Dispatch(
- /* Detach user process. */
- gcmkONERROR(
- gckCOMMAND_Detach(Kernel->command,
-- Interface->u.Detach.context));
-+ gcmNAME_TO_PTR(Interface->u.Detach.context)));
-
- gcmkVERIFY_OK(
- gckKERNEL_RemoveProcessDB(Kernel,
- processID, gcvDB_CONTEXT,
-- Interface->u.Detach.context));
-+ gcmINT2PTR(Interface->u.Detach.context)));
-+
-+ gcmRELEASE_NAME(Interface->u.Detach.context);
- break;
-
- case gcvHAL_COMPOSE:
-+ Interface->u.Compose.physical = gcmPTR_TO_UINT64(gcmNAME_TO_PTR(Interface->u.Compose.physical));
- /* Start composition. */
- gcmkONERROR(
- gckEVENT_Compose(Kernel->eventObj,
-@@ -1842,11 +1935,13 @@ gckKERNEL_Dispatch(
- case gcvHAL_GET_FRAME_INFO:
- gcmkONERROR(gckHARDWARE_GetFrameInfo(
- Kernel->hardware,
-- Interface->u.GetFrameInfo.frameInfo));
-+ gcmUINT64_TO_PTR(Interface->u.GetFrameInfo.frameInfo)));
- break;
- #endif
-
- case gcvHAL_GET_SHARED_INFO:
-+ bytes = (gctSIZE_T) Interface->u.GetSharedInfo.size;
-+
- if (Interface->u.GetSharedInfo.dataId != 0)
- {
- gcmkONERROR(gckKERNEL_FindProcessDB(Kernel,
-@@ -1857,7 +1952,7 @@ gckKERNEL_Dispatch(
- &record));
-
- /* find a record in db, check size */
-- if (record.bytes != Interface->u.GetSharedInfo.size)
-+ if (record.bytes != bytes)
- {
- /* Size change is not allowed */
- gcmkONERROR(gcvSTATUS_INVALID_DATA);
-@@ -1867,13 +1962,13 @@ gckKERNEL_Dispatch(
- gcmkONERROR(gckOS_CopyToUserData(
- Kernel->os,
- record.physical,
-- Interface->u.GetSharedInfo.data,
-- Interface->u.GetSharedInfo.size
-+ gcmUINT64_TO_PTR(Interface->u.GetSharedInfo.data),
-+ bytes
- ));
-
- }
-
-- if ((node = Interface->u.GetSharedInfo.node) != gcvNULL)
-+ if ((node = gcmUINT64_TO_PTR(Interface->u.GetSharedInfo.node)) != gcvNULL)
- {
- switch (Interface->u.GetSharedInfo.infoType)
- {
-@@ -1892,7 +1987,7 @@ gckKERNEL_Dispatch(
- gcmkONERROR(gckOS_CopyToUserData(
- Kernel->os,
- data,
-- Interface->u.GetSharedInfo.nodeData,
-+ gcmUINT64_TO_PTR(Interface->u.GetSharedInfo.nodeData),
- sizeof(gcsVIDMEM_NODE_SHARED_INFO)
- ));
- }
-@@ -1930,7 +2025,7 @@ gckKERNEL_Dispatch(
- gcmkONERROR(gckOS_CopyToUserData(
- Kernel->os,
- &alignedSharedInfo,
-- Interface->u.GetSharedInfo.nodeData,
-+ gcmUINT64_TO_PTR(Interface->u.GetSharedInfo.nodeData),
- sizeof(gcsVIDMEM_NODE_SHARED_INFO)
- ));
-
-@@ -1953,6 +2048,8 @@ gckKERNEL_Dispatch(
- 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,
-@@ -1966,7 +2063,7 @@ gckKERNEL_Dispatch(
- /* Note: we count on DestoryProcessDB to free it */
- gcmkONERROR(gckOS_AllocateMemory(
- Kernel->os,
-- Interface->u.SetSharedInfo.size,
-+ bytes,
- &data
- ));
-
-@@ -1975,7 +2072,7 @@ gckKERNEL_Dispatch(
- gcvDB_SHARED_INFO,
- gcmINT2PTR(Interface->u.SetSharedInfo.dataId),
- data,
-- Interface->u.SetSharedInfo.size
-+ bytes
- ));
- }
- else
-@@ -1984,7 +2081,7 @@ gckKERNEL_Dispatch(
- gcmkONERROR(status);
-
- /* find a record in db, check size */
-- if (record.bytes != Interface->u.SetSharedInfo.size)
-+ if (record.bytes != bytes)
- {
- /* Size change is not allowed */
- gcmkONERROR(gcvSTATUS_INVALID_DATA);
-@@ -1997,12 +2094,12 @@ gckKERNEL_Dispatch(
- gcmkONERROR(gckOS_CopyFromUserData(
- Kernel->os,
- data,
-- Interface->u.SetSharedInfo.data,
-- Interface->u.SetSharedInfo.size
-+ gcmUINT64_TO_PTR(Interface->u.SetSharedInfo.data),
-+ bytes
- ));
- }
-
-- if ((node = Interface->u.SetSharedInfo.node) != gcvNULL)
-+ if ((node = gcmUINT64_TO_PTR(Interface->u.SetSharedInfo.node)) != gcvNULL)
- {
- switch (Interface->u.SetSharedInfo.infoType)
- {
-@@ -2020,7 +2117,7 @@ gckKERNEL_Dispatch(
- gcmkONERROR(gckOS_CopyFromUserData(
- Kernel->os,
- data,
-- Interface->u.SetSharedInfo.nodeData,
-+ gcmUINT64_TO_PTR(Interface->u.SetSharedInfo.nodeData),
- sizeof(gcsVIDMEM_NODE_SHARED_INFO)
- ));
- }
-@@ -2036,7 +2133,7 @@ gckKERNEL_Dispatch(
- gcmkONERROR(gckOS_CopyFromUserData(
- Kernel->os,
- &newSharedInfo,
-- Interface->u.SetSharedInfo.nodeData,
-+ gcmUINT64_TO_PTR(Interface->u.SetSharedInfo.nodeData),
- gcmSIZEOF(gcsVIDMEM_NODE_SHARED_INFO)
- ));
-
-@@ -2107,6 +2204,14 @@ gckKERNEL_Dispatch(
- #endif
- break;
-
-+ case gcvHAL_QUERY_RESET_TIME_STAMP:
-+#if gcdENABLE_RECOVERY
-+ Interface->u.QueryResetTimeStamp.timeStamp = Kernel->resetTimeStamp;
-+#else
-+ Interface->u.QueryResetTimeStamp.timeStamp = 0;
-+#endif
-+ break;
-+
- default:
- /* Invalid command. */
- gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
-@@ -2123,7 +2228,7 @@ OnError:
- /* Roll back the lock. */
- gcmkVERIFY_OK(
- gckVIDMEM_Unlock(Kernel,
-- Interface->u.LockVideoMemory.node,
-+ gcmUINT64_TO_PTR(Interface->u.LockVideoMemory.node),
- gcvSURF_TYPE_UNKNOWN,
- &asynchronous));
-
-@@ -2132,7 +2237,7 @@ OnError:
- /* Bottom Half */
- gcmkVERIFY_OK(
- gckVIDMEM_Unlock(Kernel,
-- Interface->u.LockVideoMemory.node,
-+ gcmUINT64_TO_PTR(Interface->u.LockVideoMemory.node),
- gcvSURF_TYPE_UNKNOWN,
- gcvNULL));
- }
-@@ -2910,6 +3015,8 @@ gckKERNEL_Recovery(
- #endif
- gcmkONERROR(gckEVENT_Notify(eventObj, 2));
-
-+ Kernel->resetTimeStamp++;
-+
- /* Success. */
- gcmkFOOTER_NO();
- return gcvSTATUS_OK;
-@@ -3438,6 +3545,361 @@ gckLINKQUEUE_GetData(
- }
- #endif
-
-+/******************************************************************************\
-+*************************** Pointer - ID translation ***************************
-+\******************************************************************************/
-+#define gcdID_TABLE_LENGTH 1024
-+typedef struct _gcsINTEGERDB * gckINTEGERDB;
-+typedef struct _gcsINTEGERDB
-+{
-+ gckOS os;
-+ gctPOINTER* table;
-+ gctPOINTER mutex;
-+ gctUINT32 tableLen;
-+ gctUINT32 currentID;
-+ gctUINT32 unused;
-+}
-+gcsINTEGERDB;
-+
-+gceSTATUS
-+gckKERNEL_CreateIntegerDatabase(
-+ IN gckKERNEL Kernel,
-+ OUT gctPOINTER * Database
-+ )
-+{
-+ gceSTATUS status;
-+ gckINTEGERDB database = gcvNULL;
-+
-+ gcmkHEADER_ARG("Kernel=0x%08X Datbase=0x%08X", Kernel, Database);
-+
-+ gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL);
-+ gcmkVERIFY_ARGUMENT(Database != gcvNULL);
-+
-+ /* Allocate a database. */
-+ gcmkONERROR(gckOS_Allocate(
-+ Kernel->os, gcmSIZEOF(gcsINTEGERDB), (gctPOINTER *)&database));
-+
-+ gckOS_ZeroMemory(database, gcmSIZEOF(gcsINTEGERDB));
-+
-+ /* Allocate a pointer table. */
-+ gcmkONERROR(gckOS_Allocate(
-+ Kernel->os, gcmSIZEOF(gctPOINTER) * gcdID_TABLE_LENGTH, (gctPOINTER *)&database->table));
-+
-+ gckOS_ZeroMemory(database->table, gcmSIZEOF(gctPOINTER) * gcdID_TABLE_LENGTH);
-+
-+ /* Allocate a database mutex. */
-+ gcmkONERROR(gckOS_CreateMutex(Kernel->os, &database->mutex));
-+
-+ /* Initialize. */
-+ database->currentID = 0;
-+ database->unused = gcdID_TABLE_LENGTH;
-+ database->os = Kernel->os;
-+ database->tableLen = gcdID_TABLE_LENGTH;
-+
-+ *Database = database;
-+
-+ gcmkFOOTER_ARG("*Database=0x%08X", *Database);
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ /* Rollback. */
-+ if (database)
-+ {
-+ if (database->table)
-+ {
-+ gcmkOS_SAFE_FREE(Kernel->os, database->table);
-+ }
-+
-+ gcmkOS_SAFE_FREE(Kernel->os, database);
-+ }
-+
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+gceSTATUS
-+gckKERNEL_DestroyIntegerDatabase(
-+ IN gckKERNEL Kernel,
-+ IN gctPOINTER Database
-+ )
-+{
-+ gckINTEGERDB database = Database;
-+
-+ gcmkHEADER_ARG("Kernel=0x%08X Datbase=0x%08X", Kernel, Database);
-+
-+ gcmkVERIFY_OBJECT(Kernel, gcvOBJ_KERNEL);
-+ gcmkVERIFY_ARGUMENT(Database != gcvNULL);
-+
-+ /* Destroy pointer table. */
-+ gcmkOS_SAFE_FREE(Kernel->os, database->table);
-+
-+ /* Destroy database mutex. */
-+ gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, database->mutex));
-+
-+ /* Destroy database. */
-+ gcmkOS_SAFE_FREE(Kernel->os, database);
-+
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+}
-+
-+gceSTATUS
-+gckKERNEL_AllocateIntegerId(
-+ IN gctPOINTER Database,
-+ IN gctPOINTER Pointer,
-+ OUT gctUINT32 * Id
-+ )
-+{
-+ gceSTATUS status;
-+ gckINTEGERDB database = Database;
-+ gctUINT32 i, unused, currentID, tableLen;
-+ gctPOINTER * table;
-+ gckOS os = database->os;
-+ gctBOOL acquired = gcvFALSE;
-+
-+ gcmkHEADER_ARG("Database=0x%08X Pointer=0x%08X", Database, Pointer);
-+
-+ gcmkVERIFY_ARGUMENT(Id != gcvNULL);
-+
-+ gcmkVERIFY_OK(gckOS_AcquireMutex(os, database->mutex, gcvINFINITE));
-+ acquired = gcvTRUE;
-+
-+ if (database->unused < 1)
-+ {
-+ /* Extend table. */
-+ gcmkONERROR(
-+ gckOS_Allocate(os,
-+ gcmSIZEOF(gctPOINTER) * (database->tableLen + gcdID_TABLE_LENGTH),
-+ (gctPOINTER *)&table));
-+
-+ gckOS_ZeroMemory(table + database->tableLen,
-+ gcmSIZEOF(gctPOINTER) * gcdID_TABLE_LENGTH);
-+
-+ /* Copy data from old table. */
-+ gckOS_MemCopy(table,
-+ database->table,
-+ database->tableLen * gcmSIZEOF(gctPOINTER));
-+
-+ gcmkOS_SAFE_FREE(os, database->table);
-+
-+ /* Update databse with new allocated table. */
-+ database->table = table;
-+ database->currentID = database->tableLen;
-+ database->tableLen += gcdID_TABLE_LENGTH;
-+ database->unused += gcdID_TABLE_LENGTH;
-+ }
-+
-+ table = database->table;
-+ currentID = database->currentID;
-+ tableLen = database->tableLen;
-+ unused = database->unused;
-+
-+ /* Connect id with pointer. */
-+ table[currentID] = Pointer;
-+
-+ *Id = currentID + 1;
-+
-+ /* Update the currentID. */
-+ if (--unused > 0)
-+ {
-+ for (i = 0; i < tableLen; i++)
-+ {
-+ if (++currentID >= tableLen)
-+ {
-+ /* Wrap to the begin. */
-+ currentID = 0;
-+ }
-+
-+ if (table[currentID] == gcvNULL)
-+ {
-+ break;
-+ }
-+ }
-+ }
-+
-+ database->table = table;
-+ database->currentID = currentID;
-+ database->tableLen = tableLen;
-+ database->unused = unused;
-+
-+ gcmkVERIFY_OK(gckOS_ReleaseMutex(os, database->mutex));
-+ acquired = gcvFALSE;
-+
-+ gcmkFOOTER_ARG("*Id=%d", *Id);
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ if (acquired)
-+ {
-+ gcmkVERIFY_OK(gckOS_ReleaseMutex(os, database->mutex));
-+ }
-+
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+gceSTATUS
-+gckKERNEL_FreeIntegerId(
-+ IN gctPOINTER Database,
-+ IN gctUINT32 Id
-+ )
-+{
-+ gceSTATUS status;
-+ gckINTEGERDB database = Database;
-+ gckOS os = database->os;
-+ gctBOOL acquired = gcvFALSE;
-+
-+ gcmkHEADER_ARG("Database=0x%08X Id=%d", Database, Id);
-+
-+ gcmkVERIFY_OK(gckOS_AcquireMutex(os, database->mutex, gcvINFINITE));
-+ acquired = gcvTRUE;
-+
-+ if (!(Id > 0 && Id <= database->tableLen))
-+ {
-+ gcmkONERROR(gcvSTATUS_NOT_FOUND);
-+ }
-+
-+ Id -= 1;
-+
-+ database->table[Id] = gcvNULL;
-+
-+ if (database->unused++ == 0)
-+ {
-+ database->currentID = Id;
-+ }
-+
-+ gcmkVERIFY_OK(gckOS_ReleaseMutex(os, database->mutex));
-+ acquired = gcvFALSE;
-+
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ if (acquired)
-+ {
-+ gcmkVERIFY_OK(gckOS_ReleaseMutex(os, database->mutex));
-+ }
-+
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+gceSTATUS
-+gckKERNEL_QueryIntegerId(
-+ IN gctPOINTER Database,
-+ IN gctUINT32 Id,
-+ OUT gctPOINTER * Pointer
-+ )
-+{
-+ gceSTATUS status;
-+ gckINTEGERDB database = Database;
-+ gctPOINTER pointer;
-+ gckOS os = database->os;
-+ gctBOOL acquired = gcvFALSE;
-+
-+ gcmkHEADER_ARG("Database=0x%08X Id=%d", Database, Id);
-+ gcmkVERIFY_ARGUMENT(Pointer != gcvNULL);
-+
-+ gcmkVERIFY_OK(gckOS_AcquireMutex(os, database->mutex, gcvINFINITE));
-+ acquired = gcvTRUE;
-+
-+ if (!(Id > 0 && Id <= database->tableLen))
-+ {
-+ gcmkONERROR(gcvSTATUS_NOT_FOUND);
-+ }
-+
-+ Id -= 1;
-+
-+ pointer = database->table[Id];
-+
-+ gcmkVERIFY_OK(gckOS_ReleaseMutex(os, database->mutex));
-+ acquired = gcvFALSE;
-+
-+ if (pointer)
-+ {
-+ *Pointer = pointer;
-+ }
-+ else
-+ {
-+ gcmkONERROR(gcvSTATUS_NOT_FOUND);
-+ }
-+
-+ gcmkFOOTER_ARG("*Pointer=0x%08X", *Pointer);
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ if (acquired)
-+ {
-+ gcmkVERIFY_OK(gckOS_ReleaseMutex(os, database->mutex));
-+ }
-+
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+
-+gctUINT32
-+gckKERNEL_AllocateNameFromPointer(
-+ IN gckKERNEL Kernel,
-+ IN gctPOINTER Pointer
-+ )
-+{
-+ gceSTATUS status;
-+ gctUINT32 name;
-+ gctPOINTER database = Kernel->db->pointerDatabase;
-+
-+ gcmkHEADER_ARG("Kernel=0x%X Pointer=0x%X", Kernel, Pointer);
-+
-+ gcmkONERROR(
-+ gckKERNEL_AllocateIntegerId(database, Pointer, &name));
-+
-+ gcmkFOOTER_ARG("name=%d", name);
-+ return name;
-+
-+OnError:
-+ gcmkFOOTER();
-+ return 0;
-+}
-+
-+gctPOINTER
-+gckKERNEL_QueryPointerFromName(
-+ IN gckKERNEL Kernel,
-+ IN gctUINT32 Name
-+ )
-+{
-+ gceSTATUS status;
-+ gctPOINTER pointer = gcvNULL;
-+ gctPOINTER database = Kernel->db->pointerDatabase;
-+
-+ gcmkHEADER_ARG("Kernel=0x%X Name=%d", Kernel, Name);
-+
-+ /* Lookup in database to get pointer. */
-+ gcmkONERROR(gckKERNEL_QueryIntegerId(database, Name, &pointer));
-+
-+ gcmkFOOTER_ARG("pointer=0x%X", pointer);
-+ return pointer;
-+
-+OnError:
-+ gcmkFOOTER();
-+ return gcvNULL;
-+}
-+
-+gceSTATUS
-+gckKERNEL_DeleteName(
-+ IN gckKERNEL Kernel,
-+ IN gctUINT32 Name
-+ )
-+{
-+ gctPOINTER database = Kernel->db->pointerDatabase;
-+
-+ gcmkHEADER_ARG("Kernel=0x%X Name=0x%X", Kernel, Name);
-+
-+ /* Free name if exists. */
-+ gcmkVERIFY_OK(gckKERNEL_FreeIntegerId(database, Name));
-+
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+}
- /*******************************************************************************
- ***** Test Code ****************************************************************
- *******************************************************************************/
-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 a53c8ce..1da80b7 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_kernel_h_
- #define __gc_hal_kernel_h_
-
-@@ -194,6 +192,9 @@ typedef struct _gcsDATABASE
- /* Secure cache. */
- gcskSECURE_CACHE cache;
- #endif
-+
-+ gctPOINTER handleDatabase;
-+ gctPOINTER handleDatabaseMutex;
- }
- gcsDATABASE;
-
-@@ -258,6 +259,57 @@ gckKERNEL_DumpProcessDB(
- IN gckKERNEL Kernel
- );
-
-+/* ID database */
-+gceSTATUS
-+gckKERNEL_CreateIntegerDatabase(
-+ IN gckKERNEL Kernel,
-+ OUT gctPOINTER * Database
-+ );
-+
-+gceSTATUS
-+gckKERNEL_DestroyIntegerDatabase(
-+ IN gckKERNEL Kernel,
-+ IN gctPOINTER Database
-+ );
-+
-+gceSTATUS
-+gckKERNEL_AllocateIntegerId(
-+ IN gctPOINTER Database,
-+ IN gctPOINTER Pointer,
-+ OUT gctUINT32 * Id
-+ );
-+
-+gceSTATUS
-+gckKERNEL_FreeIntegerId(
-+ IN gctPOINTER Database,
-+ IN gctUINT32 Id
-+ );
-+
-+gceSTATUS
-+gckKERNEL_QueryIntegerId(
-+ IN gctPOINTER Database,
-+ IN gctUINT32 Id,
-+ OUT gctPOINTER * Pointer
-+ );
-+
-+gctUINT32
-+gckKERNEL_AllocateNameFromPointer(
-+ IN gckKERNEL Kernel,
-+ IN gctPOINTER Pointer
-+ );
-+
-+gctPOINTER
-+gckKERNEL_QueryPointerFromName(
-+ IN gckKERNEL Kernel,
-+ IN gctUINT32 Name
-+ );
-+
-+gceSTATUS
-+gckKERNEL_DeleteName(
-+ IN gckKERNEL Kernel,
-+ IN gctUINT32 Name
-+ );
-+
- #if gcdSECURE_USER
- /* Get secure cache from the process database. */
- gceSTATUS
-@@ -297,6 +349,9 @@ struct _gckDB
- gctUINT64 idleTime;
- gctUINT64 lastSlowdown;
- gctUINT64 lastSlowdownIdle;
-+ /* ID - Pointer database*/
-+ gctPOINTER pointerDatabase;
-+ gctPOINTER pointerDatabaseMutex;
- };
-
- #if gcdVIRTUAL_COMMAND_BUFFER
-@@ -370,6 +425,7 @@ struct _gckKERNEL
- #if gcdENABLE_RECOVERY
- gctPOINTER resetFlagClearTimer;
- gctPOINTER resetAtom;
-+ gctUINT64 resetTimeStamp;
- #endif
-
- /* Pointer to gckEVENT object. */
-@@ -385,6 +441,30 @@ struct _gckKERNEL
- gckVIRTUAL_COMMAND_BUFFER_PTR virtualBufferTail;
- gctPOINTER virtualBufferLock;
- #endif
-+
-+#if gcdDVFS
-+ gckDVFS dvfs;
-+#endif
-+};
-+
-+struct _FrequencyHistory
-+{
-+ gctUINT32 frequency;
-+ gctUINT32 count;
-+};
-+
-+/* gckDVFS object. */
-+struct _gckDVFS
-+{
-+ gckOS os;
-+ gckHARDWARE hardware;
-+ gctPOINTER timer;
-+ gctUINT32 pollingTime;
-+ gctBOOL stop;
-+ gctUINT32 totalConfig;
-+ gctUINT32 loads[8];
-+ gctUINT8 currentScale;
-+ struct _FrequencyHistory frequencyHistory[16];
- };
-
- /* gckCOMMAND object. */
-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 952ee88..66ce0d1 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_precomp.h"
- #include "gc_hal_kernel_context.h"
-
-@@ -250,7 +248,7 @@ _ProcessHints(
- if (Command->hintArrayAllocated &&
- (Command->hintArraySize < CommandBuffer->hintArraySize))
- {
-- gcmkONERROR(gcmkOS_SAFE_FREE(Command->os, Command->hintArray));
-+ gcmkONERROR(gcmkOS_SAFE_FREE(Command->os, gcmUINT64_TO_PTR(Command->hintArray)));
- Command->hintArraySize = gcvFALSE;
- }
-
-@@ -264,18 +262,18 @@ _ProcessHints(
- &pointer
- ));
-
-- Command->hintArray = pointer;
-+ Command->hintArray = gcmPTR_TO_UINT64(pointer);
- Command->hintArrayAllocated = gcvTRUE;
- Command->hintArraySize = CommandBuffer->hintArraySize;
- }
-
-- hintArray = Command->hintArray;
-+ hintArray = gcmUINT64_TO_PTR(Command->hintArray);
- copySize = hintCount * gcmSIZEOF(gctUINT32);
-
- gcmkONERROR(gckOS_CopyFromUserData(
- Command->os,
- hintArray,
-- CommandBuffer->hintArray,
-+ gcmUINT64_TO_PTR(CommandBuffer->hintArray),
- copySize
- ));
- }
-@@ -285,7 +283,7 @@ _ProcessHints(
-
- gcmkONERROR(gckOS_MapUserPointer(
- Command->os,
-- CommandBuffer->hintArray,
-+ gcmUINT64_TO_PTR(CommandBuffer->hintArray),
- CommandBuffer->hintArraySize,
- &pointer
- ));
-@@ -311,7 +309,7 @@ OnError:
- {
- gcmkVERIFY_OK(gckOS_UnmapUserPointer(
- Command->os,
-- CommandBuffer->hintArray,
-+ gcmUINT64_TO_PTR(CommandBuffer->hintArray),
- CommandBuffer->hintArraySize,
- hintArray
- ));
-@@ -677,7 +675,7 @@ gckCOMMAND_Destroy(
- /* Free state array. */
- if (Command->hintArrayAllocated)
- {
-- gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Command->os, Command->hintArray));
-+ gcmkVERIFY_OK(gcmkOS_SAFE_FREE(Command->os, gcmUINT64_TO_PTR(Command->hintArray)));
- Command->hintArrayAllocated = gcvFALSE;
- }
- #endif
-@@ -1219,7 +1217,7 @@ gckCOMMAND_Commit(
-
- /* Compute the command buffer entry and the size. */
- commandBufferLogical
-- = (gctUINT8_PTR) commandBufferObject->logical
-+ = (gctUINT8_PTR) gcmUINT64_TO_PTR(commandBufferObject->logical)
- + commandBufferObject->startOffset;
-
- gcmkONERROR(gckOS_GetPhysicalAddress(
-@@ -1892,7 +1890,7 @@ gckCOMMAND_Commit(
-
- /* Determine the location of the LINK command in the command buffer. */
- commandBufferLink
-- = (gctUINT8_PTR) commandBufferObject->logical
-+ = (gctUINT8_PTR) gcmUINT64_TO_PTR(commandBufferObject->logical)
- + commandBufferObject->offset;
-
- /* Generate a LINK from the end of the command buffer being scheduled
-@@ -2034,7 +2032,7 @@ gckCOMMAND_Commit(
- ));
-
- /* Next record in the queue. */
-- nextEventRecord = eventRecord->next;
-+ nextEventRecord = gcmUINT64_TO_PTR(eventRecord->next);
-
- if (!needCopy)
- {
-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 31dce52..af053f9 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_precomp.h"
-
- #if gcdENABLE_VG
-@@ -630,7 +628,7 @@ _RemoveRecordFromProcesDB(
- Command->kernel->kernel,
- pid,
- gcvDB_VIDEO_MEMORY,
-- freeVideoMemory->node));
-+ gcmUINT64_TO_PTR(freeVideoMemory->node)));
-
- /* Advance to next task. */
- size -= sizeof(gcsTASK_FREE_VIDEO_MEMORY);
-@@ -645,7 +643,7 @@ _RemoveRecordFromProcesDB(
- Command->kernel->kernel,
- pid,
- gcvDB_VIDEO_MEMORY_LOCKED,
-- unlockVideoMemory->node));
-+ gcmUINT64_TO_PTR(unlockVideoMemory->node)));
-
- /* Advance to next task. */
- size -= sizeof(gcsTASK_UNLOCK_VIDEO_MEMORY);
-@@ -963,7 +961,7 @@ _ConvertUserCommandBufferPointer(
- /* Translate the logical address to the kernel space. */
- gcmkERR_BREAK(_HardwareToKernel(
- Command->os,
-- mappedUserCommandBuffer->node,
-+ gcmUINT64_TO_PTR(mappedUserCommandBuffer->node),
- headerAddress,
- (gctPOINTER *) KernelCommandBuffer
- ));
-@@ -1137,7 +1135,7 @@ _AllocateCommandBuffer(
-
- /* Initialize the structure. */
- commandBuffer->completion = gcvVACANT_BUFFER;
-- commandBuffer->node = node;
-+ commandBuffer->node = gcmPTR_TO_UINT64(node);
- commandBuffer->address = address + alignedHeaderSize;
- commandBuffer->bufferOffset = alignedHeaderSize;
- commandBuffer->size = requestedSize;
-@@ -1192,7 +1190,7 @@ _FreeCommandBuffer(
- gceSTATUS status;
-
- /* Free the buffer. */
-- status = _FreeLinear(Kernel, CommandBuffer->node);
-+ status = _FreeLinear(Kernel, gcmUINT64_TO_PTR(CommandBuffer->node));
-
- /* Return status. */
- return status;
-@@ -1649,7 +1647,7 @@ _TaskUnlockVideoMemory(
- /* Unlock video memory. */
- gcmkERR_BREAK(gckVIDMEM_Unlock(
- Command->kernel->kernel,
-- task->node,
-+ gcmUINT64_TO_PTR(task->node),
- gcvSURF_TYPE_UNKNOWN,
- gcvNULL));
-
-@@ -1680,7 +1678,7 @@ _TaskFreeVideoMemory(
- = (gcsTASK_FREE_VIDEO_MEMORY_PTR) TaskHeader->task;
-
- /* Free video memory. */
-- gcmkERR_BREAK(gckVIDMEM_Free(task->node));
-+ gcmkERR_BREAK(gckVIDMEM_Free(gcmUINT64_TO_PTR(task->node)));
-
- /* Update the reference counter. */
- TaskHeader->container->referenceCount -= 1;
-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 50a95a1..1fb18fb 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_precomp.h"
-
- #define _GC_OBJ_ZONE gcvZONE_DATABASE
-@@ -1085,6 +1083,9 @@ gckKERNEL_DestroyProcessDB(
- gcsDATABASE_PTR database;
- gcsDATABASE_RECORD_PTR record, next;
- gctBOOL asynchronous;
-+ gctPHYS_ADDR physical;
-+ gcuVIDMEM_NODE_PTR node;
-+ gckKERNEL kernel = Kernel;
-
- gcmkHEADER_ARG("Kernel=0x%x ProcessID=%d", Kernel, ProcessID);
-
-@@ -1136,7 +1137,7 @@ gckKERNEL_DestroyProcessDB(
- {
- case gcvDB_VIDEO_MEMORY:
- /* Free the video memory. */
-- status = gckVIDMEM_Free(record->data);
-+ status = gckVIDMEM_Free(gcmUINT64_TO_PTR(record->data));
-
- gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
- "DB: VIDEO_MEMORY 0x%x (status=%d)",
-@@ -1144,17 +1145,19 @@ gckKERNEL_DestroyProcessDB(
- break;
-
- case gcvDB_NON_PAGED:
-+ physical = gcmNAME_TO_PTR(record->physical);
- /* Unmap user logical memory first. */
- status = gckOS_UnmapUserLogical(Kernel->os,
-- record->physical,
-+ physical,
- record->bytes,
- record->data);
-
- /* Free the non paged memory. */
- status = gckOS_FreeNonPagedMemory(Kernel->os,
- record->bytes,
-- record->physical,
-+ physical,
- record->data);
-+ gcmRELEASE_NAME(record->physical);
-
- gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
- "DB: NON_PAGED 0x%x, bytes=%lu (status=%d)",
-@@ -1166,9 +1169,10 @@ gckKERNEL_DestroyProcessDB(
- /* Free the command buffer. */
- status = gckEVENT_DestroyVirtualCommandBuffer(record->kernel->eventObj,
- record->bytes,
-- record->physical,
-+ gcmNAME_TO_PTR(record->physical),
- record->data,
- gcvKERNEL_PIXEL);
-+ gcmRELEASE_NAME(record->physical);
-
- gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
- "DB: COMMAND_BUFFER 0x%x, bytes=%lu (status=%d)",
-@@ -1177,18 +1181,20 @@ gckKERNEL_DestroyProcessDB(
- #endif
-
- case gcvDB_CONTIGUOUS:
-+ physical = gcmNAME_TO_PTR(record->physical);
- /* Unmap user logical memory first. */
- status = gckOS_UnmapUserLogical(Kernel->os,
-- record->physical,
-+ physical,
- record->bytes,
- record->data);
-
- /* Free the contiguous memory. */
- status = gckEVENT_FreeContiguousMemory(Kernel->eventObj,
- record->bytes,
-- record->physical,
-+ physical,
- record->data,
- gcvKERNEL_PIXEL);
-+ gcmRELEASE_NAME(record->physical);
-
- gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
- "DB: CONTIGUOUS 0x%x bytes=%lu (status=%d)",
-@@ -1210,9 +1216,10 @@ gckKERNEL_DestroyProcessDB(
- break;
-
- case gcvDB_VIDEO_MEMORY_LOCKED:
-+ node = gcmUINT64_TO_PTR(record->data);
- /* Unlock what we still locked */
- status = gckVIDMEM_Unlock(record->kernel,
-- record->data,
-+ node,
- gcvSURF_TYPE_UNKNOWN,
- &asynchronous);
-
-@@ -1220,19 +1227,20 @@ gckKERNEL_DestroyProcessDB(
- {
- /* TODO: we maybe need to schedule a event here */
- status = gckVIDMEM_Unlock(record->kernel,
-- record->data,
-+ node,
- gcvSURF_TYPE_UNKNOWN,
- gcvNULL);
- }
-
- gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
- "DB: VIDEO_MEMORY_LOCKED 0x%x (status=%d)",
-- record->data, status);
-+ node, status);
- break;
-
- case gcvDB_CONTEXT:
- /* TODO: Free the context */
-- status = gckCOMMAND_Detach(Kernel->command, record->data);
-+ status = gckCOMMAND_Detach(Kernel->command, gcmNAME_TO_PTR(record->data));
-+ gcmRELEASE_NAME(record->data);
-
- gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
- "DB: CONTEXT 0x%x (status=%d)",
-@@ -1257,8 +1265,9 @@ gckKERNEL_DestroyProcessDB(
- Kernel->core,
- record->physical,
- record->bytes,
-- record->data,
-+ gcmNAME_TO_PTR(record->data),
- 0);
-+ gcmRELEASE_NAME(record->data);
-
- gcmkTRACE_ZONE(gcvLEVEL_WARNING, gcvZONE_DATABASE,
- "DB: MAP USER MEMORY %d (status=%d)",
-@@ -1350,21 +1359,21 @@ gckKERNEL_QueryProcessDB(
- switch (Type)
- {
- case gcvDB_VIDEO_MEMORY:
-- gcmkONERROR(gckOS_MemCopy(&Info->counters,
-+ gckOS_MemCopy(&Info->counters,
- &database->vidMem,
-- gcmSIZEOF(database->vidMem)));
-+ gcmSIZEOF(database->vidMem));
- break;
-
- case gcvDB_NON_PAGED:
-- gcmkONERROR(gckOS_MemCopy(&Info->counters,
-+ gckOS_MemCopy(&Info->counters,
- &database->nonPaged,
-- gcmSIZEOF(database->vidMem)));
-+ gcmSIZEOF(database->vidMem));
- break;
-
- case gcvDB_CONTIGUOUS:
-- gcmkONERROR(gckOS_MemCopy(&Info->counters,
-+ gckOS_MemCopy(&Info->counters,
- &database->contiguous,
-- gcmSIZEOF(database->vidMem)));
-+ gcmSIZEOF(database->vidMem));
- break;
-
- case gcvDB_IDLE:
-@@ -1373,15 +1382,15 @@ gckKERNEL_QueryProcessDB(
- break;
-
- case gcvDB_MAP_MEMORY:
-- gcmkONERROR(gckOS_MemCopy(&Info->counters,
-+ gckOS_MemCopy(&Info->counters,
- &database->mapMemory,
-- gcmSIZEOF(database->mapMemory)));
-+ gcmSIZEOF(database->mapMemory));
- break;
-
- case gcvDB_MAP_USER_MEMORY:
-- gcmkONERROR(gckOS_MemCopy(&Info->counters,
-+ gckOS_MemCopy(&Info->counters,
- &database->mapUserMemory,
-- gcmSIZEOF(database->mapUserMemory)));
-+ gcmSIZEOF(database->mapUserMemory));
- break;
-
- default:
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c
-index 00decd9..a689bc3 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_precomp.h"
- #include <gc_hal_kernel_debug.h>
-
-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 75647c0..f78d096 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_precomp.h"
- #include "gc_hal_kernel_buffer.h"
-
-@@ -290,7 +288,7 @@ __RemoveRecordFromProcessDB(
- {
- /* TODO: Find a better place to bind signal to hardware.*/
- gcmkVERIFY_OK(gckOS_SignalSetHardware(Event->os,
-- Record->info.u.Signal.signal,
-+ gcmUINT64_TO_PTR(Record->info.u.Signal.signal),
- Event->kernel->hardware));
- }
-
-@@ -308,7 +306,7 @@ __RemoveRecordFromProcessDB(
- Event->kernel,
- Record->processID,
- gcvDB_NON_PAGED,
-- Record->info.u.FreeNonPagedMemory.logical));
-+ gcmUINT64_TO_PTR(Record->info.u.FreeNonPagedMemory.logical)));
- break;
-
- case gcvHAL_FREE_CONTIGUOUS_MEMORY:
-@@ -316,7 +314,7 @@ __RemoveRecordFromProcessDB(
- Event->kernel,
- Record->processID,
- gcvDB_CONTIGUOUS,
-- Record->info.u.FreeContiguousMemory.logical));
-+ gcmUINT64_TO_PTR(Record->info.u.FreeContiguousMemory.logical)));
- break;
-
- case gcvHAL_FREE_VIDEO_MEMORY:
-@@ -324,7 +322,7 @@ __RemoveRecordFromProcessDB(
- Event->kernel,
- Record->processID,
- gcvDB_VIDEO_MEMORY,
-- Record->info.u.FreeVideoMemory.node));
-+ gcmUINT64_TO_PTR(Record->info.u.FreeVideoMemory.node)));
- break;
-
- case gcvHAL_UNLOCK_VIDEO_MEMORY:
-@@ -332,7 +330,7 @@ __RemoveRecordFromProcessDB(
- Event->kernel,
- Record->processID,
- gcvDB_VIDEO_MEMORY_LOCKED,
-- Record->info.u.UnlockVideoMemory.node));
-+ gcmUINT64_TO_PTR(Record->info.u.UnlockVideoMemory.node)));
- break;
-
- case gcvHAL_UNMAP_USER_MEMORY:
-@@ -340,7 +338,7 @@ __RemoveRecordFromProcessDB(
- Event->kernel,
- Record->processID,
- gcvDB_MAP_USER_MEMORY,
-- Record->info.u.UnmapUserMemory.info));
-+ gcmINT2PTR(Record->info.u.UnmapUserMemory.info)));
- break;
-
- case gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER:
-@@ -348,7 +346,7 @@ __RemoveRecordFromProcessDB(
- Event->kernel,
- Record->processID,
- gcvDB_COMMAND_BUFFER,
-- Record->info.u.FreeVirtualCommandBuffer.logical));
-+ gcmUINT64_TO_PTR(Record->info.u.FreeVirtualCommandBuffer.logical)));
- break;
-
- default:
-@@ -551,7 +549,7 @@ gckEVENT_Destroy(
- if (Event->submitTimer != gcvNULL)
- {
- gcmkVERIFY_OK(gckOS_StopTimer(Event->os, Event->submitTimer));
-- gcmkVERIFY_OK(gckOS_DestoryTimer(Event->os, Event->submitTimer));
-+ gcmkVERIFY_OK(gckOS_DestroyTimer(Event->os, Event->submitTimer));
- }
-
- /* Delete the queue mutex. */
-@@ -908,6 +906,7 @@ gckEVENT_AddList(
- gctBOOL acquired = gcvFALSE;
- gcsEVENT_PTR record = gcvNULL;
- gcsEVENT_QUEUE_PTR queue;
-+ gckKERNEL kernel = Event->kernel;
-
- gcmkHEADER_ARG("Event=0x%x Interface=0x%x",
- Event, Interface);
-@@ -951,7 +950,7 @@ gckEVENT_AddList(
- record->fromKernel = FromKernel;
-
- /* Copy the event interface into the record. */
-- gcmkONERROR(gckOS_MemCopy(&record->info, Interface, gcmSIZEOF(record->info)));
-+ gckOS_MemCopy(&record->info, Interface, gcmSIZEOF(record->info));
-
- /* Get process ID. */
- gcmkONERROR(gckOS_GetProcessID(&record->processID));
-@@ -1013,16 +1012,16 @@ gckEVENT_AddList(
- case gcvHAL_FREE_NON_PAGED_MEMORY:
- gcmkONERROR(gckOS_UnmapUserLogical(
- Event->os,
-- Interface->u.FreeNonPagedMemory.physical,
-- Interface->u.FreeNonPagedMemory.bytes,
-- Interface->u.FreeNonPagedMemory.logical));
-+ gcmNAME_TO_PTR(Interface->u.FreeNonPagedMemory.physical),
-+ (gctSIZE_T) Interface->u.FreeNonPagedMemory.bytes,
-+ gcmUINT64_TO_PTR(Interface->u.FreeNonPagedMemory.logical)));
- break;
- case gcvHAL_FREE_CONTIGUOUS_MEMORY:
- gcmkONERROR(gckOS_UnmapUserLogical(
- Event->os,
-- Interface->u.FreeContiguousMemory.physical,
-- Interface->u.FreeContiguousMemory.bytes,
-- Interface->u.FreeContiguousMemory.logical));
-+ gcmNAME_TO_PTR(Interface->u.FreeContiguousMemory.physical),
-+ (gctSIZE_T) Interface->u.FreeContiguousMemory.bytes,
-+ gcmUINT64_TO_PTR(Interface->u.FreeContiguousMemory.logical)));
- break;
- default:
- break;
-@@ -1098,7 +1097,7 @@ gckEVENT_Unlock(
-
- /* Mark the event as an unlock. */
- iface.command = gcvHAL_UNLOCK_VIDEO_MEMORY;
-- iface.u.UnlockVideoMemory.node = Node;
-+ iface.u.UnlockVideoMemory.node = gcmPTR_TO_UINT64(Node);
- iface.u.UnlockVideoMemory.type = Type;
- iface.u.UnlockVideoMemory.asynchroneous = 0;
-
-@@ -1155,7 +1154,7 @@ gckEVENT_FreeVideoMemory(
-
- /* Create an event. */
- iface.command = gcvHAL_FREE_VIDEO_MEMORY;
-- iface.u.FreeVideoMemory.node = VideoMemory;
-+ iface.u.FreeVideoMemory.node = gcmPTR_TO_UINT64(VideoMemory);
-
- /* Append it to the queue. */
- gcmkONERROR(gckEVENT_AddList(Event, &iface, FromWhere, gcvFALSE, gcvTRUE));
-@@ -1204,6 +1203,7 @@ gckEVENT_FreeNonPagedMemory(
- {
- gceSTATUS status;
- gcsHAL_INTERFACE iface;
-+ gckKERNEL kernel = Event->kernel;
-
- gcmkHEADER_ARG("Event=0x%x Bytes=%lu Physical=0x%x Logical=0x%x "
- "FromWhere=%d",
-@@ -1218,8 +1218,8 @@ gckEVENT_FreeNonPagedMemory(
- /* Create an event. */
- iface.command = gcvHAL_FREE_NON_PAGED_MEMORY;
- iface.u.FreeNonPagedMemory.bytes = Bytes;
-- iface.u.FreeNonPagedMemory.physical = Physical;
-- iface.u.FreeNonPagedMemory.logical = Logical;
-+ iface.u.FreeNonPagedMemory.physical = gcmPTR_TO_NAME(Physical);
-+ iface.u.FreeNonPagedMemory.logical = gcmPTR_TO_UINT64(Logical);
-
- /* Append it to the queue. */
- gcmkONERROR(gckEVENT_AddList(Event, &iface, FromWhere, gcvFALSE, gcvTRUE));
-@@ -1245,6 +1245,7 @@ gckEVENT_DestroyVirtualCommandBuffer(
- {
- gceSTATUS status;
- gcsHAL_INTERFACE iface;
-+ gckKERNEL kernel = Event->kernel;
-
- gcmkHEADER_ARG("Event=0x%x Bytes=%lu Physical=0x%x Logical=0x%x "
- "FromWhere=%d",
-@@ -1259,8 +1260,8 @@ gckEVENT_DestroyVirtualCommandBuffer(
- /* Create an event. */
- iface.command = gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER;
- iface.u.FreeVirtualCommandBuffer.bytes = Bytes;
-- iface.u.FreeVirtualCommandBuffer.physical = Physical;
-- iface.u.FreeVirtualCommandBuffer.logical = Logical;
-+ iface.u.FreeVirtualCommandBuffer.physical = gcmPTR_TO_NAME(Physical);
-+ iface.u.FreeVirtualCommandBuffer.logical = gcmPTR_TO_UINT64(Logical);
-
- /* Append it to the queue. */
- gcmkONERROR(gckEVENT_AddList(Event, &iface, FromWhere, gcvFALSE, gcvTRUE));
-@@ -1309,6 +1310,7 @@ gckEVENT_FreeContiguousMemory(
- {
- gceSTATUS status;
- gcsHAL_INTERFACE iface;
-+ gckKERNEL kernel = Event->kernel;
-
- gcmkHEADER_ARG("Event=0x%x Bytes=%lu Physical=0x%x Logical=0x%x "
- "FromWhere=%d",
-@@ -1323,8 +1325,8 @@ gckEVENT_FreeContiguousMemory(
- /* Create an event. */
- iface.command = gcvHAL_FREE_CONTIGUOUS_MEMORY;
- iface.u.FreeContiguousMemory.bytes = Bytes;
-- iface.u.FreeContiguousMemory.physical = Physical;
-- iface.u.FreeContiguousMemory.logical = Logical;
-+ iface.u.FreeContiguousMemory.physical = gcmPTR_TO_NAME(Physical);
-+ iface.u.FreeContiguousMemory.logical = gcmPTR_TO_UINT64(Logical);
-
- /* Append it to the queue. */
- gcmkONERROR(gckEVENT_AddList(Event, &iface, FromWhere, gcvFALSE, gcvTRUE));
-@@ -1379,13 +1381,13 @@ gckEVENT_Signal(
-
- /* Mark the event as a signal. */
- iface.command = gcvHAL_SIGNAL;
-- iface.u.Signal.signal = Signal;
-+ iface.u.Signal.signal = gcmPTR_TO_UINT64(Signal);
- #ifdef __QNXNTO__
- iface.u.Signal.coid = 0;
- iface.u.Signal.rcvid = 0;
- #endif
-- iface.u.Signal.auxSignal = gcvNULL;
-- iface.u.Signal.process = gcvNULL;
-+ iface.u.Signal.auxSignal = 0;
-+ iface.u.Signal.process = 0;
-
- /* Append it to the queue. */
- gcmkONERROR(gckEVENT_AddList(Event, &iface, FromWhere, gcvFALSE, gcvTRUE));
-@@ -1690,7 +1692,7 @@ gckEVENT_Commit(
- gckEVENT_AddList(Event, &record->iface, gcvKERNEL_PIXEL, gcvTRUE, gcvFALSE));
-
- /* Next record in the queue. */
-- next = record->next;
-+ next = gcmUINT64_TO_PTR(record->next);
-
- if (!needCopy)
- {
-@@ -1783,12 +1785,12 @@ gckEVENT_Compose(
- tempRecord->info.u.Signal.rcvid = Info->rcvid;
- #endif
- tempRecord->info.u.Signal.signal = Info->signal;
-- tempRecord->info.u.Signal.auxSignal = gcvNULL;
-+ tempRecord->info.u.Signal.auxSignal = 0;
- tempRecord->next = gcvNULL;
- tempRecord->processID = processID;
-
- /* Allocate another record for user signal #1. */
-- if (Info->userSignal1 != gcvNULL)
-+ if (gcmUINT64_TO_PTR(Info->userSignal1) != gcvNULL)
- {
- /* Allocate a record. */
- gcmkONERROR(gckEVENT_AllocateRecord(Event, gcvTRUE, &tempRecord));
-@@ -1803,13 +1805,13 @@ gckEVENT_Compose(
- tempRecord->info.u.Signal.rcvid = Info->rcvid;
- #endif
- tempRecord->info.u.Signal.signal = Info->userSignal1;
-- tempRecord->info.u.Signal.auxSignal = gcvNULL;
-+ tempRecord->info.u.Signal.auxSignal = 0;
- tempRecord->next = gcvNULL;
- tempRecord->processID = processID;
- }
-
- /* Allocate another record for user signal #2. */
-- if (Info->userSignal2 != gcvNULL)
-+ if (gcmUINT64_TO_PTR(Info->userSignal2) != gcvNULL)
- {
- /* Allocate a record. */
- gcmkONERROR(gckEVENT_AllocateRecord(Event, gcvTRUE, &tempRecord));
-@@ -1824,7 +1826,7 @@ gckEVENT_Compose(
- tempRecord->info.u.Signal.rcvid = Info->rcvid;
- #endif
- tempRecord->info.u.Signal.signal = Info->userSignal2;
-- tempRecord->info.u.Signal.auxSignal = gcvNULL;
-+ tempRecord->info.u.Signal.auxSignal = 0;
- tempRecord->next = gcvNULL;
- tempRecord->processID = processID;
- }
-@@ -1835,7 +1837,7 @@ gckEVENT_Compose(
- /* Start composition. */
- gcmkONERROR(gckHARDWARE_Compose(
- Event->kernel->hardware, processID,
-- Info->physical, Info->logical, Info->offset, Info->size, id
-+ gcmUINT64_TO_PTR(Info->physical), gcmUINT64_TO_PTR(Info->logical), Info->offset, Info->size, id
- ));
-
- /* Success. */
-@@ -1918,10 +1920,11 @@ gckEVENT_Notify(
- gcsEVENT_QUEUE * queue;
- gctUINT mask = 0;
- gctBOOL acquired = gcvFALSE;
--#ifdef __QNXNTO__
- gcuVIDMEM_NODE_PTR node;
--#endif
-+ gctPOINTER info;
-+ gctSIGNAL signal;
- gctUINT pending;
-+ gckKERNEL kernel = Event->kernel;
- #if !gcdSMP
- gctBOOL suspended = gcvFALSE;
- #endif
-@@ -2182,14 +2185,14 @@ gckEVENT_Notify(
- case gcvHAL_FREE_NON_PAGED_MEMORY:
- gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_EVENT,
- "gcvHAL_FREE_NON_PAGED_MEMORY: 0x%x",
-- record->info.u.FreeNonPagedMemory.physical);
-+ gcmNAME_TO_PTR(record->info.u.FreeNonPagedMemory.physical));
-
- /* Free non-paged memory. */
- status = gckOS_FreeNonPagedMemory(
- Event->os,
-- record->info.u.FreeNonPagedMemory.bytes,
-- record->info.u.FreeNonPagedMemory.physical,
-- record->info.u.FreeNonPagedMemory.logical);
-+ (gctSIZE_T) record->info.u.FreeNonPagedMemory.bytes,
-+ gcmNAME_TO_PTR(record->info.u.FreeNonPagedMemory.physical),
-+ gcmUINT64_TO_PTR(record->info.u.FreeNonPagedMemory.logical));
-
- if (gcmIS_SUCCESS(status))
- {
-@@ -2197,24 +2200,25 @@ gckEVENT_Notify(
- gcmkVERIFY_OK(gckKERNEL_FlushTranslationCache(
- Event->kernel,
- cache,
-- record->event.u.FreeNonPagedMemory.logical,
-- record->event.u.FreeNonPagedMemory.bytes));
-+ gcmUINT64_TO_PTR(record->record.u.FreeNonPagedMemory.logical),
-+ (gctSIZE_T) record->record.u.FreeNonPagedMemory.bytes));
- #endif
- }
-+ gcmRELEASE_NAME(record->info.u.FreeNonPagedMemory.physical);
- break;
-
- case gcvHAL_FREE_CONTIGUOUS_MEMORY:
- gcmkTRACE_ZONE(
- gcvLEVEL_VERBOSE, gcvZONE_EVENT,
- "gcvHAL_FREE_CONTIGUOUS_MEMORY: 0x%x",
-- record->info.u.FreeContiguousMemory.physical);
-+ gcmNAME_TO_PTR(record->info.u.FreeContiguousMemory.physical));
-
- /* Unmap the user memory. */
- status = gckOS_FreeContiguous(
- Event->os,
-- record->info.u.FreeContiguousMemory.physical,
-- record->info.u.FreeContiguousMemory.logical,
-- record->info.u.FreeContiguousMemory.bytes);
-+ gcmNAME_TO_PTR(record->info.u.FreeContiguousMemory.physical),
-+ gcmUINT64_TO_PTR(record->info.u.FreeContiguousMemory.logical),
-+ (gctSIZE_T) record->info.u.FreeContiguousMemory.bytes);
-
- if (gcmIS_SUCCESS(status))
- {
-@@ -2222,19 +2226,19 @@ gckEVENT_Notify(
- gcmkVERIFY_OK(gckKERNEL_FlushTranslationCache(
- Event->kernel,
- cache,
-- event->event.u.FreeContiguousMemory.logical,
-- event->event.u.FreeContiguousMemory.bytes));
-+ gcmUINT64_TO_PTR(record->record.u.FreeContiguousMemory.logical),
-+ (gctSIZE_T) record->record.u.FreeContiguousMemory.bytes));
- #endif
- }
-+ gcmRELEASE_NAME(record->info.u.FreeContiguousMemory.physical);
- break;
-
- case gcvHAL_FREE_VIDEO_MEMORY:
-+ node = gcmUINT64_TO_PTR(record->info.u.FreeVideoMemory.node);
- gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_EVENT,
- "gcvHAL_FREE_VIDEO_MEMORY: 0x%x",
-- record->info.u.FreeVideoMemory.node);
--
-+ node);
- #ifdef __QNXNTO__
-- node = record->info.u.FreeVideoMemory.node;
- #if gcdUSE_VIDMEM_PER_PID
- /* Check if the VidMem object still exists. */
- if (gckKERNEL_GetVideoMemoryPoolPid(record->kernel,
-@@ -2263,7 +2267,7 @@ gckEVENT_Notify(
-
- /* Free video memory. */
- status =
-- gckVIDMEM_Free(record->info.u.FreeVideoMemory.node);
-+ gckVIDMEM_Free(node);
-
- break;
-
-@@ -2298,13 +2302,14 @@ gckEVENT_Notify(
- break;
-
- case gcvHAL_UNLOCK_VIDEO_MEMORY:
-+ node = gcmUINT64_TO_PTR(record->info.u.UnlockVideoMemory.node);
-+
- gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_EVENT,
- "gcvHAL_UNLOCK_VIDEO_MEMORY: 0x%x",
-- record->info.u.UnlockVideoMemory.node);
-+ node);
-
- /* Save node information before it disappears. */
- #if gcdSECURE_USER
-- node = event->event.u.UnlockVideoMemory.node;
- if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
- {
- logical = gcvNULL;
-@@ -2320,7 +2325,7 @@ gckEVENT_Notify(
- /* Unlock. */
- status = gckVIDMEM_Unlock(
- Event->kernel,
-- record->info.u.UnlockVideoMemory.node,
-+ node,
- record->info.u.UnlockVideoMemory.type,
- gcvNULL);
-
-@@ -2337,9 +2342,10 @@ gckEVENT_Notify(
- break;
-
- case gcvHAL_SIGNAL:
-+ signal = gcmUINT64_TO_PTR(record->info.u.Signal.signal);
- gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_EVENT,
- "gcvHAL_SIGNAL: 0x%x",
-- record->info.u.Signal.signal);
-+ signal);
-
- #ifdef __QNXNTO__
- if ((record->info.u.Signal.coid == 0)
-@@ -2349,7 +2355,7 @@ gckEVENT_Notify(
- /* Kernel signal. */
- gcmkERR_BREAK(
- gckOS_Signal(Event->os,
-- record->info.u.Signal.signal,
-+ signal,
- gcvTRUE));
- }
- else
-@@ -2357,18 +2363,18 @@ gckEVENT_Notify(
- /* User signal. */
- gcmkERR_BREAK(
- gckOS_UserSignal(Event->os,
-- record->info.u.Signal.signal,
-+ signal,
- record->info.u.Signal.rcvid,
- record->info.u.Signal.coid));
- }
- #else
- /* Set signal. */
-- if (record->info.u.Signal.process == gcvNULL)
-+ if (gcmUINT64_TO_PTR(record->info.u.Signal.process) == gcvNULL)
- {
- /* Kernel signal. */
- gcmkERR_BREAK(
- gckOS_Signal(Event->os,
-- record->info.u.Signal.signal,
-+ signal,
- gcvTRUE));
- }
- else
-@@ -2376,26 +2382,27 @@ gckEVENT_Notify(
- /* User signal. */
- gcmkERR_BREAK(
- gckOS_UserSignal(Event->os,
-- record->info.u.Signal.signal,
-- record->info.u.Signal.process));
-+ signal,
-+ gcmUINT64_TO_PTR(record->info.u.Signal.process)));
- }
-
-- gcmkASSERT(record->info.u.Signal.auxSignal == gcvNULL);
-+ gcmkASSERT(record->info.u.Signal.auxSignal == 0);
- #endif
- break;
-
- case gcvHAL_UNMAP_USER_MEMORY:
-+ info = gcmNAME_TO_PTR(record->info.u.UnmapUserMemory.info);
- gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_EVENT,
- "gcvHAL_UNMAP_USER_MEMORY: 0x%x",
-- record->info.u.UnmapUserMemory.info);
-+ info);
-
- /* Unmap the user memory. */
- status = gckOS_UnmapUserMemory(
- Event->os,
- Event->kernel->core,
-- record->info.u.UnmapUserMemory.memory,
-- record->info.u.UnmapUserMemory.size,
-- record->info.u.UnmapUserMemory.info,
-+ gcmUINT64_TO_PTR(record->info.u.UnmapUserMemory.memory),
-+ (gctSIZE_T) record->info.u.UnmapUserMemory.size,
-+ info,
- record->info.u.UnmapUserMemory.address);
-
- #if gcdSECURE_USER
-@@ -2404,10 +2411,11 @@ gckEVENT_Notify(
- gcmkVERIFY_OK(gckKERNEL_FlushTranslationCache(
- Event->kernel,
- cache,
-- event->event.u.UnmapUserMemory.memory,
-- event->event.u.UnmapUserMemory.size));
-+ gcmUINT64_TO_PTR(record->info.u.UnmapUserMemory.memory),
-+ (gctSIZE_T) record->info.u.UnmapUserMemory.size));
- }
- #endif
-+ gcmRELEASE_NAME(record->info.u.UnmapUserMemory.info);
- break;
-
- case gcvHAL_TIMESTAMP:
-@@ -2448,10 +2456,11 @@ gckEVENT_Notify(
- case gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER:
- gcmkVERIFY_OK(
- gckKERNEL_DestroyVirtualCommandBuffer(Event->kernel,
-- record->info.u.FreeVirtualCommandBuffer.bytes,
-- record->info.u.FreeVirtualCommandBuffer.physical,
-- record->info.u.FreeVirtualCommandBuffer.logical
-+ (gctSIZE_T) record->info.u.FreeVirtualCommandBuffer.bytes,
-+ gcmNAME_TO_PTR(record->info.u.FreeVirtualCommandBuffer.physical),
-+ gcmUINT64_TO_PTR(record->info.u.FreeVirtualCommandBuffer.logical)
- ));
-+ gcmRELEASE_NAME(record->info.u.FreeVirtualCommandBuffer.physical);
- break;
- #endif
-
-@@ -2701,13 +2710,13 @@ gckEVENT_Stop(
- record->next = gcvNULL;
- record->processID = ProcessID;
- record->info.command = gcvHAL_SIGNAL;
-- record->info.u.Signal.signal = Signal;
-+ record->info.u.Signal.signal = gcmPTR_TO_UINT64(Signal);
- #ifdef __QNXNTO__
- record->info.u.Signal.coid = 0;
- record->info.u.Signal.rcvid = 0;
- #endif
-- record->info.u.Signal.auxSignal = gcvNULL;
-- record->info.u.Signal.process = gcvNULL;
-+ record->info.u.Signal.auxSignal = 0;
-+ record->info.u.Signal.process = 0;
-
- /* Append the record. */
- Event->queues[id].head = record;
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_heap.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_heap.c
-index c68e0c1..a5affb9 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_heap.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_heap.c
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- /**
- ** @file
- ** gckHEAP object for kernel HAL layer. The heap implemented here is an arena-
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
-index e2f84f6..8ac187b 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_interrupt_vg.c
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_precomp.h"
-
- #if gcdENABLE_VG
-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 7358f9c..0c71e28 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_precomp.h"
-
- #define _GC_OBJ_ZONE gcvZONE_MMU
-@@ -1304,8 +1302,11 @@ gckMMU_AllocatePages(
- gctUINT32 address;
- gctINT i;
- gckMMU mmu;
-+ gctBOOL acquired = gcvFALSE;
-+ gctBOOL allocated = gcvFALSE;
-
- gckOS_AcquireMutex(Mmu->os, mirrorPageTableMutex, gcvINFINITE);
-+ acquired = gcvTRUE;
-
- /* Allocate page table for current MMU. */
- for (i = 0; i < mirrorPageTable->reference; i++)
-@@ -1313,6 +1314,7 @@ gckMMU_AllocatePages(
- if (Mmu == mirrorPageTable->mmus[i])
- {
- gcmkONERROR(_AllocatePages(Mmu, PageCount, PageTable, Address));
-+ allocated = gcvTRUE;
- }
- }
-
-@@ -1329,9 +1331,24 @@ gckMMU_AllocatePages(
- }
-
- gckOS_ReleaseMutex(Mmu->os, mirrorPageTableMutex);
-+ acquired = gcvFALSE;
-
- return gcvSTATUS_OK;
- OnError:
-+
-+ if (allocated)
-+ {
-+ /* Page tables for multiple GPU always keep the same. So it is impossible
-+ * the fist one allocates successfully but others fail.
-+ */
-+ gcmkASSERT(0);
-+ }
-+
-+ if (acquired)
-+ {
-+ gckOS_ReleaseMutex(Mmu->os, mirrorPageTableMutex);
-+ }
-+
- return status;
- #else
- return _AllocatePages(Mmu, PageCount, PageTable, Address);
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu_vg.c
-index 46d1761..0c20290 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu_vg.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_mmu_vg.c
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_precomp.h"
-
- #if gcdENABLE_VG
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_power.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_power.c
-new file mode 100644
-index 0000000..df7579d
---- /dev/null
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_power.c
-@@ -0,0 +1,347 @@
-+/****************************************************************************
-+*
-+* Copyright (C) 2005 - 2013 by Vivante Corp.
-+*
-+* This program is free software; you can redistribute it and/or modify
-+* it under the terms of the GNU General Public License as published by
-+* the Free Software Foundation; either version 2 of the license, or
-+* (at your option) any later version.
-+*
-+* This program is distributed in the hope that it will be useful,
-+* but WITHOUT ANY WARRANTY; without even the implied warranty of
-+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+* GNU General Public License for more details.
-+*
-+* You should have received a copy of the GNU General Public License
-+* along with this program; if not write to the Free Software
-+* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+*
-+*****************************************************************************/
-+
-+
-+#include "gc_hal_kernel_precomp.h"
-+
-+#define _GC_OBJ_ZONE gcvZONE_POWER
-+
-+/******************************************************************************\
-+************************ Dynamic Voltage Frequency Setting *********************
-+\******************************************************************************/
-+#if gcdDVFS
-+static gctUINT32
-+_GetLoadHistory(
-+ IN gckDVFS Dvfs,
-+ IN gctUINT32 Select,
-+ IN gctUINT32 Index
-+)
-+{
-+ return Dvfs->loads[Index];
-+}
-+
-+static void
-+_IncreaseScale(
-+ IN gckDVFS Dvfs,
-+ IN gctUINT32 Load,
-+ OUT gctUINT8 *Scale
-+ )
-+{
-+ if (Dvfs->currentScale < 32)
-+ {
-+ *Scale = Dvfs->currentScale + 8;
-+ }
-+ else
-+ {
-+ *Scale = Dvfs->currentScale + 8;
-+ *Scale = gcmMIN(64, *Scale);
-+ }
-+}
-+
-+static void
-+_RecordFrequencyHistory(
-+ gckDVFS Dvfs,
-+ gctUINT32 Frequency
-+ )
-+{
-+ gctUINT32 i = 0;
-+
-+ struct _FrequencyHistory *history = Dvfs->frequencyHistory;
-+
-+ for (i = 0; i < 16; i++)
-+ {
-+ if (history->frequency == Frequency)
-+ {
-+ break;
-+ }
-+
-+ if (history->frequency == 0)
-+ {
-+ history->frequency = Frequency;
-+ break;
-+ }
-+
-+ history++;
-+ }
-+
-+ if (i < 16)
-+ {
-+ history->count++;
-+ }
-+}
-+
-+static gctUINT32
-+_GetFrequencyHistory(
-+ gckDVFS Dvfs,
-+ gctUINT32 Frequency
-+ )
-+{
-+ gctUINT32 i = 0;
-+
-+ struct _FrequencyHistory * history = Dvfs->frequencyHistory;
-+
-+ for (i = 0; i < 16; i++)
-+ {
-+ if (history->frequency == Frequency)
-+ {
-+ break;
-+ }
-+
-+ history++;
-+ }
-+
-+ if (i < 16)
-+ {
-+ return history->count;
-+ }
-+
-+ return 0;
-+}
-+
-+static void
-+_Policy(
-+ IN gckDVFS Dvfs,
-+ IN gctUINT32 Load,
-+ OUT gctUINT8 *Scale
-+ )
-+{
-+ gctUINT8 load[4], nextLoad;
-+ gctUINT8 scale;
-+
-+ /* Last 4 history. */
-+ load[0] = (Load & 0xFF);
-+ load[1] = (Load & 0xFF00) >> 8;
-+ load[2] = (Load & 0xFF0000) >> 16;
-+ load[3] = (Load & 0xFF000000) >> 24;
-+
-+ /* Determine target scale. */
-+ if (load[0] > 54)
-+ {
-+ _IncreaseScale(Dvfs, Load, &scale);
-+ }
-+ else
-+ {
-+ nextLoad = (load[0] + load[1] + load[2] + load[3])/4;
-+
-+ scale = Dvfs->currentScale * (nextLoad) / 54;
-+
-+ scale = gcmMAX(1, scale);
-+ scale = gcmMIN(64, scale);
-+ }
-+
-+ Dvfs->totalConfig++;
-+
-+ Dvfs->loads[(load[0]-1)/8]++;
-+
-+ *Scale = scale;
-+
-+
-+ if (Dvfs->totalConfig % 100 == 0)
-+ {
-+ gcmkPRINT("=======================================================");
-+ gcmkPRINT("GPU Load: %-8d %-8d %-8d %-8d %-8d %-8d %-8d %-8d",
-+ 8, 16, 24, 32, 40, 48, 56, 64);
-+ gcmkPRINT(" %-8d %-8d %-8d %-8d %-8d %-8d %-8d %-8d",
-+ _GetLoadHistory(Dvfs,2, 0),
-+ _GetLoadHistory(Dvfs,2, 1),
-+ _GetLoadHistory(Dvfs,2, 2),
-+ _GetLoadHistory(Dvfs,2, 3),
-+ _GetLoadHistory(Dvfs,2, 4),
-+ _GetLoadHistory(Dvfs,2, 5),
-+ _GetLoadHistory(Dvfs,2, 6),
-+ _GetLoadHistory(Dvfs,2, 7)
-+ );
-+
-+ gcmkPRINT("Frequency(MHz) %-8d %-8d %-8d %-8d %-8d",
-+ 58, 120, 240, 360, 480);
-+ gcmkPRINT(" %-8d %-8d %-8d %-8d %-8d",
-+ _GetFrequencyHistory(Dvfs, 58),
-+ _GetFrequencyHistory(Dvfs,120),
-+ _GetFrequencyHistory(Dvfs,240),
-+ _GetFrequencyHistory(Dvfs,360),
-+ _GetFrequencyHistory(Dvfs,480)
-+ );
-+ }
-+}
-+
-+static void
-+_TimerFunction(
-+ gctPOINTER Data
-+ )
-+{
-+ gceSTATUS status;
-+ gckDVFS dvfs = (gckDVFS) Data;
-+ gckHARDWARE hardware = dvfs->hardware;
-+ gctUINT32 value;
-+ gctUINT32 frequency;
-+ gctUINT8 scale;
-+ gctUINT32 t1, t2, consumed;
-+
-+ gckOS_GetTicks(&t1);
-+
-+ gcmkONERROR(gckHARDWARE_QueryLoad(hardware, &value));
-+
-+ /* determine target sacle. */
-+ _Policy(dvfs, value, &scale);
-+
-+ /* Set frequency and voltage. */
-+ gcmkONERROR(gckOS_SetGPUFrequency(hardware->os, hardware->core, scale));
-+
-+ /* Query real frequency. */
-+ gcmkONERROR(
-+ gckOS_QueryGPUFrequency(hardware->os,
-+ hardware->core,
-+ &frequency,
-+ &dvfs->currentScale));
-+
-+ _RecordFrequencyHistory(dvfs, frequency);
-+
-+ gcmkTRACE_ZONE(gcvLEVEL_INFO, gcvZONE_POWER,
-+ "Current frequency = %d",
-+ frequency);
-+
-+ /* Set period. */
-+ gcmkONERROR(gckHARDWARE_SetDVFSPeroid(hardware, frequency));
-+
-+OnError:
-+ /* Determine next querying time. */
-+ gckOS_GetTicks(&t2);
-+
-+ consumed = gcmMIN(((long)t2 - (long)t1), 5);
-+
-+ if (dvfs->stop == gcvFALSE)
-+ {
-+ gcmkVERIFY_OK(gckOS_StartTimer(hardware->os,
-+ dvfs->timer,
-+ dvfs->pollingTime - consumed));
-+ }
-+
-+ return;
-+}
-+
-+gceSTATUS
-+gckDVFS_Construct(
-+ IN gckHARDWARE Hardware,
-+ OUT gckDVFS * Dvfs
-+ )
-+{
-+ gceSTATUS status;
-+ gctPOINTER pointer;
-+ gckDVFS dvfs = gcvNULL;
-+ gckOS os = Hardware->os;
-+
-+ gcmkHEADER_ARG("Hardware=0x%X", Hardware);
-+
-+ gcmkVERIFY_OBJECT(Hardware, gcvOBJ_HARDWARE);
-+ gcmkVERIFY_ARGUMENT(Dvfs != gcvNULL);
-+
-+ /* Allocate a gckDVFS manager. */
-+ gcmkONERROR(gckOS_Allocate(os, gcmSIZEOF(struct _gckDVFS), &pointer));
-+
-+ gckOS_ZeroMemory(pointer, gcmSIZEOF(struct _gckDVFS));
-+
-+ dvfs = pointer;
-+
-+ /* Initialization. */
-+ dvfs->hardware = Hardware;
-+ dvfs->pollingTime = gcdDVFS_POLLING_TIME;
-+ dvfs->os = Hardware->os;
-+ dvfs->currentScale = 64;
-+
-+ /* Create a polling timer. */
-+ gcmkONERROR(gckOS_CreateTimer(os, _TimerFunction, pointer, &dvfs->timer));
-+
-+ /* Initialize frequency and voltage adjustment helper. */
-+ gcmkONERROR(gckOS_PrepareGPUFrequency(os, Hardware->core));
-+
-+ /* Return result. */
-+ *Dvfs = dvfs;
-+
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+
-+OnError:
-+ /* Roll back. */
-+ if (dvfs)
-+ {
-+ if (dvfs->timer)
-+ {
-+ gcmkVERIFY_OK(gckOS_DestroyTimer(os, dvfs->timer));
-+ }
-+
-+ gcmkOS_SAFE_FREE(os, dvfs);
-+ }
-+
-+ gcmkFOOTER();
-+ return status;
-+}
-+
-+gceSTATUS
-+gckDVFS_Destroy(
-+ IN gckDVFS Dvfs
-+ )
-+{
-+ gcmkHEADER_ARG("Dvfs=0x%X", Dvfs);
-+ gcmkVERIFY_ARGUMENT(Dvfs != gcvNULL);
-+
-+ /* Deinitialize helper fuunction. */
-+ gcmkVERIFY_OK(gckOS_FinishGPUFrequency(Dvfs->os, Dvfs->hardware->core));
-+
-+ /* DestroyTimer. */
-+ gcmkVERIFY_OK(gckOS_DestroyTimer(Dvfs->os, Dvfs->timer));
-+
-+ gcmkOS_SAFE_FREE(Dvfs->os, Dvfs);
-+
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+}
-+
-+gceSTATUS
-+gckDVFS_Start(
-+ IN gckDVFS Dvfs
-+ )
-+{
-+ gcmkHEADER_ARG("Dvfs=0x%X", Dvfs);
-+ gcmkVERIFY_ARGUMENT(Dvfs != gcvNULL);
-+
-+ gckHARDWARE_InitDVFS(Dvfs->hardware);
-+
-+ Dvfs->stop = gcvFALSE;
-+
-+ gckOS_StartTimer(Dvfs->os, Dvfs->timer, Dvfs->pollingTime);
-+
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+}
-+
-+gceSTATUS
-+gckDVFS_Stop(
-+ IN gckDVFS Dvfs
-+ )
-+{
-+ gcmkHEADER_ARG("Dvfs=0x%X", Dvfs);
-+ gcmkVERIFY_ARGUMENT(Dvfs != gcvNULL);
-+
-+ Dvfs->stop = gcvTRUE;
-+
-+ gcmkFOOTER_NO();
-+ return gcvSTATUS_OK;
-+}
-+#endif
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_precomp.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_precomp.h
-index 004e6bd..1e764c2 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_precomp.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_precomp.h
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_kernel_precomp_h_
- #define __gc_hal_kernel_precomp_h_
-
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c
-index 72ed5b8..7d0032e 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.c
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_precomp.h"
-
- #if gcdENABLE_VG
-@@ -397,6 +395,11 @@ gceSTATUS gckVGKERNEL_Dispatch(
- gcsHAL_INTERFACE * kernelInterface = Interface;
- gcuVIDMEM_NODE_PTR node;
- gctUINT32 processID;
-+ gckKERNEL kernel = Kernel;
-+ gctPOINTER info = gcvNULL;
-+ gctPHYS_ADDR physical = gcvNULL;
-+ gctPOINTER logical = gcvNULL;
-+ gctSIZE_T bytes = 0;
-
- gcmkHEADER_ARG("Kernel=0x%x Interface=0x%x ", Kernel, Interface);
-
-@@ -436,61 +439,78 @@ gceSTATUS gckVGKERNEL_Dispatch(
- ));
- break;
- case gcvHAL_ALLOCATE_NON_PAGED_MEMORY:
-+ bytes = (gctSIZE_T) kernelInterface->u.AllocateNonPagedMemory.bytes;
- /* Allocate non-paged memory. */
- gcmkERR_BREAK(gckOS_AllocateContiguous(
- Kernel->os,
- gcvTRUE,
-- &kernelInterface->u.AllocateNonPagedMemory.bytes,
-- &kernelInterface->u.AllocateNonPagedMemory.physical,
-- &kernelInterface->u.AllocateNonPagedMemory.logical
-+ &bytes,
-+ &physical,
-+ &logical
- ));
-+
-+ kernelInterface->u.AllocateNonPagedMemory.bytes = bytes;
-+ kernelInterface->u.AllocateNonPagedMemory.logical = gcmPTR_TO_UINT64(logical);
-+ kernelInterface->u.AllocateNonPagedMemory.physical = gcmPTR_TO_NAME(physical);
- break;
-
- case gcvHAL_FREE_NON_PAGED_MEMORY:
-+ physical = gcmNAME_TO_PTR(kernelInterface->u.AllocateNonPagedMemory.physical);
-+
- /* Unmap user logical out of physical memory first. */
- gcmkERR_BREAK(gckOS_UnmapUserLogical(
- Kernel->os,
-- kernelInterface->u.AllocateNonPagedMemory.physical,
-- kernelInterface->u.AllocateNonPagedMemory.bytes,
-- kernelInterface->u.AllocateNonPagedMemory.logical
-+ physical,
-+ (gctSIZE_T) kernelInterface->u.AllocateNonPagedMemory.bytes,
-+ gcmUINT64_TO_PTR(kernelInterface->u.AllocateNonPagedMemory.logical)
- ));
-
- /* Free non-paged memory. */
- gcmkERR_BREAK(gckOS_FreeNonPagedMemory(
- Kernel->os,
-- kernelInterface->u.AllocateNonPagedMemory.bytes,
-- kernelInterface->u.AllocateNonPagedMemory.physical,
-- kernelInterface->u.AllocateNonPagedMemory.logical
-+ (gctSIZE_T) kernelInterface->u.AllocateNonPagedMemory.bytes,
-+ physical,
-+ gcmUINT64_TO_PTR(kernelInterface->u.AllocateNonPagedMemory.logical)
- ));
-+
-+ gcmRELEASE_NAME(kernelInterface->u.AllocateNonPagedMemory.physical);
- break;
-
- case gcvHAL_ALLOCATE_CONTIGUOUS_MEMORY:
-+ bytes = (gctSIZE_T) kernelInterface->u.AllocateNonPagedMemory.bytes;
- /* Allocate contiguous memory. */
- gcmkERR_BREAK(gckOS_AllocateContiguous(
- Kernel->os,
- gcvTRUE,
-- &kernelInterface->u.AllocateNonPagedMemory.bytes,
-- &kernelInterface->u.AllocateNonPagedMemory.physical,
-- &kernelInterface->u.AllocateNonPagedMemory.logical
-+ &bytes,
-+ &physical,
-+ &logical
- ));
-+
-+ kernelInterface->u.AllocateNonPagedMemory.bytes = bytes;
-+ kernelInterface->u.AllocateNonPagedMemory.logical = gcmPTR_TO_UINT64(logical);
-+ kernelInterface->u.AllocateNonPagedMemory.physical = gcmPTR_TO_NAME(physical);
- break;
-
- case gcvHAL_FREE_CONTIGUOUS_MEMORY:
-+ physical = gcmNAME_TO_PTR(kernelInterface->u.AllocateNonPagedMemory.physical);
- /* Unmap user logical out of physical memory first. */
- gcmkERR_BREAK(gckOS_UnmapUserLogical(
- Kernel->os,
-- kernelInterface->u.AllocateNonPagedMemory.physical,
-- kernelInterface->u.AllocateNonPagedMemory.bytes,
-- kernelInterface->u.AllocateNonPagedMemory.logical
-+ physical,
-+ (gctSIZE_T) kernelInterface->u.AllocateNonPagedMemory.bytes,
-+ gcmUINT64_TO_PTR(kernelInterface->u.AllocateNonPagedMemory.logical)
- ));
-
- /* Free contiguous memory. */
- gcmkERR_BREAK(gckOS_FreeContiguous(
- Kernel->os,
-- kernelInterface->u.AllocateNonPagedMemory.physical,
-- kernelInterface->u.AllocateNonPagedMemory.logical,
-- kernelInterface->u.AllocateNonPagedMemory.bytes
-+ physical,
-+ gcmUINT64_TO_PTR(kernelInterface->u.AllocateNonPagedMemory.logical),
-+ (gctSIZE_T) kernelInterface->u.AllocateNonPagedMemory.bytes
- ));
-+
-+ gcmRELEASE_NAME(kernelInterface->u.AllocateNonPagedMemory.physical);
- break;
-
- case gcvHAL_ALLOCATE_VIDEO_MEMORY:
-@@ -532,8 +552,10 @@ gceSTATUS gckVGKERNEL_Dispatch(
- bytes,
- 64,
- kernelInterface->u.AllocateVideoMemory.type,
-- &kernelInterface->u.AllocateVideoMemory.node
-+ &node
- ));
-+
-+ kernelInterface->u.AllocateVideoMemory.node = gcmPTR_TO_UINT64(node);
- }
- break;
-
-@@ -545,22 +567,23 @@ gceSTATUS gckVGKERNEL_Dispatch(
- kernelInterface->u.AllocateLinearVideoMemory.bytes,
- kernelInterface->u.AllocateLinearVideoMemory.alignment,
- kernelInterface->u.AllocateLinearVideoMemory.type,
-- &kernelInterface->u.AllocateLinearVideoMemory.node
-+ &node
- ));
-
- gcmkERR_BREAK(gckKERNEL_AddProcessDB(Kernel,
- processID, gcvDB_VIDEO_MEMORY,
-- Interface->u.AllocateLinearVideoMemory.node,
-+ node,
- gcvNULL,
- kernelInterface->u.AllocateLinearVideoMemory.bytes
- ));
-
-+ kernelInterface->u.AllocateLinearVideoMemory.node = gcmPTR_TO_UINT64(node);
- break;
-
- case gcvHAL_FREE_VIDEO_MEMORY:
-+ node = gcmUINT64_TO_PTR(Interface->u.FreeVideoMemory.node);
- #ifdef __QNXNTO__
- /* Unmap the video memory */
-- node = Interface->u.FreeVideoMemory.node;
-
- if ((node->VidMem.memory->object.type == gcvOBJ_VIDMEM) &&
- (node->VidMem.logical != gcvNULL))
-@@ -575,13 +598,13 @@ gceSTATUS gckVGKERNEL_Dispatch(
-
- /* Free video memory. */
- gcmkERR_BREAK(gckVIDMEM_Free(
-- Interface->u.FreeVideoMemory.node
-+ node
- ));
-
- gcmkERR_BREAK(gckKERNEL_RemoveProcessDB(
- Kernel,
- processID, gcvDB_VIDEO_MEMORY,
-- Interface->u.FreeVideoMemory.node
-+ node
- ));
-
- break;
-@@ -590,19 +613,20 @@ gceSTATUS gckVGKERNEL_Dispatch(
- /* Map memory. */
- gcmkERR_BREAK(gckKERNEL_MapMemory(
- Kernel,
-- kernelInterface->u.MapMemory.physical,
-- kernelInterface->u.MapMemory.bytes,
-- &kernelInterface->u.MapMemory.logical
-+ gcmINT2PTR(kernelInterface->u.MapMemory.physical),
-+ (gctSIZE_T) kernelInterface->u.MapMemory.bytes,
-+ &logical
- ));
-+ kernelInterface->u.MapMemory.logical = gcmPTR_TO_UINT64(logical);
- break;
-
- case gcvHAL_UNMAP_MEMORY:
- /* Unmap memory. */
- gcmkERR_BREAK(gckKERNEL_UnmapMemory(
- Kernel,
-- kernelInterface->u.MapMemory.physical,
-- kernelInterface->u.MapMemory.bytes,
-- kernelInterface->u.MapMemory.logical
-+ gcmINT2PTR(kernelInterface->u.MapMemory.physical),
-+ (gctSIZE_T) kernelInterface->u.MapMemory.bytes,
-+ gcmUINT64_TO_PTR(kernelInterface->u.MapMemory.logical)
- ));
- break;
-
-@@ -611,12 +635,14 @@ gceSTATUS gckVGKERNEL_Dispatch(
- gcmkERR_BREAK(gckOS_MapUserMemory(
- Kernel->os,
- gcvCORE_VG,
-- kernelInterface->u.MapUserMemory.memory,
-+ gcmUINT64_TO_PTR(kernelInterface->u.MapUserMemory.memory),
- kernelInterface->u.MapUserMemory.physical,
-- kernelInterface->u.MapUserMemory.size,
-- &kernelInterface->u.MapUserMemory.info,
-+ (gctSIZE_T) kernelInterface->u.MapUserMemory.size,
-+ &info,
- &kernelInterface->u.MapUserMemory.address
- ));
-+
-+ kernelInterface->u.MapUserMemory.info = gcmPTR_TO_NAME(info);
- break;
-
- case gcvHAL_UNMAP_USER_MEMORY:
-@@ -624,21 +650,22 @@ gceSTATUS gckVGKERNEL_Dispatch(
- gcmkERR_BREAK(gckOS_UnmapUserMemory(
- Kernel->os,
- gcvCORE_VG,
-- kernelInterface->u.UnmapUserMemory.memory,
-- kernelInterface->u.UnmapUserMemory.size,
-- kernelInterface->u.UnmapUserMemory.info,
-+ gcmUINT64_TO_PTR(kernelInterface->u.UnmapUserMemory.memory),
-+ (gctSIZE_T) kernelInterface->u.UnmapUserMemory.size,
-+ gcmNAME_TO_PTR(kernelInterface->u.UnmapUserMemory.info),
- kernelInterface->u.UnmapUserMemory.address
- ));
- break;
- case gcvHAL_LOCK_VIDEO_MEMORY:
-+ node = gcmUINT64_TO_PTR(Interface->u.LockVideoMemory.node);
-+
- /* Lock video memory. */
- gcmkERR_BREAK(
- gckVIDMEM_Lock(Kernel,
-- Interface->u.LockVideoMemory.node,
-+ node,
- gcvFALSE,
- &Interface->u.LockVideoMemory.address));
-
-- node = Interface->u.LockVideoMemory.node;
- if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
- {
- /* Map video memory address into user space. */
-@@ -654,19 +681,20 @@ gceSTATUS gckVGKERNEL_Dispatch(
- &node->VidMem.logical));
- }
-
-- Interface->u.LockVideoMemory.memory = node->VidMem.logical;
-+ Interface->u.LockVideoMemory.memory = gcmPTR_TO_UINT64(node->VidMem.logical);
- #else
- gcmkERR_BREAK(
- gckKERNEL_MapVideoMemoryEx(Kernel,
- gcvCORE_VG,
- FromUser,
- Interface->u.LockVideoMemory.address,
-- &Interface->u.LockVideoMemory.memory));
-+ &logical));
-+ Interface->u.LockVideoMemory.memory = gcmPTR_TO_UINT64(logical);
- #endif
- }
- else
- {
-- Interface->u.LockVideoMemory.memory = node->Virtual.logical;
-+ Interface->u.LockVideoMemory.memory = gcmPTR_TO_UINT64(node->Virtual.logical);
-
- /* Success. */
- status = gcvSTATUS_OK;
-@@ -675,19 +703,19 @@ gceSTATUS gckVGKERNEL_Dispatch(
- #if gcdSECURE_USER
- /* Return logical address as physical address. */
- Interface->u.LockVideoMemory.address =
-- gcmPTR2INT(Interface->u.LockVideoMemory.memory);
-+ (gctUINT32)(Interface->u.LockVideoMemory.memory);
- #endif
- gcmkERR_BREAK(
- gckKERNEL_AddProcessDB(Kernel,
- processID, gcvDB_VIDEO_MEMORY_LOCKED,
-- Interface->u.LockVideoMemory.node,
-+ node,
- gcvNULL,
- 0));
- break;
-
- case gcvHAL_UNLOCK_VIDEO_MEMORY:
- /* Unlock video memory. */
-- node = Interface->u.UnlockVideoMemory.node;
-+ node = gcmUINT64_TO_PTR(Interface->u.UnlockVideoMemory.node);
-
- #if gcdSECURE_USER
- /* Save node information before it disappears. */
-@@ -727,7 +755,7 @@ gceSTATUS gckVGKERNEL_Dispatch(
- gcmkERR_BREAK(
- gckKERNEL_RemoveProcessDB(Kernel,
- processID, gcvDB_VIDEO_MEMORY_LOCKED,
-- Interface->u.UnlockVideoMemory.node));
-+ node));
- }
-
- break;
-@@ -789,10 +817,10 @@ gceSTATUS gckVGKERNEL_Dispatch(
- /* Commit a command and context buffer. */
- gcmkERR_BREAK(gckVGCOMMAND_Commit(
- Kernel->vg->command,
-- kernelInterface->u.VGCommit.context,
-- kernelInterface->u.VGCommit.queue,
-+ gcmUINT64_TO_PTR(kernelInterface->u.VGCommit.context),
-+ gcmUINT64_TO_PTR(kernelInterface->u.VGCommit.queue),
- kernelInterface->u.VGCommit.entryCount,
-- kernelInterface->u.VGCommit.taskTable
-+ gcmUINT64_TO_PTR(kernelInterface->u.VGCommit.taskTable)
- ));
- break;
- case gcvHAL_VERSION:
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.h
-index b86b0c9..b6c6d7e 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_vg.h
-@@ -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
-@@ -19,9 +19,6 @@
- *****************************************************************************/
-
-
--
--
--
- #ifndef __gc_hal_kernel_vg_h_
- #define __gc_hal_kernel_vg_h_
-
-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 b681a65..d9370e2 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_precomp.h"
-
- #define _GC_OBJ_ZONE gcvZONE_VIDMEM
-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 dc936c7..7077412 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal.h
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_h_
- #define __gc_hal_h_
-
-@@ -67,6 +65,59 @@ extern "C" {
- )
-
- /******************************************************************************\
-+********************************* Cast Macro **********************************
-+\******************************************************************************/
-+#define gcmNAME_TO_PTR(na) \
-+ gckKERNEL_QueryPointerFromName(kernel, gcmALL_TO_UINT32(na))
-+
-+#define gcmPTR_TO_NAME(ptr) \
-+ gckKERNEL_AllocateNameFromPointer(kernel, ptr)
-+
-+#define gcmRELEASE_NAME(na) \
-+ gckKERNEL_DeleteName(kernel, gcmALL_TO_UINT32(na))
-+
-+#ifdef __LP64__
-+
-+#define gcmALL_TO_UINT32(t) \
-+( \
-+ (gctUINT32) (gctUINTPTR_T) (t)\
-+)
-+
-+#define gcmPTR_TO_UINT64(p) \
-+( \
-+ (gctUINT64) (p)\
-+)
-+
-+#define gcmUINT64_TO_PTR(u) \
-+( \
-+ (gctPOINTER) (u)\
-+)
-+
-+#else /* 32 bit */
-+
-+#define gcmALL_TO_UINT32(t) \
-+( \
-+ (gctUINT32) (t)\
-+)
-+
-+#define gcmPTR_TO_UINT64(p) \
-+( \
-+ (gctUINT64) (gctUINTPTR_T) (p)\
-+)
-+
-+#define gcmUINT64_TO_PTR(u) \
-+( \
-+ (gctPOINTER) (gctUINTPTR_T) (u)\
-+)
-+
-+#endif
-+
-+#define gcmUINT64_TO_TYPE(u, t) \
-+( \
-+ (t) (gctUINTPTR_T) (u)\
-+)
-+
-+/******************************************************************************\
- ******************************** Useful Macro *********************************
- \******************************************************************************/
-
-@@ -1275,6 +1326,33 @@ gckOS_ResetGPU(
- IN gceCORE Core
- );
-
-+gceSTATUS
-+gckOS_PrepareGPUFrequency(
-+ IN gckOS Os,
-+ IN gceCORE Core
-+ );
-+
-+gceSTATUS
-+gckOS_FinishGPUFrequency(
-+ IN gckOS Os,
-+ IN gceCORE Core
-+ );
-+
-+gceSTATUS
-+gckOS_QueryGPUFrequency(
-+ IN gckOS Os,
-+ IN gceCORE Core,
-+ OUT gctUINT32 * Frequency,
-+ OUT gctUINT8 * Scale
-+ );
-+
-+gceSTATUS
-+gckOS_SetGPUFrequency(
-+ IN gckOS Os,
-+ IN gceCORE Core,
-+ IN gctUINT8 Scale
-+ );
-+
- /*******************************************************************************
- ** Semaphores.
- */
-@@ -1339,7 +1417,7 @@ gckOS_CreateTimer(
-
- /* Destory a timer. */
- gceSTATUS
--gckOS_DestoryTimer(
-+gckOS_DestroyTimer(
- IN gckOS Os,
- IN gctPOINTER Timer
- );
-@@ -1414,6 +1492,7 @@ gckHEAP_ProfileEnd(
- typedef struct _gckVIDMEM * gckVIDMEM;
- typedef struct _gckKERNEL * gckKERNEL;
- typedef struct _gckDB * gckDB;
-+typedef struct _gckDVFS * gckDVFS;
-
- /* Construct a new gckVIDMEM object. */
- gceSTATUS
-@@ -1704,6 +1783,27 @@ gckKERNEL_CloseUserData(
- OUT gctPOINTER * KernelPointer
- );
-
-+gceSTATUS
-+gckDVFS_Construct(
-+ IN gckHARDWARE Hardware,
-+ OUT gckDVFS * Frequency
-+ );
-+
-+gceSTATUS
-+gckDVFS_Destroy(
-+ IN gckDVFS Dvfs
-+ );
-+
-+gceSTATUS
-+gckDVFS_Start(
-+ IN gckDVFS Dvfs
-+ );
-+
-+gceSTATUS
-+gckDVFS_Stop(
-+ IN gckDVFS Dvfs
-+ );
-+
- /******************************************************************************\
- ******************************* gckHARDWARE Object *****************************
- \******************************************************************************/
-@@ -2058,6 +2158,23 @@ gckHARDWARE_DumpGPUState(
- IN gckHARDWARE Hardware
- );
-
-+gceSTATUS
-+gckHARDWARE_InitDVFS(
-+ IN gckHARDWARE Hardware
-+ );
-+
-+gceSTATUS
-+gckHARDWARE_QueryLoad(
-+ IN gckHARDWARE Hardware,
-+ OUT gctUINT32 * Load
-+ );
-+
-+gceSTATUS
-+gckHARDWARE_SetDVFSPeroid(
-+ IN gckHARDWARE Hardware,
-+ IN gctUINT32 Frequency
-+ );
-+
- #if !gcdENABLE_VG
- /******************************************************************************\
- ***************************** gckINTERRUPT Object ******************************
-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 7f2de33..ac86399 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_base_h_
- #define __gc_hal_base_h_
-
-@@ -68,6 +66,11 @@ typedef struct _gcsCONTEXT_MAP * gcsCONTEXT_MAP_PTR;
- typedef void * gcoVG;
- #endif
-
-+#if gcdSYNC
-+typedef struct _gcoFENCE * gcoFENCE;
-+typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR;
-+#endif
-+
- /******************************************************************************\
- ******************************* Process local storage *************************
- \******************************************************************************/
-@@ -140,6 +143,9 @@ typedef struct _gcsTLS
- #ifndef VIVANTE_NO_3D
- gco3D engine3D;
- #endif
-+#if gcdSYNC
-+ gctBOOL fenceEnable;
-+#endif
- gco2D engine2D;
- gctBOOL copied;
- }
-@@ -1022,29 +1028,6 @@ gcoOS_GetPos(
- OUT gctUINT32 * Position
- );
-
--/* Perform a memory copy. */
--gceSTATUS
--gcoOS_MemCopy(
-- IN gctPOINTER Destination,
-- IN gctCONST_POINTER Source,
-- IN gctSIZE_T Bytes
-- );
--
--/* Perform a memory fill. */
--gceSTATUS
--gcoOS_MemFill(
-- IN gctPOINTER Destination,
-- IN gctUINT8 Filler,
-- IN gctSIZE_T Bytes
-- );
--
--/* Zero memory. */
--gceSTATUS
--gcoOS_ZeroMemory(
-- IN gctPOINTER Memory,
-- IN gctSIZE_T Bytes
-- );
--
- /* Same as strstr. */
- gceSTATUS
- gcoOS_StrStr(
-@@ -1062,12 +1045,6 @@ gcoOS_StrFindReverse(
- );
-
- gceSTATUS
--gcoOS_StrLen(
-- IN gctCONST_STRING String,
-- OUT gctSIZE_T * Length
-- );
--
--gceSTATUS
- gcoOS_StrDup(
- IN gcoOS Os,
- IN gctCONST_STRING String,
-@@ -1113,13 +1090,15 @@ gcoOS_StrToFloat(
- );
-
- /* Convert hex string to integer. */
--gceSTATUS gcoOS_HexStrToInt(
-+gceSTATUS
-+gcoOS_HexStrToInt(
- IN gctCONST_STRING String,
- OUT gctINT * Int
- );
-
- /* Convert hex string to float. */
--gceSTATUS gcoOS_HexStrToFloat(
-+gceSTATUS
-+gcoOS_HexStrToFloat(
- IN gctCONST_STRING String,
- OUT gctFLOAT * Float
- );
-@@ -1228,6 +1207,11 @@ gcoOS_DetectProcessByName(
- IN gctCONST_STRING Name
- );
-
-+gceSTATUS
-+gcoOS_DetectProcessByEncryptedName(
-+ IN gctCONST_STRING Name
-+ );
-+
- /*----------------------------------------------------------------------------*/
- /*----- Atoms ----------------------------------------------------------------*/
-
-@@ -1440,7 +1424,7 @@ gcoOS_ReadRegister(
- gceSTATUS
- gcoOS_CacheClean(
- IN gcoOS Os,
-- IN gcuVIDMEM_NODE_PTR Node,
-+ IN gctUINT64 Node,
- IN gctPOINTER Logical,
- IN gctSIZE_T Bytes
- );
-@@ -1448,7 +1432,7 @@ gcoOS_CacheClean(
- gceSTATUS
- gcoOS_CacheFlush(
- IN gcoOS Os,
-- IN gcuVIDMEM_NODE_PTR Node,
-+ IN gctUINT64 Node,
- IN gctPOINTER Logical,
- IN gctSIZE_T Bytes
- );
-@@ -1456,7 +1440,7 @@ gcoOS_CacheFlush(
- gceSTATUS
- gcoOS_CacheInvalidate(
- IN gcoOS Os,
-- IN gcuVIDMEM_NODE_PTR Node,
-+ IN gctUINT64 Node,
- IN gctPOINTER Logical,
- IN gctSIZE_T Bytes
- );
-@@ -1786,7 +1770,7 @@ gcoSURF_MapUserSurface(
- gceSTATUS
- gcoSURF_QueryVidMemNode(
- IN gcoSURF Surface,
-- OUT gcuVIDMEM_NODE_PTR * Node,
-+ OUT gctUINT64 * Node,
- OUT gcePOOL * Pool,
- OUT gctUINT_PTR Bytes
- );
-@@ -2450,6 +2434,7 @@ gcoOS_DebugTrace(
- #define gcvZONE_DEVICE (1 << 10)
- #define gcvZONE_DATABASE (1 << 11)
- #define gcvZONE_INTERRUPT (1 << 12)
-+#define gcvZONE_POWER (1 << 13)
-
- /* User zones. */
- #define gcvZONE_HAL (1 << 3)
-@@ -3664,6 +3649,7 @@ gckOS_DebugStatus2Name(
- # define gcmDEBUG_VERIFY_ARGUMENT(arg)
- # define gcmkDEBUG_VERIFY_ARGUMENT(arg)
- #endif
-+
- /*******************************************************************************
- **
- ** gcmVERIFY_ARGUMENT_RETURN
-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 64a8f1a..4a0870f 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- /*
- ** Include file the defines the front- and back-end compilers, as well as the
- ** objects they use.
-@@ -41,6 +39,9 @@ extern "C" {
- #define GC_ENABLE_LOADTIME_OPT 1
- #endif
-
-+#define TEMP_OPT_CONSTANT_TEXLD_COORD 1
-+
-+#define TEMP_SHADER_PATCH 1
- /******************************* IR VERSION ******************/
- #define gcdSL_IR_VERSION gcmCC('\0','\0','\0','\1')
-
-@@ -266,6 +267,7 @@ typedef enum _gcSL_OPCODE
- gcSL_ADDSAT, /* 0x5C */ /* Integer only. */
- gcSL_SUBSAT, /* 0x5D */ /* Integer only. */
- gcSL_MULSAT, /* 0x5E */ /* Integer only. */
-+ gcSL_MAXOPCODE
- }
- gcSL_OPCODE;
-
-@@ -507,8 +509,15 @@ struct _gcsHINT
- gctUINT32 colorKillInstruction[3];
- #endif
-
-+#if TEMP_SHADER_PATCH
-+ gctUINT32 pachedShaderIdentifier;
-+#endif
- };
-
-+#if TEMP_SHADER_PATCH
-+#define INVALID_SHADER_IDENTIFIER 0xFFFFFFFF
-+#endif
-+
- /* gcSHADER_TYPE enumeration. */
- typedef enum _gcSHADER_TYPE
- {
-@@ -893,6 +902,16 @@ typedef struct _gcOPTIMIZER_OPTION
- Note: n must be decimal number
- */
- gctUINT featureBits;
-+
-+ /* inline level (default 2 at O1):
-+
-+ VC_OPTION=-INLINELEVEL:[0-3]
-+ 0: no inline
-+ 1: only inline the function only called once or small function
-+ 2: inline functions be called less than 5 times or medium size function
-+ 3: inline everything possible
-+ */
-+ gctUINT inlineLevel;
- } gcOPTIMIZER_OPTION;
-
- extern gcOPTIMIZER_OPTION theOptimizerOption;
-@@ -926,6 +945,8 @@ extern gcOPTIMIZER_OPTION theOptimizerOption;
- #define gcmOPT_PACKVARYING_triageStart() (gcmGetOptimizerOption()->_triageStart)
- #define gcmOPT_PACKVARYING_triageEnd() (gcmGetOptimizerOption()->_triageEnd)
-
-+#define gcmOPT_INLINELEVEL() (gcmGetOptimizerOption()->inlineLevel)
-+
- /* Setters */
- #define gcmOPT_SetPatchTexld(m,n) (gcmGetOptimizerOption()->patchEveryTEXLDs = (m),\
- gcmGetOptimizerOption()->patchDummyTEXLDs = (n))
-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 e577809..028bbd1 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_driver_h_
- #define __gc_hal_driver_h_
-
-@@ -164,7 +162,10 @@ typedef enum _gceHAL_COMMAND_CODES
-
- /* FSCALE_VAL. */
- gcvHAL_SET_FSCALE_VALUE,
-- gcvHAL_GET_FSCALE_VALUE
-+ gcvHAL_GET_FSCALE_VALUE,
-+
-+ /* Reset time stamp. */
-+ gcvHAL_QUERY_RESET_TIME_STAMP,
- }
- gceHAL_COMMAND_CODES;
-
-@@ -252,19 +253,19 @@ typedef struct _gcsHAL_COMPOSE * gcsHAL_COMPOSE_PTR;
- typedef struct _gcsHAL_COMPOSE
- {
- /* Composition state buffer. */
-- gctPHYS_ADDR physical;
-- gctPOINTER logical;
-- gctSIZE_T offset;
-- gctSIZE_T size;
-+ gctUINT64 physical;
-+ gctUINT64 logical;
-+ gctUINT offset;
-+ gctUINT size;
-
- /* Composition end signal. */
-- gctHANDLE process;
-- gctSIGNAL signal;
-+ gctUINT64 process;
-+ gctUINT64 signal;
-
- /* User signals. */
-- gctHANDLE userProcess;
-- gctSIGNAL userSignal1;
-- gctSIGNAL userSignal2;
-+ gctUINT64 userProcess;
-+ gctUINT64 userSignal1;
-+ gctUINT64 userSignal2;
-
- #if defined(__QNXNTO__)
- /* Client pulse side-channel connection ID. */
-@@ -276,6 +277,7 @@ typedef struct _gcsHAL_COMPOSE
- }
- gcsHAL_COMPOSE;
-
-+
- typedef struct _gcsHAL_INTERFACE
- {
- /* Command code. */
-@@ -288,7 +290,7 @@ typedef struct _gcsHAL_INTERFACE
- gceSTATUS status;
-
- /* Handle to this interface channel. */
-- gctHANDLE handle;
-+ gctUINT64 handle;
-
- /* Pid of the client. */
- gctUINT32 pid;
-@@ -307,23 +309,23 @@ typedef struct _gcsHAL_INTERFACE
- /* gcvHAL_QUERY_VIDEO_MEMORY */
- struct _gcsHAL_QUERY_VIDEO_MEMORY
- {
-- /* Physical memory address of internal memory. */
-- OUT gctPHYS_ADDR internalPhysical;
-+ /* Physical memory address of internal memory. Just a name. */
-+ OUT gctUINT32 internalPhysical;
-
-- /* Size in bytes of internal memory.*/
-- OUT gctSIZE_T internalSize;
-+ /* Size in bytes of internal memory. */
-+ OUT gctUINT64 internalSize;
-
-- /* Physical memory address of external memory. */
-- OUT gctPHYS_ADDR externalPhysical;
-+ /* Physical memory address of external memory. Just a name. */
-+ OUT gctUINT32 externalPhysical;
-
- /* Size in bytes of external memory.*/
-- OUT gctSIZE_T externalSize;
-+ OUT gctUINT64 externalSize;
-
-- /* Physical memory address of contiguous memory. */
-- OUT gctPHYS_ADDR contiguousPhysical;
-+ /* Physical memory address of contiguous memory. Just a name. */
-+ OUT gctUINT32 contiguousPhysical;
-
- /* Size in bytes of contiguous memory.*/
-- OUT gctSIZE_T contiguousSize;
-+ OUT gctUINT64 contiguousSize;
- }
- QueryVideoMemory;
-
-@@ -333,28 +335,28 @@ typedef struct _gcsHAL_INTERFACE
- /* gcvHAL_MAP_MEMORY */
- struct _gcsHAL_MAP_MEMORY
- {
-- /* Physical memory address to map. */
-- IN gctPHYS_ADDR physical;
-+ /* Physical memory address to map. Just a name on Linux/Qnx. */
-+ IN gctUINT32 physical;
-
- /* Number of bytes in physical memory to map. */
-- IN gctSIZE_T bytes;
-+ IN gctUINT64 bytes;
-
- /* Address of mapped memory. */
-- OUT gctPOINTER logical;
-+ OUT gctUINT64 logical;
- }
- MapMemory;
-
- /* gcvHAL_UNMAP_MEMORY */
- struct _gcsHAL_UNMAP_MEMORY
- {
-- /* Physical memory address to unmap. */
-- IN gctPHYS_ADDR physical;
-+ /* Physical memory address to unmap. Just a name on Linux/Qnx. */
-+ IN gctUINT32 physical;
-
- /* Number of bytes in physical memory to unmap. */
-- IN gctSIZE_T bytes;
-+ IN gctUINT64 bytes;
-
- /* Address of mapped memory to unmap. */
-- IN gctPOINTER logical;
-+ IN gctUINT64 logical;
- }
- UnmapMemory;
-
-@@ -373,8 +375,8 @@ typedef struct _gcsHAL_INTERFACE
- /* Memory pool to allocate from. */
- IN OUT gcePOOL pool;
-
-- /* Allocated video memory. */
-- OUT gcuVIDMEM_NODE_PTR node;
-+ /* Allocated video memory in gcuVIDMEM_NODE. */
-+ OUT gctUINT64 node;
- }
- AllocateLinearVideoMemory;
-
-@@ -399,24 +401,24 @@ typedef struct _gcsHAL_INTERFACE
- /* Memory pool to allocate from. */
- IN OUT gcePOOL pool;
-
-- /* Allocated video memory. */
-- OUT gcuVIDMEM_NODE_PTR node;
-+ /* Allocated video memory in gcuVIDMEM_NODE. */
-+ OUT gctUINT64 node;
- }
- AllocateVideoMemory;
-
- /* gcvHAL_FREE_VIDEO_MEMORY */
- struct _gcsHAL_FREE_VIDEO_MEMORY
- {
-- /* Allocated video memory. */
-- IN gcuVIDMEM_NODE_PTR node;
-+ /* Allocated video memory in gcuVIDMEM_NODE. */
-+ IN gctUINT64 node;
-
- #ifdef __QNXNTO__
- /* TODO: This is part of the unlock - why is it here? */
- /* Mapped logical address to unmap in user space. */
-- OUT gctPOINTER memory;
-+ OUT gctUINT64 memory;
-
- /* Number of bytes to allocated. */
-- OUT gctSIZE_T bytes;
-+ OUT gctUINT64 bytes;
- #endif
- }
- FreeVideoMemory;
-@@ -424,33 +426,33 @@ typedef struct _gcsHAL_INTERFACE
- /* gcvHAL_LOCK_VIDEO_MEMORY */
- struct _gcsHAL_LOCK_VIDEO_MEMORY
- {
-- /* Allocated video memory. */
-- IN gcuVIDMEM_NODE_PTR node;
-+ /* Allocated video memory gcuVIDMEM_NODE gcuVIDMEM_NODE. */
-+ IN gctUINT64 node;
-
- /* Cache configuration. */
- /* Only gcvPOOL_CONTIGUOUS and gcvPOOL_VIRUTAL
- ** can be configured */
-- IN gctBOOL cacheable;
-+ IN gctBOOL cacheable;
-
- /* Hardware specific address. */
-- OUT gctUINT32 address;
-+ OUT gctUINT32 address;
-
- /* Mapped logical address. */
-- OUT gctPOINTER memory;
-+ OUT gctUINT64 memory;
- }
- LockVideoMemory;
-
- /* gcvHAL_UNLOCK_VIDEO_MEMORY */
- struct _gcsHAL_UNLOCK_VIDEO_MEMORY
- {
-- /* Allocated video memory. */
-- IN gcuVIDMEM_NODE_PTR node;
-+ /* Allocated video memory in gcuVIDMEM_NODE. */
-+ IN gctUINT64 node;
-
- /* Type of surface. */
-- IN gceSURF_TYPE type;
-+ IN gceSURF_TYPE type;
-
- /* Flag to unlock surface asynchroneously. */
-- IN OUT gctBOOL asynchroneous;
-+ IN OUT gctBOOL asynchroneous;
- }
- UnlockVideoMemory;
-
-@@ -458,13 +460,13 @@ typedef struct _gcsHAL_INTERFACE
- struct _gcsHAL_ALLOCATE_NON_PAGED_MEMORY
- {
- /* Number of bytes to allocate. */
-- IN OUT gctSIZE_T bytes;
-+ IN OUT gctUINT64 bytes;
-
-- /* Physical address of allocation. */
-- OUT gctPHYS_ADDR physical;
-+ /* Physical address of allocation. Just a name. */
-+ OUT gctUINT32 physical;
-
- /* Logical address of allocation. */
-- OUT gctPOINTER logical;
-+ OUT gctUINT64 logical;
- }
- AllocateNonPagedMemory;
-
-@@ -472,13 +474,13 @@ typedef struct _gcsHAL_INTERFACE
- struct _gcsHAL_FREE_NON_PAGED_MEMORY
- {
- /* Number of bytes allocated. */
-- IN gctSIZE_T bytes;
-+ IN gctUINT64 bytes;
-
-- /* Physical address of allocation. */
-- IN gctPHYS_ADDR physical;
-+ /* Physical address of allocation. Just a name. */
-+ IN gctUINT32 physical;
-
- /* Logical address of allocation. */
-- IN gctPOINTER logical;
-+ IN gctUINT64 logical;
- }
- FreeNonPagedMemory;
-
-@@ -486,13 +488,13 @@ typedef struct _gcsHAL_INTERFACE
- struct _gcsHAL_ALLOCATE_VIRTUAL_COMMAND_BUFFER
- {
- /* Number of bytes to allocate. */
-- IN OUT gctSIZE_T bytes;
-+ IN OUT gctUINT64 bytes;
-
-- /* Physical address of allocation. */
-- OUT gctPHYS_ADDR physical;
-+ /* Physical address of allocation. Just a name. */
-+ OUT gctUINT32 physical;
-
- /* Logical address of allocation. */
-- OUT gctPOINTER logical;
-+ OUT gctUINT64 logical;
- }
- AllocateVirtualCommandBuffer;
-
-@@ -500,38 +502,38 @@ typedef struct _gcsHAL_INTERFACE
- struct _gcsHAL_FREE_VIRTUAL_COMMAND_BUFFER
- {
- /* Number of bytes allocated. */
-- IN gctSIZE_T bytes;
-+ IN gctUINT64 bytes;
-
-- /* Physical address of allocation. */
-- IN gctPHYS_ADDR physical;
-+ /* Physical address of allocation. Just a name. */
-+ IN gctUINT32 physical;
-
- /* Logical address of allocation. */
-- IN gctPOINTER logical;
-+ IN gctUINT64 logical;
- }
- FreeVirtualCommandBuffer;
-
- /* gcvHAL_EVENT_COMMIT. */
- struct _gcsHAL_EVENT_COMMIT
- {
-- /* Event queue. */
-- IN gcsQUEUE_PTR queue;
-+ /* Event queue in gcsQUEUE. */
-+ IN gctUINT64 queue;
- }
- Event;
-
- /* gcvHAL_COMMIT */
- struct _gcsHAL_COMMIT
- {
-- /* Context buffer object. */
-- IN gckCONTEXT context;
-+ /* Context buffer object gckCONTEXT. */
-+ IN gctUINT64 context;
-
-- /* Command buffer. */
-- IN gcoCMDBUF commandBuffer;
-+ /* Command buffer gcoCMDBUF. */
-+ IN gctUINT64 commandBuffer;
-
-- /* State delta buffer. */
-- gcsSTATE_DELTA_PTR delta;
-+ /* State delta buffer in gcsSTATE_DELTA. */
-+ gctUINT64 delta;
-
-- /* Event queue. */
-- IN gcsQUEUE_PTR queue;
-+ /* Event queue in gcsQUEUE. */
-+ IN gctUINT64 queue;
- }
- Commit;
-
-@@ -539,16 +541,16 @@ typedef struct _gcsHAL_INTERFACE
- struct _gcsHAL_MAP_USER_MEMORY
- {
- /* Base address of user memory to map. */
-- IN gctPOINTER memory;
-+ IN gctUINT64 memory;
-
- /* Physical address of user memory to map. */
- IN gctUINT32 physical;
-
- /* Size of user memory in bytes to map. */
-- IN gctSIZE_T size;
-+ IN gctUINT64 size;
-
-- /* Info record required by gcvHAL_UNMAP_USER_MEMORY. */
-- OUT gctPOINTER info;
-+ /* Info record required by gcvHAL_UNMAP_USER_MEMORY. Just a name. */
-+ OUT gctUINT32 info;
-
- /* Physical address of mapped memory. */
- OUT gctUINT32 address;
-@@ -559,13 +561,13 @@ typedef struct _gcsHAL_INTERFACE
- struct _gcsHAL_UNMAP_USER_MEMORY
- {
- /* Base address of user memory to unmap. */
-- IN gctPOINTER memory;
-+ IN gctUINT64 memory;
-
- /* Size of user memory in bytes to unmap. */
-- IN gctSIZE_T size;
-+ IN gctUINT64 size;
-
-- /* Info record returned by gcvHAL_MAP_USER_MEMORY. */
-- IN gctPOINTER info;
-+ /* Info record returned by gcvHAL_MAP_USER_MEMORY. Just a name. */
-+ IN gctUINT32 info;
-
- /* Physical address of mapped memory as returned by
- gcvHAL_MAP_USER_MEMORY. */
-@@ -597,14 +599,14 @@ typedef struct _gcsHAL_INTERFACE
- /* gcvHAL_SIGNAL. */
- struct _gcsHAL_SIGNAL
- {
-- /* Signal handle to signal. */
-- IN gctSIGNAL signal;
-+ /* Signal handle to signal gctSIGNAL. */
-+ IN gctUINT64 signal;
-
-- /* Reserved. */
-- IN gctSIGNAL auxSignal;
-+ /* Reserved gctSIGNAL. */
-+ IN gctUINT64 auxSignal;
-
-- /* Process owning the signal. */
-- IN gctHANDLE process;
-+ /* Process owning the signal gctHANDLE. */
-+ IN gctUINT64 process;
-
- #if defined(__QNXNTO__)
- /* Client pulse side-channel connection ID. Set by client in gcoOS_CreateSignal. */
-@@ -633,16 +635,16 @@ typedef struct _gcsHAL_INTERFACE
- struct _gcsHAL_ALLOCATE_CONTIGUOUS_MEMORY
- {
- /* Number of bytes to allocate. */
-- IN OUT gctSIZE_T bytes;
-+ IN OUT gctUINT64 bytes;
-
- /* Hardware address of allocation. */
- OUT gctUINT32 address;
-
-- /* Physical address of allocation. */
-- OUT gctPHYS_ADDR physical;
-+ /* Physical address of allocation. Just a name. */
-+ OUT gctUINT32 physical;
-
- /* Logical address of allocation. */
-- OUT gctPOINTER logical;
-+ OUT gctUINT64 logical;
- }
- AllocateContiguousMemory;
-
-@@ -650,13 +652,13 @@ typedef struct _gcsHAL_INTERFACE
- struct _gcsHAL_FREE_CONTIGUOUS_MEMORY
- {
- /* Number of bytes allocated. */
-- IN gctSIZE_T bytes;
-+ IN gctUINT64 bytes;
-
-- /* Physical address of allocation. */
-- IN gctPHYS_ADDR physical;
-+ /* Physical address of allocation. Just a name. */
-+ IN gctUINT32 physical;
-
- /* Logical address of allocation. */
-- IN gctPOINTER logical;
-+ IN gctUINT64 logical;
- }
- FreeContiguousMemory;
-
-@@ -726,8 +728,8 @@ typedef struct _gcsHAL_INTERFACE
- /* gcvHAL_PROFILE_REGISTERS_2D */
- struct _gcsHAL_PROFILE_REGISTERS_2D
- {
-- /* Data read. */
-- OUT gcs2D_PROFILE_PTR hwProfile2D;
-+ /* Data read in gcs2D_PROFILE. */
-+ OUT gctUINT64 hwProfile2D;
- }
- RegisterProfileData2D;
- #endif
-@@ -766,7 +768,7 @@ typedef struct _gcsHAL_INTERFACE
- IN gctBOOL map;
-
- /* Physical address. */
-- IN OUT gctPHYS_ADDR physical;
-+ IN OUT gctUINT64 physical;
- }
- MapPhysical;
-
-@@ -791,10 +793,12 @@ typedef struct _gcsHAL_INTERFACE
- struct _gcsHAL_CACHE
- {
- IN gceCACHEOPERATION operation;
-- IN gctHANDLE process;
-- IN gctPOINTER logical;
-- IN gctSIZE_T bytes;
-- IN gcuVIDMEM_NODE_PTR node;
-+ /* gctHANDLE */
-+ IN gctUINT64 process;
-+ IN gctUINT64 logical;
-+ IN gctUINT64 bytes;
-+ /* gcuVIDMEM_NODE_PTR */
-+ IN gctUINT64 node;
- }
- Cache;
-
-@@ -861,29 +865,30 @@ typedef struct _gcsHAL_INTERFACE
- /* gcvHAL_ATTACH */
- struct _gcsHAL_ATTACH
- {
-- /* Context buffer object. */
-- OUT gckCONTEXT context;
-+ /* Context buffer object gckCONTEXT. Just a name. */
-+ OUT gctUINT32 context;
-
- /* Number of states in the buffer. */
-- OUT gctSIZE_T stateCount;
-+ OUT gctUINT64 stateCount;
- }
- Attach;
-
- /* gcvHAL_DETACH */
- struct _gcsHAL_DETACH
- {
-- /* Context buffer object. */
-- IN gckCONTEXT context;
-+ /* Context buffer object gckCONTEXT. Just a name. */
-+ IN gctUINT32 context;
- }
- Detach;
-
- /* gcvHAL_COMPOSE. */
-- gcsHAL_COMPOSE Compose;
-+ gcsHAL_COMPOSE Compose;
-
- /* gcvHAL_GET_FRAME_INFO. */
- struct _gcsHAL_GET_FRAME_INFO
- {
-- OUT gcsHAL_FRAME_INFO * frameInfo;
-+ /* gcsHAL_FRAME_INFO* */
-+ OUT gctUINT64 frameInfo;
- }
- GetFrameInfo;
-
-@@ -898,17 +903,17 @@ typedef struct _gcsHAL_INTERFACE
- /* gcvHAL_COMMIT */
- struct _gcsHAL_VGCOMMIT
- {
-- /* Context buffer. */
-- IN gcsVGCONTEXT_PTR context;
-+ /* Context buffer in gcsVGCONTEXT. */
-+ IN gctUINT64 context;
-
-- /* Command queue. */
-- IN gcsVGCMDQUEUE_PTR queue;
-+ /* Command queue in gcsVGCMDQUEUE. */
-+ IN gctUINT64 queue;
-
- /* Number of entries in the queue. */
-- IN gctUINT entryCount;
-+ IN gctUINT entryCount;
-
-- /* Task table. */
-- IN gcsTASK_MASTER_TABLE_PTR taskTable;
-+ /* Task table in gcsTASK_MASTER_TABLE. */
-+ IN gctUINT64 taskTable;
- }
- VGCommit;
-
-@@ -926,11 +931,13 @@ typedef struct _gcsHAL_INTERFACE
- {
- IN gctUINT32 pid;
- IN gctUINT32 dataId;
-- IN gcuVIDMEM_NODE_PTR node;
-- OUT gctUINT8_PTR data;
-- /* fix size */
-- OUT gctUINT8_PTR nodeData;
-- gctSIZE_T size;
-+ /* 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;
- }
- GetSharedInfo;
-@@ -938,10 +945,13 @@ typedef struct _gcsHAL_INTERFACE
- struct _gcsHAL_SET_SHARED_INFO
- {
- IN gctUINT32 dataId;
-- IN gcuVIDMEM_NODE_PTR node;
-- IN gctUINT8_PTR data;
-- IN gctUINT8_PTR nodeData;
-- IN gctSIZE_T size;
-+ /* 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;
- }
- SetSharedInfo;
-@@ -959,6 +969,12 @@ typedef struct _gcsHAL_INTERFACE
- OUT gctUINT maxValue;
- }
- GetFscaleValue;
-+
-+ struct _gcsHAL_QUERY_RESET_TIME_STAMP
-+ {
-+ OUT gctUINT64 timeStamp;
-+ }
-+ QueryResetTimeStamp;
- }
- u;
- }
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver_vg.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver_vg.h
-index c447dcf..b54752f 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver_vg.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver_vg.h
-@@ -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
-@@ -19,9 +19,6 @@
- *****************************************************************************/
-
-
--
--
--
- #ifndef __gc_hal_driver_vg_h_
- #define __gc_hal_driver_vg_h_
-
-@@ -213,7 +210,7 @@ typedef struct _gcsTASK_UNLOCK_VIDEO_MEMORY
- IN gceTASK id;
-
- /* Allocated video memory. */
-- IN gcuVIDMEM_NODE_PTR node;
-+ IN gctUINT64 node;
- }
- gcsTASK_UNLOCK_VIDEO_MEMORY;
-
-@@ -224,7 +221,7 @@ typedef struct _gcsTASK_FREE_VIDEO_MEMORY
- IN gceTASK id;
-
- /* Allocated video memory. */
-- IN gcuVIDMEM_NODE_PTR node;
-+ IN gctUINT64 node;
- }
- gcsTASK_FREE_VIDEO_MEMORY;
-
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_dump.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_dump.h
-index 9b2db22..ffd45e8 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_dump.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_dump.h
-@@ -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
-@@ -19,7 +19,6 @@
- *****************************************************************************/
-
-
--
- #ifndef __gc_hal_dump_h_
- #define __gc_hal_dump_h_
-
-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 3be4c77..496276e 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_eglplatform_h_
- #define __gc_hal_eglplatform_h_
-
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h
-index 727758f..4f5c3ce 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform_type.h
-@@ -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
-@@ -19,7 +19,6 @@
- *****************************************************************************/
-
-
--
- #ifndef __gc_hal_eglplatform_type_h_
- #define __gc_hal_eglplatform_type_h_
-
-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 c462e57..d441d1d 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_engine_h_
- #define __gc_hal_engine_h_
-
-@@ -391,6 +389,37 @@ gcoSURF_IsRenderable(
- IN gcoSURF Surface
- );
-
-+#if gcdSYNC
-+gceSTATUS
-+gcoSURF_GetFence(
-+ IN gcoSURF Surface
-+ );
-+gceSTATUS
-+gcoSURF_WaitFence(
-+ IN gcoSURF Surface
-+ );
-+
-+gceSTATUS
-+gcoSTREAM_GetFence(
-+ IN gcoSTREAM stream
-+ );
-+
-+gceSTATUS
-+gcoSTREAM_WaitFence(
-+ IN gcoSTREAM stream
-+ );
-+
-+gceSTATUS
-+gcoINDEX_GetFence(
-+ IN gcoINDEX index
-+ );
-+
-+gceSTATUS
-+gcoINDEX_WaitFence(
-+ IN gcoINDEX index
-+ );
-+#endif
-+
- /******************************************************************************\
- ******************************** gcoINDEX Object *******************************
- \******************************************************************************/
-@@ -1976,7 +2005,7 @@ gcoHAL_GetSharedInfo(
- IN gctUINT32 DataId,
- OUT gctUINT8_PTR Data,
- IN gctSIZE_T Bytes,
-- IN gcuVIDMEM_NODE_PTR Node,
-+ IN gctUINT64 Node,
- OUT gctUINT8_PTR NodeData,
- IN gceVIDMEM_NODE_SHARED_INFO_TYPE SharedInfoType
- );
-@@ -1986,7 +2015,7 @@ gcoHAL_SetSharedInfo(
- IN gctUINT32 DataId,
- IN gctUINT8_PTR Data,
- IN gctSIZE_T Bytes,
-- IN gcuVIDMEM_NODE_PTR Node,
-+ IN gctUINT64 Node,
- IN gctUINT8_PTR NodeData,
- IN gceVIDMEM_NODE_SHARED_INFO_TYPE SharedInfoType
- );
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h
-index 1526b0c..4bb6772 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_engine_vg.h
-@@ -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
-@@ -19,9 +19,6 @@
- *****************************************************************************/
-
-
--
--
--
- #ifndef __gc_hal_engine_vg_h_
- #define __gc_hal_engine_vg_h_
-
-@@ -527,14 +524,14 @@ gcoHAL_CombineAddress(
- gceSTATUS
- gcoHAL_ScheduleVideoMemory(
- IN gcoHAL Hal,
-- IN gcuVIDMEM_NODE_PTR Node
-+ IN gctUINT64 Node
- );
-
- /* Free linear video memory allocated with gcoHAL_AllocateLinearVideoMemory. */
- gceSTATUS
- gcoHAL_FreeVideoMemory(
- IN gcoHAL Hal,
-- IN gcuVIDMEM_NODE_PTR Node
-+ IN gctUINT64 Node
- );
-
- /* Query command buffer attributes. */
-@@ -550,7 +547,7 @@ gcoHAL_AllocateLinearVideoMemory(
- IN gctUINT Size,
- IN gctUINT Alignment,
- IN gcePOOL Pool,
-- OUT gcuVIDMEM_NODE_PTR * Node,
-+ OUT gctUINT64 * Node,
- OUT gctUINT32 * Address,
- OUT gctPOINTER * Memory
- );
-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 6c71df9..cf6b425 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_enum_h_
- #define __gc_hal_enum_h_
-
-@@ -150,6 +148,8 @@ typedef enum _gceFEATURE
- gcvFEATURE_TEXTURE_YUV_ASSEMBLER,
- gcvFEATURE_DYNAMIC_FREQUENCY_SCALING,
- gcvFEATURE_BUGFIX15,
-+ gcvFEATURE_2D_MIRROR_EXTENSION,
-+ gcvFEATURE_ELEMENT_INDEX_UINT,
- }
- gceFEATURE;
-
-@@ -351,6 +351,16 @@ typedef enum _gceSURF_FORMAT
- gcvSURF_DXT5,
- gcvSURF_CXV8U8,
- gcvSURF_ETC1,
-+ gcvSURF_R11_EAC,
-+ gcvSURF_SIGNED_R11_EAC,
-+ gcvSURF_RG11_EAC,
-+ gcvSURF_SIGNED_RG11_EAC,
-+ gcvSURF_RGB8_ETC2,
-+ gcvSURF_SRGB8_ETC2,
-+ gcvSURF_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
-+ gcvSURF_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
-+ gcvSURF_RGBA8_ETC2_EAC,
-+ gcvSURF_SRGB8_ALPHA8_ETC2_EAC,
-
- /* YUV formats. */
- gcvSURF_YUY2 = 500,
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h
-index 24edc0b..0608e43 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_kernel_buffer.h
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_kernel_buffer_h_
- #define __gc_hal_kernel_buffer_h_
-
-@@ -59,11 +57,6 @@ typedef struct _gcsSTATE_DELTA
- gctUINT num;
- #endif
-
-- /* For dumping. */
--#if gcdDUMP
-- gcoOS os;
--#endif
--
- /* Main state delta ID. Every time state delta structure gets reinitialized,
- main ID is incremented. If main state ID overflows, all map entry IDs get
- reinitialized to make sure there is no potential erroneous match after
-@@ -79,22 +72,22 @@ typedef struct _gcsSTATE_DELTA
- /* Number of states currently stored in the record array. */
- gctUINT recordCount;
-
-- /* Record array; holds all modified states. */
-- gcsSTATE_DELTA_RECORD_PTR recordArray;
-+ /* Record array; holds all modified states in gcsSTATE_DELTA_RECORD. */
-+ gctUINT64 recordArray;
-
- /* Map entry ID is used for map entry validation. If map entry ID does not
- match the main state delta ID, the entry and the corresponding state are
- considered not in use. */
-- gctUINT_PTR mapEntryID;
-+ gctUINT64 mapEntryID;
- gctUINT mapEntryIDSize;
-
- /* If the map entry ID matches the main state delta ID, index points to
- the state record in the record array. */
-- gctUINT_PTR mapEntryIndex;
-+ gctUINT64 mapEntryIndex;
-
-- /* Previous and next state deltas. */
-- gcsSTATE_DELTA_PTR prev;
-- gcsSTATE_DELTA_PTR next;
-+ /* Previous and next state deltas in gcsSTATE_DELTA. */
-+ gctUINT64 prev;
-+ gctUINT64 next;
- }
- gcsSTATE_DELTA;
-
-@@ -114,38 +107,38 @@ struct _gcoCMDBUF
- gctBOOL usingFilterBlit;
- gctBOOL usingPalette;
-
-- /* Physical address of command buffer. */
-- gctPHYS_ADDR physical;
-+ /* Physical address of command buffer. Just a name. */
-+ gctUINT32 physical;
-
- /* Logical address of command buffer. */
-- gctPOINTER logical;
-+ gctUINT64 logical;
-
- /* Number of bytes in command buffer. */
-- gctSIZE_T bytes;
-+ gctUINT bytes;
-
- /* Start offset into the command buffer. */
-- gctUINT32 startOffset;
-+ gctUINT startOffset;
-
- /* Current offset into the command buffer. */
-- gctUINT32 offset;
-+ gctUINT offset;
-
- /* Number of free bytes in command buffer. */
-- gctSIZE_T free;
-+ gctUINT free;
-
- /* Location of the last reserved area. */
-- gctPOINTER lastReserve;
-+ gctUINT64 lastReserve;
- gctUINT lastOffset;
-
- #if gcdSECURE_USER
- /* Hint array for the current command buffer. */
- gctUINT hintArraySize;
-- gctUINT32_PTR hintArray;
-- gctUINT32_PTR hintArrayTail;
-+ gctUINT64 hintArray;
-+ gctUINT64 hintArrayTail;
- #endif
-
- #if gcmIS_DEBUG(gcdDEBUG_CODE)
- /* Last load state command location and hardware address. */
-- gctUINT32_PTR lastLoadStatePtr;
-+ gctUINT64 lastLoadStatePtr;
- gctUINT32 lastLoadStateAddress;
- gctUINT32 lastLoadStateCount;
- #endif
-@@ -153,8 +146,8 @@ struct _gcoCMDBUF
-
- typedef struct _gcsQUEUE
- {
-- /* Pointer to next gcsQUEUE structure. */
-- gcsQUEUE_PTR next;
-+ /* Pointer to next gcsQUEUE structure in gcsQUEUE. */
-+ gctUINT64 next;
-
- /* Event information. */
- gcsHAL_INTERFACE iface;
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_mem.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_mem.h
-index e64f7e7..9e32878 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_mem.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_mem.h
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- /*
- ** Include file for the local memory management.
- */
-@@ -176,7 +174,7 @@ Prefix##_CAllocate##TypeName( \
- gceSTATUS status; \
- gcmHEADER_ARG("MemPool=0x%x Pointer=0x%x", MemPool, Pointer); \
- gcmERR_RETURN(gcfMEM_FSMemPoolGetANode(MemPool, (gctPOINTER *) Pointer)); \
-- gcmVERIFY_OK(gcoOS_ZeroMemory(*(gctPOINTER *) Pointer, gcmSIZEOF(Type))); \
-+ gcoOS_ZeroMemory(*(gctPOINTER *) Pointer, gcmSIZEOF(Type)); \
- gcmFOOTER(); \
- return gcvSTATUS_OK; \
- } \
-@@ -233,7 +231,7 @@ gceSTATUS \
- gceSTATUS status; \
- gcmHEADER_ARG("MemPool=0x%x Pointer=0x%x Size=%u", MemPool, Pointer, Size); \
- gcmERR_RETURN(gcfMEM_VSMemPoolGetANode(MemPool, Size, (gctPOINTER *) Pointer)); \
-- gcmVERIFY_OK(gcoOS_ZeroMemory(*(gctPOINTER *) Pointer, size)); \
-+ gcoOS_ZeroMemory(*(gctPOINTER *) Pointer, size); \
- gcmFOOTER(); \
- return gcvSTATUS_OK; \
- } \
-@@ -276,7 +274,7 @@ Prefix##_CAllocate##TypeName( \
- gceSTATUS status; \
- gcmHEADER_ARG("MemPool=0x%x Pointer=0x%x Count=%u", MemPool, Pointer, Count); \
- gcmERR_RETURN(gcfMEM_AFSMemPoolGetANode(MemPool, Count, (gctPOINTER *) Pointer)); \
-- gcmVERIFY_OK(gcoOS_ZeroMemory(*(gctPOINTER *) Pointer, Count * gcmSIZEOF(Type))); \
-+ gcoOS_ZeroMemory(*(gctPOINTER *) Pointer, Count * gcmSIZEOF(Type)); \
- gcmFOOTER(); \
- return gcvSTATUS_OK; \
- } \
-@@ -323,7 +321,7 @@ Prefix##_CAllocate##TypeName( \
- gcmERR_RETURN(gcoOS_Allocate(MemPool, \
- gcmSIZEOF(Type), \
- (gctPOINTER *) Pointer)); \
-- gcmVERIFY_OK(gcoOS_ZeroMemory(*(gctPOINTER *) Pointer, gcmSIZEOF(Type))); \
-+ gcoOS_ZeroMemory(*(gctPOINTER *) Pointer, gcmSIZEOF(Type)); \
- gcmFOOTER(); \
- return gcvSTATUS_OK; \
- } \
-@@ -370,7 +368,7 @@ Prefix##_CAllocate##TypeName( \
- gcmERR_RETURN(gcoOS_Allocate(MemPool, \
- Size, \
- (gctPOINTER *) Pointer)); \
-- gcmVERIFY_OK(gcoOS_ZeroMemory(*(gctPOINTER *) Pointer, Size)); \
-+ gcoOS_ZeroMemory(*(gctPOINTER *) Pointer, Size); \
- gcmFOOTER(); \
- return gcvSTATUS_OK; \
- } \
-@@ -417,7 +415,7 @@ Prefix##_CAllocate##TypeName( \
- gcmERR_RETURN(gcoOS_Allocate(MemPool, \
- Count * gcmSIZEOF(Type), \
- (gctPOINTER *) Pointer)); \
-- gcmVERIFY_OK(gcoOS_ZeroMemory(*(gctPOINTER *) Pointer, Count * gcmSIZEOF(Type))); \
-+ gcoOS_ZeroMemory(*(gctPOINTER *) Pointer, Count * gcmSIZEOF(Type)); \
- gcmFOOTER(); \
- return gcvSTATUS_OK; \
- } \
-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 8478745..86e9133 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_options_h_
- #define __gc_hal_options_h_
-
-@@ -755,6 +753,10 @@
- # define gcdANDROID_UNALIGNED_LINEAR_COMPOSITION_ADJUST 0
- #endif
-
-+#ifndef gcdENABLE_PE_DITHER_FIX
-+# define gcdENABLE_PE_DITHER_FIX 1
-+#endif
-+
- #ifndef gcdSHARED_PAGETABLE
- # define gcdSHARED_PAGETABLE 1
- #endif
-@@ -839,4 +841,21 @@
- #define gcdUSE_NPOT_PATCH 1
- #endif
-
-+
-+#ifndef gcdSYNC
-+# define gcdSYNC 1
-+#endif
-+
-+/*
-+ gcdDVFS
-+
-+ When non-zero, software will make use of dynamic voltage and
-+ frequency feature.
-+ */
-+#ifndef gcdDVFS
-+# define gcdDVFS 0
-+# define gcdDVFS_ANAYLSE_WINDOW 4
-+# define gcdDVFS_POLLING_TIME (gcdDVFS_ANAYLSE_WINDOW * 4)
-+#endif
-+
- #endif /* __gc_hal_options_h_ */
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
-index d486b53..3e450ba 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_profiler.h
-@@ -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/hal/kernel/inc/gc_hal_raster.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
-index d9b2993..bc4171e 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_raster.h
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_raster_h_
- #define __gc_hal_raster_h_
-
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_rename.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_rename.h
-index ed6718d..6c10fbf 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_rename.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_rename.h
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_rename_h_
- #define __gc_hal_rename_h_
-
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_statistics.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_statistics.h
-index 1e85458..82336e8 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_statistics.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_statistics.h
-@@ -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
-@@ -19,7 +19,6 @@
- *****************************************************************************/
-
-
--
- #ifndef __gc_hal_statistics_h_
- #define __gc_hal_statistics_h_
-
-diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
-index 70c4b4f..5c0877d 100644
---- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
-+++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_types_h_
- #define __gc_hal_types_h_
-
-@@ -588,13 +586,13 @@ gceSTATUS;
- #if gcmIS_DEBUG(gcdDEBUG_CODE)
-
- # define gcmSTORELOADSTATE(CommandBuffer, Memory, Address, Count) \
-- CommandBuffer->lastLoadStatePtr = Memory; \
-+ CommandBuffer->lastLoadStatePtr = gcmPTR_TO_UINT64(Memory); \
- CommandBuffer->lastLoadStateAddress = Address; \
- CommandBuffer->lastLoadStateCount = Count
-
- # define gcmVERIFYLOADSTATE(CommandBuffer, Memory, Address) \
- gcmASSERT( \
-- (gctUINT) (Memory - CommandBuffer->lastLoadStatePtr - 1) \
-+ (gctUINT) (Memory - gcmUINT64_TO_TYPE(CommandBuffer->lastLoadStatePtr, gctUINT32_PTR) - 1) \
- == \
- (gctUINT) (Address - CommandBuffer->lastLoadStateAddress) \
- ); \
-@@ -623,10 +621,10 @@ gceSTATUS;
- # define gcmBEGINSECUREUSER() \
- __secure_user_offset__ = reserve->lastOffset; \
- \
-- __secure_user_hintArray__ = reserve->hintArrayTail
-+ __secure_user_hintArray__ = gcmUINT64_TO_PTR(reserve->hintArrayTail)
-
- # define gcmENDSECUREUSER() \
-- reserve->hintArrayTail = __secure_user_hintArray__
-+ reserve->hintArrayTail = gcmPTR_TO_UINT64(__secure_user_hintArray__)
-
- # define gcmSKIPSECUREUSER() \
- __secure_user_offset__ += gcmSIZEOF(gctUINT32)
-@@ -682,7 +680,7 @@ gceSTATUS;
- Hardware->buffer, ReserveSize, gcvTRUE, &CommandBuffer \
- )); \
- \
-- Memory = (gctUINT32_PTR) CommandBuffer->lastReserve; \
-+ Memory = gcmUINT64_TO_PTR(CommandBuffer->lastReserve); \
- \
- StateDelta = Hardware->delta; \
- \
-@@ -694,7 +692,7 @@ gceSTATUS;
- gcmENDSECUREUSER(); \
- \
- gcmASSERT( \
-- ((gctUINT8_PTR) CommandBuffer->lastReserve) + ReserveSize \
-+ gcmUINT64_TO_TYPE(CommandBuffer->lastReserve, gctUINT8_PTR) + ReserveSize \
- == \
- (gctUINT8_PTR) Memory \
- ); \
-@@ -704,7 +702,8 @@ gceSTATUS;
-
- #define gcmBEGINSTATEBATCH(CommandBuffer, Memory, FixedPoint, Address, Count) \
- { \
-- gcmASSERT(((Memory - (gctUINT32_PTR) CommandBuffer->lastReserve) & 1) == 0); \
-+ gcmASSERT(((Memory - gcmUINT64_TO_TYPE(CommandBuffer->lastReserve, gctUINT32_PTR)) & 1) == 0); \
-+ gcmASSERT((gctUINT32)Count <= 1024); \
- \
- gcmVERIFYLOADSTATEDONE(CommandBuffer); \
- \
-@@ -723,7 +722,7 @@ gceSTATUS;
- { \
- gcmVERIFYLOADSTATEDONE(CommandBuffer); \
- \
-- gcmASSERT(((Memory - (gctUINT32_PTR) CommandBuffer->lastReserve) & 1) == 0); \
-+ gcmASSERT(((Memory - gcmUINT64_TO_TYPE(CommandBuffer->lastReserve, gctUINT32_PTR)) & 1) == 0); \
- }
-
- /*----------------------------------------------------------------------------*/
-@@ -902,13 +901,13 @@ gceSTATUS;
- typedef struct _gcsDATABASE_COUNTERS
- {
- /* Number of currently allocated bytes. */
-- gctSIZE_T bytes;
-+ gctUINT64 bytes;
-
- /* Maximum number of bytes allocated (memory footprint). */
-- gctSIZE_T maxBytes;
-+ gctUINT64 maxBytes;
-
- /* Total number of bytes allocated. */
-- gctSIZE_T totalBytes;
-+ gctUINT64 totalBytes;
- }
- gcsDATABASE_COUNTERS;
-
-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 f98742e..2881604 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_version_h_
- #define __gc_hal_version_h_
-
-@@ -30,7 +28,7 @@
-
- #define gcvVERSION_PATCH 9
-
--#define gcvVERSION_BUILD 1478
-+#define gcvVERSION_BUILD 1210
-
- #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 8731137..5ff0281 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
-@@ -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
-@@ -19,9 +19,6 @@
- *****************************************************************************/
-
-
--
--
--
- #ifndef __gc_hal_vg_h_
- #define __gc_hal_vg_h_
-
-@@ -588,7 +585,7 @@ typedef struct _gcsCMDBUFFER
- /* The user sets this to the node of the container buffer whitin which
- this particular command buffer resides. The kernel sets this to the
- node of the internally allocated buffer. */
-- gcuVIDMEM_NODE_PTR node;
-+ gctUINT64 node;
-
- /* Command buffer hardware address. */
- gctUINT32 address;
-diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h
-index a6754fe..339dff4 100644
---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debug.h
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_kernel_debug_h_
- #define __gc_hal_kernel_debug_h_
-
-diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c
-index 99d7d9a..6bdc5a6 100644
---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.c
-@@ -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/hal/os/linux/kernel/gc_hal_kernel_debugfs.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h
-index e0b6142..78d8199 100644
---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_debugfs.h
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include <stdarg.h>
-
- #ifndef __gc_hal_kernel_debugfs_h_
-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 7690bb2..7168f0e 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_linux.h"
- #include <linux/pagemap.h>
- #include <linux/seq_file.h>
-@@ -320,6 +318,7 @@ gckGALDEVICE_Construct(
- gctINT32 i;
- gceHARDWARE_TYPE type;
- gckDB sharedDB = gcvNULL;
-+ gckKERNEL kernel = gcvNULL;
-
- gcmkHEADER_ARG("IrqLine=%d RegisterMemBase=0x%08x RegisterMemSize=%u "
- "IrqLine2D=%d RegisterMemBase2D=0x%08x RegisterMemSize2D=%u "
-@@ -692,6 +691,16 @@ gckGALDEVICE_Construct(
- }
-
-
-+ /* Grab the first availiable kernel */
-+ for (i = 0; i < gcdMAX_GPU_COUNT; i++)
-+ {
-+ if (device->irqLines[i] != -1)
-+ {
-+ kernel = device->kernels[i];
-+ break;
-+ }
-+ }
-+
- /* Set up the internal memory region. */
- if (device->internalSize > 0)
- {
-@@ -718,6 +727,7 @@ gckGALDEVICE_Construct(
- }
-
- device->internalPhysical = (gctPHYS_ADDR)(gctUINTPTR_T) physical;
-+ device->internalPhysicalName = gcmPTR_TO_NAME(device->internalPhysical);
- physical += device->internalSize;
- }
- }
-@@ -748,6 +758,7 @@ gckGALDEVICE_Construct(
- }
-
- device->externalPhysical = (gctPHYS_ADDR)(gctUINTPTR_T) physical;
-+ device->externalPhysicalName = gcmPTR_TO_NAME(device->externalPhysical);
- physical += device->externalSize;
- }
- }
-@@ -772,6 +783,7 @@ gckGALDEVICE_Construct(
-
- if (gcmIS_SUCCESS(status))
- {
-+ device->contiguousPhysicalName = gcmPTR_TO_NAME(device->contiguousPhysical);
- status = gckVIDMEM_Construct(
- device->os,
- physAddr | device->systemMemoryBaseAddress,
-@@ -792,6 +804,7 @@ gckGALDEVICE_Construct(
- device->contiguousPhysical
- ));
-
-+ gcmRELEASE_NAME(device->contiguousPhysicalName);
- device->contiguousBase = gcvNULL;
- device->contiguousPhysical = gcvNULL;
- }
-@@ -864,6 +877,7 @@ gckGALDEVICE_Construct(
- #endif
-
- device->contiguousPhysical = gcvNULL;
-+ device->contiguousPhysicalName = 0;
- device->contiguousSize = ContiguousSize;
- device->contiguousMapped = gcvTRUE;
- }
-@@ -908,11 +922,38 @@ gckGALDEVICE_Destroy(
- {
- gctINT i;
- gceSTATUS status = gcvSTATUS_OK;
-+ gckKERNEL kernel = gcvNULL;
-
- gcmkHEADER_ARG("Device=0x%x", Device);
-
- if (Device != gcvNULL)
- {
-+ /* Grab the first availiable kernel */
-+ for (i = 0; i < gcdMAX_GPU_COUNT; i++)
-+ {
-+ if (Device->irqLines[i] != -1)
-+ {
-+ kernel = Device->kernels[i];
-+ break;
-+ }
-+ }
-+ if (Device->internalPhysicalName != 0)
-+ {
-+ gcmRELEASE_NAME(Device->internalPhysicalName);
-+ Device->internalPhysicalName = 0;
-+ }
-+ if (Device->externalPhysicalName != 0)
-+ {
-+ gcmRELEASE_NAME(Device->externalPhysicalName);
-+ Device->externalPhysicalName = 0;
-+ }
-+ if (Device->contiguousPhysicalName != 0)
-+ {
-+ gcmRELEASE_NAME(Device->contiguousPhysicalName);
-+ Device->contiguousPhysicalName = 0;
-+ }
-+
-+
- for (i = 0; i < gcdMAX_GPU_COUNT; i++)
- {
- if (Device->kernels[i] != gcvNULL)
-@@ -1050,7 +1091,19 @@ gckGALDEVICE_Destroy(
- Device->clk_vg_axi = NULL;
- }
-
-+#ifdef CONFIG_PM
-+ if(Device->pmdev)
-+ pm_runtime_disable(Device->pmdev);
-+#endif
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
-+ /*NULL*/
-+#else
-+ if (Device->gpu_regulator) {
-+ regulator_put(Device->gpu_regulator);
-+ Device->gpu_regulator = NULL;
-+ }
-+#endif
-
- /* Destroy the gckOS object. */
- if (Device->os != gcvNULL)
-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 f990adf..460f022 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_kernel_device_h_
- #define __gc_hal_kernel_device_h_
-
-@@ -37,15 +35,18 @@ typedef struct _gckGALDEVICE
- /* Attributes. */
- gctSIZE_T internalSize;
- gctPHYS_ADDR internalPhysical;
-+ gctUINT32 internalPhysicalName;
- gctPOINTER internalLogical;
- gckVIDMEM internalVidMem;
- gctSIZE_T externalSize;
- gctPHYS_ADDR externalPhysical;
-+ gctUINT32 externalPhysicalName;
- gctPOINTER externalLogical;
- gckVIDMEM externalVidMem;
- gckVIDMEM contiguousVidMem;
- gctPOINTER contiguousBase;
- gctPHYS_ADDR contiguousPhysical;
-+ gctUINT32 contiguousPhysicalName;
- gctSIZE_T contiguousSize;
- gctBOOL contiguousMapped;
- gctPOINTER contiguousMappedUser;
-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 c691b35..4e3819c 100644
---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
-@@ -1,6 +1,6 @@
- /****************************************************************************
- *
--* Copyright (C) 2005 - 2012 by Vivante Corp.
-+* Copyright (C) 2005 - 2013 by Vivante Corp.
- * Copyright (C) 2011-2012 Freescale Semiconductor, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
-@@ -20,8 +20,6 @@
- *****************************************************************************/
-
-
--
--
- #include <linux/device.h>
- #include <linux/slab.h>
- #include <linux/notifier.h>
-@@ -180,6 +178,9 @@ static struct file_operations driver_fops =
- .open = drv_open,
- .release = drv_release,
- .unlocked_ioctl = drv_ioctl,
-+#ifdef HAVE_COMPAT_IOCTL
-+ .compat_ioctl = drv_ioctl,
-+#endif
- .mmap = drv_mmap,
- };
-
-@@ -492,7 +493,7 @@ long drv_ioctl(
- }
-
- copyLen = copy_from_user(
-- &iface, drvArgs.InputBuffer, sizeof(gcsHAL_INTERFACE)
-+ &iface, gcmUINT64_TO_PTR(drvArgs.InputBuffer), sizeof(gcsHAL_INTERFACE)
- );
-
- if (copyLen != 0)
-@@ -570,25 +571,26 @@ long drv_ioctl(
-
- if (gcmIS_SUCCESS(status) && (iface.command == gcvHAL_LOCK_VIDEO_MEMORY))
- {
-+ gcuVIDMEM_NODE_PTR node = gcmUINT64_TO_PTR(iface.u.LockVideoMemory.node);
- /* Special case for mapped memory. */
- if ((data->mappedMemory != gcvNULL)
-- && (iface.u.LockVideoMemory.node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
-+ && (node->VidMem.memory->object.type == gcvOBJ_VIDMEM)
- )
- {
- /* Compute offset into mapped memory. */
- gctUINT32 offset
-- = (gctUINT8 *) iface.u.LockVideoMemory.memory
-+ = (gctUINT8 *) gcmUINT64_TO_PTR(iface.u.LockVideoMemory.memory)
- - (gctUINT8 *) device->contiguousBase;
-
- /* Compute offset into user-mapped region. */
- iface.u.LockVideoMemory.memory =
-- (gctUINT8 *) data->mappedMemory + offset;
-+ gcmPTR_TO_UINT64((gctUINT8 *) data->mappedMemory + offset);
- }
- }
-
- /* Copy data back to the user. */
- copyLen = copy_to_user(
-- drvArgs.OutputBuffer, &iface, sizeof(gcsHAL_INTERFACE)
-+ gcmUINT64_TO_PTR(drvArgs.OutputBuffer), &iface, sizeof(gcsHAL_INTERFACE)
- );
-
- if (copyLen != 0)
-@@ -616,7 +618,7 @@ static int drv_mmap(
- struct vm_area_struct* vma
- )
- {
-- gceSTATUS status;
-+ gceSTATUS status = gcvSTATUS_OK;
- gcsHAL_PRIVATE_DATA_PTR data;
- gckGALDEVICE device;
-
-@@ -704,11 +706,12 @@ static int drv_mmap(
- }
-
- data->mappedMemory = (gctPOINTER) vma->vm_start;
-+
-+ /* Success. */
-+ gcmkFOOTER_NO();
-+ return 0;
- }
-
-- /* Success. */
-- gcmkFOOTER_NO();
-- return 0;
-
- OnError:
- gcmkFOOTER();
-diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c
-index cba2040..22c4071 100644
---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_linux.c
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_linux.h"
-
- #define _GC_OBJ_ZONE gcvZONE_KERNEL
-@@ -65,15 +63,15 @@ gckKERNEL_QueryVideoMemory(
-
- /* Get internal memory size and physical address. */
- Interface->u.QueryVideoMemory.internalSize = device->internalSize;
-- Interface->u.QueryVideoMemory.internalPhysical = device->internalPhysical;
-+ Interface->u.QueryVideoMemory.internalPhysical = device->internalPhysicalName;
-
- /* Get external memory size and physical address. */
- Interface->u.QueryVideoMemory.externalSize = device->externalSize;
-- Interface->u.QueryVideoMemory.externalPhysical = device->externalPhysical;
-+ Interface->u.QueryVideoMemory.externalPhysical = device->externalPhysicalName;
-
- /* Get contiguous memory size and physical address. */
- Interface->u.QueryVideoMemory.contiguousSize = device->contiguousSize;
-- Interface->u.QueryVideoMemory.contiguousPhysical = device->contiguousPhysical;
-+ Interface->u.QueryVideoMemory.contiguousPhysical = device->contiguousPhysicalName;
-
- /* Success. */
- gcmkFOOTER_NO();
-@@ -181,7 +179,10 @@ gckKERNEL_MapMemory(
- OUT gctPOINTER * Logical
- )
- {
-- return gckOS_MapMemory(Kernel->os, Physical, Bytes, Logical);
-+ gckKERNEL kernel = Kernel;
-+ gctPHYS_ADDR physical = gcmNAME_TO_PTR(Physical);
-+
-+ return gckOS_MapMemory(Kernel->os, physical, Bytes, Logical);
- }
-
- /*******************************************************************************
-@@ -216,7 +217,10 @@ gckKERNEL_UnmapMemory(
- IN gctPOINTER Logical
- )
- {
-- return gckOS_UnmapMemory(Kernel->os, Physical, Bytes, Logical);
-+ gckKERNEL kernel = Kernel;
-+ gctPHYS_ADDR physical = gcmNAME_TO_PTR(Physical);
-+
-+ return gckOS_UnmapMemory(Kernel->os, physical, Bytes, Logical);
- }
-
- /*******************************************************************************
-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 a6ed03f..9c0bcd5 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_kernel_linux_h_
- #define __gc_hal_kernel_linux_h_
-
-diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_math.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_math.c
-index a4cb717..992aeff 100644
---- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_math.c
-+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_math.c
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_linux.h"
-
- gctINT
-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 af20f0b..c07ded8 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #include "gc_hal_kernel_linux.h"
-
- #include <linux/pagemap.h>
-@@ -1873,12 +1871,14 @@ gckOS_AllocateNonPagedMemory(
- mdl->kaddr = vaddr;
- mdl->u.contiguousPages = page;
-
-+#if !defined(CONFIG_PPC)
- /* Cache invalidate. */
- dma_sync_single_for_device(
- gcvNULL,
- page_to_phys(page),
- bytes,
- DMA_FROM_DEVICE);
-+#endif
-
- while (size > 0)
- {
-@@ -3851,7 +3851,7 @@ gckOS_AllocatePagedMemoryEx(
- {
- gcmkVERIFY_OK(
- gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
-- (gctPOINTER)page_to_phys(page),
-+ (gctPOINTER)(gctUINTPTR_T)page_to_phys(page),
- page_address(page),
- PAGE_SIZE));
- }
-@@ -5333,7 +5333,7 @@ OnError:
- {
- /* Flush(clean) the data cache. */
- gcmkONERROR(gckOS_CacheFlush(Os, _GetProcessID(), gcvNULL,
-- (gctPOINTER)page_to_phys(pages[i]),
-+ (gctPOINTER)(gctUINTPTR_T)page_to_phys(pages[i]),
- (gctPOINTER)(memory & PAGE_MASK) + i*PAGE_SIZE,
- PAGE_SIZE));
- }
-@@ -6020,6 +6020,10 @@ gckOS_CacheClean(
-
- dma_cache_wback((unsigned long) Logical, Bytes);
-
-+#elif defined(CONFIG_PPC)
-+
-+ /* TODO */
-+
- #else
- dma_sync_single_for_device(
- gcvNULL,
-@@ -6097,6 +6101,8 @@ gckOS_CacheInvalidate(
-
- #elif defined(CONFIG_MIPS)
- dma_cache_inv((unsigned long) Logical, Bytes);
-+#elif defined(CONFIG_PPC)
-+ /* TODO */
- #else
- dma_sync_single_for_device(
- gcvNULL,
-@@ -6169,6 +6175,8 @@ gckOS_CacheFlush(
-
- #elif defined(CONFIG_MIPS)
- dma_cache_wback_inv((unsigned long) Logical, Bytes);
-+#elif defined(CONFIG_PPC)
-+ /* TODO */
- #else
- dma_sync_single_for_device(
- gcvNULL,
-@@ -6921,6 +6929,134 @@ gckOS_ResetGPU(
- return gcvSTATUS_OK;
- }
-
-+/*******************************************************************************
-+**
-+** gckOS_PrepareGPUFrequency
-+**
-+** Prepare to set GPU frequency and voltage.
-+**
-+** INPUT:
-+**
-+** gckOS Os
-+** Pointer to a gckOS object.
-+**
-+** gckCORE Core
-+** GPU whose frequency and voltage will be set.
-+**
-+** OUTPUT:
-+**
-+** Nothing.
-+*/
-+gceSTATUS
-+gckOS_PrepareGPUFrequency(
-+ IN gckOS Os,
-+ IN gceCORE Core
-+ )
-+{
-+ return gcvSTATUS_OK;
-+}
-+
-+/*******************************************************************************
-+**
-+** gckOS_FinishGPUFrequency
-+**
-+** Finish GPU frequency setting.
-+**
-+** INPUT:
-+**
-+** gckOS Os
-+** Pointer to a gckOS object.
-+**
-+** gckCORE Core
-+** GPU whose frequency and voltage is set.
-+**
-+** OUTPUT:
-+**
-+** Nothing.
-+*/
-+gceSTATUS
-+gckOS_FinishGPUFrequency(
-+ IN gckOS Os,
-+ IN gceCORE Core
-+ )
-+{
-+ return gcvSTATUS_OK;
-+}
-+
-+/*******************************************************************************
-+**
-+** gckOS_QueryGPUFrequency
-+**
-+** Query the current frequency of the GPU.
-+**
-+** INPUT:
-+**
-+** gckOS Os
-+** Pointer to a gckOS object.
-+**
-+** gckCORE Core
-+** GPU whose power is set.
-+**
-+** gctUINT32 * Frequency
-+** Pointer to a gctUINT32 to obtain current frequency, in MHz.
-+**
-+** gctUINT8 * Scale
-+** Pointer to a gctUINT8 to obtain current scale(1 - 64).
-+**
-+** OUTPUT:
-+**
-+** Nothing.
-+*/
-+gceSTATUS
-+gckOS_QueryGPUFrequency(
-+ IN gckOS Os,
-+ IN gceCORE Core,
-+ OUT gctUINT32 * Frequency,
-+ OUT gctUINT8 * Scale
-+ )
-+{
-+ return gcvSTATUS_OK;
-+}
-+
-+/*******************************************************************************
-+**
-+** gckOS_SetGPUFrequency
-+**
-+** Set frequency and voltage of the GPU.
-+**
-+** 1. DVFS manager gives the target scale of full frequency, BSP must find
-+** a real frequency according to this scale and board's configure.
-+**
-+** 2. BSP should find a suitable voltage for this frequency.
-+**
-+** 3. BSP must make sure setting take effect before this function returns.
-+**
-+** INPUT:
-+**
-+** gckOS Os
-+** Pointer to a gckOS object.
-+**
-+** gckCORE Core
-+** GPU whose power is set.
-+**
-+** gctUINT8 Scale
-+** Target scale of full frequency, range is [1, 64]. 1 means 1/64 of
-+** full frequency and 64 means 64/64 of full frequency.
-+**
-+** OUTPUT:
-+**
-+** Nothing.
-+*/
-+gceSTATUS
-+gckOS_SetGPUFrequency(
-+ IN gckOS Os,
-+ IN gceCORE Core,
-+ IN gctUINT8 Scale
-+ )
-+{
-+ return gcvSTATUS_OK;
-+}
-+
- /*----------------------------------------------------------------------------*/
- /*----- Profile --------------------------------------------------------------*/
-
-@@ -7669,8 +7805,14 @@ gckOS_CreateUserSignal(
- OUT gctINT * SignalID
- )
- {
-+ gceSTATUS status;
-+ gctSIZE_T signal;
-+
- /* Create a new signal. */
-- return gckOS_CreateSignal(Os, ManualReset, (gctSIGNAL *) SignalID);
-+ status = gckOS_CreateSignal(Os, ManualReset, (gctSIGNAL *) &signal);
-+ *SignalID = (gctINT) signal;
-+
-+ return status;
- }
-
- /*******************************************************************************
-@@ -8102,7 +8244,7 @@ OnError:
-
- /*******************************************************************************
- **
--** gckOS_DestoryTimer
-+** gckOS_DestroyTimer
- **
- ** Destory a software timer.
- **
-@@ -8119,7 +8261,7 @@ OnError:
- ** Nothing.
- */
- gceSTATUS
--gckOS_DestoryTimer(
-+gckOS_DestroyTimer(
- IN gckOS Os,
- IN gctPOINTER Timer
- )
-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 577fb38..e970477 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
-@@ -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
-@@ -19,8 +19,6 @@
- *****************************************************************************/
-
-
--
--
- #ifndef __gc_hal_kernel_os_h_
- #define __gc_hal_kernel_os_h_
-
-@@ -71,10 +69,10 @@ FindMdlMap(
-
- typedef struct _DRIVER_ARGS
- {
-- gctPOINTER InputBuffer;
-- gctUINT32 InputBufferSize;
-- gctPOINTER OutputBuffer;
-- gctUINT32 OutputBufferSize;
-+ gctUINT64 InputBuffer;
-+ gctUINT64 InputBufferSize;
-+ gctUINT64 OutputBuffer;
-+ gctUINT64 OutputBufferSize;
- }
- DRIVER_ARGS;
-
---
-1.8.3.1
-
diff --git a/recipes-kernel/linux/linux-wandboard.inc b/recipes-kernel/linux/linux-wandboard.inc
index 38d3666..be95648 100644
--- a/recipes-kernel/linux/linux-wandboard.inc
+++ b/recipes-kernel/linux/linux-wandboard.inc
@@ -7,8 +7,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7"
require recipes-kernel/linux/linux-imx.inc
-INC_PR = "r1"
-
# Put a local version until we have a true SRCREV to point to
LOCALVERSION ?= "+yocto"
SCMVERSION ?= "y"
--
1.8.3.2
More information about the meta-freescale
mailing list