/* Global driver lock protecting all HW and SW state tracking objects. */
DEFINE_MUTEX(gPVRSRVLock);
-static int pvr_dvfs_active;
-static DECLARE_WAIT_QUEUE_HEAD(pvr_dvfs_wq);
+static int pvr_dev_locked;
+static DECLARE_WAIT_QUEUE_HEAD(pvr_dev_wq);
int pvr_disabled;
/*
* again acquired at 4. To avoid the warning use a wait queue based approach
* so that we can unlock B before 3.
*/
-void pvr_dvfs_lock(void)
+void pvr_dev_lock(void)
{
- while (cmpxchg(&pvr_dvfs_active, 0, 1)) {
- DEFINE_WAIT(pvr_dvfs_wait);
- prepare_to_wait(&pvr_dvfs_wq, &pvr_dvfs_wait,
+ while (cmpxchg(&pvr_dev_locked, 0, 1)) {
+ DEFINE_WAIT(pvr_dev_wait);
+ prepare_to_wait(&pvr_dev_wq, &pvr_dev_wait,
TASK_UNINTERRUPTIBLE);
- if (pvr_dvfs_active)
+ if (pvr_dev_locked)
schedule();
- finish_wait(&pvr_dvfs_wq, &pvr_dvfs_wait);
+ finish_wait(&pvr_dev_wq, &pvr_dev_wait);
}
}
-void pvr_dvfs_unlock(void)
+void pvr_dev_unlock(void)
{
- BUG_ON(!pvr_dvfs_active);
- pvr_dvfs_active = 0;
- wake_up(&pvr_dvfs_wq);
+ BUG_ON(!pvr_dev_locked);
+ pvr_dev_locked = 0;
+ wake_up(&pvr_dev_wq);
}
#if defined(DEBUG_BRIDGE_KM)
PVR_ASSERT(psDeviceNode->pfnDeviceISR == SGX_ISRHandler);
- pvr_dvfs_lock();
+ pvr_dev_lock();
l = readl(&psDevInfo->psSGXHostCtl->ui32PowerStatus);
l |= PVRSRV_USSE_EDM_POWMAN_NO_WORK;
writel(l, &psDevInfo->psSGXHostCtl->ui32PowerStatus);
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
eDefaultPowerState = PVRSRV_POWER_STATE_D3;
eError = PVRSRVRegisterPowerDevice(psDeviceNode->sDevId.ui32DeviceIndex,
BUG_ON(!pvr_is_locked());
- pvr_dvfs_lock();
+ pvr_dev_lock();
+
l = readl(&psSGXHostCtl->ui32InterruptClearFlags);
l |= PVRSRV_USSE_EDM_INTERRUPT_HWR;
writel(l, &psSGXHostCtl->ui32InterruptClearFlags);
pvr_disable();
PDUMPRESUME();
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
return;
}
SGXScheduleProcessQueues(psDeviceNode);
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
PVRSRVProcessQueues(IMG_TRUE);
}
if (bPoweredDown) {
ui32LockupCounter = 0;
} else {
- pvr_dvfs_lock();
+ pvr_dev_lock();
ui32CurrentEDMTasks = OSReadHWReg(psDevInfo->pvRegsBaseKM,
psDevInfo->ui32EDMTaskReg0);
if (psDevInfo->ui32EDMTaskReg1 != 0)
ui32EDMTasks = ui32CurrentEDMTasks;
ui32NumResets = psDevInfo->ui32NumResets;
}
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
}
bLockup |= cmpxchg(&sgx_reset_forced, 1, 0);
psDevInfo->psSGXHostCtl;
u32 l;
- pvr_dvfs_lock();
+ pvr_dev_lock();
l = readl(&psSGXHostCtl->ui32HostDetectedLockups);
l++;
writel(l, &psSGXHostCtl->ui32HostDetectedLockups);
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
HWRecoveryResetSGX(psDeviceNode);
}
dev_idx = psDeviceNode->sDevId.ui32DeviceIndex;
- pvr_dvfs_lock();
+ pvr_dev_lock();
err = PVRSRVSetDevicePowerStateKM(dev_idx, PVRSRV_POWER_STATE_D0);
BUG_ON(err != PVRSRV_OK);
l1 = readl(&psSGXHostCtl->ui32InterruptFlags);
l2 = readl(&psSGXHostCtl->ui32InterruptClearFlags);
+
if ((l1 & PVRSRV_USSE_EDM_INTERRUPT_HWR) &&
!(l2 & PVRSRV_USSE_EDM_INTERRUPT_HWR))
HWRecoveryResetSGX(psDeviceNode);
SGXTestActivePowerEvent(psDeviceNode);
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
}
enum PVRSRV_ERROR SGXRegisterDevice(struct PVRSRV_DEVICE_NODE *psDeviceNode)
return PVRSRV_ERROR_INVALID_PARAMS;
}
- pvr_dvfs_lock();
+ pvr_dev_lock();
ui32MatchingFlags = readl(&psDevInfo->
psSGXHostCtl->ui32HWPerfFlags);
ui32MatchingFlags &=
writel(psMiscInfo->uData.ui32NewHWPerfStatus,
&psDevInfo->psSGXHostCtl->ui32HWPerfFlags);
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
#if defined(PDUMP)
PDUMPCOMMENTWITHFLAGS(PDUMP_FLAGS_CONTINUOUS,
"SGX ukernel HWPerf status %u\n",
psHWPerfCB->ui32OrdinalGRAPHICS = 0xffffffffUL;
- pvr_dvfs_lock();;
+ pvr_dev_lock();;
l = readl(&psDevInfo->psSGXHostCtl->ui32HWPerfFlags);
l |= PVRSRV_SGX_HWPERF_GRAPHICS_ON;
writel(l, &psDevInfo->psSGXHostCtl->ui32HWPerfFlags);
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
return PVRSRV_OK;
}
case SGX_MISC_INFO_REQUEST_HWPERF_CB_OFF:
{
- pvr_dvfs_lock();
+ pvr_dev_lock();
writel(0, &psDevInfo->psSGXHostCtl->ui32HWPerfFlags);
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
return PVRSRV_OK;
}
*pbActive = bPowered;
- pvr_dvfs_lock();
+ pvr_dev_lock();
{
struct PVRSRV_SGXDEV_DIFF_INFO sNew,
SGXTestActivePowerEvent(psDeviceNode);
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
return PVRSRV_OK;
}
PDUMPSUSPEND();
- pvr_dvfs_lock();
+ pvr_dev_lock();
eError =
PVRSRVSetDevicePowerStateKM(psDeviceNode->sDevId.ui32DeviceIndex,
} else {
PVR_DPF(PVR_DBG_ERROR, "%s: can't power on device (%d)",
__func__, eError);
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
return eError;
}
if (ui32CallerID != ISR_ID)
SGXTestActivePowerEvent(psDeviceNode);
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
return eError;
}
{
enum PVRSRV_ERROR eError;
- pvr_dvfs_lock();
+ pvr_dev_lock();
eError = SGXScheduleProcessQueues(psDeviceNode);
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
return eError;
}
#endif
u32 l;
- pvr_dvfs_lock();
+ pvr_dev_lock();
if (readl(&psSGXHostCtl->ui32PowerStatus) &
PVRSRV_USSE_EDM_POWMAN_NO_WORK) {
;
sizeof(u32), 0, hUniqueTag);
#endif
}
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
}
struct SGX_HW_RENDER_CONTEXT_CLEANUP {
cnd->rate);
if (CLK_PRE_RATE_CHANGE == event) {
- pvr_dvfs_lock();
+ pvr_dev_lock();
PVR_TRACE("vdd2_pre_post_func: CLK_PRE_RATE_CHANGE event");
vdd2_pre_func(n, event, ptr);
} else if (CLK_POST_RATE_CHANGE == event) {
PVR_TRACE("vdd2_pre_post_func: CLK_POST_RATE_CHANGE event");
vdd2_post_func(n, event, ptr);
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
} else if (CLK_ABORT_RATE_CHANGE == event) {
PVR_TRACE("vdd2_pre_post_func: CLK_ABORT_RATE_CHANGE event");
- pvr_dvfs_unlock();
+ pvr_dev_unlock();
} else {
printk(KERN_ERR "vdd2_pre_post_func: unexpected event (%lu)\n",
event);