gpu: pvr: add SGXScheduleProcessQueues to prepare for pvr_dev_lock
authorImre Deak <imre.deak@nokia.com>
Tue, 27 Jul 2010 13:24:56 +0000 (16:24 +0300)
committerGrazvydas Ignotas <notasas@gmail.com>
Sun, 20 May 2012 18:09:41 +0000 (21:09 +0300)
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 <imre.deak@nokia.com>
pvr/sgxinit.c
pvr/sgxutils.c
pvr/sgxutils.h

index 3b78d74..32f5c52 100644 (file)
@@ -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);
 }
index 270f737..6f49578 100644 (file)
@@ -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,
index 3f2f6d6..0a90606 100644 (file)
@@ -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);