diff options
author | Xianzhong <b07117@freescale.com> | 2013-06-28 17:59:35 +0800 |
---|---|---|
committer | Xianzhong <b07117@freescale.com> | 2013-06-28 18:02:41 +0800 |
commit | 5b24ff733fd113bf1e64dbc72dfd28e1c6146b68 (patch) | |
tree | 4023d185f07f6e35730ef8169e9c4e09ee12ac0b /drivers/mxc/gpu-viv/hal/os/linux | |
parent | ccae2c8d0795636b65808609d9f9d62caeaf91dc (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')
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; |