OSDN Git Service

drm/amd/powerplay: enforce display related settings only on needed
authorEvan Quan <evan.quan@amd.com>
Thu, 17 Jan 2019 09:52:41 +0000 (17:52 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 25 Jan 2019 21:15:35 +0000 (16:15 -0500)
No display related settings are needed on dpm level change.

Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c
drivers/gpu/drm/amd/powerplay/hwmgr/pp_psm.c
drivers/gpu/drm/amd/powerplay/hwmgr/pp_psm.h

index 310b102..6cd6497 100644 (file)
@@ -273,7 +273,7 @@ int hwmgr_hw_fini(struct pp_hwmgr *hwmgr)
 
        phm_stop_thermal_controller(hwmgr);
        psm_set_boot_states(hwmgr);
-       psm_adjust_power_state_dynamic(hwmgr, false, NULL);
+       psm_adjust_power_state_dynamic(hwmgr, true, NULL);
        phm_disable_dynamic_state_management(hwmgr);
        phm_disable_clock_power_gatings(hwmgr);
 
@@ -295,7 +295,7 @@ int hwmgr_suspend(struct pp_hwmgr *hwmgr)
        ret = psm_set_boot_states(hwmgr);
        if (ret)
                return ret;
-       ret = psm_adjust_power_state_dynamic(hwmgr, false, NULL);
+       ret = psm_adjust_power_state_dynamic(hwmgr, true, NULL);
        if (ret)
                return ret;
        ret = phm_power_down_asic(hwmgr);
@@ -325,7 +325,7 @@ int hwmgr_resume(struct pp_hwmgr *hwmgr)
        if (ret)
                return ret;
 
-       ret = psm_adjust_power_state_dynamic(hwmgr, false, NULL);
+       ret = psm_adjust_power_state_dynamic(hwmgr, true, NULL);
 
        return ret;
 }
@@ -379,12 +379,12 @@ int hwmgr_handle_task(struct pp_hwmgr *hwmgr, enum amd_pp_task task_id,
                ret = psm_set_user_performance_state(hwmgr, requested_ui_label, &requested_ps);
                if (ret)
                        return ret;
-               ret = psm_adjust_power_state_dynamic(hwmgr, false, requested_ps);
+               ret = psm_adjust_power_state_dynamic(hwmgr, true, requested_ps);
                break;
        }
        case AMD_PP_TASK_COMPLETE_INIT:
        case AMD_PP_TASK_READJUST_POWER_STATE:
-               ret = psm_adjust_power_state_dynamic(hwmgr, false, NULL);
+               ret = psm_adjust_power_state_dynamic(hwmgr, true, NULL);
                break;
        default:
                break;
index 68f3dca..ce177d7 100644 (file)
@@ -256,16 +256,14 @@ static void power_state_management(struct pp_hwmgr *hwmgr,
        }
 }
 
-int psm_adjust_power_state_dynamic(struct pp_hwmgr *hwmgr, bool skip,
+int psm_adjust_power_state_dynamic(struct pp_hwmgr *hwmgr, bool skip_display_settings,
                                                struct pp_power_state *new_ps)
 {
        uint32_t index;
        long workload;
 
-       if (skip)
-               return 0;
-
-       phm_display_configuration_changed(hwmgr);
+       if (!skip_display_settings)
+               phm_display_configuration_changed(hwmgr);
 
        if (hwmgr->ps)
                power_state_management(hwmgr, new_ps);
@@ -276,7 +274,8 @@ int psm_adjust_power_state_dynamic(struct pp_hwmgr *hwmgr, bool skip,
                 */
                phm_apply_clock_adjust_rules(hwmgr);
 
-       phm_notify_smc_display_config_after_ps_adjustment(hwmgr);
+       if (!skip_display_settings)
+               phm_notify_smc_display_config_after_ps_adjustment(hwmgr);
 
        if ((hwmgr->request_dpm_level != hwmgr->dpm_level) &&
            !phm_force_dpm_levels(hwmgr, hwmgr->request_dpm_level))
index fa1b682..b62d55f 100644 (file)
@@ -34,7 +34,7 @@ int psm_set_user_performance_state(struct pp_hwmgr *hwmgr,
                                        enum PP_StateUILabel label_id,
                                        struct pp_power_state **state);
 int psm_adjust_power_state_dynamic(struct pp_hwmgr *hwmgr,
-                               bool skip,
+                               bool skip_display_settings,
                                struct pp_power_state *new_ps);
 
 #endif