[PATCH i-g-t 14/27] tools/intel_vbt_decode: Decode block 20 (OEM Customizable Modes)

Ville Syrjala ville.syrjala at linux.intel.com
Fri Jun 7 13:57:45 UTC 2024


From: Ville Syrjälä <ville.syrjala at linux.intel.com>

Decode VBT block 20 (OEM Customizable Modes). Just some list
of modes, which we probably don't care about.

Example output from ADL:
BDB block 20 (170 bytes, min 2 bytes) - OEM customizable modes:
        0000: 14 aa 00 06 1c 04 00 56  05 00 03 00 3c 00 00 00
        0010: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 ff
        0020: 01 04 00 56 05 56 03 00  3c 00 00 00 00 00 00 00
        0030: 00 00 00 00 00 00 00 00  00 00 00 ff 01 00 00 00
        0040: 00 00 00 00 3c 00 00 00  00 00 00 00 00 00 00 00
        0050: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
        0060: 3c 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
        0070: 00 00 00 00 00 00 00 00  00 00 00 00 3c 00 00 00
        0080: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
        0090: 00 00 00 00 00 00 00 00  3c 00 00 00 00 00 00 00
        00a0: 00 00 00 00 00 00 00 00  00 00 00 00 00

        Num entries: 6
        Entry size: 28
        Entry #1:
                Enable in GOP: yes
                Enable in OS: no
                Enable in VBIOS: no
                Resolution: 1366x768
                Display flags: none (0x00)
                Color depth: 0x00
                Refresh rate: 60
                DTD:
                  hdisplay: 0
                  hsync [0, 0] -sync
                  htotal: 0
                  vdisplay: 0
                  vsync [0, 0] -sync
                  vtotal: 0
                  clock: 0
                Display flags 2: EFP1,EFP2,EFP3,EFP4,EFP5,EFP6,EFP7,LFP1,LFP2 (0x01ff)
       ...
       Entry #6:
                Enable in GOP: no
                Enable in OS: no
                Enable in VBIOS: no
                Resolution: 0x0
                Display flags: none (0x00)
                Color depth: 0x00
                Refresh rate: 60
                DTD:
                  hdisplay: 0
                  hsync [0, 0] -sync
                  htotal: 0
                  vdisplay: 0
                  vsync [0, 0] -sync
                  vtotal: 0
                  clock: 0
                Display flags 2: none (0x0000)

Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
 tools/intel_vbt_decode.c | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/tools/intel_vbt_decode.c b/tools/intel_vbt_decode.c
index a76eae94f037..49a5da547e7a 100644
--- a/tools/intel_vbt_decode.c
+++ b/tools/intel_vbt_decode.c
@@ -346,6 +346,8 @@ static size_t block_min_size(const struct context *context, int section_id)
 		return sizeof(struct bdb_driver_rotation);
 	case BDB_DISPLAY_REMOVE_OLD:
 		return sizeof(struct bdb_display_remove_old);
+	case BDB_OEM_CUSTOM:
+		return sizeof(struct bdb_oem_custom);
 	case BDB_SDVO_LVDS_OPTIONS:
 		return sizeof(struct bdb_sdvo_lvds_options);
 	case BDB_SDVO_LVDS_DTD:
@@ -2227,6 +2229,39 @@ static void dump_driver_rotation(struct context *context,
 	printf("\tRotation flags 4: 0x%08x\n", rot->rotation_flags_4);
 }
 
+static void dump_oem_custom(struct context *context,
+			    const struct bdb_block *block)
+{
+	const struct bdb_oem_custom *oem = block_data(block);
+
+	printf("\tNum entries: %d\n", oem->num_entries);
+	printf("\tEntry size: %d\n", oem->entry_size);
+
+	for (int i = 0 ; i < oem->num_entries; i++) {
+		const struct oem_mode *m = (const void *)&oem->modes[0] +
+			i * oem->entry_size;
+
+		printf("\tEntry #%d:\n", i+1);
+		printf("\t\tEnable in GOP: %s\n", YESNO(m->enable_in_gop));
+		printf("\t\tEnable in OS: %s\n", YESNO(m->enable_in_os));
+		printf("\t\tEnable in VBIOS: %s\n", YESNO(m->enable_in_vbios));
+		printf("\t\tResolution: %dx%d\n", m->x_res, m->y_res);
+		printf("\t\tDisplay flags: %s (0x%02x)\n",
+		       child_device_handle(context, m->display_flags),
+		       m->display_flags);
+		printf("\t\tColor depth: 0x%02x\n", m->color_depth);
+		printf("\t\tRefresh rate: %d\n", m->refresh_rate);
+
+		printf("\t\tDTD:\n");
+		print_detail_timing_data(&m->dtd);
+
+		if (oem->entry_size >= 28)
+			printf("\t\tDisplay flags 2: %s (0x%04x)\n",
+			       child_device_handle(context, m->display_flags_2),
+			       m->display_flags_2);
+	}
+}
+
 static void dump_edp(struct context *context,
 		     const struct bdb_block *block)
 {
@@ -3345,6 +3380,11 @@ struct dumper dumpers[] = {
 		.name = "Display remove (pre-IVB)",
 		.dump = dump_display_remove_old,
 	},
+	{
+		.id = BDB_OEM_CUSTOM,
+		.name = "OEM customizable modes",
+		.dump = dump_oem_custom,
+	},
 	{
 		.id = BDB_SDVO_LVDS_OPTIONS,
 		.name = "SDVO LVDS options block",
-- 
2.44.2



More information about the igt-dev mailing list