]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amd/display: Support parsing VRAM info v3.0 from VBIOS
authorGeorge Shen <george.shen@amd.com>
Wed, 2 Nov 2022 19:06:48 +0000 (15:06 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 26 Nov 2022 08:27:43 +0000 (09:27 +0100)
commit 7e952a18eb978a3e51fc1704b752378be66226b2 upstream.

[Why]
For DCN3.2 and DCN3.21, VBIOS has switch to using v3.0 of the VRAM
info struct. We should read and override the VRAM info in driver with
values provided by VBIOS to support memory downbin cases.

Reviewed-by: Alvin Lee <Alvin.Lee2@amd.com>
Acked-by: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: George Shen <george.shen@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org # 6.0.x
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c

index 09fbb7ad536298a61e2b433a0eeb5edf2d2c63cb..de3a1f3fd4f1a56ac2e39022a84999e3627a478a 100644 (file)
@@ -2392,6 +2392,26 @@ static enum bp_result get_vram_info_v25(
        return result;
 }
 
+static enum bp_result get_vram_info_v30(
+       struct bios_parser *bp,
+       struct dc_vram_info *info)
+{
+       struct atom_vram_info_header_v3_0 *info_v30;
+       enum bp_result result = BP_RESULT_OK;
+
+       info_v30 = GET_IMAGE(struct atom_vram_info_header_v3_0,
+                                               DATA_TABLES(vram_info));
+
+       if (info_v30 == NULL)
+               return BP_RESULT_BADBIOSTABLE;
+
+       info->num_chans = info_v30->channel_num;
+       info->dram_channel_width_bytes = (1 << info_v30->channel_width) / 8;
+
+       return result;
+}
+
+
 /*
  * get_integrated_info_v11
  *
@@ -3025,6 +3045,16 @@ static enum bp_result bios_parser_get_vram_info(
                        }
                        break;
 
+               case 3:
+                       switch (revision.minor) {
+                       case 0:
+                               result = get_vram_info_v30(bp, info);
+                               break;
+                       default:
+                               break;
+                       }
+                       break;
+
                default:
                        return result;
                }