diff options
Diffstat (limited to 'drivers/gpu/pvr/sgx/sgxutils.c')
-rw-r--r-- | drivers/gpu/pvr/sgx/sgxutils.c | 154 |
1 files changed, 90 insertions, 64 deletions
diff --git a/drivers/gpu/pvr/sgx/sgxutils.c b/drivers/gpu/pvr/sgx/sgxutils.c index cf7ecc68d93..75b1b893200 100644 --- a/drivers/gpu/pvr/sgx/sgxutils.c +++ b/drivers/gpu/pvr/sgx/sgxutils.c | |||
@@ -206,7 +206,7 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_DEVICE_NODE *psDeviceNode, | |||
206 | 206 | ||
207 | 207 | ||
208 | 208 | ||
209 | if ( (eCmdType != SGXMKIF_CMD_PROCESS_QUEUES) && | 209 | if ( (eCmdType != SGXMKIF_CMD_PROCESS_QUEUES) && |
210 | ((psDevInfo->ui32CacheControl & SGXMKIF_CC_INVAL_DATA) != 0) && | 210 | ((psDevInfo->ui32CacheControl & SGXMKIF_CC_INVAL_DATA) != 0) && |
211 | ((psDevInfo->ui32CacheControl & (SGXMKIF_CC_INVAL_BIF_PT | SGXMKIF_CC_INVAL_BIF_PD)) != 0)) | 211 | ((psDevInfo->ui32CacheControl & (SGXMKIF_CC_INVAL_BIF_PT | SGXMKIF_CC_INVAL_BIF_PD)) != 0)) |
212 | { | 212 | { |
@@ -227,7 +227,7 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_DEVICE_NODE *psDeviceNode, | |||
227 | { | 227 | { |
228 | goto Exit; | 228 | goto Exit; |
229 | } | 229 | } |
230 | 230 | ||
231 | 231 | ||
232 | #if !defined(NO_HARDWARE) | 232 | #if !defined(NO_HARDWARE) |
233 | if(PollForValueKM(&psSGXHostCtl->ui32InvalStatus, | 233 | if(PollForValueKM(&psSGXHostCtl->ui32InvalStatus, |
@@ -241,7 +241,7 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_DEVICE_NODE *psDeviceNode, | |||
241 | PVR_DBG_BREAK; | 241 | PVR_DBG_BREAK; |
242 | } | 242 | } |
243 | #endif | 243 | #endif |
244 | 244 | ||
245 | #if defined(PDUMP) | 245 | #if defined(PDUMP) |
246 | 246 | ||
247 | PDUMPCOMMENTWITHFLAGS(0, "Host Control - Poll for BIF cache invalidate request to complete"); | 247 | PDUMPCOMMENTWITHFLAGS(0, "Host Control - Poll for BIF cache invalidate request to complete"); |
@@ -253,14 +253,14 @@ PVRSRV_ERROR SGXScheduleCCBCommand(PVRSRV_DEVICE_NODE *psDeviceNode, | |||
253 | 0, | 253 | 0, |
254 | MAKEUNIQUETAG(psSGXHostCtlMemInfo)); | 254 | MAKEUNIQUETAG(psSGXHostCtlMemInfo)); |
255 | #endif | 255 | #endif |
256 | 256 | ||
257 | psSGXHostCtl->ui32InvalStatus &= ~(PVRSRV_USSE_EDM_BIF_INVAL_COMPLETE); | 257 | psSGXHostCtl->ui32InvalStatus &= ~(PVRSRV_USSE_EDM_BIF_INVAL_COMPLETE); |
258 | PDUMPMEM(IMG_NULL, psSGXHostCtlMemInfo, offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), sizeof(IMG_UINT32), 0, MAKEUNIQUETAG(psSGXHostCtlMemInfo)); | 258 | PDUMPMEM(IMG_NULL, psSGXHostCtlMemInfo, offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), sizeof(IMG_UINT32), 0, MAKEUNIQUETAG(psSGXHostCtlMemInfo)); |
259 | } | 259 | } |
260 | #else | 260 | #else |
261 | PVR_UNREFERENCED_PARAMETER(hDevMemContext); | 261 | PVR_UNREFERENCED_PARAMETER(hDevMemContext); |
262 | #endif | 262 | #endif |
263 | 263 | ||
264 | #if defined(FIX_HW_BRN_31620) | 264 | #if defined(FIX_HW_BRN_31620) |
265 | if ((eCmdType != SGXMKIF_CMD_FLUSHPDCACHE) && (psDevInfo->ui32CacheControl & SGXMKIF_CC_INVAL_BIF_PD)) | 265 | if ((eCmdType != SGXMKIF_CMD_FLUSHPDCACHE) && (psDevInfo->ui32CacheControl & SGXMKIF_CC_INVAL_BIF_PD)) |
266 | { | 266 | { |
@@ -636,9 +636,10 @@ PVRSRV_ERROR SGXGetInternalDevInfoKM(IMG_HANDLE hDevCookie, | |||
636 | } | 636 | } |
637 | 637 | ||
638 | 638 | ||
639 | IMG_VOID SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, | 639 | PVRSRV_ERROR SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, |
640 | IMG_DEV_VIRTADDR *psHWDataDevVAddr, | 640 | IMG_DEV_VIRTADDR *psHWDataDevVAddr, |
641 | IMG_UINT32 ui32CleanupType) | 641 | IMG_UINT32 ui32CleanupType, |
642 | IMG_BOOL bForceCleanup) | ||
642 | { | 643 | { |
643 | PVRSRV_ERROR eError; | 644 | PVRSRV_ERROR eError; |
644 | PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; | 645 | PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; |
@@ -647,52 +648,64 @@ IMG_VOID SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, | |||
647 | 648 | ||
648 | SGXMKIF_COMMAND sCommand = {0}; | 649 | SGXMKIF_COMMAND sCommand = {0}; |
649 | 650 | ||
650 | sCommand.ui32Data[0] = ui32CleanupType; | ||
651 | sCommand.ui32Data[1] = (psHWDataDevVAddr == IMG_NULL) ? 0 : psHWDataDevVAddr->uiAddr; | ||
652 | PDUMPCOMMENTWITHFLAGS(0, "Request ukernel resource clean-up, Type %u, Data 0x%X", sCommand.ui32Data[0], sCommand.ui32Data[1]); | ||
653 | 651 | ||
654 | eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_CLEANUP, &sCommand, KERNEL_ID, 0, IMG_NULL, IMG_FALSE); | 652 | if (bForceCleanup != FORCE_CLEANUP) |
655 | if (eError != PVRSRV_OK) | ||
656 | { | 653 | { |
657 | PVR_DPF((PVR_DBG_ERROR,"SGXCleanupRequest: Failed to submit clean-up command")); | 654 | sCommand.ui32Data[0] = ui32CleanupType; |
658 | PVR_DBG_BREAK; | 655 | sCommand.ui32Data[1] = (psHWDataDevVAddr == IMG_NULL) ? 0 : psHWDataDevVAddr->uiAddr; |
659 | } | 656 | PDUMPCOMMENTWITHFLAGS(0, "Request ukernel resource clean-up, Type %u, Data 0x%X", sCommand.ui32Data[0], sCommand.ui32Data[1]); |
660 | |||
661 | 657 | ||
662 | #if !defined(NO_HARDWARE) | 658 | eError = SGXScheduleCCBCommandKM(psDeviceNode, SGXMKIF_CMD_CLEANUP, &sCommand, KERNEL_ID, 0, IMG_NULL, IMG_FALSE); |
663 | if(PollForValueKM(&psHostCtl->ui32CleanupStatus, | 659 | if (eError != PVRSRV_OK) |
664 | PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, | 660 | { |
665 | PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, | 661 | PVR_DPF((PVR_DBG_ERROR,"SGXCleanupRequest: Failed to submit clean-up command")); |
666 | 10 * MAX_HW_TIME_US, | 662 | PVR_DBG_BREAK; |
667 | 1000, | 663 | return eError; |
668 | IMG_TRUE) != PVRSRV_OK) | 664 | } |
669 | { | ||
670 | PVR_DPF((PVR_DBG_ERROR,"SGXCleanupRequest: Wait for uKernel to clean up (%u) failed", ui32CleanupType)); | ||
671 | PVR_DBG_BREAK; | ||
672 | } | ||
673 | #endif | ||
674 | 665 | ||
675 | #if defined(PDUMP) | ||
676 | |||
677 | PDUMPCOMMENTWITHFLAGS(0, "Host Control - Poll for clean-up request to complete"); | ||
678 | PDUMPMEMPOL(psHostCtlMemInfo, | ||
679 | offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), | ||
680 | PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, | ||
681 | PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, | ||
682 | PDUMP_POLL_OPERATOR_EQUAL, | ||
683 | 0, | ||
684 | MAKEUNIQUETAG(psHostCtlMemInfo)); | ||
685 | #endif | ||
686 | 666 | ||
667 | #if !defined(NO_HARDWARE) | ||
668 | if(PollForValueKM(&psHostCtl->ui32CleanupStatus, | ||
669 | PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, | ||
670 | PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, | ||
671 | 10 * MAX_HW_TIME_US, | ||
672 | 1000, | ||
673 | IMG_TRUE) != PVRSRV_OK) | ||
674 | { | ||
675 | PVR_DPF((PVR_DBG_ERROR,"SGXCleanupRequest: Wait for uKernel to clean up (%u) failed", ui32CleanupType)); | ||
676 | eError = PVRSRV_ERROR_TIMEOUT; | ||
677 | PVR_DBG_BREAK; | ||
678 | } | ||
679 | #endif | ||
680 | |||
681 | #if defined(PDUMP) | ||
682 | |||
683 | PDUMPCOMMENTWITHFLAGS(0, "Host Control - Poll for clean-up request to complete"); | ||
684 | PDUMPMEMPOL(psHostCtlMemInfo, | ||
685 | offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), | ||
686 | PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, | ||
687 | PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE, | ||
688 | PDUMP_POLL_OPERATOR_EQUAL, | ||
689 | 0, | ||
690 | MAKEUNIQUETAG(psHostCtlMemInfo)); | ||
691 | #endif | ||
692 | |||
693 | if (eError != PVRSRV_OK) | ||
694 | { | ||
695 | return eError; | ||
696 | } | ||
697 | } | ||
698 | |||
687 | psHostCtl->ui32CleanupStatus &= ~(PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE); | 699 | psHostCtl->ui32CleanupStatus &= ~(PVRSRV_USSE_EDM_CLEANUPCMD_COMPLETE); |
688 | PDUMPMEM(IMG_NULL, psHostCtlMemInfo, offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), sizeof(IMG_UINT32), 0, MAKEUNIQUETAG(psHostCtlMemInfo)); | 700 | PDUMPMEM(IMG_NULL, psHostCtlMemInfo, offsetof(SGXMKIF_HOST_CTL, ui32CleanupStatus), sizeof(IMG_UINT32), 0, MAKEUNIQUETAG(psHostCtlMemInfo)); |
689 | 701 | ||
690 | 702 | ||
691 | #if defined(SGX_FEATURE_SYSTEM_CACHE) | 703 | #if defined(SGX_FEATURE_SYSTEM_CACHE) |
692 | psDevInfo->ui32CacheControl |= (SGXMKIF_CC_INVAL_BIF_SL | SGXMKIF_CC_INVAL_DATA); | 704 | psDevInfo->ui32CacheControl |= (SGXMKIF_CC_INVAL_BIF_SL | SGXMKIF_CC_INVAL_DATA); |
693 | #else | 705 | #else |
694 | psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_DATA; | 706 | psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_DATA; |
695 | #endif | 707 | #endif |
708 | return PVRSRV_OK; | ||
696 | } | 709 | } |
697 | 710 | ||
698 | 711 | ||
@@ -706,15 +719,18 @@ typedef struct _SGX_HW_RENDER_CONTEXT_CLEANUP_ | |||
706 | 719 | ||
707 | 720 | ||
708 | static PVRSRV_ERROR SGXCleanupHWRenderContextCallback(IMG_PVOID pvParam, | 721 | static PVRSRV_ERROR SGXCleanupHWRenderContextCallback(IMG_PVOID pvParam, |
709 | IMG_UINT32 ui32Param) | 722 | IMG_UINT32 ui32Param, |
723 | IMG_BOOL bForceCleanup) | ||
710 | { | 724 | { |
725 | PVRSRV_ERROR eError; | ||
711 | SGX_HW_RENDER_CONTEXT_CLEANUP *psCleanup = pvParam; | 726 | SGX_HW_RENDER_CONTEXT_CLEANUP *psCleanup = pvParam; |
712 | 727 | ||
713 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 728 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
714 | 729 | ||
715 | SGXCleanupRequest(psCleanup->psDeviceNode, | 730 | eError = SGXCleanupRequest(psCleanup->psDeviceNode, |
716 | &psCleanup->sHWRenderContextDevVAddr, | 731 | &psCleanup->sHWRenderContextDevVAddr, |
717 | PVRSRV_CLEANUPCMD_RC); | 732 | PVRSRV_CLEANUPCMD_RC, |
733 | bForceCleanup); | ||
718 | 734 | ||
719 | OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, | 735 | OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, |
720 | sizeof(SGX_HW_RENDER_CONTEXT_CLEANUP), | 736 | sizeof(SGX_HW_RENDER_CONTEXT_CLEANUP), |
@@ -722,7 +738,7 @@ static PVRSRV_ERROR SGXCleanupHWRenderContextCallback(IMG_PVOID pvParam, | |||
722 | psCleanup->hBlockAlloc); | 738 | psCleanup->hBlockAlloc); |
723 | 739 | ||
724 | 740 | ||
725 | return PVRSRV_OK; | 741 | return eError; |
726 | } | 742 | } |
727 | 743 | ||
728 | typedef struct _SGX_HW_TRANSFER_CONTEXT_CLEANUP_ | 744 | typedef struct _SGX_HW_TRANSFER_CONTEXT_CLEANUP_ |
@@ -735,15 +751,18 @@ typedef struct _SGX_HW_TRANSFER_CONTEXT_CLEANUP_ | |||
735 | 751 | ||
736 | 752 | ||
737 | static PVRSRV_ERROR SGXCleanupHWTransferContextCallback(IMG_PVOID pvParam, | 753 | static PVRSRV_ERROR SGXCleanupHWTransferContextCallback(IMG_PVOID pvParam, |
738 | IMG_UINT32 ui32Param) | 754 | IMG_UINT32 ui32Param, |
755 | IMG_BOOL bForceCleanup) | ||
739 | { | 756 | { |
757 | PVRSRV_ERROR eError; | ||
740 | SGX_HW_TRANSFER_CONTEXT_CLEANUP *psCleanup = (SGX_HW_TRANSFER_CONTEXT_CLEANUP *)pvParam; | 758 | SGX_HW_TRANSFER_CONTEXT_CLEANUP *psCleanup = (SGX_HW_TRANSFER_CONTEXT_CLEANUP *)pvParam; |
741 | 759 | ||
742 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 760 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
743 | 761 | ||
744 | SGXCleanupRequest(psCleanup->psDeviceNode, | 762 | eError = SGXCleanupRequest(psCleanup->psDeviceNode, |
745 | &psCleanup->sHWTransferContextDevVAddr, | 763 | &psCleanup->sHWTransferContextDevVAddr, |
746 | PVRSRV_CLEANUPCMD_TC); | 764 | PVRSRV_CLEANUPCMD_TC, |
765 | bForceCleanup); | ||
747 | 766 | ||
748 | OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, | 767 | OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, |
749 | sizeof(SGX_HW_TRANSFER_CONTEXT_CLEANUP), | 768 | sizeof(SGX_HW_TRANSFER_CONTEXT_CLEANUP), |
@@ -751,7 +770,7 @@ static PVRSRV_ERROR SGXCleanupHWTransferContextCallback(IMG_PVOID pvParam, | |||
751 | psCleanup->hBlockAlloc); | 770 | psCleanup->hBlockAlloc); |
752 | 771 | ||
753 | 772 | ||
754 | return PVRSRV_OK; | 773 | return eError; |
755 | } | 774 | } |
756 | 775 | ||
757 | IMG_EXPORT | 776 | IMG_EXPORT |
@@ -804,7 +823,7 @@ IMG_HANDLE SGXRegisterHWRenderContextKM(IMG_HANDLE psDeviceNode, | |||
804 | } | 823 | } |
805 | 824 | ||
806 | IMG_EXPORT | 825 | IMG_EXPORT |
807 | PVRSRV_ERROR SGXUnregisterHWRenderContextKM(IMG_HANDLE hHWRenderContext) | 826 | PVRSRV_ERROR SGXUnregisterHWRenderContextKM(IMG_HANDLE hHWRenderContext, IMG_BOOL bForceCleanup) |
808 | { | 827 | { |
809 | PVRSRV_ERROR eError; | 828 | PVRSRV_ERROR eError; |
810 | SGX_HW_RENDER_CONTEXT_CLEANUP *psCleanup; | 829 | SGX_HW_RENDER_CONTEXT_CLEANUP *psCleanup; |
@@ -819,7 +838,7 @@ PVRSRV_ERROR SGXUnregisterHWRenderContextKM(IMG_HANDLE hHWRenderContext) | |||
819 | return PVRSRV_ERROR_INVALID_PARAMS; | 838 | return PVRSRV_ERROR_INVALID_PARAMS; |
820 | } | 839 | } |
821 | 840 | ||
822 | eError = ResManFreeResByPtr(psCleanup->psResItem); | 841 | eError = ResManFreeResByPtr(psCleanup->psResItem, bForceCleanup); |
823 | 842 | ||
824 | return eError; | 843 | return eError; |
825 | } | 844 | } |
@@ -875,7 +894,7 @@ IMG_HANDLE SGXRegisterHWTransferContextKM(IMG_HANDLE psDeviceNode, | |||
875 | } | 894 | } |
876 | 895 | ||
877 | IMG_EXPORT | 896 | IMG_EXPORT |
878 | PVRSRV_ERROR SGXUnregisterHWTransferContextKM(IMG_HANDLE hHWTransferContext) | 897 | PVRSRV_ERROR SGXUnregisterHWTransferContextKM(IMG_HANDLE hHWTransferContext, IMG_BOOL bForceCleanup) |
879 | { | 898 | { |
880 | PVRSRV_ERROR eError; | 899 | PVRSRV_ERROR eError; |
881 | SGX_HW_TRANSFER_CONTEXT_CLEANUP *psCleanup; | 900 | SGX_HW_TRANSFER_CONTEXT_CLEANUP *psCleanup; |
@@ -890,7 +909,7 @@ PVRSRV_ERROR SGXUnregisterHWTransferContextKM(IMG_HANDLE hHWTransferContext) | |||
890 | return PVRSRV_ERROR_INVALID_PARAMS; | 909 | return PVRSRV_ERROR_INVALID_PARAMS; |
891 | } | 910 | } |
892 | 911 | ||
893 | eError = ResManFreeResByPtr(psCleanup->psResItem); | 912 | eError = ResManFreeResByPtr(psCleanup->psResItem, bForceCleanup); |
894 | 913 | ||
895 | return eError; | 914 | return eError; |
896 | } | 915 | } |
@@ -904,15 +923,19 @@ typedef struct _SGX_HW_2D_CONTEXT_CLEANUP_ | |||
904 | PRESMAN_ITEM psResItem; | 923 | PRESMAN_ITEM psResItem; |
905 | } SGX_HW_2D_CONTEXT_CLEANUP; | 924 | } SGX_HW_2D_CONTEXT_CLEANUP; |
906 | 925 | ||
907 | static PVRSRV_ERROR SGXCleanupHW2DContextCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param) | 926 | static PVRSRV_ERROR SGXCleanupHW2DContextCallback(IMG_PVOID pvParam, |
927 | IMG_UINT32 ui32Param, | ||
928 | IMG_BOOL bForceCleanup) | ||
908 | { | 929 | { |
930 | PVRSRV_ERROR eError; | ||
909 | SGX_HW_2D_CONTEXT_CLEANUP *psCleanup = (SGX_HW_2D_CONTEXT_CLEANUP *)pvParam; | 931 | SGX_HW_2D_CONTEXT_CLEANUP *psCleanup = (SGX_HW_2D_CONTEXT_CLEANUP *)pvParam; |
910 | 932 | ||
911 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 933 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
912 | 934 | ||
913 | SGXCleanupRequest(psCleanup->psDeviceNode, | 935 | eError = SGXCleanupRequest(psCleanup->psDeviceNode, |
914 | &psCleanup->sHW2DContextDevVAddr, | 936 | &psCleanup->sHW2DContextDevVAddr, |
915 | PVRSRV_CLEANUPCMD_2DC); | 937 | PVRSRV_CLEANUPCMD_2DC, |
938 | bForceCleanup); | ||
916 | 939 | ||
917 | OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, | 940 | OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, |
918 | sizeof(SGX_HW_2D_CONTEXT_CLEANUP), | 941 | sizeof(SGX_HW_2D_CONTEXT_CLEANUP), |
@@ -920,7 +943,7 @@ static PVRSRV_ERROR SGXCleanupHW2DContextCallback(IMG_PVOID pvParam, IMG_UINT32 | |||
920 | psCleanup->hBlockAlloc); | 943 | psCleanup->hBlockAlloc); |
921 | 944 | ||
922 | 945 | ||
923 | return PVRSRV_OK; | 946 | return eError; |
924 | } | 947 | } |
925 | 948 | ||
926 | IMG_EXPORT | 949 | IMG_EXPORT |
@@ -973,7 +996,7 @@ IMG_HANDLE SGXRegisterHW2DContextKM(IMG_HANDLE psDeviceNode, | |||
973 | } | 996 | } |
974 | 997 | ||
975 | IMG_EXPORT | 998 | IMG_EXPORT |
976 | PVRSRV_ERROR SGXUnregisterHW2DContextKM(IMG_HANDLE hHW2DContext) | 999 | PVRSRV_ERROR SGXUnregisterHW2DContextKM(IMG_HANDLE hHW2DContext, IMG_BOOL bForceCleanup) |
977 | { | 1000 | { |
978 | PVRSRV_ERROR eError; | 1001 | PVRSRV_ERROR eError; |
979 | SGX_HW_2D_CONTEXT_CLEANUP *psCleanup; | 1002 | SGX_HW_2D_CONTEXT_CLEANUP *psCleanup; |
@@ -987,7 +1010,7 @@ PVRSRV_ERROR SGXUnregisterHW2DContextKM(IMG_HANDLE hHW2DContext) | |||
987 | 1010 | ||
988 | psCleanup = (SGX_HW_2D_CONTEXT_CLEANUP *)hHW2DContext; | 1011 | psCleanup = (SGX_HW_2D_CONTEXT_CLEANUP *)hHW2DContext; |
989 | 1012 | ||
990 | eError = ResManFreeResByPtr(psCleanup->psResItem); | 1013 | eError = ResManFreeResByPtr(psCleanup->psResItem, bForceCleanup); |
991 | 1014 | ||
992 | return eError; | 1015 | return eError; |
993 | } | 1016 | } |
@@ -1076,13 +1099,16 @@ PVRSRV_ERROR SGX2DQueryBlitsCompleteKM(PVRSRV_SGXDEV_INFO *psDevInfo, | |||
1076 | 1099 | ||
1077 | 1100 | ||
1078 | IMG_EXPORT | 1101 | IMG_EXPORT |
1079 | IMG_VOID SGXFlushHWRenderTargetKM(IMG_HANDLE psDeviceNode, IMG_DEV_VIRTADDR sHWRTDataSetDevVAddr) | 1102 | PVRSRV_ERROR SGXFlushHWRenderTargetKM(IMG_HANDLE psDeviceNode, |
1103 | IMG_DEV_VIRTADDR sHWRTDataSetDevVAddr, | ||
1104 | IMG_BOOL bForceCleanup) | ||
1080 | { | 1105 | { |
1081 | PVR_ASSERT(sHWRTDataSetDevVAddr.uiAddr != IMG_NULL); | 1106 | PVR_ASSERT(sHWRTDataSetDevVAddr.uiAddr != IMG_NULL); |
1082 | 1107 | ||
1083 | SGXCleanupRequest(psDeviceNode, | 1108 | return SGXCleanupRequest(psDeviceNode, |
1084 | &sHWRTDataSetDevVAddr, | 1109 | &sHWRTDataSetDevVAddr, |
1085 | PVRSRV_CLEANUPCMD_RT); | 1110 | PVRSRV_CLEANUPCMD_RT, |
1111 | bForceCleanup); | ||
1086 | } | 1112 | } |
1087 | 1113 | ||
1088 | 1114 | ||
@@ -1141,7 +1167,7 @@ PVRSRV_ERROR SGXContextSuspend(PVRSRV_DEVICE_NODE *psDeviceNode, | |||
1141 | PVR_DPF((PVR_DBG_ERROR,"SGXContextSuspend: Failed to submit context suspend command")); | 1167 | PVR_DPF((PVR_DBG_ERROR,"SGXContextSuspend: Failed to submit context suspend command")); |
1142 | return eError; | 1168 | return eError; |
1143 | } | 1169 | } |
1144 | 1170 | ||
1145 | return eError; | 1171 | return eError; |
1146 | } | 1172 | } |
1147 | 1173 | ||