aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2380-drm-amd-powerplay-move-power_dpm_force_performance_l.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2380-drm-amd-powerplay-move-power_dpm_force_performance_l.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2380-drm-amd-powerplay-move-power_dpm_force_performance_l.patch164
1 files changed, 164 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2380-drm-amd-powerplay-move-power_dpm_force_performance_l.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2380-drm-amd-powerplay-move-power_dpm_force_performance_l.patch
new file mode 100644
index 00000000..f4840a49
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2380-drm-amd-powerplay-move-power_dpm_force_performance_l.patch
@@ -0,0 +1,164 @@
+From 29bae31795faacf35e29a0b2bf13346c877d012f Mon Sep 17 00:00:00 2001
+From: Kevin Wang <kevin1.wang@amd.com>
+Date: Wed, 15 May 2019 12:59:58 +0800
+Subject: [PATCH 2380/2940] 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>
+---
+ drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 41 ++++++++++++++++++
+ .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 8 +---
+ drivers/gpu/drm/amd/powerplay/vega20_ppt.c | 42 -------------------
+ 3 files changed, 43 insertions(+), 48 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+index cff17a2ddca3..bca863e80398 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,
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+index 69c33d707d8f..4706eaf39cf7 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+@@ -570,8 +570,6 @@ struct pptable_funcs {
+ *clocks);
+ int (*get_power_profile_mode)(struct smu_context *smu, char *buf);
+ int (*set_power_profile_mode)(struct smu_context *smu, long *input, uint32_t size);
+- enum amd_dpm_forced_level (*get_performance_level)(struct smu_context *smu);
+- int (*force_performance_level)(struct smu_context *smu, enum amd_dpm_forced_level level);
+ int (*dpm_set_uvd_enable)(struct smu_context *smu, bool enable);
+ int (*dpm_set_vce_enable)(struct smu_context *smu, bool enable);
+ int (*read_sensor)(struct smu_context *smu, enum amd_pp_sensors sensor,
+@@ -798,10 +796,6 @@ struct smu_funcs
+ ((smu)->ppt_funcs->get_power_profile_mode ? (smu)->ppt_funcs->get_power_profile_mode((smu), buf) : 0)
+ #define smu_set_power_profile_mode(smu, param, param_size) \
+ ((smu)->ppt_funcs->set_power_profile_mode ? (smu)->ppt_funcs->set_power_profile_mode((smu), (param), (param_size)) : 0)
+-#define smu_get_performance_level(smu) \
+- ((smu)->ppt_funcs->get_performance_level ? (smu)->ppt_funcs->get_performance_level((smu)) : 0)
+-#define smu_force_performance_level(smu, level) \
+- ((smu)->ppt_funcs->force_performance_level ? (smu)->ppt_funcs->force_performance_level((smu), (level)) : 0)
+ #define smu_pre_display_config_changed(smu) \
+ ((smu)->ppt_funcs->pre_display_config_changed ? (smu)->ppt_funcs->pre_display_config_changed((smu)) : 0)
+ #define smu_display_config_changed(smu) \
+@@ -939,4 +933,6 @@ int smu_set_soft_freq_range(struct smu_context *smu, enum smu_clk_type clk_type,
+ uint32_t min, uint32_t max);
+ int smu_set_hard_freq_range(struct smu_context *smu, enum smu_clk_type clk_type,
+ uint32_t min, uint32_t max);
++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);
+ #endif
+diff --git a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
+index 53e8b59f8879..81fb5b5d76be 100644
+--- a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
+@@ -2334,46 +2334,6 @@ static int vega20_unforce_dpm_levels(struct smu_context *smu)
+ return ret;
+ }
+
+-static enum amd_dpm_forced_level vega20_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;
+-
+- if (smu_dpm_ctx->dpm_level != smu_dpm_ctx->saved_dpm_level) {
+- mutex_lock(&(smu->mutex));
+- smu_dpm_ctx->saved_dpm_level = smu_dpm_ctx->dpm_level;
+- mutex_unlock(&(smu->mutex));
+- }
+- return smu_dpm_ctx->dpm_level;
+-}
+-
+-static int
+-vega20_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;
+-}
+-
+ static int vega20_update_specified_od8_value(struct smu_context *smu,
+ uint32_t index,
+ uint32_t value)
+@@ -3129,8 +3089,6 @@ static const struct pptable_funcs vega20_ppt_funcs = {
+ .get_od_percentage = vega20_get_od_percentage,
+ .get_power_profile_mode = vega20_get_power_profile_mode,
+ .set_power_profile_mode = vega20_set_power_profile_mode,
+- .get_performance_level = vega20_get_performance_level,
+- .force_performance_level = vega20_force_performance_level,
+ .update_specified_od8_value = vega20_update_specified_od8_value,
+ .set_od_percentage = vega20_set_od_percentage,
+ .od_edit_dpm_table = vega20_odn_edit_dpm_table,
+--
+2.17.1
+