diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0922-drm-amdgpu-add-an-interface-to-get-gfx-constants-fro.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0922-drm-amdgpu-add-an-interface-to-get-gfx-constants-fro.patch | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0922-drm-amdgpu-add-an-interface-to-get-gfx-constants-fro.patch b/common/recipes-kernel/linux/files/0922-drm-amdgpu-add-an-interface-to-get-gfx-constants-fro.patch new file mode 100644 index 00000000..bcbd53b6 --- /dev/null +++ b/common/recipes-kernel/linux/files/0922-drm-amdgpu-add-an-interface-to-get-gfx-constants-fro.patch @@ -0,0 +1,72 @@ +From 8df2f9c9f5621578e6313694eafa79453af0ca85 Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Mon, 14 Mar 2016 16:51:24 -0400 +Subject: [PATCH 0922/1110] drm/amdgpu: add an interface to get gfx constants + from atombios + +Fetch the values from atom rather than hardcoding them in the +driver. + +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 30 ++++++++++++++++++++++++++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h | 2 ++ + 2 files changed, 32 insertions(+) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c +index 84b0ce3..6830ed4 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c +@@ -699,6 +699,36 @@ int amdgpu_atombios_get_clock_info(struct amdgpu_device *adev) + return ret; + } + ++union gfx_info { ++ ATOM_GFX_INFO_V2_1 info; ++}; ++ ++int amdgpu_atombios_get_gfx_info(struct amdgpu_device *adev) ++{ ++ struct amdgpu_mode_info *mode_info = &adev->mode_info; ++ int index = GetIndexIntoMasterTable(DATA, GFX_Info); ++ uint8_t frev, crev; ++ uint16_t data_offset; ++ int ret = -EINVAL; ++ ++ if (amdgpu_atom_parse_data_header(mode_info->atom_context, index, NULL, ++ &frev, &crev, &data_offset)) { ++ union gfx_info *gfx_info = (union gfx_info *) ++ (mode_info->atom_context->bios + data_offset); ++ ++ adev->gfx.config.max_shader_engines = gfx_info->info.max_shader_engines; ++ adev->gfx.config.max_tile_pipes = gfx_info->info.max_tile_pipes; ++ adev->gfx.config.max_cu_per_sh = gfx_info->info.max_cu_per_sh; ++ adev->gfx.config.max_sh_per_se = gfx_info->info.max_sh_per_se; ++ adev->gfx.config.max_backends_per_se = gfx_info->info.max_backends_per_se; ++ adev->gfx.config.max_texture_channel_caches = ++ gfx_info->info.max_texture_channel_caches; ++ ++ ret = 0; ++ } ++ return ret; ++} ++ + union igp_info { + struct _ATOM_INTEGRATED_SYSTEM_INFO info; + struct _ATOM_INTEGRATED_SYSTEM_INFO_V2 info_2; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h +index 9e14420..8c2e696 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h +@@ -144,6 +144,8 @@ bool amdgpu_atombios_get_connector_info_from_object_table(struct amdgpu_device * + + int amdgpu_atombios_get_clock_info(struct amdgpu_device *adev); + ++int amdgpu_atombios_get_gfx_info(struct amdgpu_device *adev); ++ + bool amdgpu_atombios_get_asic_ss_info(struct amdgpu_device *adev, + struct amdgpu_atom_ss *ss, + int id, u32 clock); +-- +2.7.4 + |