From: Imre Deak Date: Tue, 27 Jul 2010 13:24:56 +0000 (+0300) Subject: gpu: pvr: add SGXScheduleProcessQueues to prepare for pvr_dev_lock X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4ab625930471a784e9d580cf3bf3499a143399d1;p=sgx.git gpu: pvr: add SGXScheduleProcessQueues to prepare for pvr_dev_lock This will be needed to do things done in SGXScheduleProcessQueuesKM locklessly when pvr_dev_lock is added. No functional change. Signed-off-by: Imre Deak --- diff --git a/pvr/sgxinit.c b/pvr/sgxinit.c index 3b78d74..32f5c52 100644 --- a/pvr/sgxinit.c +++ b/pvr/sgxinit.c @@ -706,7 +706,7 @@ void HWRecoveryResetSGX(struct PVRSRV_DEVICE_NODE *psDeviceNode) PDUMPRESUME(); - SGXScheduleProcessQueuesKM(psDeviceNode); + SGXScheduleProcessQueues(psDeviceNode); PVRSRVProcessQueues(IMG_TRUE); } @@ -916,7 +916,7 @@ static void SGX_MISRHandler(void *pvData) HWRecoveryResetSGX(psDeviceNode); if (psDeviceNode->bReProcessDeviceCommandComplete) - SGXScheduleProcessQueuesKM(psDeviceNode); + SGXScheduleProcessQueues(psDeviceNode); SGXTestActivePowerEvent(psDeviceNode); } diff --git a/pvr/sgxutils.c b/pvr/sgxutils.c index 270f737..6f49578 100644 --- a/pvr/sgxutils.c +++ b/pvr/sgxutils.c @@ -57,7 +57,7 @@ static void SGXPostActivePowerEvent(struct PVRSRV_DEVICE_NODE *psDeviceNode) l = readl(&psSGXHostCtl->ui32PowerStatus); if (l & PVRSRV_USSE_EDM_POWMAN_POWEROFF_RESTART_IMMEDIATE) - SGXScheduleProcessQueuesKM(psDeviceNode); + SGXScheduleProcessQueues(psDeviceNode); } void SGXTestActivePowerEvent(struct PVRSRV_DEVICE_NODE *psDeviceNode) @@ -276,8 +276,8 @@ enum PVRSRV_ERROR SGXScheduleCCBCommandKM( return eError; } -enum PVRSRV_ERROR SGXScheduleProcessQueuesKM(struct PVRSRV_DEVICE_NODE - *psDeviceNode) +enum PVRSRV_ERROR SGXScheduleProcessQueues(struct PVRSRV_DEVICE_NODE + *psDeviceNode) { enum PVRSRV_ERROR eError; struct PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; @@ -290,20 +290,35 @@ enum PVRSRV_ERROR SGXScheduleProcessQueuesKM(struct PVRSRV_DEVICE_NODE if ((ui32PowerStatus & PVRSRV_USSE_EDM_POWMAN_NO_WORK) != 0) return PVRSRV_OK; - sCommand.ui32Data[0] = PVRSRV_CCBFLAGS_PROCESS_QUEUESCMD; eError = - SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_COMMAND_EDM_KICK, - &sCommand, ISR_ID, 0); + PVRSRVSetDevicePowerStateKM(psDeviceNode->sDevId.ui32DeviceIndex, + PVRSRV_POWER_STATE_D0); + if (eError != PVRSRV_OK) + return eError; + + sCommand.ui32Data[0] = PVRSRV_CCBFLAGS_PROCESS_QUEUESCMD; + eError = SGXScheduleCCBCommand(psDeviceNode->pvDevice, + SGXMKIF_COMMAND_EDM_KICK, &sCommand, + ISR_ID, 0); if (eError != PVRSRV_OK) { - PVR_DPF(PVR_DBG_ERROR, "SGXScheduleProcessQueuesKM failed " - "to schedule CCB command: %lu", - eError); + PVR_DPF(PVR_DBG_ERROR, "%s failed to schedule CCB command: %lu", + __func__, eError); return PVRSRV_ERROR_GENERIC; } return PVRSRV_OK; } +enum PVRSRV_ERROR SGXScheduleProcessQueuesKM(struct PVRSRV_DEVICE_NODE + *psDeviceNode) +{ + enum PVRSRV_ERROR eError; + + eError = SGXScheduleProcessQueues(psDeviceNode); + + return eError; +} + IMG_BOOL SGXIsDevicePowered(struct PVRSRV_DEVICE_NODE *psDeviceNode) { return PVRSRVIsDevicePowered(psDeviceNode->sDevId.ui32DeviceIndex); @@ -393,7 +408,7 @@ void SGXCleanupRequest(struct PVRSRV_DEVICE_NODE *psDeviceNode, PDUMPCOMMENTWITHFLAGS(0, "Clean-up event on uKernel disabled"); #endif - SGXScheduleProcessQueuesKM(psDeviceNode); + SGXScheduleProcessQueues(psDeviceNode); #if !defined(NO_HARDWARE) if (PollForValueKM(&psSGXHostCtl->ui32ResManFlags, diff --git a/pvr/sgxutils.h b/pvr/sgxutils.h index 3f2f6d6..0a90606 100644 --- a/pvr/sgxutils.h +++ b/pvr/sgxutils.h @@ -47,6 +47,8 @@ enum PVRSRV_ERROR SGXScheduleCCBCommandKM( struct SGXMKIF_COMMAND *psCommandData, u32 ui32CallerID, u32 ui32PDumpFlags); +enum PVRSRV_ERROR SGXScheduleProcessQueues( + struct PVRSRV_DEVICE_NODE *psDeviceNode); enum PVRSRV_ERROR SGXScheduleProcessQueuesKM( struct PVRSRV_DEVICE_NODE *psDeviceNode);