aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3990-drm-amd-powerplay-update-the-interface-for-getting-d.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3990-drm-amd-powerplay-update-the-interface-for-getting-d.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3990-drm-amd-powerplay-update-the-interface-for-getting-d.patch154
1 files changed, 154 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3990-drm-amd-powerplay-update-the-interface-for-getting-d.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3990-drm-amd-powerplay-update-the-interface-for-getting-d.patch
new file mode 100644
index 00000000..ecaab429
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3990-drm-amd-powerplay-update-the-interface-for-getting-d.patch
@@ -0,0 +1,154 @@
+From 449dd12af5033c7dd89c0f9664baf47273c03827 Mon Sep 17 00:00:00 2001
+From: Prike Liang <Prike.Liang@amd.com>
+Date: Wed, 25 Sep 2019 17:48:56 +0800
+Subject: [PATCH 3990/4256] drm/amd/powerplay: update the interface for getting
+ dpm full scale clock frequency
+
+Update get_dpm_uclk_limited to get more clock type full scale dpm frequency.
+
+Signed-off-by: Prike Liang <Prike.Liang@amd.com>
+Reviewed-by: Evan Quan <evan.quan@amd.com>
+---
+ .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 7 +++--
+ drivers/gpu/drm/amd/powerplay/renoir_ppt.c | 16 ++++-------
+ drivers/gpu/drm/amd/powerplay/smu_v12_0.c | 28 ++++++++++++++++---
+ 3 files changed, 34 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+index 504d6487c3d2..ccf711c327c8 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+@@ -466,7 +466,8 @@ struct pptable_funcs {
+ int (*display_disable_memory_clock_switch)(struct smu_context *smu, bool disable_memory_clock_switch);
+ void (*dump_pptable)(struct smu_context *smu);
+ int (*get_power_limit)(struct smu_context *smu, uint32_t *limit, bool asic_default);
+- int (*get_dpm_uclk_limited)(struct smu_context *smu, uint32_t *clock, bool max);
++ int (*get_dpm_clk_limited)(struct smu_context *smu, enum smu_clk_type clk_type,
++ uint32_t dpm_level, uint32_t *freq);
+ };
+
+ struct smu_funcs
+@@ -775,8 +776,8 @@ struct smu_funcs
+ ((smu)->ppt_funcs->set_performance_level? (smu)->ppt_funcs->set_performance_level((smu), (level)) : -EINVAL);
+ #define smu_dump_pptable(smu) \
+ ((smu)->ppt_funcs->dump_pptable ? (smu)->ppt_funcs->dump_pptable((smu)) : 0)
+-#define smu_get_dpm_uclk_limited(smu, clock, max) \
+- ((smu)->ppt_funcs->get_dpm_uclk_limited ? (smu)->ppt_funcs->get_dpm_uclk_limited((smu), (clock), (max)) : -EINVAL)
++#define smu_get_dpm_clk_limited(smu, clk_type, dpm_level, freq) \
++ ((smu)->ppt_funcs->get_dpm_clk_limited ? (smu)->ppt_funcs->get_dpm_clk_limited((smu), (clk_type), (dpm_level), (freq)) : -EINVAL)
+
+ #define smu_set_soft_freq_limited_range(smu, clk_type, min, max) \
+ ((smu)->funcs->set_soft_freq_limited_range ? (smu)->funcs->set_soft_freq_limited_range((smu), (clk_type), (min), (max)) : -EINVAL)
+diff --git a/drivers/gpu/drm/amd/powerplay/renoir_ppt.c b/drivers/gpu/drm/amd/powerplay/renoir_ppt.c
+index c11f8d74b7f8..6aedffd739db 100644
+--- a/drivers/gpu/drm/amd/powerplay/renoir_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/renoir_ppt.c
+@@ -160,21 +160,17 @@ static int renoir_tables_init(struct smu_context *smu, struct smu_table *tables)
+ * This interface just for getting uclk ultimate freq and should't introduce
+ * other likewise function result in overmuch callback.
+ */
+-static int renoir_get_dpm_uclk_limited(struct smu_context *smu, uint32_t *clock, bool max)
++static int renoir_get_dpm_clk_limited(struct smu_context *smu, enum smu_clk_type clk_type,
++ uint32_t dpm_level, uint32_t *freq)
+ {
++ DpmClocks_t *clk_table = smu->smu_table.clocks_table;
+
+- DpmClocks_t *table = smu->smu_table.clocks_table;
+-
+- if (!clock || !table)
++ if (!clk_table || clk_type >= SMU_CLK_COUNT)
+ return -EINVAL;
+
+- if (max)
+- *clock = table->FClocks[NUM_FCLK_DPM_LEVELS-1].Freq;
+- else
+- *clock = table->FClocks[0].Freq;
++ GET_DPM_CUR_FREQ(clk_table, clk_type, dpm_level, *freq);
+
+ return 0;
+-
+ }
+
+ static int renoir_print_clk_levels(struct smu_context *smu,
+@@ -555,7 +551,7 @@ static const struct pptable_funcs renoir_ppt_funcs = {
+ .get_smu_table_index = renoir_get_smu_table_index,
+ .tables_init = renoir_tables_init,
+ .set_power_state = NULL,
+- .get_dpm_uclk_limited = renoir_get_dpm_uclk_limited,
++ .get_dpm_clk_limited = renoir_get_dpm_clk_limited,
+ .print_clk_levels = renoir_print_clk_levels,
+ .get_current_power_state = renoir_get_current_power_state,
+ .dpm_set_uvd_enable = renoir_dpm_set_uvd_enable,
+diff --git a/drivers/gpu/drm/amd/powerplay/smu_v12_0.c b/drivers/gpu/drm/amd/powerplay/smu_v12_0.c
+index d3563f0c44e9..c9691d0fb523 100644
+--- a/drivers/gpu/drm/amd/powerplay/smu_v12_0.c
++++ b/drivers/gpu/drm/amd/powerplay/smu_v12_0.c
+@@ -323,10 +323,18 @@ static int smu_v12_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk
+ uint32_t *min, uint32_t *max)
+ {
+ int ret = 0;
++ uint32_t mclk_mask, soc_mask;
+
+ mutex_lock(&smu->mutex);
+
+ if (max) {
++ ret = smu_get_profiling_clk_mask(smu, AMD_DPM_FORCED_LEVEL_PROFILE_PEAK,
++ NULL,
++ &mclk_mask,
++ &soc_mask);
++ if (ret)
++ goto failed;
++
+ switch (clk_type) {
+ case SMU_GFXCLK:
+ case SMU_SCLK:
+@@ -340,14 +348,20 @@ static int smu_v12_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk
+ goto failed;
+ break;
+ case SMU_UCLK:
+- ret = smu_get_dpm_uclk_limited(smu, max, true);
++ case SMU_FCLK:
++ case SMU_MCLK:
++ ret = smu_get_dpm_clk_limited(smu, clk_type, mclk_mask, max);
++ if (ret)
++ goto failed;
++ break;
++ case SMU_SOCCLK:
++ ret = smu_get_dpm_clk_limited(smu, clk_type, soc_mask, max);
+ if (ret)
+ goto failed;
+ break;
+ default:
+ ret = -EINVAL;
+ goto failed;
+-
+ }
+ }
+
+@@ -365,7 +379,14 @@ static int smu_v12_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk
+ goto failed;
+ break;
+ case SMU_UCLK:
+- ret = smu_get_dpm_uclk_limited(smu, min, false);
++ case SMU_FCLK:
++ case SMU_MCLK:
++ ret = smu_get_dpm_clk_limited(smu, clk_type, 0, min);
++ if (ret)
++ goto failed;
++ break;
++ case SMU_SOCCLK:
++ ret = smu_get_dpm_clk_limited(smu, clk_type, 0, min);
+ if (ret)
+ goto failed;
+ break;
+@@ -373,7 +394,6 @@ static int smu_v12_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk
+ ret = -EINVAL;
+ goto failed;
+ }
+-
+ }
+ failed:
+ mutex_unlock(&smu->mutex);
+--
+2.17.1
+