diff options
author | Kevin Wang | 2019-05-15 06:59:58 +0200 |
---|---|---|
committer | Alex Deucher | 2019-06-22 01:59:31 +0200 |
commit | a38470f0f8dcd639262d7e2eeaa26b8e0947d811 (patch) | |
tree | ddc5d843d1c0d84bc50f21cffc8024e2fe250bc5 /drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | |
parent | drm/amd/powerplay: enable uclk dpm default on navi10 (diff) | |
download | kernel-qcow2-linux-a38470f0f8dcd639262d7e2eeaa26b8e0947d811.tar.gz kernel-qcow2-linux-a38470f0f8dcd639262d7e2eeaa26b8e0947d811.tar.xz kernel-qcow2-linux-a38470f0f8dcd639262d7e2eeaa26b8e0947d811.zip |
drm/amd/powerplay: move power_dpm_force_performance_level to amdgpu_smu file
because this callback is not asic related function, so move it to top
code level to support more asic (eg: navi10)
Signed-off-by: Kevin Wang <kevin1.wang@amd.com>
Reviewed-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/powerplay/amdgpu_smu.c')
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c index 6a6f36006f80..7d1d91975705 100644 --- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c +++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c @@ -1404,6 +1404,47 @@ int smu_handle_task(struct smu_context *smu, return ret; } +enum amd_dpm_forced_level smu_get_performance_level(struct smu_context *smu) +{ + struct smu_dpm_context *smu_dpm_ctx = &(smu->smu_dpm); + + if (!smu_dpm_ctx->dpm_context) + return -EINVAL; + + mutex_lock(&(smu->mutex)); + if (smu_dpm_ctx->dpm_level != smu_dpm_ctx->saved_dpm_level) { + smu_dpm_ctx->saved_dpm_level = smu_dpm_ctx->dpm_level; + } + mutex_unlock(&(smu->mutex)); + + return smu_dpm_ctx->dpm_level; +} + +int smu_force_performance_level(struct smu_context *smu, enum amd_dpm_forced_level level) +{ + int ret = 0; + int i; + struct smu_dpm_context *smu_dpm_ctx = &(smu->smu_dpm); + + if (!smu_dpm_ctx->dpm_context) + return -EINVAL; + + for (i = 0; i < smu->adev->num_ip_blocks; i++) { + if (smu->adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) + break; + } + + mutex_lock(&smu->mutex); + + smu->adev->ip_blocks[i].version->funcs->enable_umd_pstate(smu, &level); + ret = smu_handle_task(smu, level, + AMD_PP_TASK_READJUST_POWER_STATE); + + mutex_unlock(&smu->mutex); + + return ret; +} + const struct amd_ip_funcs smu_ip_funcs = { .name = "smu", .early_init = smu_early_init, |