diff options
| author | Harry Wentland <harry.wentland@amd.com> | 2017-04-01 03:14:33 +0300 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2017-04-04 21:42:40 +0300 | 
| commit | 1ce65f5284d6018916dd4a86865d0ce5f11d24b9 (patch) | |
| tree | 3338f081ba0e265f3710023945802bf7e11662e0 /drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | |
| parent | 83ca145d155fbd50b9f23b0de99cd16e805a75d0 (diff) | |
| download | linux-1ce65f5284d6018916dd4a86865d0ce5f11d24b9.tar.xz | |
drm/amdgpu: Read vram width from integrated system info table
On KB, KV, CZ we should read the vram width from integrated system
table, if we can. The NOOFCHAN in MC_SHARED_CHMAP is not accurate.
With this change we can enable two 4k displays on CZ again. This use
case was broken sometime in January when we started looking at
vram_width for bandwidth calculations instead of hardcoding this value.
v2:
  Return 0 if integrated system info table is not available.
Tested-by: Roman Li <roman.li@amd.com>
Signed-off-by: Harry Wentland <harry.wentland@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_atombios.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 29 | 
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c index f52b1bf3d3d9..ad4329922f79 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c @@ -754,6 +754,35 @@ union igp_info {  	struct _ATOM_INTEGRATED_SYSTEM_INFO_V1_9 info_9;  }; +/* + * Return vram width from integrated system info table, if available, + * or 0 if not. + */ +int amdgpu_atombios_get_vram_width(struct amdgpu_device *adev) +{ +	struct amdgpu_mode_info *mode_info = &adev->mode_info; +	int index = GetIndexIntoMasterTable(DATA, IntegratedSystemInfo); +	u16 data_offset, size; +	union igp_info *igp_info; +	u8 frev, crev; + +	/* 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 8: +		case 9: +			return igp_info->info_8.ucUMAChannelNumber * 64; +		default: +			return 0; +		} +	} + +	return 0; +} +  static void amdgpu_atombios_get_igp_ss_overrides(struct amdgpu_device *adev,  						 struct amdgpu_atom_ss *ss,  						 int id)  | 
