From e093d80207d6dd71226567e88ef5d3c4083c7c04 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E6=9D=9C=E5=9D=A4=E6=98=8E?= Date: Sat, 4 Dec 2010 16:51:09 +0800 Subject: [PATCH] gpu : add clock manage --- arch/arm/mach-rk29/board-rk29sdk.c | 2 +- drivers/staging/rk29/vivante/Makefile | 2 +- .../os/linux/kernel/gc_hal_kernel_driver.c | 50 +++++++++++++++---- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/arch/arm/mach-rk29/board-rk29sdk.c b/arch/arm/mach-rk29/board-rk29sdk.c index 8341b29bb37b..79e712e0a2b9 100755 --- a/arch/arm/mach-rk29/board-rk29sdk.c +++ b/arch/arm/mach-rk29/board-rk29sdk.c @@ -52,7 +52,7 @@ /* Set memory size of pmem */ #define SDRAM_SIZE SZ_512M -#define PMEM_GPU_SIZE (12 * SZ_1M) +#define PMEM_GPU_SIZE SZ_32M #define PMEM_UI_SIZE SZ_16M #define PMEM_VPU_SIZE SZ_32M diff --git a/drivers/staging/rk29/vivante/Makefile b/drivers/staging/rk29/vivante/Makefile index 7889049712f0..005cd88e5730 100644 --- a/drivers/staging/rk29/vivante/Makefile +++ b/drivers/staging/rk29/vivante/Makefile @@ -65,7 +65,7 @@ ENABLE_ARM_L2_CACHE = 0 CONFIG_DOVE_GPU = 0 -ENABLE_GPU_CLOCK_BY_DRIVER = 0 +ENABLE_GPU_CLOCK_BY_DRIVER = 1 AQROOT ?= drivers/staging/rk29/vivante diff --git a/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c index ce27af5c6672..684123cbcb0c 100644 --- a/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c +++ b/drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c @@ -441,29 +441,51 @@ static int drv_init(void) gckGALDEVICE device; #if ENABLE_GPU_CLOCK_BY_DRIVER && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28) - struct clk * clk = NULL; + struct clk * clk_gpu = NULL; + struct clk * clk_aclk_gpu = NULL; + struct clk * clk_gpu_ahb = NULL; #endif gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_DRIVER, "Entering drv_init\n"); #if ENABLE_GPU_CLOCK_BY_DRIVER && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28) - clk = clk_get(NULL, "GCCLK"); - if (IS_ERR(clk)) + // clk_gpu_ahb + clk_gpu_ahb = clk_get(NULL, "gpu_ahb"); + if(!IS_ERR(clk_gpu_ahb)) clk_enable(clk_gpu_ahb); + + // clk_aclk_gpu + clk_aclk_gpu = clk_get(NULL, "aclk_gpu"); + if (IS_ERR(clk_aclk_gpu)) { - int retval = PTR_ERR(clk); - printk("clk get error: %d\n", retval); + int retval = PTR_ERR(clk_aclk_gpu); + printk("clk_aclk_gpu get error: %d\n", retval); return -ENODEV; } + if (clk_set_rate(clk_aclk_gpu, 312000000)) //designed on 300M + { + gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER, + "[galcore] Can't set aclk_gpu clock."); + return -EAGAIN; + } + clk_enable(clk_aclk_gpu); + // clk_gpu + clk_gpu = clk_get(NULL, "gpu"); + if (IS_ERR(clk_gpu)) + { + int retval = PTR_ERR(clk_gpu); + printk("clk_gpu get error: %d\n", retval); + return -ENODEV; + } /* APMU_GC_156M, APMU_GC_624M, APMU_GC_PLL2, APMU_GC_PLL2_DIV2 currently */ - if (clk_set_rate(clk, 624000000)) + if (clk_set_rate(clk_gpu, 312000000)) //designed on 500M { gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DRIVER, "[galcore] Can't set core clock."); return -EAGAIN; } - clk_enable(clk); + clk_enable(clk_gpu); #endif if (showArgs) @@ -579,7 +601,9 @@ static void drv_exit(void) #endif { #if ENABLE_GPU_CLOCK_BY_DRIVER && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28) - struct clk * clk = NULL; + struct clk * clk_gpu = NULL; + struct clk * clk_aclk_gpu = NULL; + struct clk * clk_gpu_ahb = NULL; #endif gcmkTRACE_ZONE(gcvLEVEL_VERBOSE, gcvZONE_DRIVER, "[galcore] Entering drv_exit\n"); @@ -598,8 +622,14 @@ static void drv_exit(void) gckGALDEVICE_Destroy(galDevice); #if ENABLE_GPU_CLOCK_BY_DRIVER && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28) - clk = clk_get(NULL, "GCCLK"); - clk_disable(clk); + clk_gpu = clk_get(NULL, "gpu"); + if(!IS_ERR(clk_gpu)) clk_disable(clk_gpu); + + clk_aclk_gpu = clk_get(NULL, "aclk_gpu"); + if(!IS_ERR(clk_aclk_gpu)) clk_disable(clk_aclk_gpu); + + clk_gpu_ahb = clk_get(NULL, "gpu_ahb"); + if(!IS_ERR(clk_gpu_ahb)) clk_disable(clk_gpu_ahb); #endif } -- 2.34.1