summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Huang <JinHuiEric.Huang@amd.com>2016-10-06 17:57:40 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-03-29 23:52:49 -0400
commit789fd60fa66ceb74957d58a3a8a3160724fb59b7 (patch)
treeffc4518f48ca31292e74866ad29fe08f2d09725a
parent34bb2734d1bc3c72e4739234481c0efab0941d14 (diff)
drm/amd/powerplay: reapply power profile when force dpm level to auto
Signed-off-by: Eric Huang <JinHuiEric.Huang@amd.com> Acked-by: Rex Zhu <Rex.Zhu@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/hardwaremanager.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/hardwaremanager.c b/drivers/gpu/drm/amd/powerplay/hwmgr/hardwaremanager.c
index 0eb8e886bf35..6013ef119ffb 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/hardwaremanager.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/hardwaremanager.c
@@ -146,12 +146,28 @@ int phm_disable_dynamic_state_management(struct pp_hwmgr *hwmgr)
int phm_force_dpm_levels(struct pp_hwmgr *hwmgr, enum amd_dpm_forced_level level)
{
+ int ret = 0;
+
PHM_FUNC_CHECK(hwmgr);
- if (hwmgr->hwmgr_func->force_dpm_level != NULL)
- return hwmgr->hwmgr_func->force_dpm_level(hwmgr, level);
+ if (hwmgr->hwmgr_func->force_dpm_level != NULL) {
+ ret = hwmgr->hwmgr_func->force_dpm_level(hwmgr, level);
+ if (ret)
+ return ret;
+
+ if (hwmgr->hwmgr_func->set_power_profile_state) {
+ if (hwmgr->current_power_profile == AMD_PP_GFX_PROFILE)
+ ret = hwmgr->hwmgr_func->set_power_profile_state(
+ hwmgr,
+ &hwmgr->gfx_power_profile);
+ else if (hwmgr->current_power_profile == AMD_PP_COMPUTE_PROFILE)
+ ret = hwmgr->hwmgr_func->set_power_profile_state(
+ hwmgr,
+ &hwmgr->compute_power_profile);
+ }
+ }
- return 0;
+ return ret;
}
int phm_apply_state_adjust_rules(struct pp_hwmgr *hwmgr,