summaryrefslogtreecommitdiff
path: root/drivers/mxc/gpu-viv/hal/os/linux
diff options
context:
space:
mode:
authorXianzhong <b07117@freescale.com>2013-06-28 17:59:35 +0800
committerXianzhong <b07117@freescale.com>2013-06-28 18:02:41 +0800
commit5b24ff733fd113bf1e64dbc72dfd28e1c6146b68 (patch)
tree4023d185f07f6e35730ef8169e9c4e09ee12ac0b /drivers/mxc/gpu-viv/hal/os/linux
parentccae2c8d0795636b65808609d9f9d62caeaf91dc (diff)
ENGR00264288-1 [GPU]Integrate 4.6.9p12 release kernel part code
Integrate 4.6.9p12 release kernel part code. Signed-off-by: Loren Huang <b02279@freescale.com> Signed-off-by: Xianzhong <b07117@freescale.com> Acked-by: Lily Zhang
Diffstat (limited to 'drivers/mxc/gpu-viv/hal/os/linux')
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c13
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h1
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c10
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c31
-rw-r--r--drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h3
5 files changed, 55 insertions, 3 deletions
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
index 4c5f416c1496..4d48bd55f115 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c
@@ -304,6 +304,7 @@ gckGALDEVICE_Construct(
IN gctINT Signal,
IN gctUINT LogFileSize,
IN struct device *pdev,
+ IN gctINT PowerManagement,
OUT gckGALDEVICE *Device
)
{
@@ -536,6 +537,9 @@ gckGALDEVICE_Construct(
device->kernels[gcvCORE_MAJOR]->hardware, FastClear, Compression
));
+ gcmkONERROR(gckHARDWARE_SetPowerManagement(
+ device->kernels[gcvCORE_MAJOR]->hardware, PowerManagement
+ ));
#if COMMAND_PROCESSOR_VERSION == 1
/* Start the command queue. */
@@ -591,6 +595,10 @@ gckGALDEVICE_Construct(
device
));
+ gcmkONERROR(gckHARDWARE_SetPowerManagement(
+ device->kernels[gcvCORE_2D]->hardware, PowerManagement
+ ));
+
#if COMMAND_PROCESSOR_VERSION == 1
/* Start the command queue. */
gcmkONERROR(gckCOMMAND_Start(device->kernels[gcvCORE_2D]->command));
@@ -622,6 +630,11 @@ gckGALDEVICE_Construct(
device->coreMapping[gcvHARDWARE_VG] = gcvCORE_VG;
}
+
+ gcmkONERROR(gckVGHARDWARE_SetPowerManagement(
+ device->kernels[gcvCORE_VG]->vg->hardware,
+ PowerManagement
+ ));
#endif
}
else
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
index 3a4e9b805e59..dde4f034442e 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.h
@@ -170,6 +170,7 @@ gceSTATUS gckGALDEVICE_Construct(
IN gctINT Signal,
IN gctUINT LogFileSize,
IN struct device *pdev,
+ IN gctINT PowerManagement,
OUT gckGALDEVICE *Device
);
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
index ba87cff2d91b..4d7957795330 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c
@@ -131,6 +131,9 @@ module_param(fastClear, int, 0644);
static int compression = -1;
module_param(compression, int, 0644);
+static int powerManagement = 1;
+module_param(powerManagement, int, 0644);
+
static int signal = 48;
module_param(signal, int, 0644);
@@ -781,6 +784,9 @@ static int drv_init(struct device *pdev)
}
#endif
+ printk(KERN_INFO "Galcore version %d.%d.%d.%d\n",
+ gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, gcvVERSION_BUILD);
+
if (showArgs)
{
printk("galcore options:\n");
@@ -810,7 +816,8 @@ static int drv_init(struct device *pdev)
printk(" signal = %d\n", signal);
printk(" baseAddress = 0x%08lX\n", baseAddress);
printk(" physSize = 0x%08lX\n", physSize);
- printk(" logFileSize = %d KB \n", logFileSize);
+ printk(" logFileSize = %d KB \n", logFileSize);
+ printk(" powerManagement = %d\n", powerManagement);
#if ENABLE_GPU_CLOCK_BY_DRIVER
printk(" coreClock = %lu\n", coreClock);
#endif
@@ -833,6 +840,7 @@ static int drv_init(struct device *pdev)
bankSize, fastClear, compression, baseAddress, physSize, signal,
logFileSize,
pdev,
+ powerManagement,
&device
));
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
index 969d467d247b..e7edc39c23ca 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c
@@ -3855,6 +3855,9 @@ gckOS_AllocatePagedMemoryEx(
gctSIZE_T bytes;
gctBOOL locked = gcvFALSE;
gceSTATUS status;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
+ gctPOINTER addr = gcvNULL;
+#endif
gcmkHEADER_ARG("Os=0x%X Contiguous=%d Bytes=%lu", Os, Contiguous, Bytes);
@@ -3880,13 +3883,27 @@ gckOS_AllocatePagedMemoryEx(
{
/* Get contiguous pages, and suppress warning (stack dump) from kernel when
we run out of memory. */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
+ addr =
+ alloc_pages_exact(numPages * PAGE_SIZE, GFP_KERNEL | gcdNOWARN | __GFP_NORETRY);
+
+ mdl->u.contiguousPages = addr
+ ? virt_to_page(addr)
+ : gcvNULL;
+
+ mdl->exact = gcvTRUE;
+#else
mdl->u.contiguousPages =
alloc_pages(GFP_KERNEL | gcdNOWARN | __GFP_NORETRY, GetOrder(numPages));
-
+#endif
if (mdl->u.contiguousPages == gcvNULL)
{
mdl->u.contiguousPages =
alloc_pages(GFP_KERNEL | __GFP_HIGHMEM | gcdNOWARN, GetOrder(numPages));
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
+ mdl->exact = gcvFALSE;
+#endif
}
}
else
@@ -4031,7 +4048,16 @@ gckOS_FreePagedMemory(
if (mdl->contiguous)
{
- __free_pages(mdl->u.contiguousPages, GetOrder(mdl->numPages));
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
+ if (mdl->exact == gcvTRUE)
+ {
+ free_pages_exact(page_address(mdl->u.contiguousPages), mdl->numPages * PAGE_SIZE);
+ }
+ else
+#endif
+ {
+ __free_pages(mdl->u.contiguousPages, GetOrder(mdl->numPages));
+ }
}
else
{
@@ -6949,6 +6975,7 @@ gckOS_SetGPUPower(
#else
imx_gpc_power_up_pu(false);
#endif
+
}
/* TODO: Put your code here. */
gcmkFOOTER_NO();
diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
index e97047744c1c..006632c642e2 100644
--- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
+++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h
@@ -54,6 +54,9 @@ typedef struct _LINUX_MDL
gctINT numPages;
gctINT pagedMem;
gctBOOL contiguous;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
+ gctBOOL exact;
+#endif
dma_addr_t dmaHandle;
PLINUX_MDL_MAP maps;
struct _LINUX_MDL * prev;