update gpu_shutdown & gpu_suspend
author杜坤明 <dkm@rockchip.com>
Fri, 4 Mar 2011 02:31:43 +0000 (10:31 +0800)
committer杜坤明 <dkm@rockchip.com>
Fri, 4 Mar 2011 02:31:43 +0000 (10:31 +0800)
drivers/staging/rk29/vivante/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c
drivers/staging/rk29/vivante/hal/inc/gc_hal.h [changed mode: 0644->0755]
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c [changed mode: 0755->0644]
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c

index 59516271291e824c3f218068b9aad0a979a5fbad..d323357d5a56bc38b4a27d62a131a6aed95d368a 100755 (executable)
@@ -2618,7 +2618,8 @@ gckHARDWARE_GetIdle(
     pollCount = Wait ? 100 : 1;
 
     /* At most, try for 1 second. */
-    for (retry = 0; retry < 1000; ++retry)
+    //for (retry = 0; retry < 1000; ++retry)
+    for (retry = 0; retry < 100; ++retry)
     {
         /* If we have to wait, try 100 polls per millisecond. */
         for (poll = pollCount; poll > 0; --poll)
@@ -2916,13 +2917,15 @@ gckHARDWARE_SetPowerManagementState(
         },
 
         /* gcvPOWER_SUSPEND      */
-        {   /* ON                */ gcvPOWER_FLAG_START   |
+        {   /* ON                */ gcvPOWER_FLAG_INITIALIZE |
+                                    gcvPOWER_FLAG_START   |
                                     gcvPOWER_FLAG_RELEASE |
                                     gcvPOWER_FLAG_DELAY,
             /* OFF               */ gcvPOWER_FLAG_SAVE |
                                     gcvPOWER_FLAG_OFF  |
                                     gcvPOWER_FLAG_CLOCK_OFF,
-            /* IDLE              */ gcvPOWER_FLAG_START |
+            /* IDLE              */ gcvPOWER_FLAG_INITIALIZE |
+                                    gcvPOWER_FLAG_START |
                                     gcvPOWER_FLAG_DELAY,
             /* SUSPEND           */ 0,
         },
old mode 100644 (file)
new mode 100755 (executable)
index bc46f3b..861f65e
@@ -24,6 +24,7 @@
 #ifndef __gc_hal_h_
 #define __gc_hal_h_
 
+#include <linux/kernel.h>
 #include "gc_hal_types.h"
 #include "gc_hal_enum.h"
 #include "gc_hal_base.h"
old mode 100755 (executable)
new mode 100644 (file)
index e2b3d9d..261c73a
@@ -702,6 +702,8 @@ static void drv_exit(void)
     gckGALDEVICE_Destroy(galDevice);
 
 #if ENABLE_GPU_CLOCK_BY_DRIVER && LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)
+    printk("gpu: %s clk_disable... ", __func__);
+
     clk_gpu = clk_get(NULL, "gpu");
     if(!IS_ERR(clk_gpu))    clk_disable(clk_gpu);
   
@@ -710,6 +712,8 @@ static void drv_exit(void)
 
     clk_hclk_gpu = clk_get(NULL, "hclk_gpu");
     if(!IS_ERR(clk_hclk_gpu))    clk_disable(clk_hclk_gpu);
+    
+    printk("done!\n");
 #endif
 }
 
@@ -786,7 +790,7 @@ static int __devinit gpu_suspend(struct platform_device *dev, pm_message_t state
 
        device = platform_get_drvdata(dev);
 
-       status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_OFF);
+       status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_SUSPEND);
 
        if (gcmIS_ERROR(status))
        {
@@ -794,6 +798,8 @@ static int __devinit gpu_suspend(struct platform_device *dev, pm_message_t state
                return -1;
        }
 
+       printk("Exit %s \n", __func__);
+
        return 0;
 }
 
@@ -806,7 +812,7 @@ static int __devinit gpu_resume(struct platform_device *dev)
 
        device = platform_get_drvdata(dev);
 
-       status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_ON);
+       status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_IDLE);
 
        if (gcmIS_ERROR(status))
        {
@@ -814,24 +820,16 @@ static int __devinit gpu_resume(struct platform_device *dev)
                return -1;
        }
 
+       printk("Exit %s \n", __func__);
+    
        return 0;
 }
 
 static void __devinit gpu_shutdown(struct platform_device *dev)
 {
-       gceSTATUS status;
-       gckGALDEVICE device;
-    
     printk("Enter %s \n", __func__);
-
-       device = platform_get_drvdata(dev);
-
-       status = gckHARDWARE_SetPowerManagementState(device->kernel->hardware, gcvPOWER_OFF);
-
-       if (gcmIS_ERROR(status))
-       {
-           printk("%s fail!\n", __func__);
-       }
+    drv_exit();
+    printk("Exit %s \n", __func__);
 }
 
 static struct platform_driver gpu_driver = {
index 3e22d03bfe5a020619bdf62373b1efab539b2a6f..e4ceae57234fba0839d1c373f59a21c0a1bfe593 100755 (executable)
@@ -5932,48 +5932,56 @@ gckOS_SetGPUPower(
     struct clk * clk_aclk_gpu = clk_get(NULL, "aclk_gpu");
     struct clk * clk_aclk_ddr_gpu = clk_get(NULL, "aclk_ddr_gpu");
     struct clk * clk_hclk_gpu = clk_get(NULL, "hclk_gpu");
+    static int lastpower = 0;
 
-    printk("---------- Enter gckOS_SetGPUPowerOs=0x%p Clock=%d Power=%d \n", (void*)Os, Clock, Power);
+    //printk("---------- gckOS_SetGPUPower Clock=%d Power=%d \n", Clock, Power);
 
+    mdelay(1);
     if(Clock) {
-        printk("---------- start gpu clk_enable...\n");
+        printk("gpu: clk_enable... ");
         clk_enable(clk_hclk_gpu);
         clk_enable(clk_aclk_gpu);
         clk_enable(clk_aclk_ddr_gpu);
         clk_enable(clk_gpu);
-        printk("---------- end gpu clk_enable!\n");
+        printk("done!\n");
     } else {
-        printk("---------- start gpu clk_disable...\n");
+        printk("gpu: clk_disable... ");
         clk_disable(clk_gpu);
         clk_disable(clk_aclk_gpu);
         clk_disable(clk_aclk_ddr_gpu);
         clk_disable(clk_hclk_gpu);
-        printk("---------- end gpu clk_disable!\n");
+        printk("done!\n");
     }
+    mdelay(1);
 
     if(Power) {
-        unsigned long flags;
-        printk("---------- start gpu power_domain on...\n");
-        mdelay(10);
-        local_irq_save(flags);
-        mdelay(5);
-        pmu_set_power_domain(PD_GPU, true);
-        mdelay(10);
-        local_irq_restore(flags);
-        printk("---------- end gpu power_domain on!\n");
-
-        /* disable gpu' reset bit */
-        cru_set_soft_reset(SOFT_RST_DDR_GPU_PORT, false);
-        cru_set_soft_reset(SOFT_RST_GPU, false);
+        if(lastpower != Power) {
+            printk("gpu: power on... ");
+            pmu_set_power_domain(PD_GPU, true);
+            printk("done!\n");
+
+            printk("gpu: reset... ");
+            mdelay(1);
+            cru_set_soft_reset(SOFT_RST_GPU, true);
+            cru_set_soft_reset(SOFT_RST_DDR_GPU_PORT, true);
+            mdelay(2);
+            cru_set_soft_reset(SOFT_RST_DDR_GPU_PORT, false);
+            cru_set_soft_reset(SOFT_RST_GPU, false);
+            mdelay(1);
+            cru_set_soft_reset(SOFT_RST_GPU, true);
+            cru_set_soft_reset(SOFT_RST_DDR_GPU_PORT, true);
+            mdelay(2);
+            cru_set_soft_reset(SOFT_RST_DDR_GPU_PORT, false);
+            cru_set_soft_reset(SOFT_RST_GPU, false);
+            mdelay(1);
+            printk("done!\n");
+        }
     } else {
-        //printk("---------- start gpu power_domain off...\n");
+        //printk("gpu: power off... ");
         //pmu_set_power_domain(PD_GPU, false);
-        //printk("---------- end gpu power_domain off!\n");
-
-        /* enable gpu' reset bit */
-        cru_set_soft_reset(SOFT_RST_GPU, true);
-        cru_set_soft_reset(SOFT_RST_DDR_GPU_PORT, true);
+        //printk("done!\n");
     }
+    lastpower = Power;
 
 #endif