diff options
author | Gary King <gking@nvidia.com> | 2010-02-16 18:58:52 -0800 |
---|---|---|
committer | Gerrit Code Review <gerrit2@git-master-01.nvidia.com> | 2010-02-16 18:58:52 -0800 |
commit | 394a0d7ec6c9ea1d7d19f2e8e81b055fdfd8cf9e (patch) | |
tree | a90be2f6d27881dc47df7c255cbf197d00c17fb7 /arch/arm/mach-tegra/nvrm/core | |
parent | 67ce6dc0dabf87dc03f0b95789a7c51adb5f186b (diff) | |
parent | 06c6c96baa909c9ccf1102c5bda0cb33b8749190 (diff) |
Merge "tegra: Added spinlock primitives to NvOs." into android-tegra-2.6.29
Diffstat (limited to 'arch/arm/mach-tegra/nvrm/core')
-rw-r--r-- | arch/arm/mach-tegra/nvrm/core/ap15/ap15rm_power_oalintf.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/arch/arm/mach-tegra/nvrm/core/ap15/ap15rm_power_oalintf.c b/arch/arm/mach-tegra/nvrm/core/ap15/ap15rm_power_oalintf.c index b5518380f259..e26d5b6e8376 100644 --- a/arch/arm/mach-tegra/nvrm/core/ap15/ap15rm_power_oalintf.c +++ b/arch/arm/mach-tegra/nvrm/core/ap15/ap15rm_power_oalintf.c @@ -66,12 +66,12 @@ {\ NvU32 RegValue; \ NvU32 RegOffset = APBDEV_PMC_SCRATCH0_0; \ - NvOsMutexLock(s_hPmcScratchMutex); \ + NvOsSpinMutexLock(s_hPmcScratchMutex); \ RegValue = NV_REGR(rm, NvRmModuleID_Pmif, 0, RegOffset); \ RegValue = NV_FLD_SET_DRF_NUM(\ APBDEV_PMC, SCRATCH0, FieldName, FieldValue, RegValue); \ NV_REGW(rm, NvRmModuleID_Pmif, 0, RegOffset, RegValue); \ - NvOsMutexUnlock(s_hPmcScratchMutex); \ + NvOsSpinMutexUnlock(s_hPmcScratchMutex); \ }\ } while (0) @@ -82,7 +82,7 @@ /*****************************************************************************/ // Mutex for thread-safe access to PMC scratch fields -static NvOsMutexHandle s_hPmcScratchMutex = NULL; +static NvOsSpinMutexHandle s_hPmcScratchMutex = NULL; // Pointer to LP2 Time storage static NvUPtr s_pLp2Time = 0; @@ -95,7 +95,7 @@ NvError NvRmPrivOalIntfInit(NvRmDeviceHandle hRmDeviceHandle) // Create PMC scratch register access mutex s_pLp2Time = 0; s_hPmcScratchMutex = NULL; - NV_CHECK_ERROR_CLEANUP(NvOsMutexCreate(&s_hPmcScratchMutex)); + NV_CHECK_ERROR_CLEANUP(NvOsSpinMutexCreate(&s_hPmcScratchMutex)); // Clear DFS flags; other fields initialized by OAL and preserved by RM SET_POWER_FLD_AP15(hRmDeviceHandle, RM_DFS_FLAG, 0); @@ -108,7 +108,7 @@ fail: void NvRmPrivOalIntfDeinit(NvRmDeviceHandle hRmDeviceHandle) { - NvOsMutexDestroy(s_hPmcScratchMutex); + NvOsSpinMutexDestroy(s_hPmcScratchMutex); s_hPmcScratchMutex = NULL; } @@ -169,7 +169,7 @@ NvRmPrivUpdateDfsPauseFlag( NvU32 mask = (NvRmDfsStatusFlags_Pause << NV_FIELD_SHIFT(APBDEV_PMC_SCRATCH0_0_RM_DFS_FLAG_RANGE)); - NvOsMutexLock(s_hPmcScratchMutex); + NvOsSpinMutexLock(s_hPmcScratchMutex); RegValue = NV_REGR(hRmDeviceHandle, NvRmModuleID_Pmif, 0, RegOffset); if (Pause) @@ -178,7 +178,7 @@ NvRmPrivUpdateDfsPauseFlag( RegValue &= ~mask; NV_REGW(hRmDeviceHandle, NvRmModuleID_Pmif, 0, RegOffset, RegValue); - NvOsMutexUnlock(s_hPmcScratchMutex); + NvOsSpinMutexUnlock(s_hPmcScratchMutex); } } @@ -202,7 +202,7 @@ NvRmPrivPllRefUpdate( mask = (pPllRef->StopFlag << NV_FIELD_SHIFT(APBDEV_PMC_SCRATCH0_0_RM_DFS_FLAG_RANGE)); - NvOsMutexLock(s_hPmcScratchMutex); + NvOsSpinMutexLock(s_hPmcScratchMutex); if (Increment) { @@ -217,15 +217,19 @@ NvRmPrivPllRefUpdate( else { NV_ASSERT(pPllRef->ReferenceCnt); - pPllRef->ReferenceCnt--; - if (pPllRef->ReferenceCnt == 0) + if (pPllRef->ReferenceCnt) { - RegValue = mask | - (NV_REGR(hRmDeviceHandle, NvRmModuleID_Pmif, 0, RegOffset)); - NV_REGW(hRmDeviceHandle, NvRmModuleID_Pmif, 0, RegOffset, RegValue); + pPllRef->ReferenceCnt--; + if (pPllRef->ReferenceCnt == 0) + { + RegValue = mask | + (NV_REGR(hRmDeviceHandle, NvRmModuleID_Pmif, 0, RegOffset)); + NV_REGW( + hRmDeviceHandle, NvRmModuleID_Pmif, 0, RegOffset, RegValue); + } } } - NvOsMutexUnlock(s_hPmcScratchMutex); + NvOsSpinMutexUnlock(s_hPmcScratchMutex); #endif } @@ -264,7 +268,7 @@ void NvRmPrivAp15IoPowerDetectReset(NvRmDeviceHandle hRmDeviceHandle) { NvU32 RegValue; NvU32 RegOffset = APBDEV_PMC_SCRATCH0_0; - NvOsMutexLock(s_hPmcScratchMutex); + NvOsSpinMutexLock(s_hPmcScratchMutex); RegValue = NV_REGR(hRmDeviceHandle, NvRmModuleID_Pmif, 0, RegOffset); @@ -277,7 +281,7 @@ void NvRmPrivAp15IoPowerDetectReset(NvRmDeviceHandle hRmDeviceHandle) NV_REGW(hRmDeviceHandle, NvRmModuleID_Pmif, 0, RegOffset, RegValue); - NvOsMutexUnlock(s_hPmcScratchMutex); + NvOsSpinMutexUnlock(s_hPmcScratchMutex); } } |