diff options
46 files changed, 957 insertions, 894 deletions
diff --git a/drivers/gpu/pvr/bridged_pvr_bridge.c b/drivers/gpu/pvr/bridged_pvr_bridge.c index b292d96b582..f1e606c87bc 100644 --- a/drivers/gpu/pvr/bridged_pvr_bridge.c +++ b/drivers/gpu/pvr/bridged_pvr_bridge.c | |||
@@ -822,6 +822,7 @@ PVRSRVMapDeviceMemoryBW(IMG_UINT32 ui32BridgeID, | |||
822 | 822 | ||
823 | NEW_HANDLE_BATCH_OR_ERROR(psMapDevMemOUT->eError, psPerProc, 2) | 823 | NEW_HANDLE_BATCH_OR_ERROR(psMapDevMemOUT->eError, psPerProc, 2) |
824 | 824 | ||
825 | |||
825 | psMapDevMemOUT->eError = PVRSRVLookupHandle(KERNEL_HANDLE_BASE, | 826 | psMapDevMemOUT->eError = PVRSRVLookupHandle(KERNEL_HANDLE_BASE, |
826 | (IMG_VOID**)&psSrcKernelMemInfo, | 827 | (IMG_VOID**)&psSrcKernelMemInfo, |
827 | psMapDevMemIN->hKernelMemInfo, | 828 | psMapDevMemIN->hKernelMemInfo, |
@@ -831,6 +832,7 @@ PVRSRVMapDeviceMemoryBW(IMG_UINT32 ui32BridgeID, | |||
831 | return 0; | 832 | return 0; |
832 | } | 833 | } |
833 | 834 | ||
835 | |||
834 | psMapDevMemOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, | 836 | psMapDevMemOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase, |
835 | &hDstDevMemHeap, | 837 | &hDstDevMemHeap, |
836 | psMapDevMemIN->hDstDevMemHeap, | 838 | psMapDevMemIN->hDstDevMemHeap, |
@@ -839,11 +841,20 @@ PVRSRVMapDeviceMemoryBW(IMG_UINT32 ui32BridgeID, | |||
839 | { | 841 | { |
840 | return 0; | 842 | return 0; |
841 | } | 843 | } |
844 | |||
842 | 845 | ||
843 | if (psSrcKernelMemInfo->sShareMemWorkaround.bInUse) | 846 | if (psSrcKernelMemInfo->sShareMemWorkaround.bInUse) |
844 | { | 847 | { |
845 | PVR_DPF((PVR_DBG_MESSAGE, "using the mem wrap workaround.")); | 848 | PVR_DPF((PVR_DBG_MESSAGE, "using the mem wrap workaround.")); |
846 | 849 | ||
850 | |||
851 | |||
852 | |||
853 | |||
854 | |||
855 | |||
856 | |||
857 | |||
847 | psMapDevMemOUT->eError = BM_XProcWorkaroundSetShareIndex(psSrcKernelMemInfo->sShareMemWorkaround.ui32ShareIndex); | 858 | psMapDevMemOUT->eError = BM_XProcWorkaroundSetShareIndex(psSrcKernelMemInfo->sShareMemWorkaround.ui32ShareIndex); |
848 | if(psMapDevMemOUT->eError != PVRSRV_OK) | 859 | if(psMapDevMemOUT->eError != PVRSRV_OK) |
849 | { | 860 | { |
@@ -3833,11 +3844,13 @@ static PVRSRV_ERROR DoModifyCompleteSyncOps(MODIFY_SYNC_OP_INFO *psModSyncOpInfo | |||
3833 | 3844 | ||
3834 | 3845 | ||
3835 | static PVRSRV_ERROR ModifyCompleteSyncOpsCallBack(IMG_PVOID pvParam, | 3846 | static PVRSRV_ERROR ModifyCompleteSyncOpsCallBack(IMG_PVOID pvParam, |
3836 | IMG_UINT32 ui32Param) | 3847 | IMG_UINT32 ui32Param, |
3848 | IMG_BOOL bDummy) | ||
3837 | { | 3849 | { |
3838 | MODIFY_SYNC_OP_INFO *psModSyncOpInfo; | 3850 | MODIFY_SYNC_OP_INFO *psModSyncOpInfo; |
3839 | 3851 | ||
3840 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 3852 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
3853 | PVR_UNREFERENCED_PARAMETER(bDummy); | ||
3841 | 3854 | ||
3842 | if (!pvParam) | 3855 | if (!pvParam) |
3843 | { | 3856 | { |
@@ -3969,7 +3982,7 @@ PVRSRVDestroySyncInfoModObjBW(IMG_UINT32 | |||
3969 | return 0; | 3982 | return 0; |
3970 | } | 3983 | } |
3971 | 3984 | ||
3972 | psDestroySyncInfoModObjOUT->eError = ResManFreeResByPtr(psModSyncOpInfo->hResItem); | 3985 | psDestroySyncInfoModObjOUT->eError = ResManFreeResByPtr(psModSyncOpInfo->hResItem, CLEANUP_WITH_POLL); |
3973 | if (psDestroySyncInfoModObjOUT->eError != PVRSRV_OK) | 3986 | if (psDestroySyncInfoModObjOUT->eError != PVRSRV_OK) |
3974 | { | 3987 | { |
3975 | PVR_DPF((PVR_DBG_ERROR, "PVRSRVDestroySyncInfoModObjBW: ResManFreeResByPtr failed")); | 3988 | PVR_DPF((PVR_DBG_ERROR, "PVRSRVDestroySyncInfoModObjBW: ResManFreeResByPtr failed")); |
@@ -4274,12 +4287,14 @@ PVRSRVSyncOpsFlushToDeltaBW(IMG_UINT32 u | |||
4274 | 4287 | ||
4275 | static PVRSRV_ERROR | 4288 | static PVRSRV_ERROR |
4276 | FreeSyncInfoCallback(IMG_PVOID pvParam, | 4289 | FreeSyncInfoCallback(IMG_PVOID pvParam, |
4277 | IMG_UINT32 ui32Param) | 4290 | IMG_UINT32 ui32Param, |
4291 | IMG_BOOL bDummy) | ||
4278 | { | 4292 | { |
4279 | PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; | 4293 | PVRSRV_KERNEL_SYNC_INFO *psSyncInfo; |
4280 | PVRSRV_ERROR eError; | 4294 | PVRSRV_ERROR eError; |
4281 | 4295 | ||
4282 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 4296 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
4297 | PVR_UNREFERENCED_PARAMETER(bDummy); | ||
4283 | 4298 | ||
4284 | psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)pvParam; | 4299 | psSyncInfo = (PVRSRV_KERNEL_SYNC_INFO *)pvParam; |
4285 | 4300 | ||
@@ -4396,7 +4411,7 @@ PVRSRVFreeSyncInfoBW(IMG_UINT32 ui32Bri | |||
4396 | return 0; | 4411 | return 0; |
4397 | } | 4412 | } |
4398 | 4413 | ||
4399 | eError = ResManFreeResByPtr(psSyncInfo->hResItem); | 4414 | eError = ResManFreeResByPtr(psSyncInfo->hResItem, CLEANUP_WITH_POLL); |
4400 | if (eError != PVRSRV_OK) | 4415 | if (eError != PVRSRV_OK) |
4401 | { | 4416 | { |
4402 | PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeSyncInfoBW: ResManFreeResByPtr failed")); | 4417 | PVR_DPF((PVR_DBG_ERROR, "PVRSRVFreeSyncInfoBW: ResManFreeResByPtr failed")); |
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 | ||
diff --git a/drivers/gpu/pvr/device.h b/drivers/gpu/pvr/device.h index 86f37c6cd4e..9df2c734bc6 100644 --- a/drivers/gpu/pvr/device.h +++ b/drivers/gpu/pvr/device.h | |||
@@ -246,7 +246,9 @@ typedef struct _PVRSRV_DEVICE_NODE_ | |||
246 | IMG_VOID (*pfnDeviceCommandComplete)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode); | 246 | IMG_VOID (*pfnDeviceCommandComplete)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode); |
247 | 247 | ||
248 | IMG_BOOL bReProcessDeviceCommandComplete; | 248 | IMG_BOOL bReProcessDeviceCommandComplete; |
249 | 249 | ||
250 | IMG_VOID (*pfnCacheInvalidate)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode); | ||
251 | |||
250 | 252 | ||
251 | DEVICE_MEMORY_INFO sDevMemoryInfo; | 253 | DEVICE_MEMORY_INFO sDevMemoryInfo; |
252 | 254 | ||
diff --git a/drivers/gpu/pvr/deviceclass.c b/drivers/gpu/pvr/deviceclass.c index 0e4b51a57e0..7b565dd8168 100644 --- a/drivers/gpu/pvr/deviceclass.c +++ b/drivers/gpu/pvr/deviceclass.c | |||
@@ -258,7 +258,7 @@ PVRSRV_ERROR PVRSRVRegisterDCDeviceKM (PVRSRV_DC_SRV2DISP_KMJTABLE *psFuncTable, | |||
258 | *psDCInfo->psFuncTable = *psFuncTable; | 258 | *psDCInfo->psFuncTable = *psFuncTable; |
259 | 259 | ||
260 | 260 | ||
261 | if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, | 261 | if(OSAllocMem( PVRSRV_OS_NON_PAGEABLE_HEAP, |
262 | sizeof(PVRSRV_DEVICE_NODE), | 262 | sizeof(PVRSRV_DEVICE_NODE), |
263 | (IMG_VOID **)&psDeviceNode, IMG_NULL, | 263 | (IMG_VOID **)&psDeviceNode, IMG_NULL, |
264 | "Device Node") != PVRSRV_OK) | 264 | "Device Node") != PVRSRV_OK) |
@@ -420,7 +420,7 @@ PVRSRV_ERROR PVRSRVRegisterBCDeviceKM (PVRSRV_BC_SRV2BUFFER_KMJTABLE *psFuncTabl | |||
420 | *psBCInfo->psFuncTable = *psFuncTable; | 420 | *psBCInfo->psFuncTable = *psFuncTable; |
421 | 421 | ||
422 | 422 | ||
423 | if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, | 423 | if(OSAllocMem( PVRSRV_OS_NON_PAGEABLE_HEAP, |
424 | sizeof(PVRSRV_DEVICE_NODE), | 424 | sizeof(PVRSRV_DEVICE_NODE), |
425 | (IMG_VOID **)&psDeviceNode, IMG_NULL, | 425 | (IMG_VOID **)&psDeviceNode, IMG_NULL, |
426 | "Device Node") != PVRSRV_OK) | 426 | "Device Node") != PVRSRV_OK) |
@@ -540,19 +540,21 @@ PVRSRV_ERROR PVRSRVCloseDCDeviceKM (IMG_HANDLE hDeviceKM, | |||
540 | psDCPerContextInfo = (PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *)hDeviceKM; | 540 | psDCPerContextInfo = (PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *)hDeviceKM; |
541 | 541 | ||
542 | 542 | ||
543 | eError = ResManFreeResByPtr(psDCPerContextInfo->hResItem); | 543 | eError = ResManFreeResByPtr(psDCPerContextInfo->hResItem, CLEANUP_WITH_POLL); |
544 | 544 | ||
545 | return eError; | 545 | return eError; |
546 | } | 546 | } |
547 | 547 | ||
548 | 548 | ||
549 | static PVRSRV_ERROR CloseDCDeviceCallBack(IMG_PVOID pvParam, | 549 | static PVRSRV_ERROR CloseDCDeviceCallBack(IMG_PVOID pvParam, |
550 | IMG_UINT32 ui32Param) | 550 | IMG_UINT32 ui32Param, |
551 | IMG_BOOL bDummy) | ||
551 | { | 552 | { |
552 | PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *psDCPerContextInfo; | 553 | PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *psDCPerContextInfo; |
553 | PVRSRV_DISPLAYCLASS_INFO *psDCInfo; | 554 | PVRSRV_DISPLAYCLASS_INFO *psDCInfo; |
554 | 555 | ||
555 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 556 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
557 | PVR_UNREFERENCED_PARAMETER(bDummy); | ||
556 | 558 | ||
557 | psDCPerContextInfo = (PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *)pvParam; | 559 | psDCPerContextInfo = (PVRSRV_DISPLAYCLASS_PERCONTEXT_INFO *)pvParam; |
558 | psDCInfo = psDCPerContextInfo->psDCInfo; | 560 | psDCInfo = psDCPerContextInfo->psDCInfo; |
@@ -812,7 +814,7 @@ PVRSRV_ERROR PVRSRVDestroyDCSwapChainKM(IMG_HANDLE hSwapChainRef) | |||
812 | 814 | ||
813 | psSwapChainRef = hSwapChainRef; | 815 | psSwapChainRef = hSwapChainRef; |
814 | 816 | ||
815 | eError = ResManFreeResByPtr(psSwapChainRef->hResItem); | 817 | eError = ResManFreeResByPtr(psSwapChainRef->hResItem, CLEANUP_WITH_POLL); |
816 | 818 | ||
817 | return eError; | 819 | return eError; |
818 | } | 820 | } |
@@ -880,13 +882,16 @@ static PVRSRV_ERROR DestroyDCSwapChain(PVRSRV_DC_SWAPCHAIN *psSwapChain) | |||
880 | } | 882 | } |
881 | 883 | ||
882 | 884 | ||
883 | static PVRSRV_ERROR DestroyDCSwapChainRefCallBack(IMG_PVOID pvParam, IMG_UINT32 ui32Param) | 885 | static PVRSRV_ERROR DestroyDCSwapChainRefCallBack(IMG_PVOID pvParam, |
886 | IMG_UINT32 ui32Param, | ||
887 | IMG_BOOL bDummy) | ||
884 | { | 888 | { |
885 | PVRSRV_DC_SWAPCHAIN_REF *psSwapChainRef = (PVRSRV_DC_SWAPCHAIN_REF *) pvParam; | 889 | PVRSRV_DC_SWAPCHAIN_REF *psSwapChainRef = (PVRSRV_DC_SWAPCHAIN_REF *) pvParam; |
886 | PVRSRV_ERROR eError = PVRSRV_OK; | 890 | PVRSRV_ERROR eError = PVRSRV_OK; |
887 | IMG_UINT32 i; | 891 | IMG_UINT32 i; |
888 | 892 | ||
889 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 893 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
894 | PVR_UNREFERENCED_PARAMETER(bDummy); | ||
890 | 895 | ||
891 | for (i = 0; i < psSwapChainRef->psSwapChain->ui32BufferCount; i++) | 896 | for (i = 0; i < psSwapChainRef->psSwapChain->ui32BufferCount; i++) |
892 | { | 897 | { |
@@ -1705,20 +1710,22 @@ PVRSRV_ERROR PVRSRVCloseBCDeviceKM (IMG_HANDLE hDeviceKM, | |||
1705 | psBCPerContextInfo = (PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *)hDeviceKM; | 1710 | psBCPerContextInfo = (PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *)hDeviceKM; |
1706 | 1711 | ||
1707 | 1712 | ||
1708 | eError = ResManFreeResByPtr(psBCPerContextInfo->hResItem); | 1713 | eError = ResManFreeResByPtr(psBCPerContextInfo->hResItem, CLEANUP_WITH_POLL); |
1709 | 1714 | ||
1710 | return eError; | 1715 | return eError; |
1711 | } | 1716 | } |
1712 | 1717 | ||
1713 | 1718 | ||
1714 | static PVRSRV_ERROR CloseBCDeviceCallBack(IMG_PVOID pvParam, | 1719 | static PVRSRV_ERROR CloseBCDeviceCallBack(IMG_PVOID pvParam, |
1715 | IMG_UINT32 ui32Param) | 1720 | IMG_UINT32 ui32Param, |
1721 | IMG_BOOL bDummy) | ||
1716 | { | 1722 | { |
1717 | PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *psBCPerContextInfo; | 1723 | PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *psBCPerContextInfo; |
1718 | PVRSRV_BUFFERCLASS_INFO *psBCInfo; | 1724 | PVRSRV_BUFFERCLASS_INFO *psBCInfo; |
1719 | IMG_UINT32 i; | 1725 | IMG_UINT32 i; |
1720 | 1726 | ||
1721 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 1727 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
1728 | PVR_UNREFERENCED_PARAMETER(bDummy); | ||
1722 | 1729 | ||
1723 | psBCPerContextInfo = (PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *)pvParam; | 1730 | psBCPerContextInfo = (PVRSRV_BUFFERCLASS_PERCONTEXT_INFO *)pvParam; |
1724 | 1731 | ||
diff --git a/drivers/gpu/pvr/devicemem.c b/drivers/gpu/pvr/devicemem.c index 3016736c5c1..adf8e774880 100644 --- a/drivers/gpu/pvr/devicemem.c +++ b/drivers/gpu/pvr/devicemem.c | |||
@@ -662,11 +662,14 @@ static PVRSRV_ERROR FreeMemCallBackCommon(PVRSRV_KERNEL_MEM_INFO *psMemInfo, | |||
662 | return eError; | 662 | return eError; |
663 | } | 663 | } |
664 | 664 | ||
665 | static PVRSRV_ERROR FreeDeviceMemCallBack(IMG_PVOID pvParam, | 665 | static PVRSRV_ERROR FreeDeviceMemCallBack(IMG_PVOID pvParam, |
666 | IMG_UINT32 ui32Param) | 666 | IMG_UINT32 ui32Param, |
667 | IMG_BOOL bDummy) | ||
667 | { | 668 | { |
668 | PVRSRV_KERNEL_MEM_INFO *psMemInfo = (PVRSRV_KERNEL_MEM_INFO *)pvParam; | 669 | PVRSRV_KERNEL_MEM_INFO *psMemInfo = (PVRSRV_KERNEL_MEM_INFO *)pvParam; |
669 | 670 | ||
671 | PVR_UNREFERENCED_PARAMETER(bDummy); | ||
672 | |||
670 | return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE); | 673 | return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE); |
671 | } | 674 | } |
672 | 675 | ||
@@ -686,12 +689,12 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceMemKM(IMG_HANDLE hDevCookie, | |||
686 | 689 | ||
687 | if (psMemInfo->sMemBlk.hResItem != IMG_NULL) | 690 | if (psMemInfo->sMemBlk.hResItem != IMG_NULL) |
688 | { | 691 | { |
689 | eError = ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem); | 692 | eError = ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); |
690 | } | 693 | } |
691 | else | 694 | else |
692 | { | 695 | { |
693 | 696 | ||
694 | eError = FreeDeviceMemCallBack(psMemInfo, 0); | 697 | eError = FreeDeviceMemCallBack(psMemInfo, 0, CLEANUP_WITH_POLL); |
695 | } | 698 | } |
696 | 699 | ||
697 | return eError; | 700 | return eError; |
@@ -849,15 +852,18 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVUnwrapExtMemoryKM (PVRSRV_KERNEL_MEM_INFO *psMem | |||
849 | return PVRSRV_ERROR_INVALID_PARAMS; | 852 | return PVRSRV_ERROR_INVALID_PARAMS; |
850 | } | 853 | } |
851 | 854 | ||
852 | return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem); | 855 | return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); |
853 | } | 856 | } |
854 | 857 | ||
855 | 858 | ||
856 | static PVRSRV_ERROR UnwrapExtMemoryCallBack(IMG_PVOID pvParam, | 859 | static PVRSRV_ERROR UnwrapExtMemoryCallBack(IMG_PVOID pvParam, |
857 | IMG_UINT32 ui32Param) | 860 | IMG_UINT32 ui32Param, |
861 | IMG_BOOL bDummy) | ||
858 | { | 862 | { |
859 | PVRSRV_KERNEL_MEM_INFO *psMemInfo = (PVRSRV_KERNEL_MEM_INFO *)pvParam; | 863 | PVRSRV_KERNEL_MEM_INFO *psMemInfo = (PVRSRV_KERNEL_MEM_INFO *)pvParam; |
860 | 864 | ||
865 | PVR_UNREFERENCED_PARAMETER(bDummy); | ||
866 | |||
861 | return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE); | 867 | return FreeMemCallBackCommon(psMemInfo, ui32Param, IMG_TRUE); |
862 | } | 868 | } |
863 | 869 | ||
@@ -1101,17 +1107,19 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceMemoryKM (PVRSRV_KERNEL_MEM_INFO *psM | |||
1101 | return PVRSRV_ERROR_INVALID_PARAMS; | 1107 | return PVRSRV_ERROR_INVALID_PARAMS; |
1102 | } | 1108 | } |
1103 | 1109 | ||
1104 | return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem); | 1110 | return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); |
1105 | } | 1111 | } |
1106 | 1112 | ||
1107 | 1113 | ||
1108 | static PVRSRV_ERROR UnmapDeviceMemoryCallBack(IMG_PVOID pvParam, | 1114 | static PVRSRV_ERROR UnmapDeviceMemoryCallBack(IMG_PVOID pvParam, |
1109 | IMG_UINT32 ui32Param) | 1115 | IMG_UINT32 ui32Param, |
1116 | IMG_BOOL bDummy) | ||
1110 | { | 1117 | { |
1111 | PVRSRV_ERROR eError; | 1118 | PVRSRV_ERROR eError; |
1112 | RESMAN_MAP_DEVICE_MEM_DATA *psMapData = pvParam; | 1119 | RESMAN_MAP_DEVICE_MEM_DATA *psMapData = pvParam; |
1113 | 1120 | ||
1114 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 1121 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
1122 | PVR_UNREFERENCED_PARAMETER(bDummy); | ||
1115 | 1123 | ||
1116 | if(psMapData->psMemInfo->sMemBlk.psIntSysPAddr) | 1124 | if(psMapData->psMemInfo->sMemBlk.psIntSysPAddr) |
1117 | { | 1125 | { |
@@ -1350,17 +1358,19 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceClassMemoryKM(PVRSRV_KERNEL_MEM_INFO | |||
1350 | return PVRSRV_ERROR_INVALID_PARAMS; | 1358 | return PVRSRV_ERROR_INVALID_PARAMS; |
1351 | } | 1359 | } |
1352 | 1360 | ||
1353 | return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem); | 1361 | return ResManFreeResByPtr(psMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); |
1354 | } | 1362 | } |
1355 | 1363 | ||
1356 | 1364 | ||
1357 | static PVRSRV_ERROR UnmapDeviceClassMemoryCallBack(IMG_PVOID pvParam, | 1365 | static PVRSRV_ERROR UnmapDeviceClassMemoryCallBack(IMG_PVOID pvParam, |
1358 | IMG_UINT32 ui32Param) | 1366 | IMG_UINT32 ui32Param, |
1367 | IMG_BOOL bDummy) | ||
1359 | { | 1368 | { |
1360 | PVRSRV_DC_MAPINFO *psDCMapInfo = pvParam; | 1369 | PVRSRV_DC_MAPINFO *psDCMapInfo = pvParam; |
1361 | PVRSRV_KERNEL_MEM_INFO *psMemInfo; | 1370 | PVRSRV_KERNEL_MEM_INFO *psMemInfo; |
1362 | 1371 | ||
1363 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 1372 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
1373 | PVR_UNREFERENCED_PARAMETER(bDummy); | ||
1364 | 1374 | ||
1365 | psMemInfo = psDCMapInfo->psMemInfo; | 1375 | psMemInfo = psDCMapInfo->psMemInfo; |
1366 | 1376 | ||
@@ -1378,9 +1388,6 @@ static PVRSRV_ERROR UnmapDeviceClassMemoryCallBack(IMG_PVOID pvParam, | |||
1378 | #endif | 1388 | #endif |
1379 | 1389 | ||
1380 | (psDCMapInfo->psDeviceClassBuffer->ui32MemMapRefCount)--; | 1390 | (psDCMapInfo->psDeviceClassBuffer->ui32MemMapRefCount)--; |
1381 | PVR_TRACE(("decrementing (0x%p) psDCMapInfo->psDeviceClassBuffer->ui32MemMapRefCount... == %d", | ||
1382 | psDCMapInfo->psDeviceClassBuffer, | ||
1383 | psDCMapInfo->psDeviceClassBuffer->ui32MemMapRefCount)); | ||
1384 | 1391 | ||
1385 | OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DC_MAPINFO), psDCMapInfo, IMG_NULL); | 1392 | OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DC_MAPINFO), psDCMapInfo, IMG_NULL); |
1386 | 1393 | ||
@@ -1588,10 +1595,6 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA * | |||
1588 | &UnmapDeviceClassMemoryCallBack); | 1595 | &UnmapDeviceClassMemoryCallBack); |
1589 | 1596 | ||
1590 | (psDeviceClassBuffer->ui32MemMapRefCount)++; | 1597 | (psDeviceClassBuffer->ui32MemMapRefCount)++; |
1591 | PVR_TRACE(("incrementing (0x%p) psDeviceClassBuffer->ui32MemMapRefCount... == %d", | ||
1592 | psDeviceClassBuffer, | ||
1593 | psDeviceClassBuffer->ui32MemMapRefCount)); | ||
1594 | |||
1595 | psMemInfo->ui32RefCount++; | 1598 | psMemInfo->ui32RefCount++; |
1596 | 1599 | ||
1597 | psMemInfo->memType = PVRSRV_MEMTYPE_DEVICECLASS; | 1600 | psMemInfo->memType = PVRSRV_MEMTYPE_DEVICECLASS; |
diff --git a/drivers/gpu/pvr/event.c b/drivers/gpu/pvr/event.c index e8797c4ecb9..888871b3a92 100644 --- a/drivers/gpu/pvr/event.c +++ b/drivers/gpu/pvr/event.c | |||
@@ -140,7 +140,7 @@ PVRSRV_ERROR LinuxEventObjectDelete(IMG_HANDLE hOSEventObjectList, IMG_HANDLE hO | |||
140 | #if defined(DEBUG) | 140 | #if defined(DEBUG) |
141 | PVR_DPF((PVR_DBG_MESSAGE, "LinuxEventObjectListDelete: Event object waits: %u", psLinuxEventObject->ui32Stats)); | 141 | PVR_DPF((PVR_DBG_MESSAGE, "LinuxEventObjectListDelete: Event object waits: %u", psLinuxEventObject->ui32Stats)); |
142 | #endif | 142 | #endif |
143 | if(ResManFreeResByPtr(psLinuxEventObject->hResItem) != PVRSRV_OK) | 143 | if(ResManFreeResByPtr(psLinuxEventObject->hResItem, CLEANUP_WITH_POLL) != PVRSRV_OK) |
144 | { | 144 | { |
145 | return PVRSRV_ERROR_UNABLE_TO_DESTROY_EVENT; | 145 | return PVRSRV_ERROR_UNABLE_TO_DESTROY_EVENT; |
146 | } | 146 | } |
@@ -152,13 +152,14 @@ PVRSRV_ERROR LinuxEventObjectDelete(IMG_HANDLE hOSEventObjectList, IMG_HANDLE hO | |||
152 | 152 | ||
153 | } | 153 | } |
154 | 154 | ||
155 | static PVRSRV_ERROR LinuxEventObjectDeleteCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param) | 155 | static PVRSRV_ERROR LinuxEventObjectDeleteCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bForceCleanup) |
156 | { | 156 | { |
157 | PVRSRV_LINUX_EVENT_OBJECT *psLinuxEventObject = pvParam; | 157 | PVRSRV_LINUX_EVENT_OBJECT *psLinuxEventObject = pvParam; |
158 | PVRSRV_LINUX_EVENT_OBJECT_LIST *psLinuxEventObjectList = psLinuxEventObject->psLinuxEventObjectList; | 158 | PVRSRV_LINUX_EVENT_OBJECT_LIST *psLinuxEventObjectList = psLinuxEventObject->psLinuxEventObjectList; |
159 | unsigned long ulLockFlags; | 159 | unsigned long ulLockFlags; |
160 | 160 | ||
161 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 161 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
162 | PVR_UNREFERENCED_PARAMETER(bForceCleanup); | ||
162 | 163 | ||
163 | write_lock_irqsave(&psLinuxEventObjectList->sLock, ulLockFlags); | 164 | write_lock_irqsave(&psLinuxEventObjectList->sLock, ulLockFlags); |
164 | list_del(&psLinuxEventObject->sList); | 165 | list_del(&psLinuxEventObject->sList); |
diff --git a/drivers/gpu/pvr/img_defs.h b/drivers/gpu/pvr/img_defs.h index 3ef43aad611..8ca49d2d076 100644 --- a/drivers/gpu/pvr/img_defs.h +++ b/drivers/gpu/pvr/img_defs.h | |||
@@ -109,6 +109,9 @@ typedef char TCHAR, *PTCHAR, *PTSTR; | |||
109 | #define IMG_FORMAT_PRINTF(x,y) | 109 | #define IMG_FORMAT_PRINTF(x,y) |
110 | #endif | 110 | #endif |
111 | 111 | ||
112 | #define CLEANUP_WITH_POLL IMG_FALSE | ||
113 | #define FORCE_CLEANUP IMG_TRUE | ||
114 | |||
112 | #if defined (_WIN64) | 115 | #if defined (_WIN64) |
113 | #define IMG_UNDEF (~0ULL) | 116 | #define IMG_UNDEF (~0ULL) |
114 | #else | 117 | #else |
diff --git a/drivers/gpu/pvr/img_types.h b/drivers/gpu/pvr/img_types.h index 4401f4dd92c..3800afb5644 100644 --- a/drivers/gpu/pvr/img_types.h +++ b/drivers/gpu/pvr/img_types.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. | 3 | * Copyright (C) Imagination Technologies Ltd. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
@@ -104,6 +104,13 @@ typedef void** IMG_HVOID, * IMG_PHVOID; | |||
104 | typedef IMG_UINT32 IMG_SID; | 104 | typedef IMG_UINT32 IMG_SID; |
105 | 105 | ||
106 | typedef IMG_UINT32 IMG_EVENTSID; | 106 | typedef IMG_UINT32 IMG_EVENTSID; |
107 | |||
108 | #if defined(SUPPORT_SID_INTERFACE) | ||
109 | typedef IMG_SID IMG_S_HANDLE; | ||
110 | #else | ||
111 | typedef IMG_HANDLE IMG_S_HANDLE; | ||
112 | #endif | ||
113 | |||
107 | typedef IMG_PVOID IMG_CPU_VIRTADDR; | 114 | typedef IMG_PVOID IMG_CPU_VIRTADDR; |
108 | 115 | ||
109 | typedef struct _IMG_DEV_VIRTADDR | 116 | typedef struct _IMG_DEV_VIRTADDR |
diff --git a/drivers/gpu/pvr/mem.c b/drivers/gpu/pvr/mem.c index f71644e572f..5b5d1ac541a 100644 --- a/drivers/gpu/pvr/mem.c +++ b/drivers/gpu/pvr/mem.c | |||
@@ -29,12 +29,14 @@ | |||
29 | 29 | ||
30 | 30 | ||
31 | static PVRSRV_ERROR | 31 | static PVRSRV_ERROR |
32 | FreeSharedSysMemCallBack(IMG_PVOID pvParam, | 32 | FreeSharedSysMemCallBack(IMG_PVOID pvParam, |
33 | IMG_UINT32 ui32Param) | 33 | IMG_UINT32 ui32Param, |
34 | IMG_BOOL bDummy) | ||
34 | { | 35 | { |
35 | PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = pvParam; | 36 | PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = pvParam; |
36 | 37 | ||
37 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 38 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
39 | PVR_UNREFERENCED_PARAMETER(bDummy); | ||
38 | 40 | ||
39 | OSFreePages(psKernelMemInfo->ui32Flags, | 41 | OSFreePages(psKernelMemInfo->ui32Flags, |
40 | psKernelMemInfo->uAllocSize, | 42 | psKernelMemInfo->uAllocSize, |
@@ -111,11 +113,11 @@ PVRSRVFreeSharedSysMemoryKM(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo) | |||
111 | 113 | ||
112 | if(psKernelMemInfo->sMemBlk.hResItem) | 114 | if(psKernelMemInfo->sMemBlk.hResItem) |
113 | { | 115 | { |
114 | eError = ResManFreeResByPtr(psKernelMemInfo->sMemBlk.hResItem); | 116 | eError = ResManFreeResByPtr(psKernelMemInfo->sMemBlk.hResItem, CLEANUP_WITH_POLL); |
115 | } | 117 | } |
116 | else | 118 | else |
117 | { | 119 | { |
118 | eError = FreeSharedSysMemCallBack(psKernelMemInfo, 0); | 120 | eError = FreeSharedSysMemCallBack(psKernelMemInfo, 0, CLEANUP_WITH_POLL); |
119 | } | 121 | } |
120 | 122 | ||
121 | return eError; | 123 | return eError; |
diff --git a/drivers/gpu/pvr/module.c b/drivers/gpu/pvr/module.c index cb05ea76cbf..f689f363d4c 100644 --- a/drivers/gpu/pvr/module.c +++ b/drivers/gpu/pvr/module.c | |||
@@ -28,7 +28,9 @@ | |||
28 | #include <linux/config.h> | 28 | #include <linux/config.h> |
29 | #endif | 29 | #endif |
30 | 30 | ||
31 | #if !defined(SUPPORT_DRI_DRM) | 31 | #if defined(SUPPORT_DRI_DRM) |
32 | #define PVR_MOD_STATIC | ||
33 | #else | ||
32 | 34 | ||
33 | #if defined(LDM_PLATFORM) | 35 | #if defined(LDM_PLATFORM) |
34 | #define PVR_LDM_PLATFORM_MODULE | 36 | #define PVR_LDM_PLATFORM_MODULE |
@@ -39,6 +41,13 @@ | |||
39 | #define PVR_LDM_MODULE | 41 | #define PVR_LDM_MODULE |
40 | #endif | 42 | #endif |
41 | #endif | 43 | #endif |
44 | #define PVR_MOD_STATIC static | ||
45 | #endif | ||
46 | |||
47 | #if defined(PVR_LDM_PLATFORM_PRE_REGISTERED) | ||
48 | #if !defined(NO_HARDWARE) | ||
49 | #define PVR_USE_PRE_REGISTERED_PLATFORM_DEV | ||
50 | #endif | ||
42 | #endif | 51 | #endif |
43 | 52 | ||
44 | #include <linux/init.h> | 53 | #include <linux/init.h> |
@@ -152,7 +161,6 @@ static IMG_UINT32 gPVRPowerLevel; | |||
152 | #define LDM_DEV struct pci_dev | 161 | #define LDM_DEV struct pci_dev |
153 | #define LDM_DRV struct pci_driver | 162 | #define LDM_DRV struct pci_driver |
154 | #endif | 163 | #endif |
155 | |||
156 | #if defined(PVR_LDM_PLATFORM_MODULE) | 164 | #if defined(PVR_LDM_PLATFORM_MODULE) |
157 | static int PVRSRVDriverRemove(LDM_DEV *device); | 165 | static int PVRSRVDriverRemove(LDM_DEV *device); |
158 | static int PVRSRVDriverProbe(LDM_DEV *device); | 166 | static int PVRSRVDriverProbe(LDM_DEV *device); |
@@ -167,16 +175,23 @@ static int PVRSRVDriverResume(LDM_DEV *device); | |||
167 | 175 | ||
168 | #if defined(PVR_LDM_PCI_MODULE) | 176 | #if defined(PVR_LDM_PCI_MODULE) |
169 | struct pci_device_id powervr_id_table[] __devinitdata = { | 177 | struct pci_device_id powervr_id_table[] __devinitdata = { |
170 | { PCI_DEVICE(SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV_DEVICE_ID) }, | 178 | {PCI_DEVICE(SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV_DEVICE_ID)}, |
171 | #if defined (SYS_SGX_DEV1_DEVICE_ID) | 179 | #if defined (SYS_SGX_DEV1_DEVICE_ID) |
172 | { PCI_DEVICE(SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV1_DEVICE_ID) }, | 180 | {PCI_DEVICE(SYS_SGX_DEV_VENDOR_ID, SYS_SGX_DEV1_DEVICE_ID)}, |
173 | #endif | 181 | #endif |
174 | { 0 } | 182 | {0} |
175 | }; | 183 | }; |
176 | 184 | ||
177 | MODULE_DEVICE_TABLE(pci, powervr_id_table); | 185 | MODULE_DEVICE_TABLE(pci, powervr_id_table); |
178 | #endif | 186 | #endif |
179 | 187 | ||
188 | #if defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) | ||
189 | static struct platform_device_id powervr_id_table[] __devinitdata = { | ||
190 | {SYS_SGX_DEV_NAME, 0}, | ||
191 | {} | ||
192 | }; | ||
193 | #endif | ||
194 | |||
180 | static LDM_DRV powervr_driver = { | 195 | static LDM_DRV powervr_driver = { |
181 | #if defined(PVR_LDM_PLATFORM_MODULE) | 196 | #if defined(PVR_LDM_PLATFORM_MODULE) |
182 | .driver = { | 197 | .driver = { |
@@ -185,6 +200,8 @@ static LDM_DRV powervr_driver = { | |||
185 | #endif | 200 | #endif |
186 | #if defined(PVR_LDM_PCI_MODULE) | 201 | #if defined(PVR_LDM_PCI_MODULE) |
187 | .name = DRVNAME, | 202 | .name = DRVNAME, |
203 | #endif | ||
204 | #if defined(PVR_LDM_PCI_MODULE) || defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) | ||
188 | .id_table = powervr_id_table, | 205 | .id_table = powervr_id_table, |
189 | #endif | 206 | #endif |
190 | .probe = PVRSRVDriverProbe, | 207 | .probe = PVRSRVDriverProbe, |
@@ -201,9 +218,9 @@ static LDM_DRV powervr_driver = { | |||
201 | 218 | ||
202 | LDM_DEV *gpsPVRLDMDev; | 219 | LDM_DEV *gpsPVRLDMDev; |
203 | 220 | ||
204 | #if defined(MODULE) && defined(PVR_LDM_PLATFORM_MODULE) | 221 | #if defined(MODULE) && defined(PVR_LDM_PLATFORM_MODULE) && \ |
205 | 222 | !defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) | |
206 | static IMG_VOID PVRSRVDeviceRelease(struct device unref__ *pDevice) | 223 | static void PVRSRVDeviceRelease(struct device unref__ *pDevice) |
207 | { | 224 | { |
208 | } | 225 | } |
209 | 226 | ||
@@ -214,8 +231,7 @@ static struct platform_device powervr_device = { | |||
214 | .release = PVRSRVDeviceRelease | 231 | .release = PVRSRVDeviceRelease |
215 | } | 232 | } |
216 | }; | 233 | }; |
217 | 234 | #endif | |
218 | #endif | ||
219 | 235 | ||
220 | #if defined(PVR_LDM_PLATFORM_MODULE) | 236 | #if defined(PVR_LDM_PLATFORM_MODULE) |
221 | static int PVRSRVDriverProbe(LDM_DEV *pDevice) | 237 | static int PVRSRVDriverProbe(LDM_DEV *pDevice) |
@@ -273,7 +289,7 @@ static void __devexit PVRSRVDriverRemove(LDM_DEV *pDevice) | |||
273 | } | 289 | } |
274 | } | 290 | } |
275 | #endif | 291 | #endif |
276 | (IMG_VOID)SysDeinitialise(psSysData); | 292 | (void) SysDeinitialise(psSysData); |
277 | 293 | ||
278 | gpsPVRLDMDev = IMG_NULL; | 294 | gpsPVRLDMDev = IMG_NULL; |
279 | 295 | ||
@@ -291,23 +307,25 @@ static void __devexit PVRSRVDriverRemove(LDM_DEV *pDevice) | |||
291 | return; | 307 | return; |
292 | #endif | 308 | #endif |
293 | } | 309 | } |
310 | #endif | ||
294 | 311 | ||
295 | 312 | ||
296 | static IMG_VOID PVRSRVDriverShutdown(LDM_DEV *pDevice) | 313 | #if defined(PVR_LDM_MODULE) || defined(PVR_DRI_DRM_PLATFORM_DEV) |
314 | PVR_MOD_STATIC void PVRSRVDriverShutdown(LDM_DEV *pDevice) | ||
297 | { | 315 | { |
298 | PVR_TRACE(("PVRSRVDriverShutdown(pDevice=%p)", pDevice)); | 316 | PVR_TRACE(("PVRSRVDriverShutdown(pDevice=%p)", pDevice)); |
299 | 317 | ||
300 | (IMG_VOID) PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D3); | 318 | (void) PVRSRVSetPowerStateKM(PVRSRV_SYS_POWER_STATE_D3); |
301 | } | 319 | } |
302 | 320 | ||
303 | #endif | 321 | #endif |
304 | 322 | ||
305 | 323 | ||
306 | #if defined(PVR_LDM_MODULE) || defined(SUPPORT_DRI_DRM) | 324 | #if defined(PVR_LDM_MODULE) || defined(SUPPORT_DRI_DRM) |
307 | #if defined(SUPPORT_DRI_DRM) | 325 | #if defined(SUPPORT_DRI_DRM) && !defined(PVR_DRI_DRM_PLATFORM_DEV) |
308 | int PVRSRVDriverSuspend(struct drm_device *pDevice, pm_message_t state) | 326 | int PVRSRVDriverSuspend(struct drm_device *pDevice, pm_message_t state) |
309 | #else | 327 | #else |
310 | static int PVRSRVDriverSuspend(LDM_DEV *pDevice, pm_message_t state) | 328 | PVR_MOD_STATIC int PVRSRVDriverSuspend(LDM_DEV *pDevice, pm_message_t state) |
311 | #endif | 329 | #endif |
312 | { | 330 | { |
313 | #if !(defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) && !defined(SUPPORT_DRI_DRM)) | 331 | #if !(defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) && !defined(SUPPORT_DRI_DRM)) |
@@ -322,10 +340,10 @@ static int PVRSRVDriverSuspend(LDM_DEV *pDevice, pm_message_t state) | |||
322 | } | 340 | } |
323 | 341 | ||
324 | 342 | ||
325 | #if defined(SUPPORT_DRI_DRM) | 343 | #if defined(SUPPORT_DRI_DRM) && !defined(PVR_DRI_DRM_PLATFORM_DEV) |
326 | int PVRSRVDriverResume(struct drm_device *pDevice) | 344 | int PVRSRVDriverResume(struct drm_device *pDevice) |
327 | #else | 345 | #else |
328 | static int PVRSRVDriverResume(LDM_DEV *pDevice) | 346 | PVR_MOD_STATIC int PVRSRVDriverResume(LDM_DEV *pDevice) |
329 | #endif | 347 | #endif |
330 | { | 348 | { |
331 | #if !(defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) && !defined(SUPPORT_DRI_DRM)) | 349 | #if !(defined(DEBUG) && defined(PVR_MANUAL_POWER_CONTROL) && !defined(SUPPORT_DRI_DRM)) |
@@ -492,9 +510,9 @@ static int PVRSRVRelease(struct inode unref__ * pInode, struct file *pFile) | |||
492 | 510 | ||
493 | 511 | ||
494 | #if defined(SUPPORT_DRI_DRM) | 512 | #if defined(SUPPORT_DRI_DRM) |
495 | int PVRCore_Init(IMG_VOID) | 513 | int PVRCore_Init(void) |
496 | #else | 514 | #else |
497 | static int __init PVRCore_Init(IMG_VOID) | 515 | static int __init PVRCore_Init(void) |
498 | #endif | 516 | #endif |
499 | { | 517 | { |
500 | int error; | 518 | int error; |
@@ -546,7 +564,7 @@ static int __init PVRCore_Init(IMG_VOID) | |||
546 | goto init_failed; | 564 | goto init_failed; |
547 | } | 565 | } |
548 | 566 | ||
549 | #if defined(MODULE) | 567 | #if defined(MODULE) && !defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) |
550 | if ((error = platform_device_register(&powervr_device)) != 0) | 568 | if ((error = platform_device_register(&powervr_device)) != 0) |
551 | { | 569 | { |
552 | platform_driver_unregister(&powervr_driver); | 570 | platform_driver_unregister(&powervr_driver); |
@@ -638,7 +656,7 @@ sys_deinit: | |||
638 | #endif | 656 | #endif |
639 | 657 | ||
640 | #if defined (PVR_LDM_PLATFORM_MODULE) | 658 | #if defined (PVR_LDM_PLATFORM_MODULE) |
641 | #if defined (MODULE) | 659 | #if defined(MODULE) && !defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) |
642 | platform_device_unregister(&powervr_device); | 660 | platform_device_unregister(&powervr_device); |
643 | #endif | 661 | #endif |
644 | platform_driver_unregister(&powervr_driver); | 662 | platform_driver_unregister(&powervr_driver); |
@@ -652,7 +670,7 @@ sys_deinit: | |||
652 | psSysData = SysAcquireDataNoCheck(); | 670 | psSysData = SysAcquireDataNoCheck(); |
653 | if (psSysData != IMG_NULL) | 671 | if (psSysData != IMG_NULL) |
654 | { | 672 | { |
655 | (IMG_VOID)SysDeinitialise(psSysData); | 673 | (void) SysDeinitialise(psSysData); |
656 | } | 674 | } |
657 | } | 675 | } |
658 | #endif | 676 | #endif |
@@ -674,11 +692,14 @@ void PVRCore_Cleanup(void) | |||
674 | static void __exit PVRCore_Cleanup(void) | 692 | static void __exit PVRCore_Cleanup(void) |
675 | #endif | 693 | #endif |
676 | { | 694 | { |
695 | #if !defined(PVR_LDM_MODULE) | ||
677 | SYS_DATA *psSysData; | 696 | SYS_DATA *psSysData; |
678 | 697 | #endif | |
679 | PVR_TRACE(("PVRCore_Cleanup")); | 698 | PVR_TRACE(("PVRCore_Cleanup")); |
680 | 699 | ||
700 | #if !defined(PVR_LDM_MODULE) | ||
681 | SysAcquireData(&psSysData); | 701 | SysAcquireData(&psSysData); |
702 | #endif | ||
682 | 703 | ||
683 | #if defined(PVR_LDM_MODULE) | 704 | #if defined(PVR_LDM_MODULE) |
684 | device_destroy(psPvrClass, MKDEV(AssignedMajorNumber, 0)); | 705 | device_destroy(psPvrClass, MKDEV(AssignedMajorNumber, 0)); |
@@ -707,7 +728,7 @@ static void __exit PVRCore_Cleanup(void) | |||
707 | #endif | 728 | #endif |
708 | 729 | ||
709 | #if defined (PVR_LDM_PLATFORM_MODULE) | 730 | #if defined (PVR_LDM_PLATFORM_MODULE) |
710 | #if defined (MODULE) | 731 | #if defined(MODULE) && !defined(PVR_USE_PRE_REGISTERED_PLATFORM_DEV) |
711 | platform_device_unregister(&powervr_device); | 732 | platform_device_unregister(&powervr_device); |
712 | #endif | 733 | #endif |
713 | platform_driver_unregister(&powervr_driver); | 734 | platform_driver_unregister(&powervr_driver); |
@@ -741,6 +762,6 @@ static void __exit PVRCore_Cleanup(void) | |||
741 | } | 762 | } |
742 | 763 | ||
743 | #if !defined(SUPPORT_DRI_DRM) | 764 | #if !defined(SUPPORT_DRI_DRM) |
744 | late_initcall(PVRCore_Init); | 765 | module_init(PVRCore_Init); |
745 | module_exit(PVRCore_Cleanup); | 766 | module_exit(PVRCore_Cleanup); |
746 | #endif | 767 | #endif |
diff --git a/drivers/gpu/pvr/omap4/sysconfig.c b/drivers/gpu/pvr/omap4/sysconfig.c index f08bf8e13fc..5c82be77d46 100644 --- a/drivers/gpu/pvr/omap4/sysconfig.c +++ b/drivers/gpu/pvr/omap4/sysconfig.c | |||
@@ -24,28 +24,18 @@ | |||
24 | * | 24 | * |
25 | ******************************************************************************/ | 25 | ******************************************************************************/ |
26 | 26 | ||
27 | #include "sysconfig.h" | ||
27 | #include "services_headers.h" | 28 | #include "services_headers.h" |
28 | #include "kerneldisplay.h" | 29 | #include "kerneldisplay.h" |
29 | #include "oemfuncs.h" | 30 | #include "oemfuncs.h" |
30 | #include "sgxinfo.h" | 31 | #include "sgxinfo.h" |
31 | #include "sgxinfokm.h" | 32 | #include "sgxinfokm.h" |
32 | #include "syslocal.h" | 33 | #include "syslocal.h" |
33 | #include "sysconfig.h" | ||
34 | |||
35 | #include <linux/platform_device.h> | ||
36 | #include <plat/omap_device.h> | ||
37 | #include <plat/omap-pm.h> | ||
38 | 34 | ||
39 | #include "ocpdefs.h" | 35 | #include "ocpdefs.h" |
40 | 36 | ||
41 | #if !defined(NO_HARDWARE) && \ | 37 | #if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI) |
42 | defined(SYS_USING_INTERRUPTS) && \ | 38 | #include <plat/omap_device.h> |
43 | defined(SGX540) | ||
44 | #define SGX_OCP_REGS_ENABLED | ||
45 | #endif | ||
46 | |||
47 | #if defined(LDM_PLATFORM) && !defined(SUPPORT_DRI_DRM) | ||
48 | extern struct platform_device *gpsPVRLDMDev; | ||
49 | #endif | 39 | #endif |
50 | 40 | ||
51 | SYS_DATA* gpsSysData = (SYS_DATA*)IMG_NULL; | 41 | SYS_DATA* gpsSysData = (SYS_DATA*)IMG_NULL; |
@@ -60,10 +50,14 @@ static PVRSRV_DEVICE_NODE *gpsSGXDevNode; | |||
60 | 50 | ||
61 | #define DEVICE_SGX_INTERRUPT (1 << 0) | 51 | #define DEVICE_SGX_INTERRUPT (1 << 0) |
62 | 52 | ||
63 | #if defined(NO_HARDWARE) | 53 | #if defined(NO_HARDWARE) || defined(SGX_OCP_REGS_ENABLED) |
64 | static IMG_CPU_VIRTADDR gsSGXRegsCPUVAddr; | 54 | static IMG_CPU_VIRTADDR gsSGXRegsCPUVAddr; |
65 | #endif | 55 | #endif |
66 | 56 | ||
57 | #if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI) | ||
58 | extern struct platform_device *gpsPVRLDMDev; | ||
59 | #endif | ||
60 | |||
67 | IMG_UINT32 PVRSRV_BridgeDispatchKM(IMG_UINT32 Ioctl, | 61 | IMG_UINT32 PVRSRV_BridgeDispatchKM(IMG_UINT32 Ioctl, |
68 | IMG_BYTE *pInBuf, | 62 | IMG_BYTE *pInBuf, |
69 | IMG_UINT32 InBufLen, | 63 | IMG_UINT32 InBufLen, |
@@ -73,25 +67,19 @@ IMG_UINT32 PVRSRV_BridgeDispatchKM(IMG_UINT32 Ioctl, | |||
73 | 67 | ||
74 | #if defined(SGX_OCP_REGS_ENABLED) | 68 | #if defined(SGX_OCP_REGS_ENABLED) |
75 | 69 | ||
76 | #define SYS_OMAP4430_OCP_REGS_SYS_PHYS_BASE (SYS_OMAP4430_SGX_REGS_SYS_PHYS_BASE + EUR_CR_OCP_REVISION) | ||
77 | #define SYS_OMAP4430_OCP_REGS_SIZE 0x110 | ||
78 | |||
79 | static IMG_CPU_VIRTADDR gpvOCPRegsLinAddr; | 70 | static IMG_CPU_VIRTADDR gpvOCPRegsLinAddr; |
80 | 71 | ||
81 | static PVRSRV_ERROR EnableSGXClocksWrap(SYS_DATA *psSysData) | 72 | static PVRSRV_ERROR EnableSGXClocksWrap(SYS_DATA *psSysData) |
82 | { | 73 | { |
83 | PVRSRV_ERROR eError = EnableSGXClocks(psSysData); | 74 | PVRSRV_ERROR eError = EnableSGXClocks(psSysData); |
84 | 75 | ||
76 | #if !defined(SGX_OCP_NO_INT_BYPASS) | ||
85 | if(eError == PVRSRV_OK) | 77 | if(eError == PVRSRV_OK) |
86 | { | 78 | { |
87 | OSWriteHWReg(gpvOCPRegsLinAddr, | 79 | OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_SYSCONFIG, 0x14); |
88 | EUR_CR_OCP_SYSCONFIG - EUR_CR_OCP_REVISION, | 80 | OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_DEBUG_CONFIG, EUR_CR_OCP_DEBUG_CONFIG_THALIA_INT_BYPASS_MASK); |
89 | 0x14); | ||
90 | OSWriteHWReg(gpvOCPRegsLinAddr, | ||
91 | EUR_CR_OCP_DEBUG_CONFIG - EUR_CR_OCP_REVISION, | ||
92 | EUR_CR_OCP_DEBUG_CONFIG_THALIA_INT_BYPASS_MASK); | ||
93 | } | 81 | } |
94 | 82 | #endif | |
95 | return eError; | 83 | return eError; |
96 | } | 84 | } |
97 | 85 | ||
@@ -112,7 +100,11 @@ static INLINE PVRSRV_ERROR EnableSystemClocksWrap(SYS_DATA *psSysData) | |||
112 | if(eError == PVRSRV_OK) | 100 | if(eError == PVRSRV_OK) |
113 | { | 101 | { |
114 | 102 | ||
115 | EnableSGXClocksWrap(psSysData); | 103 | eError = EnableSGXClocksWrap(psSysData); |
104 | if (eError != PVRSRV_OK) | ||
105 | { | ||
106 | DisableSystemClocks(psSysData); | ||
107 | } | ||
116 | } | 108 | } |
117 | #endif | 109 | #endif |
118 | 110 | ||
@@ -124,6 +116,11 @@ static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData) | |||
124 | #if defined(NO_HARDWARE) | 116 | #if defined(NO_HARDWARE) |
125 | PVRSRV_ERROR eError; | 117 | PVRSRV_ERROR eError; |
126 | IMG_CPU_PHYADDR sCpuPAddr; | 118 | IMG_CPU_PHYADDR sCpuPAddr; |
119 | #else | ||
120 | #if defined(PVR_LINUX_DYNAMIC_SGX_RESOURCE_INFO) | ||
121 | struct resource *dev_res; | ||
122 | int dev_irq; | ||
123 | #endif | ||
127 | #endif | 124 | #endif |
128 | 125 | ||
129 | PVR_UNREFERENCED_PARAMETER(psSysData); | 126 | PVR_UNREFERENCED_PARAMETER(psSysData); |
@@ -134,7 +131,9 @@ static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData) | |||
134 | #if defined(NO_HARDWARE) | 131 | #if defined(NO_HARDWARE) |
135 | 132 | ||
136 | 133 | ||
137 | eError = OSBaseAllocContigMemory(SYS_OMAP4430_SGX_REGS_SIZE, | 134 | gsSGXDeviceMap.ui32RegsSize = SYS_OMAP4430_SGX_REGS_SIZE; |
135 | |||
136 | eError = OSBaseAllocContigMemory(gsSGXDeviceMap.ui32RegsSize, | ||
138 | &gsSGXRegsCPUVAddr, | 137 | &gsSGXRegsCPUVAddr, |
139 | &sCpuPAddr); | 138 | &sCpuPAddr); |
140 | if(eError != PVRSRV_OK) | 139 | if(eError != PVRSRV_OK) |
@@ -143,7 +142,6 @@ static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData) | |||
143 | } | 142 | } |
144 | gsSGXDeviceMap.sRegsCpuPBase = sCpuPAddr; | 143 | gsSGXDeviceMap.sRegsCpuPBase = sCpuPAddr; |
145 | gsSGXDeviceMap.sRegsSysPBase = SysCpuPAddrToSysPAddr(gsSGXDeviceMap.sRegsCpuPBase); | 144 | gsSGXDeviceMap.sRegsSysPBase = SysCpuPAddrToSysPAddr(gsSGXDeviceMap.sRegsCpuPBase); |
146 | gsSGXDeviceMap.ui32RegsSize = SYS_OMAP4430_SGX_REGS_SIZE; | ||
147 | #if defined(__linux__) | 145 | #if defined(__linux__) |
148 | 146 | ||
149 | gsSGXDeviceMap.pvRegsCpuVBase = gsSGXRegsCPUVAddr; | 147 | gsSGXDeviceMap.pvRegsCpuVBase = gsSGXRegsCPUVAddr; |
@@ -152,7 +150,7 @@ static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData) | |||
152 | gsSGXDeviceMap.pvRegsCpuVBase = IMG_NULL; | 150 | gsSGXDeviceMap.pvRegsCpuVBase = IMG_NULL; |
153 | #endif | 151 | #endif |
154 | 152 | ||
155 | OSMemSet(gsSGXRegsCPUVAddr, 0, SYS_OMAP4430_SGX_REGS_SIZE); | 153 | OSMemSet(gsSGXRegsCPUVAddr, 0, gsSGXDeviceMap.ui32RegsSize); |
156 | 154 | ||
157 | 155 | ||
158 | 156 | ||
@@ -160,13 +158,56 @@ static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData) | |||
160 | gsSGXDeviceMap.ui32IRQ = 0; | 158 | gsSGXDeviceMap.ui32IRQ = 0; |
161 | 159 | ||
162 | #else | 160 | #else |
161 | #if defined(PVR_LINUX_DYNAMIC_SGX_RESOURCE_INFO) | ||
162 | |||
163 | dev_res = platform_get_resource(gpsPVRLDMDev, IORESOURCE_MEM, 0); | ||
164 | if (dev_res == NULL) | ||
165 | { | ||
166 | PVR_DPF((PVR_DBG_ERROR, "%s: platform_get_resource failed", __FUNCTION__)); | ||
167 | return PVRSRV_ERROR_INVALID_DEVICE; | ||
168 | } | ||
169 | |||
170 | dev_irq = platform_get_irq(gpsPVRLDMDev, 0); | ||
171 | if (dev_irq < 0) | ||
172 | { | ||
173 | PVR_DPF((PVR_DBG_ERROR, "%s: platform_get_irq failed (%d)", __FUNCTION__, -dev_irq)); | ||
174 | return PVRSRV_ERROR_INVALID_DEVICE; | ||
175 | } | ||
176 | |||
177 | gsSGXDeviceMap.sRegsSysPBase.uiAddr = dev_res->start; | ||
178 | gsSGXDeviceMap.sRegsCpuPBase = | ||
179 | SysSysPAddrToCpuPAddr(gsSGXDeviceMap.sRegsSysPBase); | ||
180 | PVR_TRACE(("SGX register base: 0x%lx", (unsigned long)gsSGXDeviceMap.sRegsCpuPBase.uiAddr)); | ||
163 | 181 | ||
182 | gsSGXDeviceMap.ui32RegsSize = (unsigned int)(dev_res->end - dev_res->start); | ||
183 | PVR_TRACE(("SGX register size: %d",gsSGXDeviceMap.ui32RegsSize)); | ||
184 | |||
185 | gsSGXDeviceMap.ui32IRQ = dev_irq; | ||
186 | PVR_TRACE(("SGX IRQ: %d", gsSGXDeviceMap.ui32IRQ)); | ||
187 | #else | ||
164 | gsSGXDeviceMap.sRegsSysPBase.uiAddr = SYS_OMAP4430_SGX_REGS_SYS_PHYS_BASE; | 188 | gsSGXDeviceMap.sRegsSysPBase.uiAddr = SYS_OMAP4430_SGX_REGS_SYS_PHYS_BASE; |
165 | gsSGXDeviceMap.sRegsCpuPBase = SysSysPAddrToCpuPAddr(gsSGXDeviceMap.sRegsSysPBase); | 189 | gsSGXDeviceMap.sRegsCpuPBase = SysSysPAddrToCpuPAddr(gsSGXDeviceMap.sRegsSysPBase); |
166 | gsSGXDeviceMap.ui32RegsSize = SYS_OMAP4430_SGX_REGS_SIZE; | 190 | gsSGXDeviceMap.ui32RegsSize = SYS_OMAP4430_SGX_REGS_SIZE; |
167 | 191 | ||
168 | gsSGXDeviceMap.ui32IRQ = SYS_OMAP4430_SGX_IRQ; | 192 | gsSGXDeviceMap.ui32IRQ = SYS_OMAP4430_SGX_IRQ; |
169 | 193 | ||
194 | #endif | ||
195 | #if defined(SGX_OCP_REGS_ENABLED) | ||
196 | gsSGXRegsCPUVAddr = OSMapPhysToLin(gsSGXDeviceMap.sRegsCpuPBase, | ||
197 | gsSGXDeviceMap.ui32RegsSize, | ||
198 | PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY, | ||
199 | IMG_NULL); | ||
200 | |||
201 | if (gsSGXRegsCPUVAddr == IMG_NULL) | ||
202 | { | ||
203 | PVR_DPF((PVR_DBG_ERROR,"SysLocateDevices: Failed to map SGX registers")); | ||
204 | return PVRSRV_ERROR_BAD_MAPPING; | ||
205 | } | ||
206 | |||
207 | |||
208 | gsSGXDeviceMap.pvRegsCpuVBase = gsSGXRegsCPUVAddr; | ||
209 | gpvOCPRegsLinAddr = gsSGXRegsCPUVAddr; | ||
210 | #endif | ||
170 | #endif | 211 | #endif |
171 | 212 | ||
172 | #if defined(PDUMP) | 213 | #if defined(PDUMP) |
@@ -184,7 +225,7 @@ static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData) | |||
184 | } | 225 | } |
185 | 226 | ||
186 | 227 | ||
187 | IMG_CHAR *SysCreateVersionString(IMG_CPU_PHYADDR sRegRegion) | 228 | static IMG_CHAR *SysCreateVersionString(void) |
188 | { | 229 | { |
189 | static IMG_CHAR aszVersionString[100]; | 230 | static IMG_CHAR aszVersionString[100]; |
190 | SYS_DATA *psSysData; | 231 | SYS_DATA *psSysData; |
@@ -193,8 +234,8 @@ IMG_CHAR *SysCreateVersionString(IMG_CPU_PHYADDR sRegRegion) | |||
193 | #if !defined(NO_HARDWARE) | 234 | #if !defined(NO_HARDWARE) |
194 | IMG_VOID *pvRegsLinAddr; | 235 | IMG_VOID *pvRegsLinAddr; |
195 | 236 | ||
196 | pvRegsLinAddr = OSMapPhysToLin(sRegRegion, | 237 | pvRegsLinAddr = OSMapPhysToLin(gsSGXDeviceMap.sRegsCpuPBase, |
197 | SYS_OMAP4430_SGX_REGS_SIZE, | 238 | gsSGXDeviceMap.ui32RegsSize, |
198 | PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY, | 239 | PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY, |
199 | IMG_NULL); | 240 | IMG_NULL); |
200 | if(!pvRegsLinAddr) | 241 | if(!pvRegsLinAddr) |
@@ -286,17 +327,6 @@ PVRSRV_ERROR SysInitialise(IMG_VOID) | |||
286 | return eError; | 327 | return eError; |
287 | } | 328 | } |
288 | 329 | ||
289 | #if !defined(PVR_NO_OMAP_TIMER) | ||
290 | TimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_REGS_SYS_PHYS_BASE; | ||
291 | gpsSysData->pvSOCTimerRegisterKM = IMG_NULL; | ||
292 | gpsSysData->hSOCTimerRegisterOSMemHandle = 0; | ||
293 | OSReservePhys(TimerRegPhysBase, | ||
294 | 4, | ||
295 | PVRSRV_HAP_MULTI_PROCESS|PVRSRV_HAP_UNCACHED, | ||
296 | (IMG_VOID **)&gpsSysData->pvSOCTimerRegisterKM, | ||
297 | &gpsSysData->hSOCTimerRegisterOSMemHandle); | ||
298 | #endif | ||
299 | |||
300 | #if !defined(SGX_DYNAMIC_TIMING_INFO) | 330 | #if !defined(SGX_DYNAMIC_TIMING_INFO) |
301 | 331 | ||
302 | psTimingInfo = &gsSGXDeviceMap.sTimingInfo; | 332 | psTimingInfo = &gsSGXDeviceMap.sTimingInfo; |
@@ -329,28 +359,6 @@ PVRSRV_ERROR SysInitialise(IMG_VOID) | |||
329 | } | 359 | } |
330 | SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LOCATEDEV); | 360 | SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LOCATEDEV); |
331 | 361 | ||
332 | #if defined(SGX_OCP_REGS_ENABLED) | ||
333 | { | ||
334 | IMG_SYS_PHYADDR sOCPRegsSysPBase; | ||
335 | IMG_CPU_PHYADDR sOCPRegsCpuPBase; | ||
336 | |||
337 | sOCPRegsSysPBase.uiAddr = SYS_OMAP4430_OCP_REGS_SYS_PHYS_BASE; | ||
338 | sOCPRegsCpuPBase = SysSysPAddrToCpuPAddr(sOCPRegsSysPBase); | ||
339 | |||
340 | gpvOCPRegsLinAddr = OSMapPhysToLin(sOCPRegsCpuPBase, | ||
341 | SYS_OMAP4430_OCP_REGS_SIZE, | ||
342 | PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY, | ||
343 | IMG_NULL); | ||
344 | |||
345 | if (gpvOCPRegsLinAddr == IMG_NULL) | ||
346 | { | ||
347 | PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to map OCP registers")); | ||
348 | return PVRSRV_ERROR_BAD_MAPPING; | ||
349 | } | ||
350 | SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_OCPREGS); | ||
351 | } | ||
352 | #endif | ||
353 | |||
354 | eError = SysPMRuntimeRegister(); | 362 | eError = SysPMRuntimeRegister(); |
355 | if (eError != PVRSRV_OK) | 363 | if (eError != PVRSRV_OK) |
356 | { | 364 | { |
@@ -419,8 +427,10 @@ PVRSRV_ERROR SysInitialise(IMG_VOID) | |||
419 | psDeviceNode = psDeviceNode->psNext; | 427 | psDeviceNode = psDeviceNode->psNext; |
420 | } | 428 | } |
421 | 429 | ||
430 | #if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI) | ||
422 | omap_device_set_rate(&gpsPVRLDMDev->dev, | 431 | omap_device_set_rate(&gpsPVRLDMDev->dev, |
423 | &gpsPVRLDMDev->dev, SYS_SGX_CLOCK_SPEED); | 432 | &gpsPVRLDMDev->dev, SYS_SGX_CLOCK_SPEED); |
433 | #endif | ||
424 | 434 | ||
425 | eError = EnableSystemClocksWrap(gpsSysData); | 435 | eError = EnableSystemClocksWrap(gpsSysData); |
426 | if (eError != PVRSRV_OK) | 436 | if (eError != PVRSRV_OK) |
@@ -457,6 +467,24 @@ PVRSRV_ERROR SysInitialise(IMG_VOID) | |||
457 | DisableSGXClocks(gpsSysData); | 467 | DisableSGXClocks(gpsSysData); |
458 | #endif | 468 | #endif |
459 | 469 | ||
470 | #if !defined(PVR_NO_OMAP_TIMER) | ||
471 | #if defined(PVR_OMAP_TIMER_BASE_IN_SYS_SPEC_DATA) | ||
472 | TimerRegPhysBase = gsSysSpecificData.sTimerRegPhysBase; | ||
473 | #else | ||
474 | TimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_REGS_SYS_PHYS_BASE; | ||
475 | #endif | ||
476 | gpsSysData->pvSOCTimerRegisterKM = IMG_NULL; | ||
477 | gpsSysData->hSOCTimerRegisterOSMemHandle = 0; | ||
478 | if (TimerRegPhysBase.uiAddr != 0) | ||
479 | { | ||
480 | OSReservePhys(TimerRegPhysBase, | ||
481 | 4, | ||
482 | PVRSRV_HAP_MULTI_PROCESS|PVRSRV_HAP_UNCACHED, | ||
483 | (IMG_VOID **)&gpsSysData->pvSOCTimerRegisterKM, | ||
484 | &gpsSysData->hSOCTimerRegisterOSMemHandle); | ||
485 | } | ||
486 | #endif | ||
487 | |||
460 | return PVRSRV_OK; | 488 | return PVRSRV_OK; |
461 | } | 489 | } |
462 | 490 | ||
@@ -495,14 +523,14 @@ PVRSRV_ERROR SysFinalise(IMG_VOID) | |||
495 | 523 | ||
496 | #if defined(__linux__) | 524 | #if defined(__linux__) |
497 | 525 | ||
498 | gpsSysData->pszVersionString = SysCreateVersionString(gsSGXDeviceMap.sRegsCpuPBase); | 526 | gpsSysData->pszVersionString = SysCreateVersionString(); |
499 | if (!gpsSysData->pszVersionString) | 527 | if (!gpsSysData->pszVersionString) |
500 | { | 528 | { |
501 | PVR_DPF((PVR_DBG_ERROR,"SysFinalise: Failed to create a system version string")); | 529 | PVR_DPF((PVR_DBG_ERROR,"SysFinalise: Failed to create a system version string")); |
502 | } | 530 | } |
503 | else | 531 | else |
504 | { | 532 | { |
505 | PVR_DPF((PVR_DBG_WARNING, "SysFinalise: Version string: %s", gpsSysData->pszVersionString)); | 533 | PVR_TRACE(("SysFinalise: Version string: %s", gpsSysData->pszVersionString)); |
506 | } | 534 | } |
507 | #endif | 535 | #endif |
508 | 536 | ||
@@ -521,6 +549,14 @@ PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData) | |||
521 | { | 549 | { |
522 | PVRSRV_ERROR eError; | 550 | PVRSRV_ERROR eError; |
523 | 551 | ||
552 | if(gpsSysData->pvSOCTimerRegisterKM) | ||
553 | { | ||
554 | OSUnReservePhys(gpsSysData->pvSOCTimerRegisterKM, | ||
555 | 4, | ||
556 | PVRSRV_HAP_MULTI_PROCESS|PVRSRV_HAP_UNCACHED, | ||
557 | gpsSysData->hSOCTimerRegisterOSMemHandle); | ||
558 | } | ||
559 | |||
524 | #if defined(SYS_USING_INTERRUPTS) | 560 | #if defined(SYS_USING_INTERRUPTS) |
525 | if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR)) | 561 | if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR)) |
526 | { | 562 | { |
@@ -571,22 +607,11 @@ PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData) | |||
571 | if (eError != PVRSRV_OK) | 607 | if (eError != PVRSRV_OK) |
572 | { | 608 | { |
573 | PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: Failed to unregister with OSPM!")); | 609 | PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: Failed to unregister with OSPM!")); |
574 | (IMG_VOID)SysDeinitialise(gpsSysData); | ||
575 | gpsSysData = IMG_NULL; | 610 | gpsSysData = IMG_NULL; |
576 | return eError; | 611 | return eError; |
577 | } | 612 | } |
578 | } | 613 | } |
579 | 614 | ||
580 | #if defined(SGX_OCP_REGS_ENABLED) | ||
581 | if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_OCPREGS)) | ||
582 | { | ||
583 | OSUnMapPhysToLin(gpvOCPRegsLinAddr, | ||
584 | SYS_OMAP4430_OCP_REGS_SIZE, | ||
585 | PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY, | ||
586 | IMG_NULL); | ||
587 | } | ||
588 | #endif | ||
589 | |||
590 | 615 | ||
591 | 616 | ||
592 | if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS)) | 617 | if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS)) |
@@ -604,21 +629,26 @@ PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData) | |||
604 | } | 629 | } |
605 | } | 630 | } |
606 | 631 | ||
607 | if(gpsSysData->pvSOCTimerRegisterKM) | ||
608 | { | ||
609 | OSUnReservePhys(gpsSysData->pvSOCTimerRegisterKM, | ||
610 | 4, | ||
611 | PVRSRV_HAP_MULTI_PROCESS|PVRSRV_HAP_UNCACHED, | ||
612 | gpsSysData->hSOCTimerRegisterOSMemHandle); | ||
613 | } | ||
614 | |||
615 | SysDeinitialiseCommon(gpsSysData); | 632 | SysDeinitialiseCommon(gpsSysData); |
616 | 633 | ||
617 | #if defined(NO_HARDWARE) | 634 | #if defined(NO_HARDWARE) || defined(SGX_OCP_REGS_ENABLED) |
618 | if(SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LOCATEDEV)) | 635 | if(gsSGXRegsCPUVAddr != IMG_NULL) |
619 | { | 636 | { |
637 | #if defined(NO_HARDWARE) | ||
620 | 638 | ||
621 | OSBaseFreeContigMemory(SYS_OMAP4430_SGX_REGS_SIZE, gsSGXRegsCPUVAddr, gsSGXDeviceMap.sRegsCpuPBase); | 639 | OSBaseFreeContigMemory(SYS_OMAP4430_SGX_REGS_SIZE, gsSGXRegsCPUVAddr, gsSGXDeviceMap.sRegsCpuPBase); |
640 | #else | ||
641 | #if defined(SGX_OCP_REGS_ENABLED) | ||
642 | OSUnMapPhysToLin(gsSGXRegsCPUVAddr, | ||
643 | gsSGXDeviceMap.ui32RegsSize, | ||
644 | PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY, | ||
645 | IMG_NULL); | ||
646 | |||
647 | gpvOCPRegsLinAddr = IMG_NULL; | ||
648 | #endif | ||
649 | #endif | ||
650 | gsSGXRegsCPUVAddr = IMG_NULL; | ||
651 | gsSGXDeviceMap.pvRegsCpuVBase = gsSGXRegsCPUVAddr; | ||
622 | } | 652 | } |
623 | #endif | 653 | #endif |
624 | 654 | ||
@@ -740,14 +770,41 @@ IMG_UINT32 SysGetInterruptSource(SYS_DATA *psSysData, | |||
740 | 770 | ||
741 | IMG_VOID SysClearInterrupts(SYS_DATA* psSysData, IMG_UINT32 ui32ClearBits) | 771 | IMG_VOID SysClearInterrupts(SYS_DATA* psSysData, IMG_UINT32 ui32ClearBits) |
742 | { | 772 | { |
743 | PVR_UNREFERENCED_PARAMETER(psSysData); | ||
744 | PVR_UNREFERENCED_PARAMETER(ui32ClearBits); | 773 | PVR_UNREFERENCED_PARAMETER(ui32ClearBits); |
745 | 774 | #if defined(NO_HARDWARE) | |
775 | PVR_UNREFERENCED_PARAMETER(psSysData); | ||
776 | #else | ||
777 | #if defined(SGX_OCP_NO_INT_BYPASS) | ||
778 | OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_IRQSTATUS_2, 0x1); | ||
779 | #endif | ||
746 | 780 | ||
747 | OSReadHWReg(((PVRSRV_SGXDEV_INFO *)gpsSGXDevNode->pvDevice)->pvRegsBaseKM, | 781 | OSReadHWReg(((PVRSRV_SGXDEV_INFO *)gpsSGXDevNode->pvDevice)->pvRegsBaseKM, EUR_CR_EVENT_HOST_CLEAR); |
748 | EUR_CR_EVENT_HOST_CLEAR); | 782 | #endif |
749 | } | 783 | } |
750 | 784 | ||
785 | #if defined(SGX_OCP_NO_INT_BYPASS) | ||
786 | IMG_VOID SysEnableSGXInterrupts(SYS_DATA *psSysData) | ||
787 | { | ||
788 | SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *)psSysData->pvSysSpecificData; | ||
789 | if (SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_ENABLE_LISR) && !SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_IRQ_ENABLED)) | ||
790 | { | ||
791 | OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_IRQSTATUS_2, 0x1); | ||
792 | OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_IRQENABLE_SET_2, 0x1); | ||
793 | SYS_SPECIFIC_DATA_SET(psSysSpecData, SYS_SPECIFIC_DATA_IRQ_ENABLED); | ||
794 | } | ||
795 | } | ||
796 | |||
797 | IMG_VOID SysDisableSGXInterrupts(SYS_DATA *psSysData) | ||
798 | { | ||
799 | SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *)psSysData->pvSysSpecificData; | ||
800 | |||
801 | if (SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_IRQ_ENABLED)) | ||
802 | { | ||
803 | OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_IRQENABLE_CLR_2, 0x1); | ||
804 | SYS_SPECIFIC_DATA_CLEAR(psSysSpecData, SYS_SPECIFIC_DATA_IRQ_ENABLED); | ||
805 | } | ||
806 | } | ||
807 | #endif | ||
751 | 808 | ||
752 | PVRSRV_ERROR SysSystemPrePowerState(PVRSRV_SYS_POWER_STATE eNewPowerState) | 809 | PVRSRV_ERROR SysSystemPrePowerState(PVRSRV_SYS_POWER_STATE eNewPowerState) |
753 | { | 810 | { |
diff --git a/drivers/gpu/pvr/omap4/sysconfig.h b/drivers/gpu/pvr/omap4/sysconfig.h index 46930b54da9..8e84def99c0 100644 --- a/drivers/gpu/pvr/omap4/sysconfig.h +++ b/drivers/gpu/pvr/omap4/sysconfig.h | |||
@@ -27,8 +27,6 @@ | |||
27 | #if !defined(__SOCCONFIG_H__) | 27 | #if !defined(__SOCCONFIG_H__) |
28 | #define __SOCCONFIG_H__ | 28 | #define __SOCCONFIG_H__ |
29 | 29 | ||
30 | #include "syscommon.h" | ||
31 | |||
32 | #define VS_PRODUCT_NAME "OMAP4" | 30 | #define VS_PRODUCT_NAME "OMAP4" |
33 | 31 | ||
34 | #if defined(SGX540) && (SGX_CORE_REV == 120) | 32 | #if defined(SGX540) && (SGX_CORE_REV == 120) |
@@ -51,9 +49,13 @@ | |||
51 | 49 | ||
52 | #define SYS_OMAP4430_SGX_IRQ 53 | 50 | #define SYS_OMAP4430_SGX_IRQ 53 |
53 | 51 | ||
54 | #define SYS_OMAP4430_GP11TIMER_ENABLE_SYS_PHYS_BASE 0x48088038 | 52 | #define SYS_OMAP4430_GP11TIMER_ENABLE_SYS_PHYS_BASE 0x48088038 |
55 | #define SYS_OMAP4430_GP11TIMER_REGS_SYS_PHYS_BASE 0x4808803C | 53 | #define SYS_OMAP4430_GP11TIMER_REGS_SYS_PHYS_BASE 0x4808803C |
56 | #define SYS_OMAP4430_GP11TIMER_TSICR_SYS_PHYS_BASE 0x48088054 | 54 | #define SYS_OMAP4430_GP11TIMER_TSICR_SYS_PHYS_BASE 0x48088054 |
55 | |||
56 | #if defined(__linux__) | ||
57 | #define SYS_SGX_DEV_NAME "omap_gpu" | ||
58 | #endif | ||
57 | 59 | ||
58 | 60 | ||
59 | #endif | 61 | #endif |
diff --git a/drivers/gpu/pvr/omap4/syslocal.h b/drivers/gpu/pvr/omap4/syslocal.h index bc9a078fc43..e07c51fda75 100644 --- a/drivers/gpu/pvr/omap4/syslocal.h +++ b/drivers/gpu/pvr/omap4/syslocal.h | |||
@@ -48,16 +48,52 @@ | |||
48 | #endif | 48 | #endif |
49 | #endif | 49 | #endif |
50 | 50 | ||
51 | |||
52 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) | ||
53 | #if !defined(LDM_PLATFORM) | ||
54 | #error "LDM_PLATFORM must be set" | ||
55 | #endif | ||
56 | #define PVR_LINUX_DYNAMIC_SGX_RESOURCE_INFO | ||
57 | #include <linux/platform_device.h> | ||
58 | #endif | ||
59 | |||
60 | #if ((defined(DEBUG) || defined(TIMING)) && \ | ||
61 | (LINUX_VERSION_CODE == KERNEL_VERSION(2,6,34))) && \ | ||
62 | !defined(PVR_NO_OMAP_TIMER) | ||
63 | #define PVR_OMAP4_TIMING_PRCM | ||
64 | #endif | ||
65 | |||
66 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) | ||
67 | #include <plat/gpu.h> | ||
68 | #if !defined(PVR_NO_OMAP_TIMER) | ||
69 | #define PVR_OMAP_USE_DM_TIMER_API | ||
70 | #include <plat/dmtimer.h> | ||
71 | #endif | ||
72 | #endif | ||
73 | |||
74 | #if !defined(PVR_NO_OMAP_TIMER) | ||
75 | #define PVR_OMAP_TIMER_BASE_IN_SYS_SPEC_DATA | ||
76 | #endif | ||
51 | #endif | 77 | #endif |
52 | 78 | ||
79 | #if !defined(NO_HARDWARE) && \ | ||
80 | defined(SYS_USING_INTERRUPTS) && \ | ||
81 | defined(SGX540) | ||
82 | #define SGX_OCP_REGS_ENABLED | ||
83 | #endif | ||
84 | |||
85 | #if defined(__linux__) | ||
86 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) && defined(SGX_OCP_REGS_ENABLED) | ||
87 | #define SGX_OCP_NO_INT_BYPASS | ||
88 | #endif | ||
89 | #endif | ||
90 | |||
53 | #if defined (__cplusplus) | 91 | #if defined (__cplusplus) |
54 | extern "C" { | 92 | extern "C" { |
55 | #endif | 93 | #endif |
56 | 94 | ||
57 | 95 | ||
58 | 96 | ||
59 | IMG_CHAR *SysCreateVersionString(IMG_CPU_PHYADDR sRegRegion); | ||
60 | |||
61 | IMG_VOID DisableSystemClocks(SYS_DATA *psSysData); | 97 | IMG_VOID DisableSystemClocks(SYS_DATA *psSysData); |
62 | PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData); | 98 | PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData); |
63 | 99 | ||
@@ -78,6 +114,9 @@ PVRSRV_ERROR EnableSGXClocks(SYS_DATA *psSysData); | |||
78 | #define SYS_SPECIFIC_DATA_PM_DISABLE_SYSCLOCKS 0x00000400 | 114 | #define SYS_SPECIFIC_DATA_PM_DISABLE_SYSCLOCKS 0x00000400 |
79 | #define SYS_SPECIFIC_DATA_ENABLE_OCPREGS 0x00000800 | 115 | #define SYS_SPECIFIC_DATA_ENABLE_OCPREGS 0x00000800 |
80 | #define SYS_SPECIFIC_DATA_ENABLE_PM_RUNTIME 0x00001000 | 116 | #define SYS_SPECIFIC_DATA_ENABLE_PM_RUNTIME 0x00001000 |
117 | #if defined(SGX_OCP_REGS_ENABLED) && defined(SGX_OCP_NO_INT_BYPASS) | ||
118 | #define SYS_SPECIFIC_DATA_IRQ_ENABLED 0x00002000 | ||
119 | #endif | ||
81 | 120 | ||
82 | #define SYS_SPECIFIC_DATA_SET(psSysSpecData, flag) ((IMG_VOID)((psSysSpecData)->ui32SysSpecificData |= (flag))) | 121 | #define SYS_SPECIFIC_DATA_SET(psSysSpecData, flag) ((IMG_VOID)((psSysSpecData)->ui32SysSpecificData |= (flag))) |
83 | 122 | ||
@@ -90,6 +129,9 @@ typedef struct _SYS_SPECIFIC_DATA_TAG_ | |||
90 | IMG_UINT32 ui32SysSpecificData; | 129 | IMG_UINT32 ui32SysSpecificData; |
91 | PVRSRV_DEVICE_NODE *psSGXDevNode; | 130 | PVRSRV_DEVICE_NODE *psSGXDevNode; |
92 | IMG_BOOL bSGXInitComplete; | 131 | IMG_BOOL bSGXInitComplete; |
132 | #if defined(PVR_OMAP_TIMER_BASE_IN_SYS_SPEC_DATA) | ||
133 | IMG_CPU_PHYADDR sTimerRegPhysBase; | ||
134 | #endif | ||
93 | #if !defined(__linux__) | 135 | #if !defined(__linux__) |
94 | IMG_BOOL bSGXClocksEnabled; | 136 | IMG_BOOL bSGXClocksEnabled; |
95 | #endif | 137 | #endif |
@@ -107,19 +149,26 @@ typedef struct _SYS_SPECIFIC_DATA_TAG_ | |||
107 | atomic_t sNotifyLockCPU; | 149 | atomic_t sNotifyLockCPU; |
108 | IMG_BOOL bCallVDD2PostFunc; | 150 | IMG_BOOL bCallVDD2PostFunc; |
109 | #endif | 151 | #endif |
110 | struct clk *psCORE_CK; | ||
111 | struct clk *psSGX_FCK; | ||
112 | struct clk *psSGX_ICK; | ||
113 | struct clk *psMPU_CK; | ||
114 | #if defined(DEBUG) || defined(TIMING) | 152 | #if defined(DEBUG) || defined(TIMING) |
115 | struct clk *psGPT11_FCK; | 153 | struct clk *psGPT11_FCK; |
116 | struct clk *psGPT11_ICK; | 154 | struct clk *psGPT11_ICK; |
117 | #endif | 155 | #endif |
156 | #if defined(PVR_OMAP_USE_DM_TIMER_API) | ||
157 | struct omap_dm_timer *psGPTimer; | ||
158 | #endif | ||
118 | #endif | 159 | #endif |
119 | } SYS_SPECIFIC_DATA; | 160 | } SYS_SPECIFIC_DATA; |
120 | 161 | ||
121 | extern SYS_SPECIFIC_DATA *gpsSysSpecificData; | 162 | extern SYS_SPECIFIC_DATA *gpsSysSpecificData; |
122 | 163 | ||
164 | #if defined(SGX_OCP_REGS_ENABLED) && defined(SGX_OCP_NO_INT_BYPASS) | ||
165 | IMG_VOID SysEnableSGXInterrupts(SYS_DATA* psSysData); | ||
166 | IMG_VOID SysDisableSGXInterrupts(SYS_DATA* psSysData); | ||
167 | #else | ||
168 | #define SysEnableSGXInterrupts(psSysData) | ||
169 | #define SysDisableSGXInterrupts(psSysData) | ||
170 | #endif | ||
171 | |||
123 | #if defined(SYS_CUSTOM_POWERLOCK_WRAP) | 172 | #if defined(SYS_CUSTOM_POWERLOCK_WRAP) |
124 | IMG_BOOL WrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData); | 173 | IMG_BOOL WrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData); |
125 | IMG_VOID UnwrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData); | 174 | IMG_VOID UnwrapSystemPowerChange(SYS_SPECIFIC_DATA *psSysSpecData); |
diff --git a/drivers/gpu/pvr/omap4/sysutils_linux.c b/drivers/gpu/pvr/omap4/sysutils_linux.c index 52ae877f05e..f7c3ac11424 100644 --- a/drivers/gpu/pvr/omap4/sysutils_linux.c +++ b/drivers/gpu/pvr/omap4/sysutils_linux.c | |||
@@ -41,16 +41,6 @@ | |||
41 | #include <linux/platform_device.h> | 41 | #include <linux/platform_device.h> |
42 | #include <linux/pm_runtime.h> | 42 | #include <linux/pm_runtime.h> |
43 | 43 | ||
44 | #if !defined(PVR_LINUX_USING_WORKQUEUES) | ||
45 | #error "PVR_LINUX_USING_WORKQUEUES must be defined" | ||
46 | #endif | ||
47 | |||
48 | #if ((defined(DEBUG) || defined(TIMING)) && \ | ||
49 | (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))) && \ | ||
50 | !defined(PVR_NO_OMAP_TIMER) | ||
51 | #define PVR_OMAP4_TIMING_PRCM | ||
52 | #endif | ||
53 | |||
54 | #define ONE_MHZ 1000000 | 44 | #define ONE_MHZ 1000000 |
55 | #define HZ_TO_MHZ(m) ((m) / ONE_MHZ) | 45 | #define HZ_TO_MHZ(m) ((m) / ONE_MHZ) |
56 | 46 | ||
@@ -60,7 +50,7 @@ | |||
60 | #define SGX_PARENT_CLOCK "core_ck" | 50 | #define SGX_PARENT_CLOCK "core_ck" |
61 | #endif | 51 | #endif |
62 | 52 | ||
63 | #if defined(LDM_PLATFORM) && !defined(SUPPORT_DRI_DRM) | 53 | #if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI) |
64 | extern struct platform_device *gpsPVRLDMDev; | 54 | extern struct platform_device *gpsPVRLDMDev; |
65 | #endif | 55 | #endif |
66 | 56 | ||
@@ -134,17 +124,9 @@ IMG_VOID SysGetSGXTimingInformation(SGX_TIMING_INFORMATION *psTimingInfo) | |||
134 | { | 124 | { |
135 | IMG_UINT32 rate; | 125 | IMG_UINT32 rate; |
136 | 126 | ||
137 | #if defined(NO_HARDWARE) | ||
138 | rate = SYS_SGX_CLOCK_SPEED; | 127 | rate = SYS_SGX_CLOCK_SPEED; |
139 | #else | 128 | #if !defined(NO_HARDWARE) |
140 | PVR_ASSERT(atomic_read(&gpsSysSpecificData->sSGXClocksEnabled) != 0); | 129 | PVR_ASSERT(atomic_read(&gpsSysSpecificData->sSGXClocksEnabled) != 0); |
141 | |||
142 | #if defined(OMAP4_PRCM_ENABLE) | ||
143 | rate = clk_get_rate(gpsSysSpecificData->psSGX_FCK); | ||
144 | #else | ||
145 | rate = SYS_SGX_CLOCK_SPEED; | ||
146 | #endif | ||
147 | PVR_ASSERT(rate != 0); | ||
148 | #endif | 130 | #endif |
149 | psTimingInfo->ui32CoreClockSpeed = rate; | 131 | psTimingInfo->ui32CoreClockSpeed = rate; |
150 | psTimingInfo->ui32HWRecoveryFreq = scale_prop_to_SGX_clock(SYS_SGX_HWRECOVERY_TIMEOUT_FREQ, rate); | 132 | psTimingInfo->ui32HWRecoveryFreq = scale_prop_to_SGX_clock(SYS_SGX_HWRECOVERY_TIMEOUT_FREQ, rate); |
@@ -161,11 +143,6 @@ PVRSRV_ERROR EnableSGXClocks(SYS_DATA *psSysData) | |||
161 | { | 143 | { |
162 | #if !defined(NO_HARDWARE) | 144 | #if !defined(NO_HARDWARE) |
163 | SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; | 145 | SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; |
164 | #if defined(OMAP4_PRCM_ENABLE) | ||
165 | long lNewRate; | ||
166 | long lRate; | ||
167 | IMG_INT res; | ||
168 | #endif | ||
169 | 146 | ||
170 | 147 | ||
171 | if (atomic_read(&psSysSpecData->sSGXClocksEnabled) != 0) | 148 | if (atomic_read(&psSysSpecData->sSGXClocksEnabled) != 0) |
@@ -175,61 +152,18 @@ PVRSRV_ERROR EnableSGXClocks(SYS_DATA *psSysData) | |||
175 | 152 | ||
176 | PVR_DPF((PVR_DBG_MESSAGE, "EnableSGXClocks: Enabling SGX Clocks")); | 153 | PVR_DPF((PVR_DBG_MESSAGE, "EnableSGXClocks: Enabling SGX Clocks")); |
177 | 154 | ||
178 | #if defined(LDM_PLATFORM) && !defined(SUPPORT_DRI_DRM) | 155 | #if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI) |
179 | pm_runtime_get_sync(&gpsPVRLDMDev->dev); | ||
180 | #endif | ||
181 | |||
182 | #if defined(OMAP4_PRCM_ENABLE) | ||
183 | |||
184 | #if defined(DEBUG) | ||
185 | { | ||
186 | IMG_UINT32 rate = clk_get_rate(psSysSpecData->psMPU_CK); | ||
187 | PVR_DPF((PVR_DBG_MESSAGE, "EnableSGXClocks: CPU Clock is %dMhz", HZ_TO_MHZ(rate))); | ||
188 | } | ||
189 | #endif | ||
190 | |||
191 | res = clk_enable(psSysSpecData->psSGX_FCK); | ||
192 | if (res < 0) | ||
193 | { | 156 | { |
194 | PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX functional clock (%d)", res)); | ||
195 | return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK; | ||
196 | } | ||
197 | 157 | ||
198 | res = clk_enable(psSysSpecData->psSGX_ICK); | 158 | int res = pm_runtime_get_sync(&gpsPVRLDMDev->dev); |
199 | if (res < 0) | ||
200 | { | ||
201 | PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't enable SGX interface clock (%d)", res)); | ||
202 | |||
203 | clk_disable(psSysSpecData->psSGX_FCK); | ||
204 | return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK; | ||
205 | } | ||
206 | |||
207 | lNewRate = clk_round_rate(psSysSpecData->psSGX_FCK, SYS_SGX_CLOCK_SPEED + ONE_MHZ); | ||
208 | if (lNewRate <= 0) | ||
209 | { | ||
210 | PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: Couldn't round SGX functional clock rate")); | ||
211 | return PVRSRV_ERROR_UNABLE_TO_ROUND_CLOCK_RATE; | ||
212 | } | ||
213 | |||
214 | |||
215 | lRate = clk_get_rate(psSysSpecData->psSGX_FCK); | ||
216 | if (lRate != lNewRate) | ||
217 | { | ||
218 | res = clk_set_rate(psSysSpecData->psSGX_FCK, lNewRate); | ||
219 | if (res < 0) | 159 | if (res < 0) |
220 | { | 160 | { |
221 | PVR_DPF((PVR_DBG_WARNING, "EnableSGXClocks: Couldn't set SGX functional clock rate (%d)", res)); | 161 | PVR_DPF((PVR_DBG_ERROR, "EnableSGXClocks: pm_runtime_get_sync failed (%d)", -res)); |
162 | return PVRSRV_ERROR_UNABLE_TO_ENABLE_CLOCK; | ||
222 | } | 163 | } |
223 | } | 164 | } |
224 | |||
225 | #if defined(DEBUG) | ||
226 | { | ||
227 | IMG_UINT32 rate = clk_get_rate(psSysSpecData->psSGX_FCK); | ||
228 | PVR_DPF((PVR_DBG_MESSAGE, "EnableSGXClocks: SGX Functional Clock is %dMhz", HZ_TO_MHZ(rate))); | ||
229 | } | ||
230 | #endif | 165 | #endif |
231 | 166 | SysEnableSGXInterrupts(psSysData); | |
232 | #endif | ||
233 | 167 | ||
234 | 168 | ||
235 | atomic_set(&psSysSpecData->sSGXClocksEnabled, 1); | 169 | atomic_set(&psSysSpecData->sSGXClocksEnabled, 1); |
@@ -254,21 +188,17 @@ IMG_VOID DisableSGXClocks(SYS_DATA *psSysData) | |||
254 | 188 | ||
255 | PVR_DPF((PVR_DBG_MESSAGE, "DisableSGXClocks: Disabling SGX Clocks")); | 189 | PVR_DPF((PVR_DBG_MESSAGE, "DisableSGXClocks: Disabling SGX Clocks")); |
256 | 190 | ||
257 | #if defined(LDM_PLATFORM) && !defined(SUPPORT_DRI_DRM) | 191 | SysDisableSGXInterrupts(psSysData); |
258 | pm_runtime_put_sync(&gpsPVRLDMDev->dev); | ||
259 | #endif | ||
260 | 192 | ||
261 | #if defined(OMAP4_PRCM_ENABLE) | 193 | #if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI) |
262 | if (psSysSpecData->psSGX_ICK) | ||
263 | { | 194 | { |
264 | clk_disable(psSysSpecData->psSGX_ICK); | 195 | int res = pm_runtime_put_sync(&gpsPVRLDMDev->dev); |
265 | } | 196 | if (res < 0) |
266 | 197 | { | |
267 | if (psSysSpecData->psSGX_FCK) | 198 | PVR_DPF((PVR_DBG_ERROR, "DisableSGXClocks: pm_runtime_put_sync failed (%d)", -res)); |
268 | { | 199 | } |
269 | clk_disable(psSysSpecData->psSGX_FCK); | ||
270 | } | 200 | } |
271 | #endif | 201 | #endif |
272 | 202 | ||
273 | 203 | ||
274 | atomic_set(&psSysSpecData->sSGXClocksEnabled, 0); | 204 | atomic_set(&psSysSpecData->sSGXClocksEnabled, 0); |
@@ -278,86 +208,78 @@ IMG_VOID DisableSGXClocks(SYS_DATA *psSysData) | |||
278 | #endif | 208 | #endif |
279 | } | 209 | } |
280 | 210 | ||
281 | PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData) | 211 | #if (defined(DEBUG) || defined(TIMING)) && !defined(PVR_NO_OMAP_TIMER) |
212 | #if defined(PVR_OMAP_USE_DM_TIMER_API) | ||
213 | #define GPTIMER_TO_USE 11 | ||
214 | static PVRSRV_ERROR AcquireGPTimer(SYS_SPECIFIC_DATA *psSysSpecData) | ||
282 | { | 215 | { |
283 | SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; | 216 | PVR_ASSERT(psSysSpecData->psGPTimer == NULL); |
284 | #if (defined(OMAP4_PRCM_ENABLE) || defined(PVR_OMAP4_TIMING_PRCM)) | ||
285 | struct clk *psCLK; | ||
286 | IMG_INT res; | ||
287 | #endif | ||
288 | #if defined(PVR_OMAP4_TIMING_PRCM) | ||
289 | struct clk *sys_ck; | ||
290 | IMG_INT rate; | ||
291 | #endif | ||
292 | PVRSRV_ERROR eError; | ||
293 | 217 | ||
294 | #if (defined(DEBUG) || defined(TIMING)) && !defined(PVR_NO_OMAP_TIMER) | ||
295 | IMG_CPU_PHYADDR TimerRegPhysBase; | ||
296 | IMG_HANDLE hTimerEnable; | ||
297 | IMG_UINT32 *pui32TimerEnable; | ||
298 | #endif | ||
299 | 218 | ||
300 | PVR_TRACE(("EnableSystemClocks: Enabling System Clocks")); | 219 | psSysSpecData->psGPTimer = omap_dm_timer_request_specific(GPTIMER_TO_USE); |
220 | if (psSysSpecData->psGPTimer == NULL) | ||
221 | { | ||
301 | 222 | ||
302 | if (!psSysSpecData->bSysClocksOneTimeInit) | 223 | PVR_DPF((PVR_DBG_WARNING, "%s: omap_dm_timer_request_specific failed", __FUNCTION__)); |
224 | return PVRSRV_ERROR_CLOCK_REQUEST_FAILED; | ||
225 | } | ||
226 | |||
227 | |||
228 | omap_dm_timer_set_source(psSysSpecData->psGPTimer, OMAP_TIMER_SRC_SYS_CLK); | ||
229 | omap_dm_timer_enable(psSysSpecData->psGPTimer); | ||
230 | |||
231 | |||
232 | omap_dm_timer_set_load_start(psSysSpecData->psGPTimer, 1, 0); | ||
233 | |||
234 | omap_dm_timer_start(psSysSpecData->psGPTimer); | ||
235 | |||
236 | |||
237 | psSysSpecData->sTimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_REGS_SYS_PHYS_BASE; | ||
238 | |||
239 | return PVRSRV_OK; | ||
240 | } | ||
241 | |||
242 | static void ReleaseGPTimer(SYS_SPECIFIC_DATA *psSysSpecData) | ||
243 | { | ||
244 | if (psSysSpecData->psGPTimer != NULL) | ||
303 | { | 245 | { |
304 | mutex_init(&psSysSpecData->sPowerLock); | ||
305 | 246 | ||
306 | atomic_set(&psSysSpecData->sSGXClocksEnabled, 0); | 247 | (void) omap_dm_timer_stop(psSysSpecData->psGPTimer); |
307 | 248 | ||
308 | #if defined(OMAP4_PRCM_ENABLE) | 249 | omap_dm_timer_disable(psSysSpecData->psGPTimer); |
309 | psCLK = clk_get(NULL, SGX_PARENT_CLOCK); | ||
310 | if (IS_ERR(psCLK)) | ||
311 | { | ||
312 | PVR_DPF((PVR_DBG_ERROR, "EnableSsystemClocks: Couldn't get Core Clock")); | ||
313 | goto ExitError; | ||
314 | } | ||
315 | psSysSpecData->psCORE_CK = psCLK; | ||
316 | 250 | ||
317 | psCLK = clk_get(NULL, "sgx_fck"); | 251 | omap_dm_timer_free(psSysSpecData->psGPTimer); |
318 | if (IS_ERR(psCLK)) | ||
319 | { | ||
320 | PVR_DPF((PVR_DBG_ERROR, "EnableSsystemClocks: Couldn't get SGX Functional Clock")); | ||
321 | goto ExitError; | ||
322 | } | ||
323 | psSysSpecData->psSGX_FCK = psCLK; | ||
324 | 252 | ||
325 | psCLK = clk_get(NULL, "sgx_ick"); | 253 | psSysSpecData->sTimerRegPhysBase.uiAddr = 0; |
326 | if (IS_ERR(psCLK)) | ||
327 | { | ||
328 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get SGX Interface Clock")); | ||
329 | goto ExitError; | ||
330 | } | ||
331 | psSysSpecData->psSGX_ICK = psCLK; | ||
332 | 254 | ||
333 | #if defined(DEBUG) | 255 | psSysSpecData->psGPTimer = NULL; |
334 | psCLK = clk_get(NULL, "mpu_ck"); | 256 | } |
335 | if (IS_ERR(psCLK)) | 257 | |
336 | { | 258 | } |
337 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get MPU Clock")); | 259 | #else |
338 | goto ExitError; | 260 | static PVRSRV_ERROR AcquireGPTimer(SYS_SPECIFIC_DATA *psSysSpecData) |
339 | } | 261 | { |
340 | psSysSpecData->psMPU_CK = psCLK; | 262 | #if defined(PVR_OMAP4_TIMING_PRCM) |
263 | struct clk *psCLK; | ||
264 | IMG_INT res; | ||
265 | struct clk *sys_ck; | ||
266 | IMG_INT rate; | ||
341 | #endif | 267 | #endif |
342 | res = clk_set_parent(psSysSpecData->psSGX_FCK, psSysSpecData->psCORE_CK); | 268 | PVRSRV_ERROR eError; |
343 | if (res < 0) | ||
344 | { | ||
345 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't set SGX parent clock (%d)", res)); | ||
346 | goto ExitError; | ||
347 | } | ||
348 | #endif | ||
349 | 269 | ||
350 | psSysSpecData->bSysClocksOneTimeInit = IMG_TRUE; | 270 | IMG_CPU_PHYADDR sTimerRegPhysBase; |
351 | } | 271 | IMG_HANDLE hTimerEnable; |
272 | IMG_UINT32 *pui32TimerEnable; | ||
273 | |||
274 | PVR_ASSERT(psSysSpecData->sTimerRegPhysBase.uiAddr == 0); | ||
352 | 275 | ||
353 | #if (defined(DEBUG) || defined(TIMING)) && !defined(PVR_NO_OMAP_TIMER) | ||
354 | #if defined(PVR_OMAP4_TIMING_PRCM) | 276 | #if defined(PVR_OMAP4_TIMING_PRCM) |
355 | 277 | ||
356 | psCLK = clk_get(NULL, "gpt11_fck"); | 278 | psCLK = clk_get(NULL, "gpt11_fck"); |
357 | if (IS_ERR(psCLK)) | 279 | if (IS_ERR(psCLK)) |
358 | { | 280 | { |
359 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get GPTIMER11 functional clock")); | 281 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get GPTIMER11 functional clock")); |
360 | goto ExitUnRegisterConstraintNotifications; | 282 | goto ExitError; |
361 | } | 283 | } |
362 | psSysSpecData->psGPT11_FCK = psCLK; | 284 | psSysSpecData->psGPT11_FCK = psCLK; |
363 | 285 | ||
@@ -365,7 +287,7 @@ PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData) | |||
365 | if (IS_ERR(psCLK)) | 287 | if (IS_ERR(psCLK)) |
366 | { | 288 | { |
367 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get GPTIMER11 interface clock")); | 289 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get GPTIMER11 interface clock")); |
368 | goto ExitUnRegisterConstraintNotifications; | 290 | goto ExitError; |
369 | } | 291 | } |
370 | psSysSpecData->psGPT11_ICK = psCLK; | 292 | psSysSpecData->psGPT11_ICK = psCLK; |
371 | 293 | ||
@@ -373,7 +295,7 @@ PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData) | |||
373 | if (IS_ERR(sys_ck)) | 295 | if (IS_ERR(sys_ck)) |
374 | { | 296 | { |
375 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get System clock")); | 297 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't get System clock")); |
376 | goto ExitUnRegisterConstraintNotifications; | 298 | goto ExitError; |
377 | } | 299 | } |
378 | 300 | ||
379 | if(clk_get_parent(psSysSpecData->psGPT11_FCK) != sys_ck) | 301 | if(clk_get_parent(psSysSpecData->psGPT11_FCK) != sys_ck) |
@@ -383,7 +305,7 @@ PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData) | |||
383 | if (res < 0) | 305 | if (res < 0) |
384 | { | 306 | { |
385 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't set GPTIMER11 parent clock (%d)", res)); | 307 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't set GPTIMER11 parent clock (%d)", res)); |
386 | goto ExitUnRegisterConstraintNotifications; | 308 | goto ExitError; |
387 | } | 309 | } |
388 | } | 310 | } |
389 | 311 | ||
@@ -394,7 +316,7 @@ PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData) | |||
394 | if (res < 0) | 316 | if (res < 0) |
395 | { | 317 | { |
396 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't enable GPTIMER11 functional clock (%d)", res)); | 318 | PVR_DPF((PVR_DBG_ERROR, "EnableSystemClocks: Couldn't enable GPTIMER11 functional clock (%d)", res)); |
397 | goto ExitUnRegisterConstraintNotifications; | 319 | goto ExitError; |
398 | } | 320 | } |
399 | 321 | ||
400 | res = clk_enable(psSysSpecData->psGPT11_ICK); | 322 | res = clk_enable(psSysSpecData->psGPT11_ICK); |
@@ -406,8 +328,8 @@ PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData) | |||
406 | #endif | 328 | #endif |
407 | 329 | ||
408 | 330 | ||
409 | TimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_TSICR_SYS_PHYS_BASE; | 331 | sTimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_TSICR_SYS_PHYS_BASE; |
410 | pui32TimerEnable = OSMapPhysToLin(TimerRegPhysBase, | 332 | pui32TimerEnable = OSMapPhysToLin(sTimerRegPhysBase, |
411 | 4, | 333 | 4, |
412 | PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, | 334 | PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, |
413 | &hTimerEnable); | 335 | &hTimerEnable); |
@@ -432,8 +354,8 @@ PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData) | |||
432 | hTimerEnable); | 354 | hTimerEnable); |
433 | 355 | ||
434 | 356 | ||
435 | TimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_ENABLE_SYS_PHYS_BASE; | 357 | sTimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_ENABLE_SYS_PHYS_BASE; |
436 | pui32TimerEnable = OSMapPhysToLin(TimerRegPhysBase, | 358 | pui32TimerEnable = OSMapPhysToLin(sTimerRegPhysBase, |
437 | 4, | 359 | 4, |
438 | PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, | 360 | PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, |
439 | &hTimerEnable); | 361 | &hTimerEnable); |
@@ -452,48 +374,36 @@ PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData) | |||
452 | PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, | 374 | PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, |
453 | hTimerEnable); | 375 | hTimerEnable); |
454 | 376 | ||
455 | #endif | 377 | psSysSpecData->sTimerRegPhysBase = sTimerRegPhysBase; |
456 | 378 | ||
457 | eError = PVRSRV_OK; | 379 | eError = PVRSRV_OK; |
380 | |||
458 | goto Exit; | 381 | goto Exit; |
459 | 382 | ||
460 | #if (defined(DEBUG) || defined(TIMING)) && !defined(PVR_NO_OMAP_TIMER) | ||
461 | ExitDisableGPT11ICK: | 383 | ExitDisableGPT11ICK: |
462 | #if defined(PVR_OMAP4_TIMING_PRCM) | 384 | #if defined(PVR_OMAP4_TIMING_PRCM) |
463 | clk_disable(psSysSpecData->psGPT11_ICK); | 385 | clk_disable(psSysSpecData->psGPT11_ICK); |
464 | ExitDisableGPT11FCK: | 386 | ExitDisableGPT11FCK: |
465 | clk_disable(psSysSpecData->psGPT11_FCK); | 387 | clk_disable(psSysSpecData->psGPT11_FCK); |
466 | ExitUnRegisterConstraintNotifications: | ||
467 | #endif | ||
468 | #endif | ||
469 | #if defined(OMAP4_PRCM_ENABLE) | ||
470 | ExitError: | 388 | ExitError: |
471 | #endif | 389 | #endif |
472 | eError = PVRSRV_ERROR_DISABLE_CLOCK_FAILURE; | 390 | eError = PVRSRV_ERROR_CLOCK_REQUEST_FAILED; |
473 | Exit: | 391 | Exit: |
474 | return eError; | 392 | return eError; |
475 | } | 393 | } |
476 | 394 | ||
477 | IMG_VOID DisableSystemClocks(SYS_DATA *psSysData) | 395 | static void ReleaseGPTimer(SYS_SPECIFIC_DATA *psSysSpecData) |
478 | { | 396 | { |
479 | #if (defined(DEBUG) || defined(TIMING)) && !defined(PVR_NO_OMAP_TIMER) | ||
480 | #if defined(PVR_OMAP4_TIMING_PRCM) | ||
481 | SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; | ||
482 | #endif | ||
483 | IMG_CPU_PHYADDR TimerRegPhysBase; | ||
484 | IMG_HANDLE hTimerDisable; | 397 | IMG_HANDLE hTimerDisable; |
485 | IMG_UINT32 *pui32TimerDisable; | 398 | IMG_UINT32 *pui32TimerDisable; |
486 | #endif | ||
487 | 399 | ||
488 | PVR_TRACE(("DisableSystemClocks: Disabling System Clocks")); | 400 | if (psSysSpecData->sTimerRegPhysBase.uiAddr == 0) |
489 | 401 | { | |
490 | 402 | return; | |
491 | DisableSGXClocks(psSysData); | 403 | } |
492 | 404 | ||
493 | #if (defined(DEBUG) || defined(TIMING)) && !defined(PVR_NO_OMAP_TIMER) | ||
494 | 405 | ||
495 | TimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_ENABLE_SYS_PHYS_BASE; | 406 | pui32TimerDisable = OSMapPhysToLin(psSysSpecData->sTimerRegPhysBase, |
496 | pui32TimerDisable = OSMapPhysToLin(TimerRegPhysBase, | ||
497 | 4, | 407 | 4, |
498 | PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, | 408 | PVRSRV_HAP_KERNEL_ONLY|PVRSRV_HAP_UNCACHED, |
499 | &hTimerDisable); | 409 | &hTimerDisable); |
@@ -512,17 +422,61 @@ IMG_VOID DisableSystemClocks(SYS_DATA *psSysData) | |||
512 | hTimerDisable); | 422 | hTimerDisable); |
513 | } | 423 | } |
514 | 424 | ||
425 | psSysSpecData->sTimerRegPhysBase.uiAddr = 0; | ||
426 | |||
515 | #if defined(PVR_OMAP4_TIMING_PRCM) | 427 | #if defined(PVR_OMAP4_TIMING_PRCM) |
516 | clk_disable(psSysSpecData->psGPT11_ICK); | 428 | clk_disable(psSysSpecData->psGPT11_ICK); |
517 | 429 | ||
518 | clk_disable(psSysSpecData->psGPT11_FCK); | 430 | clk_disable(psSysSpecData->psGPT11_FCK); |
519 | #endif | 431 | #endif |
432 | } | ||
433 | #endif | ||
434 | #else | ||
435 | static PVRSRV_ERROR AcquireGPTimer(SYS_SPECIFIC_DATA *psSysSpecData) | ||
436 | { | ||
437 | PVR_UNREFERENCED_PARAMETER(psSysSpecData); | ||
438 | |||
439 | return PVRSRV_OK; | ||
440 | } | ||
441 | static void ReleaseGPTimer(SYS_SPECIFIC_DATA *psSysSpecData) | ||
442 | { | ||
443 | PVR_UNREFERENCED_PARAMETER(psSysSpecData); | ||
444 | } | ||
520 | #endif | 445 | #endif |
446 | |||
447 | PVRSRV_ERROR EnableSystemClocks(SYS_DATA *psSysData) | ||
448 | { | ||
449 | SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; | ||
450 | |||
451 | PVR_TRACE(("EnableSystemClocks: Enabling System Clocks")); | ||
452 | |||
453 | if (!psSysSpecData->bSysClocksOneTimeInit) | ||
454 | { | ||
455 | mutex_init(&psSysSpecData->sPowerLock); | ||
456 | |||
457 | atomic_set(&psSysSpecData->sSGXClocksEnabled, 0); | ||
458 | |||
459 | psSysSpecData->bSysClocksOneTimeInit = IMG_TRUE; | ||
460 | } | ||
461 | |||
462 | return AcquireGPTimer(psSysSpecData); | ||
463 | } | ||
464 | |||
465 | IMG_VOID DisableSystemClocks(SYS_DATA *psSysData) | ||
466 | { | ||
467 | SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; | ||
468 | |||
469 | PVR_TRACE(("DisableSystemClocks: Disabling System Clocks")); | ||
470 | |||
471 | |||
472 | DisableSGXClocks(psSysData); | ||
473 | |||
474 | ReleaseGPTimer(psSysSpecData); | ||
521 | } | 475 | } |
522 | 476 | ||
523 | PVRSRV_ERROR SysPMRuntimeRegister(void) | 477 | PVRSRV_ERROR SysPMRuntimeRegister(void) |
524 | { | 478 | { |
525 | #if defined(LDM_PLATFORM) && !defined(SUPPORT_DRI_DRM) | 479 | #if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI) |
526 | pm_runtime_enable(&gpsPVRLDMDev->dev); | 480 | pm_runtime_enable(&gpsPVRLDMDev->dev); |
527 | #endif | 481 | #endif |
528 | return PVRSRV_OK; | 482 | return PVRSRV_OK; |
@@ -530,7 +484,7 @@ PVRSRV_ERROR SysPMRuntimeRegister(void) | |||
530 | 484 | ||
531 | PVRSRV_ERROR SysPMRuntimeUnregister(void) | 485 | PVRSRV_ERROR SysPMRuntimeUnregister(void) |
532 | { | 486 | { |
533 | #if defined(LDM_PLATFORM) && !defined(SUPPORT_DRI_DRM) | 487 | #if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI) |
534 | pm_runtime_disable(&gpsPVRLDMDev->dev); | 488 | pm_runtime_disable(&gpsPVRLDMDev->dev); |
535 | #endif | 489 | #endif |
536 | return PVRSRV_OK; | 490 | return PVRSRV_OK; |
diff --git a/drivers/gpu/pvr/osfunc.c b/drivers/gpu/pvr/osfunc.c index 9a264d23a87..2bcf0ed40ce 100644 --- a/drivers/gpu/pvr/osfunc.c +++ b/drivers/gpu/pvr/osfunc.c | |||
@@ -115,6 +115,15 @@ PVRSRV_ERROR OSAllocMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOI | |||
115 | return PVRSRV_OK; | 115 | return PVRSRV_OK; |
116 | } | 116 | } |
117 | 117 | ||
118 | #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,24)) | ||
119 | |||
120 | static inline int is_vmalloc_addr(const void *pvCpuVAddr) | ||
121 | { | ||
122 | unsigned long lAddr = (unsigned long)pvCpuVAddr; | ||
123 | return lAddr >= VMALLOC_START && lAddr < VMALLOC_END; | ||
124 | } | ||
125 | |||
126 | #endif | ||
118 | 127 | ||
119 | #if !defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) | 128 | #if !defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) |
120 | PVRSRV_ERROR OSFreeMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOID pvCpuVAddr, IMG_HANDLE hBlockAlloc) | 129 | PVRSRV_ERROR OSFreeMem_Impl(IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size, IMG_PVOID pvCpuVAddr, IMG_HANDLE hBlockAlloc) |
@@ -2950,6 +2959,29 @@ IMG_VOID OSFlushCPUCacheKM(IMG_VOID) | |||
2950 | #endif | 2959 | #endif |
2951 | } | 2960 | } |
2952 | 2961 | ||
2962 | static inline size_t pvr_dmac_range_len(const void *pvStart, const void *pvEnd) | ||
2963 | { | ||
2964 | return (size_t)((char *)pvEnd - (char *)pvStart); | ||
2965 | } | ||
2966 | |||
2967 | static void pvr_dmac_inv_range(const void *pvStart, const void *pvEnd) | ||
2968 | { | ||
2969 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) | ||
2970 | dmac_inv_range(pvStart, pvEnd); | ||
2971 | #else | ||
2972 | dmac_map_area(pvStart, pvr_dmac_range_len(pvStart, pvEnd), DMA_FROM_DEVICE); | ||
2973 | #endif | ||
2974 | } | ||
2975 | |||
2976 | static void pvr_dmac_clean_range(const void *pvStart, const void *pvEnd) | ||
2977 | { | ||
2978 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) | ||
2979 | dmac_clean_range(pvStart, pvEnd); | ||
2980 | #else | ||
2981 | dmac_map_area(pvStart, pvr_dmac_range_len(pvStart, pvEnd), DMA_TO_DEVICE); | ||
2982 | #endif | ||
2983 | } | ||
2984 | |||
2953 | IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | 2985 | IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, |
2954 | IMG_VOID *pvRangeAddrStart, | 2986 | IMG_VOID *pvRangeAddrStart, |
2955 | IMG_UINT32 ui32Length) | 2987 | IMG_UINT32 ui32Length) |
@@ -2963,7 +2995,7 @@ IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | |||
2963 | IMG_UINT32 ui32Length) | 2995 | IMG_UINT32 ui32Length) |
2964 | { | 2996 | { |
2965 | return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, | 2997 | return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, |
2966 | dmac_clean_range, outer_clean_range); | 2998 | pvr_dmac_clean_range, outer_clean_range); |
2967 | } | 2999 | } |
2968 | 3000 | ||
2969 | IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | 3001 | IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, |
@@ -2971,7 +3003,7 @@ IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | |||
2971 | IMG_UINT32 ui32Length) | 3003 | IMG_UINT32 ui32Length) |
2972 | { | 3004 | { |
2973 | return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, | 3005 | return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, |
2974 | dmac_inv_range, outer_inv_range); | 3006 | pvr_dmac_inv_range, outer_inv_range); |
2975 | } | 3007 | } |
2976 | 3008 | ||
2977 | #else | 3009 | #else |
@@ -2993,7 +3025,8 @@ IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | |||
2993 | IMG_VOID *pvRangeAddrStart, | 3025 | IMG_VOID *pvRangeAddrStart, |
2994 | IMG_UINT32 ui32Length) | 3026 | IMG_UINT32 ui32Length) |
2995 | { | 3027 | { |
2996 | dma_cache_wback_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); | 3028 | if (ui32Length) |
3029 | dma_cache_wback_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); | ||
2997 | return IMG_TRUE; | 3030 | return IMG_TRUE; |
2998 | } | 3031 | } |
2999 | 3032 | ||
@@ -3001,7 +3034,8 @@ IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | |||
3001 | IMG_VOID *pvRangeAddrStart, | 3034 | IMG_VOID *pvRangeAddrStart, |
3002 | IMG_UINT32 ui32Length) | 3035 | IMG_UINT32 ui32Length) |
3003 | { | 3036 | { |
3004 | dma_cache_wback((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); | 3037 | if (ui32Length) |
3038 | dma_cache_wback((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); | ||
3005 | return IMG_TRUE; | 3039 | return IMG_TRUE; |
3006 | } | 3040 | } |
3007 | 3041 | ||
@@ -3009,7 +3043,8 @@ IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | |||
3009 | IMG_VOID *pvRangeAddrStart, | 3043 | IMG_VOID *pvRangeAddrStart, |
3010 | IMG_UINT32 ui32Length) | 3044 | IMG_UINT32 ui32Length) |
3011 | { | 3045 | { |
3012 | dma_cache_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); | 3046 | if (ui32Length) |
3047 | dma_cache_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); | ||
3013 | return IMG_TRUE; | 3048 | return IMG_TRUE; |
3014 | } | 3049 | } |
3015 | 3050 | ||
diff --git a/drivers/gpu/pvr/pdump/dbgdriv.c b/drivers/gpu/pvr/pdump/dbgdriv.c index a1ca244f5f7..f8f635fd1e6 100644 --- a/drivers/gpu/pvr/pdump/dbgdriv.c +++ b/drivers/gpu/pvr/pdump/dbgdriv.c | |||
@@ -707,7 +707,7 @@ void MonoOut(IMG_CHAR * pszString,IMG_BOOL bNewLine) | |||
707 | PVR_UNREFERENCED_PARAMETER(bNewLine); | 707 | PVR_UNREFERENCED_PARAMETER(bNewLine); |
708 | 708 | ||
709 | #else | 709 | #else |
710 | IMG_UINT32 i; | 710 | IMG_UINT32 i; |
711 | IMG_CHAR * pScreen; | 711 | IMG_CHAR * pScreen; |
712 | 712 | ||
713 | pScreen = (IMG_CHAR *) DBGDRIV_MONOBASE; | 713 | pScreen = (IMG_CHAR *) DBGDRIV_MONOBASE; |
@@ -842,10 +842,10 @@ static IMG_UINT32 WriteExpandingBuffer(PDBG_STREAM psStream,IMG_UINT8 * pui8InBu | |||
842 | } | 842 | } |
843 | 843 | ||
844 | IMG_VOID * IMG_CALLCONV DBGDrivCreateStream(IMG_CHAR * pszName, | 844 | IMG_VOID * IMG_CALLCONV DBGDrivCreateStream(IMG_CHAR * pszName, |
845 | IMG_UINT32 ui32CapMode, | 845 | IMG_UINT32 ui32CapMode, |
846 | IMG_UINT32 ui32OutMode, | 846 | IMG_UINT32 ui32OutMode, |
847 | IMG_UINT32 ui32Flags, | 847 | IMG_UINT32 ui32Flags, |
848 | IMG_UINT32 ui32Size) | 848 | IMG_UINT32 ui32Size) |
849 | { | 849 | { |
850 | PDBG_STREAM psStream; | 850 | PDBG_STREAM psStream; |
851 | PDBG_STREAM psInitStream; | 851 | PDBG_STREAM psInitStream; |
diff --git a/drivers/gpu/pvr/pdump/dbgdriv.h b/drivers/gpu/pvr/pdump/dbgdriv.h index a285d0d919b..dc75f88f160 100644 --- a/drivers/gpu/pvr/pdump/dbgdriv.h +++ b/drivers/gpu/pvr/pdump/dbgdriv.h | |||
@@ -29,9 +29,9 @@ | |||
29 | 29 | ||
30 | #define BUFFER_SIZE 64*PAGESIZE | 30 | #define BUFFER_SIZE 64*PAGESIZE |
31 | 31 | ||
32 | #define DBGDRIV_VERSION 0x100 | 32 | #define DBGDRIV_VERSION 0x100 |
33 | #define MAX_PROCESSES 2 | 33 | #define MAX_PROCESSES 2 |
34 | #define BLOCK_USED 0x01 | 34 | #define BLOCK_USED 0x01 |
35 | #define BLOCK_LOCKED 0x02 | 35 | #define BLOCK_LOCKED 0x02 |
36 | #define DBGDRIV_MONOBASE 0x000B0000 | 36 | #define DBGDRIV_MONOBASE 0x000B0000 |
37 | 37 | ||
@@ -39,10 +39,10 @@ | |||
39 | extern IMG_VOID * g_pvAPIMutex; | 39 | extern IMG_VOID * g_pvAPIMutex; |
40 | 40 | ||
41 | IMG_VOID * IMG_CALLCONV DBGDrivCreateStream(IMG_CHAR * pszName, | 41 | IMG_VOID * IMG_CALLCONV DBGDrivCreateStream(IMG_CHAR * pszName, |
42 | IMG_UINT32 ui32CapMode, | 42 | IMG_UINT32 ui32CapMode, |
43 | IMG_UINT32 ui32OutMode, | 43 | IMG_UINT32 ui32OutMode, |
44 | IMG_UINT32 ui32Flags, | 44 | IMG_UINT32 ui32Flags, |
45 | IMG_UINT32 ui32Pages); | 45 | IMG_UINT32 ui32Pages); |
46 | IMG_VOID IMG_CALLCONV DBGDrivDestroyStream(PDBG_STREAM psStream); | 46 | IMG_VOID IMG_CALLCONV DBGDrivDestroyStream(PDBG_STREAM psStream); |
47 | IMG_VOID * IMG_CALLCONV DBGDrivFindStream(IMG_CHAR * pszName, IMG_BOOL bResetStream); | 47 | IMG_VOID * IMG_CALLCONV DBGDrivFindStream(IMG_CHAR * pszName, IMG_BOOL bResetStream); |
48 | IMG_UINT32 IMG_CALLCONV DBGDrivWriteString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level); | 48 | IMG_UINT32 IMG_CALLCONV DBGDrivWriteString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level); |
diff --git a/drivers/gpu/pvr/pdump/dbgdriv_ioctl.h b/drivers/gpu/pvr/pdump/dbgdriv_ioctl.h index 8cef6ac78a8..68492495115 100644 --- a/drivers/gpu/pvr/pdump/dbgdriv_ioctl.h +++ b/drivers/gpu/pvr/pdump/dbgdriv_ioctl.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. | 3 | * Copyright (C) Imagination Technologies Ltd. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/gpu/pvr/pdump/handle.c b/drivers/gpu/pvr/pdump/handle.c index dceeab886c1..8ba44df7055 100644 --- a/drivers/gpu/pvr/pdump/handle.c +++ b/drivers/gpu/pvr/pdump/handle.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. | 3 | * Copyright (C) Imagination Technologies Ltd. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
@@ -68,7 +68,7 @@ PDBG_STREAM SID2PStream(IMG_SID hStream) | |||
68 | } | 68 | } |
69 | else | 69 | else |
70 | { | 70 | { |
71 | return (PDBG_STREAM)IMG_NULL; | 71 | return (PDBG_STREAM)IMG_NULL; |
72 | } | 72 | } |
73 | } | 73 | } |
74 | 74 | ||
diff --git a/drivers/gpu/pvr/pdump/hostfunc.c b/drivers/gpu/pvr/pdump/hostfunc.c index 64b20cc37b8..5eb8e1cc91a 100644 --- a/drivers/gpu/pvr/pdump/hostfunc.c +++ b/drivers/gpu/pvr/pdump/hostfunc.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. | 3 | * Copyright (C) Imagination Technologies Ltd. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
@@ -29,13 +29,17 @@ | |||
29 | #include <linux/module.h> | 29 | #include <linux/module.h> |
30 | #include <linux/fs.h> | 30 | #include <linux/fs.h> |
31 | #include <linux/kernel.h> | 31 | #include <linux/kernel.h> |
32 | #include <linux/slab.h> | ||
32 | #include <linux/mm.h> | 33 | #include <linux/mm.h> |
33 | #include <linux/string.h> | 34 | #include <linux/string.h> |
34 | #include <asm/page.h> | 35 | #include <asm/page.h> |
35 | #include <linux/vmalloc.h> | 36 | #include <linux/vmalloc.h> |
37 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,15)) | ||
36 | #include <linux/mutex.h> | 38 | #include <linux/mutex.h> |
39 | #else | ||
40 | #include <asm/semaphore.h> | ||
41 | #endif | ||
37 | #include <linux/hardirq.h> | 42 | #include <linux/hardirq.h> |
38 | #include <linux/slab.h> | ||
39 | 43 | ||
40 | #if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) | 44 | #if defined(SUPPORT_DBGDRV_EVENT_OBJECTS) |
41 | #include <linux/sched.h> | 45 | #include <linux/sched.h> |
@@ -51,13 +55,13 @@ | |||
51 | #include "hostfunc.h" | 55 | #include "hostfunc.h" |
52 | #include "dbgdriv.h" | 56 | #include "dbgdriv.h" |
53 | 57 | ||
54 | #if defined(DEBUG) && !defined(SUPPORT_DRI_DRM) | 58 | #if defined(MODULE) && defined(DEBUG) && !defined(SUPPORT_DRI_DRM) |
55 | IMG_UINT32 gPVRDumpDebugLevel = (DBGPRIV_FATAL | DBGPRIV_ERROR | DBGPRIV_WARNING); | 59 | IMG_UINT32 gPVRDebugLevel = (DBGPRIV_FATAL | DBGPRIV_ERROR | DBGPRIV_WARNING); |
56 | 60 | ||
57 | #define PVR_STRING_TERMINATOR '\0' | 61 | #define PVR_STRING_TERMINATOR '\0' |
58 | #define PVR_IS_FILE_SEPARATOR(character) ( ((character) == '\\') || ((character) == '/') ) | 62 | #define PVR_IS_FILE_SEPARATOR(character) ( ((character) == '\\') || ((character) == '/') ) |
59 | 63 | ||
60 | void PVRSRVDumpDebugPrintf ( | 64 | void PVRSRVDebugPrintf ( |
61 | IMG_UINT32 ui32DebugLevel, | 65 | IMG_UINT32 ui32DebugLevel, |
62 | const IMG_CHAR* pszFileName, | 66 | const IMG_CHAR* pszFileName, |
63 | IMG_UINT32 ui32Line, | 67 | IMG_UINT32 ui32Line, |
@@ -79,7 +83,7 @@ void PVRSRVDumpDebugPrintf ( | |||
79 | 83 | ||
80 | bTrace = (IMG_BOOL)(ui32DebugLevel & DBGPRIV_CALLTRACE) ? IMG_TRUE : IMG_FALSE; | 84 | bTrace = (IMG_BOOL)(ui32DebugLevel & DBGPRIV_CALLTRACE) ? IMG_TRUE : IMG_FALSE; |
81 | 85 | ||
82 | if (gPVRDumpDebugLevel & ui32DebugLevel) | 86 | if (gPVRDebugLevel & ui32DebugLevel) |
83 | { | 87 | { |
84 | va_list vaArgs; | 88 | va_list vaArgs; |
85 | static char szBuffer[256]; | 89 | static char szBuffer[256]; |
@@ -131,7 +135,7 @@ void PVRSRVDumpDebugPrintf ( | |||
131 | vsprintf (&szBuffer[strlen(szBuffer)], pszFormat, vaArgs); | 135 | vsprintf (&szBuffer[strlen(szBuffer)], pszFormat, vaArgs); |
132 | 136 | ||
133 | 137 | ||
134 | if (bTrace == IMG_FALSE) | 138 | if (bTrace == IMG_FALSE) |
135 | { | 139 | { |
136 | sprintf (&szBuffer[strlen(szBuffer)], " [%d, %s]", (int)ui32Line, pszFileName); | 140 | sprintf (&szBuffer[strlen(szBuffer)], " [%d, %s]", (int)ui32Line, pszFileName); |
137 | } | 141 | } |
diff --git a/drivers/gpu/pvr/pdump/hostfunc.h b/drivers/gpu/pvr/pdump/hostfunc.h index 42733d7c131..acfc439db0a 100644 --- a/drivers/gpu/pvr/pdump/hostfunc.h +++ b/drivers/gpu/pvr/pdump/hostfunc.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. | 3 | * Copyright (C) Imagination Technologies Ltd. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/gpu/pvr/pdump/hotkey.c b/drivers/gpu/pvr/pdump/hotkey.c index 48853c79537..2d82b6cf6d9 100644 --- a/drivers/gpu/pvr/pdump/hotkey.c +++ b/drivers/gpu/pvr/pdump/hotkey.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. | 3 | * Copyright (C) Imagination Technologies Ltd. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/gpu/pvr/pdump/hotkey.h b/drivers/gpu/pvr/pdump/hotkey.h index d9c9458da74..942d2daa3a9 100644 --- a/drivers/gpu/pvr/pdump/hotkey.h +++ b/drivers/gpu/pvr/pdump/hotkey.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. | 3 | * Copyright (C) Imagination Technologies Ltd. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
diff --git a/drivers/gpu/pvr/pdump/ioctl.c b/drivers/gpu/pvr/pdump/ioctl.c index e646c4f9324..1d291468526 100644 --- a/drivers/gpu/pvr/pdump/ioctl.c +++ b/drivers/gpu/pvr/pdump/ioctl.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. | 3 | * Copyright (C) Imagination Technologies Ltd. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
@@ -194,7 +194,7 @@ static IMG_UINT32 DBGDIOCDrivWrite2(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffe | |||
194 | { | 194 | { |
195 | IMG_UINT32 * pui32BytesCopied; | 195 | IMG_UINT32 * pui32BytesCopied; |
196 | PDBG_IN_WRITE psInParams; | 196 | PDBG_IN_WRITE psInParams; |
197 | PDBG_STREAM psStream; | 197 | PDBG_STREAM psStream; |
198 | 198 | ||
199 | psInParams = (PDBG_IN_WRITE) pvInBuffer; | 199 | psInParams = (PDBG_IN_WRITE) pvInBuffer; |
200 | pui32BytesCopied = (IMG_UINT32 *) pvOutBuffer; | 200 | pui32BytesCopied = (IMG_UINT32 *) pvOutBuffer; |
diff --git a/drivers/gpu/pvr/pdump/linuxsrv.h b/drivers/gpu/pvr/pdump/linuxsrv.h index 671622fa8b4..4888cd04214 100644 --- a/drivers/gpu/pvr/pdump/linuxsrv.h +++ b/drivers/gpu/pvr/pdump/linuxsrv.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. | 3 | * Copyright (C) Imagination Technologies Ltd. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
@@ -31,7 +31,7 @@ typedef struct tagIOCTL_PACKAGE | |||
31 | { | 31 | { |
32 | IMG_UINT32 ui32Cmd; | 32 | IMG_UINT32 ui32Cmd; |
33 | IMG_UINT32 ui32Size; | 33 | IMG_UINT32 ui32Size; |
34 | IMG_VOID *pInBuffer; | 34 | IMG_VOID *pInBuffer; |
35 | IMG_UINT32 ui32InBufferSize; | 35 | IMG_UINT32 ui32InBufferSize; |
36 | IMG_VOID *pOutBuffer; | 36 | IMG_VOID *pOutBuffer; |
37 | IMG_UINT32 ui32OutBufferSize; | 37 | IMG_UINT32 ui32OutBufferSize; |
diff --git a/drivers/gpu/pvr/pdump/main.c b/drivers/gpu/pvr/pdump/main.c index 69c0d9b1a97..45d041b087f 100644 --- a/drivers/gpu/pvr/pdump/main.c +++ b/drivers/gpu/pvr/pdump/main.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. | 3 | * Copyright (C) Imagination Technologies Ltd. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
@@ -116,7 +116,7 @@ IMG_VOID DBGDrvGetServiceTable(IMG_VOID **fn_table) | |||
116 | #if defined(SUPPORT_DRI_DRM) | 116 | #if defined(SUPPORT_DRI_DRM) |
117 | void dbgdrv_cleanup(void) | 117 | void dbgdrv_cleanup(void) |
118 | #else | 118 | #else |
119 | void __exit dbgdrv_cleanup_module(void) | 119 | static void __exit dbgdrv_cleanup(void) |
120 | #endif | 120 | #endif |
121 | { | 121 | { |
122 | #if !defined(SUPPORT_DRI_DRM) | 122 | #if !defined(SUPPORT_DRI_DRM) |
@@ -136,7 +136,7 @@ void __exit dbgdrv_cleanup_module(void) | |||
136 | #if defined(SUPPORT_DRI_DRM) | 136 | #if defined(SUPPORT_DRI_DRM) |
137 | IMG_INT dbgdrv_init(void) | 137 | IMG_INT dbgdrv_init(void) |
138 | #else | 138 | #else |
139 | int __init dbgdrv_init_module(void) | 139 | static int __init dbgdrv_init(void) |
140 | #endif | 140 | #endif |
141 | { | 141 | { |
142 | #if (defined(LDM_PLATFORM) || defined(LDM_PCI)) && !defined(SUPPORT_DRI_DRM) | 142 | #if (defined(LDM_PLATFORM) || defined(LDM_PCI)) && !defined(SUPPORT_DRI_DRM) |
@@ -240,6 +240,7 @@ long dbgdrv_ioctl(struct file *file, unsigned int ioctlCmd, unsigned long arg) | |||
240 | goto init_failed; | 240 | goto init_failed; |
241 | } | 241 | } |
242 | 242 | ||
243 | |||
243 | cmd = MAKEIOCTLINDEX(pIP->ui32Cmd) - DEBUG_SERVICE_IOCTL_BASE - 1; | 244 | cmd = MAKEIOCTLINDEX(pIP->ui32Cmd) - DEBUG_SERVICE_IOCTL_BASE - 1; |
244 | 245 | ||
245 | if(pIP->ui32Cmd == DEBUG_SERVICE_READ) | 246 | if(pIP->ui32Cmd == DEBUG_SERVICE_READ) |
@@ -310,5 +311,7 @@ IMG_VOID DefineHotKey (IMG_UINT32 ui32ScanCode, IMG_UINT32 ui32ShiftState, PHOTK | |||
310 | 311 | ||
311 | EXPORT_SYMBOL(DBGDrvGetServiceTable); | 312 | EXPORT_SYMBOL(DBGDrvGetServiceTable); |
312 | 313 | ||
313 | module_init(dbgdrv_init_module); | 314 | #if !defined(SUPPORT_DRI_DRM) |
314 | module_exit(dbgdrv_cleanup_module); | 315 | subsys_initcall(dbgdrv_init); |
316 | module_exit(dbgdrv_cleanup); | ||
317 | #endif | ||
diff --git a/drivers/gpu/pvr/perproc.c b/drivers/gpu/pvr/perproc.c index 1753388b1bb..eb73166bb32 100644 --- a/drivers/gpu/pvr/perproc.c +++ b/drivers/gpu/pvr/perproc.c | |||
@@ -127,7 +127,10 @@ PVRSRV_ERROR PVRSRVPerProcessDataConnect(IMG_UINT32 ui32PID, IMG_UINT32 ui32Flag | |||
127 | IMG_HANDLE hBlockAlloc; | 127 | IMG_HANDLE hBlockAlloc; |
128 | PVRSRV_ERROR eError = PVRSRV_OK; | 128 | PVRSRV_ERROR eError = PVRSRV_OK; |
129 | 129 | ||
130 | PVR_ASSERT(psHashTab != IMG_NULL); | 130 | if (psHashTab == IMG_NULL) |
131 | { | ||
132 | return PVRSRV_ERROR_INIT_FAILURE; | ||
133 | } | ||
131 | 134 | ||
132 | 135 | ||
133 | psPerProc = (PVRSRV_PER_PROCESS_DATA *)HASH_Retrieve(psHashTab, (IMG_UINTPTR_T)ui32PID); | 136 | psPerProc = (PVRSRV_PER_PROCESS_DATA *)HASH_Retrieve(psHashTab, (IMG_UINTPTR_T)ui32PID); |
diff --git a/drivers/gpu/pvr/pvr_bridge_km.h b/drivers/gpu/pvr/pvr_bridge_km.h index c1fd04cb312..1175b76c194 100644 --- a/drivers/gpu/pvr/pvr_bridge_km.h +++ b/drivers/gpu/pvr/pvr_bridge_km.h | |||
@@ -109,7 +109,7 @@ PVRSRV_ERROR IMG_CALLCONV _PVRSRVAllocDeviceMemKM(IMG_HANDLE hDevCookie, | |||
109 | #if defined(PVRSRV_LOG_MEMORY_ALLOCS) | 109 | #if defined(PVRSRV_LOG_MEMORY_ALLOCS) |
110 | #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo, logStr) \ | 110 | #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo, logStr) \ |
111 | (PVR_TRACE(("PVRSRVAllocDeviceMemKM(" #devCookie ", " #perProc ", " #devMemHeap ", " #flags ", " #size \ | 111 | (PVR_TRACE(("PVRSRVAllocDeviceMemKM(" #devCookie ", " #perProc ", " #devMemHeap ", " #flags ", " #size \ |
112 | ", " #alignment "," #memInfo "): " logStr " (size = 0x%;x)", size)),\ | 112 | ", " #alignment "," #memInfo "): " logStr " (size = 0x%x)", size)),\ |
113 | _PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo)) | 113 | _PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo)) |
114 | #else | 114 | #else |
115 | #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo, logStr) \ | 115 | #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, memInfo, logStr) \ |
diff --git a/drivers/gpu/pvr/pvr_debug.c b/drivers/gpu/pvr/pvr_debug.c index 091f6590e70..2e64fe6ed36 100644 --- a/drivers/gpu/pvr/pvr_debug.c +++ b/drivers/gpu/pvr/pvr_debug.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | * | 2 | * |
3 | * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. | 3 | * Copyright (C) Imagination Technologies Ltd. All rights reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | 5 | * This program is free software; you can redistribute it and/or modify it |
6 | * under the terms and conditions of the GNU General Public License, | 6 | * under the terms and conditions of the GNU General Public License, |
@@ -312,7 +312,8 @@ IMG_VOID PVRSRVDebugPrintf ( | |||
312 | IMG_CHAR* pszTruncBackInter; | 312 | IMG_CHAR* pszTruncBackInter; |
313 | 313 | ||
314 | 314 | ||
315 | pszFileName = pszFullFileName + strlen(DEBUG_LOG_PATH_TRUNCATE)+1; | 315 | if (strlen(pszFullFileName) > strlen(DEBUG_LOG_PATH_TRUNCATE)+1) |
316 | pszFileName = pszFullFileName + strlen(DEBUG_LOG_PATH_TRUNCATE)+1; | ||
316 | 317 | ||
317 | 318 | ||
318 | strncpy(szFileNameRewrite, pszFileName,PVR_MAX_FILEPATH_LEN); | 319 | strncpy(szFileNameRewrite, pszFileName,PVR_MAX_FILEPATH_LEN); |
diff --git a/drivers/gpu/pvr/pvrversion.h b/drivers/gpu/pvr/pvrversion.h index 8c4505e2832..0e6e0e48929 100644 --- a/drivers/gpu/pvr/pvrversion.h +++ b/drivers/gpu/pvr/pvrversion.h | |||
@@ -30,8 +30,8 @@ | |||
30 | #define PVRVERSION_MAJ 1 | 30 | #define PVRVERSION_MAJ 1 |
31 | #define PVRVERSION_MIN 7 | 31 | #define PVRVERSION_MIN 7 |
32 | #define PVRVERSION_BRANCH 17 | 32 | #define PVRVERSION_BRANCH 17 |
33 | #define PVRVERSION_BUILD 3957 | 33 | #define PVRVERSION_BUILD 4403 |
34 | #define PVRVERSION_STRING "1.7.17.3957" | 34 | #define PVRVERSION_STRING "1.7.17.4403" |
35 | #define PVRVERSION_FILE "eurasiacon.pj" | 35 | #define PVRVERSION_FILE "eurasiacon.pj" |
36 | 36 | ||
37 | #endif | 37 | #endif |
diff --git a/drivers/gpu/pvr/resman.c b/drivers/gpu/pvr/resman.c index 5230952be84..b3a4534c809 100644 --- a/drivers/gpu/pvr/resman.c +++ b/drivers/gpu/pvr/resman.c | |||
@@ -122,7 +122,7 @@ static IMPLEMENT_LIST_INSERT(RESMAN_CONTEXT) | |||
122 | 122 | ||
123 | #define PRINT_RESLIST(x, y, z) | 123 | #define PRINT_RESLIST(x, y, z) |
124 | 124 | ||
125 | static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, IMG_BOOL bExecuteCallback); | 125 | static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, IMG_BOOL bExecuteCallback, IMG_BOOL bForceCleanup); |
126 | 126 | ||
127 | static PVRSRV_ERROR FreeResourceByCriteria(PRESMAN_CONTEXT psContext, | 127 | static PVRSRV_ERROR FreeResourceByCriteria(PRESMAN_CONTEXT psContext, |
128 | IMG_UINT32 ui32SearchCriteria, | 128 | IMG_UINT32 ui32SearchCriteria, |
@@ -379,7 +379,7 @@ PRESMAN_ITEM ResManRegisterRes(PRESMAN_CONTEXT psResManContext, | |||
379 | return(psNewResItem); | 379 | return(psNewResItem); |
380 | } | 380 | } |
381 | 381 | ||
382 | PVRSRV_ERROR ResManFreeResByPtr(RESMAN_ITEM *psResItem) | 382 | PVRSRV_ERROR ResManFreeResByPtr(RESMAN_ITEM *psResItem, IMG_BOOL bForceCleanup) |
383 | { | 383 | { |
384 | PVRSRV_ERROR eError; | 384 | PVRSRV_ERROR eError; |
385 | 385 | ||
@@ -401,7 +401,7 @@ PVRSRV_ERROR ResManFreeResByPtr(RESMAN_ITEM *psResItem) | |||
401 | VALIDATERESLIST(); | 401 | VALIDATERESLIST(); |
402 | 402 | ||
403 | 403 | ||
404 | eError = FreeResourceByPtr(psResItem, IMG_TRUE); | 404 | eError = FreeResourceByPtr(psResItem, IMG_TRUE, bForceCleanup); |
405 | 405 | ||
406 | 406 | ||
407 | VALIDATERESLIST(); | 407 | VALIDATERESLIST(); |
@@ -478,7 +478,7 @@ PVRSRV_ERROR ResManDissociateRes(RESMAN_ITEM *psResItem, | |||
478 | } | 478 | } |
479 | else | 479 | else |
480 | { | 480 | { |
481 | eError = FreeResourceByPtr(psResItem, IMG_FALSE); | 481 | eError = FreeResourceByPtr(psResItem, IMG_FALSE, CLEANUP_WITH_POLL); |
482 | if(eError != PVRSRV_OK) | 482 | if(eError != PVRSRV_OK) |
483 | { | 483 | { |
484 | PVR_DPF((PVR_DBG_ERROR, "ResManDissociateRes: failed to free resource by pointer")); | 484 | PVR_DPF((PVR_DBG_ERROR, "ResManDissociateRes: failed to free resource by pointer")); |
@@ -554,9 +554,10 @@ IMG_INTERNAL PVRSRV_ERROR ResManFindResourceByPtr(PRESMAN_CONTEXT psResManContex | |||
554 | } | 554 | } |
555 | 555 | ||
556 | static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, | 556 | static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, |
557 | IMG_BOOL bExecuteCallback) | 557 | IMG_BOOL bExecuteCallback, |
558 | IMG_BOOL bForceCleanup) | ||
558 | { | 559 | { |
559 | PVRSRV_ERROR eError; | 560 | PVRSRV_ERROR eError = PVRSRV_OK; |
560 | 561 | ||
561 | PVR_ASSERT(psItem != IMG_NULL); | 562 | PVR_ASSERT(psItem != IMG_NULL); |
562 | 563 | ||
@@ -591,7 +592,7 @@ static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, | |||
591 | 592 | ||
592 | if (bExecuteCallback) | 593 | if (bExecuteCallback) |
593 | { | 594 | { |
594 | eError = psItem->pfnFreeResource(psItem->pvParam, psItem->ui32Param); | 595 | eError = psItem->pfnFreeResource(psItem->pvParam, psItem->ui32Param, bForceCleanup); |
595 | if (eError != PVRSRV_OK) | 596 | if (eError != PVRSRV_OK) |
596 | { | 597 | { |
597 | PVR_DPF((PVR_DBG_ERROR, "FreeResourceByPtr: ERROR calling FreeResource function")); | 598 | PVR_DPF((PVR_DBG_ERROR, "FreeResourceByPtr: ERROR calling FreeResource function")); |
@@ -602,11 +603,7 @@ static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, | |||
602 | ACQUIRE_SYNC_OBJ; | 603 | ACQUIRE_SYNC_OBJ; |
603 | 604 | ||
604 | 605 | ||
605 | eError = OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(RESMAN_ITEM), psItem, IMG_NULL); | 606 | OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(RESMAN_ITEM), psItem, IMG_NULL); |
606 | if (eError != PVRSRV_OK) | ||
607 | { | ||
608 | PVR_DPF((PVR_DBG_ERROR, "FreeResourceByPtr: ERROR freeing resource list item memory")); | ||
609 | } | ||
610 | 607 | ||
611 | return(eError); | 608 | return(eError); |
612 | } | 609 | } |
@@ -667,7 +664,7 @@ static PVRSRV_ERROR FreeResourceByCriteria(PRESMAN_CONTEXT psResManContext, | |||
667 | ui32Param)) != IMG_NULL | 664 | ui32Param)) != IMG_NULL |
668 | && eError == PVRSRV_OK) | 665 | && eError == PVRSRV_OK) |
669 | { | 666 | { |
670 | eError = FreeResourceByPtr(psCurItem, bExecuteCallback); | 667 | eError = FreeResourceByPtr(psCurItem, bExecuteCallback, CLEANUP_WITH_POLL); |
671 | } | 668 | } |
672 | 669 | ||
673 | return eError; | 670 | return eError; |
diff --git a/drivers/gpu/pvr/resman.h b/drivers/gpu/pvr/resman.h index 11af49be72d..c20719fe446 100644 --- a/drivers/gpu/pvr/resman.h +++ b/drivers/gpu/pvr/resman.h | |||
@@ -76,7 +76,7 @@ enum { | |||
76 | #define RESMAN_CRITERIA_PVOID_PARAM 0x00000002 | 76 | #define RESMAN_CRITERIA_PVOID_PARAM 0x00000002 |
77 | #define RESMAN_CRITERIA_UI32_PARAM 0x00000004 | 77 | #define RESMAN_CRITERIA_UI32_PARAM 0x00000004 |
78 | 78 | ||
79 | typedef PVRSRV_ERROR (*RESMAN_FREE_FN)(IMG_PVOID pvParam, IMG_UINT32 ui32Param); | 79 | typedef PVRSRV_ERROR (*RESMAN_FREE_FN)(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bForceCleanup); |
80 | 80 | ||
81 | typedef struct _RESMAN_ITEM_ *PRESMAN_ITEM; | 81 | typedef struct _RESMAN_ITEM_ *PRESMAN_ITEM; |
82 | typedef struct _RESMAN_CONTEXT_ *PRESMAN_CONTEXT; | 82 | typedef struct _RESMAN_CONTEXT_ *PRESMAN_CONTEXT; |
@@ -90,7 +90,8 @@ PRESMAN_ITEM ResManRegisterRes(PRESMAN_CONTEXT hResManContext, | |||
90 | IMG_UINT32 ui32Param, | 90 | IMG_UINT32 ui32Param, |
91 | RESMAN_FREE_FN pfnFreeResource); | 91 | RESMAN_FREE_FN pfnFreeResource); |
92 | 92 | ||
93 | PVRSRV_ERROR ResManFreeResByPtr(PRESMAN_ITEM psResItem); | 93 | PVRSRV_ERROR ResManFreeResByPtr(PRESMAN_ITEM psResItem, |
94 | IMG_BOOL bForceCleanup); | ||
94 | 95 | ||
95 | PVRSRV_ERROR ResManFreeResByCriteria(PRESMAN_CONTEXT hResManContext, | 96 | PVRSRV_ERROR ResManFreeResByCriteria(PRESMAN_CONTEXT hResManContext, |
96 | IMG_UINT32 ui32SearchCriteria, | 97 | IMG_UINT32 ui32SearchCriteria, |
diff --git a/drivers/gpu/pvr/services.h b/drivers/gpu/pvr/services.h index 3539e26448a..c61313a5f11 100644 --- a/drivers/gpu/pvr/services.h +++ b/drivers/gpu/pvr/services.h | |||
@@ -1066,6 +1066,10 @@ IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyMutex(PVRSRV_MUTEX_HANDLE hMut | |||
1066 | IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVLockMutex(PVRSRV_MUTEX_HANDLE hMutex); | 1066 | IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVLockMutex(PVRSRV_MUTEX_HANDLE hMutex); |
1067 | IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVUnlockMutex(PVRSRV_MUTEX_HANDLE hMutex); | 1067 | IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVUnlockMutex(PVRSRV_MUTEX_HANDLE hMutex); |
1068 | 1068 | ||
1069 | IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVLockProcessGlobalMutex(void); | ||
1070 | IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVUnlockProcessGlobalMutex(void); | ||
1071 | |||
1072 | |||
1069 | struct _PVRSRV_SEMAPHORE_OPAQUE_STRUCT_; | 1073 | struct _PVRSRV_SEMAPHORE_OPAQUE_STRUCT_; |
1070 | typedef struct _PVRSRV_SEMAPHORE_OPAQUE_STRUCT_ *PVRSRV_SEMAPHORE_HANDLE; | 1074 | typedef struct _PVRSRV_SEMAPHORE_OPAQUE_STRUCT_ *PVRSRV_SEMAPHORE_HANDLE; |
1071 | 1075 | ||
diff --git a/drivers/gpu/pvr/servicesext.h b/drivers/gpu/pvr/servicesext.h index 9a494b3dbcf..fdd63cb62fc 100644 --- a/drivers/gpu/pvr/servicesext.h +++ b/drivers/gpu/pvr/servicesext.h | |||
@@ -587,7 +587,13 @@ typedef enum _PVRSRV_PIXEL_FORMAT_ { | |||
587 | PVRSRV_PIXEL_FORMAT_C1_4KYUV420_2P_VU = 218, | 587 | PVRSRV_PIXEL_FORMAT_C1_4KYUV420_2P_VU = 218, |
588 | PVRSRV_PIXEL_FORMAT_P208 = 219, | 588 | PVRSRV_PIXEL_FORMAT_P208 = 219, |
589 | PVRSRV_PIXEL_FORMAT_A8P8 = 220, | 589 | PVRSRV_PIXEL_FORMAT_A8P8 = 220, |
590 | 590 | ||
591 | PVRSRV_PIXEL_FORMAT_A4 = 221, | ||
592 | PVRSRV_PIXEL_FORMAT_AYUV8888 = 222, | ||
593 | PVRSRV_PIXEL_FORMAT_RAW256 = 223, | ||
594 | PVRSRV_PIXEL_FORMAT_RAW512 = 224, | ||
595 | PVRSRV_PIXEL_FORMAT_RAW1024 = 225, | ||
596 | |||
591 | PVRSRV_PIXEL_FORMAT_FORCE_I32 = 0x7fffffff | 597 | PVRSRV_PIXEL_FORMAT_FORCE_I32 = 0x7fffffff |
592 | 598 | ||
593 | } PVRSRV_PIXEL_FORMAT; | 599 | } PVRSRV_PIXEL_FORMAT; |
@@ -779,47 +785,6 @@ typedef struct ACCESS_INFO_TAG | |||
779 | }ACCESS_INFO; | 785 | }ACCESS_INFO; |
780 | 786 | ||
781 | 787 | ||
782 | typedef struct PVRSRV_CURSOR_SHAPE_TAG | ||
783 | { | ||
784 | IMG_UINT16 ui16Width; | ||
785 | IMG_UINT16 ui16Height; | ||
786 | IMG_INT16 i16XHot; | ||
787 | IMG_INT16 i16YHot; | ||
788 | |||
789 | |||
790 | IMG_VOID* pvMask; | ||
791 | IMG_INT16 i16MaskByteStride; | ||
792 | |||
793 | |||
794 | IMG_VOID* pvColour; | ||
795 | IMG_INT16 i16ColourByteStride; | ||
796 | PVRSRV_PIXEL_FORMAT eColourPixelFormat; | ||
797 | } PVRSRV_CURSOR_SHAPE; | ||
798 | |||
799 | #define PVRSRV_SET_CURSOR_VISIBILITY (1<<0) | ||
800 | #define PVRSRV_SET_CURSOR_POSITION (1<<1) | ||
801 | #define PVRSRV_SET_CURSOR_SHAPE (1<<2) | ||
802 | #define PVRSRV_SET_CURSOR_ROTATION (1<<3) | ||
803 | |||
804 | typedef struct PVRSRV_CURSOR_INFO_TAG | ||
805 | { | ||
806 | |||
807 | IMG_UINT32 ui32Flags; | ||
808 | |||
809 | |||
810 | IMG_BOOL bVisible; | ||
811 | |||
812 | |||
813 | IMG_INT16 i16XPos; | ||
814 | IMG_INT16 i16YPos; | ||
815 | |||
816 | |||
817 | PVRSRV_CURSOR_SHAPE sCursorShape; | ||
818 | |||
819 | |||
820 | IMG_UINT32 ui32Rotation; | ||
821 | |||
822 | } PVRSRV_CURSOR_INFO; | ||
823 | 788 | ||
824 | #if defined(PDUMP_SUSPEND_IS_PER_THREAD) | 789 | #if defined(PDUMP_SUSPEND_IS_PER_THREAD) |
825 | typedef struct { | 790 | typedef struct { |
diff --git a/drivers/gpu/pvr/sgx/bridged_sgx_bridge.c b/drivers/gpu/pvr/sgx/bridged_sgx_bridge.c index 03343e8ed14..9591c55a731 100644 --- a/drivers/gpu/pvr/sgx/bridged_sgx_bridge.c +++ b/drivers/gpu/pvr/sgx/bridged_sgx_bridge.c | |||
@@ -49,6 +49,7 @@ | |||
49 | #include "bridged_pvr_bridge.h" | 49 | #include "bridged_pvr_bridge.h" |
50 | #include "bridged_sgx_bridge.h" | 50 | #include "bridged_sgx_bridge.h" |
51 | #include "sgxutils.h" | 51 | #include "sgxutils.h" |
52 | #include "buffer_manager.h" | ||
52 | #include "pdump_km.h" | 53 | #include "pdump_km.h" |
53 | 54 | ||
54 | static IMG_INT | 55 | static IMG_INT |
@@ -2185,7 +2186,8 @@ SGXUnregisterHWRenderContextBW(IMG_UINT32 ui32BridgeID, | |||
2185 | return 0; | 2186 | return 0; |
2186 | } | 2187 | } |
2187 | 2188 | ||
2188 | psRetOUT->eError = SGXUnregisterHWRenderContextKM(hHWRenderContextInt); | 2189 | psRetOUT->eError = SGXUnregisterHWRenderContextKM(hHWRenderContextInt, |
2190 | psSGXUnregHWRenderContextIN->bForceCleanup); | ||
2189 | if(psRetOUT->eError != PVRSRV_OK) | 2191 | if(psRetOUT->eError != PVRSRV_OK) |
2190 | { | 2192 | { |
2191 | return 0; | 2193 | return 0; |
@@ -2270,7 +2272,8 @@ SGXUnregisterHWTransferContextBW(IMG_UINT32 ui32BridgeID, | |||
2270 | return 0; | 2272 | return 0; |
2271 | } | 2273 | } |
2272 | 2274 | ||
2273 | psRetOUT->eError = SGXUnregisterHWTransferContextKM(hHWTransferContextInt); | 2275 | psRetOUT->eError = SGXUnregisterHWTransferContextKM(hHWTransferContextInt, |
2276 | psSGXUnregHWTransferContextIN->bForceCleanup); | ||
2274 | if(psRetOUT->eError != PVRSRV_OK) | 2277 | if(psRetOUT->eError != PVRSRV_OK) |
2275 | { | 2278 | { |
2276 | return 0; | 2279 | return 0; |
@@ -2352,7 +2355,8 @@ SGXUnregisterHW2DContextBW(IMG_UINT32 ui32BridgeID, | |||
2352 | return 0; | 2355 | return 0; |
2353 | } | 2356 | } |
2354 | 2357 | ||
2355 | psRetOUT->eError = SGXUnregisterHW2DContextKM(hHW2DContextInt); | 2358 | psRetOUT->eError = SGXUnregisterHW2DContextKM(hHW2DContextInt, |
2359 | psSGXUnregHW2DContextIN->bForceCleanup); | ||
2356 | if(psRetOUT->eError != PVRSRV_OK) | 2360 | if(psRetOUT->eError != PVRSRV_OK) |
2357 | { | 2361 | { |
2358 | return 0; | 2362 | return 0; |
@@ -2386,7 +2390,7 @@ SGXFlushHWRenderTargetBW(IMG_UINT32 ui32BridgeID, | |||
2386 | return 0; | 2390 | return 0; |
2387 | } | 2391 | } |
2388 | 2392 | ||
2389 | SGXFlushHWRenderTargetKM(hDevCookieInt, psSGXFlushHWRenderTargetIN->sHWRTDataSetDevVAddr); | 2393 | psRetOUT->eError = SGXFlushHWRenderTargetKM(hDevCookieInt, psSGXFlushHWRenderTargetIN->sHWRTDataSetDevVAddr, IMG_FALSE); |
2390 | 2394 | ||
2391 | return 0; | 2395 | return 0; |
2392 | } | 2396 | } |
diff --git a/drivers/gpu/pvr/sgx/mmu.c b/drivers/gpu/pvr/sgx/mmu.c index 5a087cd449e..974973a5c28 100644 --- a/drivers/gpu/pvr/sgx/mmu.c +++ b/drivers/gpu/pvr/sgx/mmu.c | |||
@@ -79,6 +79,8 @@ typedef struct _MMU_PT_INFO_ | |||
79 | 79 | ||
80 | IMG_VOID *hPTPageOSMemHandle; | 80 | IMG_VOID *hPTPageOSMemHandle; |
81 | IMG_CPU_VIRTADDR PTPageCpuVAddr; | 81 | IMG_CPU_VIRTADDR PTPageCpuVAddr; |
82 | |||
83 | |||
82 | IMG_UINT32 ui32ValidPTECount; | 84 | IMG_UINT32 ui32ValidPTECount; |
83 | } MMU_PT_INFO; | 85 | } MMU_PT_INFO; |
84 | 86 | ||
@@ -2167,7 +2169,8 @@ MMU_UnmapPagesAndFreePTs (MMU_HEAP *psMMUHeap, | |||
2167 | 2169 | ||
2168 | 2170 | ||
2169 | 2171 | ||
2170 | if (ppsPTInfoList[0] && ppsPTInfoList[0]->ui32ValidPTECount == 0) | 2172 | if (ppsPTInfoList[0] && (ppsPTInfoList[0]->ui32ValidPTECount == 0) |
2173 | ) | ||
2171 | { | 2174 | { |
2172 | #if defined(FIX_HW_BRN_31620) | 2175 | #if defined(FIX_HW_BRN_31620) |
2173 | if (BRN31620FreePageTable(psMMUHeap, ui32PDIndex) == IMG_TRUE) | 2176 | if (BRN31620FreePageTable(psMMUHeap, ui32PDIndex) == IMG_TRUE) |
diff --git a/drivers/gpu/pvr/sgx/mmu.h b/drivers/gpu/pvr/sgx/mmu.h index d224f649667..59b24c44ad8 100644 --- a/drivers/gpu/pvr/sgx/mmu.h +++ b/drivers/gpu/pvr/sgx/mmu.h | |||
@@ -145,6 +145,8 @@ IMG_VOID MMU_GetCacheFlushRange(MMU_CONTEXT *pMMUContext, IMG_UINT32 *pui32Range | |||
145 | IMG_VOID MMU_GetPDPhysAddr(MMU_CONTEXT *pMMUContext, IMG_DEV_PHYADDR *psDevPAddr); | 145 | IMG_VOID MMU_GetPDPhysAddr(MMU_CONTEXT *pMMUContext, IMG_DEV_PHYADDR *psDevPAddr); |
146 | 146 | ||
147 | #endif | 147 | #endif |
148 | |||
149 | |||
148 | #if defined(PDUMP) | 150 | #if defined(PDUMP) |
149 | IMG_UINT32 MMU_GetPDumpContextID(IMG_HANDLE hDevMemContext); | 151 | IMG_UINT32 MMU_GetPDumpContextID(IMG_HANDLE hDevMemContext); |
150 | #endif | 152 | #endif |
diff --git a/drivers/gpu/pvr/sgx/pb.c b/drivers/gpu/pvr/sgx/pb.c index d9825c726a3..ab6523a9927 100644 --- a/drivers/gpu/pvr/sgx/pb.c +++ b/drivers/gpu/pvr/sgx/pb.c | |||
@@ -47,8 +47,8 @@ static IMPLEMENT_LIST_REMOVE(PVRSRV_STUB_PBDESC) | |||
47 | static PRESMAN_ITEM psResItemCreateSharedPB = IMG_NULL; | 47 | static PRESMAN_ITEM psResItemCreateSharedPB = IMG_NULL; |
48 | static PVRSRV_PER_PROCESS_DATA *psPerProcCreateSharedPB = IMG_NULL; | 48 | static PVRSRV_PER_PROCESS_DATA *psPerProcCreateSharedPB = IMG_NULL; |
49 | 49 | ||
50 | static PVRSRV_ERROR SGXCleanupSharedPBDescCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param); | 50 | static PVRSRV_ERROR SGXCleanupSharedPBDescCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bDummy); |
51 | static PVRSRV_ERROR SGXCleanupSharedPBDescCreateLockCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param); | 51 | static PVRSRV_ERROR SGXCleanupSharedPBDescCreateLockCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bDummy); |
52 | 52 | ||
53 | IMG_EXPORT PVRSRV_ERROR | 53 | IMG_EXPORT PVRSRV_ERROR |
54 | SGXFindSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, | 54 | SGXFindSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, |
@@ -217,22 +217,24 @@ SGXCleanupSharedPBDescKM(PVRSRV_STUB_PBDESC *psStubPBDescIn) | |||
217 | 217 | ||
218 | SGXCleanupRequest(psDeviceNode, | 218 | SGXCleanupRequest(psDeviceNode, |
219 | &sHWPBDescDevVAddr, | 219 | &sHWPBDescDevVAddr, |
220 | PVRSRV_CLEANUPCMD_PB); | 220 | PVRSRV_CLEANUPCMD_PB, |
221 | CLEANUP_WITH_POLL); | ||
221 | } | 222 | } |
222 | return PVRSRV_OK; | 223 | return PVRSRV_OK; |
223 | 224 | ||
224 | } | 225 | } |
225 | 226 | ||
226 | static PVRSRV_ERROR SGXCleanupSharedPBDescCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param) | 227 | static PVRSRV_ERROR SGXCleanupSharedPBDescCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bDummy) |
227 | { | 228 | { |
228 | PVRSRV_STUB_PBDESC *psStubPBDesc = (PVRSRV_STUB_PBDESC *)pvParam; | 229 | PVRSRV_STUB_PBDESC *psStubPBDesc = (PVRSRV_STUB_PBDESC *)pvParam; |
229 | 230 | ||
230 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 231 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
232 | PVR_UNREFERENCED_PARAMETER(bDummy); | ||
231 | 233 | ||
232 | return SGXCleanupSharedPBDescKM(psStubPBDesc); | 234 | return SGXCleanupSharedPBDescKM(psStubPBDesc); |
233 | } | 235 | } |
234 | 236 | ||
235 | static PVRSRV_ERROR SGXCleanupSharedPBDescCreateLockCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param) | 237 | static PVRSRV_ERROR SGXCleanupSharedPBDescCreateLockCallback(IMG_PVOID pvParam, IMG_UINT32 ui32Param, IMG_BOOL bDummy) |
236 | { | 238 | { |
237 | #ifdef DEBUG | 239 | #ifdef DEBUG |
238 | PVRSRV_PER_PROCESS_DATA *psPerProc = (PVRSRV_PER_PROCESS_DATA *)pvParam; | 240 | PVRSRV_PER_PROCESS_DATA *psPerProc = (PVRSRV_PER_PROCESS_DATA *)pvParam; |
@@ -242,6 +244,7 @@ static PVRSRV_ERROR SGXCleanupSharedPBDescCreateLockCallback(IMG_PVOID pvParam, | |||
242 | #endif | 244 | #endif |
243 | 245 | ||
244 | PVR_UNREFERENCED_PARAMETER(ui32Param); | 246 | PVR_UNREFERENCED_PARAMETER(ui32Param); |
247 | PVR_UNREFERENCED_PARAMETER(bDummy); | ||
245 | 248 | ||
246 | psPerProcCreateSharedPB = IMG_NULL; | 249 | psPerProcCreateSharedPB = IMG_NULL; |
247 | psResItemCreateSharedPB = IMG_NULL; | 250 | psResItemCreateSharedPB = IMG_NULL; |
@@ -255,7 +258,7 @@ SGXUnrefSharedPBDescKM(IMG_HANDLE hSharedPBDesc) | |||
255 | { | 258 | { |
256 | PVR_ASSERT(hSharedPBDesc != IMG_NULL); | 259 | PVR_ASSERT(hSharedPBDesc != IMG_NULL); |
257 | 260 | ||
258 | return ResManFreeResByPtr(hSharedPBDesc); | 261 | return ResManFreeResByPtr(hSharedPBDesc, CLEANUP_WITH_POLL); |
259 | } | 262 | } |
260 | 263 | ||
261 | 264 | ||
@@ -287,7 +290,7 @@ SGXAddSharedPBDescKM(PVRSRV_PER_PROCESS_DATA *psPerProc, | |||
287 | { | 290 | { |
288 | PVR_ASSERT(psResItemCreateSharedPB != IMG_NULL); | 291 | PVR_ASSERT(psResItemCreateSharedPB != IMG_NULL); |
289 | 292 | ||
290 | ResManFreeResByPtr(psResItemCreateSharedPB); | 293 | ResManFreeResByPtr(psResItemCreateSharedPB, CLEANUP_WITH_POLL); |
291 | 294 | ||
292 | PVR_ASSERT(psResItemCreateSharedPB == IMG_NULL); | 295 | PVR_ASSERT(psResItemCreateSharedPB == IMG_NULL); |
293 | PVR_ASSERT(psPerProcCreateSharedPB == IMG_NULL); | 296 | PVR_ASSERT(psPerProcCreateSharedPB == IMG_NULL); |
diff --git a/drivers/gpu/pvr/sgx/sgxinit.c b/drivers/gpu/pvr/sgx/sgxinit.c index f4d37fb1dab..edc56b60f78 100644 --- a/drivers/gpu/pvr/sgx/sgxinit.c +++ b/drivers/gpu/pvr/sgx/sgxinit.c | |||
@@ -1426,6 +1426,16 @@ PVRSRV_ERROR SGX_FreeMemTilingRange(PVRSRV_DEVICE_NODE *psDeviceNode, | |||
1426 | } | 1426 | } |
1427 | #endif | 1427 | #endif |
1428 | 1428 | ||
1429 | static IMG_VOID SGXCacheInvalidate(PVRSRV_DEVICE_NODE *psDeviceNode) | ||
1430 | { | ||
1431 | PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; | ||
1432 | |||
1433 | #if defined(SGX_FEATURE_MP) | ||
1434 | psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_BIF_SL; | ||
1435 | #else | ||
1436 | PVR_UNREFERENCED_PARAMETER(psDevInfo); | ||
1437 | #endif | ||
1438 | } | ||
1429 | 1439 | ||
1430 | PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode) | 1440 | PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode) |
1431 | { | 1441 | { |
@@ -1498,6 +1508,8 @@ PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode) | |||
1498 | 1508 | ||
1499 | psDeviceNode->pfnDeviceCommandComplete = &SGXCommandComplete; | 1509 | psDeviceNode->pfnDeviceCommandComplete = &SGXCommandComplete; |
1500 | 1510 | ||
1511 | psDeviceNode->pfnCacheInvalidate = SGXCacheInvalidate; | ||
1512 | |||
1501 | 1513 | ||
1502 | 1514 | ||
1503 | psDevMemoryInfo = &psDeviceNode->sDevMemoryInfo; | 1515 | psDevMemoryInfo = &psDeviceNode->sDevMemoryInfo; |
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 | ||
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 | ||
diff --git a/drivers/gpu/pvr/sgx/sgxutils.h b/drivers/gpu/pvr/sgx/sgxutils.h index a7cbcb7193a..bc60fdd9186 100644 --- a/drivers/gpu/pvr/sgx/sgxutils.h +++ b/drivers/gpu/pvr/sgx/sgxutils.h | |||
@@ -75,13 +75,15 @@ IMG_HANDLE SGXRegisterHWTransferContextKM(IMG_HANDLE psDeviceNode, | |||
75 | PVRSRV_PER_PROCESS_DATA *psPerProc); | 75 | PVRSRV_PER_PROCESS_DATA *psPerProc); |
76 | 76 | ||
77 | IMG_IMPORT | 77 | IMG_IMPORT |
78 | IMG_VOID SGXFlushHWRenderTargetKM(IMG_HANDLE psSGXDevInfo, IMG_DEV_VIRTADDR psHWRTDataSetDevVAddr); | 78 | PVRSRV_ERROR SGXFlushHWRenderTargetKM(IMG_HANDLE psSGXDevInfo, |
79 | IMG_DEV_VIRTADDR psHWRTDataSetDevVAddr, | ||
80 | IMG_BOOL bForceCleanup); | ||
79 | 81 | ||
80 | IMG_IMPORT | 82 | IMG_IMPORT |
81 | PVRSRV_ERROR SGXUnregisterHWRenderContextKM(IMG_HANDLE hHWRenderContext); | 83 | PVRSRV_ERROR SGXUnregisterHWRenderContextKM(IMG_HANDLE hHWRenderContext, IMG_BOOL bForceCleanup); |
82 | 84 | ||
83 | IMG_IMPORT | 85 | IMG_IMPORT |
84 | PVRSRV_ERROR SGXUnregisterHWTransferContextKM(IMG_HANDLE hHWTransferContext); | 86 | PVRSRV_ERROR SGXUnregisterHWTransferContextKM(IMG_HANDLE hHWTransferContext, IMG_BOOL bForceCleanup); |
85 | 87 | ||
86 | #if defined(SGX_FEATURE_2D_HARDWARE) | 88 | #if defined(SGX_FEATURE_2D_HARDWARE) |
87 | IMG_IMPORT | 89 | IMG_IMPORT |
@@ -90,16 +92,17 @@ IMG_HANDLE SGXRegisterHW2DContextKM(IMG_HANDLE psDeviceNode, | |||
90 | PVRSRV_PER_PROCESS_DATA *psPerProc); | 92 | PVRSRV_PER_PROCESS_DATA *psPerProc); |
91 | 93 | ||
92 | IMG_IMPORT | 94 | IMG_IMPORT |
93 | PVRSRV_ERROR SGXUnregisterHW2DContextKM(IMG_HANDLE hHW2DContext); | 95 | PVRSRV_ERROR SGXUnregisterHW2DContextKM(IMG_HANDLE hHW2DContext, IMG_BOOL bForceCleanup); |
94 | #endif | 96 | #endif |
95 | 97 | ||
96 | IMG_UINT32 SGXConvertTimeStamp(PVRSRV_SGXDEV_INFO *psDevInfo, | 98 | IMG_UINT32 SGXConvertTimeStamp(PVRSRV_SGXDEV_INFO *psDevInfo, |
97 | IMG_UINT32 ui32TimeWraps, | 99 | IMG_UINT32 ui32TimeWraps, |
98 | IMG_UINT32 ui32Time); | 100 | IMG_UINT32 ui32Time); |
99 | 101 | ||
100 | IMG_VOID SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, | 102 | PVRSRV_ERROR SGXCleanupRequest(PVRSRV_DEVICE_NODE *psDeviceNode, |
101 | IMG_DEV_VIRTADDR *psHWDataDevVAddr, | 103 | IMG_DEV_VIRTADDR *psHWDataDevVAddr, |
102 | IMG_UINT32 ui32CleanupType); | 104 | IMG_UINT32 ui32CleanupType, |
105 | IMG_BOOL bForceCleanup); | ||
103 | 106 | ||
104 | IMG_IMPORT | 107 | IMG_IMPORT |
105 | PVRSRV_ERROR PVRSRVGetSGXRevDataKM(PVRSRV_DEVICE_NODE* psDeviceNode, IMG_UINT32 *pui32SGXCoreRev, | 108 | PVRSRV_ERROR PVRSRVGetSGXRevDataKM(PVRSRV_DEVICE_NODE* psDeviceNode, IMG_UINT32 *pui32SGXCoreRev, |
diff --git a/drivers/gpu/pvr/sgx535defs.h b/drivers/gpu/pvr/sgx520defs.h index 66f216668a0..a21295d0c64 100644 --- a/drivers/gpu/pvr/sgx535defs.h +++ b/drivers/gpu/pvr/sgx520defs.h | |||
@@ -24,12 +24,10 @@ | |||
24 | * | 24 | * |
25 | ******************************************************************************/ | 25 | ******************************************************************************/ |
26 | 26 | ||
27 | #ifndef _SGX535DEFS_KM_H_ | 27 | #ifndef _SGX520DEFS_KM_H_ |
28 | #define _SGX535DEFS_KM_H_ | 28 | #define _SGX520DEFS_KM_H_ |
29 | 29 | ||
30 | #define EUR_CR_CLKGATECTL 0x0000 | 30 | #define EUR_CR_CLKGATECTL 0x0000 |
31 | #define EUR_CR_CLKGATECTL_2D_CLKG_MASK 0x00000003U | ||
32 | #define EUR_CR_CLKGATECTL_2D_CLKG_SHIFT 0 | ||
33 | #define EUR_CR_CLKGATECTL_ISP_CLKG_MASK 0x00000030U | 31 | #define EUR_CR_CLKGATECTL_ISP_CLKG_MASK 0x00000030U |
34 | #define EUR_CR_CLKGATECTL_ISP_CLKG_SHIFT 4 | 32 | #define EUR_CR_CLKGATECTL_ISP_CLKG_SHIFT 4 |
35 | #define EUR_CR_CLKGATECTL_TSP_CLKG_MASK 0x00000300U | 33 | #define EUR_CR_CLKGATECTL_TSP_CLKG_MASK 0x00000300U |
@@ -43,8 +41,6 @@ | |||
43 | #define EUR_CR_CLKGATECTL_AUTO_MAN_REG_MASK 0x01000000U | 41 | #define EUR_CR_CLKGATECTL_AUTO_MAN_REG_MASK 0x01000000U |
44 | #define EUR_CR_CLKGATECTL_AUTO_MAN_REG_SHIFT 24 | 42 | #define EUR_CR_CLKGATECTL_AUTO_MAN_REG_SHIFT 24 |
45 | #define EUR_CR_CLKGATESTATUS 0x0004 | 43 | #define EUR_CR_CLKGATESTATUS 0x0004 |
46 | #define EUR_CR_CLKGATESTATUS_2D_CLKS_MASK 0x00000001 | ||
47 | #define EUR_CR_CLKGATESTATUS_2D_CLKS_SHIFT 0 | ||
48 | #define EUR_CR_CLKGATESTATUS_ISP_CLKS_MASK 0x00000010U | 44 | #define EUR_CR_CLKGATESTATUS_ISP_CLKS_MASK 0x00000010U |
49 | #define EUR_CR_CLKGATESTATUS_ISP_CLKS_SHIFT 4 | 45 | #define EUR_CR_CLKGATESTATUS_ISP_CLKS_SHIFT 4 |
50 | #define EUR_CR_CLKGATESTATUS_TSP_CLKS_MASK 0x00000100U | 46 | #define EUR_CR_CLKGATESTATUS_TSP_CLKS_MASK 0x00000100U |
@@ -56,8 +52,6 @@ | |||
56 | #define EUR_CR_CLKGATESTATUS_USE_CLKS_MASK 0x00100000U | 52 | #define EUR_CR_CLKGATESTATUS_USE_CLKS_MASK 0x00100000U |
57 | #define EUR_CR_CLKGATESTATUS_USE_CLKS_SHIFT 20 | 53 | #define EUR_CR_CLKGATESTATUS_USE_CLKS_SHIFT 20 |
58 | #define EUR_CR_CLKGATECTLOVR 0x0008 | 54 | #define EUR_CR_CLKGATECTLOVR 0x0008 |
59 | #define EUR_CR_CLKGATECTLOVR_2D_CLKO_MASK 0x00000003U | ||
60 | #define EUR_CR_CLKGATECTLOVR_2D_CLKO_SHIFT 0 | ||
61 | #define EUR_CR_CLKGATECTLOVR_ISP_CLKO_MASK 0x00000030U | 55 | #define EUR_CR_CLKGATECTLOVR_ISP_CLKO_MASK 0x00000030U |
62 | #define EUR_CR_CLKGATECTLOVR_ISP_CLKO_SHIFT 4 | 56 | #define EUR_CR_CLKGATECTLOVR_ISP_CLKO_SHIFT 4 |
63 | #define EUR_CR_CLKGATECTLOVR_TSP_CLKO_MASK 0x00000300U | 57 | #define EUR_CR_CLKGATECTLOVR_TSP_CLKO_MASK 0x00000300U |
@@ -91,8 +85,6 @@ | |||
91 | #define EUR_CR_SOFT_RESET 0x0080 | 85 | #define EUR_CR_SOFT_RESET 0x0080 |
92 | #define EUR_CR_SOFT_RESET_BIF_RESET_MASK 0x00000001U | 86 | #define EUR_CR_SOFT_RESET_BIF_RESET_MASK 0x00000001U |
93 | #define EUR_CR_SOFT_RESET_BIF_RESET_SHIFT 0 | 87 | #define EUR_CR_SOFT_RESET_BIF_RESET_SHIFT 0 |
94 | #define EUR_CR_SOFT_RESET_TWOD_RESET_MASK 0x00000002U | ||
95 | #define EUR_CR_SOFT_RESET_TWOD_RESET_SHIFT 1 | ||
96 | #define EUR_CR_SOFT_RESET_DPM_RESET_MASK 0x00000004U | 88 | #define EUR_CR_SOFT_RESET_DPM_RESET_MASK 0x00000004U |
97 | #define EUR_CR_SOFT_RESET_DPM_RESET_SHIFT 2 | 89 | #define EUR_CR_SOFT_RESET_DPM_RESET_SHIFT 2 |
98 | #define EUR_CR_SOFT_RESET_TA_RESET_MASK 0x00000008U | 90 | #define EUR_CR_SOFT_RESET_TA_RESET_MASK 0x00000008U |
@@ -104,65 +96,45 @@ | |||
104 | #define EUR_CR_SOFT_RESET_TSP_RESET_MASK 0x00000040U | 96 | #define EUR_CR_SOFT_RESET_TSP_RESET_MASK 0x00000040U |
105 | #define EUR_CR_SOFT_RESET_TSP_RESET_SHIFT 6 | 97 | #define EUR_CR_SOFT_RESET_TSP_RESET_SHIFT 6 |
106 | #define EUR_CR_EVENT_HOST_ENABLE2 0x0110 | 98 | #define EUR_CR_EVENT_HOST_ENABLE2 0x0110 |
107 | #define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_MASK 0x00000080U | 99 | #define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_MASK 0x00000010U |
108 | #define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_SHIFT 7 | 100 | #define EUR_CR_EVENT_HOST_ENABLE2_TRIG_TA_SHIFT 4 |
109 | #define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_MASK 0x00000040U | 101 | #define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_MASK 0x00000008U |
110 | #define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_SHIFT 6 | 102 | #define EUR_CR_EVENT_HOST_ENABLE2_TRIG_3D_SHIFT 3 |
111 | #define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_MASK 0x00000020U | 103 | #define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_MASK 0x00000004U |
112 | #define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_SHIFT 5 | 104 | #define EUR_CR_EVENT_HOST_ENABLE2_TRIG_DL_SHIFT 2 |
113 | #define EUR_CR_EVENT_HOST_ENABLE2_BIF_REQUESTER_FAULT_MASK 0x00000010U | ||
114 | #define EUR_CR_EVENT_HOST_ENABLE2_BIF_REQUESTER_FAULT_SHIFT 4 | ||
115 | #define EUR_CR_EVENT_HOST_ENABLE2_DPM_DHOST_FREE_LOAD_MASK 0x00000008U | ||
116 | #define EUR_CR_EVENT_HOST_ENABLE2_DPM_DHOST_FREE_LOAD_SHIFT 3 | ||
117 | #define EUR_CR_EVENT_HOST_ENABLE2_DPM_HOST_FREE_LOAD_MASK 0x00000004U | ||
118 | #define EUR_CR_EVENT_HOST_ENABLE2_DPM_HOST_FREE_LOAD_SHIFT 2 | ||
119 | #define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_MASK 0x00000002U | 105 | #define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_MASK 0x00000002U |
120 | #define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_SHIFT 1 | 106 | #define EUR_CR_EVENT_HOST_ENABLE2_DPM_3D_FREE_LOAD_SHIFT 1 |
121 | #define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_MASK 0x00000001U | 107 | #define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_MASK 0x00000001U |
122 | #define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_SHIFT 0 | 108 | #define EUR_CR_EVENT_HOST_ENABLE2_DPM_TA_FREE_LOAD_SHIFT 0 |
123 | #define EUR_CR_EVENT_HOST_CLEAR2 0x0114 | 109 | #define EUR_CR_EVENT_HOST_CLEAR2 0x0114 |
124 | #define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_MASK 0x00000080U | 110 | #define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_MASK 0x00000010U |
125 | #define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_SHIFT 7 | 111 | #define EUR_CR_EVENT_HOST_CLEAR2_TRIG_TA_SHIFT 4 |
126 | #define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_MASK 0x00000040U | 112 | #define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_MASK 0x00000008U |
127 | #define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_SHIFT 6 | 113 | #define EUR_CR_EVENT_HOST_CLEAR2_TRIG_3D_SHIFT 3 |
128 | #define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_MASK 0x00000020U | 114 | #define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_MASK 0x00000004U |
129 | #define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_SHIFT 5 | 115 | #define EUR_CR_EVENT_HOST_CLEAR2_TRIG_DL_SHIFT 2 |
130 | #define EUR_CR_EVENT_HOST_CLEAR2_BIF_REQUESTER_FAULT_MASK 0x00000010U | ||
131 | #define EUR_CR_EVENT_HOST_CLEAR2_BIF_REQUESTER_FAULT_SHIFT 4 | ||
132 | #define EUR_CR_EVENT_HOST_CLEAR2_DPM_DHOST_FREE_LOAD_MASK 0x00000008U | ||
133 | #define EUR_CR_EVENT_HOST_CLEAR2_DPM_DHOST_FREE_LOAD_SHIFT 3 | ||
134 | #define EUR_CR_EVENT_HOST_CLEAR2_DPM_HOST_FREE_LOAD_MASK 0x00000004U | ||
135 | #define EUR_CR_EVENT_HOST_CLEAR2_DPM_HOST_FREE_LOAD_SHIFT 2 | ||
136 | #define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_MASK 0x00000002U | 116 | #define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_MASK 0x00000002U |
137 | #define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_SHIFT 1 | 117 | #define EUR_CR_EVENT_HOST_CLEAR2_DPM_3D_FREE_LOAD_SHIFT 1 |
138 | #define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_MASK 0x00000001U | 118 | #define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_MASK 0x00000001U |
139 | #define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_SHIFT 0 | 119 | #define EUR_CR_EVENT_HOST_CLEAR2_DPM_TA_FREE_LOAD_SHIFT 0 |
140 | #define EUR_CR_EVENT_STATUS2 0x0118U | 120 | #define EUR_CR_EVENT_STATUS2 0x0118 |
141 | #define EUR_CR_EVENT_STATUS2_TRIG_TA_MASK 0x00000080U | 121 | #define EUR_CR_EVENT_STATUS2_TRIG_TA_MASK 0x00000010U |
142 | #define EUR_CR_EVENT_STATUS2_TRIG_TA_SHIFT 7 | 122 | #define EUR_CR_EVENT_STATUS2_TRIG_TA_SHIFT 4 |
143 | #define EUR_CR_EVENT_STATUS2_TRIG_3D_MASK 0x00000040U | 123 | #define EUR_CR_EVENT_STATUS2_TRIG_3D_MASK 0x00000008U |
144 | #define EUR_CR_EVENT_STATUS2_TRIG_3D_SHIFT 6 | 124 | #define EUR_CR_EVENT_STATUS2_TRIG_3D_SHIFT 3 |
145 | #define EUR_CR_EVENT_STATUS2_TRIG_DL_MASK 0x00000020U | 125 | #define EUR_CR_EVENT_STATUS2_TRIG_DL_MASK 0x00000004U |
146 | #define EUR_CR_EVENT_STATUS2_TRIG_DL_SHIFT 5 | 126 | #define EUR_CR_EVENT_STATUS2_TRIG_DL_SHIFT 2 |
147 | #define EUR_CR_EVENT_STATUS2_BIF_REQUESTER_FAULT_MASK 0x00000010U | ||
148 | #define EUR_CR_EVENT_STATUS2_BIF_REQUESTER_FAULT_SHIFT 4 | ||
149 | #define EUR_CR_EVENT_STATUS2_DPM_DHOST_FREE_LOAD_MASK 0x00000008U | ||
150 | #define EUR_CR_EVENT_STATUS2_DPM_DHOST_FREE_LOAD_SHIFT 3 | ||
151 | #define EUR_CR_EVENT_STATUS2_DPM_HOST_FREE_LOAD_MASK 0x00000004U | ||
152 | #define EUR_CR_EVENT_STATUS2_DPM_HOST_FREE_LOAD_SHIFT 2 | ||
153 | #define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_MASK 0x00000002U | 127 | #define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_MASK 0x00000002U |
154 | #define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_SHIFT 1 | 128 | #define EUR_CR_EVENT_STATUS2_DPM_3D_FREE_LOAD_SHIFT 1 |
155 | #define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_MASK 0x00000001U | 129 | #define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_MASK 0x00000001U |
156 | #define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_SHIFT 0 | 130 | #define EUR_CR_EVENT_STATUS2_DPM_TA_FREE_LOAD_SHIFT 0 |
157 | #define EUR_CR_EVENT_STATUS 0x012CU | 131 | #define EUR_CR_EVENT_STATUS 0x012C |
158 | #define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_MASK 0x80000000U | 132 | #define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_MASK 0x80000000U |
159 | #define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_SHIFT 31 | 133 | #define EUR_CR_EVENT_STATUS_MASTER_INTERRUPT_SHIFT 31 |
160 | #define EUR_CR_EVENT_STATUS_TIMER_MASK 0x20000000U | 134 | #define EUR_CR_EVENT_STATUS_TIMER_MASK 0x20000000U |
161 | #define EUR_CR_EVENT_STATUS_TIMER_SHIFT 29 | 135 | #define EUR_CR_EVENT_STATUS_TIMER_SHIFT 29 |
162 | #define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_MASK 0x10000000U | 136 | #define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_MASK 0x10000000U |
163 | #define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_SHIFT 28 | 137 | #define EUR_CR_EVENT_STATUS_TA_DPM_FAULT_SHIFT 28 |
164 | #define EUR_CR_EVENT_STATUS_TWOD_COMPLETE_MASK 0x08000000U | ||
165 | #define EUR_CR_EVENT_STATUS_TWOD_COMPLETE_SHIFT 27 | ||
166 | #define EUR_CR_EVENT_STATUS_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U | 138 | #define EUR_CR_EVENT_STATUS_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U |
167 | #define EUR_CR_EVENT_STATUS_MADD_CACHE_INVALCOMPLETE_SHIFT 26 | 139 | #define EUR_CR_EVENT_STATUS_MADD_CACHE_INVALCOMPLETE_SHIFT 26 |
168 | #define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U | 140 | #define EUR_CR_EVENT_STATUS_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U |
@@ -224,8 +196,6 @@ | |||
224 | #define EUR_CR_EVENT_HOST_ENABLE_TIMER_SHIFT 29 | 196 | #define EUR_CR_EVENT_HOST_ENABLE_TIMER_SHIFT 29 |
225 | #define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_MASK 0x10000000U | 197 | #define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_MASK 0x10000000U |
226 | #define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_SHIFT 28 | 198 | #define EUR_CR_EVENT_HOST_ENABLE_TA_DPM_FAULT_SHIFT 28 |
227 | #define EUR_CR_EVENT_HOST_ENABLE_TWOD_COMPLETE_MASK 0x08000000U | ||
228 | #define EUR_CR_EVENT_HOST_ENABLE_TWOD_COMPLETE_SHIFT 27 | ||
229 | #define EUR_CR_EVENT_HOST_ENABLE_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U | 199 | #define EUR_CR_EVENT_HOST_ENABLE_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U |
230 | #define EUR_CR_EVENT_HOST_ENABLE_MADD_CACHE_INVALCOMPLETE_SHIFT 26 | 200 | #define EUR_CR_EVENT_HOST_ENABLE_MADD_CACHE_INVALCOMPLETE_SHIFT 26 |
231 | #define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U | 201 | #define EUR_CR_EVENT_HOST_ENABLE_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U |
@@ -287,8 +257,6 @@ | |||
287 | #define EUR_CR_EVENT_HOST_CLEAR_TIMER_SHIFT 29 | 257 | #define EUR_CR_EVENT_HOST_CLEAR_TIMER_SHIFT 29 |
288 | #define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_MASK 0x10000000U | 258 | #define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_MASK 0x10000000U |
289 | #define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_SHIFT 28 | 259 | #define EUR_CR_EVENT_HOST_CLEAR_TA_DPM_FAULT_SHIFT 28 |
290 | #define EUR_CR_EVENT_HOST_CLEAR_TWOD_COMPLETE_MASK 0x08000000U | ||
291 | #define EUR_CR_EVENT_HOST_CLEAR_TWOD_COMPLETE_SHIFT 27 | ||
292 | #define EUR_CR_EVENT_HOST_CLEAR_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U | 260 | #define EUR_CR_EVENT_HOST_CLEAR_MADD_CACHE_INVALCOMPLETE_MASK 0x04000000U |
293 | #define EUR_CR_EVENT_HOST_CLEAR_MADD_CACHE_INVALCOMPLETE_SHIFT 26 | 261 | #define EUR_CR_EVENT_HOST_CLEAR_MADD_CACHE_INVALCOMPLETE_SHIFT 26 |
294 | #define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U | 262 | #define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_ZLS_MASK 0x02000000U |
@@ -343,11 +311,94 @@ | |||
343 | #define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_SHIFT 1 | 311 | #define EUR_CR_EVENT_HOST_CLEAR_DPM_OUT_OF_MEMORY_MT_SHIFT 1 |
344 | #define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_MASK 0x00000001U | 312 | #define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_MASK 0x00000001U |
345 | #define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_SHIFT 0 | 313 | #define EUR_CR_EVENT_HOST_CLEAR_DPM_3D_MEM_FREE_SHIFT 0 |
314 | #define EUR_CR_TIMER 0x0144 | ||
315 | #define EUR_CR_TIMER_VALUE_MASK 0xFFFFFFFFU | ||
316 | #define EUR_CR_TIMER_VALUE_SHIFT 0 | ||
317 | #define EUR_CR_USE_CODE_BASE_0 0x0A0C | ||
318 | #define EUR_CR_USE_CODE_BASE_ADDR_00_MASK 0x000FFFFFU | ||
319 | #define EUR_CR_USE_CODE_BASE_ADDR_00_SHIFT 0 | ||
320 | #define EUR_CR_USE_CODE_BASE_DM_00_MASK 0x00300000U | ||
321 | #define EUR_CR_USE_CODE_BASE_DM_00_SHIFT 20 | ||
322 | #define EUR_CR_USE_CODE_BASE_1 0x0A10 | ||
323 | #define EUR_CR_USE_CODE_BASE_ADDR_01_MASK 0x000FFFFFU | ||
324 | #define EUR_CR_USE_CODE_BASE_ADDR_01_SHIFT 0 | ||
325 | #define EUR_CR_USE_CODE_BASE_DM_01_MASK 0x00300000U | ||
326 | #define EUR_CR_USE_CODE_BASE_DM_01_SHIFT 20 | ||
327 | #define EUR_CR_USE_CODE_BASE_2 0x0A14 | ||
328 | #define EUR_CR_USE_CODE_BASE_ADDR_02_MASK 0x000FFFFFU | ||
329 | #define EUR_CR_USE_CODE_BASE_ADDR_02_SHIFT 0 | ||
330 | #define EUR_CR_USE_CODE_BASE_DM_02_MASK 0x00300000U | ||
331 | #define EUR_CR_USE_CODE_BASE_DM_02_SHIFT 20 | ||
332 | #define EUR_CR_USE_CODE_BASE_3 0x0A18 | ||
333 | #define EUR_CR_USE_CODE_BASE_ADDR_03_MASK 0x000FFFFFU | ||
334 | #define EUR_CR_USE_CODE_BASE_ADDR_03_SHIFT 0 | ||
335 | #define EUR_CR_USE_CODE_BASE_DM_03_MASK 0x00300000U | ||
336 | #define EUR_CR_USE_CODE_BASE_DM_03_SHIFT 20 | ||
337 | #define EUR_CR_USE_CODE_BASE_4 0x0A1C | ||
338 | #define EUR_CR_USE_CODE_BASE_ADDR_04_MASK 0x000FFFFFU | ||
339 | #define EUR_CR_USE_CODE_BASE_ADDR_04_SHIFT 0 | ||
340 | #define EUR_CR_USE_CODE_BASE_DM_04_MASK 0x00300000U | ||
341 | #define EUR_CR_USE_CODE_BASE_DM_04_SHIFT 20 | ||
342 | #define EUR_CR_USE_CODE_BASE_5 0x0A20 | ||
343 | #define EUR_CR_USE_CODE_BASE_ADDR_05_MASK 0x000FFFFFU | ||
344 | #define EUR_CR_USE_CODE_BASE_ADDR_05_SHIFT 0 | ||
345 | #define EUR_CR_USE_CODE_BASE_DM_05_MASK 0x00300000U | ||
346 | #define EUR_CR_USE_CODE_BASE_DM_05_SHIFT 20 | ||
347 | #define EUR_CR_USE_CODE_BASE_6 0x0A24 | ||
348 | #define EUR_CR_USE_CODE_BASE_ADDR_06_MASK 0x000FFFFFU | ||
349 | #define EUR_CR_USE_CODE_BASE_ADDR_06_SHIFT 0 | ||
350 | #define EUR_CR_USE_CODE_BASE_DM_06_MASK 0x00300000U | ||
351 | #define EUR_CR_USE_CODE_BASE_DM_06_SHIFT 20 | ||
352 | #define EUR_CR_USE_CODE_BASE_7 0x0A28 | ||
353 | #define EUR_CR_USE_CODE_BASE_ADDR_07_MASK 0x000FFFFFU | ||
354 | #define EUR_CR_USE_CODE_BASE_ADDR_07_SHIFT 0 | ||
355 | #define EUR_CR_USE_CODE_BASE_DM_07_MASK 0x00300000U | ||
356 | #define EUR_CR_USE_CODE_BASE_DM_07_SHIFT 20 | ||
357 | #define EUR_CR_USE_CODE_BASE_8 0x0A2C | ||
358 | #define EUR_CR_USE_CODE_BASE_ADDR_08_MASK 0x000FFFFFU | ||
359 | #define EUR_CR_USE_CODE_BASE_ADDR_08_SHIFT 0 | ||
360 | #define EUR_CR_USE_CODE_BASE_DM_08_MASK 0x00300000U | ||
361 | #define EUR_CR_USE_CODE_BASE_DM_08_SHIFT 20 | ||
362 | #define EUR_CR_USE_CODE_BASE_9 0x0A30 | ||
363 | #define EUR_CR_USE_CODE_BASE_ADDR_09_MASK 0x000FFFFFU | ||
364 | #define EUR_CR_USE_CODE_BASE_ADDR_09_SHIFT 0 | ||
365 | #define EUR_CR_USE_CODE_BASE_DM_09_MASK 0x00300000U | ||
366 | #define EUR_CR_USE_CODE_BASE_DM_09_SHIFT 20 | ||
367 | #define EUR_CR_USE_CODE_BASE_10 0x0A34 | ||
368 | #define EUR_CR_USE_CODE_BASE_ADDR_10_MASK 0x000FFFFFU | ||
369 | #define EUR_CR_USE_CODE_BASE_ADDR_10_SHIFT 0 | ||
370 | #define EUR_CR_USE_CODE_BASE_DM_10_MASK 0x00300000U | ||
371 | #define EUR_CR_USE_CODE_BASE_DM_10_SHIFT 20 | ||
372 | #define EUR_CR_USE_CODE_BASE_11 0x0A38 | ||
373 | #define EUR_CR_USE_CODE_BASE_ADDR_11_MASK 0x000FFFFFU | ||
374 | #define EUR_CR_USE_CODE_BASE_ADDR_11_SHIFT 0 | ||
375 | #define EUR_CR_USE_CODE_BASE_DM_11_MASK 0x00300000U | ||
376 | #define EUR_CR_USE_CODE_BASE_DM_11_SHIFT 20 | ||
377 | #define EUR_CR_USE_CODE_BASE_12 0x0A3C | ||
378 | #define EUR_CR_USE_CODE_BASE_ADDR_12_MASK 0x000FFFFFU | ||
379 | #define EUR_CR_USE_CODE_BASE_ADDR_12_SHIFT 0 | ||
380 | #define EUR_CR_USE_CODE_BASE_DM_12_MASK 0x00300000U | ||
381 | #define EUR_CR_USE_CODE_BASE_DM_12_SHIFT 20 | ||
382 | #define EUR_CR_USE_CODE_BASE_13 0x0A40 | ||
383 | #define EUR_CR_USE_CODE_BASE_ADDR_13_MASK 0x000FFFFFU | ||
384 | #define EUR_CR_USE_CODE_BASE_ADDR_13_SHIFT 0 | ||
385 | #define EUR_CR_USE_CODE_BASE_DM_13_MASK 0x00300000U | ||
386 | #define EUR_CR_USE_CODE_BASE_DM_13_SHIFT 20 | ||
387 | #define EUR_CR_USE_CODE_BASE_14 0x0A44 | ||
388 | #define EUR_CR_USE_CODE_BASE_ADDR_14_MASK 0x000FFFFFU | ||
389 | #define EUR_CR_USE_CODE_BASE_ADDR_14_SHIFT 0 | ||
390 | #define EUR_CR_USE_CODE_BASE_DM_14_MASK 0x00300000U | ||
391 | #define EUR_CR_USE_CODE_BASE_DM_14_SHIFT 20 | ||
392 | #define EUR_CR_USE_CODE_BASE_15 0x0A48 | ||
393 | #define EUR_CR_USE_CODE_BASE_ADDR_15_MASK 0x000FFFFFU | ||
394 | #define EUR_CR_USE_CODE_BASE_ADDR_15_SHIFT 0 | ||
395 | #define EUR_CR_USE_CODE_BASE_DM_15_MASK 0x00300000U | ||
396 | #define EUR_CR_USE_CODE_BASE_DM_15_SHIFT 20 | ||
346 | #define EUR_CR_PDS_EXEC_BASE 0x0AB8 | 397 | #define EUR_CR_PDS_EXEC_BASE 0x0AB8 |
347 | #define EUR_CR_PDS_EXEC_BASE_ADDR_MASK 0xFFF00000U | 398 | #define EUR_CR_PDS_EXEC_BASE_ADDR_MASK 0x0FF00000U |
348 | #define EUR_CR_PDS_EXEC_BASE_ADDR_SHIFT 20 | 399 | #define EUR_CR_PDS_EXEC_BASE_ADDR_SHIFT 20 |
349 | #define EUR_CR_EVENT_KICKER 0x0AC4 | 400 | #define EUR_CR_EVENT_KICKER 0x0AC4 |
350 | #define EUR_CR_EVENT_KICKER_ADDRESS_MASK 0xFFFFFFF0U | 401 | #define EUR_CR_EVENT_KICKER_ADDRESS_MASK 0x0FFFFFF0U |
351 | #define EUR_CR_EVENT_KICKER_ADDRESS_SHIFT 4 | 402 | #define EUR_CR_EVENT_KICKER_ADDRESS_SHIFT 4 |
352 | #define EUR_CR_EVENT_KICK 0x0AC8 | 403 | #define EUR_CR_EVENT_KICK 0x0AC8 |
353 | #define EUR_CR_EVENT_KICK_NOW_MASK 0x00000001U | 404 | #define EUR_CR_EVENT_KICK_NOW_MASK 0x00000001U |
@@ -392,8 +443,6 @@ | |||
392 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_SHIFT 9 | 443 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_VDM_SHIFT 9 |
393 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_TE_MASK 0x00000400U | 444 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_TE_MASK 0x00000400U |
394 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_TE_SHIFT 10 | 445 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_TE_SHIFT 10 |
395 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_TWOD_MASK 0x00000800U | ||
396 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_TWOD_SHIFT 11 | ||
397 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_MASK 0x00001000U | 446 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_MASK 0x00001000U |
398 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_SHIFT 12 | 447 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_PBE_SHIFT 12 |
399 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_MASK 0x00002000U | 448 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_TSPP_MASK 0x00002000U |
@@ -402,8 +451,6 @@ | |||
402 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_SHIFT 14 | 451 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_ISP_SHIFT 14 |
403 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_MASK 0x00008000U | 452 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_MASK 0x00008000U |
404 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_SHIFT 15 | 453 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_USE_SHIFT 15 |
405 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_HOST_MASK 0x00010000U | ||
406 | #define EUR_CR_BIF_CTRL_MMU_BYPASS_HOST_SHIFT 16 | ||
407 | #define EUR_CR_BIF_INT_STAT 0x0C04 | 454 | #define EUR_CR_BIF_INT_STAT 0x0C04 |
408 | #define EUR_CR_BIF_INT_STAT_FAULT_MASK 0x00003FFFU | 455 | #define EUR_CR_BIF_INT_STAT_FAULT_MASK 0x00003FFFU |
409 | #define EUR_CR_BIF_INT_STAT_FAULT_SHIFT 0 | 456 | #define EUR_CR_BIF_INT_STAT_FAULT_SHIFT 0 |
@@ -412,237 +459,28 @@ | |||
412 | #define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_MASK 0x00008000U | 459 | #define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_MASK 0x00008000U |
413 | #define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_SHIFT 15 | 460 | #define EUR_CR_BIF_INT_STAT_FLUSH_COMPLETE_SHIFT 15 |
414 | #define EUR_CR_BIF_FAULT 0x0C08 | 461 | #define EUR_CR_BIF_FAULT 0x0C08 |
415 | #define EUR_CR_BIF_FAULT_ADDR_MASK 0xFFFFF000U | 462 | #define EUR_CR_BIF_FAULT_ADDR_MASK 0x0FFFF000U |
416 | #define EUR_CR_BIF_FAULT_ADDR_SHIFT 12 | 463 | #define EUR_CR_BIF_FAULT_ADDR_SHIFT 12 |
417 | #define EUR_CR_BIF_TILE0 0x0C0C | ||
418 | #define EUR_CR_BIF_TILE0_MIN_ADDRESS_MASK 0x00000FFFU | ||
419 | #define EUR_CR_BIF_TILE0_MIN_ADDRESS_SHIFT 0 | ||
420 | #define EUR_CR_BIF_TILE0_MAX_ADDRESS_MASK 0x00FFF000U | ||
421 | #define EUR_CR_BIF_TILE0_MAX_ADDRESS_SHIFT 12 | ||
422 | #define EUR_CR_BIF_TILE0_CFG_MASK 0x0F000000U | ||
423 | #define EUR_CR_BIF_TILE0_CFG_SHIFT 24 | ||
424 | #define EUR_CR_BIF_TILE1 0x0C10 | ||
425 | #define EUR_CR_BIF_TILE1_MIN_ADDRESS_MASK 0x00000FFFU | ||
426 | #define EUR_CR_BIF_TILE1_MIN_ADDRESS_SHIFT 0 | ||
427 | #define EUR_CR_BIF_TILE1_MAX_ADDRESS_MASK 0x00FFF000U | ||
428 | #define EUR_CR_BIF_TILE1_MAX_ADDRESS_SHIFT 12 | ||
429 | #define EUR_CR_BIF_TILE1_CFG_MASK 0x0F000000U | ||
430 | #define EUR_CR_BIF_TILE1_CFG_SHIFT 24 | ||
431 | #define EUR_CR_BIF_TILE2 0x0C14 | ||
432 | #define EUR_CR_BIF_TILE2_MIN_ADDRESS_MASK 0x00000FFFU | ||
433 | #define EUR_CR_BIF_TILE2_MIN_ADDRESS_SHIFT 0 | ||
434 | #define EUR_CR_BIF_TILE2_MAX_ADDRESS_MASK 0x00FFF000U | ||
435 | #define EUR_CR_BIF_TILE2_MAX_ADDRESS_SHIFT 12 | ||
436 | #define EUR_CR_BIF_TILE2_CFG_MASK 0x0F000000U | ||
437 | #define EUR_CR_BIF_TILE2_CFG_SHIFT 24 | ||
438 | #define EUR_CR_BIF_TILE3 0x0C18 | ||
439 | #define EUR_CR_BIF_TILE3_MIN_ADDRESS_MASK 0x00000FFFU | ||
440 | #define EUR_CR_BIF_TILE3_MIN_ADDRESS_SHIFT 0 | ||
441 | #define EUR_CR_BIF_TILE3_MAX_ADDRESS_MASK 0x00FFF000U | ||
442 | #define EUR_CR_BIF_TILE3_MAX_ADDRESS_SHIFT 12 | ||
443 | #define EUR_CR_BIF_TILE3_CFG_MASK 0x0F000000U | ||
444 | #define EUR_CR_BIF_TILE3_CFG_SHIFT 24 | ||
445 | #define EUR_CR_BIF_TILE4 0x0C1C | ||
446 | #define EUR_CR_BIF_TILE4_MIN_ADDRESS_MASK 0x00000FFFU | ||
447 | #define EUR_CR_BIF_TILE4_MIN_ADDRESS_SHIFT 0 | ||
448 | #define EUR_CR_BIF_TILE4_MAX_ADDRESS_MASK 0x00FFF000U | ||
449 | #define EUR_CR_BIF_TILE4_MAX_ADDRESS_SHIFT 12 | ||
450 | #define EUR_CR_BIF_TILE4_CFG_MASK 0x0F000000U | ||
451 | #define EUR_CR_BIF_TILE4_CFG_SHIFT 24 | ||
452 | #define EUR_CR_BIF_TILE5 0x0C20 | ||
453 | #define EUR_CR_BIF_TILE5_MIN_ADDRESS_MASK 0x00000FFFU | ||
454 | #define EUR_CR_BIF_TILE5_MIN_ADDRESS_SHIFT 0 | ||
455 | #define EUR_CR_BIF_TILE5_MAX_ADDRESS_MASK 0x00FFF000U | ||
456 | #define EUR_CR_BIF_TILE5_MAX_ADDRESS_SHIFT 12 | ||
457 | #define EUR_CR_BIF_TILE5_CFG_MASK 0x0F000000U | ||
458 | #define EUR_CR_BIF_TILE5_CFG_SHIFT 24 | ||
459 | #define EUR_CR_BIF_TILE6 0x0C24 | ||
460 | #define EUR_CR_BIF_TILE6_MIN_ADDRESS_MASK 0x00000FFFU | ||
461 | #define EUR_CR_BIF_TILE6_MIN_ADDRESS_SHIFT 0 | ||
462 | #define EUR_CR_BIF_TILE6_MAX_ADDRESS_MASK 0x00FFF000U | ||
463 | #define EUR_CR_BIF_TILE6_MAX_ADDRESS_SHIFT 12 | ||
464 | #define EUR_CR_BIF_TILE6_CFG_MASK 0x0F000000U | ||
465 | #define EUR_CR_BIF_TILE6_CFG_SHIFT 24 | ||
466 | #define EUR_CR_BIF_TILE7 0x0C28 | ||
467 | #define EUR_CR_BIF_TILE7_MIN_ADDRESS_MASK 0x00000FFFU | ||
468 | #define EUR_CR_BIF_TILE7_MIN_ADDRESS_SHIFT 0 | ||
469 | #define EUR_CR_BIF_TILE7_MAX_ADDRESS_MASK 0x00FFF000U | ||
470 | #define EUR_CR_BIF_TILE7_MAX_ADDRESS_SHIFT 12 | ||
471 | #define EUR_CR_BIF_TILE7_CFG_MASK 0x0F000000U | ||
472 | #define EUR_CR_BIF_TILE7_CFG_SHIFT 24 | ||
473 | #define EUR_CR_BIF_TILE8 0x0C2C | ||
474 | #define EUR_CR_BIF_TILE8_MIN_ADDRESS_MASK 0x00000FFFU | ||
475 | #define EUR_CR_BIF_TILE8_MIN_ADDRESS_SHIFT 0 | ||
476 | #define EUR_CR_BIF_TILE8_MAX_ADDRESS_MASK 0x00FFF000U | ||
477 | #define EUR_CR_BIF_TILE8_MAX_ADDRESS_SHIFT 12 | ||
478 | #define EUR_CR_BIF_TILE8_CFG_MASK 0x0F000000U | ||
479 | #define EUR_CR_BIF_TILE8_CFG_SHIFT 24 | ||
480 | #define EUR_CR_BIF_TILE9 0x0C30 | ||
481 | #define EUR_CR_BIF_TILE9_MIN_ADDRESS_MASK 0x00000FFFU | ||
482 | #define EUR_CR_BIF_TILE9_MIN_ADDRESS_SHIFT 0 | ||
483 | #define EUR_CR_BIF_TILE9_MAX_ADDRESS_MASK 0x00FFF000U | ||
484 | #define EUR_CR_BIF_TILE9_MAX_ADDRESS_SHIFT 12 | ||
485 | #define EUR_CR_BIF_TILE9_CFG_MASK 0x0F000000U | ||
486 | #define EUR_CR_BIF_TILE9_CFG_SHIFT 24 | ||
487 | #define EUR_CR_BIF_DIR_LIST_BASE1 0x0C38 | ||
488 | #define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_MASK 0xFFFFF000U | ||
489 | #define EUR_CR_BIF_DIR_LIST_BASE1_ADDR_SHIFT 12 | ||
490 | #define EUR_CR_BIF_DIR_LIST_BASE2 0x0C3C | ||
491 | #define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_MASK 0xFFFFF000U | ||
492 | #define EUR_CR_BIF_DIR_LIST_BASE2_ADDR_SHIFT 12 | ||
493 | #define EUR_CR_BIF_DIR_LIST_BASE3 0x0C40 | ||
494 | #define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_MASK 0xFFFFF000U | ||
495 | #define EUR_CR_BIF_DIR_LIST_BASE3_ADDR_SHIFT 12 | ||
496 | #define EUR_CR_BIF_DIR_LIST_BASE4 0x0C44 | ||
497 | #define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_MASK 0xFFFFF000U | ||
498 | #define EUR_CR_BIF_DIR_LIST_BASE4_ADDR_SHIFT 12 | ||
499 | #define EUR_CR_BIF_DIR_LIST_BASE5 0x0C48 | ||
500 | #define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_MASK 0xFFFFF000U | ||
501 | #define EUR_CR_BIF_DIR_LIST_BASE5_ADDR_SHIFT 12 | ||
502 | #define EUR_CR_BIF_DIR_LIST_BASE6 0x0C4C | ||
503 | #define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_MASK 0xFFFFF000U | ||
504 | #define EUR_CR_BIF_DIR_LIST_BASE6_ADDR_SHIFT 12 | ||
505 | #define EUR_CR_BIF_DIR_LIST_BASE7 0x0C50 | ||
506 | #define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_MASK 0xFFFFF000U | ||
507 | #define EUR_CR_BIF_DIR_LIST_BASE7_ADDR_SHIFT 12 | ||
508 | #define EUR_CR_BIF_DIR_LIST_BASE8 0x0C54 | ||
509 | #define EUR_CR_BIF_DIR_LIST_BASE8_ADDR_MASK 0xFFFFF000U | ||
510 | #define EUR_CR_BIF_DIR_LIST_BASE8_ADDR_SHIFT 12 | ||
511 | #define EUR_CR_BIF_DIR_LIST_BASE9 0x0C58 | ||
512 | #define EUR_CR_BIF_DIR_LIST_BASE9_ADDR_MASK 0xFFFFF000U | ||
513 | #define EUR_CR_BIF_DIR_LIST_BASE9_ADDR_SHIFT 12 | ||
514 | #define EUR_CR_BIF_DIR_LIST_BASE10 0x0C5C | ||
515 | #define EUR_CR_BIF_DIR_LIST_BASE10_ADDR_MASK 0xFFFFF000U | ||
516 | #define EUR_CR_BIF_DIR_LIST_BASE10_ADDR_SHIFT 12 | ||
517 | #define EUR_CR_BIF_DIR_LIST_BASE11 0x0C60 | ||
518 | #define EUR_CR_BIF_DIR_LIST_BASE11_ADDR_MASK 0xFFFFF000U | ||
519 | #define EUR_CR_BIF_DIR_LIST_BASE11_ADDR_SHIFT 12 | ||
520 | #define EUR_CR_BIF_DIR_LIST_BASE12 0x0C64 | ||
521 | #define EUR_CR_BIF_DIR_LIST_BASE12_ADDR_MASK 0xFFFFF000U | ||
522 | #define EUR_CR_BIF_DIR_LIST_BASE12_ADDR_SHIFT 12 | ||
523 | #define EUR_CR_BIF_DIR_LIST_BASE13 0x0C68 | ||
524 | #define EUR_CR_BIF_DIR_LIST_BASE13_ADDR_MASK 0xFFFFF000U | ||
525 | #define EUR_CR_BIF_DIR_LIST_BASE13_ADDR_SHIFT 12 | ||
526 | #define EUR_CR_BIF_DIR_LIST_BASE14 0x0C6C | ||
527 | #define EUR_CR_BIF_DIR_LIST_BASE14_ADDR_MASK 0xFFFFF000U | ||
528 | #define EUR_CR_BIF_DIR_LIST_BASE14_ADDR_SHIFT 12 | ||
529 | #define EUR_CR_BIF_DIR_LIST_BASE15 0x0C70 | ||
530 | #define EUR_CR_BIF_DIR_LIST_BASE15_ADDR_MASK 0xFFFFF000U | ||
531 | #define EUR_CR_BIF_DIR_LIST_BASE15_ADDR_SHIFT 12 | ||
532 | #define EUR_CR_BIF_BANK_SET 0x0C74 | ||
533 | #define EUR_CR_BIF_BANK_SET_SELECT_MASK 0x000003FFU | ||
534 | #define EUR_CR_BIF_BANK_SET_SELECT_SHIFT 0 | ||
535 | #define EUR_CR_BIF_BANK0 0x0C78 | ||
536 | #define EUR_CR_BIF_BANK0_INDEX_EDM_MASK 0x0000000FU | ||
537 | #define EUR_CR_BIF_BANK0_INDEX_EDM_SHIFT 0 | ||
538 | #define EUR_CR_BIF_BANK0_INDEX_TA_MASK 0x000000F0U | ||
539 | #define EUR_CR_BIF_BANK0_INDEX_TA_SHIFT 4 | ||
540 | #define EUR_CR_BIF_BANK0_INDEX_HOST_MASK 0x00000F00U | ||
541 | #define EUR_CR_BIF_BANK0_INDEX_HOST_SHIFT 8 | ||
542 | #define EUR_CR_BIF_BANK0_INDEX_3D_MASK 0x0000F000U | ||
543 | #define EUR_CR_BIF_BANK0_INDEX_3D_SHIFT 12 | ||
544 | #define EUR_CR_BIF_BANK0_INDEX_2D_MASK 0x000F0000U | ||
545 | #define EUR_CR_BIF_BANK0_INDEX_2D_SHIFT 16 | ||
546 | #define EUR_CR_BIF_BANK1 0x0C7C | ||
547 | #define EUR_CR_BIF_BANK1_INDEX_EDM_MASK 0x0000000FU | ||
548 | #define EUR_CR_BIF_BANK1_INDEX_EDM_SHIFT 0 | ||
549 | #define EUR_CR_BIF_BANK1_INDEX_TA_MASK 0x000000F0U | ||
550 | #define EUR_CR_BIF_BANK1_INDEX_TA_SHIFT 4 | ||
551 | #define EUR_CR_BIF_BANK1_INDEX_HOST_MASK 0x00000F00U | ||
552 | #define EUR_CR_BIF_BANK1_INDEX_HOST_SHIFT 8 | ||
553 | #define EUR_CR_BIF_BANK1_INDEX_3D_MASK 0x0000F000U | ||
554 | #define EUR_CR_BIF_BANK1_INDEX_3D_SHIFT 12 | ||
555 | #define EUR_CR_BIF_BANK1_INDEX_2D_MASK 0x000F0000U | ||
556 | #define EUR_CR_BIF_BANK1_INDEX_2D_SHIFT 16 | ||
557 | #define EUR_CR_BIF_ADT_TTE 0x0C80 | ||
558 | #define EUR_CR_BIF_ADT_TTE_VALUE_MASK 0x000000FFU | ||
559 | #define EUR_CR_BIF_ADT_TTE_VALUE_SHIFT 0 | ||
560 | #define EUR_CR_BIF_DIR_LIST_BASE0 0x0C84 | 464 | #define EUR_CR_BIF_DIR_LIST_BASE0 0x0C84 |
561 | #define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_MASK 0xFFFFF000U | 465 | #define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_MASK 0xFFFFF000U |
562 | #define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_SHIFT 12 | 466 | #define EUR_CR_BIF_DIR_LIST_BASE0_ADDR_SHIFT 12 |
563 | #define EUR_CR_BIF_TWOD_REQ_BASE 0x0C88 | ||
564 | #define EUR_CR_BIF_TWOD_REQ_BASE_ADDR_MASK 0xFFF00000U | ||
565 | #define EUR_CR_BIF_TWOD_REQ_BASE_ADDR_SHIFT 20 | ||
566 | #define EUR_CR_BIF_TA_REQ_BASE 0x0C90 | 467 | #define EUR_CR_BIF_TA_REQ_BASE 0x0C90 |
567 | #define EUR_CR_BIF_TA_REQ_BASE_ADDR_MASK 0xFFF00000U | 468 | #define EUR_CR_BIF_TA_REQ_BASE_ADDR_MASK 0x0FF00000U |
568 | #define EUR_CR_BIF_TA_REQ_BASE_ADDR_SHIFT 20 | 469 | #define EUR_CR_BIF_TA_REQ_BASE_ADDR_SHIFT 20 |
569 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1 0x0C94 | ||
570 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_MMU_MASK 0x00000007U | ||
571 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_MMU_SHIFT 0 | ||
572 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_CACHE_MASK 0x00000038U | ||
573 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_CACHE_SHIFT 3 | ||
574 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_VDM_MASK 0x000001C0U | ||
575 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_VDM_SHIFT 6 | ||
576 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_TE_MASK 0x00000E00U | ||
577 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_TE_SHIFT 9 | ||
578 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_TWOD_MASK 0x00007000U | ||
579 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_TWOD_SHIFT 12 | ||
580 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_PBE_MASK 0x00038000U | ||
581 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_1_PBE_SHIFT 15 | ||
582 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_2 0x0C98 | ||
583 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_HOST_MASK 0x00000007U | ||
584 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_HOST_SHIFT 0 | ||
585 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_USE_MASK 0x00000038U | ||
586 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_USE_SHIFT 3 | ||
587 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_ISP_MASK 0x000001C0U | ||
588 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_ISP_SHIFT 6 | ||
589 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_TSPP_MASK 0x00000E00U | ||
590 | #define EUR_CR_BIF_MEM_ARB_FLOWRATES_2_TSPP_SHIFT 9 | ||
591 | #define EUR_CR_BIF_MEM_ARB_CONFIG 0x0CA0 | ||
592 | #define EUR_CR_BIF_MEM_ARB_CONFIG_PAGE_SIZE_MASK 0x0000000FU | ||
593 | #define EUR_CR_BIF_MEM_ARB_CONFIG_PAGE_SIZE_SHIFT 0 | ||
594 | #define EUR_CR_BIF_MEM_ARB_CONFIG_BEST_CNT_MASK 0x00000FF0U | ||
595 | #define EUR_CR_BIF_MEM_ARB_CONFIG_BEST_CNT_SHIFT 4 | ||
596 | #define EUR_CR_BIF_MEM_ARB_CONFIG_TTE_THRESH_MASK 0x00FFF000U | ||
597 | #define EUR_CR_BIF_MEM_ARB_CONFIG_TTE_THRESH_SHIFT 12 | ||
598 | #define EUR_CR_BIF_MEM_REQ_STAT 0x0CA8 | 470 | #define EUR_CR_BIF_MEM_REQ_STAT 0x0CA8 |
599 | #define EUR_CR_BIF_MEM_REQ_STAT_READS_MASK 0x000000FFU | 471 | #define EUR_CR_BIF_MEM_REQ_STAT_READS_MASK 0x000000FFU |
600 | #define EUR_CR_BIF_MEM_REQ_STAT_READS_SHIFT 0 | 472 | #define EUR_CR_BIF_MEM_REQ_STAT_READS_SHIFT 0 |
601 | #define EUR_CR_BIF_3D_REQ_BASE 0x0CAC | 473 | #define EUR_CR_BIF_3D_REQ_BASE 0x0CAC |
602 | #define EUR_CR_BIF_3D_REQ_BASE_ADDR_MASK 0xFFF00000U | 474 | #define EUR_CR_BIF_3D_REQ_BASE_ADDR_MASK 0x0FF00000U |
603 | #define EUR_CR_BIF_3D_REQ_BASE_ADDR_SHIFT 20 | 475 | #define EUR_CR_BIF_3D_REQ_BASE_ADDR_SHIFT 20 |
604 | #define EUR_CR_BIF_ZLS_REQ_BASE 0x0CB0 | 476 | #define EUR_CR_BIF_ZLS_REQ_BASE 0x0CB0 |
605 | #define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_MASK 0xFFF00000U | 477 | #define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_MASK 0x0FF00000U |
606 | #define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_SHIFT 20 | 478 | #define EUR_CR_BIF_ZLS_REQ_BASE_ADDR_SHIFT 20 |
607 | #define EUR_CR_BIF_BANK_STATUS 0x0CB4 | ||
608 | #define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_MASK 0x00000001U | ||
609 | #define EUR_CR_BIF_BANK_STATUS_3D_CURRENT_BANK_SHIFT 0 | ||
610 | #define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_MASK 0x00000002U | ||
611 | #define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SHIFT 1 | ||
612 | #define EUR_CR_2D_BLIT_STATUS 0x0E04 | ||
613 | #define EUR_CR_2D_BLIT_STATUS_COMPLETE_MASK 0x00FFFFFFU | ||
614 | #define EUR_CR_2D_BLIT_STATUS_COMPLETE_SHIFT 0 | ||
615 | #define EUR_CR_2D_BLIT_STATUS_BUSY_MASK 0x01000000U | ||
616 | #define EUR_CR_2D_BLIT_STATUS_BUSY_SHIFT 24 | ||
617 | #define EUR_CR_2D_VIRTUAL_FIFO_0 0x0E10 | ||
618 | #define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_MASK 0x00000001U | ||
619 | #define EUR_CR_2D_VIRTUAL_FIFO_0_ENABLE_SHIFT 0 | ||
620 | #define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MASK 0x0000000EU | ||
621 | #define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_SHIFT 1 | ||
622 | #define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_MASK 0x00000FF0U | ||
623 | #define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_DIV_SHIFT 4 | ||
624 | #define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_MASK 0x0000F000U | ||
625 | #define EUR_CR_2D_VIRTUAL_FIFO_0_FLOWRATE_MUL_SHIFT 12 | ||
626 | #define EUR_CR_2D_VIRTUAL_FIFO_1 0x0E14 | ||
627 | #define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_MASK 0x00000FFFU | ||
628 | #define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_ACC_SHIFT 0 | ||
629 | #define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_MASK 0x00FFF000U | ||
630 | #define EUR_CR_2D_VIRTUAL_FIFO_1_MAX_ACC_SHIFT 12 | ||
631 | #define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_MASK 0xFF000000U | ||
632 | #define EUR_CR_2D_VIRTUAL_FIFO_1_MIN_METRIC_SHIFT 24 | ||
633 | #define EUR_CR_2D_SOCIF 0x0E18 | ||
634 | #define EUR_CR_2D_SOCIF_FREESPACE_MASK 0x000000FFU | ||
635 | #define EUR_CR_2D_SOCIF_FREESPACE_SHIFT 0 | ||
636 | #define EUR_CR_2D_ALPHA 0x0E1C | ||
637 | #define EUR_CR_2D_ALPHA_COMPONENT_ONE_MASK 0x0000FF00U | ||
638 | #define EUR_CR_2D_ALPHA_COMPONENT_ONE_SHIFT 8 | ||
639 | #define EUR_CR_2D_ALPHA_COMPONENT_ZERO_MASK 0x000000FFU | ||
640 | #define EUR_CR_2D_ALPHA_COMPONENT_ZERO_SHIFT 0 | ||
641 | #define EUR_CR_USE_CODE_BASE(X) (0x0A0C + (4 * (X))) | 479 | #define EUR_CR_USE_CODE_BASE(X) (0x0A0C + (4 * (X))) |
642 | #define EUR_CR_USE_CODE_BASE_ADDR_MASK 0x01FFFFFFU | 480 | #define EUR_CR_USE_CODE_BASE_ADDR_MASK 0x000FFFFFU |
643 | #define EUR_CR_USE_CODE_BASE_ADDR_SHIFT 0 | 481 | #define EUR_CR_USE_CODE_BASE_ADDR_SHIFT 0 |
644 | #define EUR_CR_USE_CODE_BASE_DM_MASK 0x06000000U | 482 | #define EUR_CR_USE_CODE_BASE_DM_MASK 0x00300000U |
645 | #define EUR_CR_USE_CODE_BASE_DM_SHIFT 25 | 483 | #define EUR_CR_USE_CODE_BASE_DM_SHIFT 20 |
646 | #define EUR_CR_USE_CODE_BASE_SIZE_UINT32 16 | 484 | #define EUR_CR_USE_CODE_BASE_SIZE_UINT32 16 |
647 | #define EUR_CR_USE_CODE_BASE_NUM_ENTRIES 16 | 485 | #define EUR_CR_USE_CODE_BASE_NUM_ENTRIES 16 |
648 | 486 | ||
diff --git a/drivers/gpu/pvr/sgx544defs.h b/drivers/gpu/pvr/sgx544defs.h index ff3e1e05da6..c18b8ad042a 100644 --- a/drivers/gpu/pvr/sgx544defs.h +++ b/drivers/gpu/pvr/sgx544defs.h | |||
@@ -987,6 +987,22 @@ | |||
987 | #define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_MASK 0x00000002U | 987 | #define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_MASK 0x00000002U |
988 | #define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SHIFT 1 | 988 | #define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SHIFT 1 |
989 | #define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SIGNED 0 | 989 | #define EUR_CR_BIF_BANK_STATUS_TA_CURRENT_BANK_SIGNED 0 |
990 | #define EUR_CR_BIF_MMU_CTRL 0x0CD0 | ||
991 | #define EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_MASK 0x00000001U | ||
992 | #define EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_SHIFT 0 | ||
993 | #define EUR_CR_BIF_MMU_CTRL_PREFETCHING_ON_SIGNED 0 | ||
994 | #define EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_MASK 0x00000006U | ||
995 | #define EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_SHIFT 1 | ||
996 | #define EUR_CR_BIF_MMU_CTRL_ADDR_HASH_MODE_SIGNED 0 | ||
997 | #define EUR_CR_BIF_MMU_CTRL_ENABLE_WRITE_BURST_COLLATE_MASK 0x00000008U | ||
998 | #define EUR_CR_BIF_MMU_CTRL_ENABLE_WRITE_BURST_COLLATE_SHIFT 3 | ||
999 | #define EUR_CR_BIF_MMU_CTRL_ENABLE_WRITE_BURST_COLLATE_SIGNED 0 | ||
1000 | #define EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_MASK 0x00000010U | ||
1001 | #define EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_SHIFT 4 | ||
1002 | #define EUR_CR_BIF_MMU_CTRL_ENABLE_DC_TLB_SIGNED 0 | ||
1003 | #define EUR_CR_BIF_MMU_CTRL_DISABLE_BURST_EXP_MASK 0x00000020U | ||
1004 | #define EUR_CR_BIF_MMU_CTRL_DISABLE_BURST_EXP_SHIFT 5 | ||
1005 | #define EUR_CR_BIF_MMU_CTRL_DISABLE_BURST_EXP_SIGNED 0 | ||
990 | #define EUR_CR_2D_BLIT_STATUS 0x0E04 | 1006 | #define EUR_CR_2D_BLIT_STATUS 0x0E04 |
991 | #define EUR_CR_2D_BLIT_STATUS_COMPLETE_MASK 0x00FFFFFFU | 1007 | #define EUR_CR_2D_BLIT_STATUS_COMPLETE_MASK 0x00FFFFFFU |
992 | #define EUR_CR_2D_BLIT_STATUS_COMPLETE_SHIFT 0 | 1008 | #define EUR_CR_2D_BLIT_STATUS_COMPLETE_SHIFT 0 |
diff --git a/drivers/gpu/pvr/sgx_bridge.h b/drivers/gpu/pvr/sgx_bridge.h index 926c75b69f4..204189c1d18 100644 --- a/drivers/gpu/pvr/sgx_bridge.h +++ b/drivers/gpu/pvr/sgx_bridge.h | |||
@@ -521,6 +521,7 @@ typedef struct PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_RENDER_CONTEXT_TAG | |||
521 | typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_RENDER_CONTEXT_TAG | 521 | typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_RENDER_CONTEXT_TAG |
522 | { | 522 | { |
523 | IMG_UINT32 ui32BridgeFlags; | 523 | IMG_UINT32 ui32BridgeFlags; |
524 | IMG_BOOL bForceCleanup; | ||
524 | #if defined (SUPPORT_SID_INTERFACE) | 525 | #if defined (SUPPORT_SID_INTERFACE) |
525 | IMG_SID hDevCookie; | 526 | IMG_SID hDevCookie; |
526 | IMG_SID hHWRenderContext; | 527 | IMG_SID hHWRenderContext; |
@@ -554,6 +555,7 @@ typedef struct PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_TRANSFER_CONTEXT_TAG | |||
554 | typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_TRANSFER_CONTEXT_TAG | 555 | typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_TRANSFER_CONTEXT_TAG |
555 | { | 556 | { |
556 | IMG_UINT32 ui32BridgeFlags; | 557 | IMG_UINT32 ui32BridgeFlags; |
558 | IMG_BOOL bForceCleanup; | ||
557 | #if defined (SUPPORT_SID_INTERFACE) | 559 | #if defined (SUPPORT_SID_INTERFACE) |
558 | IMG_SID hDevCookie; | 560 | IMG_SID hDevCookie; |
559 | IMG_SID hHWTransferContext; | 561 | IMG_SID hHWTransferContext; |
@@ -600,6 +602,7 @@ typedef struct PVRSRV_BRIDGE_OUT_SGX_REGISTER_HW_2D_CONTEXT_TAG | |||
600 | typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_2D_CONTEXT_TAG | 602 | typedef struct PVRSRV_BRIDGE_IN_SGX_UNREGISTER_HW_2D_CONTEXT_TAG |
601 | { | 603 | { |
602 | IMG_UINT32 ui32BridgeFlags; | 604 | IMG_UINT32 ui32BridgeFlags; |
605 | IMG_BOOL bForceCleanup; | ||
603 | #if defined (SUPPORT_SID_INTERFACE) | 606 | #if defined (SUPPORT_SID_INTERFACE) |
604 | IMG_SID hDevCookie; | 607 | IMG_SID hDevCookie; |
605 | IMG_SID hHW2DContext; | 608 | IMG_SID hHW2DContext; |
diff --git a/drivers/gpu/pvr/sgxerrata.h b/drivers/gpu/pvr/sgxerrata.h index de8f484c8a6..83c0444cc9f 100644 --- a/drivers/gpu/pvr/sgxerrata.h +++ b/drivers/gpu/pvr/sgxerrata.h | |||
@@ -406,6 +406,18 @@ | |||
406 | #define FIX_HW_BRN_31425 | 406 | #define FIX_HW_BRN_31425 |
407 | #endif | 407 | #endif |
408 | #else | 408 | #else |
409 | #if SGX_CORE_REV == 104 | ||
410 | #define FIX_HW_BRN_29954 | ||
411 | #define FIX_HW_BRN_31093 | ||
412 | #define FIX_HW_BRN_31195 | ||
413 | #define FIX_HW_BRN_31278 | ||
414 | #if defined(SGX_FEATURE_MP) | ||
415 | #define FIX_HW_BRN_31425 | ||
416 | #endif | ||
417 | #define FIX_HW_BRN_31542 | ||
418 | #define FIX_HW_BRN_31620 | ||
419 | #define FIX_HW_BRN_31671 | ||
420 | #else | ||
409 | #if SGX_CORE_REV == 105 | 421 | #if SGX_CORE_REV == 105 |
410 | #if defined(SGX_FEATURE_MP) | 422 | #if defined(SGX_FEATURE_MP) |
411 | #define FIX_HW_BRN_31425 | 423 | #define FIX_HW_BRN_31425 |
@@ -420,6 +432,7 @@ | |||
420 | #endif | 432 | #endif |
421 | #endif | 433 | #endif |
422 | #endif | 434 | #endif |
435 | #endif | ||
423 | 436 | ||
424 | #define SGX_CORE_DEFINED | 437 | #define SGX_CORE_DEFINED |
425 | #endif | 438 | #endif |
@@ -471,19 +484,12 @@ | |||
471 | #define SGX_CORE_REV SGX_CORE_REV_HEAD | 484 | #define SGX_CORE_REV SGX_CORE_REV_HEAD |
472 | #endif | 485 | #endif |
473 | 486 | ||
474 | #if SGX_CORE_REV == 100 | ||
475 | #if defined(SGX_FEATURE_MP) | ||
476 | #define FIX_HW_BRN_31425 | ||
477 | #endif | ||
478 | #else | ||
479 | #if SGX_CORE_REV == 101 | ||
480 | #if defined(SGX_FEATURE_MP) | ||
481 | #define FIX_HW_BRN_31425 | ||
482 | #endif | ||
483 | #else | ||
484 | #if SGX_CORE_REV == 123 | 487 | #if SGX_CORE_REV == 123 |
485 | 488 | ||
486 | #else | 489 | #else |
490 | #if SGX_CORE_REV == 124 | ||
491 | |||
492 | #else | ||
487 | #if SGX_CORE_REV == SGX_CORE_REV_HEAD | 493 | #if SGX_CORE_REV == SGX_CORE_REV_HEAD |
488 | 494 | ||
489 | #else | 495 | #else |
@@ -491,7 +497,6 @@ | |||
491 | #endif | 497 | #endif |
492 | #endif | 498 | #endif |
493 | #endif | 499 | #endif |
494 | #endif | ||
495 | 500 | ||
496 | #define SGX_CORE_DEFINED | 501 | #define SGX_CORE_DEFINED |
497 | #endif | 502 | #endif |