aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/pvr/sgx/sgxtransfer.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/pvr/sgx/sgxtransfer.c')
-rw-r--r--drivers/gpu/pvr/sgx/sgxtransfer.c151
1 files changed, 76 insertions, 75 deletions
diff --git a/drivers/gpu/pvr/sgx/sgxtransfer.c b/drivers/gpu/pvr/sgx/sgxtransfer.c
index d0d09bf8237..f125a3f26a3 100644
--- a/drivers/gpu/pvr/sgx/sgxtransfer.c
+++ b/drivers/gpu/pvr/sgx/sgxtransfer.c
@@ -61,6 +61,8 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
61 IMG_UINT32 ui32RealSrcSyncNum = 0; 61 IMG_UINT32 ui32RealSrcSyncNum = 0;
62 IMG_BOOL abDstSyncEnable[SGX_MAX_TRANSFER_SYNC_OPS]; 62 IMG_BOOL abDstSyncEnable[SGX_MAX_TRANSFER_SYNC_OPS];
63 IMG_UINT32 ui32RealDstSyncNum = 0; 63 IMG_UINT32 ui32RealDstSyncNum = 0;
64
65
64#if defined(PDUMP) 66#if defined(PDUMP)
65 IMG_BOOL bPersistentProcess = IMG_FALSE; 67 IMG_BOOL bPersistentProcess = IMG_FALSE;
66 68
@@ -76,6 +78,7 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
76 hDevMemContext = psKick->hDevMemContext; 78 hDevMemContext = psKick->hDevMemContext;
77#endif 79#endif
78 PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_FUNCTION_ENTER, TRANSFER_TOKEN_SUBMIT); 80 PVR_TTRACE(PVRSRV_TRACE_GROUP_TRANSFER, PVRSRV_TRACE_CLASS_FUNCTION_ENTER, TRANSFER_TOKEN_SUBMIT);
81
79 for (loop = 0; loop < SGX_MAX_TRANSFER_SYNC_OPS; loop++) 82 for (loop = 0; loop < SGX_MAX_TRANSFER_SYNC_OPS; loop++)
80 { 83 {
81 abSrcSyncEnable[loop] = IMG_TRUE; 84 abSrcSyncEnable[loop] = IMG_TRUE;
@@ -189,6 +192,7 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
189 192
190 psSharedTransferCmd->ui32NumSrcSyncs = ui32RealSrcSyncNum; 193 psSharedTransferCmd->ui32NumSrcSyncs = ui32RealSrcSyncNum;
191 psSharedTransferCmd->ui32NumDstSyncs = ui32RealDstSyncNum; 194 psSharedTransferCmd->ui32NumDstSyncs = ui32RealDstSyncNum;
195
192 if ((psKick->ui32Flags & SGXMKIF_TQFLAGS_KEEPPENDING) == 0UL) 196 if ((psKick->ui32Flags & SGXMKIF_TQFLAGS_KEEPPENDING) == 0UL)
193 { 197 {
194 IMG_UINT32 i = 0; 198 IMG_UINT32 i = 0;
@@ -196,11 +200,11 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
196 for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) 200 for (loop = 0; loop < psKick->ui32NumSrcSync; loop++)
197 { 201 {
198 if (abSrcSyncEnable[loop]) 202 if (abSrcSyncEnable[loop])
199 { 203 {
200 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; 204 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop];
201 205
202 PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_TRANSFER, TRANSFER_TOKEN_SRC_SYNC, 206 PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_TRANSFER, TRANSFER_TOKEN_SRC_SYNC,
203 psSyncInfo, PVRSRV_SYNCOP_SAMPLE); 207 psSyncInfo, PVRSRV_SYNCOP_SAMPLE);
204 208
205 psSharedTransferCmd->asSrcSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; 209 psSharedTransferCmd->asSrcSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending;
206 psSharedTransferCmd->asSrcSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; 210 psSharedTransferCmd->asSrcSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending;
@@ -216,11 +220,11 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
216 for (loop = 0; loop < psKick->ui32NumDstSync; loop++) 220 for (loop = 0; loop < psKick->ui32NumDstSync; loop++)
217 { 221 {
218 if (abDstSyncEnable[loop]) 222 if (abDstSyncEnable[loop])
219 { 223 {
220 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; 224 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop];
221 225
222 PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_TRANSFER, TRANSFER_TOKEN_DST_SYNC, 226 PVR_TTRACE_SYNC_OBJECT(PVRSRV_TRACE_GROUP_TRANSFER, TRANSFER_TOKEN_DST_SYNC,
223 psSyncInfo, PVRSRV_SYNCOP_SAMPLE); 227 psSyncInfo, PVRSRV_SYNCOP_SAMPLE);
224 228
225 psSharedTransferCmd->asDstSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending; 229 psSharedTransferCmd->asDstSyncs[i].ui32WriteOpsPendingVal = psSyncInfo->psSyncData->ui32WriteOpsPending;
226 psSharedTransferCmd->asDstSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending; 230 psSharedTransferCmd->asDstSyncs[i].ui32ReadOpsPendingVal = psSyncInfo->psSyncData->ui32ReadOpsPending;
@@ -228,8 +232,7 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
228 psSharedTransferCmd->asDstSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr; 232 psSharedTransferCmd->asDstSyncs[i].sWriteOpsCompleteDevVAddr = psSyncInfo->sWriteOpsCompleteDevVAddr;
229 psSharedTransferCmd->asDstSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr; 233 psSharedTransferCmd->asDstSyncs[i].sReadOpsCompleteDevVAddr = psSyncInfo->sReadOpsCompleteDevVAddr;
230 i++; 234 i++;
231 235 }
232 }
233 } 236 }
234 PVR_ASSERT(i == ui32RealDstSyncNum); 237 PVR_ASSERT(i == ui32RealDstSyncNum);
235 238
@@ -237,17 +240,17 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
237 for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) 240 for (loop = 0; loop < psKick->ui32NumSrcSync; loop++)
238 { 241 {
239 if (abSrcSyncEnable[loop]) 242 if (abSrcSyncEnable[loop])
240 { 243 {
241 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; 244 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop];
242 psSyncInfo->psSyncData->ui32ReadOpsPending++; 245 psSyncInfo->psSyncData->ui32ReadOpsPending++;
243 } 246 }
244 } 247 }
245 for (loop = 0; loop < psKick->ui32NumDstSync; loop++) 248 for (loop = 0; loop < psKick->ui32NumDstSync; loop++)
246 { 249 {
247 if (abDstSyncEnable[loop]) 250 if (abDstSyncEnable[loop])
248 { 251 {
249 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; 252 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop];
250 psSyncInfo->psSyncData->ui32WriteOpsPending++; 253 psSyncInfo->psSyncData->ui32WriteOpsPending++;
251 } 254 }
252 } 255 }
253 } 256 }
@@ -272,74 +275,73 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
272 for (loop = 0; loop < psKick->ui32NumSrcSync; loop++) 275 for (loop = 0; loop < psKick->ui32NumSrcSync; loop++)
273 { 276 {
274 if (abSrcSyncEnable[loop]) 277 if (abSrcSyncEnable[loop])
275 { 278 {
276 psSyncInfo = psKick->ahSrcSyncInfo[loop]; 279 psSyncInfo = psKick->ahSrcSyncInfo[loop];
277 280
278 PDUMPCOMMENT("Hack src surface write op in transfer cmd\r\n"); 281 PDUMPCOMMENT("Hack src surface write op in transfer cmd\r\n");
279 PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, 282 PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal,
280 psCCBMemInfo, 283 psCCBMemInfo,
281 psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asSrcSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal)), 284 psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asSrcSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal)),
282 sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), 285 sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal),
283 psKick->ui32PDumpFlags, 286 psKick->ui32PDumpFlags,
284 MAKEUNIQUETAG(psCCBMemInfo)); 287 MAKEUNIQUETAG(psCCBMemInfo));
285 288
286 PDUMPCOMMENT("Hack src surface read op in transfer cmd\r\n"); 289 PDUMPCOMMENT("Hack src surface read op in transfer cmd\r\n");
287 PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, 290 PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal,
288 psCCBMemInfo, 291 psCCBMemInfo,
289 psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asSrcSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal)), 292 psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asSrcSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal)),
290 sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal), 293 sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal),
291 psKick->ui32PDumpFlags, 294 psKick->ui32PDumpFlags,
292 MAKEUNIQUETAG(psCCBMemInfo)); 295 MAKEUNIQUETAG(psCCBMemInfo));
293
294 i++; 296 i++;
297 }
295 } 298 }
296 } 299
297 i = 0; 300 i = 0;
298 for (loop = 0; loop < psKick->ui32NumDstSync; loop++) 301 for (loop = 0; loop < psKick->ui32NumDstSync; loop++)
299 {
300 if (abDstSyncEnable[i])
301 { 302 {
302 psSyncInfo = psKick->ahDstSyncInfo[loop]; 303 if (abDstSyncEnable[i])
303 304 {
304 PDUMPCOMMENT("Hack dest surface write op in transfer cmd\r\n"); 305 psSyncInfo = psKick->ahDstSyncInfo[loop];
305 PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal, 306
306 psCCBMemInfo, 307 PDUMPCOMMENT("Hack dest surface write op in transfer cmd\r\n");
308 PDUMPMEM(&psSyncInfo->psSyncData->ui32LastOpDumpVal,
309 psCCBMemInfo,
307 psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asDstSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal)), 310 psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asDstSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32WriteOpsPendingVal)),
308 sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal), 311 sizeof(psSyncInfo->psSyncData->ui32LastOpDumpVal),
309 psKick->ui32PDumpFlags, 312 psKick->ui32PDumpFlags,
310 MAKEUNIQUETAG(psCCBMemInfo)); 313 MAKEUNIQUETAG(psCCBMemInfo));
311 314
312 PDUMPCOMMENT("Hack dest surface read op in transfer cmd\r\n"); 315 PDUMPCOMMENT("Hack dest surface read op in transfer cmd\r\n");
313 PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal, 316 PDUMPMEM(&psSyncInfo->psSyncData->ui32LastReadOpDumpVal,
314 psCCBMemInfo, 317 psCCBMemInfo,
315 psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asDstSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal)), 318 psKick->ui32CCBDumpWOff + (IMG_UINT32)(offsetof(SGXMKIF_TRANSFERCMD_SHARED, asDstSyncs) + i * sizeof(PVRSRV_DEVICE_SYNC_OBJECT) + offsetof(PVRSRV_DEVICE_SYNC_OBJECT, ui32ReadOpsPendingVal)),
316 sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal), 319 sizeof(psSyncInfo->psSyncData->ui32LastReadOpDumpVal),
317 psKick->ui32PDumpFlags, 320 psKick->ui32PDumpFlags,
318 MAKEUNIQUETAG(psCCBMemInfo)); 321 MAKEUNIQUETAG(psCCBMemInfo));
319
320 i++; 322 i++;
323 }
321 } 324 }
322 }
323 325
324 326
325 for (loop = 0; loop < (psKick->ui32NumSrcSync); loop++) 327 for (loop = 0; loop < (psKick->ui32NumSrcSync); loop++)
326 { 328 {
327 if (abSrcSyncEnable[loop]) 329 if (abSrcSyncEnable[loop])
328 { 330 {
329 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; 331 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop];
330 psSyncInfo->psSyncData->ui32LastReadOpDumpVal++; 332 psSyncInfo->psSyncData->ui32LastReadOpDumpVal++;
333 }
331 } 334 }
332 }
333 335
334 for (loop = 0; loop < (psKick->ui32NumDstSync); loop++) 336 for (loop = 0; loop < (psKick->ui32NumDstSync); loop++)
335 {
336 if (abDstSyncEnable[loop])
337 { 337 {
338 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[0]; 338 if (abDstSyncEnable[loop])
339 psSyncInfo->psSyncData->ui32LastOpDumpVal++; 339 {
340 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[0];
341 psSyncInfo->psSyncData->ui32LastOpDumpVal++;
342 }
340 } 343 }
341 } 344 }
342 }
343 } 345 }
344#endif 346#endif
345 347
@@ -360,13 +362,13 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
360 if (abSrcSyncEnable[loop]) 362 if (abSrcSyncEnable[loop])
361 { 363 {
362 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; 364 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop];
363 psSyncInfo->psSyncData->ui32ReadOpsPending--; 365 psSyncInfo->psSyncData->ui32ReadOpsPending--;
364#if defined(PDUMP) 366#if defined(PDUMP)
365 if (PDumpIsCaptureFrameKM() 367 if (PDumpIsCaptureFrameKM()
366 || ((psKick->ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0)) 368 || ((psKick->ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0))
367 { 369 {
368 psSyncInfo->psSyncData->ui32LastReadOpDumpVal--; 370 psSyncInfo->psSyncData->ui32LastReadOpDumpVal--;
369 } 371 }
370#endif 372#endif
371 } 373 }
372 } 374 }
@@ -380,10 +382,10 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
380 if (PDumpIsCaptureFrameKM() 382 if (PDumpIsCaptureFrameKM()
381 || ((psKick->ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0)) 383 || ((psKick->ui32PDumpFlags & PDUMP_FLAGS_CONTINUOUS) != 0))
382 { 384 {
383 psSyncInfo->psSyncData->ui32LastOpDumpVal--; 385 psSyncInfo->psSyncData->ui32LastOpDumpVal--;
384 } 386 }
385#endif 387#endif
386 } 388 }
387 } 389 }
388 } 390 }
389 391
@@ -420,8 +422,8 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
420 if (abSrcSyncEnable[loop]) 422 if (abSrcSyncEnable[loop])
421 { 423 {
422 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop]; 424 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahSrcSyncInfo[loop];
423 psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending; 425 psSyncInfo->psSyncData->ui32ReadOpsComplete = psSyncInfo->psSyncData->ui32ReadOpsPending;
424 } 426 }
425 } 427 }
426 428
427 for (loop = 0; loop < psKick->ui32NumDstSync; loop++) 429 for (loop = 0; loop < psKick->ui32NumDstSync; loop++)
@@ -429,8 +431,7 @@ IMG_EXPORT PVRSRV_ERROR SGXSubmitTransferKM(IMG_HANDLE hDevHandle, PVRSRV_TRANSF
429 if (abDstSyncEnable[loop]) 431 if (abDstSyncEnable[loop])
430 { 432 {
431 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop]; 433 psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)psKick->ahDstSyncInfo[loop];
432 psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending; 434 psSyncInfo->psSyncData->ui32WriteOpsComplete = psSyncInfo->psSyncData->ui32WriteOpsPending;
433
434 } 435 }
435 } 436 }
436 437