diff options
author | wu guoxing <b39297@freescale.com> | 2011-12-27 13:43:55 +0800 |
---|---|---|
committer | Jason Liu <r64343@freescale.com> | 2012-07-20 13:19:31 +0800 |
commit | de71b9e4283e76bbfc548bf1b1f9d0e344c541ee (patch) | |
tree | 765ae271bcfe11e72ad9b5ef51eb8d91e8bb6eeb /drivers/mxc/gpu-viv | |
parent | 5c377c309b531ec5790e9f099ef08f5475c08a09 (diff) |
ENGR00170946:gpu:fix gpu kernel module can not be removed issue
fix gpu kernel module can not be removed issue
Signed-off-by: Wu Guoxing <b39297@freescale.com>
Acked-by: Lily Zhang
Diffstat (limited to 'drivers/mxc/gpu-viv')
-rw-r--r-- | drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c | 25 | ||||
-rw-r--r-- | drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h | 2 |
2 files changed, 11 insertions, 16 deletions
diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c index a9aec1484508..296b333cd763 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 @@ -139,21 +139,16 @@ _TimeIdleThread( /* Cast the object. */ gckVGHARDWARE hardware = (gckVGHARDWARE) ThreadParameter; - gcmkVERIFY_OK(gckOS_AcquireSemaphore( - hardware->os, - hardware->idleSemaphore)); - while(gcvTRUE) { + gcmkVERIFY_OK(gckOS_WaitSignal(hardware->os, + hardware->idleSignal, gcvINFINITE)); + if (hardware->killThread) { break; } - gcmkVERIFY_OK(gckOS_AcquireSemaphore( - hardware->os, - hardware->idleSemaphore)); - do { gcmkVERIFY_OK(gckOS_GetTicks(¤tTime)); @@ -245,7 +240,7 @@ gckVGHARDWARE_Construct( hardware->chipMinorFeatures2 = chipMinorFeatures2; hardware->powerMutex = gcvNULL; - hardware->idleSemaphore = gcvNULL; + hardware->idleSignal = gcvNULL; hardware->chipPowerState = gcvPOWER_OFF; hardware->chipPowerStateGlobal = gcvPOWER_ON; hardware->clockState = gcvTRUE; @@ -270,8 +265,7 @@ gckVGHARDWARE_Construct( gcmkVERIFY_OK(gckVGHARDWARE_SetFastClear(hardware, -1)); gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex)); - - gcmkERR_BREAK(gckOS_CreateSemaphore(Os, &hardware->idleSemaphore)); + gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvTRUE, &hardware->idleSignal)); #if gcdPOWER_MANAGEMENT gcmkERR_BREAK(gckOS_StartThread( hardware->os, @@ -326,6 +320,7 @@ gckVGHARDWARE_Destroy( #if gcdPOWER_MANAGEMENT Hardware->killThread = gcvTRUE; + gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE)); gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread)); #endif /* Mark the object as unknown. */ @@ -337,10 +332,10 @@ gckVGHARDWARE_Destroy( Hardware->os, Hardware->powerMutex)); } - if (Hardware->idleSemaphore != gcvNULL) + if (Hardware->idleSignal != gcvNULL) { - gcmkVERIFY_OK(gckOS_DestroySemaphore( - Hardware->os, Hardware->idleSemaphore)); + gcmkVERIFY_OK(gckOS_DestroySignal( + Hardware->os, Hardware->idleSignal)); } /* Free the object. */ @@ -1790,7 +1785,7 @@ gckVGHARDWARE_SetPowerManagementState( if (State == gcvPOWER_IDLE) { - gcmkONERROR(gckOS_ReleaseSemaphore(os, Hardware->idleSemaphore)); + gcmkVERIFY_OK(gckOS_Signal(os, Hardware->idleSignal, gcvTRUE)); } /* Reset power off time */ gcmkVERIFY_OK(gckOS_GetTicks(¤tTime)); 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 a4ec3eb05afc..cff634f8bbec 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 @@ -57,7 +57,7 @@ struct _gckVGHARDWARE gctBOOL clockState; gctBOOL powerState; gctPOINTER powerMutex; - gctSEMAPHORE idleSemaphore; + gctSIGNAL idleSignal; gctUINT32 powerProcess; gctUINT32 powerThread; gceCHIPPOWERSTATE chipPowerState; |