aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorImagination Technologies Ltd <gpl-support@imgtec.com>2011-06-29 18:40:33 +0100
committerRebecca Schultz Zavin <rebecca@android.com>2011-07-11 17:03:15 -0700
commitaf50f0bd0d46b8bf131849d34306f62090d8b9f9 (patch)
tree845a365ca2bf12771b2e8080a545b4165181d87f /drivers
parent6d3f70d2cd5c4739b0cea3a439507721079ecbab (diff)
downloadkernel_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.c6
-rw-r--r--drivers/gpu/pvr/mem_debug.c5
-rw-r--r--drivers/gpu/pvr/mm.c118
-rw-r--r--drivers/gpu/pvr/mm.h9
-rw-r--r--drivers/gpu/pvr/omap4/sysconfig.c20
-rw-r--r--drivers/gpu/pvr/omap4/sysconfig.h21
-rw-r--r--drivers/gpu/pvr/omap4/sysutils.c1
-rw-r--r--drivers/gpu/pvr/osfunc.c19
-rw-r--r--drivers/gpu/pvr/pvrversion.h4
-rw-r--r--drivers/gpu/pvr/services.h1
-rw-r--r--drivers/gpu/pvr/syscommon.h4
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);