aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0646-drm-amd-powerplay-error-out-when-force-clock-level-u.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0646-drm-amd-powerplay-error-out-when-force-clock-level-u.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0646-drm-amd-powerplay-error-out-when-force-clock-level-u.patch86
1 files changed, 86 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0646-drm-amd-powerplay-error-out-when-force-clock-level-u.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0646-drm-amd-powerplay-error-out-when-force-clock-level-u.patch
new file mode 100644
index 00000000..fb212bb3
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0646-drm-amd-powerplay-error-out-when-force-clock-level-u.patch
@@ -0,0 +1,86 @@
+From f523e7fd00efa8693a8882876c7689d65fb7a1f4 Mon Sep 17 00:00:00 2001
+From: Evan Quan <evan.quan@amd.com>
+Date: Wed, 17 Oct 2018 16:36:02 +0800
+Subject: [PATCH 0646/2940] drm/amd/powerplay: error out when force clock level
+ under auto dpm mode V2
+
+Forcing clock level is supported under manual dpm mode only. Error out
+when trying to set under manual mode. Instead of doing nothing and
+reporting success.
+
+V2: update for mclk/pcie clock level settings also
+
+Signed-off-by: Evan Quan <evan.quan@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 15 ++++++++++++---
+ drivers/gpu/drm/amd/powerplay/amd_powerplay.c | 11 +++++++----
+ 2 files changed, 19 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+index 94055a485e01..59cc678de8c1 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+@@ -704,7 +704,10 @@ static ssize_t amdgpu_set_pp_dpm_sclk(struct device *dev,
+ return ret;
+
+ if (adev->powerplay.pp_funcs->force_clock_level)
+- amdgpu_dpm_force_clock_level(adev, PP_SCLK, mask);
++ ret = amdgpu_dpm_force_clock_level(adev, PP_SCLK, mask);
++
++ if (ret)
++ return -EINVAL;
+
+ return count;
+ }
+@@ -737,7 +740,10 @@ static ssize_t amdgpu_set_pp_dpm_mclk(struct device *dev,
+ return ret;
+
+ if (adev->powerplay.pp_funcs->force_clock_level)
+- amdgpu_dpm_force_clock_level(adev, PP_MCLK, mask);
++ ret = amdgpu_dpm_force_clock_level(adev, PP_MCLK, mask);
++
++ if (ret)
++ return -EINVAL;
+
+ return count;
+ }
+@@ -770,7 +776,10 @@ static ssize_t amdgpu_set_pp_dpm_pcie(struct device *dev,
+ return ret;
+
+ if (adev->powerplay.pp_funcs->force_clock_level)
+- amdgpu_dpm_force_clock_level(adev, PP_PCIE, mask);
++ ret = amdgpu_dpm_force_clock_level(adev, PP_PCIE, mask);
++
++ if (ret)
++ return -EINVAL;
+
+ return count;
+ }
+diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
+index e8964cae6b93..da9ff2cc2777 100644
+--- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
++++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
+@@ -723,11 +723,14 @@ static int pp_dpm_force_clock_level(void *handle,
+ pr_info("%s was not implemented.\n", __func__);
+ return 0;
+ }
++
++ if (hwmgr->dpm_level != AMD_DPM_FORCED_LEVEL_MANUAL) {
++ pr_info("force clock level is for dpm manual mode only.\n");
++ return -EINVAL;
++ }
++
+ mutex_lock(&hwmgr->smu_lock);
+- if (hwmgr->dpm_level == AMD_DPM_FORCED_LEVEL_MANUAL)
+- ret = hwmgr->hwmgr_func->force_clock_level(hwmgr, type, mask);
+- else
+- ret = -EINVAL;
++ ret = hwmgr->hwmgr_func->force_clock_level(hwmgr, type, mask);
+ mutex_unlock(&hwmgr->smu_lock);
+ return ret;
+ }
+--
+2.17.1
+