diff options
author | Hemant Hariyani <hemanthariyani@ti.com> | 2011-08-25 03:01:10 -0400 |
---|---|---|
committer | Paolo Pisati <paolo.pisati@canonical.com> | 2012-08-17 04:18:39 -0400 |
commit | b7f68b0d0649bec8d50054b78873ca40b267321b (patch) | |
tree | 56e9917cfa159b1728721dbae9d8c46f33bc2699 /drivers/gpu/pvr/sgx/sgxutils.c | |
parent | 8827e270c06639a9a89390799c8860bf9640ec5f (diff) |
OMAP4: SGX-KM: Upgrade DDK to version 1.7.17.4403
This patch upgrades the kernel side graphics driver to version
1.7.17.4403.
The corresponding change in the user side must be in place for this
to work.
Change-Id: Id3a713fa22a227dbcd0ec098589d62b350802247
Signed-off-by: Hemant Hariyani <hemanthariyani@ti.com>
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 | ||