aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3115-drm-amd-powerplay-some-cosmetic-fixes.patch
diff options
context:
space:
mode:
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.patch142
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
+