aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3523-drm-amd-powerplay-add-DPMCLOCKS-table-implementation.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3523-drm-amd-powerplay-add-DPMCLOCKS-table-implementation.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3523-drm-amd-powerplay-add-DPMCLOCKS-table-implementation.patch150
1 files changed, 150 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3523-drm-amd-powerplay-add-DPMCLOCKS-table-implementation.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3523-drm-amd-powerplay-add-DPMCLOCKS-table-implementation.patch
new file mode 100644
index 00000000..e6a0f723
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3523-drm-amd-powerplay-add-DPMCLOCKS-table-implementation.patch
@@ -0,0 +1,150 @@
+From 6604c2d6d5ab826ebc52cd23d7cb1f0a6fb7019a Mon Sep 17 00:00:00 2001
+From: Aaron Liu <aaron.liu@amd.com>
+Date: Tue, 30 Jul 2019 11:28:27 +0800
+Subject: [PATCH 3523/4256] drm/amd/powerplay: add DPMCLOCKS table
+ implementation
+
+This patch adds add DPMCLOCKS table implementation
+Rename smu_populate_smc_pptable to smu_populate_smc_tables
+
+Signed-off-by: Aaron Liu <aaron.liu@amd.com>
+Reviewed-by: Kenneth Feng <kenneth.feng@amd.com>
+Reviewed-by: Evan Quan <evan.quan@amd.com>
+Reviewed-by: Kevin Wang <kevin1.wang@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 2 +-
+ .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 7 ++++---
+ drivers/gpu/drm/amd/powerplay/renoir_ppt.c | 6 ++++++
+ drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 2 +-
+ drivers/gpu/drm/amd/powerplay/smu_v12_0.c | 20 +++++++++++++++++++
+ 5 files changed, 32 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+index 6505690cfa76..ebfd631521c8 100644
+--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
++++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+@@ -1150,7 +1150,7 @@ static int smu_smc_table_hw_init(struct smu_context *smu,
+ * type of clks.
+ */
+ if (initialize) {
+- ret = smu_populate_smc_pptable(smu);
++ ret = smu_populate_smc_tables(smu);
+ if (ret)
+ return ret;
+
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+index 4d156e5ab2e8..c42691a9afd3 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+@@ -253,6 +253,7 @@ struct smu_table_context
+ void *hardcode_pptable;
+ unsigned long metrics_time;
+ void *metrics_table;
++ void *clocks_table;
+
+ void *max_sustainable_clocks;
+ struct smu_bios_boot_up_values boot_values;
+@@ -473,7 +474,7 @@ struct smu_funcs
+ int (*get_clk_info_from_vbios)(struct smu_context *smu);
+ int (*check_pptable)(struct smu_context *smu);
+ int (*parse_pptable)(struct smu_context *smu);
+- int (*populate_smc_pptable)(struct smu_context *smu);
++ int (*populate_smc_tables)(struct smu_context *smu);
+ int (*check_fw_version)(struct smu_context *smu);
+ int (*powergate_sdma)(struct smu_context *smu, bool gate);
+ int (*powergate_vcn)(struct smu_context *smu, bool gate);
+@@ -568,8 +569,8 @@ struct smu_funcs
+ ((smu)->funcs->check_pptable ? (smu)->funcs->check_pptable((smu)) : 0)
+ #define smu_parse_pptable(smu) \
+ ((smu)->funcs->parse_pptable ? (smu)->funcs->parse_pptable((smu)) : 0)
+-#define smu_populate_smc_pptable(smu) \
+- ((smu)->funcs->populate_smc_pptable ? (smu)->funcs->populate_smc_pptable((smu)) : 0)
++#define smu_populate_smc_tables(smu) \
++ ((smu)->funcs->populate_smc_tables ? (smu)->funcs->populate_smc_tables((smu)) : 0)
+ #define smu_check_fw_version(smu) \
+ ((smu)->funcs->check_fw_version ? (smu)->funcs->check_fw_version((smu)) : 0)
+ #define smu_write_pptable(smu) \
+diff --git a/drivers/gpu/drm/amd/powerplay/renoir_ppt.c b/drivers/gpu/drm/amd/powerplay/renoir_ppt.c
+index c8e0d79de43e..de43159564a5 100644
+--- a/drivers/gpu/drm/amd/powerplay/renoir_ppt.c
++++ b/drivers/gpu/drm/amd/powerplay/renoir_ppt.c
+@@ -140,6 +140,8 @@ static int renoir_get_smu_table_index(struct smu_context *smc, uint32_t index)
+
+ static int renoir_tables_init(struct smu_context *smu, struct smu_table *tables)
+ {
++ struct smu_table_context *smu_table = &smu->smu_table;
++
+ SMU_TABLE_INIT(tables, SMU_TABLE_WATERMARKS, sizeof(Watermarks_t),
+ PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);
+ SMU_TABLE_INIT(tables, SMU_TABLE_DPMCLOCKS, sizeof(DpmClocks_t),
+@@ -147,6 +149,10 @@ static int renoir_tables_init(struct smu_context *smu, struct smu_table *tables)
+ SMU_TABLE_INIT(tables, SMU_TABLE_SMU_METRICS, sizeof(SmuMetrics_t),
+ PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);
+
++ smu_table->clocks_table = kzalloc(sizeof(DpmClocks_t), GFP_KERNEL);
++ if (!smu_table->clocks_table)
++ return -ENOMEM;
++
+ return 0;
+ }
+
+diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+index 1ec42903a250..d3500a5ef720 100644
+--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
++++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+@@ -1744,7 +1744,7 @@ static const struct smu_funcs smu_v11_0_funcs = {
+ .notify_memory_pool_location = smu_v11_0_notify_memory_pool_location,
+ .check_pptable = smu_v11_0_check_pptable,
+ .parse_pptable = smu_v11_0_parse_pptable,
+- .populate_smc_pptable = smu_v11_0_populate_smc_pptable,
++ .populate_smc_tables = smu_v11_0_populate_smc_pptable,
+ .write_pptable = smu_v11_0_write_pptable,
+ .write_watermarks_table = smu_v11_0_write_watermarks_table,
+ .set_min_dcef_deep_sleep = smu_v11_0_set_min_dcef_deep_sleep,
+diff --git a/drivers/gpu/drm/amd/powerplay/smu_v12_0.c b/drivers/gpu/drm/amd/powerplay/smu_v12_0.c
+index 76a6c4b7b63c..0f5d08ae71ae 100644
+--- a/drivers/gpu/drm/amd/powerplay/smu_v12_0.c
++++ b/drivers/gpu/drm/amd/powerplay/smu_v12_0.c
+@@ -295,11 +295,30 @@ static int smu_v12_0_fini_smc_tables(struct smu_context *smu)
+ if (!smu_table->tables || smu_table->table_count == 0)
+ return -EINVAL;
+
++ kfree(smu_table->clocks_table);
+ kfree(smu_table->tables);
++
++ smu_table->clocks_table = NULL;
+ smu_table->tables = NULL;
+
+ return 0;
+ }
++
++static int smu_v12_0_populate_smc_tables(struct smu_context *smu)
++{
++ struct smu_table_context *smu_table = &smu->smu_table;
++ struct smu_table *table = NULL;
++
++ table = &smu_table->tables[SMU_TABLE_DPMCLOCKS];
++ if (!table)
++ return -EINVAL;
++
++ if (!table->cpu_addr)
++ return -EINVAL;
++
++ return smu_update_table(smu, SMU_TABLE_DPMCLOCKS, 0, smu_table->clocks_table, false);
++}
++
+ static const struct smu_funcs smu_v12_0_funcs = {
+ .check_fw_status = smu_v12_0_check_fw_status,
+ .check_fw_version = smu_v12_0_check_fw_version,
+@@ -312,6 +331,7 @@ static const struct smu_funcs smu_v12_0_funcs = {
+ .gfx_off_control = smu_v12_0_gfx_off_control,
+ .init_smc_tables = smu_v12_0_init_smc_tables,
+ .fini_smc_tables = smu_v12_0_fini_smc_tables,
++ .populate_smc_tables = smu_v12_0_populate_smc_tables,
+ };
+
+ void smu_v12_0_set_smu_funcs(struct smu_context *smu)
+--
+2.17.1
+