OSDN Git Service

drm/amd/pp: Restore power profile mode in auto dpm level on Vega10
authorRex Zhu <Rex.Zhu@amd.com>
Fri, 2 Feb 2018 09:13:02 +0000 (17:13 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 19 Feb 2018 19:19:46 +0000 (14:19 -0500)
As auto power profile mode still not support on vega10, so
just restore default profile mode in auto dpm level.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
drivers/gpu/drm/amd/powerplay/inc/hwmgr.h

index d0c8ba0..03a93b0 100644 (file)
@@ -761,6 +761,7 @@ static int vega10_hwmgr_backend_init(struct pp_hwmgr *hwmgr)
        hwmgr->backend = data;
 
        hwmgr->power_profile_mode = PP_SMC_POWER_PROFILE_VIDEO;
+       hwmgr->default_power_profile_mode = PP_SMC_POWER_PROFILE_VIDEO;
 
        vega10_set_default_registry_data(hwmgr);
 
@@ -4232,6 +4233,11 @@ static int vega10_dpm_force_dpm_level(struct pp_hwmgr *hwmgr,
                break;
        case AMD_DPM_FORCED_LEVEL_AUTO:
                ret = vega10_unforce_dpm_levels(hwmgr);
+               if (hwmgr->default_power_profile_mode != hwmgr->power_profile_mode) {
+                               smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_SetWorkloadMask,
+                                               1 << hwmgr->default_power_profile_mode);
+                               hwmgr->power_profile_mode = hwmgr->default_power_profile_mode;
+               }
                break;
        case AMD_DPM_FORCED_LEVEL_PROFILE_STANDARD:
        case AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK:
@@ -4255,6 +4261,7 @@ static int vega10_dpm_force_dpm_level(struct pp_hwmgr *hwmgr,
                else if (level != AMD_DPM_FORCED_LEVEL_PROFILE_PEAK && hwmgr->dpm_level == AMD_DPM_FORCED_LEVEL_PROFILE_PEAK)
                        vega10_set_fan_control_mode(hwmgr, AMD_FAN_CTRL_AUTO);
        }
+
        return ret;
 }
 
@@ -5072,9 +5079,6 @@ static int vega10_set_power_profile_mode(struct pp_hwmgr *hwmgr, long *input, ui
        uint8_t use_rlc_busy;
        uint8_t min_active_level;
 
-       if (input[size] == PP_SMC_POWER_PROFILE_AUTO)
-               return 0; /* TO DO auto wattman feature not enabled */
-
        hwmgr->power_profile_mode = input[size];
 
        smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_SetWorkloadMask,
index c0f9cea..2a59ee8 100644 (file)
@@ -757,6 +757,7 @@ struct pp_hwmgr {
        enum amd_pp_profile_type current_power_profile;
        bool en_umd_pstate;
        uint32_t power_profile_mode;
+       uint32_t default_power_profile_mode;
        uint32_t pstate_sclk;
        uint32_t pstate_mclk;
        bool od_enabled;