diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3115-drm-amd-powerplay-some-cosmetic-fixes.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3115-drm-amd-powerplay-some-cosmetic-fixes.patch | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3115-drm-amd-powerplay-some-cosmetic-fixes.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3115-drm-amd-powerplay-some-cosmetic-fixes.patch new file mode 100644 index 00000000..0c0bb0c7 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3115-drm-amd-powerplay-some-cosmetic-fixes.patch @@ -0,0 +1,142 @@ +From e77ef0f17df1e619e2238d5d9a9301ca7efd9a85 Mon Sep 17 00:00:00 2001 +From: Evan Quan <evan.quan@amd.com> +Date: Tue, 23 Jul 2019 16:23:28 +0800 +Subject: [PATCH 3115/4256] drm/amd/powerplay: some cosmetic fixes + +Drop redundant check, duplicate check, duplicate setting +and fix the return value. + +Change-Id: I04171bcac82f17152371d05e6958d4fc072c0f6b +Signed-off-by: Evan Quan <evan.quan@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 33 +++++++++++----------- + drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 30 ++++++++------------ + 2 files changed, 28 insertions(+), 35 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +index 8f702cf5e080..a68c25203518 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +@@ -314,13 +314,6 @@ static ssize_t amdgpu_set_dpm_forced_performance_level(struct device *dev, + (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) + return -EINVAL; + +- if (!amdgpu_sriov_vf(adev)) { +- if (is_support_sw_smu(adev)) +- current_level = smu_get_performance_level(&adev->smu); +- else if (adev->powerplay.pp_funcs->get_performance_level) +- current_level = amdgpu_dpm_get_performance_level(adev); +- } +- + if (strncmp("low", buf, strlen("low")) == 0) { + level = AMD_DPM_FORCED_LEVEL_LOW; + } else if (strncmp("high", buf, strlen("high")) == 0) { +@@ -344,17 +337,23 @@ static ssize_t amdgpu_set_dpm_forced_performance_level(struct device *dev, + goto fail; + } + +- if (amdgpu_sriov_vf(adev)) { +- if (amdgim_is_hwperf(adev) && +- adev->virt.ops->force_dpm_level) { +- mutex_lock(&adev->pm.mutex); +- adev->virt.ops->force_dpm_level(adev, level); +- mutex_unlock(&adev->pm.mutex); +- return count; +- } else { +- return -EINVAL; ++ /* handle sriov case here */ ++ if (amdgpu_sriov_vf(adev)) { ++ if (amdgim_is_hwperf(adev) && ++ adev->virt.ops->force_dpm_level) { ++ mutex_lock(&adev->pm.mutex); ++ adev->virt.ops->force_dpm_level(adev, level); ++ mutex_unlock(&adev->pm.mutex); ++ return count; ++ } else { ++ return -EINVAL; + } +- } ++ } ++ ++ if (is_support_sw_smu(adev)) ++ current_level = smu_get_performance_level(&adev->smu); ++ else if (adev->powerplay.pp_funcs->get_performance_level) ++ current_level = amdgpu_dpm_get_performance_level(adev); + + if (current_level == level) + return count; +diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c +index 1d2d17aad861..abfb19ebf929 100644 +--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c ++++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c +@@ -1444,6 +1444,7 @@ int smu_adjust_power_state_dynamic(struct smu_context *smu, + + if (!smu->pm_enabled) + return -EINVAL; ++ + if (!skip_display_settings) { + ret = smu_display_config_changed(smu); + if (ret) { +@@ -1452,8 +1453,6 @@ int smu_adjust_power_state_dynamic(struct smu_context *smu, + } + } + +- if (!smu->pm_enabled) +- return -EINVAL; + ret = smu_apply_clocks_adjust_rules(smu); + if (ret) { + pr_err("Failed to apply clocks adjust rules!"); +@@ -1472,9 +1471,14 @@ int smu_adjust_power_state_dynamic(struct smu_context *smu, + ret = smu_asic_set_performance_level(smu, level); + if (ret) { + ret = smu_default_set_performance_level(smu, level); ++ if (ret) { ++ pr_err("Failed to set performance level!"); ++ return ret; ++ } + } +- if (!ret) +- smu_dpm_ctx->dpm_level = level; ++ ++ /* update the saved copy */ ++ smu_dpm_ctx->dpm_level = level; + } + + if (smu_dpm_ctx->dpm_level != AMD_DPM_FORCED_LEVEL_MANUAL) { +@@ -1533,28 +1537,18 @@ enum amd_dpm_forced_level smu_get_performance_level(struct smu_context *smu) + + 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); ++ int ret = 0; + + 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; +- } +- +- +- smu->adev->ip_blocks[i].version->funcs->enable_umd_pstate(smu, &level); +- ret = smu_handle_task(smu, level, +- AMD_PP_TASK_READJUST_POWER_STATE); ++ ret = smu_enable_umd_pstate(smu, &level); + if (ret) + return ret; + +- mutex_lock(&smu->mutex); +- smu_dpm_ctx->dpm_level = level; +- mutex_unlock(&smu->mutex); ++ ret = smu_handle_task(smu, level, ++ AMD_PP_TASK_READJUST_POWER_STATE); + + return ret; + } +-- +2.17.1 + |