aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3669-drm-amd-powerplay-guard-manual-mode-prerequisite-for.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3669-drm-amd-powerplay-guard-manual-mode-prerequisite-for.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3669-drm-amd-powerplay-guard-manual-mode-prerequisite-for.patch92
1 files changed, 92 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3669-drm-amd-powerplay-guard-manual-mode-prerequisite-for.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3669-drm-amd-powerplay-guard-manual-mode-prerequisite-for.patch
new file mode 100644
index 00000000..50f5a3db
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3669-drm-amd-powerplay-guard-manual-mode-prerequisite-for.patch
@@ -0,0 +1,92 @@
+From fac4d902a25b294c4a595c7c20c2c76f932c504d Mon Sep 17 00:00:00 2001
+From: Evan Quan <evan.quan@amd.com>
+Date: Fri, 30 Aug 2019 17:30:46 +0800
+Subject: [PATCH 3669/4256] drm/amd/powerplay: guard manual mode prerequisite
+ for clock level force
+
+Force clock level is for dpm manual mode only.
+
+Change-Id: I3b4caf3fafc72197d65e2b9255c68e40e673e25e
+Reported-by: Candice Li <candice.li@amd.com>
+Signed-off-by: Evan Quan <evan.quan@amd.com>
+Acked-by: Alex Deucher <alexander.deucher@amd.com>
+Reviewed-by: Jack Gui <Jack.Gui@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 18 ++++++++++++++++++
+ drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 5 +++--
+ drivers/gpu/drm/amd/powerplay/vega20_ppt.c | 6 ------
+ 3 files changed, 21 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+index a9cce9985d16..04731351b194 100644
+--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
++++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+@@ -1756,6 +1756,24 @@ int smu_set_display_count(struct smu_context *smu, uint32_t count)
+ return ret;
+ }
+
++int smu_force_clk_levels(struct smu_context *smu,
++ enum smu_clk_type clk_type,
++ uint32_t mask)
++{
++ struct smu_dpm_context *smu_dpm_ctx = &(smu->smu_dpm);
++ int ret = 0;
++
++ if (smu_dpm_ctx->dpm_level != AMD_DPM_FORCED_LEVEL_MANUAL) {
++ pr_debug("force clock level is for dpm manual mode only.\n");
++ return -EINVAL;
++ }
++
++ if (smu->ppt_funcs && smu->ppt_funcs->force_clk_levels)
++ ret = smu->ppt_funcs->force_clk_levels(smu, clk_type, mask);
++
++ return ret;
++}
++
+ const struct amd_ip_funcs smu_ip_funcs = {
+ .name = "smu",
+ .early_init = smu_early_init,
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+index 32cd2074178d..83e35c990300 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+@@ -634,8 +634,6 @@ struct smu_funcs
+ ((smu)->funcs->get_current_clk_freq? (smu)->funcs->get_current_clk_freq((smu), (clk_id), (value)) : 0)
+ #define smu_print_clk_levels(smu, clk_type, buf) \
+ ((smu)->ppt_funcs->print_clk_levels ? (smu)->ppt_funcs->print_clk_levels((smu), (clk_type), (buf)) : 0)
+-#define smu_force_clk_levels(smu, clk_type, level) \
+- ((smu)->ppt_funcs->force_clk_levels ? (smu)->ppt_funcs->force_clk_levels((smu), (clk_type), (level)) : 0)
+ #define smu_get_od_percentage(smu, type) \
+ ((smu)->ppt_funcs->get_od_percentage ? (smu)->ppt_funcs->get_od_percentage((smu), (type)) : 0)
+ #define smu_set_od_percentage(smu, type, value) \
+@@ -833,5 +831,8 @@ const char *smu_get_message_name(struct smu_context *smu, enum smu_message_type
+ const char *smu_get_feature_name(struct smu_context *smu, enum smu_feature_mask feature);
+ size_t smu_sys_get_pp_feature_mask(struct smu_context *smu, char *buf);
+ int smu_sys_set_pp_feature_mask(struct smu_context *smu, uint64_t new_mask);
++int smu_force_clk_levels(struct smu_context *smu,
++ enum smu_clk_type clk_type,
++ uint32_t mask);
+
+ #endif
+diff --git a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
+index 68548ba9b6ea..18d1b432f719 100644
+--- a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
+@@ -1274,14 +1274,8 @@ static int vega20_force_clk_levels(struct smu_context *smu,
+ struct vega20_dpm_table *dpm_table;
+ struct vega20_single_dpm_table *single_dpm_table;
+ uint32_t soft_min_level, soft_max_level, hard_min_level;
+- struct smu_dpm_context *smu_dpm = &smu->smu_dpm;
+ int ret = 0;
+
+- if (smu_dpm->dpm_level != AMD_DPM_FORCED_LEVEL_MANUAL) {
+- pr_info("force clock level is for dpm manual mode only.\n");
+- return -EINVAL;
+- }
+-
+ mutex_lock(&(smu->mutex));
+
+ soft_min_level = mask ? (ffs(mask) - 1) : 0;
+--
+2.17.1
+