diff options
author | wu guoxing <b39297@freescale.com> | 2011-12-27 13:43:55 +0800 |
---|---|---|
committer | Jason Liu <r64343@freescale.com> | 2012-01-09 21:12:59 +0800 |
commit | 361fbcd723a38cb613815e7ef66e84e798f9326e (patch) | |
tree | f828a7839a7ee1dd38eeabf94b101a8006599c83 /drivers | |
parent | 04105750b3e05e29c325727d39e30cffeb140982 (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')
-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; |