diff options
Diffstat (limited to 'drivers/gpu/drm/emgd/pvr/services4/srvkm/devices/sgx/sgxkick.c')
-rw-r--r-- | drivers/gpu/drm/emgd/pvr/services4/srvkm/devices/sgx/sgxkick.c | 744 |
1 files changed, 0 insertions, 744 deletions
diff --git a/drivers/gpu/drm/emgd/pvr/services4/srvkm/devices/sgx/sgxkick.c b/drivers/gpu/drm/emgd/pvr/services4/srvkm/devices/sgx/sgxkick.c deleted file mode 100644 index 2848313c4123..000000000000 --- a/drivers/gpu/drm/emgd/pvr/services4/srvkm/devices/sgx/sgxkick.c +++ /dev/null @@ -1,744 +0,0 @@ -/********************************************************************** - * - * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful but, except - * as otherwise stated in writing, without any warranty; without even the - * implied warranty of merchantability or fitness for a particular purpose. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * The full GNU General Public License is included in this distribution in - * the file called "COPYING". - * - * Contact Information: - * Imagination Technologies Ltd. <gpl-support@imgtec.com> - * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK - * - ******************************************************************************/ - -#include <stddef.h> -#include "services_headers.h" -#include "sgxinfo.h" -#include "sgxinfokm.h" -#if defined (PDUMP) -#include "sgxapi_km.h" -#include "pdump_km.h" -#endif -#include "sgx_bridge_km.h" -#include "osfunc.h" -#include "pvr_debug.h" -#include "sgxutils.h" - -IMG_EXPORT -PVRSRV_ERROR SGXDoKickKM(IMG_HANDLE hDevHandle, SGX_CCB_KICK *psCCBKick) -{ - PVRSRV_ERROR eError; - PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; - PVRSRV_KERNEL_MEM_INFO *psCCBMemInfo = (PVRSRV_KERNEL_MEM_INFO *) psCCBKick->hCCBKernelMemInfo; - SGXMKIF_CMDTA_SHARED *psTACmd; - IMG_UINT32 i; -#if defined(SUPPORT_SGX_HWPERF) - PVRSRV_DEVICE_NODE *psDeviceNode; - PVRSRV_SGXDEV_INFO *psDevInfo; - - psDeviceNode = (PVRSRV_DEVICE_NODE *)hDevHandle; - psDevInfo = (PVRSRV_SGXDEV_INFO *)psDeviceNode->pvDevice; -#endif - -#if defined(SUPPORT_SGX_HWPERF) - if (psCCBKick->bKickRender) - { - ++psDevInfo->ui32KickTARenderCounter; - } - ++psDevInfo->ui32KickTACounter; -#endif - - if (!CCB_OFFSET_IS_VALID(SGXMKIF_CMDTA_SHARED, psCCBMemInfo, psCCBKick, ui32CCBOffset)) - { - PVR_DPF((PVR_DBG_ERROR, "SGXDoKickKM: Invalid CCB offset")); - return PVRSRV_ERROR_INVALID_PARAMS; - } - - - psTACmd = CCB_DATA_FROM_OFFSET(SGXMKIF_CMDTA_SHARED, psCCBMemInfo, psCCBKick, ui32CCBOffset); - - - if (psCCBKick->hTA3DSyncInfo) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTA3DSyncInfo; - psTACmd->sTA3DDependency.sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - - psTACmd->sTA3DDependency.ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - - if (psCCBKick->bTADependency) - { - psSyncInfo->psSyncData->ui32WriteOpsPending++; - } - } - - if (psCCBKick->hTASyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTASyncInfo; - - psTACmd->sTATQSyncReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - psTACmd->sTATQSyncWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - - psTACmd->ui32TATQSyncReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending++; - psTACmd->ui32TATQSyncWriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - - if (psCCBKick->h3DSyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->h3DSyncInfo; - - psTACmd->s3DTQSyncReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - psTACmd->s3DTQSyncWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - - psTACmd->ui323DTQSyncReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending++; - psTACmd->ui323DTQSyncWriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - - psTACmd->ui32NumTAStatusVals = psCCBKick->ui32NumTAStatusVals; - if (psCCBKick->ui32NumTAStatusVals != 0) - { - - for (i = 0; i < psCCBKick->ui32NumTAStatusVals; i++) - { -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - psTACmd->sCtlTAStatusInfo[i] = psCCBKick->asTAStatusUpdate[i].sCtlStatus; -#else - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->ahTAStatusSyncInfo[i]; - psTACmd->sCtlTAStatusInfo[i].sStatusDevAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - psTACmd->sCtlTAStatusInfo[i].ui32StatusValue = psSyncInfo->psSyncData->ui32ReadOpsPending; -#endif - } - } - - psTACmd->ui32Num3DStatusVals = psCCBKick->ui32Num3DStatusVals; - if (psCCBKick->ui32Num3DStatusVals != 0) - { - - for (i = 0; i < psCCBKick->ui32Num3DStatusVals; i++) - { -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - psTACmd->sCtl3DStatusInfo[i] = psCCBKick->as3DStatusUpdate[i].sCtlStatus; -#else - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->ah3DStatusSyncInfo[i]; - psTACmd->sCtl3DStatusInfo[i].sStatusDevAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - psTACmd->sCtl3DStatusInfo[i].ui32StatusValue = psSyncInfo->psSyncData->ui32ReadOpsPending; -#endif - } - } - - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) - - psTACmd->ui32NumTASrcSyncs = psCCBKick->ui32NumTASrcSyncs; - for (i=0; i<psCCBKick->ui32NumTASrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTASrcKernelSyncInfo[i]; - - psTACmd->asTASrcSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psTACmd->asTASrcSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - - - psTACmd->asTASrcSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending++; - - psTACmd->asTASrcSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - - psTACmd->ui32NumTADstSyncs = psCCBKick->ui32NumTADstSyncs; - for (i=0; i<psCCBKick->ui32NumTADstSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTADstKernelSyncInfo[i]; - - psTACmd->asTADstSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psTACmd->asTADstSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - - - psTACmd->asTADstSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; - - psTACmd->asTADstSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending++; - } - - psTACmd->ui32Num3DSrcSyncs = psCCBKick->ui32Num3DSrcSyncs; - for (i=0; i<psCCBKick->ui32Num3DSrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ah3DSrcKernelSyncInfo[i]; - - psTACmd->as3DSrcSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psTACmd->as3DSrcSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - - - psTACmd->as3DSrcSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending++; - - psTACmd->as3DSrcSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - } -#else - - psTACmd->ui32NumSrcSyncs = psCCBKick->ui32NumSrcSyncs; - for (i=0; i<psCCBKick->ui32NumSrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahSrcKernelSyncInfo[i]; - - psTACmd->asSrcSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psTACmd->asSrcSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - - - psTACmd->asSrcSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending++; - - psTACmd->asSrcSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; - } -#endif - - if (psCCBKick->bFirstKickOrResume && psCCBKick->ui32NumDstSyncObjects > 0) - { - PVRSRV_KERNEL_MEM_INFO *psHWDstSyncListMemInfo = - (PVRSRV_KERNEL_MEM_INFO *)psCCBKick->hKernelHWSyncListMemInfo; - SGXMKIF_HWDEVICE_SYNC_LIST *psHWDeviceSyncList = psHWDstSyncListMemInfo->pvLinAddrKM; - IMG_UINT32 ui32NumDstSyncs = psCCBKick->ui32NumDstSyncObjects; - - PVR_ASSERT(((PVRSRV_KERNEL_MEM_INFO *)psCCBKick->hKernelHWSyncListMemInfo)->ui32AllocSize >= (sizeof(SGXMKIF_HWDEVICE_SYNC_LIST) + - (sizeof(PVRSRV_DEVICE_SYNC_OBJECT) * ui32NumDstSyncs))); - - psHWDeviceSyncList->ui32NumSyncObjects = ui32NumDstSyncs; -#if defined(PDUMP) - if (PDumpIsCaptureFrameKM()) - { - PDUMPCOMMENT("HWDeviceSyncList for TACmd\r\n"); - PDUMPMEM(IMG_NULL, - psHWDstSyncListMemInfo, - 0, - sizeof(SGXMKIF_HWDEVICE_SYNC_LIST), - 0, - MAKEUNIQUETAG(psHWDstSyncListMemInfo)); - } -#endif - - for (i=0; i<ui32NumDstSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->pahDstSyncHandles[i]; - - if (psSyncInfo) - { - psHWDeviceSyncList->asSyncData[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; - psHWDeviceSyncList->asSyncData[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; - - psHWDeviceSyncList->asSyncData[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; - psHWDeviceSyncList->asSyncData[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending++; - - #if defined(PDUMP) - if (PDumpIsCaptureFrameKM()) - { - IMG_UINT32 ui32ModifiedValue; - IMG_UINT32 ui32SyncOffset = offsetof(SGXMKIF_HWDEVICE_SYNC_LIST, asSyncData) - + (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)); - IMG_UINT32 ui32WOpsOffset = ui32SyncOffset - + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal); - IMG_UINT32 ui32ROpsOffset = ui32SyncOffset - + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal); - - PDUMPCOMMENT("HWDeviceSyncObject for RT: %i\r\n", i); - - PDUMPMEM(IMG_NULL, - psHWDstSyncListMemInfo, - ui32SyncOffset, - sizeof(PVRSRV_DEVICE_SYNC_OBJECT), - 0, - MAKEUNIQUETAG(psHWDstSyncListMemInfo)); - - if ((psSyncInfo->psSyncData->ui32LastOpDumpVal == 0) && - (psSyncInfo->psSyncData->ui32LastReadOpDumpVal == 0)) - { - - PDUMPCOMMENT("Init RT ROpsComplete\r\n", i); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32ReadOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - - PDUMPCOMMENT("Init RT WOpsComplete\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32WriteOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - } - - psSyncInfo->psSyncData->ui32LastOpDumpVal++; - - ui32ModifiedValue = psSyncInfo->psSyncData->ui32LastOpDumpVal - 1; - - PDUMPCOMMENT("Modify RT %d WOpPendingVal in HWDevSyncList\r\n", i); - - PDUMPMEM(&ui32ModifiedValue, - psHWDstSyncListMemInfo, - ui32WOpsOffset, - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psHWDstSyncListMemInfo)); - - ui32ModifiedValue = 0; - PDUMPCOMMENT("Modify RT %d ROpsPendingVal in HWDevSyncList\r\n", i); - - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psHWDstSyncListMemInfo, - ui32ROpsOffset, - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psHWDstSyncListMemInfo)); - } - #endif - } - else - { - psHWDeviceSyncList->asSyncData[i].sWriteOpsCompleteDevVAddr.uiAddr = 0; - psHWDeviceSyncList->asSyncData[i].sReadOpsCompleteDevVAddr.uiAddr = 0; - - psHWDeviceSyncList->asSyncData[i].ui32ReadOpsPendingVal = 0; - psHWDeviceSyncList->asSyncData[i].ui32WriteOpsPendingVal = 0; - } - } - } - - - - - psTACmd->ui32CtrlFlags |= SGXMKIF_CMDTA_CTRLFLAGS_READY; - -#if defined(PDUMP) - if (PDumpIsCaptureFrameKM()) - { - PDUMPCOMMENT("Shared part of TA command\r\n"); - - PDUMPMEM(psTACmd, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff, - sizeof(SGXMKIF_CMDTA_SHARED), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) - for (i=0; i<psCCBKick->ui32NumTASrcSyncs; i++) - { - IMG_UINT32 ui32ModifiedValue; - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTASrcKernelSyncInfo[i]; - - if ((psSyncInfo->psSyncData->ui32LastOpDumpVal == 0) && - (psSyncInfo->psSyncData->ui32LastReadOpDumpVal == 0)) - { - - PDUMPCOMMENT("Init RT TA-SRC ROpsComplete\r\n", i); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32ReadOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - - PDUMPCOMMENT("Init RT TA-SRC WOpsComplete\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32WriteOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - } - - psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; - - ui32ModifiedValue = psSyncInfo->psSyncData->ui32LastReadOpDumpVal - 1; - - PDUMPCOMMENT("Modify TA SrcSync %d ROpsPendingVal\r\n", i); - - PDUMPMEM(&ui32ModifiedValue, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, asTASrcSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Modify TA SrcSync %d WOpPendingVal\r\n", i); - - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, asTASrcSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - } - - for (i=0; i<psCCBKick->ui32NumTADstSyncs; i++) - { - IMG_UINT32 ui32ModifiedValue; - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTADstKernelSyncInfo[i]; - - if ((psSyncInfo->psSyncData->ui32LastOpDumpVal == 0) && - (psSyncInfo->psSyncData->ui32LastReadOpDumpVal == 0)) - { - - PDUMPCOMMENT("Init RT TA-DST ROpsComplete\r\n", i); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32ReadOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - - PDUMPCOMMENT("Init RT TA-DST WOpsComplete\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32WriteOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - } - - psSyncInfo->psSyncData->ui32LastOpDumpVal++; - - ui32ModifiedValue = psSyncInfo->psSyncData->ui32LastOpDumpVal - 1; - - PDUMPCOMMENT("Modify TA DstSync %d WOpPendingVal\r\n", i); - - PDUMPMEM(&ui32ModifiedValue, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, asTADstSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Modify TA DstSync %d ROpsPendingVal\r\n", i); - - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, asTADstSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - } - - for (i=0; i<psCCBKick->ui32Num3DSrcSyncs; i++) - { - IMG_UINT32 ui32ModifiedValue; - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ah3DSrcKernelSyncInfo[i]; - - if ((psSyncInfo->psSyncData->ui32LastOpDumpVal == 0) && - (psSyncInfo->psSyncData->ui32LastReadOpDumpVal == 0)) - { - - PDUMPCOMMENT("Init RT 3D-SRC ROpsComplete\r\n", i); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32ReadOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - - PDUMPCOMMENT("Init RT 3D-SRC WOpsComplete\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32WriteOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - } - - psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; - - ui32ModifiedValue = psSyncInfo->psSyncData->ui32LastReadOpDumpVal - 1; - - PDUMPCOMMENT("Modify 3D SrcSync %d ROpsPendingVal\r\n", i); - - PDUMPMEM(&ui32ModifiedValue, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, as3DSrcSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Modify 3D SrcSync %d WOpPendingVal\r\n", i); - - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, as3DSrcSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - } -#else - for (i=0; i<psCCBKick->ui32NumSrcSyncs; i++) - { - IMG_UINT32 ui32ModifiedValue; - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahSrcKernelSyncInfo[i]; - - if ((psSyncInfo->psSyncData->ui32LastOpDumpVal == 0) && - (psSyncInfo->psSyncData->ui32LastReadOpDumpVal == 0)) - { - - PDUMPCOMMENT("Init RT ROpsComplete\r\n", i); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32ReadOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32ReadOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - - PDUMPCOMMENT("Init RT WOpsComplete\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psSyncInfo->psSyncDataMemInfoKM, - offsetof(PVRSRV_SYNC_DATA, ui32WriteOpsComplete), - sizeof(psSyncInfo->psSyncData->ui32WriteOpsComplete), - 0, - MAKEUNIQUETAG(psSyncInfo->psSyncDataMemInfoKM)); - } - - psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; - - ui32ModifiedValue = psSyncInfo->psSyncData->ui32LastReadOpDumpVal - 1; - - PDUMPCOMMENT("Modify SrcSync %d ROpsPendingVal\r\n", i); - - PDUMPMEM(&ui32ModifiedValue, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, asSrcSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - - PDUMPCOMMENT("Modify SrcSync %d WOpPendingVal\r\n", i); - - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, asSrcSyncs) + - (i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT)) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); - } -#endif - - for (i = 0; i < psCCBKick->ui32NumTAStatusVals; i++) - { -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - PDUMPCOMMENT("Modify TA status value in TA cmd\r\n"); - PDUMPMEM(&psCCBKick->asTAStatusUpdate[i].ui32LastStatusUpdateDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, sCtlTAStatusInfo[i].ui32StatusValue), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); -#else - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->ahTAStatusSyncInfo[i]; - PDUMPCOMMENT("Modify TA status value in TA cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, sCtlTAStatusInfo[i].ui32StatusValue), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); -#endif - } - - for (i = 0; i < psCCBKick->ui32Num3DStatusVals; i++) - { -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - PDUMPCOMMENT("Modify 3D status value in TA cmd\r\n"); - PDUMPMEM(&psCCBKick->as3DStatusUpdate[i].ui32LastStatusUpdateDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, sCtl3DStatusInfo[i].ui32StatusValue), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); -#else - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->ah3DStatusSyncInfo[i]; - PDUMPCOMMENT("Modify 3D status value in TA cmd\r\n"); - PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, - psCCBMemInfo, - psCCBKick->ui32CCBDumpWOff + offsetof(SGXMKIF_CMDTA_SHARED, sCtl3DStatusInfo[i].ui32StatusValue), - sizeof(IMG_UINT32), - 0, - MAKEUNIQUETAG(psCCBMemInfo)); -#endif - } - } -#endif - - eError = SGXScheduleCCBCommandKM(hDevHandle, SGXMKIF_CMD_TA, &psCCBKick->sCommand, KERNEL_ID, 0); - if (eError == PVRSRV_ERROR_RETRY) - { - if (psCCBKick->bFirstKickOrResume && psCCBKick->ui32NumDstSyncObjects > 0) - { - for (i=0; i < psCCBKick->ui32NumDstSyncObjects; i++) - { - - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->pahDstSyncHandles[i]; - - if (psSyncInfo) - { - psSyncInfo->psSyncData->ui32WriteOpsPending--; -#if defined(PDUMP) - if (PDumpIsCaptureFrameKM()) - { - psSyncInfo->psSyncData->ui32LastOpDumpVal--; - } -#endif - } - } - } - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) - for (i=0; i<psCCBKick->ui32NumTASrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTASrcKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsPending--; - } - for (i=0; i<psCCBKick->ui32NumTADstSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTADstKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32WriteOpsPending--; - } - for (i=0; i<psCCBKick->ui32Num3DSrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ah3DSrcKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsPending--; - } -#else - for (i=0; i<psCCBKick->ui32NumSrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahSrcKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsPending--; - } -#endif - - return eError; - } - else if (PVRSRV_OK != eError) - { - PVR_DPF((PVR_DBG_ERROR, "SGXDoKickKM: SGXScheduleCCBCommandKM failed.")); - return eError; - } - - -#if defined(NO_HARDWARE) - - - - if (psCCBKick->hTA3DSyncInfo) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTA3DSyncInfo; - - if (psCCBKick->bTADependency) - { - psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - } - - if (psCCBKick->hTASyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTASyncInfo; - - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - } - - if (psCCBKick->h3DSyncInfo != IMG_NULL) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->h3DSyncInfo; - - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - } - - - for (i = 0; i < psCCBKick->ui32NumTAStatusVals; i++) - { -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = (PVRSRV_KERNEL_MEM_INFO*)psCCBKick->asTAStatusUpdate[i].hKernelMemInfo; - - *(IMG_UINT32*)((IMG_UINTPTR_T)psKernelMemInfo->pvLinAddrKM - + (psTACmd->sCtlTAStatusInfo[i].sStatusDevAddr.uiAddr - - psKernelMemInfo->sDevVAddr.uiAddr)) = psTACmd->sCtlTAStatusInfo[i].ui32StatusValue; -#else - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->ahTAStatusSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psTACmd->sCtlTAStatusInfo[i].ui32StatusValue; -#endif - } - -#if defined(SUPPORT_SGX_GENERALISED_SYNCOBJECTS) - - for (i=0; i<psCCBKick->ui32NumTASrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTASrcKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - } - for (i=0; i<psCCBKick->ui32NumTADstSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahTADstKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; - } - for (i=0; i<psCCBKick->ui32Num3DSrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ah3DSrcKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - } -#else - - for (i=0; i<psCCBKick->ui32NumSrcSyncs; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *) psCCBKick->ahSrcKernelSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; - } -#endif - - if (psCCBKick->bTerminateOrAbort) - { - if (psCCBKick->ui32NumDstSyncObjects > 0) - { - PVRSRV_KERNEL_MEM_INFO *psHWDstSyncListMemInfo = - (PVRSRV_KERNEL_MEM_INFO *)psCCBKick->hKernelHWSyncListMemInfo; - SGXMKIF_HWDEVICE_SYNC_LIST *psHWDeviceSyncList = psHWDstSyncListMemInfo->pvLinAddrKM; - - for (i=0; i<psCCBKick->ui32NumDstSyncObjects; i++) - { - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->pahDstSyncHandles[i]; - if (psSyncInfo) - psSyncInfo->psSyncData->ui32WriteOpsComplete = psHWDeviceSyncList->asSyncData[i].ui32WriteOpsPendingVal+1; - } - } - - - for (i = 0; i < psCCBKick->ui32Num3DStatusVals; i++) - { -#if defined(SUPPORT_SGX_NEW_STATUS_VALS) - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = (PVRSRV_KERNEL_MEM_INFO*)psCCBKick->as3DStatusUpdate[i].hKernelMemInfo; - - *(IMG_UINT32*)((IMG_UINTPTR_T)psKernelMemInfo->pvLinAddrKM - + (psTACmd->sCtl3DStatusInfo[i].sStatusDevAddr.uiAddr - - psKernelMemInfo->sDevVAddr.uiAddr)) = psTACmd->sCtl3DStatusInfo[i].ui32StatusValue; -#else - psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->ah3DStatusSyncInfo[i]; - psSyncInfo->psSyncData->ui32ReadOpsComplete = psTACmd->sCtl3DStatusInfo[i].ui32StatusValue; -#endif - } - } -#endif - - return eError; -} - |