Revert "Revert "MALI: midgard: RK: not to power off all the pm cores""
authorchenzhen <chenzhen@rock-chips.com>
Fri, 30 Dec 2016 11:56:52 +0000 (19:56 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Mon, 20 Feb 2017 06:27:12 +0000 (14:27 +0800)
This reverts commit d94880b547779baaaa9e9b733c38881cad8aa685.

Change-Id: Iac64d84ff5a7ee3e5666ed2829c17de413fc9bcd
Signed-off-by: chenzhen <chenzhen@rock-chips.com>
drivers/gpu/arm/midgard/backend/gpu/mali_kbase_pm_driver.c

index 046ebcb7b50849a592e3c075604df9e85c23d3ee..03ba23d54365113ac26bc85ea17c5701fe31ea4a 100644 (file)
@@ -21,6 +21,9 @@
  * Base kernel Power Management hardware control
  */
 
+// #define ENABLE_DEBUG_LOG
+#include "../../platform/rk/custom_log.h"
+
 #include <mali_kbase.h>
 #include <mali_kbase_config_defaults.h>
 #include <mali_midg_regmap.h>
@@ -71,6 +74,26 @@ enum kbasep_pm_action {
        ACTION_PWRACTIVE = (SHADER_PWRACTIVE_LO - SHADER_PRESENT_LO)
 };
 
+/*---------------------------------------------------------------------------*/
+
+static bool is_action_of_powering_off_l2(enum kbase_pm_core_type core_type,
+                                        enum kbasep_pm_action active)
+{
+       return (KBASE_PM_CORE_L2 == core_type) && (ACTION_PWROFF  == active);
+}
+
+static bool is_action_of_powering_off_shader(enum kbase_pm_core_type core_type,
+                                            enum kbasep_pm_action active)
+{
+       return (KBASE_PM_CORE_SHADER == core_type) && (ACTION_PWROFF  == active);
+}
+
+static bool is_action_of_powering_off_tiler(enum kbase_pm_core_type core_type,
+                                           enum kbasep_pm_action active)
+{
+       return (KBASE_PM_CORE_TILER == core_type) && (ACTION_PWROFF  == active);
+}
+
 static u64 kbase_pm_get_state(
                struct kbase_device *kbdev,
                enum kbase_pm_core_type core_type,
@@ -153,6 +176,25 @@ static void kbase_pm_invoke(struct kbase_device *kbdev,
 
        lockdep_assert_held(&kbdev->pm.power_change_lock);
 
+       /*-------------------------------------------------------*/
+
+       if ( is_action_of_powering_off_l2(core_type, action) ) {
+               D("not to power off l2 actually.");
+               return;
+       }
+       if ( is_action_of_powering_off_shader(core_type, action) ) {
+               D("not to power off shader actually. cores_lo : 0x%x, hi : 0x%x.",
+                 lo,
+                 hi);
+               return;
+       }
+       if ( is_action_of_powering_off_tiler(core_type, action) ) {
+               D("not to power off tiler actually.");
+               return;
+       }
+
+       /*-------------------------------------------------------*/
+
        reg = core_type_to_reg(core_type, action);
 
        KBASE_DEBUG_ASSERT(reg);