[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