diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/pvr/buffer_manager.c | 7 | ||||
-rw-r--r-- | drivers/gpu/pvr/device.h | 4 | ||||
-rw-r--r-- | drivers/gpu/pvr/deviceclass.c | 4 | ||||
-rw-r--r-- | drivers/gpu/pvr/devicemem.c | 7 | ||||
-rw-r--r-- | drivers/gpu/pvr/omap4/sysconfig.h | 2 | ||||
-rw-r--r-- | drivers/gpu/pvr/omaplfb/omaplfb_linux.c | 14 | ||||
-rw-r--r-- | drivers/gpu/pvr/osfunc.c | 36 | ||||
-rw-r--r-- | drivers/gpu/pvr/pdump_common.c | 3 | ||||
-rw-r--r-- | drivers/gpu/pvr/perproc.c | 5 | ||||
-rw-r--r-- | drivers/gpu/pvr/pvrversion.h | 4 | ||||
-rw-r--r-- | drivers/gpu/pvr/servicesext.h | 8 | ||||
-rw-r--r-- | drivers/gpu/pvr/sgx/bridged_sgx_bridge.c | 3 | ||||
-rw-r--r-- | drivers/gpu/pvr/sgx/mmu.c | 5 | ||||
-rw-r--r-- | drivers/gpu/pvr/sgx/mmu.h | 2 | ||||
-rw-r--r-- | drivers/gpu/pvr/sgx/sgxinit.c | 12 | ||||
-rw-r--r-- | drivers/gpu/pvr/sgxerrata.h | 3 | ||||
-rw-r--r-- | drivers/gpu/pvr/sgxfeaturedefs.h | 2 |
17 files changed, 95 insertions, 26 deletions
diff --git a/drivers/gpu/pvr/buffer_manager.c b/drivers/gpu/pvr/buffer_manager.c index af87626..7b3cd7a 100644 --- a/drivers/gpu/pvr/buffer_manager.c +++ b/drivers/gpu/pvr/buffer_manager.c @@ -526,6 +526,7 @@ static IMG_VOID FreeBuf (BM_BUF *pBuf, IMG_UINT32 ui32Flags, IMG_BOOL bFromAllocator) { BM_MAPPING *pMapping; + PVRSRV_DEVICE_NODE *psDeviceNode; PVR_DPF ((PVR_DBG_MESSAGE, "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) pMapping = pBuf->pMapping; + psDeviceNode = pMapping->pBMHeap->pBMContext->psDeviceNode; + if (psDeviceNode->pfnCacheInvalidate) + { + psDeviceNode->pfnCacheInvalidate(psDeviceNode); + } + if(ui32Flags & PVRSRV_MEM_USER_SUPPLIED_DEVVADDR) { diff --git a/drivers/gpu/pvr/device.h b/drivers/gpu/pvr/device.h index 86f37c6..9df2c73 100644 --- a/drivers/gpu/pvr/device.h +++ b/drivers/gpu/pvr/device.h @@ -246,7 +246,9 @@ typedef struct _PVRSRV_DEVICE_NODE_ IMG_VOID (*pfnDeviceCommandComplete)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode); IMG_BOOL bReProcessDeviceCommandComplete; - + + IMG_VOID (*pfnCacheInvalidate)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode); + DEVICE_MEMORY_INFO sDevMemoryInfo; diff --git a/drivers/gpu/pvr/deviceclass.c b/drivers/gpu/pvr/deviceclass.c index b64bf20..7b565dd 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, *psDCInfo->psFuncTable = *psFuncTable; - if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, + if(OSAllocMem( PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(PVRSRV_DEVICE_NODE), (IMG_VOID **)&psDeviceNode, IMG_NULL, "Device Node") != PVRSRV_OK) @@ -420,7 +420,7 @@ PVRSRV_ERROR PVRSRVRegisterBCDeviceKM (PVRSRV_BC_SRV2BUFFER_KMJTABLE *psFuncTabl *psBCInfo->psFuncTable = *psFuncTable; - if(OSAllocMem( PVRSRV_OS_PAGEABLE_HEAP, + if(OSAllocMem( PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(PVRSRV_DEVICE_NODE), (IMG_VOID **)&psDeviceNode, IMG_NULL, "Device Node") != PVRSRV_OK) diff --git a/drivers/gpu/pvr/devicemem.c b/drivers/gpu/pvr/devicemem.c index b787bd2..85d6661 100644 --- a/drivers/gpu/pvr/devicemem.c +++ b/drivers/gpu/pvr/devicemem.c @@ -1388,9 +1388,6 @@ static PVRSRV_ERROR UnmapDeviceClassMemoryCallBack(IMG_PVOID pvParam, #endif (psDCMapInfo->psDeviceClassBuffer->ui32MemMapRefCount)--; - PVR_TRACE(("decrementing (0x%p) psDCMapInfo->psDeviceClassBuffer->ui32MemMapRefCount... == %d", - psDCMapInfo->psDeviceClassBuffer, - psDCMapInfo->psDeviceClassBuffer->ui32MemMapRefCount)); OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(PVRSRV_DC_MAPINFO), psDCMapInfo, IMG_NULL); @@ -1598,10 +1595,6 @@ PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA * &UnmapDeviceClassMemoryCallBack); (psDeviceClassBuffer->ui32MemMapRefCount)++; - PVR_TRACE(("incrementing (0x%p) psDeviceClassBuffer->ui32MemMapRefCount... == %d", - psDeviceClassBuffer, - psDeviceClassBuffer->ui32MemMapRefCount)); - psMemInfo->ui32RefCount++; psMemInfo->memType = PVRSRV_MEMTYPE_DEVICECLASS; diff --git a/drivers/gpu/pvr/omap4/sysconfig.h b/drivers/gpu/pvr/omap4/sysconfig.h index eea2e73..3494493 100644 --- a/drivers/gpu/pvr/omap4/sysconfig.h +++ b/drivers/gpu/pvr/omap4/sysconfig.h @@ -27,8 +27,6 @@ #if !defined(__SOCCONFIG_H__) #define __SOCCONFIG_H__ -#include "syscommon.h" - #define VS_PRODUCT_NAME "OMAP4" #if defined(SGX540) && (SGX_CORE_REV == 120) diff --git a/drivers/gpu/pvr/omaplfb/omaplfb_linux.c b/drivers/gpu/pvr/omaplfb/omaplfb_linux.c index 13ebea8..d4208cb 100644 --- a/drivers/gpu/pvr/omaplfb/omaplfb_linux.c +++ b/drivers/gpu/pvr/omaplfb/omaplfb_linux.c @@ -274,9 +274,19 @@ OMAPLFB_UPDATE_MODE OMAPLFBGetUpdateMode(OMAPLFB_DEVINFO *psDevInfo) enum omap_dss_update_mode eMode; - if (psDSSDrv == NULL || psDSSDrv->get_update_mode == NULL) + if (psDSSDrv == NULL) { - DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": %s: Device %u: Can't get update mode\n", __FUNCTION__, psDevInfo->uiFBDevID)); + DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": %s: Device %u: No DSS device\n", __FUNCTION__, psDevInfo->uiFBDevID)); + return OMAPLFB_UPDATE_MODE_UNDEFINED; + } + + if (psDSSDrv->get_update_mode == NULL) + { + if (strcmp(psDSSDev->name, "hdmi") == 0) + { + return OMAPLFB_UPDATE_MODE_AUTO; + } + DEBUG_PRINTK((KERN_INFO DRIVER_PREFIX ": %s: Device %u: No get_update_mode function\n", __FUNCTION__, psDevInfo->uiFBDevID)); return OMAPLFB_UPDATE_MODE_UNDEFINED; } diff --git a/drivers/gpu/pvr/osfunc.c b/drivers/gpu/pvr/osfunc.c index da6c3cd..f3e02ed 100644 --- a/drivers/gpu/pvr/osfunc.c +++ b/drivers/gpu/pvr/osfunc.c @@ -2959,6 +2959,29 @@ IMG_VOID OSFlushCPUCacheKM(IMG_VOID) #endif } +static inline size_t pvr_dmac_range_len(const void *pvStart, const void *pvEnd) +{ + return (size_t)((char *)pvEnd - (char *)pvStart); +} + +static void pvr_dmac_inv_range(const void *pvStart, const void *pvEnd) +{ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) + dmac_inv_range(pvStart, pvEnd); +#else + dmac_map_area(pvStart, pvr_dmac_range_len(pvStart, pvEnd), DMA_FROM_DEVICE); +#endif +} + +static void pvr_dmac_clean_range(const void *pvStart, const void *pvEnd) +{ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) + dmac_clean_range(pvStart, pvEnd); +#else + dmac_map_area(pvStart, pvr_dmac_range_len(pvStart, pvEnd), DMA_TO_DEVICE); +#endif +} + IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length) @@ -2972,7 +2995,7 @@ IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, IMG_UINT32 ui32Length) { return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, - dmac_clean_range, outer_clean_range); + pvr_dmac_clean_range, outer_clean_range); } IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, @@ -2980,7 +3003,7 @@ IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, IMG_UINT32 ui32Length) { return CheckExecuteCacheOp(hOSMemHandle, pvRangeAddrStart, ui32Length, - dmac_inv_range, outer_inv_range); + pvr_dmac_inv_range, outer_inv_range); } #else @@ -3002,7 +3025,8 @@ IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length) { - dma_cache_wback_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); + if (ui32Length) + dma_cache_wback_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); return IMG_TRUE; } @@ -3010,7 +3034,8 @@ IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length) { - dma_cache_wback((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); + if (ui32Length) + dma_cache_wback((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); return IMG_TRUE; } @@ -3018,7 +3043,8 @@ IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, IMG_VOID *pvRangeAddrStart, IMG_UINT32 ui32Length) { - dma_cache_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); + if (ui32Length) + dma_cache_inv((IMG_UINTPTR_T)pvRangeAddrStart, ui32Length); return IMG_TRUE; } diff --git a/drivers/gpu/pvr/pdump_common.c b/drivers/gpu/pvr/pdump_common.c index 2c4c440..45845b6cc 100644 --- a/drivers/gpu/pvr/pdump_common.c +++ b/drivers/gpu/pvr/pdump_common.c @@ -73,6 +73,8 @@ IMG_BOOL _PDumpIsPersistent(IMG_VOID) } #if defined(SUPPORT_PDUMP_MULTI_PROCESS) + + static INLINE IMG_BOOL _PDumpIsProcessActive(IMG_VOID) { @@ -84,6 +86,7 @@ IMG_BOOL _PDumpIsProcessActive(IMG_VOID) } return psPerProc->bPDumpActive; } + #endif #if defined(PDUMP_DEBUG_OUTFILES) diff --git a/drivers/gpu/pvr/perproc.c b/drivers/gpu/pvr/perproc.c index 1753388..eb73166 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 IMG_HANDLE hBlockAlloc; PVRSRV_ERROR eError = PVRSRV_OK; - PVR_ASSERT(psHashTab != IMG_NULL); + if (psHashTab == IMG_NULL) + { + return PVRSRV_ERROR_INIT_FAILURE; + } psPerProc = (PVRSRV_PER_PROCESS_DATA *)HASH_Retrieve(psHashTab, (IMG_UINTPTR_T)ui32PID); diff --git a/drivers/gpu/pvr/pvrversion.h b/drivers/gpu/pvr/pvrversion.h index 4b59256..8854e74 100644 --- a/drivers/gpu/pvr/pvrversion.h +++ b/drivers/gpu/pvr/pvrversion.h @@ -30,8 +30,8 @@ #define PVRVERSION_MAJ 1 #define PVRVERSION_MIN 7 #define PVRVERSION_BRANCH 17 -#define PVRVERSION_BUILD 4142 -#define PVRVERSION_STRING "1.7.17.4142" +#define PVRVERSION_BUILD 4474 +#define PVRVERSION_STRING "1.7.17.4474" #define PVRVERSION_FILE "eurasiacon.pj" #endif diff --git a/drivers/gpu/pvr/servicesext.h b/drivers/gpu/pvr/servicesext.h index 5b1b6b7..fdd63cb 100644 --- a/drivers/gpu/pvr/servicesext.h +++ b/drivers/gpu/pvr/servicesext.h @@ -587,7 +587,13 @@ typedef enum _PVRSRV_PIXEL_FORMAT_ { PVRSRV_PIXEL_FORMAT_C1_4KYUV420_2P_VU = 218, PVRSRV_PIXEL_FORMAT_P208 = 219, PVRSRV_PIXEL_FORMAT_A8P8 = 220, - + + PVRSRV_PIXEL_FORMAT_A4 = 221, + PVRSRV_PIXEL_FORMAT_AYUV8888 = 222, + PVRSRV_PIXEL_FORMAT_RAW256 = 223, + PVRSRV_PIXEL_FORMAT_RAW512 = 224, + PVRSRV_PIXEL_FORMAT_RAW1024 = 225, + PVRSRV_PIXEL_FORMAT_FORCE_I32 = 0x7fffffff } PVRSRV_PIXEL_FORMAT; diff --git a/drivers/gpu/pvr/sgx/bridged_sgx_bridge.c b/drivers/gpu/pvr/sgx/bridged_sgx_bridge.c index 25ceb62..c804fbc 100644 --- a/drivers/gpu/pvr/sgx/bridged_sgx_bridge.c +++ b/drivers/gpu/pvr/sgx/bridged_sgx_bridge.c @@ -49,6 +49,7 @@ #include "bridged_pvr_bridge.h" #include "bridged_sgx_bridge.h" #include "sgxutils.h" +#include "buffer_manager.h" #include "pdump_km.h" static IMG_INT @@ -3266,7 +3267,7 @@ SGXPDump3DSignatureRegistersBW(IMG_UINT32 ui32BridgeID, PVR_ASSERT(psDeviceNode->pfnMMUGetContextID != IMG_NULL) - ui32MMUContextID = psDeviceNode->pfnMMUGetContextID(hDevMemContextInt); + ui32MMUContextID = psDeviceNode->pfnMMUGetContextID((IMG_HANDLE)psDeviceNode->sDevMemoryInfo.pBMKernelContext); PDumpSignatureBuffer(&psDeviceNode->sDevId, "out.tasig", "TA", 0, diff --git a/drivers/gpu/pvr/sgx/mmu.c b/drivers/gpu/pvr/sgx/mmu.c index 5a087cd..3524145 100644 --- a/drivers/gpu/pvr/sgx/mmu.c +++ b/drivers/gpu/pvr/sgx/mmu.c @@ -79,6 +79,8 @@ typedef struct _MMU_PT_INFO_ IMG_VOID *hPTPageOSMemHandle; IMG_CPU_VIRTADDR PTPageCpuVAddr; + + IMG_UINT32 ui32ValidPTECount; } MMU_PT_INFO; @@ -2167,7 +2169,8 @@ MMU_UnmapPagesAndFreePTs (MMU_HEAP *psMMUHeap, - if (ppsPTInfoList[0] && ppsPTInfoList[0]->ui32ValidPTECount == 0) + if (ppsPTInfoList[0] && (ppsPTInfoList[0]->ui32ValidPTECount == 0) + ) { #if defined(FIX_HW_BRN_31620) if (BRN31620FreePageTable(psMMUHeap, ui32PDIndex) == IMG_TRUE) diff --git a/drivers/gpu/pvr/sgx/mmu.h b/drivers/gpu/pvr/sgx/mmu.h index d224f64..59b24c4 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 IMG_VOID MMU_GetPDPhysAddr(MMU_CONTEXT *pMMUContext, IMG_DEV_PHYADDR *psDevPAddr); #endif + + #if defined(PDUMP) IMG_UINT32 MMU_GetPDumpContextID(IMG_HANDLE hDevMemContext); #endif diff --git a/drivers/gpu/pvr/sgx/sgxinit.c b/drivers/gpu/pvr/sgx/sgxinit.c index f4d37fb..dc7bfe4 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, } #endif +static IMG_VOID SGXCacheInvalidate(PVRSRV_DEVICE_NODE *psDeviceNode) +{ + PVRSRV_SGXDEV_INFO *psDevInfo = psDeviceNode->pvDevice; + + #if defined(SGX_FEATURE_MP) + psDevInfo->ui32CacheControl |= SGXMKIF_CC_INVAL_BIF_SL; + #else + PVR_UNREFERENCED_PARAMETER(psDevInfo); + #endif +} PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode) { @@ -1498,6 +1508,8 @@ PVRSRV_ERROR SGXRegisterDevice (PVRSRV_DEVICE_NODE *psDeviceNode) psDeviceNode->pfnDeviceCommandComplete = &SGXCommandComplete; + psDeviceNode->pfnCacheInvalidate = SGXCacheInvalidate; + psDevMemoryInfo = &psDeviceNode->sDevMemoryInfo; diff --git a/drivers/gpu/pvr/sgxerrata.h b/drivers/gpu/pvr/sgxerrata.h index d7970ab..89a9cb1 100644 --- a/drivers/gpu/pvr/sgxerrata.h +++ b/drivers/gpu/pvr/sgxerrata.h @@ -363,6 +363,8 @@ #if SGX_CORE_REV == 216 #define FIX_HW_BRN_32044 #else + #if SGX_CORE_REV == 302 + #else #if SGX_CORE_REV == SGX_CORE_REV_HEAD #else @@ -379,6 +381,7 @@ #endif #endif #endif + #endif #define SGX_CORE_DEFINED #endif diff --git a/drivers/gpu/pvr/sgxfeaturedefs.h b/drivers/gpu/pvr/sgxfeaturedefs.h index 341c864..7d5c690 100644 --- a/drivers/gpu/pvr/sgxfeaturedefs.h +++ b/drivers/gpu/pvr/sgxfeaturedefs.h @@ -85,7 +85,7 @@ #define SGX_FEATURE_MASTER_VDM_CONTEXT_SWITCH #endif #define SGX_FEATURE_SLAVE_VDM_CONTEXT_SWITCH - #define SGX_FEATURE_ISP_CONTEXT_SWITCH_REV_3 + #define SGX_FEATURE_SW_ISP_CONTEXT_SWITCH #endif #else #if defined(SGX544) |