aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/pvr/omap4/sysconfig.c
diff options
context:
space:
mode:
authorHemant Hariyani <hemanthariyani@ti.com>2011-08-25 03:01:10 -0400
committerPaolo Pisati <paolo.pisati@canonical.com>2012-08-17 04:18:39 -0400
commitb7f68b0d0649bec8d50054b78873ca40b267321b (patch)
tree56e9917cfa159b1728721dbae9d8c46f33bc2699 /drivers/gpu/pvr/omap4/sysconfig.c
parent8827e270c06639a9a89390799c8860bf9640ec5f (diff)
OMAP4: SGX-KM: Upgrade DDK to version 1.7.17.4403
This patch upgrades the kernel side graphics driver to version 1.7.17.4403. The corresponding change in the user side must be in place for this to work. Change-Id: Id3a713fa22a227dbcd0ec098589d62b350802247 Signed-off-by: Hemant Hariyani <hemanthariyani@ti.com>
Diffstat (limited to 'drivers/gpu/pvr/omap4/sysconfig.c')
-rw-r--r--drivers/gpu/pvr/omap4/sysconfig.c239
1 files changed, 148 insertions, 91 deletions
diff --git a/drivers/gpu/pvr/omap4/sysconfig.c b/drivers/gpu/pvr/omap4/sysconfig.c
index f08bf8e13fc..5c82be77d46 100644
--- a/drivers/gpu/pvr/omap4/sysconfig.c
+++ b/drivers/gpu/pvr/omap4/sysconfig.c
@@ -24,28 +24,18 @@
24 * 24 *
25 ******************************************************************************/ 25 ******************************************************************************/
26 26
27#include "sysconfig.h"
27#include "services_headers.h" 28#include "services_headers.h"
28#include "kerneldisplay.h" 29#include "kerneldisplay.h"
29#include "oemfuncs.h" 30#include "oemfuncs.h"
30#include "sgxinfo.h" 31#include "sgxinfo.h"
31#include "sgxinfokm.h" 32#include "sgxinfokm.h"
32#include "syslocal.h" 33#include "syslocal.h"
33#include "sysconfig.h"
34
35#include <linux/platform_device.h>
36#include <plat/omap_device.h>
37#include <plat/omap-pm.h>
38 34
39#include "ocpdefs.h" 35#include "ocpdefs.h"
40 36
41#if !defined(NO_HARDWARE) && \ 37#if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI)
42 defined(SYS_USING_INTERRUPTS) && \ 38#include <plat/omap_device.h>
43 defined(SGX540)
44#define SGX_OCP_REGS_ENABLED
45#endif
46
47#if defined(LDM_PLATFORM) && !defined(SUPPORT_DRI_DRM)
48extern struct platform_device *gpsPVRLDMDev;
49#endif 39#endif
50 40
51SYS_DATA* gpsSysData = (SYS_DATA*)IMG_NULL; 41SYS_DATA* gpsSysData = (SYS_DATA*)IMG_NULL;
@@ -60,10 +50,14 @@ static PVRSRV_DEVICE_NODE *gpsSGXDevNode;
60 50
61#define DEVICE_SGX_INTERRUPT (1 << 0) 51#define DEVICE_SGX_INTERRUPT (1 << 0)
62 52
63#if defined(NO_HARDWARE) 53#if defined(NO_HARDWARE) || defined(SGX_OCP_REGS_ENABLED)
64static IMG_CPU_VIRTADDR gsSGXRegsCPUVAddr; 54static IMG_CPU_VIRTADDR gsSGXRegsCPUVAddr;
65#endif 55#endif
66 56
57#if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI)
58extern struct platform_device *gpsPVRLDMDev;
59#endif
60
67IMG_UINT32 PVRSRV_BridgeDispatchKM(IMG_UINT32 Ioctl, 61IMG_UINT32 PVRSRV_BridgeDispatchKM(IMG_UINT32 Ioctl,
68 IMG_BYTE *pInBuf, 62 IMG_BYTE *pInBuf,
69 IMG_UINT32 InBufLen, 63 IMG_UINT32 InBufLen,
@@ -73,25 +67,19 @@ IMG_UINT32 PVRSRV_BridgeDispatchKM(IMG_UINT32 Ioctl,
73 67
74#if defined(SGX_OCP_REGS_ENABLED) 68#if defined(SGX_OCP_REGS_ENABLED)
75 69
76#define SYS_OMAP4430_OCP_REGS_SYS_PHYS_BASE (SYS_OMAP4430_SGX_REGS_SYS_PHYS_BASE + EUR_CR_OCP_REVISION)
77#define SYS_OMAP4430_OCP_REGS_SIZE 0x110
78
79static IMG_CPU_VIRTADDR gpvOCPRegsLinAddr; 70static IMG_CPU_VIRTADDR gpvOCPRegsLinAddr;
80 71
81static PVRSRV_ERROR EnableSGXClocksWrap(SYS_DATA *psSysData) 72static PVRSRV_ERROR EnableSGXClocksWrap(SYS_DATA *psSysData)
82{ 73{
83 PVRSRV_ERROR eError = EnableSGXClocks(psSysData); 74 PVRSRV_ERROR eError = EnableSGXClocks(psSysData);
84 75
76#if !defined(SGX_OCP_NO_INT_BYPASS)
85 if(eError == PVRSRV_OK) 77 if(eError == PVRSRV_OK)
86 { 78 {
87 OSWriteHWReg(gpvOCPRegsLinAddr, 79 OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_SYSCONFIG, 0x14);
88 EUR_CR_OCP_SYSCONFIG - EUR_CR_OCP_REVISION, 80 OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_DEBUG_CONFIG, EUR_CR_OCP_DEBUG_CONFIG_THALIA_INT_BYPASS_MASK);
89 0x14);
90 OSWriteHWReg(gpvOCPRegsLinAddr,
91 EUR_CR_OCP_DEBUG_CONFIG - EUR_CR_OCP_REVISION,
92 EUR_CR_OCP_DEBUG_CONFIG_THALIA_INT_BYPASS_MASK);
93 } 81 }
94 82#endif
95 return eError; 83 return eError;
96} 84}
97 85
@@ -112,7 +100,11 @@ static INLINE PVRSRV_ERROR EnableSystemClocksWrap(SYS_DATA *psSysData)
112 if(eError == PVRSRV_OK) 100 if(eError == PVRSRV_OK)
113 { 101 {
114 102
115 EnableSGXClocksWrap(psSysData); 103 eError = EnableSGXClocksWrap(psSysData);
104 if (eError != PVRSRV_OK)
105 {
106 DisableSystemClocks(psSysData);
107 }
116 } 108 }
117#endif 109#endif
118 110
@@ -124,6 +116,11 @@ static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData)
124#if defined(NO_HARDWARE) 116#if defined(NO_HARDWARE)
125 PVRSRV_ERROR eError; 117 PVRSRV_ERROR eError;
126 IMG_CPU_PHYADDR sCpuPAddr; 118 IMG_CPU_PHYADDR sCpuPAddr;
119#else
120#if defined(PVR_LINUX_DYNAMIC_SGX_RESOURCE_INFO)
121 struct resource *dev_res;
122 int dev_irq;
123#endif
127#endif 124#endif
128 125
129 PVR_UNREFERENCED_PARAMETER(psSysData); 126 PVR_UNREFERENCED_PARAMETER(psSysData);
@@ -134,7 +131,9 @@ static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData)
134#if defined(NO_HARDWARE) 131#if defined(NO_HARDWARE)
135 132
136 133
137 eError = OSBaseAllocContigMemory(SYS_OMAP4430_SGX_REGS_SIZE, 134 gsSGXDeviceMap.ui32RegsSize = SYS_OMAP4430_SGX_REGS_SIZE;
135
136 eError = OSBaseAllocContigMemory(gsSGXDeviceMap.ui32RegsSize,
138 &gsSGXRegsCPUVAddr, 137 &gsSGXRegsCPUVAddr,
139 &sCpuPAddr); 138 &sCpuPAddr);
140 if(eError != PVRSRV_OK) 139 if(eError != PVRSRV_OK)
@@ -143,7 +142,6 @@ static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData)
143 } 142 }
144 gsSGXDeviceMap.sRegsCpuPBase = sCpuPAddr; 143 gsSGXDeviceMap.sRegsCpuPBase = sCpuPAddr;
145 gsSGXDeviceMap.sRegsSysPBase = SysCpuPAddrToSysPAddr(gsSGXDeviceMap.sRegsCpuPBase); 144 gsSGXDeviceMap.sRegsSysPBase = SysCpuPAddrToSysPAddr(gsSGXDeviceMap.sRegsCpuPBase);
146 gsSGXDeviceMap.ui32RegsSize = SYS_OMAP4430_SGX_REGS_SIZE;
147#if defined(__linux__) 145#if defined(__linux__)
148 146
149 gsSGXDeviceMap.pvRegsCpuVBase = gsSGXRegsCPUVAddr; 147 gsSGXDeviceMap.pvRegsCpuVBase = gsSGXRegsCPUVAddr;
@@ -152,7 +150,7 @@ static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData)
152 gsSGXDeviceMap.pvRegsCpuVBase = IMG_NULL; 150 gsSGXDeviceMap.pvRegsCpuVBase = IMG_NULL;
153#endif 151#endif
154 152
155 OSMemSet(gsSGXRegsCPUVAddr, 0, SYS_OMAP4430_SGX_REGS_SIZE); 153 OSMemSet(gsSGXRegsCPUVAddr, 0, gsSGXDeviceMap.ui32RegsSize);
156 154
157 155
158 156
@@ -160,13 +158,56 @@ static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData)
160 gsSGXDeviceMap.ui32IRQ = 0; 158 gsSGXDeviceMap.ui32IRQ = 0;
161 159
162#else 160#else
161#if defined(PVR_LINUX_DYNAMIC_SGX_RESOURCE_INFO)
162
163 dev_res = platform_get_resource(gpsPVRLDMDev, IORESOURCE_MEM, 0);
164 if (dev_res == NULL)
165 {
166 PVR_DPF((PVR_DBG_ERROR, "%s: platform_get_resource failed", __FUNCTION__));
167 return PVRSRV_ERROR_INVALID_DEVICE;
168 }
169
170 dev_irq = platform_get_irq(gpsPVRLDMDev, 0);
171 if (dev_irq < 0)
172 {
173 PVR_DPF((PVR_DBG_ERROR, "%s: platform_get_irq failed (%d)", __FUNCTION__, -dev_irq));
174 return PVRSRV_ERROR_INVALID_DEVICE;
175 }
176
177 gsSGXDeviceMap.sRegsSysPBase.uiAddr = dev_res->start;
178 gsSGXDeviceMap.sRegsCpuPBase =
179 SysSysPAddrToCpuPAddr(gsSGXDeviceMap.sRegsSysPBase);
180 PVR_TRACE(("SGX register base: 0x%lx", (unsigned long)gsSGXDeviceMap.sRegsCpuPBase.uiAddr));
163 181
182 gsSGXDeviceMap.ui32RegsSize = (unsigned int)(dev_res->end - dev_res->start);
183 PVR_TRACE(("SGX register size: %d",gsSGXDeviceMap.ui32RegsSize));
184
185 gsSGXDeviceMap.ui32IRQ = dev_irq;
186 PVR_TRACE(("SGX IRQ: %d", gsSGXDeviceMap.ui32IRQ));
187#else
164 gsSGXDeviceMap.sRegsSysPBase.uiAddr = SYS_OMAP4430_SGX_REGS_SYS_PHYS_BASE; 188 gsSGXDeviceMap.sRegsSysPBase.uiAddr = SYS_OMAP4430_SGX_REGS_SYS_PHYS_BASE;
165 gsSGXDeviceMap.sRegsCpuPBase = SysSysPAddrToCpuPAddr(gsSGXDeviceMap.sRegsSysPBase); 189 gsSGXDeviceMap.sRegsCpuPBase = SysSysPAddrToCpuPAddr(gsSGXDeviceMap.sRegsSysPBase);
166 gsSGXDeviceMap.ui32RegsSize = SYS_OMAP4430_SGX_REGS_SIZE; 190 gsSGXDeviceMap.ui32RegsSize = SYS_OMAP4430_SGX_REGS_SIZE;
167 191
168 gsSGXDeviceMap.ui32IRQ = SYS_OMAP4430_SGX_IRQ; 192 gsSGXDeviceMap.ui32IRQ = SYS_OMAP4430_SGX_IRQ;
169 193
194#endif
195#if defined(SGX_OCP_REGS_ENABLED)
196 gsSGXRegsCPUVAddr = OSMapPhysToLin(gsSGXDeviceMap.sRegsCpuPBase,
197 gsSGXDeviceMap.ui32RegsSize,
198 PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY,
199 IMG_NULL);
200
201 if (gsSGXRegsCPUVAddr == IMG_NULL)
202 {
203 PVR_DPF((PVR_DBG_ERROR,"SysLocateDevices: Failed to map SGX registers"));
204 return PVRSRV_ERROR_BAD_MAPPING;
205 }
206
207
208 gsSGXDeviceMap.pvRegsCpuVBase = gsSGXRegsCPUVAddr;
209 gpvOCPRegsLinAddr = gsSGXRegsCPUVAddr;
210#endif
170#endif 211#endif
171 212
172#if defined(PDUMP) 213#if defined(PDUMP)
@@ -184,7 +225,7 @@ static PVRSRV_ERROR SysLocateDevices(SYS_DATA *psSysData)
184} 225}
185 226
186 227
187IMG_CHAR *SysCreateVersionString(IMG_CPU_PHYADDR sRegRegion) 228static IMG_CHAR *SysCreateVersionString(void)
188{ 229{
189 static IMG_CHAR aszVersionString[100]; 230 static IMG_CHAR aszVersionString[100];
190 SYS_DATA *psSysData; 231 SYS_DATA *psSysData;
@@ -193,8 +234,8 @@ IMG_CHAR *SysCreateVersionString(IMG_CPU_PHYADDR sRegRegion)
193#if !defined(NO_HARDWARE) 234#if !defined(NO_HARDWARE)
194 IMG_VOID *pvRegsLinAddr; 235 IMG_VOID *pvRegsLinAddr;
195 236
196 pvRegsLinAddr = OSMapPhysToLin(sRegRegion, 237 pvRegsLinAddr = OSMapPhysToLin(gsSGXDeviceMap.sRegsCpuPBase,
197 SYS_OMAP4430_SGX_REGS_SIZE, 238 gsSGXDeviceMap.ui32RegsSize,
198 PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY, 239 PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY,
199 IMG_NULL); 240 IMG_NULL);
200 if(!pvRegsLinAddr) 241 if(!pvRegsLinAddr)
@@ -286,17 +327,6 @@ PVRSRV_ERROR SysInitialise(IMG_VOID)
286 return eError; 327 return eError;
287 } 328 }
288 329
289#if !defined(PVR_NO_OMAP_TIMER)
290 TimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_REGS_SYS_PHYS_BASE;
291 gpsSysData->pvSOCTimerRegisterKM = IMG_NULL;
292 gpsSysData->hSOCTimerRegisterOSMemHandle = 0;
293 OSReservePhys(TimerRegPhysBase,
294 4,
295 PVRSRV_HAP_MULTI_PROCESS|PVRSRV_HAP_UNCACHED,
296 (IMG_VOID **)&gpsSysData->pvSOCTimerRegisterKM,
297 &gpsSysData->hSOCTimerRegisterOSMemHandle);
298#endif
299
300#if !defined(SGX_DYNAMIC_TIMING_INFO) 330#if !defined(SGX_DYNAMIC_TIMING_INFO)
301 331
302 psTimingInfo = &gsSGXDeviceMap.sTimingInfo; 332 psTimingInfo = &gsSGXDeviceMap.sTimingInfo;
@@ -329,28 +359,6 @@ PVRSRV_ERROR SysInitialise(IMG_VOID)
329 } 359 }
330 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LOCATEDEV); 360 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LOCATEDEV);
331 361
332#if defined(SGX_OCP_REGS_ENABLED)
333 {
334 IMG_SYS_PHYADDR sOCPRegsSysPBase;
335 IMG_CPU_PHYADDR sOCPRegsCpuPBase;
336
337 sOCPRegsSysPBase.uiAddr = SYS_OMAP4430_OCP_REGS_SYS_PHYS_BASE;
338 sOCPRegsCpuPBase = SysSysPAddrToCpuPAddr(sOCPRegsSysPBase);
339
340 gpvOCPRegsLinAddr = OSMapPhysToLin(sOCPRegsCpuPBase,
341 SYS_OMAP4430_OCP_REGS_SIZE,
342 PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY,
343 IMG_NULL);
344
345 if (gpvOCPRegsLinAddr == IMG_NULL)
346 {
347 PVR_DPF((PVR_DBG_ERROR,"SysInitialise: Failed to map OCP registers"));
348 return PVRSRV_ERROR_BAD_MAPPING;
349 }
350 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_OCPREGS);
351 }
352#endif
353
354 eError = SysPMRuntimeRegister(); 362 eError = SysPMRuntimeRegister();
355 if (eError != PVRSRV_OK) 363 if (eError != PVRSRV_OK)
356 { 364 {
@@ -419,8 +427,10 @@ PVRSRV_ERROR SysInitialise(IMG_VOID)
419 psDeviceNode = psDeviceNode->psNext; 427 psDeviceNode = psDeviceNode->psNext;
420 } 428 }
421 429
430#if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI)
422 omap_device_set_rate(&gpsPVRLDMDev->dev, 431 omap_device_set_rate(&gpsPVRLDMDev->dev,
423 &gpsPVRLDMDev->dev, SYS_SGX_CLOCK_SPEED); 432 &gpsPVRLDMDev->dev, SYS_SGX_CLOCK_SPEED);
433#endif
424 434
425 eError = EnableSystemClocksWrap(gpsSysData); 435 eError = EnableSystemClocksWrap(gpsSysData);
426 if (eError != PVRSRV_OK) 436 if (eError != PVRSRV_OK)
@@ -457,6 +467,24 @@ PVRSRV_ERROR SysInitialise(IMG_VOID)
457 DisableSGXClocks(gpsSysData); 467 DisableSGXClocks(gpsSysData);
458#endif 468#endif
459 469
470#if !defined(PVR_NO_OMAP_TIMER)
471#if defined(PVR_OMAP_TIMER_BASE_IN_SYS_SPEC_DATA)
472 TimerRegPhysBase = gsSysSpecificData.sTimerRegPhysBase;
473#else
474 TimerRegPhysBase.uiAddr = SYS_OMAP4430_GP11TIMER_REGS_SYS_PHYS_BASE;
475#endif
476 gpsSysData->pvSOCTimerRegisterKM = IMG_NULL;
477 gpsSysData->hSOCTimerRegisterOSMemHandle = 0;
478 if (TimerRegPhysBase.uiAddr != 0)
479 {
480 OSReservePhys(TimerRegPhysBase,
481 4,
482 PVRSRV_HAP_MULTI_PROCESS|PVRSRV_HAP_UNCACHED,
483 (IMG_VOID **)&gpsSysData->pvSOCTimerRegisterKM,
484 &gpsSysData->hSOCTimerRegisterOSMemHandle);
485 }
486#endif
487
460 return PVRSRV_OK; 488 return PVRSRV_OK;
461} 489}
462 490
@@ -495,14 +523,14 @@ PVRSRV_ERROR SysFinalise(IMG_VOID)
495 523
496#if defined(__linux__) 524#if defined(__linux__)
497 525
498 gpsSysData->pszVersionString = SysCreateVersionString(gsSGXDeviceMap.sRegsCpuPBase); 526 gpsSysData->pszVersionString = SysCreateVersionString();
499 if (!gpsSysData->pszVersionString) 527 if (!gpsSysData->pszVersionString)
500 { 528 {
501 PVR_DPF((PVR_DBG_ERROR,"SysFinalise: Failed to create a system version string")); 529 PVR_DPF((PVR_DBG_ERROR,"SysFinalise: Failed to create a system version string"));
502 } 530 }
503 else 531 else
504 { 532 {
505 PVR_DPF((PVR_DBG_WARNING, "SysFinalise: Version string: %s", gpsSysData->pszVersionString)); 533 PVR_TRACE(("SysFinalise: Version string: %s", gpsSysData->pszVersionString));
506 } 534 }
507#endif 535#endif
508 536
@@ -521,6 +549,14 @@ PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData)
521{ 549{
522 PVRSRV_ERROR eError; 550 PVRSRV_ERROR eError;
523 551
552 if(gpsSysData->pvSOCTimerRegisterKM)
553 {
554 OSUnReservePhys(gpsSysData->pvSOCTimerRegisterKM,
555 4,
556 PVRSRV_HAP_MULTI_PROCESS|PVRSRV_HAP_UNCACHED,
557 gpsSysData->hSOCTimerRegisterOSMemHandle);
558 }
559
524#if defined(SYS_USING_INTERRUPTS) 560#if defined(SYS_USING_INTERRUPTS)
525 if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR)) 561 if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR))
526 { 562 {
@@ -571,22 +607,11 @@ PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData)
571 if (eError != PVRSRV_OK) 607 if (eError != PVRSRV_OK)
572 { 608 {
573 PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: Failed to unregister with OSPM!")); 609 PVR_DPF((PVR_DBG_ERROR,"SysDeinitialise: Failed to unregister with OSPM!"));
574 (IMG_VOID)SysDeinitialise(gpsSysData);
575 gpsSysData = IMG_NULL; 610 gpsSysData = IMG_NULL;
576 return eError; 611 return eError;
577 } 612 }
578 } 613 }
579 614
580#if defined(SGX_OCP_REGS_ENABLED)
581 if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_OCPREGS))
582 {
583 OSUnMapPhysToLin(gpvOCPRegsLinAddr,
584 SYS_OMAP4430_OCP_REGS_SIZE,
585 PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY,
586 IMG_NULL);
587 }
588#endif
589
590 615
591 616
592 if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS)) 617 if (SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS))
@@ -604,21 +629,26 @@ PVRSRV_ERROR SysDeinitialise (SYS_DATA *psSysData)
604 } 629 }
605 } 630 }
606 631
607 if(gpsSysData->pvSOCTimerRegisterKM)
608 {
609 OSUnReservePhys(gpsSysData->pvSOCTimerRegisterKM,
610 4,
611 PVRSRV_HAP_MULTI_PROCESS|PVRSRV_HAP_UNCACHED,
612 gpsSysData->hSOCTimerRegisterOSMemHandle);
613 }
614
615 SysDeinitialiseCommon(gpsSysData); 632 SysDeinitialiseCommon(gpsSysData);
616 633
617#if defined(NO_HARDWARE) 634#if defined(NO_HARDWARE) || defined(SGX_OCP_REGS_ENABLED)
618 if(SYS_SPECIFIC_DATA_TEST(gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LOCATEDEV)) 635 if(gsSGXRegsCPUVAddr != IMG_NULL)
619 { 636 {
637#if defined(NO_HARDWARE)
620 638
621 OSBaseFreeContigMemory(SYS_OMAP4430_SGX_REGS_SIZE, gsSGXRegsCPUVAddr, gsSGXDeviceMap.sRegsCpuPBase); 639 OSBaseFreeContigMemory(SYS_OMAP4430_SGX_REGS_SIZE, gsSGXRegsCPUVAddr, gsSGXDeviceMap.sRegsCpuPBase);
640#else
641#if defined(SGX_OCP_REGS_ENABLED)
642 OSUnMapPhysToLin(gsSGXRegsCPUVAddr,
643 gsSGXDeviceMap.ui32RegsSize,
644 PVRSRV_HAP_UNCACHED|PVRSRV_HAP_KERNEL_ONLY,
645 IMG_NULL);
646
647 gpvOCPRegsLinAddr = IMG_NULL;
648#endif
649#endif
650 gsSGXRegsCPUVAddr = IMG_NULL;
651 gsSGXDeviceMap.pvRegsCpuVBase = gsSGXRegsCPUVAddr;
622 } 652 }
623#endif 653#endif
624 654
@@ -740,14 +770,41 @@ IMG_UINT32 SysGetInterruptSource(SYS_DATA *psSysData,
740 770
741IMG_VOID SysClearInterrupts(SYS_DATA* psSysData, IMG_UINT32 ui32ClearBits) 771IMG_VOID SysClearInterrupts(SYS_DATA* psSysData, IMG_UINT32 ui32ClearBits)
742{ 772{
743 PVR_UNREFERENCED_PARAMETER(psSysData);
744 PVR_UNREFERENCED_PARAMETER(ui32ClearBits); 773 PVR_UNREFERENCED_PARAMETER(ui32ClearBits);
745 774#if defined(NO_HARDWARE)
775 PVR_UNREFERENCED_PARAMETER(psSysData);
776#else
777#if defined(SGX_OCP_NO_INT_BYPASS)
778 OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_IRQSTATUS_2, 0x1);
779#endif
746 780
747 OSReadHWReg(((PVRSRV_SGXDEV_INFO *)gpsSGXDevNode->pvDevice)->pvRegsBaseKM, 781 OSReadHWReg(((PVRSRV_SGXDEV_INFO *)gpsSGXDevNode->pvDevice)->pvRegsBaseKM, EUR_CR_EVENT_HOST_CLEAR);
748 EUR_CR_EVENT_HOST_CLEAR); 782#endif
749} 783}
750 784
785#if defined(SGX_OCP_NO_INT_BYPASS)
786IMG_VOID SysEnableSGXInterrupts(SYS_DATA *psSysData)
787{
788 SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *)psSysData->pvSysSpecificData;
789 if (SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_ENABLE_LISR) && !SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_IRQ_ENABLED))
790 {
791 OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_IRQSTATUS_2, 0x1);
792 OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_IRQENABLE_SET_2, 0x1);
793 SYS_SPECIFIC_DATA_SET(psSysSpecData, SYS_SPECIFIC_DATA_IRQ_ENABLED);
794 }
795}
796
797IMG_VOID SysDisableSGXInterrupts(SYS_DATA *psSysData)
798{
799 SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *)psSysData->pvSysSpecificData;
800
801 if (SYS_SPECIFIC_DATA_TEST(psSysSpecData, SYS_SPECIFIC_DATA_IRQ_ENABLED))
802 {
803 OSWriteHWReg(gpvOCPRegsLinAddr, EUR_CR_OCP_IRQENABLE_CLR_2, 0x1);
804 SYS_SPECIFIC_DATA_CLEAR(psSysSpecData, SYS_SPECIFIC_DATA_IRQ_ENABLED);
805 }
806}
807#endif
751 808
752PVRSRV_ERROR SysSystemPrePowerState(PVRSRV_SYS_POWER_STATE eNewPowerState) 809PVRSRV_ERROR SysSystemPrePowerState(PVRSRV_SYS_POWER_STATE eNewPowerState)
753{ 810{