diff options
author | Ben Jones <ben.jones@imgtec.com> | 2015-11-11 16:00:21 +0000 |
---|---|---|
committer | Ben Jones <ben.jones@imgtec.com> | 2015-11-25 16:23:20 +0000 |
commit | 4f43e6b499c6d194030df8d2506485db9d5165bd (patch) | |
tree | b34d476eab90e7438f70096a6f36bbe25c251154 | |
parent | e60fe11e46616f9dc03a076f839e879cf0f6289a (diff) | |
download | mediatek-android-mtk-3.18.tar.gz |
staging: imgtec: update PowerVR Rogue driver to version 1.6@3823360android-mtk-3.18
Signed-off-by: Ben Jones <ben.jones@imgtec.com>
21 files changed, 317 insertions, 107 deletions
diff --git a/drivers/staging/imgtec/config_kernel.h b/drivers/staging/imgtec/config_kernel.h index 31088a0dfa6b..cacf7283cfef 100644 --- a/drivers/staging/imgtec/config_kernel.h +++ b/drivers/staging/imgtec/config_kernel.h @@ -10,6 +10,7 @@ #define SUPPORT_DBGDRV_EVENT_OBJECTS #define PDUMP_STREAMBUF_MAX_SIZE_MB 16 #define SYS_USING_INTERRUPTS +#define SUPPORT_RANGEBASED_CACHEFLUSH #define SUPPORT_GPUTRACE_EVENTS #define GPUVIRT_VALIDATION_NUM_OS 8 #define PVRSRV_GPUVIRT_NUM_OSID 2 diff --git a/drivers/staging/imgtec/pvrversion.h b/drivers/staging/imgtec/pvrversion.h index 1623092a8333..a4b1c57d457e 100644 --- a/drivers/staging/imgtec/pvrversion.h +++ b/drivers/staging/imgtec/pvrversion.h @@ -53,7 +53,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define PVRVERSION_FAMILY "rogueddk" #define PVRVERSION_BRANCHNAME "1.6" -#define PVRVERSION_BUILD 3814013 +#define PVRVERSION_BUILD 3823360 #define PVRVERSION_BSCONTROL "Rogue_DDK_Android" #define PVRVERSION_STRING "Rogue_DDK_Android rogueddk 1.6@" PVR_STR2(PVRVERSION_BUILD) @@ -61,8 +61,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define COPYRIGHT_TXT "Copyright (c) Imagination Technologies Ltd. All Rights Reserved." -#define PVRVERSION_BUILD_HI 381 -#define PVRVERSION_BUILD_LO 4013 +#define PVRVERSION_BUILD_HI 382 +#define PVRVERSION_BUILD_LO 3360 #define PVRVERSION_STRING_NUMERIC PVR_STR2(PVRVERSION_MAJ) "." PVR_STR2(PVRVERSION_MIN) "." PVR_STR2(PVRVERSION_BUILD_HI) "." PVR_STR2(PVRVERSION_BUILD_LO) #define PVRVERSION_PACK(MAJ,MIN) ((((MAJ)&0xFFFF) << 16) | (((MIN)&0xFFFF) << 0)) diff --git a/drivers/staging/imgtec/rogue/allocmem.c b/drivers/staging/imgtec/rogue/allocmem.c index a6627b4981ca..10c278eacb39 100644 --- a/drivers/staging/imgtec/rogue/allocmem.c +++ b/drivers/staging/imgtec/rogue/allocmem.c @@ -229,7 +229,12 @@ IMG_INTERNAL void *OSAllocMem(IMG_UINT32 ui32Size) } if (pvRet == NULL) { +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) + /* Allocate an additional 4 bytes to store the PID of the allocating process */ + pvRet = kmalloc(ui32Size + sizeof(IMG_UINT32), GFP_KERNEL); +#else pvRet = kmalloc(ui32Size, GFP_KERNEL); +#endif } if (pvRet != NULL) @@ -238,7 +243,14 @@ IMG_INTERNAL void *OSAllocMem(IMG_UINT32 ui32Size) if (!is_vmalloc_addr(pvRet)) { #if !defined(PVRSRV_ENABLE_MEMORY_STATS) +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) + { + /* Store the PID in the final additional 4 bytes allocated */ + IMG_UINT32 *puiTemp = (IMG_UINT32*) (((IMG_BYTE*)pvRet) + (ksize(pvRet) - sizeof(IMG_UINT32))); + *puiTemp = OSGetCurrentProcessID(); + } PVRSRVStatsIncrMemAllocStat(PVRSRV_MEM_ALLOC_TYPE_KMALLOC, ksize(pvRet)); +#endif #else IMG_CPU_PHYADDR sCpuPAddr; sCpuPAddr.uiAddr = 0; @@ -253,9 +265,11 @@ IMG_INTERNAL void *OSAllocMem(IMG_UINT32 ui32Size) else { #if !defined(PVRSRV_ENABLE_MEMORY_STATS) +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) PVRSRVStatsIncrMemAllocStatAndTrack(PVRSRV_MEM_ALLOC_TYPE_VMALLOC, ((ui32Size + PAGE_SIZE -1) & ~(PAGE_SIZE-1)), (IMG_UINT64)(uintptr_t) pvRet); +#endif #else IMG_CPU_PHYADDR sCpuPAddr; sCpuPAddr.uiAddr = 0; @@ -281,7 +295,12 @@ IMG_INTERNAL void *OSAllocZMem(IMG_UINT32 ui32Size) } if (pvRet == NULL) { +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) + /* Allocate an additional 4 bytes to store the PID of the allocating process */ + pvRet = kzalloc(ui32Size + sizeof(IMG_UINT32), GFP_KERNEL); +#else pvRet = kzalloc(ui32Size, GFP_KERNEL); +#endif } if (pvRet != NULL) @@ -289,8 +308,17 @@ IMG_INTERNAL void *OSAllocZMem(IMG_UINT32 ui32Size) if (!is_vmalloc_addr(pvRet)) { #if !defined(PVRSRV_ENABLE_MEMORY_STATS) +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) + { + /* Store the PID in the final additional 4 bytes allocated */ + IMG_UINT32 *puiTemp = (IMG_UINT32*) (((IMG_BYTE*)pvRet) + (ksize(pvRet) - sizeof(IMG_UINT32))); + *puiTemp = OSGetCurrentProcessID(); + } PVRSRVStatsIncrMemAllocStat(PVRSRV_MEM_ALLOC_TYPE_KMALLOC, ksize(pvRet)); #else + +#endif +#else IMG_CPU_PHYADDR sCpuPAddr; sCpuPAddr.uiAddr = 0; @@ -304,9 +332,11 @@ IMG_INTERNAL void *OSAllocZMem(IMG_UINT32 ui32Size) else { #if !defined(PVRSRV_ENABLE_MEMORY_STATS) +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) PVRSRVStatsIncrMemAllocStatAndTrack(PVRSRV_MEM_ALLOC_TYPE_VMALLOC, ((ui32Size + PAGE_SIZE -1) & ~(PAGE_SIZE-1)), (IMG_UINT64)(uintptr_t) pvRet); +#endif #else IMG_CPU_PHYADDR sCpuPAddr; sCpuPAddr.uiAddr = 0; @@ -330,7 +360,9 @@ IMG_INTERNAL void OSFreeMem(void *pvMem) if (!is_vmalloc_addr(pvMem)) { #if !defined(PVRSRV_ENABLE_MEMORY_STATS) - PVRSRVStatsDecrMemAllocStat(PVRSRV_MEM_ALLOC_TYPE_KMALLOC, ksize(pvMem)); +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) + PVRSRVStatsDecrMemKAllocStat(ksize(pvMem), *((IMG_UINT32*) (((IMG_BYTE*)pvMem) + (ksize(pvMem) - sizeof(IMG_UINT32))))); +#endif #else PVRSRVStatsRemoveMemAllocRecord(PVRSRV_MEM_ALLOC_TYPE_KMALLOC, (IMG_UINT64)(uintptr_t) pvMem); @@ -340,8 +372,10 @@ IMG_INTERNAL void OSFreeMem(void *pvMem) else { #if !defined(PVRSRV_ENABLE_MEMORY_STATS) +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) PVRSRVStatsDecrMemAllocStatAndUntrack(PVRSRV_MEM_ALLOC_TYPE_VMALLOC, (IMG_UINT64)(uintptr_t) pvMem); +#endif #else PVRSRVStatsRemoveMemAllocRecord(PVRSRV_MEM_ALLOC_TYPE_VMALLOC, (IMG_UINT64)(uintptr_t) pvMem); diff --git a/drivers/staging/imgtec/rogue/cache_generic.c b/drivers/staging/imgtec/rogue/cache_generic.c index 29460d43c975..4a24f49ad494 100644 --- a/drivers/staging/imgtec/rogue/cache_generic.c +++ b/drivers/staging/imgtec/rogue/cache_generic.c @@ -77,8 +77,10 @@ PVRSRV_ERROR CacheOpQueue(PMR *psPMR, /* Carry out full dcache operation if size qualifies */ if ((uiSize >> PAGE_SHIFT) >= PVR_DIRTY_PAGECOUNT_FLUSH_THRESHOLD) { - OSCPUOperation(uiCacheOp); - return PVRSRV_OK; + if (OSCPUOperation(uiCacheOp) == PVRSRV_OK) + { + return PVRSRV_OK; + } } /* Need to track both cache-aligned and page-aligned quantities */ diff --git a/drivers/staging/imgtec/rogue/osfunc.h b/drivers/staging/imgtec/rogue/osfunc.h index 02f269737c37..5376dccb35c2 100644 --- a/drivers/staging/imgtec/rogue/osfunc.h +++ b/drivers/staging/imgtec/rogue/osfunc.h @@ -193,7 +193,7 @@ void *OSMapPhysToLin(IMG_CPU_PHYADDR BasePAddr, size_t ui32Bytes, IMG_UINT32 ui3 IMG_BOOL OSUnMapPhysToLin(void *pvLinAddr, size_t ui32Bytes, IMG_UINT32 ui32Flags); -void OSCPUOperation(PVRSRV_CACHE_OP eCacheOp); +PVRSRV_ERROR OSCPUOperation(PVRSRV_CACHE_OP eCacheOp); void OSFlushCPUCacheRangeKM(void *pvVirtStart, void *pvVirtEnd, diff --git a/drivers/staging/imgtec/rogue/osfunc_arm64.c b/drivers/staging/imgtec/rogue/osfunc_arm64.c index 619d91bb7747..84ae2245dee4 100644 --- a/drivers/staging/imgtec/rogue/osfunc_arm64.c +++ b/drivers/staging/imgtec/rogue/osfunc_arm64.c @@ -57,37 +57,31 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #error "CONFIG_OUTER_CACHE not supported on arm64." #endif - -static void per_cpu_cache_flush(void *arg) +PVRSRV_ERROR OSCPUOperation(PVRSRV_CACHE_OP uiCacheOp) { - PVR_UNREFERENCED_PARAMETER(arg); - flush_cache_all(); -} + PVRSRV_ERROR eError = PVRSRV_OK; -void OSCPUOperation(PVRSRV_CACHE_OP uiCacheOp) -{ switch(uiCacheOp) { - /* Fall-through */ case PVRSRV_CACHE_OP_CLEAN: - /* No full (inner) cache clean op */ - on_each_cpu(per_cpu_cache_flush, NULL, 1); - break; - case PVRSRV_CACHE_OP_FLUSH: - on_each_cpu(per_cpu_cache_flush, NULL, 1); - break; + case PVRSRV_CACHE_OP_INVALIDATE: + eError = PVRSRV_ERROR_NOT_IMPLEMENTED; + break; case PVRSRV_CACHE_OP_NONE: - break; + break; default: - PVR_DPF((PVR_DBG_ERROR, - "%s: Invalid cache operation type %d", + PVR_DPF((PVR_DBG_ERROR, + "%s: Global cache operation type %d is invalid", __FUNCTION__, uiCacheOp)); - PVR_ASSERT(0); - break; + eError = PVRSRV_ERROR_INVALID_PARAMS; + PVR_ASSERT(0); + break; } + + return eError; } void OSFlushCPUCacheRangeKM(void *pvVirtStart, diff --git a/drivers/staging/imgtec/rogue/physmem_osmem_linux.c b/drivers/staging/imgtec/rogue/physmem_osmem_linux.c index b54fc9a50132..7db9c74760ed 100644 --- a/drivers/staging/imgtec/rogue/physmem_osmem_linux.c +++ b/drivers/staging/imgtec/rogue/physmem_osmem_linux.c @@ -1385,7 +1385,14 @@ _ApplyOSPagesAttribute(struct page **ppsPage, IMG_UINT32 ui32Idx; - if (uiNumPages < PVR_DIRTY_PAGECOUNT_FLUSH_THRESHOLD) + eError = PVRSRV_ERROR_RETRY; + if (uiNumPages >= PVR_DIRTY_PAGECOUNT_FLUSH_THRESHOLD) + { + /* May fail so fallback to range-based flush */ + eError = OSCPUOperation(PVRSRV_CACHE_OP_FLUSH); + } + + if (eError != PVRSRV_OK) { for (ui32Idx = 0; ui32Idx < uiNumPages; ++ui32Idx) { @@ -1415,14 +1422,12 @@ _ApplyOSPagesAttribute(struct page **ppsPage, kunmap(ppsPage[ui32Idx]); } + + eError = PVRSRV_OK; } - else - { - OSCPUOperation(PVRSRV_CACHE_OP_FLUSH); - } - } + } } - + return eError; } diff --git a/drivers/staging/imgtec/rogue/pmr_os.c b/drivers/staging/imgtec/rogue/pmr_os.c index c7e039359476..595f772e6077 100644 --- a/drivers/staging/imgtec/rogue/pmr_os.c +++ b/drivers/staging/imgtec/rogue/pmr_os.c @@ -120,13 +120,15 @@ static void MMapPMRClose(struct vm_area_struct *ps_vma) #if defined(PVRSRV_ENABLE_PROCESS_STATS) #if defined(PVRSRV_ENABLE_MEMORY_STATS) - uintptr_t vAddr = ps_vma->vm_start; - - while (vAddr < ps_vma->vm_end) { - /* USER MAPPING */ - PVRSRVStatsRemoveMemAllocRecord(PVRSRV_MEM_ALLOC_TYPE_MAP_UMA_LMA_PAGES, (IMG_UINT64)vAddr); - vAddr += PAGE_SIZE; + uintptr_t vAddr = ps_vma->vm_start; + + while (vAddr < ps_vma->vm_end) + { + /* USER MAPPING */ + PVRSRVStatsRemoveMemAllocRecord(PVRSRV_MEM_ALLOC_TYPE_MAP_UMA_LMA_PAGES, (IMG_UINT64)vAddr); + vAddr += PAGE_SIZE; + } } #else PVRSRVStatsDecrMemAllocStat(PVRSRV_MEM_ALLOC_TYPE_MAP_UMA_LMA_PAGES, ps_vma->vm_end - ps_vma->vm_start); diff --git a/drivers/staging/imgtec/rogue/process_stats.c b/drivers/staging/imgtec/rogue/process_stats.c index bce52f60792c..4ead1c4e94c7 100644 --- a/drivers/staging/imgtec/rogue/process_stats.c +++ b/drivers/staging/imgtec/rogue/process_stats.c @@ -130,10 +130,14 @@ static IMG_CHAR* pszProcessStatFmt[PVRSRV_PROCESS_STAT_TYPE_COUNT] = { "FreeListGrowRequestsByFirmware %10d\n", /* PVRSRV_PROCESS_STAT_TYPE_FREELIST_GROW_REQS_BY_FW */ "FreeListInitialPages %10d\n", /* PVRSRV_PROCESS_STAT_TYPE_FREELIST_PAGES_INIT */ "FreeListMaxPages %10d\n", /* PVRSRV_PROCESS_STAT_TYPE_FREELIST_MAX_PAGES */ - "MemoryUsageKMalloc %10d\n", /* PVRSRV_STAT_TYPE_KMALLOC */ +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) + "MemoryUsageKMalloc %10d\n", /* PVRSRV_STAT_TYPE_KMALLOC */ "MemoryUsageKMallocMax %10d\n", /* PVRSRV_STAT_TYPE_MAX_KMALLOC */ "MemoryUsageVMalloc %10d\n", /* PVRSRV_STAT_TYPE_VMALLOC */ "MemoryUsageVMallocMax %10d\n", /* PVRSRV_STAT_TYPE_MAX_VMALLOC */ +#else + "","","","", /* Empty strings if these stats are not logged */ +#endif "MemoryUsageAllocPTMemoryUMA %10d\n", /* PVRSRV_STAT_TYPE_ALLOC_PAGES_PT_UMA */ "MemoryUsageAllocPTMemoryUMAMax %10d\n", /* PVRSRV_STAT_TYPE_MAX_ALLOC_PAGES_PT_UMA */ "MemoryUsageVMapPTUMA %10d\n", /* PVRSRV_STAT_TYPE_VMAP_PT_UMA */ @@ -150,6 +154,14 @@ static IMG_CHAR* pszProcessStatFmt[PVRSRV_PROCESS_STAT_TYPE_COUNT] = { "MemoryUsageMappedGPUMemUMA/LMAMax %10d\n", /* PVRSRV_STAT_TYPE_MAX_MAP_UMA_LMA_PAGES */ }; +/* structure used in hash table to track vmalloc statistic entries */ +typedef struct{ + size_t uiSizeInBytes; + IMG_PID uiPid; +}_PVR_STATS_VMALLOC_HASH_ENTRY; + +/* Function used internally to decrement per-process vmalloc statistic entries */ +static void _StatsDecrMemVAllocStat(_PVR_STATS_VMALLOC_HASH_ENTRY *psVmallocHashEntry); /* * Functions for printing the information stored... @@ -1106,6 +1118,7 @@ static void _decrease_global_stat(PVRSRV_MEM_ALLOC_TYPE eAllocType, switch (eAllocType) { +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: DECREASE_GLOBAL_STAT_VALUE(gsGlobalStats.ui32MemoryUsageKMalloc, uiBytes); break; @@ -1113,7 +1126,11 @@ static void _decrease_global_stat(PVRSRV_MEM_ALLOC_TYPE eAllocType, case PVRSRV_MEM_ALLOC_TYPE_VMALLOC: DECREASE_GLOBAL_STAT_VALUE(gsGlobalStats.ui32MemoryUsageVMalloc, uiBytes); break; - +#else + case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: + case PVRSRV_MEM_ALLOC_TYPE_VMALLOC: + break; +#endif case PVRSRV_MEM_ALLOC_TYPE_ALLOC_PAGES_PT_UMA: DECREASE_GLOBAL_STAT_VALUE(gsGlobalStats.ui32MemoryUsageAllocPTMemoryUMA, uiBytes); break; @@ -1160,6 +1177,7 @@ static void _increase_global_stat(PVRSRV_MEM_ALLOC_TYPE eAllocType, switch (eAllocType) { +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: INCREASE_GLOBAL_STAT_VALUE(gsGlobalStats.ui32MemoryUsageKMalloc, uiBytes); break; @@ -1167,7 +1185,11 @@ static void _increase_global_stat(PVRSRV_MEM_ALLOC_TYPE eAllocType, case PVRSRV_MEM_ALLOC_TYPE_VMALLOC: INCREASE_GLOBAL_STAT_VALUE(gsGlobalStats.ui32MemoryUsageVMalloc, uiBytes); break; - +#else + case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: + case PVRSRV_MEM_ALLOC_TYPE_VMALLOC: + break; +#endif case PVRSRV_MEM_ALLOC_TYPE_ALLOC_PAGES_PT_UMA: INCREASE_GLOBAL_STAT_VALUE(gsGlobalStats.ui32MemoryUsageAllocPTMemoryUMA, uiBytes); break; @@ -1436,7 +1458,11 @@ _PVRSRVStatsAddMemAllocRecord(PVRSRV_MEM_ALLOC_TYPE eAllocType, */ /* Allocate the memory record... */ - psRecord = OSAllocMemNoStats(sizeof(PVRSRV_MEM_ALLOC_REC)); +#if defined(__linux__) + psRecord = (PVRSRV_MEM_ALLOC_REC*)OSAllocMemNoStats(sizeof(PVRSRV_MEM_ALLOC_REC)); +#else + psRecord = (PVRSRV_MEM_ALLOC_REC*)OSAllocMem(sizeof(PVRSRV_MEM_ALLOC_REC)); +#endif if (psRecord == NULL) { return; @@ -1536,7 +1562,11 @@ _PVRSRVStatsAddMemAllocRecord(PVRSRV_MEM_ALLOC_TYPE eAllocType, psProcessStats->psRIMemoryStats = OSAllocZMemNoStats(sizeof(PVRSRV_RI_MEMORY_STATS)); if (psProcessStats->psRIMemoryStats == NULL) { +#if defined(__linux__) OSFreeMemNoStats(psProcessStats->psMemoryStats); +#else + OSFreeMem(psProcessStats->psMemoryStats); +#endif OSLockDestroyNoStats(psProcessStats->hLock); psProcessStats->hLock = NULL; OSLockRelease(g_psLinkedListLock); @@ -1571,7 +1601,11 @@ _PVRSRVStatsAddMemAllocRecord(PVRSRV_MEM_ALLOC_TYPE eAllocType, #endif if (psRecord != NULL) { +#if defined(__linux__) OSFreeMemNoStats(psRecord); +#else + OSFreeMem(psRecord); +#endif } return; } @@ -1589,6 +1623,7 @@ _PVRSRVStatsAddMemAllocRecord(PVRSRV_MEM_ALLOC_TYPE eAllocType, /* Update the memory watermarks... */ switch (eAllocType) { +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: { if (psRecord != NULL) @@ -1618,7 +1653,11 @@ _PVRSRVStatsAddMemAllocRecord(PVRSRV_MEM_ALLOC_TYPE eAllocType, psProcessStats->ui32StatAllocFlags |= (IMG_UINT32)(1 << (PVRSRV_PROCESS_STAT_TYPE_VMALLOC-PVRSRV_PROCESS_STAT_TYPE_KMALLOC)); } break; - +#else + case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: + case PVRSRV_MEM_ALLOC_TYPE_VMALLOC: + break; +#endif case PVRSRV_MEM_ALLOC_TYPE_ALLOC_PAGES_PT_UMA: { if (psRecord != NULL) @@ -1867,6 +1906,7 @@ PVRSRVStatsRemoveMemAllocRecord(PVRSRV_MEM_ALLOC_TYPE eAllocType, switch (eAllocType) { +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: { DECREASE_STAT_VALUE(psProcessStats, PVRSRV_PROCESS_STAT_TYPE_KMALLOC, (IMG_UINT32)psRecord->uiBytes); @@ -1886,8 +1926,12 @@ PVRSRVStatsRemoveMemAllocRecord(PVRSRV_MEM_ALLOC_TYPE eAllocType, } } break; - - case PVRSRV_MEM_ALLOC_TYPE_ALLOC_PAGES_PT_UMA: +#else + case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: + case PVRSRV_MEM_ALLOC_TYPE_VMALLOC: + break; +#endif + case PVRSRV_MEM_ALLOC_TYPE_ALLOC_PAGES_PT_UMA: { DECREASE_STAT_VALUE(psProcessStats, PVRSRV_PROCESS_STAT_TYPE_ALLOC_PAGES_PT_UMA, (IMG_UINT32)psRecord->uiBytes); if( psProcessStats->i32StatValue[PVRSRV_MEM_ALLOC_TYPE_ALLOC_PAGES_PT_UMA] == 0 ) @@ -1985,7 +2029,11 @@ PVRSRVStatsRemoveMemAllocRecord(PVRSRV_MEM_ALLOC_TYPE eAllocType, * Free the record outside the lock so we don't deadlock and so we * reduce the time the lock is held. */ +#if defined(__linux__) OSFreeMemNoStats(psRecord); +#else + OSFreeMem(psRecord); +#endif } else { @@ -2003,7 +2051,8 @@ PVRSRVStatsIncrMemAllocStatAndTrack(PVRSRV_MEM_ALLOC_TYPE eAllocType, size_t uiBytes, IMG_UINT64 uiCpuVAddr) { - IMG_BOOL bRes; + IMG_BOOL bRes = IMG_FALSE; + _PVR_STATS_VMALLOC_HASH_ENTRY *psNewVmallocHashEntry = NULL; if (!bProcessStatsInitialised || (gpsVmallocSizeHashTable == NULL) ) { @@ -2011,16 +2060,35 @@ PVRSRVStatsIncrMemAllocStatAndTrack(PVRSRV_MEM_ALLOC_TYPE eAllocType, } OSLockAcquire(gpsVmallocSizeHashTableLock); - bRes = HASH_Insert(gpsVmallocSizeHashTable, uiCpuVAddr, uiBytes); + /* Alloc untracked memory for the new hash table entry */ +#if defined(__linux__) + psNewVmallocHashEntry = (_PVR_STATS_VMALLOC_HASH_ENTRY *)OSAllocMemNoStats(sizeof(*psNewVmallocHashEntry)); +#else + psNewVmallocHashEntry = (_PVR_STATS_VMALLOC_HASH_ENTRY *)OSAllocMem(sizeof(*psNewVmallocHashEntry)); +#endif + if (psNewVmallocHashEntry) + { + /* Fill-in the size of the vmalloc and PID of the allocating process */ + psNewVmallocHashEntry->uiSizeInBytes = uiBytes; + psNewVmallocHashEntry->uiPid = OSGetCurrentProcessID(); + /* Insert address of the new struct into the hash table */ + bRes = HASH_Insert(gpsVmallocSizeHashTable, uiCpuVAddr, (uintptr_t)psNewVmallocHashEntry); + } OSLockRelease(gpsVmallocSizeHashTableLock); - - if (bRes) + if (psNewVmallocHashEntry) { - PVRSRVStatsIncrMemAllocStat(eAllocType, uiBytes); + if (bRes) + { + PVRSRVStatsIncrMemAllocStat(eAllocType, uiBytes); + } + else + { + PVR_DPF((PVR_DBG_ERROR, "*** %s : @ line %d HASH_Insert() failed!!", __FUNCTION__, __LINE__)); + } } else { - PVR_DPF((PVR_DBG_ERROR, "*** %s : @ line %d HASH_Insert() failed!!", __FUNCTION__, __LINE__)); + PVR_DPF((PVR_DBG_ERROR, "*** %s : @ line %d Failed to alloc memory for psNewVmallocHashEntry!!", __FUNCTION__, __LINE__)); } } @@ -2144,6 +2212,7 @@ PVRSRVStatsIncrMemAllocStat(PVRSRV_MEM_ALLOC_TYPE eAllocType, /* Update the memory watermarks... */ switch (eAllocType) { +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: { INCREASE_STAT_VALUE(psProcessStats, PVRSRV_PROCESS_STAT_TYPE_KMALLOC, (IMG_UINT32)uiBytes); @@ -2157,7 +2226,11 @@ PVRSRVStatsIncrMemAllocStat(PVRSRV_MEM_ALLOC_TYPE eAllocType, psProcessStats->ui32StatAllocFlags |= (IMG_UINT32)(1 << (PVRSRV_PROCESS_STAT_TYPE_VMALLOC-PVRSRV_PROCESS_STAT_TYPE_KMALLOC)); } break; - +#else + case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: + case PVRSRV_MEM_ALLOC_TYPE_VMALLOC: + break; +#endif case PVRSRV_MEM_ALLOC_TYPE_ALLOC_PAGES_PT_UMA: { INCREASE_STAT_VALUE(psProcessStats, PVRSRV_PROCESS_STAT_TYPE_ALLOC_PAGES_PT_UMA, (IMG_UINT32)uiBytes); @@ -2227,10 +2300,67 @@ PVRSRVStatsIncrMemAllocStat(PVRSRV_MEM_ALLOC_TYPE eAllocType, } void +PVRSRVStatsDecrMemKAllocStat(size_t uiBytes, + IMG_PID decrPID) +{ +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) + PVRSRV_PROCESS_STATS* psProcessStats; + + /* Don't do anything if we are not initialised or we are shutting down! */ + if (!bProcessStatsInitialised) + { + return; + } + + _decrease_global_stat(PVRSRV_MEM_ALLOC_TYPE_KMALLOC, uiBytes); + + OSLockAcquire(g_psLinkedListLock); + + psProcessStats = _FindProcessStats(decrPID); + + if (psProcessStats != NULL) + { + /* Decrement the kmalloc memory stat... */ + DECREASE_STAT_VALUE(psProcessStats, PVRSRV_PROCESS_STAT_TYPE_KMALLOC, uiBytes); + } + + OSLockRelease(g_psLinkedListLock); +#endif +} + +static void +_StatsDecrMemVAllocStat(_PVR_STATS_VMALLOC_HASH_ENTRY *psVmallocHashEntry) +{ +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) + PVRSRV_PROCESS_STATS* psProcessStats; + + /* Don't do anything if we are not initialised or we are shutting down! */ + if (!bProcessStatsInitialised) + { + return; + } + + _decrease_global_stat(PVRSRV_MEM_ALLOC_TYPE_VMALLOC, psVmallocHashEntry->uiSizeInBytes); + + OSLockAcquire(g_psLinkedListLock); + + psProcessStats = _FindProcessStats(psVmallocHashEntry->uiPid); + + if (psProcessStats != NULL) + { + /* Decrement the kmalloc memory stat... */ + DECREASE_STAT_VALUE(psProcessStats, PVRSRV_PROCESS_STAT_TYPE_VMALLOC, psVmallocHashEntry->uiSizeInBytes); + } + + OSLockRelease(g_psLinkedListLock); +#endif +} + +void PVRSRVStatsDecrMemAllocStatAndUntrack(PVRSRV_MEM_ALLOC_TYPE eAllocType, IMG_UINT64 uiCpuVAddr) { - size_t uiBytes; + _PVR_STATS_VMALLOC_HASH_ENTRY *psVmallocHashEntry = NULL; if (!bProcessStatsInitialised || (gpsVmallocSizeHashTable == NULL) ) { @@ -2238,10 +2368,17 @@ PVRSRVStatsDecrMemAllocStatAndUntrack(PVRSRV_MEM_ALLOC_TYPE eAllocType, } OSLockAcquire(gpsVmallocSizeHashTableLock); - uiBytes = HASH_Remove(gpsVmallocSizeHashTable, uiCpuVAddr); + psVmallocHashEntry = (_PVR_STATS_VMALLOC_HASH_ENTRY *)HASH_Remove(gpsVmallocSizeHashTable, uiCpuVAddr); + if (psVmallocHashEntry) + { + _StatsDecrMemVAllocStat(psVmallocHashEntry); +#if defined(__linux__) + OSFreeMemNoStats(psVmallocHashEntry); +#else + OSFreeMem(psVmallocHashEntry); +#endif + } OSLockRelease(gpsVmallocSizeHashTableLock); - - PVRSRVStatsDecrMemAllocStat(eAllocType, uiBytes); } void @@ -2289,6 +2426,7 @@ PVRSRVStatsDecrMemAllocStat(PVRSRV_MEM_ALLOC_TYPE eAllocType, /* Update the memory watermarks... */ switch (eAllocType) { +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: { DECREASE_STAT_VALUE(psProcessStats, PVRSRV_PROCESS_STAT_TYPE_KMALLOC, (IMG_UINT32)uiBytes); @@ -2308,7 +2446,11 @@ PVRSRVStatsDecrMemAllocStat(PVRSRV_MEM_ALLOC_TYPE eAllocType, } } break; - +#else + case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: + case PVRSRV_MEM_ALLOC_TYPE_VMALLOC: + break; +#endif case PVRSRV_MEM_ALLOC_TYPE_ALLOC_PAGES_PT_UMA: { DECREASE_STAT_VALUE(psProcessStats, PVRSRV_PROCESS_STAT_TYPE_ALLOC_PAGES_PT_UMA, (IMG_UINT32)uiBytes); @@ -2641,10 +2783,18 @@ MemStatsPrintElements(void *pvFile, while (psRecord != NULL) { + IMG_BOOL bPrintStat = IMG_TRUE; + switch (psRecord->eAllocType) { +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: pfnOSStatsPrintf(pvFile, "KMALLOC "); break; case PVRSRV_MEM_ALLOC_TYPE_VMALLOC: pfnOSStatsPrintf(pvFile, "VMALLOC "); break; +#else + case PVRSRV_MEM_ALLOC_TYPE_KMALLOC: + case PVRSRV_MEM_ALLOC_TYPE_VMALLOC: + bPrintStat = IMG_FALSE; break; +#endif case PVRSRV_MEM_ALLOC_TYPE_ALLOC_PAGES_PT_LMA: pfnOSStatsPrintf(pvFile, "ALLOC_PAGES_PT_LMA "); break; case PVRSRV_MEM_ALLOC_TYPE_ALLOC_PAGES_PT_UMA: pfnOSStatsPrintf(pvFile, "ALLOC_PAGES_PT_UMA "); break; case PVRSRV_MEM_ALLOC_TYPE_IOREMAP_PT_LMA: pfnOSStatsPrintf(pvFile, "IOREMAP_PT_LMA "); break; @@ -2655,27 +2805,29 @@ MemStatsPrintElements(void *pvFile, default: pfnOSStatsPrintf(pvFile, "INVALID "); break; } - for (ui32ItemNumber = 0; ui32ItemNumber < ui32VAddrFields; ui32ItemNumber++) + if (bPrintStat) { - pfnOSStatsPrintf(pvFile, "%08x", *(((IMG_UINT32*) &psRecord->pvCpuVAddr) + ui32VAddrFields - ui32ItemNumber - 1)); - } - pfnOSStatsPrintf(pvFile, " "); + for (ui32ItemNumber = 0; ui32ItemNumber < ui32VAddrFields; ui32ItemNumber++) + { + pfnOSStatsPrintf(pvFile, "%08x", *(((IMG_UINT32*) &psRecord->pvCpuVAddr) + ui32VAddrFields - ui32ItemNumber - 1)); + } + pfnOSStatsPrintf(pvFile, " "); - for (ui32ItemNumber = 0; ui32ItemNumber < ui32PAddrFields; ui32ItemNumber++) - { - pfnOSStatsPrintf(pvFile, "%08x", *(((IMG_UINT32*) &psRecord->sCpuPAddr.uiAddr) + ui32PAddrFields - ui32ItemNumber - 1)); - } + for (ui32ItemNumber = 0; ui32ItemNumber < ui32PAddrFields; ui32ItemNumber++) + { + pfnOSStatsPrintf(pvFile, "%08x", *(((IMG_UINT32*) &psRecord->sCpuPAddr.uiAddr) + ui32PAddrFields - ui32ItemNumber - 1)); + } #if defined(PVRSRV_DEBUG_LINUX_MEMORY_STATS) && defined(DEBUG) - pfnOSStatsPrintf(pvFile, " %u", psRecord->uiBytes); + pfnOSStatsPrintf(pvFile, " %u", psRecord->uiBytes); - pfnOSStatsPrintf(pvFile, " %s", (IMG_CHAR*)psRecord->pvAllocdFromFile); + pfnOSStatsPrintf(pvFile, " %s", (IMG_CHAR*)psRecord->pvAllocdFromFile); - pfnOSStatsPrintf(pvFile, " %d\n", psRecord->ui32AllocdFromLine); + pfnOSStatsPrintf(pvFile, " %d\n", psRecord->ui32AllocdFromLine); #else - pfnOSStatsPrintf(pvFile, " %u\n", psRecord->uiBytes); + pfnOSStatsPrintf(pvFile, " %u\n", psRecord->uiBytes); #endif - + } /* Move to next record... */ psRecord = psRecord->psNext; } @@ -2818,10 +2970,12 @@ void GlobalStatsPrintElements(void *pvFile, if (pfnOSGetStatsPrintf != NULL) { +#if !defined(PVR_DISABLE_KMALLOC_MEMSTATS) pfnOSGetStatsPrintf(pvFile, "MemoryUsageKMalloc %10d\n", gsGlobalStats.ui32MemoryUsageKMalloc); pfnOSGetStatsPrintf(pvFile, "MemoryUsageKMallocMax %10d\n", gsGlobalStats.ui32MemoryUsageKMallocMax); pfnOSGetStatsPrintf(pvFile, "MemoryUsageVMalloc %10d\n", gsGlobalStats.ui32MemoryUsageVMalloc); pfnOSGetStatsPrintf(pvFile, "MemoryUsageVMallocMax %10d\n", gsGlobalStats.ui32MemoryUsageVMallocMax); +#endif pfnOSGetStatsPrintf(pvFile, "MemoryUsageAllocPTMemoryUMA %10d\n", gsGlobalStats.ui32MemoryUsageAllocPTMemoryUMA); pfnOSGetStatsPrintf(pvFile, "MemoryUsageAllocPTMemoryUMAMax %10d\n", gsGlobalStats.ui32MemoryUsageAllocPTMemoryUMAMax); pfnOSGetStatsPrintf(pvFile, "MemoryUsageVMapPTUMA %10d\n", gsGlobalStats.ui32MemoryUsageVMapPTUMA); diff --git a/drivers/staging/imgtec/rogue/process_stats.h b/drivers/staging/imgtec/rogue/process_stats.h index 16a2a6dc8697..fce4ff2bf31f 100644 --- a/drivers/staging/imgtec/rogue/process_stats.h +++ b/drivers/staging/imgtec/rogue/process_stats.h @@ -122,6 +122,9 @@ void PVRSRVStatsIncrMemAllocStatAndTrack(PVRSRV_MEM_ALLOC_TYPE eAllocType, void PVRSRVStatsDecrMemAllocStat(PVRSRV_MEM_ALLOC_TYPE eAllocType, size_t uiBytes); +void PVRSRVStatsDecrMemKAllocStat(size_t uiBytes, + IMG_PID decrPID); + /* * Decrease the memory stat for eAllocType. Takes the allocation size value from the * hash table with uiCpuVAddr as key. Pair with PVRSRVStatsIncrMemAllocStatAndTrack(). diff --git a/drivers/staging/imgtec/rogue/pvr_dvfs.h b/drivers/staging/imgtec/rogue/pvr_dvfs.h index c286b836e1ed..a2dd2e10c495 100644 --- a/drivers/staging/imgtec/rogue/pvr_dvfs.h +++ b/drivers/staging/imgtec/rogue/pvr_dvfs.h @@ -156,10 +156,6 @@ typedef struct _IMG_DVFS_ IMG_DVFS_GOVERNOR sDVFSGovernor; IMG_DVFS_DEVICE_CFG sDVFSDeviceCfg; IMG_DVFS_GOVERNOR_CFG sDVFSGovernorCfg; -#if defined(PVR_POWER_ACTOR) - IMG_DVFS_PA sDVFSPA; - IMG_DVFS_PA_CFG sDVFSPACfg; -#endif } PVRSRV_DVFS; #endif/* (__linux__) */ diff --git a/drivers/staging/imgtec/rogue/rgxccb.c b/drivers/staging/imgtec/rogue/rgxccb.c index 334f8ac9a745..b4ee50118a47 100644 --- a/drivers/staging/imgtec/rogue/rgxccb.c +++ b/drivers/staging/imgtec/rogue/rgxccb.c @@ -111,6 +111,26 @@ IMG_PCHAR aszCCBRequestors[][3] = static_assert((sizeof(aszCCBRequestors)/(3*sizeof(aszCCBRequestors[0][0]))) == (REQ_TYPE_FIXED_COUNT + DPX_MAX_RAY_CONTEXTS + 1), "Mismatch between aszCCBRequestors table and DPX_MAX_RAY_CONTEXTS"); +IMG_EXPORT PVRSRV_ERROR RGXCCBPDumpDrainCCB(RGX_CLIENT_CCB *psClientCCB, + IMG_BOOL bPDumpContinuous) +{ + IMG_UINT32 ui32PDumpFlags; + + ui32PDumpFlags = bPDumpContinuous ? PDUMP_FLAGS_CONTINUOUS : 0; + + PDUMPCOMMENTWITHFLAGS(ui32PDumpFlags, + "cCCB(%s@%p): Draining CCB rgxfw_roff == woff (%d)", + psClientCCB->szName, + psClientCCB, + psClientCCB->ui32LastPDumpWriteOffset); + + return DevmemPDumpDevmemPol32(psClientCCB->psClientCCBCtrlMemDesc, + offsetof(RGXFWIF_CCCB_CTL, ui32ReadOffset), + psClientCCB->ui32LastPDumpWriteOffset, + 0xffffffff, + PDUMP_POLL_OPERATOR_EQUAL, + ui32PDumpFlags); +} static PVRSRV_ERROR _RGXCCBPDumpTransition(void **pvData, IMG_BOOL bInto, IMG_BOOL bContinuous) { @@ -151,18 +171,9 @@ static PVRSRV_ERROR _RGXCCBPDumpTransition(void **pvData, IMG_BOOL bInto, IMG_BO thus we have no way of knowing if we can skip drain and the sync prim dump or not. */ - PDUMPCOMMENTWITHFLAGS(ui32PDumpFlags, - "cCCB(%s@%p): Draining rgxfw_roff == woff (%d)", - psClientCCB->szName, - psClientCCB, - psClientCCB->ui32LastPDumpWriteOffset); - - eError = DevmemPDumpDevmemPol32(psClientCCB->psClientCCBCtrlMemDesc, - offsetof(RGXFWIF_CCCB_CTL, ui32ReadOffset), - psClientCCB->ui32LastPDumpWriteOffset, - 0xffffffff, - PDUMP_POLL_OPERATOR_EQUAL, - ui32PDumpFlags); + + eError = RGXCCBPDumpDrainCCB(psClientCCB, bContinuous); + if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_WARNING, "_RGXCCBPDumpTransition: problem pdumping POL for cCCBCtl (%d)", eError)); diff --git a/drivers/staging/imgtec/rogue/rgxccb.h b/drivers/staging/imgtec/rogue/rgxccb.h index fa5d8fd21a2b..8fdd31eafd36 100644 --- a/drivers/staging/imgtec/rogue/rgxccb.h +++ b/drivers/staging/imgtec/rogue/rgxccb.h @@ -111,6 +111,8 @@ typedef struct _RGX_CCB_CMD_HELPER_DATA_ { #define PADDING_COMMAND_SIZE (sizeof(RGXFWIF_CCB_CMD_HEADER)) +PVRSRV_ERROR RGXCCBPDumpDrainCCB(RGX_CLIENT_CCB *psClientCCB, + IMG_UINT32 ui32PDumpContinuous); #define RGX_CCB_REQUESTORS(TYPE) \ /* for debugging purposes */ TYPE(UNDEF) \ diff --git a/drivers/staging/imgtec/rogue/rgxcompute.c b/drivers/staging/imgtec/rogue/rgxcompute.c index 355f4b5a3ad6..bbdef62b00a1 100644 --- a/drivers/staging/imgtec/rogue/rgxcompute.c +++ b/drivers/staging/imgtec/rogue/rgxcompute.c @@ -210,7 +210,7 @@ PVRSRV_ERROR PVRSRVRGXDestroyComputeContextKM(RGX_SERVER_COMPUTE_CONTEXT *psComp /* Check if the FW has finished with this resource ... */ eError = RGXFWRequestCommonContextCleanUp(psComputeContext->psDeviceNode, - FWCommonContextGetFWAddress(psComputeContext->psServerCommonContext), + psComputeContext->psServerCommonContext, psComputeContext->psSync, RGXFWIF_DM_CDM); diff --git a/drivers/staging/imgtec/rogue/rgxdevice.h b/drivers/staging/imgtec/rogue/rgxdevice.h index 96fc1cdca384..13de5278ea64 100755 --- a/drivers/staging/imgtec/rogue/rgxdevice.h +++ b/drivers/staging/imgtec/rogue/rgxdevice.h @@ -112,10 +112,6 @@ typedef struct _RGXFWIF_GPU_UTIL_STATS_ IMG_UINT64 ui64GpuStatBlocked; /* GPU blocked statistic */ IMG_UINT64 ui64GpuStatIdle; /* GPU idle statistic */ IMG_UINT64 ui64GpuStatCumulative; /* Sum of active/blocked/idle stats */ - -#if defined(PVR_POWER_ACTOR) && defined (PVR_DVFS) - IMG_UINT32 ui32GpuEnergy; /* GPU dynamic energy */ -#endif } RGXFWIF_GPU_UTIL_STATS; diff --git a/drivers/staging/imgtec/rogue/rgxfwutils.c b/drivers/staging/imgtec/rogue/rgxfwutils.c index 0ead79d22e38..6c5095da72ce 100644 --- a/drivers/staging/imgtec/rogue/rgxfwutils.c +++ b/drivers/staging/imgtec/rogue/rgxfwutils.c @@ -3040,8 +3040,15 @@ PVRSRV_ERROR RGXScheduleCommand(PVRSRV_RGXDEV_INFO *psDevInfo, if ((eKCCBType == RGXFWIF_DM_3D) || (eKCCBType == RGXFWIF_DM_2D) || (eKCCBType == RGXFWIF_DM_CDM)) { /* This handles the no operation case */ - OSCPUOperation(psData->uiCacheOp); - psData->uiCacheOp = PVRSRV_CACHE_OP_NONE; + if (OSCPUOperation(psData->uiCacheOp) == PVRSRV_OK) + { + psData->uiCacheOp = PVRSRV_CACHE_OP_NONE; + } + else + { + PVR_DPF((PVR_DBG_ERROR, "RGXScheduleCommand: OSCPUOperation failed")); + PVR_ASSERT(0); + } } #if defined (SUPPORT_VALIDATION) @@ -3535,14 +3542,22 @@ fail_command: RGXRequestCommonContextCleanUp */ PVRSRV_ERROR RGXFWRequestCommonContextCleanUp(PVRSRV_DEVICE_NODE *psDeviceNode, - PRGXFWIF_FWCOMMONCONTEXT psFWCommonContextFWAddr, + RGX_SERVER_COMMON_CONTEXT *psServerCommonContext, PVRSRV_CLIENT_SYNC_PRIM *psSyncPrim, RGXFWIF_DM eDM) { RGXFWIF_KCCB_CMD sRCCleanUpCmd = {0}; PVRSRV_ERROR eError; + PRGXFWIF_FWCOMMONCONTEXT psFWCommonContextFWAddr; + + psFWCommonContextFWAddr = FWCommonContextGetFWAddress(psServerCommonContext); + + PDUMPCOMMENT("Common ctx cleanup Request DM%d [context = 0x%08x]", + eDM, psFWCommonContextFWAddr.ui32Addr); + PDUMPCOMMENT("Wait for CCB to be empty before common ctx cleanup"); + + RGXCCBPDumpDrainCCB(FWCommonContextGetClientCCB(psServerCommonContext), IMG_FALSE); - PDUMPCOMMENT("Common ctx cleanup Request DM%d [context = 0x%08x]", eDM, psFWCommonContextFWAddr.ui32Addr); /* Setup our command data, the cleanup call will fill in the rest */ sRCCleanUpCmd.uCmdData.sCleanupData.uCleanupData.psContext = psFWCommonContextFWAddr; diff --git a/drivers/staging/imgtec/rogue/rgxfwutils.h b/drivers/staging/imgtec/rogue/rgxfwutils.h index e9d916cb8431..7b167d3c59cb 100644 --- a/drivers/staging/imgtec/rogue/rgxfwutils.h +++ b/drivers/staging/imgtec/rogue/rgxfwutils.h @@ -576,7 +576,7 @@ PVRSRV_ERROR RGXWaitForFWOp(PVRSRV_RGXDEV_INFO *psDevInfo, ******************************************************************************/ PVRSRV_ERROR RGXFWRequestCommonContextCleanUp(PVRSRV_DEVICE_NODE *psDeviceNode, - PRGXFWIF_FWCOMMONCONTEXT psFWContext, + RGX_SERVER_COMMON_CONTEXT *psServerCommonContext, PVRSRV_CLIENT_SYNC_PRIM *psSyncPrim, RGXFWIF_DM eDM); diff --git a/drivers/staging/imgtec/rogue/rgxinit.c b/drivers/staging/imgtec/rogue/rgxinit.c index e4e26c31b0e0..af4fef7225f7 100755 --- a/drivers/staging/imgtec/rogue/rgxinit.c +++ b/drivers/staging/imgtec/rogue/rgxinit.c @@ -391,11 +391,6 @@ static PVRSRV_ERROR RGXGetGpuUtilStats(PVRSRV_DEVICE_NODE *psDeviceNode, i++; } -#if defined(PVR_POWER_ACTOR) && defined(PVR_DVFS) - /* Power actor enabled */ - psReturnStats->ui32GpuEnergy = psDevInfo->psRGXFWIfTraceBuf->ui32PowMonEnergy; -#endif - OSLockRelease(psDevInfo->hGPUUtilLock); if (i == MAX_ITERATIONS) diff --git a/drivers/staging/imgtec/rogue/rgxkicksync.c b/drivers/staging/imgtec/rogue/rgxkicksync.c index f82b2a349bcc..f81cc9740916 100644 --- a/drivers/staging/imgtec/rogue/rgxkicksync.c +++ b/drivers/staging/imgtec/rogue/rgxkicksync.c @@ -145,7 +145,7 @@ PVRSRV_ERROR PVRSRVRGXDestroyKickSyncContextKM(RGX_SERVER_KICKSYNC_CONTEXT * psK /* Check if the FW has finished with this resource ... */ eError = RGXFWRequestCommonContextCleanUp(psKickSyncContext->psDeviceNode, - FWCommonContextGetFWAddress(psKickSyncContext->psServerCommonContext), + psKickSyncContext->psServerCommonContext, psKickSyncContext->psSync, RGXFWIF_DM_3D); diff --git a/drivers/staging/imgtec/rogue/rgxta3d.c b/drivers/staging/imgtec/rogue/rgxta3d.c index 064e3a5acd0b..573324189a5c 100644 --- a/drivers/staging/imgtec/rogue/rgxta3d.c +++ b/drivers/staging/imgtec/rogue/rgxta3d.c @@ -149,7 +149,7 @@ PVRSRV_ERROR _DestroyTAContext(RGX_SERVER_RC_TA_DATA *psTAData, /* Check if the FW has finished with this resource ... */ eError = RGXFWRequestCommonContextCleanUp(psDeviceNode, - FWCommonContextGetFWAddress(psTAData->psServerCommonContext), + psTAData->psServerCommonContext, psCleanupSync, RGXFWIF_DM_TA); if (eError == PVRSRV_ERROR_RETRY) @@ -199,7 +199,7 @@ PVRSRV_ERROR _Destroy3DContext(RGX_SERVER_RC_3D_DATA *ps3DData, /* Check if the FW has finished with this resource ... */ eError = RGXFWRequestCommonContextCleanUp(psDeviceNode, - FWCommonContextGetFWAddress(ps3DData->psServerCommonContext), + ps3DData->psServerCommonContext, psCleanupSync, RGXFWIF_DM_3D); if (eError == PVRSRV_ERROR_RETRY) diff --git a/drivers/staging/imgtec/rogue/rgxtransfer.c b/drivers/staging/imgtec/rogue/rgxtransfer.c index cb8c1f4db6be..72a1fdf86828 100644 --- a/drivers/staging/imgtec/rogue/rgxtransfer.c +++ b/drivers/staging/imgtec/rogue/rgxtransfer.c @@ -203,7 +203,7 @@ static PVRSRV_ERROR _Destroy2DTransferContext(RGX_SERVER_TQ_2D_DATA *ps2DData, /* Check if the FW has finished with this resource ... */ eError = RGXFWRequestCommonContextCleanUp(psDeviceNode, - FWCommonContextGetFWAddress(ps2DData->psServerCommonContext), + ps2DData->psServerCommonContext, psCleanupSync, RGXFWIF_DM_2D); if (eError == PVRSRV_ERROR_RETRY) @@ -231,7 +231,7 @@ static PVRSRV_ERROR _Destroy3DTransferContext(RGX_SERVER_TQ_3D_DATA *ps3DData, /* Check if the FW has finished with this resource ... */ eError = RGXFWRequestCommonContextCleanUp(psDeviceNode, - FWCommonContextGetFWAddress(ps3DData->psServerCommonContext), + ps3DData->psServerCommonContext, psCleanupSync, RGXFWIF_DM_3D); if (eError == PVRSRV_ERROR_RETRY) |