aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/pvr/buffer_manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/pvr/buffer_manager.c')
-rw-r--r--drivers/gpu/pvr/buffer_manager.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/gpu/pvr/buffer_manager.c b/drivers/gpu/pvr/buffer_manager.c
index a8240585fb3..7b3cd7a1545 100644
--- a/drivers/gpu/pvr/buffer_manager.c
+++ b/drivers/gpu/pvr/buffer_manager.c
@@ -526,6 +526,7 @@ static IMG_VOID
526FreeBuf (BM_BUF *pBuf, IMG_UINT32 ui32Flags, IMG_BOOL bFromAllocator) 526FreeBuf (BM_BUF *pBuf, IMG_UINT32 ui32Flags, IMG_BOOL bFromAllocator)
527{ 527{
528 BM_MAPPING *pMapping; 528 BM_MAPPING *pMapping;
529 PVRSRV_DEVICE_NODE *psDeviceNode;
529 530
530 PVR_DPF ((PVR_DBG_MESSAGE, 531 PVR_DPF ((PVR_DBG_MESSAGE,
531 "FreeBuf: pBuf=0x%x: DevVAddr=%08X CpuVAddr=0x%x CpuPAddr=%08X", 532 "FreeBuf: pBuf=0x%x: DevVAddr=%08X CpuVAddr=0x%x CpuPAddr=%08X",
@@ -535,6 +536,12 @@ FreeBuf (BM_BUF *pBuf, IMG_UINT32 ui32Flags, IMG_BOOL bFromAllocator)
535 536
536 pMapping = pBuf->pMapping; 537 pMapping = pBuf->pMapping;
537 538
539 psDeviceNode = pMapping->pBMHeap->pBMContext->psDeviceNode;
540 if (psDeviceNode->pfnCacheInvalidate)
541 {
542 psDeviceNode->pfnCacheInvalidate(psDeviceNode);
543 }
544
538 if(ui32Flags & PVRSRV_MEM_USER_SUPPLIED_DEVVADDR) 545 if(ui32Flags & PVRSRV_MEM_USER_SUPPLIED_DEVVADDR)
539 { 546 {
540 547
@@ -695,7 +702,7 @@ BM_DestroyContext(IMG_HANDLE hBMContext,
695 else 702 else
696 { 703 {
697 704
698 eError = ResManFreeResByPtr(pBMContext->hResItem); 705 eError = ResManFreeResByPtr(pBMContext->hResItem, CLEANUP_WITH_POLL);
699 if(eError != PVRSRV_OK) 706 if(eError != PVRSRV_OK)
700 { 707 {
701 PVR_DPF ((PVR_DBG_ERROR, "BM_DestroyContext: ResManFreeResByPtr failed %d",eError)); 708 PVR_DPF ((PVR_DBG_ERROR, "BM_DestroyContext: ResManFreeResByPtr failed %d",eError));
@@ -745,13 +752,15 @@ static PVRSRV_ERROR BM_DestroyContextCallBack_AnyVaCb(BM_HEAP *psBMHeap, va_list
745} 752}
746 753
747 754
748static PVRSRV_ERROR BM_DestroyContextCallBack(IMG_PVOID pvParam, 755static PVRSRV_ERROR BM_DestroyContextCallBack(IMG_PVOID pvParam,
749 IMG_UINT32 ui32Param) 756 IMG_UINT32 ui32Param,
757 IMG_BOOL bDummy)
750{ 758{
751 BM_CONTEXT *pBMContext = pvParam; 759 BM_CONTEXT *pBMContext = pvParam;
752 PVRSRV_DEVICE_NODE *psDeviceNode; 760 PVRSRV_DEVICE_NODE *psDeviceNode;
753 PVRSRV_ERROR eError; 761 PVRSRV_ERROR eError;
754 PVR_UNREFERENCED_PARAMETER(ui32Param); 762 PVR_UNREFERENCED_PARAMETER(ui32Param);
763 PVR_UNREFERENCED_PARAMETER(bDummy);
755 764
756 765
757 766
@@ -969,7 +978,7 @@ BM_CreateContext(PVRSRV_DEVICE_NODE *psDeviceNode,
969 return (IMG_HANDLE)pBMContext; 978 return (IMG_HANDLE)pBMContext;
970 979
971cleanup: 980cleanup:
972 (IMG_VOID)BM_DestroyContextCallBack(pBMContext, 0); 981 (IMG_VOID)BM_DestroyContextCallBack(pBMContext, 0, CLEANUP_WITH_POLL);
973 982
974 return IMG_NULL; 983 return IMG_NULL;
975} 984}
@@ -1723,7 +1732,9 @@ DevMemoryFree (BM_MAPPING *pMapping)
1723 psDeviceNode->pfnMMUFree (pMapping->pBMHeap->pMMUHeap, pMapping->DevVAddr, IMG_CAST_TO_DEVVADDR_UINT(pMapping->uSize)); 1732 psDeviceNode->pfnMMUFree (pMapping->pBMHeap->pMMUHeap, pMapping->DevVAddr, IMG_CAST_TO_DEVVADDR_UINT(pMapping->uSize));
1724} 1733}
1725 1734
1735#ifndef XPROC_WORKAROUND_NUM_SHAREABLES
1726#define XPROC_WORKAROUND_NUM_SHAREABLES 200 1736#define XPROC_WORKAROUND_NUM_SHAREABLES 200
1737#endif
1727 1738
1728#define XPROC_WORKAROUND_BAD_SHAREINDEX 0773407734 1739#define XPROC_WORKAROUND_BAD_SHAREINDEX 0773407734
1729 1740