diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1371-drm-amd-powerplay-implement-get_vbios_bootup_values-.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1371-drm-amd-powerplay-implement-get_vbios_bootup_values-.patch | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1371-drm-amd-powerplay-implement-get_vbios_bootup_values-.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/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/meta-amd-bsp/recipes-kernel/linux-4.19/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 + |