mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 04:10:18 +09:00
MALI: midgard: RK: not to power off all the pm cores
This is a workaround for the issue that "400M, 500M and 600M of clk_gpu needs high vdd_gpu", according to "6.1" of Mali Application Note "Potential glitches on Power Domain interfaces". Change-Id: I58daa3cf796802f073f67bacb62734516be76205 Signed-off-by: chenzhen <chenzhen@rock-chips.com>
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user