[PATCH] drm/amd/display: fix vram info table parsing ordering

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



For DCN 4.x, the vram_info moved into the umc_info table.
However, it appears some DCN 2.x based boards also happen
to have a umc table with a version matching DCN 4.x which
causes them to match the wrong table.

Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3678
Fixes: 00c391102abc ("drm/amd/display: Add misc DC changes for DCN401")
Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx>
---
 .../drm/amd/display/dc/bios/bios_parser2.c    | 49 ++++++++++---------
 1 file changed, 25 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
index 0d8498ab9b23..a8181631a40b 100644
--- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
+++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
@@ -3126,29 +3126,7 @@ static enum bp_result bios_parser_get_vram_info(
 	struct atom_common_table_header *header;
 	struct atom_data_revision revision;
 
-	// vram info moved to umc_info for DCN4x
-	if (info && DATA_TABLES(umc_info)) {
-		header = GET_IMAGE(struct atom_common_table_header,
-					DATA_TABLES(umc_info));
-
-		get_atom_data_table_revision(header, &revision);
-
-		switch (revision.major) {
-		case 4:
-			switch (revision.minor) {
-			case 0:
-				result = get_vram_info_from_umc_info_v40(bp, info);
-				break;
-			default:
-				break;
-			}
-			break;
-		default:
-			break;
-		}
-	}
-
-	if (result != BP_RESULT_OK && info && DATA_TABLES(vram_info)) {
+	if (info && DATA_TABLES(vram_info)) {
 		header = GET_IMAGE(struct atom_common_table_header,
 					DATA_TABLES(vram_info));
 
@@ -3182,10 +3160,33 @@ static enum bp_result bios_parser_get_vram_info(
 			break;
 
 		default:
-			return result;
+			break;
 		}
 
 	}
+
+	// vram info moved to umc_info for DCN4x
+	if (result != BP_RESULT_OK && info && DATA_TABLES(umc_info)) {
+		header = GET_IMAGE(struct atom_common_table_header,
+					DATA_TABLES(umc_info));
+
+		get_atom_data_table_revision(header, &revision);
+
+		switch (revision.major) {
+		case 4:
+			switch (revision.minor) {
+			case 0:
+				result = get_vram_info_from_umc_info_v40(bp, info);
+				break;
+			default:
+				break;
+			}
+			break;
+		default:
+			break;
+		}
+	}
+
 	return result;
 }
 
-- 
2.46.2




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux