diff options
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.patch | 150 |
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 + |