rk29: pmu_set_power_domain wait power on or off; close more clock
author黄涛 <huangtao@rock-chips.com>
Sat, 25 Dec 2010 05:36:18 +0000 (13:36 +0800)
committer黄涛 <huangtao@rock-chips.com>
Sat, 25 Dec 2010 05:36:18 +0000 (13:36 +0800)
arch/arm/mach-rk29/clock.c
arch/arm/mach-rk29/include/mach/pmu.h
arch/arm/mach-rk29/vpu.c
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_driver.c
drivers/staging/rk29/vivante/hal/os/linux/kernel/gc_hal_kernel_os.c

index cdf713a6562b284bf93b99e8cf2c0349cf10d3f0..1b00f04f61dbd0b0b6f5f1b350545aa53be43e88 100755 (executable)
@@ -2305,11 +2305,6 @@ static void __init rk29_clock_common_init(void)
 
 static void __init clk_enable_init_clocks(void)
 {
-       clk_enable_nolock(&clk_hclk_cpu_display);
-       clk_enable_nolock(&clk_aclk_ddr_gpu);
-       clk_enable_nolock(&clk_hclk_disp_matrix);
-       clk_enable_nolock(&clk_aclk_disp_matrix);
-       clk_enable_nolock(&clk_aclk_ddr_lcdc);
        clk_enable_nolock(&clk_nandc);
        clk_enable_nolock(&clk_aclk_cpu_peri);
        clk_enable_nolock(&clk_aclk_ddr_peri);
@@ -2343,7 +2338,7 @@ static int __init clk_disable_unused(void)
 
        pmu_set_power_domain(PD_VCODEC, false);
 //     pmu_set_power_domain(PD_DISPLAY, false);
-//     pmu_set_power_domain(PD_GPU, false);
+       pmu_set_power_domain(PD_GPU, false);
 
        return 0;
 }
index 779eacfcd1a004445cd6652200c0f8b37e4e317f..da22426fa587395867590876b41a7e0c2b0cdb4f 100644 (file)
@@ -40,6 +40,11 @@ enum pmu_power_domain {
        PD_MINI,
 };
 
+static inline bool pmu_power_domain_is_on(enum pmu_power_domain pd)
+{
+       return !(readl(RK29_PMU_BASE + PMU_PD_ST) & (1 << pd));
+}
+
 static inline void pmu_set_power_domain(enum pmu_power_domain pd, bool on)
 {
        unsigned long flags;
@@ -50,11 +55,9 @@ static inline void pmu_set_power_domain(enum pmu_power_domain pd, bool on)
        else
                writel(readl(RK29_PMU_BASE + PMU_PD_CON) |  (1 << pd), RK29_PMU_BASE + PMU_PD_CON);
        local_irq_restore(flags);
-}
 
-static inline bool pmu_power_domain_is_on(enum pmu_power_domain pd)
-{
-       return !(readl(RK29_PMU_BASE + PMU_PD_ST) & (1 << pd));
+       while (pmu_power_domain_is_on(pd) != on)
+               ;
 }
 
 #endif
index 35ccca7a3e0230e3694f9128e883759eb51484b3..e4c707058f1c56147b909d0a79de69de0e8ab9b4 100644 (file)
@@ -105,11 +105,6 @@ static void vpu_power_on(void)
                return;
        pr_debug("power domain on\n");
        pmu_set_power_domain(PD_VCODEC, true);
-       udelay(10);     // max 5358 ns
-       while (!pmu_power_domain_is_on(PD_VCODEC)) {
-               pr_debug("waiting for on\n");
-               msleep(1);
-       }
        clk_enable(aclk_vepu);
        clk_enable(hclk_vepu);
        clk_enable(aclk_ddr_vepu);
index c09b616eeedb0f00b9e47156b9319728562b719b..36f9dc74575aeab03d135ace40216985c5498a24 100644 (file)
@@ -490,6 +490,8 @@ static int drv_init(void)
     }
     clk_enable(clk_aclk_gpu);    
 
+    clk_enable(clk_get(NULL, "aclk_ddr_gpu"));
+
     // clk_gpu
     clk_gpu = clk_get(NULL, "gpu");
     if (IS_ERR(clk_gpu))
index a56afb5d304e1685c51a0633691fa68f9e51464a..7326be92179971e8099c64c3cbc6a59a71aae1c5 100644 (file)
@@ -5890,16 +5890,19 @@ gckOS_SetGPUPower(
 
     struct clk * clk_gpu = clk_get(NULL, "gpu");
     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");
 
     if(Clock) {
-        if(!IS_ERR(clk_hclk_gpu))   clk_enable(clk_hclk_gpu);
-        if(!IS_ERR(clk_aclk_gpu))   clk_enable(clk_aclk_gpu);
-        if(!IS_ERR(clk_gpu))        clk_enable(clk_gpu);
+        clk_enable(clk_hclk_gpu);
+        clk_enable(clk_aclk_gpu);
+        clk_enable(clk_aclk_ddr_gpu);
+        clk_enable(clk_gpu);
     } else {
-        if(!IS_ERR(clk_gpu))        clk_disable(clk_gpu);
-        if(!IS_ERR(clk_aclk_gpu))   clk_disable(clk_aclk_gpu);
-        if(!IS_ERR(clk_hclk_gpu))   clk_disable(clk_hclk_gpu);
+        clk_disable(clk_gpu);
+        clk_disable(clk_aclk_gpu);
+        clk_disable(clk_aclk_ddr_gpu);
+        clk_disable(clk_hclk_gpu);
     }
 
     if(Power) {