gpu : add clock manage
author杜坤明 <dkm@rock-chips.com>
Sat, 4 Dec 2010 08:51:09 +0000 (16:51 +0800)
committer杜坤明 <dkm@rock-chips.com>
Sat, 4 Dec 2010 08:51:09 +0000 (16:51 +0800)
arch/arm/mach-rk29/board-rk29sdk.c
drivers/staging/rk29/vivante/Makefile
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c

index 8341b29bb37bd205d47987ec567bfc630bfc1de4..79e712e0a2b9b3f27899ed99e3e9bb452f8e65c9 100755 (executable)
@@ -52,7 +52,7 @@
 \r
 /* Set memory size of pmem */\r
 #define SDRAM_SIZE          SZ_512M\r
-#define PMEM_GPU_SIZE       (12 * SZ_1M)\r
+#define PMEM_GPU_SIZE       SZ_32M\r
 #define PMEM_UI_SIZE        SZ_16M\r
 #define PMEM_VPU_SIZE       SZ_32M\r
 \r
index 7889049712f0c417f6db63e5215a44dd73c797a4..005cd88e5730f0d693dc1e22ed76c4907dcb086c 100644 (file)
@@ -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
index ce27af5c6672bbc0bbdaa659c46d92e6c25f463f..684123cbcb0c24d5db9e6bdb6185ac1b0a6e38ef 100644 (file)
@@ -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
 }