diff options
author | Imagination Technologies Ltd <gpl-support@imgtec.com> | 2011-06-29 18:40:33 +0100 |
---|---|---|
committer | Rebecca Schultz Zavin <rebecca@android.com> | 2011-07-11 17:03:15 -0700 |
commit | af50f0bd0d46b8bf131849d34306f62090d8b9f9 (patch) | |
tree | 845a365ca2bf12771b2e8080a545b4165181d87f /drivers | |
parent | 6d3f70d2cd5c4739b0cea3a439507721079ecbab (diff) | |
download | kernel_samsung_tuna-af50f0bd0d46b8bf131849d34306f62090d8b9f9.zip kernel_samsung_tuna-af50f0bd0d46b8bf131849d34306f62090d8b9f9.tar.gz kernel_samsung_tuna-af50f0bd0d46b8bf131849d34306f62090d8b9f9.tar.bz2 |
gpu: pvr: Update to DDK 1.8.18.737
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/pvr/buffer_manager.c | 6 | ||||
-rw-r--r-- | drivers/gpu/pvr/mem_debug.c | 5 | ||||
-rw-r--r-- | drivers/gpu/pvr/mm.c | 118 | ||||
-rw-r--r-- | drivers/gpu/pvr/mm.h | 9 | ||||
-rw-r--r-- | drivers/gpu/pvr/omap4/sysconfig.c | 20 | ||||
-rw-r--r-- | drivers/gpu/pvr/omap4/sysconfig.h | 21 | ||||
-rw-r--r-- | drivers/gpu/pvr/omap4/sysutils.c | 1 | ||||
-rw-r--r-- | drivers/gpu/pvr/osfunc.c | 19 | ||||
-rw-r--r-- | drivers/gpu/pvr/pvrversion.h | 4 | ||||
-rw-r--r-- | drivers/gpu/pvr/services.h | 1 | ||||
-rw-r--r-- | drivers/gpu/pvr/syscommon.h | 4 |
11 files changed, 182 insertions, 26 deletions
diff --git a/drivers/gpu/pvr/buffer_manager.c b/drivers/gpu/pvr/buffer_manager.c index 0651a69..24f233e 100644 --- a/drivers/gpu/pvr/buffer_manager.c +++ b/drivers/gpu/pvr/buffer_manager.c @@ -2096,6 +2096,12 @@ BM_ImportMemory (IMG_VOID *pH, IMG_UINT32 ui32Attribs = pBMHeap->ui32Attribs | PVRSRV_MEM_XPROC; IMG_BOOL bBadBackingStoreType; + + if(uFlags & PVRSRV_MEM_ION) + { + ui32Attribs |= PVRSRV_MEM_ION; + } + bBadBackingStoreType = IMG_TRUE; if ((ui32Attribs & PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG) != 0) diff --git a/drivers/gpu/pvr/mem_debug.c b/drivers/gpu/pvr/mem_debug.c index e721fb3..b9cc780 100644 --- a/drivers/gpu/pvr/mem_debug.c +++ b/drivers/gpu/pvr/mem_debug.c @@ -41,8 +41,6 @@ extern "C" - - @@ -187,7 +185,6 @@ extern "C" return eError; } - OSMemSet((IMG_CHAR *)(*ppvCpuVAddr) + TEST_BUFFER_PADDING_STATUS, 0xBB, ui32Size); OSMemSet((IMG_CHAR *)(*ppvCpuVAddr) + ui32Size + TEST_BUFFER_PADDING_STATUS, 0xB2, TEST_BUFFER_PADDING_AFTER); @@ -247,4 +244,4 @@ extern "C" #endif -#endif +#endif diff --git a/drivers/gpu/pvr/mm.c b/drivers/gpu/pvr/mm.c index 3b59aec..1a08bf6 100644 --- a/drivers/gpu/pvr/mm.c +++ b/drivers/gpu/pvr/mm.c @@ -1077,6 +1077,102 @@ FreeAllocPagesLinuxMemArea(LinuxMemArea *psLinuxMemArea) } +LinuxMemArea * +NewIONLinuxMemArea(IMG_UINT32 ui32Bytes, IMG_UINT32 ui32AreaFlags) +{ + LinuxMemArea *psLinuxMemArea; + +#if 0 + psLinuxMemArea = LinuxMemAreaStructAlloc(); + if(!psLinuxMemArea) + { + goto failed_area_alloc; + } + + + + + + + + + + +#if 0 && defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) + + DebugMemAllocRecordAdd(DEBUG_MEM_ALLOC_TYPE_ION, + pvPageList, + 0, + 0, + NULL, + PAGE_ALIGN(ui32Bytes), + "unknown", + 0 + ); +#endif + + psLinuxMemArea->eAreaType = LINUX_MEM_AREA_ION; + psLinuxMemArea->uData.sPageList.pvPageList = pvPageList; + psLinuxMemArea->uData.sPageList.hBlockPageList = hBlockPageList; + psLinuxMemArea->ui32ByteSize = ui32Bytes; + psLinuxMemArea->ui32AreaFlags = ui32AreaFlags; + INIT_LIST_HEAD(&psLinuxMemArea->sMMapOffsetStructList); + + + if(ui32AreaFlags & (PVRSRV_HAP_WRITECOMBINE | PVRSRV_HAP_UNCACHED)) + { + psLinuxMemArea->bNeedsCacheInvalidate = IMG_TRUE; + } + +#if 0 && defined(DEBUG_LINUX_MEM_AREAS) + + DebugLinuxMemAreaRecordAdd(psLinuxMemArea, ui32AreaFlags); +#endif + + return psLinuxMemArea; + +failed_area_alloc: + PVR_DPF((PVR_DBG_ERROR, "%s: failed", __FUNCTION__)); + + return NULL; +#endif + + psLinuxMemArea = NewAllocPagesLinuxMemArea(ui32Bytes, ui32AreaFlags); + if(!psLinuxMemArea) + return NULL; + + psLinuxMemArea->eAreaType = LINUX_MEM_AREA_ION; + return psLinuxMemArea; +} + + +IMG_VOID +FreeIONLinuxMemArea(LinuxMemArea *psLinuxMemArea) +{ + PVR_ASSERT(psLinuxMemArea); + PVR_ASSERT(psLinuxMemArea->eAreaType == LINUX_MEM_AREA_ION); + +#if 0 +#if 0 && defined(DEBUG_LINUX_MEM_AREAS) + + DebugLinuxMemAreaRecordRemove(psLinuxMemArea); +#endif + + + +#if 0 && defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) + + DebugMemAllocRecordRemove(DEBUG_MEM_ALLOC_TYPE_ALLOC_PAGES, pvPageList, __FILE__, __LINE__); +#endif + + LinuxMemAreaStructFree(psLinuxMemArea); +#endif + + psLinuxMemArea->eAreaType = LINUX_MEM_AREA_ALLOC_PAGES; + FreeAllocPagesLinuxMemArea(psLinuxMemArea); +} + + struct page* LinuxMemAreaOffsetToPage(LinuxMemArea *psLinuxMemArea, IMG_UINT32 ui32ByteOffset) @@ -1278,15 +1374,18 @@ LinuxMemAreaDeepFree(LinuxMemArea *psLinuxMemArea) case LINUX_MEM_AREA_IOREMAP: FreeIORemapLinuxMemArea(psLinuxMemArea); break; - case LINUX_MEM_AREA_EXTERNAL_KV: - FreeExternalKVLinuxMemArea(psLinuxMemArea); - break; + case LINUX_MEM_AREA_EXTERNAL_KV: + FreeExternalKVLinuxMemArea(psLinuxMemArea); + break; case LINUX_MEM_AREA_IO: FreeIOLinuxMemArea(psLinuxMemArea); break; case LINUX_MEM_AREA_SUB_ALLOC: FreeSubLinuxMemArea(psLinuxMemArea); break; + case LINUX_MEM_AREA_ION: + FreeIONLinuxMemArea(psLinuxMemArea); + break; default: PVR_DPF((PVR_DBG_ERROR, "%s: Unknown are type (%d)\n", __FUNCTION__, psLinuxMemArea->eAreaType)); @@ -1490,6 +1589,8 @@ LinuxMemAreaToCpuPAddr(LinuxMemArea *psLinuxMemArea, IMG_UINT32 ui32ByteOffset) CpuPAddr.uiAddr = VMallocToPhys(pCpuVAddr); break; } + case LINUX_MEM_AREA_ION: + case LINUX_MEM_AREA_ALLOC_PAGES: { struct page *page; @@ -1529,16 +1630,17 @@ LinuxMemAreaPhysIsContig(LinuxMemArea *psLinuxMemArea) case LINUX_MEM_AREA_IO: return IMG_TRUE; - case LINUX_MEM_AREA_EXTERNAL_KV: - return psLinuxMemArea->uData.sExternalKV.bPhysContig; + case LINUX_MEM_AREA_EXTERNAL_KV: + return psLinuxMemArea->uData.sExternalKV.bPhysContig; + case LINUX_MEM_AREA_ION: case LINUX_MEM_AREA_VMALLOC: case LINUX_MEM_AREA_ALLOC_PAGES: - return IMG_FALSE; + return IMG_FALSE; case LINUX_MEM_AREA_SUB_ALLOC: - return LinuxMemAreaPhysIsContig(psLinuxMemArea->uData.sSubAlloc.psParentLinuxMemArea); + return LinuxMemAreaPhysIsContig(psLinuxMemArea->uData.sSubAlloc.psParentLinuxMemArea); default: PVR_DPF((PVR_DBG_ERROR, "%s: Unknown LinuxMemArea type (%d)\n", @@ -1567,6 +1669,8 @@ LinuxMemAreaTypeToString(LINUX_MEM_AREA_TYPE eMemAreaType) return "LINUX_MEM_AREA_SUB_ALLOC"; case LINUX_MEM_AREA_ALLOC_PAGES: return "LINUX_MEM_AREA_ALLOC_PAGES"; + case LINUX_MEM_AREA_ION: + return "LINUX_MEM_AREA_ION"; default: PVR_ASSERT(0); } diff --git a/drivers/gpu/pvr/mm.h b/drivers/gpu/pvr/mm.h index b32f5e8..04b565e 100644 --- a/drivers/gpu/pvr/mm.h +++ b/drivers/gpu/pvr/mm.h @@ -83,7 +83,8 @@ typedef enum { LINUX_MEM_AREA_VMALLOC, LINUX_MEM_AREA_ALLOC_PAGES, LINUX_MEM_AREA_SUB_ALLOC, - LINUX_MEM_AREA_TYPE_COUNT + LINUX_MEM_AREA_TYPE_COUNT, + LINUX_MEM_AREA_ION, }LINUX_MEM_AREA_TYPE; typedef struct _LinuxMemArea LinuxMemArea; @@ -279,6 +280,12 @@ LinuxMemArea *NewAllocPagesLinuxMemArea(IMG_UINT32 ui32Bytes, IMG_UINT32 ui32Are IMG_VOID FreeAllocPagesLinuxMemArea(LinuxMemArea *psLinuxMemArea); +LinuxMemArea *NewIONLinuxMemArea(IMG_UINT32 ui32Bytes, IMG_UINT32 ui32AreaFlags); + + +IMG_VOID FreeIONLinuxMemArea(LinuxMemArea *psLinuxMemArea); + + LinuxMemArea *NewSubLinuxMemArea(LinuxMemArea *psParentLinuxMemArea, IMG_UINT32 ui32ByteOffset, IMG_UINT32 ui32Bytes); diff --git a/drivers/gpu/pvr/omap4/sysconfig.c b/drivers/gpu/pvr/omap4/sysconfig.c index 62d23c1..f5c951b 100644 --- a/drivers/gpu/pvr/omap4/sysconfig.c +++ b/drivers/gpu/pvr/omap4/sysconfig.c @@ -40,11 +40,10 @@ SYS_DATA gsSysData; static SYS_SPECIFIC_DATA gsSysSpecificData; SYS_SPECIFIC_DATA *gpsSysSpecificData; -static IMG_UINT32 gui32SGXDeviceID; -static SGX_DEVICE_MAP gsSGXDeviceMap; -static PVRSRV_DEVICE_NODE *gpsSGXDevNode; +static IMG_UINT32 gui32SGXDeviceID; +static SGX_DEVICE_MAP gsSGXDeviceMap; +static PVRSRV_DEVICE_NODE *gpsSGXDevNode; -#define DEVICE_SGX_INTERRUPT (1 << 0) #if defined(NO_HARDWARE) || defined(SGX_OCP_REGS_ENABLED) static IMG_CPU_VIRTADDR gsSGXRegsCPUVAddr; @@ -483,6 +482,7 @@ PVRSRV_ERROR SysInitialise(IMG_VOID) } #endif + return PVRSRV_OK; } @@ -518,7 +518,6 @@ PVRSRV_ERROR SysFinalise(IMG_VOID) } SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR); #endif - #if defined(__linux__) gpsSysData->pszVersionString = SysCreateVersionString(); @@ -547,6 +546,8 @@ PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData) { PVRSRV_ERROR eError; + PVR_UNREFERENCED_PARAMETER(psSysData); + if(gpsSysData->pvSOCTimerRegisterKM) { OSUnReservePhys(gpsSysData->pvSOCTimerRegisterKM, @@ -555,10 +556,11 @@ PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData) gpsSysData->hSOCTimerRegisterOSMemHandle); } + #if defined(SYS_USING_INTERRUPTS) if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR)) { - eError = OSUninstallDeviceLISR(psSysData); + eError = OSUninstallDeviceLISR(gpsSysData); if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: OSUninstallDeviceLISR failed")); @@ -569,7 +571,7 @@ PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData) if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_MISR)) { - eError = OSUninstallMISR(psSysData); + eError = OSUninstallMISR(gpsSysData); if (eError != PVRSRV_OK) { PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: OSUninstallMISR failed")); @@ -762,7 +764,6 @@ IMG_VOID SysRemoveExternalDevice(PVRSRV_DEVICE_NODE *psDeviceNode) PVR_UNREFERENCED_PARAMETER(psDeviceNode); } - IMG_UINT32 SysGetInterruptSource(SYS_DATA *psSysData, PVRSRV_DEVICE_NODE *psDeviceNode) { @@ -780,9 +781,8 @@ IMG_UINT32 SysGetInterruptSource(SYS_DATA *psSysData, IMG_VOID SysClearInterrupts(SYS_DATA* psSysData, IMG_UINT32 ui32ClearBits) { PVR_UNREFERENCED_PARAMETER(ui32ClearBits); -#if defined(NO_HARDWARE) PVR_UNREFERENCED_PARAMETER(psSysData); -#else +#if !defined(NO_HARDWARE) #if defined(SGX_OCP_NO_INT_BYPASS) OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_IRQSTATUS_2, 0x1); #endif diff --git a/drivers/gpu/pvr/omap4/sysconfig.h b/drivers/gpu/pvr/omap4/sysconfig.h index 5f61c25..7ee00cf 100644 --- a/drivers/gpu/pvr/omap4/sysconfig.h +++ b/drivers/gpu/pvr/omap4/sysconfig.h @@ -44,15 +44,34 @@ #define SYS_OMAP4430_SGX_REGS_SYS_PHYS_BASE 0x56000000 - #define SYS_OMAP4430_SGX_REGS_SIZE 0xFFFF #define SYS_OMAP4430_SGX_IRQ 53 +#define SYS_OMAP4430_DSS_REGS_SYS_PHYS_BASE 0x58000000 +#define SYS_OMAP4430_DSS_REGS_SIZE 0x7000 + +#define SYS_OMAP4430_DSS_HDMI_INTERRUPT_STATUS_REG 0x6028 +#define SYS_OMAP4430_DSS_HDMI_INTERRUPT_ENABLE_REG 0x602c + +#define SYS_OMAP4430_DSS_HDMI_INTERRUPT_VSYNC_ENABLE_MASK 0x10000 +#define SYS_OMAP4430_DSS_HDMI_INTERRUPT_VSYNC_STATUS_MASK 0x10000 + +#define SYS_OMAP4430_DSS_LCD_INTERRUPT_STATUS_REG 0x1018 +#define SYS_OMAP4430_DSS_LCD_INTERRUPT_ENABLE_REG 0x101c + +#define SYS_OMAP4430_DSS_LCD_INTERRUPT_VSYNC_ENABLE_MASK 0x40002 +#define SYS_OMAP4430_DSS_LCD_INTERRUPT_VSYNC_STATUS_MASK 0x40002 + + #define SYS_OMAP4430_GP11TIMER_ENABLE_SYS_PHYS_BASE 0x48088038 #define SYS_OMAP4430_GP11TIMER_REGS_SYS_PHYS_BASE 0x4808803C #define SYS_OMAP4430_GP11TIMER_TSICR_SYS_PHYS_BASE 0x48088054 +#define DEVICE_SGX_INTERRUPT (1<<0) +#define DEVICE_MSVDX_INTERRUPT (1<<1) +#define DEVICE_DISP_INTERRUPT (1<<2) + #if defined(__linux__) #if defined(PVR_LDM_PLATFORM_PRE_REGISTERED_DEV) #define SYS_SGX_DEV_NAME PVR_LDM_PLATFORM_PRE_REGISTERED_DEV diff --git a/drivers/gpu/pvr/omap4/sysutils.c b/drivers/gpu/pvr/omap4/sysutils.c index 8736fcc..f785cb1 100644 --- a/drivers/gpu/pvr/omap4/sysutils.c +++ b/drivers/gpu/pvr/omap4/sysutils.c @@ -28,3 +28,4 @@ #include "sysutils_linux.c" #endif + diff --git a/drivers/gpu/pvr/osfunc.c b/drivers/gpu/pvr/osfunc.c index f0c6838..d14e73d 100644 --- a/drivers/gpu/pvr/osfunc.c +++ b/drivers/gpu/pvr/osfunc.c @@ -183,6 +183,21 @@ OSAllocPages_Impl(IMG_UINT32 ui32AllocFlags, } #endif + if(ui32AllocFlags & PVRSRV_MEM_ION) + { + + BUG_ON((ui32AllocFlags & PVRSRV_HAP_MAPTYPE_MASK) != PVRSRV_HAP_SINGLE_PROCESS); + + psLinuxMemArea = NewIONLinuxMemArea(ui32Size, ui32AllocFlags); + if(!psLinuxMemArea) + { + return PVRSRV_ERROR_OUT_OF_MEMORY; + } + + PVRMMapRegisterArea(psLinuxMemArea); + goto ExitSkipSwitch; + } + switch(ui32AllocFlags & PVRSRV_HAP_MAPTYPE_MASK) { case PVRSRV_HAP_KERNEL_ONLY: @@ -197,7 +212,6 @@ OSAllocPages_Impl(IMG_UINT32 ui32AllocFlags, case PVRSRV_HAP_SINGLE_PROCESS: { - psLinuxMemArea = NewAllocPagesLinuxMemArea(ui32Size, ui32AllocFlags); if(!psLinuxMemArea) { @@ -229,6 +243,7 @@ OSAllocPages_Impl(IMG_UINT32 ui32AllocFlags, return PVRSRV_ERROR_INVALID_PARAMS; } +ExitSkipSwitch: *ppvCpuVAddr = LinuxMemAreaToCpuVAddr(psLinuxMemArea); *phOSMemHandle = psLinuxMemArea; @@ -2876,6 +2891,8 @@ IMG_BOOL CheckExecuteCacheOp(IMG_HANDLE hOSMemHandle, break; } + case LINUX_MEM_AREA_ION: + case LINUX_MEM_AREA_ALLOC_PAGES: { pvMinVAddr = FindMMapBaseVAddr(psMMapOffsetStructList, diff --git a/drivers/gpu/pvr/pvrversion.h b/drivers/gpu/pvr/pvrversion.h index 983aa01..247686f 100644 --- a/drivers/gpu/pvr/pvrversion.h +++ b/drivers/gpu/pvr/pvrversion.h @@ -30,8 +30,8 @@ #define PVRVERSION_MAJ 1 #define PVRVERSION_MIN 8 #define PVRVERSION_BRANCH 18 -#define PVRVERSION_BUILD 726 -#define PVRVERSION_STRING "1.8.18.726" +#define PVRVERSION_BUILD 737 +#define PVRVERSION_STRING "1.8.18.737" #define PVRVERSION_FILE "eurasiacon.pj" #endif diff --git a/drivers/gpu/pvr/services.h b/drivers/gpu/pvr/services.h index 12162f2..8a163ed 100644 --- a/drivers/gpu/pvr/services.h +++ b/drivers/gpu/pvr/services.h @@ -81,6 +81,7 @@ extern "C" { #define PVRSRV_MAP_NOUSERVIRTUAL (1UL<<27) #define PVRSRV_MEM_XPROC (1U<<28) +#define PVRSRV_MEM_ION (1U<<29) #define PVRSRV_NO_CONTEXT_LOSS 0 #define PVRSRV_SEVERE_LOSS_OF_CONTEXT 1 diff --git a/drivers/gpu/pvr/syscommon.h b/drivers/gpu/pvr/syscommon.h index 7770b82..42bcd16 100644 --- a/drivers/gpu/pvr/syscommon.h +++ b/drivers/gpu/pvr/syscommon.h @@ -102,6 +102,10 @@ typedef struct _SYS_DATA_TAG_ +#if defined (CUSTOM_DISPLAY_SEGMENT) +PVRSRV_ERROR SysGetDisplaySegmentAddress (IMG_VOID *pvDevInfo, IMG_VOID *pvPhysicalAddress, IMG_UINT32 *pui32Length); +#endif + PVRSRV_ERROR SysInitialise(IMG_VOID); PVRSRV_ERROR SysFinalise(IMG_VOID); |