aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1371-drm-amd-powerplay-implement-get_vbios_bootup_values-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1371-drm-amd-powerplay-implement-get_vbios_bootup_values-.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1371-drm-amd-powerplay-implement-get_vbios_bootup_values-.patch98
1 files changed, 98 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1371-drm-amd-powerplay-implement-get_vbios_bootup_values-.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1371-drm-amd-powerplay-implement-get_vbios_bootup_values-.patch
new file mode 100644
index 00000000..663af623
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1371-drm-amd-powerplay-implement-get_vbios_bootup_values-.patch
@@ -0,0 +1,98 @@
+From 61d32df2e0de3bd632cd6f6ca824d5a00881d131 Mon Sep 17 00:00:00 2001
+From: Huang Rui <ray.huang@amd.com>
+Date: Mon, 17 Dec 2018 10:25:30 +0800
+Subject: [PATCH 1371/2940] drm/amd/powerplay: implement
+ get_vbios_bootup_values function for smu11 (v2)
+
+This patch implements get_vbios_bootup_values function for smu11 to fetach
+firmwareinfo member from atombios.
+
+v2: use switch statement based on the content revision (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/smu_v11_0.c | 59 +++++++++++++++++++++++
+ 1 file changed, 59 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+index a68d0a090d68..f036313153ae 100644
+--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
++++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
+@@ -343,6 +343,64 @@ static int smu_v11_0_fini_power(struct smu_context *smu)
+ return 0;
+ }
+
++int smu_v11_0_get_vbios_bootup_values(struct smu_context *smu)
++{
++ int ret, index;
++ uint16_t size;
++ uint8_t frev, crev;
++ struct atom_common_table_header *header;
++ struct atom_firmware_info_v3_3 *v_3_3;
++ struct atom_firmware_info_v3_1 *v_3_1;
++
++ index = get_index_into_master_table(atom_master_list_of_data_tables_v2_1,
++ firmwareinfo);
++
++ ret = smu_get_atom_data_table(smu, index, &size, &frev, &crev,
++ (uint8_t **)&header);
++ if (ret)
++ return ret;
++
++ if (header->format_revision != 3) {
++ pr_err("unknown atom_firmware_info version! for smu11\n");
++ return -EINVAL;
++ }
++
++ switch (header->content_revision) {
++ case 0:
++ case 1:
++ case 2:
++ v_3_1 = (struct atom_firmware_info_v3_1 *)header;
++ smu->smu_table.boot_values.revision = v_3_1->firmware_revision;
++ smu->smu_table.boot_values.gfxclk = v_3_1->bootup_sclk_in10khz;
++ smu->smu_table.boot_values.uclk = v_3_1->bootup_mclk_in10khz;
++ smu->smu_table.boot_values.socclk = 0;
++ smu->smu_table.boot_values.dcefclk = 0;
++ smu->smu_table.boot_values.vddc = v_3_1->bootup_vddc_mv;
++ smu->smu_table.boot_values.vddci = v_3_1->bootup_vddci_mv;
++ smu->smu_table.boot_values.mvddc = v_3_1->bootup_mvddc_mv;
++ smu->smu_table.boot_values.vdd_gfx = v_3_1->bootup_vddgfx_mv;
++ smu->smu_table.boot_values.cooling_id = v_3_1->coolingsolution_id;
++ smu->smu_table.boot_values.pp_table_id = 0;
++ break;
++ case 3:
++ default:
++ v_3_3 = (struct atom_firmware_info_v3_3 *)header;
++ smu->smu_table.boot_values.revision = v_3_3->firmware_revision;
++ smu->smu_table.boot_values.gfxclk = v_3_3->bootup_sclk_in10khz;
++ smu->smu_table.boot_values.uclk = v_3_3->bootup_mclk_in10khz;
++ smu->smu_table.boot_values.socclk = 0;
++ smu->smu_table.boot_values.dcefclk = 0;
++ smu->smu_table.boot_values.vddc = v_3_3->bootup_vddc_mv;
++ smu->smu_table.boot_values.vddci = v_3_3->bootup_vddci_mv;
++ smu->smu_table.boot_values.mvddc = v_3_3->bootup_mvddc_mv;
++ smu->smu_table.boot_values.vdd_gfx = v_3_3->bootup_vddgfx_mv;
++ smu->smu_table.boot_values.cooling_id = v_3_3->coolingsolution_id;
++ smu->smu_table.boot_values.pp_table_id = v_3_3->pplib_pptable_id;
++ }
++
++ 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,
+@@ -355,6 +413,7 @@ static const struct smu_funcs smu_v11_0_funcs = {
+ .fini_smc_tables = smu_v11_0_fini_smc_tables,
+ .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,
+ };
+
+ void smu_v11_0_set_smu_funcs(struct smu_context *smu)
+--
+2.17.1
+