[PATCH] drm/amdgpu: fix vram type and bandwidth error for DDR5 and DDR4
Alex Deucher
alexdeucher at gmail.com
Wed Jan 13 15:26:45 UTC 2021
On Wed, Jan 13, 2021 at 7:30 AM Huang Rui <ray.huang at amd.com> wrote:
>
> This patch is to update atomfirmware parser for the memory type and
> bandwidth of DDR5 and DDR4.
>
> Signed-off-by: Huang Rui <ray.huang at amd.com>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 53 +++++++++++++------
> 1 file changed, 36 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> index 306077884a67..6107ac91db25 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> @@ -112,6 +112,7 @@ int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev)
> union igp_info {
> struct atom_integrated_system_info_v1_11 v11;
> struct atom_integrated_system_info_v1_12 v12;
> + struct atom_integrated_system_info_v2_1 v21;
> };
>
> union umc_info {
> @@ -209,24 +210,42 @@ amdgpu_atomfirmware_get_vram_info(struct amdgpu_device *adev,
> 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 */
> - if (vram_width)
> - *vram_width = mem_channel_number * 64;
> - mem_type = igp_info->v11.memorytype;
> - if (vram_type)
> - *vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type);
> + switch (frev) {
> + case 1:
> + switch (crev) {
> + case 11:
> + case 12:
> + mem_channel_number = igp_info->v11.umachannelnumber;
> + if (!mem_channel_number)
> + mem_channel_number = 1;
> + /* channel width is 64 */
> + if (vram_width)
> + *vram_width = mem_channel_number * 64;
> + mem_type = igp_info->v11.memorytype;
> + if (vram_type)
> + *vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type);
> + break;
> + default:
> + return -EINVAL;
> + }
> break;
> - case 12:
> - mem_channel_number = igp_info->v12.umachannelnumber;
> - /* channel width is 64 */
> - if (vram_width)
> - *vram_width = mem_channel_number * 64;
> - mem_type = igp_info->v12.memorytype;
> - if (vram_type)
> - *vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type);
> + case 2:
> + switch (crev) {
> + case 1:
> + case 2:
> + mem_channel_number = igp_info->v21.umachannelnumber;
> + if (!mem_channel_number)
> + mem_channel_number = 1;
> + /* channel width is 64 */
> + if (vram_width)
> + *vram_width = mem_channel_number * 64;
> + mem_type = igp_info->v21.memorytype;
> + if (vram_type)
> + *vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type);
> + break;
> + default:
> + return -EINVAL;
> + }
> break;
> default:
> return -EINVAL;
> --
> 2.25.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list