diff options
author | Jay Tu <jay.tu@freescale.com> | 2014-08-25 20:42:38 +0800 |
---|---|---|
committer | Jay Tu <jay.tu@freescale.com> | 2014-08-26 11:23:13 +0800 |
commit | d97f3bf0ddff331e6cfe342f1f1c779146173973 (patch) | |
tree | 696c34279c69e17fb930345d6c942ee72d3de02e /drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c | |
parent | b560fd6518b12db412ce39847c30af29d452f508 (diff) |
ENGR00327608 [GPU] Integrate latest 4.6.9p13 release kernel driverjb4.3_1.1.1-ga
Integrate GPU latest release kernel driver for Android from imx_3.0.35_4.1.0
Signed-off-by: Jay Tu <jay.tu@freescale.com>
Acked-by: Jason Liu
Diffstat (limited to 'drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c')
-rw-r--r-- | drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_video_memory.c | 58 |
1 files changed, 36 insertions, 22 deletions
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 7b83d57237a1..9d6aacbf022b 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 @@ -509,6 +509,10 @@ gckVIDMEM_Construct( node->VidMem.locked = 0; +#if gcdDYNAMIC_MAP_RESERVED_MEMORY && gcdENABLE_VG + node->VidMem.kernelVirtual = gcvNULL; +#endif + gcmkONERROR(gckOS_ZeroMemory(&node->VidMem.sharedInfo, gcmSIZEOF(gcsVIDMEM_NODE_SHARED_INFO))); #ifdef __QNXNTO__ @@ -971,10 +975,14 @@ gckVIDMEM_AllocateLinear( gctUINT32 alignment; gctINT bank, i; gctBOOL acquired = gcvFALSE; +#if gcdSMALL_BLOCK_SIZE + gctBOOL force_allocate = (Type == gcvSURF_TILE_STATUS) || (Type & gcvSURF_VG); +#endif - gcmkHEADER_ARG("Memory=0x%x Bytes=%lu Alignment=%u Type=%d", + gcmkHEADER_ARG("Memory=0x%x Bytes=%lu Alignment=%u Type=%d", Memory, Bytes, Alignment, Type); + Type &= ~gcvSURF_VG; /* Verify the arguments. */ gcmkVERIFY_OBJECT(Memory, gcvOBJ_VIDMEM); gcmkVERIFY_ARGUMENT(Bytes > 0); @@ -996,7 +1004,7 @@ gckVIDMEM_AllocateLinear( #endif #if gcdSMALL_BLOCK_SIZE - if ((Memory->freeBytes < (Memory->bytes/gcdRATIO_FOR_SMALL_MEMORY)) + if ((!force_allocate) && (Memory->freeBytes < (Memory->bytes/gcdRATIO_FOR_SMALL_MEMORY)) && (Bytes >= gcdSMALL_BLOCK_SIZE) ) { @@ -2145,34 +2153,40 @@ gckVIDMEM_Unlock( /* No flush required. */ flush = (gceKERNEL_FLUSH) 0; } - - gcmkONERROR( - gckHARDWARE_Flush(hardware, flush, gcvNULL, &requested)); - - if (requested != 0) + if(hardware) { - /* Acquire the command queue. */ - gcmkONERROR(gckCOMMAND_EnterCommit(command, gcvFALSE)); - commitEntered = gcvTRUE; + gcmkONERROR( + gckHARDWARE_Flush(hardware, flush, gcvNULL, &requested)); - gcmkONERROR(gckCOMMAND_Reserve( - command, requested, &buffer, &bufferSize - )); + if (requested != 0) + { + /* Acquire the command queue. */ + gcmkONERROR(gckCOMMAND_EnterCommit(command, gcvFALSE)); + commitEntered = gcvTRUE; - gcmkONERROR(gckHARDWARE_Flush( - hardware, flush, buffer, &bufferSize - )); + gcmkONERROR(gckCOMMAND_Reserve( + command, requested, &buffer, &bufferSize + )); + + gcmkONERROR(gckHARDWARE_Flush( + hardware, flush, buffer, &bufferSize + )); - /* Mark node as pending. */ + /* Mark node as pending. */ #ifdef __QNXNTO__ - Node->Virtual.unlockPendings[Kernel->core] = gcvTRUE; + Node->Virtual.unlockPendings[Kernel->core] = gcvTRUE; #endif - gcmkONERROR(gckCOMMAND_Execute(command, requested)); + gcmkONERROR(gckCOMMAND_Execute(command, requested)); - /* Release the command queue. */ - gcmkONERROR(gckCOMMAND_ExitCommit(command, gcvFALSE)); - commitEntered = gcvFALSE; + /* Release the command queue. */ + gcmkONERROR(gckCOMMAND_ExitCommit(command, gcvFALSE)); + commitEntered = gcvFALSE; + } + } + else + { + gckOS_Print("Hardware already is freed.\n"); } } |