diff options
Diffstat (limited to 'drivers/gpu/pvr/buffer_manager.c')
-rw-r--r-- | drivers/gpu/pvr/buffer_manager.c | 19 |
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 | |||
526 | FreeBuf (BM_BUF *pBuf, IMG_UINT32 ui32Flags, IMG_BOOL bFromAllocator) | 526 | FreeBuf (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 | ||
748 | static PVRSRV_ERROR BM_DestroyContextCallBack(IMG_PVOID pvParam, | 755 | static 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 | ||
971 | cleanup: | 980 | cleanup: |
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 | ||