gpu midgard : add pd_gpu support
authorxxm <xxm@rock-chips.com>
Thu, 17 Apr 2014 01:09:30 +0000 (09:09 +0800)
committerCody Xie <Cody.Xie@rock-chips.com>
Thu, 17 Apr 2014 06:47:08 +0000 (14:47 +0800)
drivers/gpu/arm/midgard/platform/rk/mali_kbase_config_rk.c
drivers/gpu/arm/midgard/platform/rk/mali_kbase_platform.c
drivers/gpu/arm/midgard/platform/rk/mali_kbase_platform.h

index 15c6708c863e85c87381e9b8226d48af01d44624..880bba6ddd6db5d27d1abc789785e551db0a494d 100755 (executable)
@@ -33,7 +33,7 @@ int get_cpu_clock_speed(u32 *cpu_clock);
 
 #define HZ_IN_MHZ                           (1000000)
 #ifdef CONFIG_MALI_MIDGARD_RT_PM
-#define RUNTIME_PM_DELAY_TIME 100
+#define RUNTIME_PM_DELAY_TIME 50
 #endif
 
 /* Versatile Express (VE) configuration defaults shared between config_attributes[]
@@ -165,7 +165,6 @@ static int pm_callback_power_on(kbase_device *kbdev)
        int ret_val;
        struct device *dev = kbdev->dev;
        struct rk_context *platform;
-
        platform = (struct rk_context *)kbdev->platform_context;
 
        if (pm_runtime_status_suspended(dev))
@@ -215,6 +214,8 @@ static int pm_callback_runtime_on(kbase_device *kbdev)
 #ifdef CONFIG_MALI_MIDGARD_DVFS        
        struct rk_context *platform = (struct rk_context *)kbdev->platform_context;
 #endif
+       kbase_platform_power_on(kbdev);
+
        kbase_platform_clock_on(kbdev);
 #ifdef CONFIG_MALI_MIDGARD_DVFS
        if (platform->dvfs_enabled) {
@@ -232,6 +233,7 @@ static int pm_callback_runtime_on(kbase_device *kbdev)
 static void pm_callback_runtime_off(kbase_device *kbdev)
 {
        kbase_platform_clock_off(kbdev);
+       kbase_platform_power_off(kbdev);
 #ifdef CONFIG_MALI_MIDGARD_DVFS
        if (kbase_platform_dvfs_enable(false, p_mali_dvfs_infotbl[0].clock)!= MALI_TRUE)
                printk("[err] disabling dvfs is faled\n");
index 544b09d388bdd28c7cdde292b12a1de57108668e..6abcd2ccd4b63a892d49e58031a0372e4c085af5 100755 (executable)
@@ -74,17 +74,17 @@ static int kbase_platform_power_clock_init(kbase_device *kbdev)
                panic("oops");
        
        /* enable mali t760 powerdomain*/       
-       platform->mali_pd_node = clk_get_dvfs_node("mali_pd");
-       if(IS_ERR_OR_NULL(platform->mali_pd_node))
+       platform->mali_pd = clk_get(NULL,"pd_gpu");
+       if(IS_ERR_OR_NULL(platform->mali_pd))
        {
-               platform->mali_pd_node = NULL;
-               printk(KERN_ERR "%s, %s(): failed to get [platform->mali_pd_node]\n", __FILE__, __func__);
-               //goto out;
+               platform->mali_pd = NULL;
+               printk(KERN_ERR "%s, %s(): failed to get [platform->mali_pd]\n", __FILE__, __func__);
+               goto out;
        }
        else
        {
-               //dvfs_clk_prepare_enable(platform->mali_pd_node);
-               printk("pd not enable\n");
+               clk_prepare_enable(platform->mali_pd);
+               printk("mali pd enabled\n");
        }
        mali_pd_status = 1;
        
@@ -107,8 +107,8 @@ static int kbase_platform_power_clock_init(kbase_device *kbdev)
        return 0;
        
 out:
-       if(platform->mali_pd_node)
-               clk_put_dvfs_node(platform->mali_pd_node);
+       if(platform->mali_pd)
+               clk_put(platform->mali_pd);
        
        return -EPERM;
 
@@ -160,7 +160,7 @@ int kbase_platform_is_power_on(void)
 }
 
 /*turn on power domain*/
-static int kbase_platform_power_on(struct kbase_device *kbdev)
+int kbase_platform_power_on(struct kbase_device *kbdev)
 {
        struct rk_context *platform;
        if (!kbdev)
@@ -172,9 +172,9 @@ static int kbase_platform_power_on(struct kbase_device *kbdev)
 
        if (mali_pd_status == 1)
                return 0;
-#if 0  
-       if(platform->mali_pd_node)
-               dvfs_clk_prepare_enable(platform->mali_pd_node);
+#if 1  
+       if(platform->mali_pd)
+               clk_prepare_enable(platform->mali_pd);
 #endif
        mali_pd_status = 1;
        KBASE_TIMELINE_GPU_POWER(kbdev, 1);
@@ -183,7 +183,7 @@ static int kbase_platform_power_on(struct kbase_device *kbdev)
 }
 
 /*turn off power domain*/
-static int kbase_platform_power_off(struct kbase_device *kbdev)
+int kbase_platform_power_off(struct kbase_device *kbdev)
 {
        struct rk_context *platform;
        if (!kbdev)
@@ -195,9 +195,9 @@ static int kbase_platform_power_off(struct kbase_device *kbdev)
 
        if (mali_pd_status== 0)
                return 0;
-#if 0
-       if(platform->mali_pd_node)
-               dvfs_clk_disable_unprepare(platform->mali_pd_node);
+#if 1
+       if(platform->mali_pd)
+               clk_disable_unprepare(platform->mali_pd);
 #endif
        mali_pd_status = 0;
        KBASE_TIMELINE_GPU_POWER(kbdev, 0);
index 28399a8f2f5eb0b85c0b933c83efcc2cc335bce5..ce017f08a291047bfafb1ff1f858ee48dc83a5b7 100755 (executable)
@@ -22,7 +22,7 @@ struct rk_context {
        struct clk *clk_mali;
        struct clk *mali_pd;
 #if 1
-       struct dvfs_node * mali_pd_node;
+       struct clk * mali_pd_node;
        struct dvfs_node * mali_clk_node;
 #endif
 #ifdef CONFIG_MALI_MIDGARD_DVFS
@@ -46,5 +46,7 @@ void kbase_platform_term(kbase_device *kbdev);
 
 int kbase_platform_clock_on(struct kbase_device *kbdev);
 int kbase_platform_clock_off(struct kbase_device *kbdev);
+int kbase_platform_power_off(struct kbase_device *kbdev);
+int kbase_platform_power_on(struct kbase_device *kbdev);
 
 #endif                         /* _KBASE_PLATFORM_H_ */