#include "pvr_debug.h"
#include "sgxutils.h"
#include "perproc.h"
+#include "pvr_trace_cmd.h"
enum PVRSRV_ERROR SGXDoKickKM(void *hDevHandle, struct SGX_CCB_KICK *psCCBKick,
struct PVRSRV_PER_PROCESS_DATA *proc)
u32 i;
struct PVRSRV_DEVICE_NODE *psDeviceNode;
struct PVRSRV_SGXDEV_INFO *psDevInfo;
+ struct pvr_trcmd_sgxkick *ktrace;
+ int trcmd_type;
psDeviceNode = (struct PVRSRV_DEVICE_NODE *)hDevHandle;
psDevInfo = (struct PVRSRV_SGXDEV_INFO *)psDeviceNode->pvDevice;
CCB_DATA_FROM_OFFSET(struct SGXMKIF_CMDTA_SHARED, psCCBMemInfo,
psCCBKick, ui32CCBOffset);
+ trcmd_type = psCCBKick->bFirstKickOrResume ?
+ PVR_TRCMD_SGX_FIRSTKICK : PVR_TRCMD_SGX_KICK;
+ pvr_trcmd_lock();
+ ktrace = pvr_trcmd_alloc(trcmd_type, proc->ui32PID, proc->name,
+ sizeof(*ktrace));
+
if (psCCBKick->hTA3DSyncInfo) {
psSyncInfo =
(struct PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->hTA3DSyncInfo;
if (psCCBKick->bTADependency)
psSyncInfo->psSyncData->ui32WriteOpsPending++;
+
+ pvr_trcmd_set_syn(&ktrace->ta3d_syn, psSyncInfo);
+ } else {
+ pvr_trcmd_clear_syn(&ktrace->ta3d_syn);
}
if (psCCBKick->hTASyncInfo != NULL) {
psSyncInfo->psSyncData->ui32ReadOpsPending++;
psTACmd->ui32TATQSyncWriteOpsPendingVal =
psSyncInfo->psSyncData->ui32WriteOpsPending;
+
+ pvr_trcmd_set_syn(&ktrace->tatq_syn, psSyncInfo);
+ } else {
+ pvr_trcmd_clear_syn(&ktrace->tatq_syn);
}
if (psCCBKick->h3DSyncInfo != NULL) {
psSyncInfo->psSyncData->ui32ReadOpsPending++;
psTACmd->ui323DTQSyncWriteOpsPendingVal =
psSyncInfo->psSyncData->ui32WriteOpsPending;
+
+ pvr_trcmd_set_syn(&ktrace->_3dtq_syn, psSyncInfo);
+ } else {
+ pvr_trcmd_clear_syn(&ktrace->_3dtq_syn);
}
psTACmd->ui32NumTAStatusVals = psCCBKick->ui32NumTAStatusVals;
}
psTACmd->ui32NumSrcSyncs = psCCBKick->ui32NumSrcSyncs;
- for (i = 0; i < psCCBKick->ui32NumSrcSyncs; i++) {
+ for (i = 0; i < SGX_MAX_SRC_SYNCS; i++) {
+ if (i >= psCCBKick->ui32NumSrcSyncs) {
+ pvr_trcmd_clear_syn(&ktrace->src_syn[i]);
+ continue;
+ }
+
psSyncInfo =
(struct PVRSRV_KERNEL_SYNC_INFO *)psCCBKick->
ahSrcKernelSyncInfo[i];
psTACmd->asSrcSyncs[i].ui32WriteOpsPendingVal =
psSyncInfo->psSyncData->ui32WriteOpsPending;
+ pvr_trcmd_set_syn(&ktrace->src_syn[i], psSyncInfo);
}
if (psCCBKick->bFirstKickOrResume &&
psSyncInfo->psSyncData->
ui32WriteOpsPending++;
+ pvr_trcmd_set_syn(&ktrace->dst_syn, psSyncInfo);
+
#if defined(PDUMP)
if (PDumpIsCaptureFrameKM()) {
u32 ui32ModifiedValue;
ui32ReadOpsPendingVal = 0;
psHWDeviceSyncList->asSyncData[i].
ui32WriteOpsPendingVal = 0;
+
+ pvr_trcmd_clear_syn(&ktrace->dst_syn);
}
+ } else {
+ pvr_trcmd_clear_syn(&ktrace->dst_syn);
}
#if defined(PDUMP)
if (PDumpIsCaptureFrameKM()) {
}
#endif
+ pvr_trcmd_set_data(&ktrace->ctx, psCCBKick->sCommand.ui32Data[1]);
+ pvr_trcmd_unlock();
+
/* to aid in determining the next power down delay */
sgx_mark_new_command(psDeviceNode);
#include "pvr_debug.h"
#include "sgxutils.h"
#include "perproc.h"
+#include "pvr_trace_cmd.h"
enum PVRSRV_ERROR SGXSubmitTransferKM(void *hDevHandle,
struct PVRSRV_TRANSFER_SGX_KICK *psKick,
struct SGXMKIF_COMMAND sCommand = { 0 };
struct SGXMKIF_TRANSFERCMD_SHARED *psSharedTransferCmd;
struct PVRSRV_KERNEL_SYNC_INFO *psSyncInfo;
+ struct pvr_trcmd_sgxtransfer *ttrace;
enum PVRSRV_ERROR eError;
if (!CCB_OFFSET_IS_VALID
CCB_DATA_FROM_OFFSET(struct SGXMKIF_TRANSFERCMD_SHARED,
psCCBMemInfo, psKick, ui32SharedCmdCCBOffset);
+ pvr_trcmd_lock();
+ ttrace = pvr_trcmd_alloc(PVR_TRCMD_TFER_KICK, proc->ui32PID, proc->name,
+ sizeof(*ttrace));
+
if (psKick->hTASyncInfo != NULL) {
psSyncInfo = (struct PVRSRV_KERNEL_SYNC_INFO *)
psKick->hTASyncInfo;
psSyncInfo->sWriteOpsCompleteDevVAddr;
psSharedTransferCmd->sTASyncReadOpsCompleteDevVAddr =
psSyncInfo->sReadOpsCompleteDevVAddr;
+
+ pvr_trcmd_set_syn(&ttrace->ta_syn, psSyncInfo);
} else {
psSharedTransferCmd->sTASyncWriteOpsCompleteDevVAddr.uiAddr = 0;
psSharedTransferCmd->sTASyncReadOpsCompleteDevVAddr.uiAddr = 0;
+
+ pvr_trcmd_clear_syn(&ttrace->ta_syn);
}
if (psKick->h3DSyncInfo != NULL) {
psSyncInfo->sWriteOpsCompleteDevVAddr;
psSharedTransferCmd->s3DSyncReadOpsCompleteDevVAddr =
psSyncInfo->sReadOpsCompleteDevVAddr;
+
+ pvr_trcmd_set_syn(&ttrace->_3d_syn, psSyncInfo);
} else {
psSharedTransferCmd->s3DSyncWriteOpsCompleteDevVAddr.uiAddr = 0;
psSharedTransferCmd->s3DSyncReadOpsCompleteDevVAddr.uiAddr = 0;
+
+ pvr_trcmd_clear_syn(&ttrace->_3d_syn);
}
if ((psKick->ui32Flags & SGXMKIF_TQFLAGS_KEEPPENDING) == 0UL) {
psKick->ahSrcSyncInfo[0];
psSyncInfo->psSyncData->ui32ReadOpsPending++;
+ pvr_trcmd_set_syn(&ttrace->src_syn, psSyncInfo);
+ } else {
+ pvr_trcmd_clear_syn(&ttrace->src_syn);
}
+
if (psKick->ui32NumDstSync > 0) {
psSyncInfo =
(struct PVRSRV_KERNEL_SYNC_INFO *)psKick->
ahDstSyncInfo[0];
psSyncInfo->psSyncData->ui32WriteOpsPending++;
+
+ pvr_trcmd_set_syn(&ttrace->dst_syn, psSyncInfo);
+ } else {
+ pvr_trcmd_clear_syn(&ttrace->dst_syn);
}
+ } else {
+ pvr_trcmd_clear_syn(&ttrace->src_syn);
+ pvr_trcmd_clear_syn(&ttrace->dst_syn);
}
if (psKick->ui32NumDstSync > 1 || psKick->ui32NumSrcSync > 1) {
sCommand.ui32Data[0] = PVRSRV_CCBFLAGS_TRANSFERCMD;
sCommand.ui32Data[1] = psKick->sHWTransferContextDevVAddr.uiAddr;
+ pvr_trcmd_set_data(&ttrace->ctx,
+ psKick->sHWTransferContextDevVAddr.uiAddr);
+ pvr_trcmd_unlock();
+
/* To aid in determining the next power down delay */
sgx_mark_new_command(hDevHandle);