diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/kv_dpm.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/kv_dpm.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c index f5a343cb0010..13f323745729 100644 --- a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c | |||
@@ -3260,6 +3260,39 @@ static int kv_check_state_equal(struct amdgpu_device *adev, | |||
3260 | return 0; | 3260 | return 0; |
3261 | } | 3261 | } |
3262 | 3262 | ||
3263 | static int kv_dpm_read_sensor(struct amdgpu_device *adev, int idx, | ||
3264 | void *value, int *size) | ||
3265 | { | ||
3266 | struct kv_power_info *pi = kv_get_pi(adev); | ||
3267 | uint32_t sclk; | ||
3268 | u32 pl_index = | ||
3269 | (RREG32_SMC(ixTARGET_AND_CURRENT_PROFILE_INDEX) & | ||
3270 | TARGET_AND_CURRENT_PROFILE_INDEX__CURR_SCLK_INDEX_MASK) >> | ||
3271 | TARGET_AND_CURRENT_PROFILE_INDEX__CURR_SCLK_INDEX__SHIFT; | ||
3272 | |||
3273 | /* size must be at least 4 bytes for all sensors */ | ||
3274 | if (*size < 4) | ||
3275 | return -EINVAL; | ||
3276 | |||
3277 | switch (idx) { | ||
3278 | case AMDGPU_PP_SENSOR_GFX_SCLK: | ||
3279 | if (pl_index < SMU__NUM_SCLK_DPM_STATE) { | ||
3280 | sclk = be32_to_cpu( | ||
3281 | pi->graphics_level[pl_index].SclkFrequency); | ||
3282 | *((uint32_t *)value) = sclk; | ||
3283 | *size = 4; | ||
3284 | return 0; | ||
3285 | } | ||
3286 | return -EINVAL; | ||
3287 | case AMDGPU_PP_SENSOR_GPU_TEMP: | ||
3288 | *((uint32_t *)value) = kv_dpm_get_temp(adev); | ||
3289 | *size = 4; | ||
3290 | return 0; | ||
3291 | default: | ||
3292 | return -EINVAL; | ||
3293 | } | ||
3294 | } | ||
3295 | |||
3263 | const struct amd_ip_funcs kv_dpm_ip_funcs = { | 3296 | const struct amd_ip_funcs kv_dpm_ip_funcs = { |
3264 | .name = "kv_dpm", | 3297 | .name = "kv_dpm", |
3265 | .early_init = kv_dpm_early_init, | 3298 | .early_init = kv_dpm_early_init, |
@@ -3292,6 +3325,7 @@ static const struct amdgpu_dpm_funcs kv_dpm_funcs = { | |||
3292 | .enable_bapm = &kv_dpm_enable_bapm, | 3325 | .enable_bapm = &kv_dpm_enable_bapm, |
3293 | .get_vce_clock_state = amdgpu_get_vce_clock_state, | 3326 | .get_vce_clock_state = amdgpu_get_vce_clock_state, |
3294 | .check_state_equal = kv_check_state_equal, | 3327 | .check_state_equal = kv_check_state_equal, |
3328 | .read_sensor = &kv_dpm_read_sensor, | ||
3295 | }; | 3329 | }; |
3296 | 3330 | ||
3297 | static void kv_dpm_set_dpm_funcs(struct amdgpu_device *adev) | 3331 | static void kv_dpm_set_dpm_funcs(struct amdgpu_device *adev) |