diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/2157-drm-amdgpu-query-vram_width-from-vram_info-table.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/2157-drm-amdgpu-query-vram_width-from-vram_info-table.patch | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/2157-drm-amdgpu-query-vram_width-from-vram_info-table.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/2157-drm-amdgpu-query-vram_width-from-vram_info-table.patch new file mode 100644 index 00000000..28360e41 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/2157-drm-amdgpu-query-vram_width-from-vram_info-table.patch @@ -0,0 +1,84 @@ +From b538423db09a40be66d04f870e4b3438828bb54c Mon Sep 17 00:00:00 2001 +From: Hawking Zhang <Hawking.Zhang@amd.com> +Date: Tue, 11 Dec 2018 07:12:16 +0800 +Subject: [PATCH 2157/2940] drm/amdgpu: query vram_width from vram_info table + +Driver will get channel_number and channel_width from +vram_info table, then calculate vram_width by multiply +channel_number by channel_width + +Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Reviewed-by: Jack Xiao <Jack.Xiao@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 46 +++++++++++++++---- + 1 file changed, 37 insertions(+), 9 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c +index 410118df16ed..606ed819f355 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c +@@ -127,22 +127,50 @@ union vram_info { + int amdgpu_atomfirmware_get_vram_width(struct amdgpu_device *adev) + { + struct amdgpu_mode_info *mode_info = &adev->mode_info; +- int index = get_index_into_master_table(atom_master_list_of_data_tables_v2_1, +- integratedsysteminfo); ++ int index; + u16 data_offset, size; + union igp_info *igp_info; ++ union vram_info *vram_info; ++ u32 mem_channel_number; ++ u32 mem_channel_width; + u8 frev, crev; + ++ if (adev->flags & AMD_IS_APU) ++ index = get_index_into_master_table(atom_master_list_of_data_tables_v2_1, ++ integratedsysteminfo); ++ else ++ index = get_index_into_master_table(atom_master_list_of_data_tables_v2_1, ++ vram_info); ++ + /* get any igp specific overrides */ + if (amdgpu_atom_parse_data_header(mode_info->atom_context, index, &size, + &frev, &crev, &data_offset)) { +- igp_info = (union igp_info *) +- (mode_info->atom_context->bios + data_offset); +- switch (crev) { +- case 11: +- return igp_info->v11.umachannelnumber * 64; +- default: +- return 0; ++ if (adev->flags & AMD_IS_APU) { ++ igp_info = (union igp_info *) ++ (mode_info->atom_context->bios + data_offset); ++ switch (crev) { ++ case 11: ++ mem_channel_number = igp_info->v11.umachannelnumber; ++ /* channel width is 64 */ ++ return mem_channel_number * 64; ++ default: ++ return 0; ++ } ++ } else { ++ vram_info = (union vram_info *) ++ (mode_info->atom_context->bios + data_offset); ++ switch (crev) { ++ case 3: ++ mem_channel_number = vram_info->v23.vram_module[0].channel_num; ++ mem_channel_width = vram_info->v23.vram_module[0].channel_width; ++ return mem_channel_number * (1 << mem_channel_width); ++ case 4: ++ mem_channel_number = vram_info->v24.vram_module[0].channel_num; ++ mem_channel_width = vram_info->v24.vram_module[0].channel_width; ++ return mem_channel_number * (1 << mem_channel_width); ++ default: ++ return 0; ++ } + } + } + +-- +2.17.1 + |