aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorRex Zhu <Rex.Zhu@amd.com>2018-02-10 23:38:58 -0500
committerAlex Deucher <alexander.deucher@amd.com>2018-02-26 23:09:35 -0500
commit952e5daa2565fc842d90192d2254f3bc1a88920c (patch)
treea0898c6f5f1d06aad849b76baa4e96893d4cfadd /drivers/gpu
parent40d5250dbb468ecf1d4a1aa5f5597358e33de95c (diff)
drm/amd/pp: Fix error handling when smu return failed on Vega10.
Clamp the clock index to a valid range when reading it back 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>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
index 1d442a498bf6..4c53dabb102f 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
@@ -3912,28 +3912,30 @@ static int vega10_read_sensor(struct pp_hwmgr *hwmgr, int idx,
3912 3912
3913 switch (idx) { 3913 switch (idx) {
3914 case AMDGPU_PP_SENSOR_GFX_SCLK: 3914 case AMDGPU_PP_SENSOR_GFX_SCLK:
3915 ret = smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetCurrentGfxclkIndex); 3915 smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetCurrentGfxclkIndex);
3916 if (!ret) { 3916 vega10_read_arg_from_smc(hwmgr, &sclk_idx);
3917 vega10_read_arg_from_smc(hwmgr, &sclk_idx); 3917 if (sclk_idx < dpm_table->gfx_table.count) {
3918 *((uint32_t *)value) = dpm_table->gfx_table.dpm_levels[sclk_idx].value; 3918 *((uint32_t *)value) = dpm_table->gfx_table.dpm_levels[sclk_idx].value;
3919 *size = 4; 3919 *size = 4;
3920 } else {
3921 ret = -EINVAL;
3920 } 3922 }
3921 break; 3923 break;
3922 case AMDGPU_PP_SENSOR_GFX_MCLK: 3924 case AMDGPU_PP_SENSOR_GFX_MCLK:
3923 ret = smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetCurrentUclkIndex); 3925 smum_send_msg_to_smc(hwmgr, PPSMC_MSG_GetCurrentUclkIndex);
3924 if (!ret) { 3926 vega10_read_arg_from_smc(hwmgr, &mclk_idx);
3925 vega10_read_arg_from_smc(hwmgr, &mclk_idx); 3927 if (mclk_idx < dpm_table->mem_table.count) {
3926 *((uint32_t *)value) = dpm_table->mem_table.dpm_levels[mclk_idx].value; 3928 *((uint32_t *)value) = dpm_table->mem_table.dpm_levels[mclk_idx].value;
3927 *size = 4; 3929 *size = 4;
3930 } else {
3931 ret = -EINVAL;
3928 } 3932 }
3929 break; 3933 break;
3930 case AMDGPU_PP_SENSOR_GPU_LOAD: 3934 case AMDGPU_PP_SENSOR_GPU_LOAD:
3931 ret = smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_GetAverageGfxActivity, 0); 3935 smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_GetAverageGfxActivity, 0);
3932 if (!ret) { 3936 vega10_read_arg_from_smc(hwmgr, &activity_percent);
3933 vega10_read_arg_from_smc(hwmgr, &activity_percent); 3937 *((uint32_t *)value) = activity_percent > 100 ? 100 : activity_percent;
3934 *((uint32_t *)value) = activity_percent > 100 ? 100 : activity_percent; 3938 *size = 4;
3935 *size = 4;
3936 }
3937 break; 3939 break;
3938 case AMDGPU_PP_SENSOR_GPU_TEMP: 3940 case AMDGPU_PP_SENSOR_GPU_TEMP:
3939 *((uint32_t *)value) = vega10_thermal_get_temperature(hwmgr); 3941 *((uint32_t *)value) = vega10_thermal_get_temperature(hwmgr);