aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1372-drm-amd-powerplay-implement-get_clk_info_from_vbios-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1372-drm-amd-powerplay-implement-get_clk_info_from_vbios-.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1372-drm-amd-powerplay-implement-get_clk_info_from_vbios-.patch132
1 files changed, 132 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1372-drm-amd-powerplay-implement-get_clk_info_from_vbios-.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1372-drm-amd-powerplay-implement-get_clk_info_from_vbios-.patch
new file mode 100644
index 00000000..a7b419bd
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1372-drm-amd-powerplay-implement-get_clk_info_from_vbios-.patch
@@ -0,0 +1,132 @@
+From c6b3ec0e2dc8ff0ecc8521b69368554a04db92fe Mon Sep 17 00:00:00 2001
+From: Huang Rui <ray.huang@amd.com>
+Date: Mon, 17 Dec 2018 14:56:40 +0800
+Subject: [PATCH 1372/2940] drm/amd/powerplay: implement
+ get_clk_info_from_vbios function for smu11 (v2)
+
+This patch implements the get_clk_info_from_vbios function for smu11.
+We can do execute_vbios_cmd_table to fetch the clk value from vbios.
+
+v2: use the proper cpu_to_le[32|16]() and le[32|16]_to_cpu() macros to handle
+endianness. (Alex)
+
+Signed-off-by: Huang Rui <ray.huang@amd.com>
+Reviewed-by: Kevin Wang <Kevin1.Wang@amd.com>
+Acked-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 8 ++++
+ .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 3 ++
+ drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 39 +++++++++++++++++++
+ 3 files changed, 50 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+index ef377ef0e389..f31b62813256 100644
+--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
++++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
+@@ -248,10 +248,18 @@ static int smu_smc_table_hw_init(struct smu_context *smu)
+ if (ret)
+ return ret;
+
++ ret = smu_get_clk_info_from_vbios(smu);
++ if (ret)
++ return ret;
++
+ /*
+ * check if the format_revision in vbios is up to pptable header
+ * version, and the structure size is not 0.
+ */
++ ret = smu_get_clk_info_from_vbios(smu);
++ if (ret)
++ return ret;
++
+ ret = smu_check_pptable(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 6d0db61179db..57572ff4d496 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
+@@ -98,6 +98,7 @@ struct smu_funcs
+ int (*check_fw_status)(struct smu_context *smu);
+ int (*read_pptable_from_vbios)(struct smu_context *smu);
+ int (*get_vbios_bootup_values)(struct smu_context *smu);
++ 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);
+@@ -132,6 +133,8 @@ struct smu_funcs
+ ((smu)->funcs->read_pptable_from_vbios ? (smu)->funcs->read_pptable_from_vbios((smu)) : 0)
+ #define smu_get_vbios_bootup_values(smu) \
+ ((smu)->funcs->get_vbios_bootup_values ? (smu)->funcs->get_vbios_bootup_values((smu)) : 0)
++#define smu_get_clk_info_from_vbios(smu) \
++ ((smu)->funcs->get_clk_info_from_vbios ? (smu)->funcs->get_clk_info_from_vbios((smu)) : 0)
+ #define smu_check_pptable(smu) \
+ ((smu)->funcs->check_pptable ? (smu)->funcs->check_pptable((smu)) : 0)
+ #define smu_parse_pptable(smu) \
+diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+index f036313153ae..adae5a70368e 100644
+--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
++++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+@@ -30,6 +30,7 @@
+ #include "smu_v11_0_ppsmc.h"
+ #include "smu11_driver_if.h"
+ #include "soc15_common.h"
++#include "atom.h"
+
+ #include "asic_reg/thm/thm_11_0_2_offset.h"
+ #include "asic_reg/thm/thm_11_0_2_sh_mask.h"
+@@ -401,6 +402,43 @@ int smu_v11_0_get_vbios_bootup_values(struct smu_context *smu)
+ return 0;
+ }
+
++static int smu_v11_0_get_clk_info_from_vbios(struct smu_context *smu)
++{
++ int ret, index;
++ struct amdgpu_device *adev = smu->adev;
++ struct atom_get_smu_clock_info_parameters_v3_1 input = {0};
++ struct atom_get_smu_clock_info_output_parameters_v3_1 *output;
++
++ input.clk_id = SMU11_SYSPLL0_SOCCLK_ID;
++ input.command = GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ;
++ index = get_index_into_master_table(atom_master_list_of_command_functions_v2_1,
++ getsmuclockinfo);
++
++ ret = amdgpu_atom_execute_table(adev->mode_info.atom_context, index,
++ (uint32_t *)&input);
++ if (ret)
++ return -EINVAL;
++
++ output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)&input;
++ smu->smu_table.boot_values.socclk = le32_to_cpu(output->atom_smu_outputclkfreq.smu_clock_freq_hz) / 10000;
++
++ memset(&input, 0, sizeof(input));
++ input.clk_id = SMU11_SYSPLL0_DCEFCLK_ID;
++ input.command = GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ;
++ index = get_index_into_master_table(atom_master_list_of_command_functions_v2_1,
++ getsmuclockinfo);
++
++ ret = amdgpu_atom_execute_table(adev->mode_info.atom_context, index,
++ (uint32_t *)&input);
++ if (ret)
++ return -EINVAL;
++
++ output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)&input;
++ smu->smu_table.boot_values.dcefclk = le32_to_cpu(output->atom_smu_outputclkfreq.smu_clock_freq_hz) / 10000;
++
++ return 0;
++}
++
+ static const struct smu_funcs smu_v11_0_funcs = {
+ .init_microcode = smu_v11_0_init_microcode,
+ .load_microcode = smu_v11_0_load_microcode,
+@@ -414,6 +452,7 @@ static const struct smu_funcs smu_v11_0_funcs = {
+ .init_power = smu_v11_0_init_power,
+ .fini_power = smu_v11_0_fini_power,
+ .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values,
++ .get_clk_info_from_vbios = smu_v11_0_get_clk_info_from_vbios,
+ };
+
+ void smu_v11_0_set_smu_funcs(struct smu_context *smu)
+--
+2.17.1
+