diff options
author | Hawking Zhang <Hawking.Zhang@amd.com> | 2018-09-17 08:19:48 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-09-19 13:37:39 -0400 |
commit | 27e39d3dd365d661b5f6b5b09ad86ee142e11de0 (patch) | |
tree | f645189b4effd175b3cce8e32f43f33986dd1f7c /drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | |
parent | 801281fe09ffc8720336131669a946276e21fe4e (diff) |
drm/amdgpu: fix unknown vram mem type for vega20
vega20 should use umc_info v3_3 instead of v3_1. There are
serveral versions of umc_info for vega series. Compared to
various versions of these structures, vram_info strucure is
unified for vega series. The patch switch to query mem_type
from vram_info structure for all the vega series dGPU.
Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c index 5461d0d55111..b61e1dc61b4c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | |||
@@ -117,6 +117,10 @@ union igp_info { | |||
117 | union umc_info { | 117 | union umc_info { |
118 | struct atom_umc_info_v3_1 v31; | 118 | struct atom_umc_info_v3_1 v31; |
119 | }; | 119 | }; |
120 | |||
121 | union vram_info { | ||
122 | struct atom_vram_info_header_v2_3 v23; | ||
123 | }; | ||
120 | /* | 124 | /* |
121 | * Return vram width from integrated system info table, if available, | 125 | * Return vram width from integrated system info table, if available, |
122 | * or 0 if not. | 126 | * or 0 if not. |
@@ -195,7 +199,7 @@ int amdgpu_atomfirmware_get_vram_type(struct amdgpu_device *adev) | |||
195 | int index; | 199 | int index; |
196 | u16 data_offset, size; | 200 | u16 data_offset, size; |
197 | union igp_info *igp_info; | 201 | union igp_info *igp_info; |
198 | union umc_info *umc_info; | 202 | union vram_info *vram_info; |
199 | u8 frev, crev; | 203 | u8 frev, crev; |
200 | u8 mem_type; | 204 | u8 mem_type; |
201 | 205 | ||
@@ -204,7 +208,7 @@ int amdgpu_atomfirmware_get_vram_type(struct amdgpu_device *adev) | |||
204 | integratedsysteminfo); | 208 | integratedsysteminfo); |
205 | else | 209 | else |
206 | index = get_index_into_master_table(atom_master_list_of_data_tables_v2_1, | 210 | index = get_index_into_master_table(atom_master_list_of_data_tables_v2_1, |
207 | umc_info); | 211 | vram_info); |
208 | if (amdgpu_atom_parse_data_header(mode_info->atom_context, | 212 | if (amdgpu_atom_parse_data_header(mode_info->atom_context, |
209 | index, &size, | 213 | index, &size, |
210 | &frev, &crev, &data_offset)) { | 214 | &frev, &crev, &data_offset)) { |
@@ -219,11 +223,11 @@ int amdgpu_atomfirmware_get_vram_type(struct amdgpu_device *adev) | |||
219 | return 0; | 223 | return 0; |
220 | } | 224 | } |
221 | } else { | 225 | } else { |
222 | umc_info = (union umc_info *) | 226 | vram_info = (union vram_info *) |
223 | (mode_info->atom_context->bios + data_offset); | 227 | (mode_info->atom_context->bios + data_offset); |
224 | switch (crev) { | 228 | switch (crev) { |
225 | case 1: | 229 | case 3: |
226 | mem_type = umc_info->v31.vram_type; | 230 | mem_type = vram_info->v23.vram_module[0].memory_type; |
227 | return convert_atom_mem_type_to_vram_type(adev, mem_type); | 231 | return convert_atom_mem_type_to_vram_type(adev, mem_type); |
228 | default: | 232 | default: |
229 | return 0; | 233 | return 0; |