aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2297-drm-amd-powerplay-move-Watermarks_t-uses-into-asic-l.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2297-drm-amd-powerplay-move-Watermarks_t-uses-into-asic-l.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2297-drm-amd-powerplay-move-Watermarks_t-uses-into-asic-l.patch209
1 files changed, 209 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2297-drm-amd-powerplay-move-Watermarks_t-uses-into-asic-l.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2297-drm-amd-powerplay-move-Watermarks_t-uses-into-asic-l.patch
new file mode 100644
index 00000000..c2f80f62
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2297-drm-amd-powerplay-move-Watermarks_t-uses-into-asic-l.patch
@@ -0,0 +1,209 @@
+From f39ea3c7e92446755bb17021f1a7804114e61dc0 Mon Sep 17 00:00:00 2001
+From: Huang Rui <ray.huang@amd.com>
+Date: Sun, 31 Mar 2019 15:15:49 +0800
+Subject: [PATCH 2297/2940] drm/amd/powerplay: move Watermarks_t uses into asic
+ level
+
+This patch moves the rest of Watermarks_t uses into asic level. It's to avoid
+the conflicts with different asic.
+
+Signed-off-by: Huang Rui <ray.huang@amd.com>
+Reviewed-by: Kevin Wang <kevin1.wang@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 4 ++
+ drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 63 +------------------
+ drivers/gpu/drm/amd/powerplay/vega20_ppt.c | 61 ++++++++++++++++++
+ 3 files changed, 67 insertions(+), 61 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+index 7fa03eca4a08..469b2c9e6805 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+@@ -575,6 +575,8 @@ struct pptable_funcs {
+ int (*get_current_activity_percent)(struct smu_context *smu,
+ enum amd_pp_sensors sensor,
+ uint32_t *value);
++ int (*set_watermarks_table)(struct smu_context *smu, void *watermarks,
++ struct dm_pp_wm_sets_with_clock_ranges_soc15 *clock_ranges);
+ };
+
+ struct smu_funcs
+@@ -863,6 +865,8 @@ struct smu_funcs
+ ((smu)->ppt_funcs->set_ppfeature_status ? (smu)->ppt_funcs->set_ppfeature_status((smu), (ppfeatures)) : -EINVAL)
+ #define smu_get_ppfeature_status(smu, buf) \
+ ((smu)->ppt_funcs->get_ppfeature_status ? (smu)->ppt_funcs->get_ppfeature_status((smu), (buf)) : -EINVAL)
++#define smu_set_watermarks_table(smu, tab, clock_ranges) \
++ ((smu)->ppt_funcs->set_watermarks_table ? (smu)->ppt_funcs->set_watermarks_table((smu), (tab), (clock_ranges)) : 0)
+
+ extern int smu_get_atom_data_table(struct smu_context *smu, uint32_t table,
+ uint16_t *size, uint8_t *frev, uint8_t *crev,
+diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+index 103e8bc3a7b9..4620bd578bcd 100644
+--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
++++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+@@ -1401,65 +1401,6 @@ smu_v11_0_display_clock_voltage_request(struct smu_context *smu,
+ return ret;
+ }
+
+-static int smu_v11_0_set_watermarks_table(struct smu_context *smu,
+- Watermarks_t *table, struct
+- dm_pp_wm_sets_with_clock_ranges_soc15
+- *clock_ranges)
+-{
+- int i;
+-
+- if (!table || !clock_ranges)
+- return -EINVAL;
+-
+- if (clock_ranges->num_wm_dmif_sets > 4 ||
+- clock_ranges->num_wm_mcif_sets > 4)
+- return -EINVAL;
+-
+- for (i = 0; i < clock_ranges->num_wm_dmif_sets; i++) {
+- table->WatermarkRow[1][i].MinClock =
+- cpu_to_le16((uint16_t)
+- (clock_ranges->wm_dmif_clocks_ranges[i].wm_min_dcfclk_clk_in_khz /
+- 1000));
+- table->WatermarkRow[1][i].MaxClock =
+- cpu_to_le16((uint16_t)
+- (clock_ranges->wm_dmif_clocks_ranges[i].wm_max_dcfclk_clk_in_khz /
+- 1000));
+- table->WatermarkRow[1][i].MinUclk =
+- cpu_to_le16((uint16_t)
+- (clock_ranges->wm_dmif_clocks_ranges[i].wm_min_mem_clk_in_khz /
+- 1000));
+- table->WatermarkRow[1][i].MaxUclk =
+- cpu_to_le16((uint16_t)
+- (clock_ranges->wm_dmif_clocks_ranges[i].wm_max_mem_clk_in_khz /
+- 1000));
+- table->WatermarkRow[1][i].WmSetting = (uint8_t)
+- clock_ranges->wm_dmif_clocks_ranges[i].wm_set_id;
+- }
+-
+- for (i = 0; i < clock_ranges->num_wm_mcif_sets; i++) {
+- table->WatermarkRow[0][i].MinClock =
+- cpu_to_le16((uint16_t)
+- (clock_ranges->wm_mcif_clocks_ranges[i].wm_min_socclk_clk_in_khz /
+- 1000));
+- table->WatermarkRow[0][i].MaxClock =
+- cpu_to_le16((uint16_t)
+- (clock_ranges->wm_mcif_clocks_ranges[i].wm_max_socclk_clk_in_khz /
+- 1000));
+- table->WatermarkRow[0][i].MinUclk =
+- cpu_to_le16((uint16_t)
+- (clock_ranges->wm_mcif_clocks_ranges[i].wm_min_mem_clk_in_khz /
+- 1000));
+- table->WatermarkRow[0][i].MaxUclk =
+- cpu_to_le16((uint16_t)
+- (clock_ranges->wm_mcif_clocks_ranges[i].wm_max_mem_clk_in_khz /
+- 1000));
+- table->WatermarkRow[0][i].WmSetting = (uint8_t)
+- clock_ranges->wm_mcif_clocks_ranges[i].wm_set_id;
+- }
+-
+- return 0;
+-}
+-
+ static int
+ smu_v11_0_set_watermarks_for_clock_ranges(struct smu_context *smu, struct
+ dm_pp_wm_sets_with_clock_ranges_soc15
+@@ -1467,12 +1408,12 @@ smu_v11_0_set_watermarks_for_clock_ranges(struct smu_context *smu, struct
+ {
+ int ret = 0;
+ struct smu_table *watermarks = &smu->smu_table.tables[SMU_TABLE_WATERMARKS];
+- Watermarks_t *table = watermarks->cpu_addr;
++ void *table = watermarks->cpu_addr;
+
+ if (!smu->disable_watermark &&
+ smu_feature_is_enabled(smu, SMU_FEATURE_DPM_DCEFCLK_BIT) &&
+ smu_feature_is_enabled(smu, SMU_FEATURE_DPM_SOCCLK_BIT)) {
+- smu_v11_0_set_watermarks_table(smu, table, clock_ranges);
++ smu_set_watermarks_table(smu, table, clock_ranges);
+ smu->watermarks_bitmap |= WATERMARKS_EXIST;
+ smu->watermarks_bitmap &= ~WATERMARKS_LOADED;
+ }
+diff --git a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
+index 75c86c4b2ece..ba0175ae247a 100644
+--- a/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/vega20_ppt.c
+@@ -3035,6 +3035,66 @@ static int vega20_get_current_activity_percent(struct smu_context *smu,
+ return 0;
+ }
+
++static int vega20_set_watermarks_table(struct smu_context *smu,
++ void *watermarks, struct
++ dm_pp_wm_sets_with_clock_ranges_soc15
++ *clock_ranges)
++{
++ int i;
++ Watermarks_t *table = watermarks;
++
++ if (!table || !clock_ranges)
++ return -EINVAL;
++
++ if (clock_ranges->num_wm_dmif_sets > 4 ||
++ clock_ranges->num_wm_mcif_sets > 4)
++ return -EINVAL;
++
++ for (i = 0; i < clock_ranges->num_wm_dmif_sets; i++) {
++ table->WatermarkRow[1][i].MinClock =
++ cpu_to_le16((uint16_t)
++ (clock_ranges->wm_dmif_clocks_ranges[i].wm_min_dcfclk_clk_in_khz /
++ 1000));
++ table->WatermarkRow[1][i].MaxClock =
++ cpu_to_le16((uint16_t)
++ (clock_ranges->wm_dmif_clocks_ranges[i].wm_max_dcfclk_clk_in_khz /
++ 1000));
++ table->WatermarkRow[1][i].MinUclk =
++ cpu_to_le16((uint16_t)
++ (clock_ranges->wm_dmif_clocks_ranges[i].wm_min_mem_clk_in_khz /
++ 1000));
++ table->WatermarkRow[1][i].MaxUclk =
++ cpu_to_le16((uint16_t)
++ (clock_ranges->wm_dmif_clocks_ranges[i].wm_max_mem_clk_in_khz /
++ 1000));
++ table->WatermarkRow[1][i].WmSetting = (uint8_t)
++ clock_ranges->wm_dmif_clocks_ranges[i].wm_set_id;
++ }
++
++ for (i = 0; i < clock_ranges->num_wm_mcif_sets; i++) {
++ table->WatermarkRow[0][i].MinClock =
++ cpu_to_le16((uint16_t)
++ (clock_ranges->wm_mcif_clocks_ranges[i].wm_min_socclk_clk_in_khz /
++ 1000));
++ table->WatermarkRow[0][i].MaxClock =
++ cpu_to_le16((uint16_t)
++ (clock_ranges->wm_mcif_clocks_ranges[i].wm_max_socclk_clk_in_khz /
++ 1000));
++ table->WatermarkRow[0][i].MinUclk =
++ cpu_to_le16((uint16_t)
++ (clock_ranges->wm_mcif_clocks_ranges[i].wm_min_mem_clk_in_khz /
++ 1000));
++ table->WatermarkRow[0][i].MaxUclk =
++ cpu_to_le16((uint16_t)
++ (clock_ranges->wm_mcif_clocks_ranges[i].wm_max_mem_clk_in_khz /
++ 1000));
++ table->WatermarkRow[0][i].WmSetting = (uint8_t)
++ clock_ranges->wm_mcif_clocks_ranges[i].wm_set_id;
++ }
++
++ return 0;
++}
++
+ static const struct pptable_funcs vega20_ppt_funcs = {
+ .tables_init = vega20_tables_init,
+ .alloc_dpm_context = vega20_allocate_dpm_context,
+@@ -3082,6 +3142,7 @@ static const struct pptable_funcs vega20_ppt_funcs = {
+ .get_fan_speed_percent = vega20_get_fan_speed_percent,
+ .get_gpu_power= vega20_get_gpu_power,
+ .get_current_activity_percent = vega20_get_current_activity_percent,
++ .set_watermarks_table = vega20_set_watermarks_table,
+ };
+
+ void vega20_set_ppt_funcs(struct smu_context *smu)
+--
+2.17.1
+