diff options
| author | Wengang Wu <wgw@motorola.com> | 2014-05-21 09:29:41 -0500 |
|---|---|---|
| committer | Wengang Wu <wgw@motorola.com> | 2014-05-21 09:29:41 -0500 |
| commit | 53a835f5057367679eb3db728bbdd427aab8aa8a (patch) | |
| tree | 03e5bbde7d371e885d1c67210b2b0c9bb0130d40 /drivers/gpu/pvr/services4/srvkm/common/pvrsrv.c | |
| parent | 7489b569ffb64cdb998544405b6774bd43aab70b (diff) | |
| download | olio-linux-3.10-53a835f5057367679eb3db728bbdd427aab8aa8a.tar.xz olio-linux-3.10-53a835f5057367679eb3db728bbdd427aab8aa8a.zip | |
IKXCLOCK-1501 Upgrade to TI SGX Android OpenGL 1.12@2701748
Initial codes of TI SGX DDK 1.12@2701748
Change-Id: I75a8f6521968346ea1b2ea9fa54817ba186442ce
Diffstat (limited to 'drivers/gpu/pvr/services4/srvkm/common/pvrsrv.c')
| -rwxr-xr-x[-rw-r--r--] | drivers/gpu/pvr/services4/srvkm/common/pvrsrv.c | 137 |
1 files changed, 86 insertions, 51 deletions
diff --git a/drivers/gpu/pvr/services4/srvkm/common/pvrsrv.c b/drivers/gpu/pvr/services4/srvkm/common/pvrsrv.c index 1b5312c02d0..ea1fcaf319d 100644..100755 --- a/drivers/gpu/pvr/services4/srvkm/common/pvrsrv.c +++ b/drivers/gpu/pvr/services4/srvkm/common/pvrsrv.c @@ -48,24 +48,22 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "pdump_km.h" #include "deviceid.h" #include "ra.h" -#if defined(__linux__) -#include "sysfs.h" -#endif #if defined(TTRACE) #include "ttrace.h" #endif #include "perfkm.h" +#include "devicemem.h" #include "pvrversion.h" #include "lists.h" IMG_UINT32 g_ui32InitFlags; -extern int powering_down; /* mark which parts of Services were initialised */ #define INIT_DATA_ENABLE_PDUMPINIT 0x1U -#define INIT_DATA_ENABLE_TTARCE 0x2U +#define INIT_DATA_ENABLE_TTRACE 0x2U +#define INIT_DATA_ENABLE_DEVMEM 0x4U /*! ****************************************************************************** @@ -158,7 +156,37 @@ PVRSRV_ERROR FreeDeviceID(SYS_DATA *psSysData, IMG_UINT32 ui32DevID) return PVRSRV_ERROR_INVALID_DEVICEID; } +/*! +****************************************************************************** + + @Function PVRSRVCompatCheckKM + + @Description UM/KM ddk branch Compatibility check function + + @input psUserModeDDKDetails: User mode DDK version + + @output In case of incompatibility, returns PVRSRV_ERROR_DDK_VERSION_MISMATCH + @Return PVRSRV_ERROR + +******************************************************************************/ +IMG_VOID IMG_CALLCONV PVRSRVCompatCheckKM(PVRSRV_BRIDGE_IN_COMPAT_CHECK *psUserModeDDKDetails, PVRSRV_BRIDGE_RETURN *psRetOUT) +{ + + if(psUserModeDDKDetails->ui32DDKVersion != ((PVRVERSION_MAJ << 16) | (PVRVERSION_MIN << 8)) + || (psUserModeDDKDetails->ui32DDKBuild != PVRVERSION_BUILD)) + { + psRetOUT->eError = PVRSRV_ERROR_DDK_VERSION_MISMATCH; + PVR_DPF((PVR_DBG_ERROR, "(FAIL) UM-KM DDK Mismatch UM-(%d) KM-(%d).", + psUserModeDDKDetails->ui32DDKBuild, PVRVERSION_BUILD)); + } + else + { + psRetOUT->eError = PVRSRV_OK; + PVR_DPF((PVR_DBG_MESSAGE, "UM DDK-(%d) and KM DDK-(%d) match. [ OK ]", + psUserModeDDKDetails->ui32DDKBuild ,PVRVERSION_BUILD)); + } +} /*! ****************************************************************************** @@ -207,8 +235,8 @@ IMG_UINT32 ReadHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset) IMG_EXPORT IMG_VOID WriteHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset, IMG_UINT32 ui32Value) { - PVR_DPF((PVR_DBG_MESSAGE,"WriteHWReg Base:%x, Offset: %x, Value %x", - (IMG_UINTPTR_T)pvLinRegBaseAddr,ui32Offset,ui32Value)); + PVR_DPF((PVR_DBG_MESSAGE,"WriteHWReg Base:%p, Offset: %x, Value %x", + pvLinRegBaseAddr,ui32Offset,ui32Value)); *(IMG_UINT32*)((IMG_UINTPTR_T)pvLinRegBaseAddr+ui32Offset) = ui32Value; } @@ -366,14 +394,6 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInit(PSYS_DATA psSysData) { PVRSRV_ERROR eError; -#if defined(__linux__) - eError = PVRSRVCreateSysfsEntry(); - if (eError != PVRSRV_OK) - { - goto Error; - } -#endif - /* Initialise Resource Manager */ eError = ResManInit(); if (eError != PVRSRV_OK) @@ -406,16 +426,16 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInit(PSYS_DATA psSysData) psSysData->eFailedPowerState = PVRSRV_SYS_POWER_STATE_Unspecified; /* Create an event object */ - if(OSAllocMem( PVRSRV_PAGEABLE_SELECT, + if((eError = OSAllocMem( PVRSRV_PAGEABLE_SELECT, sizeof(PVRSRV_EVENTOBJECT) , (IMG_VOID **)&psSysData->psGlobalEventObject, 0, - "Event Object") != PVRSRV_OK) + "Event Object")) != PVRSRV_OK) { goto Error; } - if(OSEventObjectCreateKM("PVRSRV_GLOBAL_EVENTOBJECT", psSysData->psGlobalEventObject) != PVRSRV_OK) + if((eError = OSEventObjectCreateKM("PVRSRV_GLOBAL_EVENTOBJECT", psSysData->psGlobalEventObject)) != PVRSRV_OK) { goto Error; } @@ -429,12 +449,21 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVInit(PSYS_DATA psSysData) eError = PVRSRVTimeTraceInit(); if (eError != PVRSRV_OK) goto Error; - g_ui32InitFlags |= INIT_DATA_ENABLE_TTARCE; + g_ui32InitFlags |= INIT_DATA_ENABLE_TTRACE; #endif +#if defined(PDUMP) /* Initialise pdump */ PDUMPINIT(); g_ui32InitFlags |= INIT_DATA_ENABLE_PDUMPINIT; +#endif + +#if defined(SUPPORT_ION) + eError = PVRSRVInitDeviceMem(); + if (eError != PVRSRV_OK) + goto Error; + g_ui32InitFlags |= INIT_DATA_ENABLE_DEVMEM; +#endif PERFINIT(); return eError; @@ -472,19 +501,35 @@ IMG_VOID IMG_CALLCONV PVRSRVDeInit(PSYS_DATA psSysData) PERFDEINIT(); + +#if defined(SUPPORT_ION) + if ((g_ui32InitFlags & INIT_DATA_ENABLE_DEVMEM) > 0) + { + PVRSRVDeInitDeviceMem(); + } +#endif + +#if defined(MEM_TRACK_INFO_DEBUG) + /* Free the list of memory operations */ + PVRSRVFreeMemOps(); +#endif + #if defined(TTRACE) /* deinitialise ttrace */ - if ((g_ui32InitFlags & INIT_DATA_ENABLE_TTARCE) > 0) + if ((g_ui32InitFlags & INIT_DATA_ENABLE_TTRACE) > 0) { PVRSRVTimeTraceDeinit(); } #endif + +#if defined(PDUMP) /* deinitialise pdump */ if( (g_ui32InitFlags & INIT_DATA_ENABLE_PDUMPINIT) > 0) { PDUMPDEINIT(); } - +#endif + /* destroy event object */ if(psSysData->psGlobalEventObject) { @@ -1148,11 +1193,7 @@ static PVRSRV_ERROR PVRSRVGetMiscInfoKM_Device_AnyVaCb(PVRSRV_DEVICE_NODE *psDev ******************************************************************************/ IMG_EXPORT -#if defined (SUPPORT_SID_INTERFACE) -PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO_KM *psMiscInfo) -#else PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) -#endif { SYS_DATA *psSysData; @@ -1338,16 +1379,10 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) } else { -#if defined (SUPPORT_SID_INTERFACE) - PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo = psMiscInfo->sCacheOpCtl.psKernelMemInfo; - - if(!psMiscInfo->sCacheOpCtl.psKernelMemInfo) -#else PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; PVRSRV_PER_PROCESS_DATA *psPerProc; if(!psMiscInfo->sCacheOpCtl.u.psKernelMemInfo) -#endif { PVR_DPF((PVR_DBG_WARNING, "PVRSRVGetMiscInfoKM: " "Ignoring non-deferred cache op with no meminfo")); @@ -1361,9 +1396,6 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) "to combine deferred cache ops with immediate ones")); } -#if defined (SUPPORT_SID_INTERFACE) - PVR_DBG_BREAK -#else psPerProc = PVRSRVFindPerProcessData(); if(PVRSRVLookupHandle(psPerProc->psHandleBase, @@ -1375,7 +1407,6 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) "Can't find kernel meminfo")); return PVRSRV_ERROR_INVALID_PARAMS; } -#endif if(psMiscInfo->sCacheOpCtl.eCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_FLUSH) { @@ -1389,12 +1420,15 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) } else if(psMiscInfo->sCacheOpCtl.eCacheOpType == PVRSRV_MISC_INFO_CPUCACHEOP_CLEAN) { - if(!OSCleanCPUCacheRangeKM(psKernelMemInfo->sMemBlk.hOSMemHandle, - 0, - psMiscInfo->sCacheOpCtl.pvBaseVAddr, - psMiscInfo->sCacheOpCtl.ui32Length)) + if(psMiscInfo->sCacheOpCtl.ui32Length!=0) { - return PVRSRV_ERROR_CACHEOP_FAILED; + if(!OSCleanCPUCacheRangeKM(psKernelMemInfo->sMemBlk.hOSMemHandle, + 0, + psMiscInfo->sCacheOpCtl.pvBaseVAddr, + psMiscInfo->sCacheOpCtl.ui32Length)) + { + return PVRSRV_ERROR_CACHEOP_FAILED; + } } } } @@ -1402,16 +1436,11 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) if((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_GET_REF_COUNT_PRESENT) != 0UL) { -#if !defined (SUPPORT_SID_INTERFACE) PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo; PVRSRV_PER_PROCESS_DATA *psPerProc; -#endif psMiscInfo->ui32StatePresent |= PVRSRV_MISC_INFO_GET_REF_COUNT_PRESENT; -#if defined (SUPPORT_SID_INTERFACE) - PVR_DBG_BREAK -#else psPerProc = PVRSRVFindPerProcessData(); if(PVRSRVLookupHandle(psPerProc->psHandleBase, @@ -1425,7 +1454,6 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) } psMiscInfo->sGetRefCountCtl.ui32RefCount = psKernelMemInfo->ui32RefCount; -#endif } if ((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_GET_PAGE_SIZE_PRESENT) != 0UL) @@ -1442,11 +1470,13 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo) } #endif /* #if defined(PVRSRV_RESET_ON_HWTIMEOUT) */ +#if defined(SUPPORT_PVRSRV_DEVICE_CLASS) if ((psMiscInfo->ui32StateRequest & PVRSRV_MISC_INFO_FORCE_SWAP_TO_SYSTEM_PRESENT) != 0UL) { - PVRSRVSetDCState(DC_STATE_FORCE_SWAP_TO_SYSTEM); + PVRSRVProcessQueues(IMG_TRUE); psMiscInfo->ui32StatePresent |= PVRSRV_MISC_INFO_FORCE_SWAP_TO_SYSTEM_PRESENT; } +#endif /* defined(SUPPORT_PVRSRV_DEVICE_CLASS) */ return PVRSRV_OK; } @@ -1486,9 +1516,8 @@ IMG_BOOL IMG_CALLCONV PVRSRVDeviceLISR(PVRSRV_DEVICE_NODE *psDeviceNode) { bStatus = (*psDeviceNode->pfnDeviceISR)(psDeviceNode->pvISRData); } - if(!powering_down) { - SysClearInterrupts(psSysData, psDeviceNode->ui32SOCInterruptBit); - } + + SysClearInterrupts(psSysData, psDeviceNode->ui32SOCInterruptBit); } out: @@ -1605,11 +1634,13 @@ IMG_VOID IMG_CALLCONV PVRSRVMISR(IMG_VOID *pvSysData) List_PVRSRV_DEVICE_NODE_ForEach(psSysData->psDeviceNodeList, &PVRSRVMISR_ForEachCb); +#if defined(SUPPORT_PVRSRV_DEVICE_CLASS) /* Process the queues. */ if (PVRSRVProcessQueues(IMG_FALSE) == PVRSRV_ERROR_PROCESSING_BLOCKED) { PVRSRVProcessQueues(IMG_FALSE); } +#endif /* defined(SUPPORT_PVRSRV_DEVICE_CLASS) */ /* signal global event object */ if (psSysData->psGlobalEventObject) @@ -1706,7 +1737,11 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVSaveRestoreLiveSegments(IMG_HANDLE hArena, IMG_P return (PVRSRV_ERROR_OUT_OF_MEMORY); } - PVR_DPF((PVR_DBG_MESSAGE, "PVRSRVSaveRestoreLiveSegments: Base %08x size %08x", sSegDetails.sCpuPhyAddr.uiAddr, sSegDetails.uiSize)); + PVR_DPF(( + PVR_DBG_MESSAGE, + "PVRSRVSaveRestoreLiveSegments: Base " CPUPADDR_FMT " size %" SIZE_T_FMT_LEN "x", + sSegDetails.sCpuPhyAddr.uiAddr, + sSegDetails.uiSize)); /* Map the device's local memory area onto the host. */ pvLocalMemCPUVAddr = OSMapPhysToLin(sSegDetails.sCpuPhyAddr, |