diff options
author | Hemant Hariyani <hemanthariyani@ti.com> | 2011-08-25 03:01:10 -0400 |
---|---|---|
committer | Paolo Pisati <paolo.pisati@canonical.com> | 2012-08-17 04:18:39 -0400 |
commit | b7f68b0d0649bec8d50054b78873ca40b267321b (patch) | |
tree | 56e9917cfa159b1728721dbae9d8c46f33bc2699 /drivers/gpu/pvr/omap4/sysconfig.c | |
parent | 8827e270c06639a9a89390799c8860bf9640ec5f (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.c | 239 |
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) | ||
48 | extern struct platform_device *gpsPVRLDMDev; | ||
49 | #endif | 39 | #endif |
50 | 40 | ||
51 | SYS_DATA* gpsSysData = (SYS_DATA*)IMG_NULL; | 41 | SYS_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) |
64 | static IMG_CPU_VIRTADDR gsSGXRegsCPUVAddr; | 54 | static IMG_CPU_VIRTADDR gsSGXRegsCPUVAddr; |
65 | #endif | 55 | #endif |
66 | 56 | ||
57 | #if defined(LDM_PLATFORM) && !defined(PVR_DRI_DRM_NOT_PCI) | ||
58 | extern struct platform_device *gpsPVRLDMDev; | ||
59 | #endif | ||
60 | |||
67 | IMG_UINT32 PVRSRV_BridgeDispatchKM(IMG_UINT32 Ioctl, | 61 | IMG_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 | |||
79 | static IMG_CPU_VIRTADDR gpvOCPRegsLinAddr; | 70 | static IMG_CPU_VIRTADDR gpvOCPRegsLinAddr; |
80 | 71 | ||
81 | static PVRSRV_ERROR EnableSGXClocksWrap(SYS_DATA *psSysData) | 72 | static 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 | ||
187 | IMG_CHAR *SysCreateVersionString(IMG_CPU_PHYADDR sRegRegion) | 228 | static 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 | ||
741 | IMG_VOID SysClearInterrupts(SYS_DATA* psSysData, IMG_UINT32 ui32ClearBits) | 771 | IMG_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) | ||
786 | IMG_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 | |||
797 | IMG_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 | ||
752 | PVRSRV_ERROR SysSystemPrePowerState(PVRSRV_SYS_POWER_STATE eNewPowerState) | 809 | PVRSRV_ERROR SysSystemPrePowerState(PVRSRV_SYS_POWER_STATE eNewPowerState) |
753 | { | 810 | { |