aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0922-drm-amdgpu-add-an-interface-to-get-gfx-constants-fro.patch
diff options
context:
space:
mode:
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.patch72
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
+