Skip to contentSkip to conversation

lib/igt_kms: remove length parameter from kmstest_force_edid

PATCH In review Simon Ser 3 participants 14 messages Jul 3, 2019 – Jul 5, 2019 Library code

lore
Share & tools
lore

Simon Ser

author
#0 lore raw

PATCH v2 1/6 lib/igt_kms: remove length parameter from kmstest_force_edid

Given an EDID, computing the size is trivial. Instead of having one size constant per EDID and hope the callers use the right one (ie. *not* EDID_LENGTH when there's an extension), we can make functions that take EDIDs compute the size if they need it.

We have tests in lib/tests/igt_edid.c which assert the number of extensions present in the EDID anyway.

---
 lib/igt_kms.c                     | 13 +++++++------
 lib/igt_kms.h                     |  3 +--
 tests/kms_3d.c                    |  4 ++--
 tests/kms_force_connector_basic.c | 12 ++++++------
 tests/kms_hdmi_inject.c           | 11 ++++-------
 5 files changed, 20 insertions(+), 23 deletions(-)
lib/igt_kms.c +7 -6
index dc8992cb043b..a66a685009cd 100644
@@ -182,6 +182,8 @@ const unsigned char *igt_kms_get_alt_edid(void)
 	return (unsigned char *) &edid;
 }
 
+#define AUDIO_EDID_LENGTH (2 * EDID_LENGTH)
+
 static void
 generate_audio_edid(unsigned char raw_edid[static AUDIO_EDID_LENGTH],
 		    bool with_vsd, struct cea_sad *sad,
@@ -990,15 +992,13 @@ bool kmstest_force_connector(int drm_fd, drmModeConnector *connector,
  * @drm_fd: drm file descriptor
  * @connector: connector to set @edid on
  * @edid: An EDID data block
- * @length: length of the EDID data. #EDID_LENGTH defines the standard EDID
- * length
  *
  * Set the EDID data on @connector to @edid. See also #igt_kms_get_base_edid.
  *
- * If @length is zero, the forced EDID will be removed.
+ * If @edid is NULL, the forced EDID will be removed.
  */
 void kmstest_force_edid(int drm_fd, drmModeConnector *connector,
-			const unsigned char *edid, size_t length)
+			const unsigned char *edid)
 {
 	char *path;
 	int debugfs_fd, ret;
@@ -1011,10 +1011,11 @@ void kmstest_force_edid(int drm_fd, drmModeConnector *connector,
 
 	igt_require(debugfs_fd != -1);
 
-	if (length == 0)
+	if (edid == NULL)
 		ret = write(debugfs_fd, "reset", 5);
 	else
-		ret = write(debugfs_fd, edid, length);
+		ret = write(debugfs_fd, edid,
+			    edid_get_size((struct edid *) edid));
 	close(debugfs_fd);
 
 	/* To allow callers to always use GetConnectorCurrent we need to force a
lib/igt_kms.h +1 -2
index a448a003ae56..f72508640712 100644
@@ -197,7 +197,7 @@ bool kmstest_force_connector(int fd, drmModeConnector *connector,
 void kmstest_edid_add_3d(const unsigned char *edid, size_t length, unsigned char *new_edid_ptr[], size_t *new_length);
 void kmstest_edid_add_4k(const unsigned char *edid, size_t length, unsigned char *new_edid_ptr[], size_t *new_length);
 void kmstest_force_edid(int drm_fd, drmModeConnector *connector,
-			const unsigned char *edid, size_t length);
+			const unsigned char *edid);
 
 bool kmstest_get_connector_default_mode(int drm_fd, drmModeConnector *connector,
 					drmModeModeInfo *mode);
@@ -759,7 +759,6 @@ struct cea_sad;
 struct cea_speaker_alloc;
 
 #define EDID_LENGTH 128
-#define AUDIO_EDID_LENGTH (2 * EDID_LENGTH)
 const unsigned char *igt_kms_get_base_edid(void);
 const unsigned char *igt_kms_get_alt_edid(void);
 const unsigned char *igt_kms_get_hdmi_audio_edid(void);
tests/kms_3d.c +2 -2
index df8185abebc4..a170814f6356 100644
@@ -60,7 +60,7 @@ igt_simple_main
 	kmstest_edid_add_3d(igt_kms_get_base_edid(), EDID_LENGTH, &edid,
 			    &length);
 
-	kmstest_force_edid(drm_fd, connector, edid, length);
+	kmstest_force_edid(drm_fd, connector, edid);
 	if (!kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_ON))
 		igt_skip("Could not force connector on\n");
 
@@ -113,7 +113,7 @@ igt_simple_main
 	}
 
 	kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_UNSPECIFIED);
-	kmstest_force_edid(drm_fd, connector, NULL, 0);
+	kmstest_force_edid(drm_fd, connector, NULL);
 
 	drmModeFreeConnector(connector);
 	free(edid);
tests/kms_force_connector_basic.c +6 -6
index 20812d5e3189..f1533e5415c0 100644
@@ -48,7 +48,7 @@ static void reset_connectors(void)
 		kmstest_force_connector(drm_fd, connector,
 					FORCE_CONNECTOR_UNSPECIFIED);
 
-		kmstest_force_edid(drm_fd, connector, NULL, 0);
+		kmstest_force_edid(drm_fd, connector, NULL);
 
 		drmModeFreeConnector(connector);
 	}
@@ -247,7 +247,7 @@ igt_main_args("", long_opts, help_str, opt_handler, NULL)
 
 		/* test edid forcing */
 		kmstest_force_edid(drm_fd, vga_connector,
-				   igt_kms_get_base_edid(), EDID_LENGTH);
+				   igt_kms_get_base_edid());
 		temp = drmModeGetConnectorCurrent(drm_fd,
 						  vga_connector->connector_id);
 
@@ -260,7 +260,7 @@ igt_main_args("", long_opts, help_str, opt_handler, NULL)
 		drmModeFreeConnector(temp);
 
 		/* remove edid */
-		kmstest_force_edid(drm_fd, vga_connector, NULL, 0);
+		kmstest_force_edid(drm_fd, vga_connector, NULL);
 		kmstest_force_connector(drm_fd, vga_connector,
 					FORCE_CONNECTOR_UNSPECIFIED);
 		temp = drmModeGetConnectorCurrent(drm_fd,
@@ -280,7 +280,7 @@ igt_main_args("", long_opts, help_str, opt_handler, NULL)
 
 		/* test pruning of stale modes */
 		kmstest_force_edid(drm_fd, vga_connector,
-				   igt_kms_get_alt_edid(), EDID_LENGTH);
+				   igt_kms_get_alt_edid());
 		temp = drmModeGetConnectorCurrent(drm_fd,
 						  vga_connector->connector_id);
 
@@ -294,7 +294,7 @@ igt_main_args("", long_opts, help_str, opt_handler, NULL)
 		drmModeFreeConnector(temp);
 
 		kmstest_force_edid(drm_fd, vga_connector,
-				   igt_kms_get_base_edid(), EDID_LENGTH);
+				   igt_kms_get_base_edid());
 		temp = drmModeGetConnectorCurrent(drm_fd,
 						  vga_connector->connector_id);
 
@@ -307,7 +307,7 @@ igt_main_args("", long_opts, help_str, opt_handler, NULL)
 
 		drmModeFreeConnector(temp);
 
-		kmstest_force_edid(drm_fd, vga_connector, NULL, 0);
+		kmstest_force_edid(drm_fd, vga_connector, NULL);
 		kmstest_force_connector(drm_fd, vga_connector,
 					FORCE_CONNECTOR_UNSPECIFIED);
 	}
tests/kms_hdmi_inject.c +4 -7
index 8c0d1333db19..9a968fa9e50e 100644
@@ -93,7 +93,7 @@ hdmi_inject_4k(int drm_fd, drmModeConnector *connector)
 	kmstest_edid_add_4k(igt_kms_get_base_edid(), EDID_LENGTH, &edid,
 			    &length);
 
-	kmstest_force_edid(drm_fd, connector, edid, length);
+	kmstest_force_edid(drm_fd, connector, edid);
 
 	if (!kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_ON))
 		igt_skip("Could not force connector on\n");
@@ -134,7 +134,7 @@ hdmi_inject_4k(int drm_fd, drmModeConnector *connector)
 	igt_remove_fb(drm_fd, &fb);
 
 	kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_UNSPECIFIED);
-	kmstest_force_edid(drm_fd, connector, NULL, 0);
+	kmstest_force_edid(drm_fd, connector, NULL);
 
 	free(edid);
 }
@@ -143,15 +143,12 @@ static void
 hdmi_inject_audio(int drm_fd, drmModeConnector *connector)
 {
 	const unsigned char *edid;
-	size_t length;
 	int fb_id, cid, ret, crtc_mask = -1;
 	struct igt_fb fb;
 	struct kmstest_connector_config config;
 
 	edid = igt_kms_get_hdmi_audio_edid();
-	length = AUDIO_EDID_LENGTH;
-
-	kmstest_force_edid(drm_fd, connector, edid, length);
+	kmstest_force_edid(drm_fd, connector, edid);
 
 	if (!kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_ON))
 		igt_skip("Could not force connector on\n");
@@ -191,7 +188,7 @@ hdmi_inject_audio(int drm_fd, drmModeConnector *connector)
 	kmstest_dump_mode(&connector->modes[0]);
 
 	kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_UNSPECIFIED);
-	kmstest_force_edid(drm_fd, connector, NULL, 0);
+	kmstest_force_edid(drm_fd, connector, NULL);
 }
 
 igt_main
Signature · 6 lines
2.22.0

_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev
author
#1 lore raw

PATCH v2 2/6 lib/igt_edid: s/vsd/vsdb/

"VSDB" (Vendor-Specific Data Block) is the wording used by CEA 861D.

---
 lib/igt_edid.c | 38 +++++++++++++++++++-------------------
 lib/igt_edid.h | 12 ++++++------
 lib/igt_kms.c  | 14 +++++++-------
 3 files changed, 32 insertions(+), 32 deletions(-)
lib/igt_edid.c +19 -19
index cbb7eefff70d..df5b6611e22c 100644
@@ -315,29 +315,29 @@ void cea_sad_init_pcm(struct cea_sad *sad, int channels,
 }
 
 /**
- * cea_vsd_get_hdmi_default:
+ * cea_vsdb_get_hdmi_default:
  *
  * Returns the default Vendor Specific Data block for HDMI.
  */
-const struct cea_vsd *cea_vsd_get_hdmi_default(size_t *size)
+const struct cea_vsdb *cea_vsdb_get_hdmi_default(size_t *size)
 {
-	static char raw[sizeof(struct cea_vsd) + 4] = {0};
-	struct cea_vsd *vsd;
+	static char raw[sizeof(struct cea_vsdb) + 4] = {0};
+	struct cea_vsdb *vsdb;
 
 	*size = sizeof(raw);
 
 	/* Magic incantation. Works better if you orient your screen in the
 	 * direction of the VESA headquarters. */
-	vsd = (struct cea_vsd *) raw;
-	vsd->ieee_oui[0] = 0x03;
-	vsd->ieee_oui[1] = 0x0C;
-	vsd->ieee_oui[2] = 0x00;
-	vsd->data[0] = 0x10;
-	vsd->data[1] = 0x00;
-	vsd->data[2] = 0x38;
-	vsd->data[3] = 0x2D;
-
-	return vsd;
+	vsdb = (struct cea_vsdb *) raw;
+	vsdb->ieee_oui[0] = 0x03;
+	vsdb->ieee_oui[1] = 0x0C;
+	vsdb->ieee_oui[2] = 0x00;
+	vsdb->data[0] = 0x10;
+	vsdb->data[1] = 0x00;
+	vsdb->data[2] = 0x38;
+	vsdb->data[3] = 0x2D;
+
+	return vsdb;
 }
 
 static void edid_cea_data_block_init(struct edid_cea_data_block *block,
@@ -360,15 +360,15 @@ size_t edid_cea_data_block_set_sad(struct edid_cea_data_block *block,
 	return sizeof(struct edid_cea_data_block) + sads_size;
 }
 
-size_t edid_cea_data_block_set_vsd(struct edid_cea_data_block *block,
-				   const struct cea_vsd *vsd, size_t vsd_size)
+size_t edid_cea_data_block_set_vsdb(struct edid_cea_data_block *block,
+				    const struct cea_vsdb *vsdb, size_t vsdb_size)
 {
 	edid_cea_data_block_init(block, EDID_CEA_DATA_VENDOR_SPECIFIC,
-				 vsd_size);
+				 vsdb_size);
 
-	memcpy(block->data.vsds, vsd, vsd_size);
+	memcpy(block->data.vsdbs, vsdb, vsdb_size);
 
-	return sizeof(struct edid_cea_data_block) + vsd_size;
+	return sizeof(struct edid_cea_data_block) + vsdb_size;
 }
 
 size_t edid_cea_data_block_set_speaker_alloc(struct edid_cea_data_block *block,
lib/igt_edid.h +6 -6
index 47581bb778b0..6fcb50a3e95e 100644
@@ -191,8 +191,8 @@ struct cea_sad {
 	uint8_t bitrate;
 } __attribute__((packed));
 
-/* Vendor Specific Data */
-struct cea_vsd {
+/* Vendor-Specific Data Block */
+struct cea_vsdb {
 	uint8_t ieee_oui[3];
 	char data[];
 };
@@ -223,7 +223,7 @@ struct edid_cea_data_block {
 	uint8_t type_len; /* type is from enum edid_cea_data_type */
 	union {
 		struct cea_sad sads[0];
-		struct cea_vsd vsds[0];
+		struct cea_vsdb vsdbs[0];
 		struct cea_speaker_alloc speakers[0];
 	} data;
 } __attribute__((packed));
@@ -310,11 +310,11 @@ void detailed_timing_set_string(struct detailed_timing *dt,
 void cea_sad_init_pcm(struct cea_sad *sad, int channels,
 		      uint8_t sampling_rates, uint8_t sample_sizes);
 void edid_ext_update_cea_checksum(struct edid_ext *ext);
-const struct cea_vsd *cea_vsd_get_hdmi_default(size_t *size);
+const struct cea_vsdb *cea_vsdb_get_hdmi_default(size_t *size);
 size_t edid_cea_data_block_set_sad(struct edid_cea_data_block *block,
 				   const struct cea_sad *sads, size_t sads_len);
-size_t edid_cea_data_block_set_vsd(struct edid_cea_data_block *block,
-				   const struct cea_vsd *vsd, size_t vsd_size);
+size_t edid_cea_data_block_set_vsdb(struct edid_cea_data_block *block,
+				   const struct cea_vsdb *vsdb, size_t vsdb_size);
 size_t edid_cea_data_block_set_speaker_alloc(struct edid_cea_data_block *block,
 					     const struct cea_speaker_alloc *speakers);
 void edid_ext_set_cea(struct edid_ext *ext, size_t data_blocks_size,
lib/igt_kms.c +7 -7
index a66a685009cd..36e3b821275a 100644
@@ -186,7 +186,7 @@ const unsigned char *igt_kms_get_alt_edid(void)
 
 static void
 generate_audio_edid(unsigned char raw_edid[static AUDIO_EDID_LENGTH],
-		    bool with_vsd, struct cea_sad *sad,
+		    bool with_vsdb, struct cea_sad *sad,
 		    struct cea_speaker_alloc *speaker_alloc)
 {
 	struct edid *edid;
@@ -194,8 +194,8 @@ generate_audio_edid(unsigned char raw_edid[static AUDIO_EDID_LENGTH],
 	struct edid_cea *edid_cea;
 	char *cea_data;
 	struct edid_cea_data_block *block;
-	const struct cea_vsd *vsd;
-	size_t cea_data_size, vsd_size;
+	const struct cea_vsdb *vsdb;
+	size_t cea_data_size, vsdb_size;
 
 	/* Create a new EDID from the base IGT EDID, and add an
 	 * extension that advertises audio support. */
@@ -212,11 +212,11 @@ generate_audio_edid(unsigned char raw_edid[static AUDIO_EDID_LENGTH],
 	cea_data_size += edid_cea_data_block_set_sad(block, sad, 1);
 
 	/* A Vendor Specific Data block is needed for HDMI audio */
-	if (with_vsd) {
+	if (with_vsdb) {
 		block = (struct edid_cea_data_block *) &cea_data[cea_data_size];
-		vsd = cea_vsd_get_hdmi_default(&vsd_size);
-		cea_data_size += edid_cea_data_block_set_vsd(block, vsd,
-							     vsd_size);
+		vsdb = cea_vsdb_get_hdmi_default(&vsdb_size);
+		cea_data_size += edid_cea_data_block_set_vsdb(block, vsdb,
+							      vsdb_size);
 	}
 
 	/* Speaker Allocation Data block */
Signature · 6 lines
2.22.0

_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev
Reviewed-by on v2 2/6
#2 lore raw

Re: [igt-dev] [PATCH i-g-t v2 2/6] lib/igt_edid: s/vsd/vsdb/

Quoted 3 lines · Simon Ser

"VSDB" (Vendor-Specific Data Block) is the wording used by CEA 861D.

Quoted 156 lines
---
 lib/igt_edid.c | 38 +++++++++++++++++++-------------------
 lib/igt_edid.h | 12 ++++++------
 lib/igt_kms.c  | 14 +++++++-------
 3 files changed, 32 insertions(+), 32 deletions(-)
lib/igt_edid.c +19 -19
index cbb7eefff70d..df5b6611e22c 100644
@@ -315,29 +315,29 @@ void cea_sad_init_pcm(struct cea_sad *sad, int channels,
 }
 
 /**
- * cea_vsd_get_hdmi_default:
+ * cea_vsdb_get_hdmi_default:
  *
  * Returns the default Vendor Specific Data block for HDMI.
  */
-const struct cea_vsd *cea_vsd_get_hdmi_default(size_t *size)
+const struct cea_vsdb *cea_vsdb_get_hdmi_default(size_t *size)
 {
-	static char raw[sizeof(struct cea_vsd) + 4] = {0};
-	struct cea_vsd *vsd;
+	static char raw[sizeof(struct cea_vsdb) + 4] = {0};
+	struct cea_vsdb *vsdb;
 
 	*size = sizeof(raw);
 
 	/* Magic incantation. Works better if you orient your screen in the
 	 * direction of the VESA headquarters. */
-	vsd = (struct cea_vsd *) raw;
-	vsd->ieee_oui[0] = 0x03;
-	vsd->ieee_oui[1] = 0x0C;
-	vsd->ieee_oui[2] = 0x00;
-	vsd->data[0] = 0x10;
-	vsd->data[1] = 0x00;
-	vsd->data[2] = 0x38;
-	vsd->data[3] = 0x2D;
-
-	return vsd;
+	vsdb = (struct cea_vsdb *) raw;
+	vsdb->ieee_oui[0] = 0x03;
+	vsdb->ieee_oui[1] = 0x0C;
+	vsdb->ieee_oui[2] = 0x00;
+	vsdb->data[0] = 0x10;
+	vsdb->data[1] = 0x00;
+	vsdb->data[2] = 0x38;
+	vsdb->data[3] = 0x2D;
+
+	return vsdb;
 }
 
 static void edid_cea_data_block_init(struct edid_cea_data_block *block,
@@ -360,15 +360,15 @@ size_t edid_cea_data_block_set_sad(struct edid_cea_data_block *block,
 	return sizeof(struct edid_cea_data_block) + sads_size;
 }
 
-size_t edid_cea_data_block_set_vsd(struct edid_cea_data_block *block,
-				   const struct cea_vsd *vsd, size_t vsd_size)
+size_t edid_cea_data_block_set_vsdb(struct edid_cea_data_block *block,
+				    const struct cea_vsdb *vsdb, size_t vsdb_size)
 {
 	edid_cea_data_block_init(block, EDID_CEA_DATA_VENDOR_SPECIFIC,
-				 vsd_size);
+				 vsdb_size);
 
-	memcpy(block->data.vsds, vsd, vsd_size);
+	memcpy(block->data.vsdbs, vsdb, vsdb_size);
 
-	return sizeof(struct edid_cea_data_block) + vsd_size;
+	return sizeof(struct edid_cea_data_block) + vsdb_size;
 }
 
 size_t edid_cea_data_block_set_speaker_alloc(struct edid_cea_data_block *block,
lib/igt_edid.h +6 -6
index 47581bb778b0..6fcb50a3e95e 100644
@@ -191,8 +191,8 @@ struct cea_sad {
 	uint8_t bitrate;
 } __attribute__((packed));
 
-/* Vendor Specific Data */
-struct cea_vsd {
+/* Vendor-Specific Data Block */
+struct cea_vsdb {
 	uint8_t ieee_oui[3];
 	char data[];
 };
@@ -223,7 +223,7 @@ struct edid_cea_data_block {
 	uint8_t type_len; /* type is from enum edid_cea_data_type */
 	union {
 		struct cea_sad sads[0];
-		struct cea_vsd vsds[0];
+		struct cea_vsdb vsdbs[0];
 		struct cea_speaker_alloc speakers[0];
 	} data;
 } __attribute__((packed));
@@ -310,11 +310,11 @@ void detailed_timing_set_string(struct detailed_timing *dt,
 void cea_sad_init_pcm(struct cea_sad *sad, int channels,
 		      uint8_t sampling_rates, uint8_t sample_sizes);
 void edid_ext_update_cea_checksum(struct edid_ext *ext);
-const struct cea_vsd *cea_vsd_get_hdmi_default(size_t *size);
+const struct cea_vsdb *cea_vsdb_get_hdmi_default(size_t *size);
 size_t edid_cea_data_block_set_sad(struct edid_cea_data_block *block,
 				   const struct cea_sad *sads, size_t sads_len);
-size_t edid_cea_data_block_set_vsd(struct edid_cea_data_block *block,
-				   const struct cea_vsd *vsd, size_t vsd_size);
+size_t edid_cea_data_block_set_vsdb(struct edid_cea_data_block *block,
+				   const struct cea_vsdb *vsdb, size_t vsdb_size);
 size_t edid_cea_data_block_set_speaker_alloc(struct edid_cea_data_block *block,
 					     const struct cea_speaker_alloc *speakers);
 void edid_ext_set_cea(struct edid_ext *ext, size_t data_blocks_size,
lib/igt_kms.c +7 -7
index a66a685009cd..36e3b821275a 100644
@@ -186,7 +186,7 @@ const unsigned char *igt_kms_get_alt_edid(void)
 
 static void
 generate_audio_edid(unsigned char raw_edid[static AUDIO_EDID_LENGTH],
-		    bool with_vsd, struct cea_sad *sad,
+		    bool with_vsdb, struct cea_sad *sad,
 		    struct cea_speaker_alloc *speaker_alloc)
 {
 	struct edid *edid;
@@ -194,8 +194,8 @@ generate_audio_edid(unsigned char raw_edid[static AUDIO_EDID_LENGTH],
 	struct edid_cea *edid_cea;
 	char *cea_data;
 	struct edid_cea_data_block *block;
-	const struct cea_vsd *vsd;
-	size_t cea_data_size, vsd_size;
+	const struct cea_vsdb *vsdb;
+	size_t cea_data_size, vsdb_size;
 
 	/* Create a new EDID from the base IGT EDID, and add an
 	 * extension that advertises audio support. */
@@ -212,11 +212,11 @@ generate_audio_edid(unsigned char raw_edid[static AUDIO_EDID_LENGTH],
 	cea_data_size += edid_cea_data_block_set_sad(block, sad, 1);
 
 	/* A Vendor Specific Data block is needed for HDMI audio */
-	if (with_vsd) {
+	if (with_vsdb) {
 		block = (struct edid_cea_data_block *) &cea_data[cea_data_size];
-		vsd = cea_vsd_get_hdmi_default(&vsd_size);
-		cea_data_size += edid_cea_data_block_set_vsd(block, vsd,
-							     vsd_size);
+		vsdb = cea_vsdb_get_hdmi_default(&vsdb_size);
+		cea_data_size += edid_cea_data_block_set_vsdb(block, vsdb,
+							      vsdb_size);
 	}
 
 	/* Speaker Allocation Data block */
Signature · 1 line
2.22.0
Signature · 6 lines
Ville Syrjälä
Intel
_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev
author
#3 lore raw

PATCH v2 3/6 lib/igt_edid: add hdmi_vsdb

In reply to Simon Ser

The HDMI Vendor-Specific Data Block, defined as an opaque blob in the EDID spec, is described in the HDMI 1.4 spec.

Most of the extension fields are optional, so it doesn't translate well to a C struct. For now callers need to manually fill the hdmi_vsdb.data field.

---
 lib/igt_edid.c | 36 ++++++++++++++++++++++++++++--------
 lib/igt_edid.h | 50 +++++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 75 insertions(+), 11 deletions(-)
lib/igt_edid.c +28 -8
index df5b6611e22c..096668e68956 100644
@@ -42,6 +42,8 @@ static const char monitor_range_padding[] = {
 	0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
 };
 
+const uint8_t hdmi_ieee_oui[3] = {0x03, 0x0C, 0x00};
+
 /* vfreq is in Hz */
 static void std_timing_set(struct std_timing *st, int hsize, int vfreq,
 			   enum std_timing_aspect aspect)
@@ -321,21 +323,23 @@ void cea_sad_init_pcm(struct cea_sad *sad, int channels,
  */
 const struct cea_vsdb *cea_vsdb_get_hdmi_default(size_t *size)
 {
-	static char raw[sizeof(struct cea_vsdb) + 4] = {0};
+	/* We'll generate a VSDB with 2 extension fields. */
+	static char raw[CEA_VSDB_HDMI_MIN_SIZE + 2] = {0};
 	struct cea_vsdb *vsdb;
+	struct hdmi_vsdb *hdmi;
 
 	*size = sizeof(raw);
 
 	/* Magic incantation. Works better if you orient your screen in the
 	 * direction of the VESA headquarters. */
 	vsdb = (struct cea_vsdb *) raw;
-	vsdb->ieee_oui[0] = 0x03;
-	vsdb->ieee_oui[1] = 0x0C;
-	vsdb->ieee_oui[2] = 0x00;
-	vsdb->data[0] = 0x10;
-	vsdb->data[1] = 0x00;
-	vsdb->data[2] = 0x38;
-	vsdb->data[3] = 0x2D;
+	memcpy(vsdb->ieee_oui, hdmi_ieee_oui, sizeof(hdmi_ieee_oui));
+	hdmi = &vsdb->data.hdmi;
+	hdmi->src_phy_addr[0] = 0x10;
+	hdmi->src_phy_addr[1] = 0x00;
+	/* 2 VSDB extension fields */
+	hdmi->flags1 = 0x38;
+	hdmi->max_tdms_clock = 0x2D;
 
 	return vsdb;
 }
@@ -371,6 +375,22 @@ size_t edid_cea_data_block_set_vsdb(struct edid_cea_data_block *block,
 	return sizeof(struct edid_cea_data_block) + vsdb_size;
 }
 
+size_t edid_cea_data_block_set_hdmi_vsdb(struct edid_cea_data_block *block,
+					 const struct hdmi_vsdb *hdmi,
+					 size_t hdmi_size)
+{
+	char raw_vsdb[CEA_VSDB_HDMI_MAX_SIZE] = {0};
+	struct cea_vsdb *vsdb = (struct cea_vsdb *) raw_vsdb;
+
+	assert(hdmi_size >= HDMI_VSDB_MIN_SIZE &&
+	       hdmi_size <= HDMI_VSDB_MAX_SIZE);
+	memcpy(vsdb->ieee_oui, hdmi_ieee_oui, sizeof(hdmi_ieee_oui));
+	memcpy(&vsdb->data.hdmi, hdmi, hdmi_size);
+
+	return edid_cea_data_block_set_vsdb(block, vsdb,
+					    CEA_VSDB_HEADER_SIZE + hdmi_size);
+}
+
 size_t edid_cea_data_block_set_speaker_alloc(struct edid_cea_data_block *block,
 					     const struct cea_speaker_alloc *speakers)
 {
lib/igt_edid.h +47 -3

64 lines not on this page · raw message

Signature · 6 lines
2.22.0

_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev
author
#4 lore raw

PATCH v2 4/6 lib/igt_edid: add support for native DTDs in CEA extension blocks

In reply to Simon Ser

Native Detailed Timing Descriptors follow the Data Block Collection in the CEA extension.

---
 lib/igt_edid.c | 6 ++++--
 lib/igt_edid.h | 2 +-
 lib/igt_kms.c  | 3 +--
 3 files changed, 6 insertions(+), 5 deletions(-)
lib/igt_edid.c +4 -2
index 096668e68956..d1aebf32c456 100644
@@ -404,15 +404,17 @@ size_t edid_cea_data_block_set_speaker_alloc(struct edid_cea_data_block *block,
 }
 
 void edid_ext_set_cea(struct edid_ext *ext, size_t data_blocks_size,
-		      uint8_t flags)
+		      uint8_t num_native_dtds, uint8_t flags)
 {
 	struct edid_cea *cea = &ext->data.cea;
 
 	ext->tag = EDID_EXT_CEA;
 
+	assert(num_native_dtds <= 0x0F);
+	assert((flags & 0x0F) == 0);
 	cea->revision = 3;
 	cea->dtd_start = 4 + data_blocks_size;
-	cea->misc = flags; /* just flags, no DTD */
+	cea->misc = flags | num_native_dtds;
 }
 
 void edid_ext_update_cea_checksum(struct edid_ext *ext)
lib/igt_edid.h +1 -1
index 7907baee08a9..cbd77ab63f86 100644
@@ -362,6 +362,6 @@ size_t edid_cea_data_block_set_hdmi_vsdb(struct edid_cea_data_block *block,
 size_t edid_cea_data_block_set_speaker_alloc(struct edid_cea_data_block *block,
 					     const struct cea_speaker_alloc *speakers);
 void edid_ext_set_cea(struct edid_ext *ext, size_t data_blocks_size,
-		      uint8_t flags);
+		      uint8_t num_native_dtds, uint8_t flags);
 
 #endif
lib/igt_kms.c +1 -2
index 36e3b821275a..424c83159c78 100644
@@ -226,8 +226,7 @@ generate_audio_edid(unsigned char raw_edid[static AUDIO_EDID_LENGTH],
 
 	assert(cea_data_size <= sizeof(edid_cea->data));
 
-	edid_ext_set_cea(edid_ext, cea_data_size,
-			 EDID_CEA_BASIC_AUDIO);
+	edid_ext_set_cea(edid_ext, cea_data_size, 0, EDID_CEA_BASIC_AUDIO);
 
 	edid_update_checksum(edid);
 	edid_ext_update_cea_checksum(edid_ext);
Signature · 6 lines
2.22.0

_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev
author
#5 lore raw

PATCH v2 5/6 lib/igt_edid: add support for Short Video Descriptors

In reply to Simon Ser

Short Video Descriptors (SVDs, not to be confused with Vendor-Specific Data blocks) describe CEA video formats supported by the monitor.

---
 lib/igt_edid.c | 8 ++++++++
 lib/igt_edid.h | 6 ++++++
 2 files changed, 14 insertions(+)
lib/igt_edid.c +8 -0
index d1aebf32c456..1a59edb63546 100644
@@ -364,6 +364,14 @@ size_t edid_cea_data_block_set_sad(struct edid_cea_data_block *block,
 	return sizeof(struct edid_cea_data_block) + sads_size;
 }
 
+size_t edid_cea_data_block_set_svd(struct edid_cea_data_block *block,
+				   const uint8_t *svds, size_t svds_len)
+{
+	edid_cea_data_block_init(block, EDID_CEA_DATA_VIDEO, svds_len);
+	memcpy(block->data.svds, svds, svds_len);
+	return sizeof(struct edid_cea_data_block) + svds_len;
+}
+
 size_t edid_cea_data_block_set_vsdb(struct edid_cea_data_block *block,
 				    const struct cea_vsdb *vsdb, size_t vsdb_size)
 {
lib/igt_edid.h +6 -0
index cbd77ab63f86..eb9096869207 100644
@@ -191,6 +191,9 @@ struct cea_sad {
 	uint8_t bitrate;
 } __attribute__((packed));
 
+/* Indicates that a Short Video Descriptor is native */
+#define CEA_SVD_NATIVE (1 << 7)
+
 enum hdmi_vsdb_flags1 {
 	HDMI_VSDB_DVI_DUAL = 1 << 0,
 	HDMI_VSDB_DC_Y444 = 1 << 3, /* supports YCbCr 4:4:4 */
@@ -264,6 +267,7 @@ struct edid_cea_data_block {
 	uint8_t type_len; /* type is from enum edid_cea_data_type */
 	union {
 		struct cea_sad sads[0];
+		uint8_t svds[0]; /* Short Video Descriptors */
 		struct cea_vsdb vsdbs[0];
 		struct cea_speaker_alloc speakers[0];
 	} data;
@@ -354,6 +358,8 @@ void edid_ext_update_cea_checksum(struct edid_ext *ext);
 const struct cea_vsdb *cea_vsdb_get_hdmi_default(size_t *size);
 size_t edid_cea_data_block_set_sad(struct edid_cea_data_block *block,
 				   const struct cea_sad *sads, size_t sads_len);
+size_t edid_cea_data_block_set_svd(struct edid_cea_data_block *block,
+				   const uint8_t *svds, size_t svds_len);
 size_t edid_cea_data_block_set_vsdb(struct edid_cea_data_block *block,
 				   const struct cea_vsdb *vsdb, size_t vsdb_size);
 size_t edid_cea_data_block_set_hdmi_vsdb(struct edid_cea_data_block *block,
Signature · 6 lines
2.22.0

_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev
author
#6 lore raw

PATCH v2 6/6 lib/igt_kms: use igt_edid to generate a 4K EDID

In reply to Simon Ser

The new EDID has been byte-by-byte checked to be exactly the same as before.

---
 lib/igt_kms.c               | 107 ++++++++++++++++++++----------------
 lib/igt_kms.h               |   2 +-
 lib/tests/igt_edid.c        |   1 +
 lib/tests/igt_hdmi_inject.c |   1 -
 tests/kms_hdmi_inject.c     |   9 +--
 5 files changed, 64 insertions(+), 56 deletions(-)
lib/igt_kms.c +60 -47
index 424c83159c78..19d8acac8d77 100644
@@ -284,6 +284,66 @@ const unsigned char *igt_kms_get_dp_audio_edid(void)
 	return raw_edid;
 }
 
+static const uint8_t edid_4k_svds[] = {
+	32 | CEA_SVD_NATIVE, /* 1080p @ 24Hz (native) */
+	5,                   /* 1080i @ 60Hz */
+	20,                  /* 1080i @ 50Hz */
+	4,                   /* 720p @ 60Hz */
+	19,                  /* 720p @ 50Hz */
+};
+
+const unsigned char *igt_kms_get_4k_edid(void)
+{
+	static unsigned char raw_edid[256];
+	struct edid *edid;
+	struct edid_ext *edid_ext;
+	struct edid_cea *edid_cea;
+	char *cea_data;
+	struct edid_cea_data_block *block;
+	/* We'll add 6 extension fields to the HDMI VSDB. */
+	char raw_hdmi[HDMI_VSDB_MIN_SIZE + 6] = {0};
+	struct hdmi_vsdb *hdmi;
+	size_t cea_data_size = 0;
+
+	/* Create a new EDID from the base IGT EDID, and add an
+	 * extension that advertises 4K support. */
+	edid = (struct edid *) raw_edid;
+	memcpy(edid, igt_kms_get_base_edid(), sizeof(struct edid));
+	edid->extensions_len = 1;
+	edid_ext = &edid->extensions[0];
+	edid_cea = &edid_ext->data.cea;
+	cea_data = edid_cea->data;
+
+	/* Short Video Descriptor */
+	block = (struct edid_cea_data_block *) &cea_data[cea_data_size];
+	cea_data_size += edid_cea_data_block_set_svd(block, edid_4k_svds,
+						     sizeof(edid_4k_svds));
+
+	/* Vendor-Specific Data Block */
+	hdmi = (struct hdmi_vsdb *) raw_hdmi;
+	hdmi->src_phy_addr[0] = 0x10;
+	hdmi->src_phy_addr[1] = 0x00;
+	/* 6 extension fields */
+	hdmi->flags1 = 0;
+	hdmi->max_tdms_clock = 0;
+	hdmi->flags2 = HDMI_VSDB_VIDEO_PRESENT;
+	hdmi->data[0] = 0x00; /* HDMI video flags */
+	hdmi->data[1] = 1 << 5; /* 1 VIC entry, 0 3D entries */
+	hdmi->data[2] = 0x01; /* 2160p, specified as short descriptor */
+
+	block = (struct edid_cea_data_block *) &cea_data[cea_data_size];
+	cea_data_size += edid_cea_data_block_set_hdmi_vsdb(block, hdmi,
+							   sizeof(raw_hdmi));
+
+	assert(cea_data_size <= sizeof(edid_cea->data));
+
+	edid_ext_set_cea(edid_ext, cea_data_size, 0, 0);
+
+	edid_update_checksum(edid);
+	edid_ext_update_cea_checksum(edid_ext);
+	return raw_edid;
+}
+
 const char * const igt_plane_prop_names[IGT_NUM_PLANE_PROPS] = {
 	[IGT_PLANE_SRC_X] = "SRC_X",
 	[IGT_PLANE_SRC_Y] = "SRC_Y",
@@ -1346,8 +1406,6 @@ struct edid_block {
     unsigned char *data;
 };
 
-#define DTD_SUPPORTS_AUDIO 1<<6
-
 static struct edid_block
 init_cea_block(const unsigned char *edid, size_t length,
 	       unsigned char *new_edid_ptr[], size_t *new_length,
@@ -1435,51 +1493,6 @@ void kmstest_edid_add_3d(const unsigned char *edid, size_t length,
 	update_edid_csum(new_edid.data, length);
 }
 
-/**
- * kmstest_edid_add_4k:
- * @edid: an existing valid edid block
- * @length: length of @edid
- * @new_edid_ptr: pointer to where the new edid will be placed
- * @new_length: pointer to the size of the new edid
- *
- * Makes a copy of an existing edid block and adds an extension indicating
- * a HDMI 4K mode in vsdb.
- */
-void kmstest_edid_add_4k(const unsigned char *edid, size_t length,
-			 unsigned char *new_edid_ptr[], size_t *new_length)
-{
-	char vsdb_block_len = 12;
-	struct edid_block new_edid = init_cea_block(edid, length, new_edid_ptr,
-						    new_length, vsdb_block_len,
-						    0);
-	int pos = new_edid.pos;
-
-	/* vsdb block ( id | length ) */
-	new_edid.data[pos++] = 3 << 5 | (vsdb_block_len - 1);
-	/* registration id */
-	new_edid.data[pos++] = 0x3;
-	new_edid.data[pos++] = 0xc;
-	new_edid.data[pos++] = 0x0;
-	/* source physical address */
-	new_edid.data[pos++] = 0x10;
-	new_edid.data[pos++] = 0x00;
-	/* Supports_AI ... etc */
-	new_edid.data[pos++] = 0x00;
-	/* Max TMDS Clock */
-	new_edid.data[pos++] = 0x00;
-	/* Latency present, HDMI Video Present */
-	new_edid.data[pos++] = 0x20;
-	/* HDMI Video */
-	new_edid.data[pos++] = 0x00; /* 3D present */
-
-	/* HDMI MODE LEN -- how many entries */
-	new_edid.data[pos++] = 0x20;
-	/* 2160p, specified as short descriptor */
-	new_edid.data[pos++] = 0x01;
-
-	update_edid_csum(new_edid.data, length);
-}
-
 /**
  * kmstest_unset_all_crtcs:
  * @drm_fd: the DRM fd
lib/igt_kms.h +1 -1
index f72508640712..203719878d86 100644
@@ -195,7 +195,6 @@ enum intel_broadcast_rgb_mode {
 bool kmstest_force_connector(int fd, drmModeConnector *connector,
 			     enum kmstest_force_connector_state state);
 void kmstest_edid_add_3d(const unsigned char *edid, size_t length, unsigned char *new_edid_ptr[], size_t *new_length);
-void kmstest_edid_add_4k(const unsigned char *edid, size_t length, unsigned char *new_edid_ptr[], size_t *new_length);
 void kmstest_force_edid(int drm_fd, drmModeConnector *connector,
 			const unsigned char *edid);
 
@@ -763,6 +762,7 @@ const unsigned char *igt_kms_get_base_edid(void);
 const unsigned char *igt_kms_get_alt_edid(void);
 const unsigned char *igt_kms_get_hdmi_audio_edid(void);
 const unsigned char *igt_kms_get_dp_audio_edid(void);
+const unsigned char *igt_kms_get_4k_edid(void);
 
 struct udev_monitor *igt_watch_hotplug(void);
 bool igt_hotplug_detected(struct udev_monitor *mon,
lib/tests/igt_edid.c +1 -0
index a847df272525..1a78b38a945b 100644
@@ -76,6 +76,7 @@ igt_simple_main
 		{ "base", igt_kms_get_base_edid, 0 },
 		{ "alt", igt_kms_get_alt_edid, 0 },
 		{ "hdmi_audio", igt_kms_get_hdmi_audio_edid, 1 },
+		{ "4k", igt_kms_get_4k_edid, 1 },
 		{0},
 	}, *f;
 	const unsigned char *edid;
lib/tests/igt_hdmi_inject.c +0 -1
index 2534b1a23acb..c70c3195cb1d 100644
@@ -72,7 +72,6 @@ igt_simple_main
 		hdmi_inject_func inject;
 	} funcs[] = {
 		{ "3D", kmstest_edid_add_3d },
-		{ "4k", kmstest_edid_add_4k },
 		{ NULL, NULL },
 	}, *f;
 
tests/kms_hdmi_inject.c +2 -7
index 9a968fa9e50e..60198f529817 100644
@@ -76,8 +76,7 @@ get_connector(int drm_fd, drmModeRes *res)
 static void
 hdmi_inject_4k(int drm_fd, drmModeConnector *connector)
 {
-	unsigned char *edid;
-	size_t length;
+	const unsigned char *edid;
 	struct kmstest_connector_config config;
 	int ret, cid, i, crtc_mask = -1;
 	int fb_id;
@@ -90,9 +89,7 @@ hdmi_inject_4k(int drm_fd, drmModeConnector *connector)
 	/* 4K requires at least HSW */
 	igt_require(IS_HASWELL(devid) || intel_gen(devid) >= 8);
 
-	kmstest_edid_add_4k(igt_kms_get_base_edid(), EDID_LENGTH, &edid,
-			    &length);
-
+	edid = igt_kms_get_4k_edid();
 	kmstest_force_edid(drm_fd, connector, edid);
 
 	if (!kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_ON))
@@ -135,8 +132,6 @@ hdmi_inject_4k(int drm_fd, drmModeConnector *connector)
 
 	kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_UNSPECIFIED);
 	kmstest_force_edid(drm_fd, connector, NULL);
-
-	free(edid);
 }
 
 static void
Signature · 6 lines
2.22.0

_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev
Reviewed-by on v2 6/6
#7 lore raw

Re: [igt-dev] [PATCH i-g-t v2 6/6] lib/igt_kms: use igt_edid to generate a 4K EDID

Quoted 3 lines · Simon Ser

The new EDID has been byte-by-byte checked to be exactly the same as before.

Seems ok

Quoted 220 lines
---
 lib/igt_kms.c               | 107 ++++++++++++++++++++----------------
 lib/igt_kms.h               |   2 +-
 lib/tests/igt_edid.c        |   1 +
 lib/tests/igt_hdmi_inject.c |   1 -
 tests/kms_hdmi_inject.c     |   9 +--
 5 files changed, 64 insertions(+), 56 deletions(-)
lib/igt_kms.c +60 -47
index 424c83159c78..19d8acac8d77 100644
@@ -284,6 +284,66 @@ const unsigned char *igt_kms_get_dp_audio_edid(void)
 	return raw_edid;
 }
 
+static const uint8_t edid_4k_svds[] = {
+	32 | CEA_SVD_NATIVE, /* 1080p @ 24Hz (native) */
+	5,                   /* 1080i @ 60Hz */
+	20,                  /* 1080i @ 50Hz */
+	4,                   /* 720p @ 60Hz */
+	19,                  /* 720p @ 50Hz */
+};
+
+const unsigned char *igt_kms_get_4k_edid(void)
+{
+	static unsigned char raw_edid[256];
+	struct edid *edid;
+	struct edid_ext *edid_ext;
+	struct edid_cea *edid_cea;
+	char *cea_data;
+	struct edid_cea_data_block *block;
+	/* We'll add 6 extension fields to the HDMI VSDB. */
+	char raw_hdmi[HDMI_VSDB_MIN_SIZE + 6] = {0};
+	struct hdmi_vsdb *hdmi;
+	size_t cea_data_size = 0;
+
+	/* Create a new EDID from the base IGT EDID, and add an
+	 * extension that advertises 4K support. */
+	edid = (struct edid *) raw_edid;
+	memcpy(edid, igt_kms_get_base_edid(), sizeof(struct edid));
+	edid->extensions_len = 1;
+	edid_ext = &edid->extensions[0];
+	edid_cea = &edid_ext->data.cea;
+	cea_data = edid_cea->data;
+
+	/* Short Video Descriptor */
+	block = (struct edid_cea_data_block *) &cea_data[cea_data_size];
+	cea_data_size += edid_cea_data_block_set_svd(block, edid_4k_svds,
+						     sizeof(edid_4k_svds));
+
+	/* Vendor-Specific Data Block */
+	hdmi = (struct hdmi_vsdb *) raw_hdmi;
+	hdmi->src_phy_addr[0] = 0x10;
+	hdmi->src_phy_addr[1] = 0x00;
+	/* 6 extension fields */
+	hdmi->flags1 = 0;
+	hdmi->max_tdms_clock = 0;
+	hdmi->flags2 = HDMI_VSDB_VIDEO_PRESENT;
+	hdmi->data[0] = 0x00; /* HDMI video flags */
+	hdmi->data[1] = 1 << 5; /* 1 VIC entry, 0 3D entries */
+	hdmi->data[2] = 0x01; /* 2160p, specified as short descriptor */
+
+	block = (struct edid_cea_data_block *) &cea_data[cea_data_size];
+	cea_data_size += edid_cea_data_block_set_hdmi_vsdb(block, hdmi,
+							   sizeof(raw_hdmi));
+
+	assert(cea_data_size <= sizeof(edid_cea->data));
+
+	edid_ext_set_cea(edid_ext, cea_data_size, 0, 0);
+
+	edid_update_checksum(edid);
+	edid_ext_update_cea_checksum(edid_ext);
+	return raw_edid;
+}
+
 const char * const igt_plane_prop_names[IGT_NUM_PLANE_PROPS] = {
 	[IGT_PLANE_SRC_X] = "SRC_X",
 	[IGT_PLANE_SRC_Y] = "SRC_Y",
@@ -1346,8 +1406,6 @@ struct edid_block {
     unsigned char *data;
 };
 
-#define DTD_SUPPORTS_AUDIO 1<<6
-
 static struct edid_block
 init_cea_block(const unsigned char *edid, size_t length,
 	       unsigned char *new_edid_ptr[], size_t *new_length,
@@ -1435,51 +1493,6 @@ void kmstest_edid_add_3d(const unsigned char *edid, size_t length,
 	update_edid_csum(new_edid.data, length);
 }
 
-/**
- * kmstest_edid_add_4k:
- * @edid: an existing valid edid block
- * @length: length of @edid
- * @new_edid_ptr: pointer to where the new edid will be placed
- * @new_length: pointer to the size of the new edid
- *
- * Makes a copy of an existing edid block and adds an extension indicating
- * a HDMI 4K mode in vsdb.
- */
-void kmstest_edid_add_4k(const unsigned char *edid, size_t length,
-			 unsigned char *new_edid_ptr[], size_t *new_length)
-{
-	char vsdb_block_len = 12;
-	struct edid_block new_edid = init_cea_block(edid, length, new_edid_ptr,
-						    new_length, vsdb_block_len,
-						    0);
-	int pos = new_edid.pos;
-
-	/* vsdb block ( id | length ) */
-	new_edid.data[pos++] = 3 << 5 | (vsdb_block_len - 1);
-	/* registration id */
-	new_edid.data[pos++] = 0x3;
-	new_edid.data[pos++] = 0xc;
-	new_edid.data[pos++] = 0x0;
-	/* source physical address */
-	new_edid.data[pos++] = 0x10;
-	new_edid.data[pos++] = 0x00;
-	/* Supports_AI ... etc */
-	new_edid.data[pos++] = 0x00;
-	/* Max TMDS Clock */
-	new_edid.data[pos++] = 0x00;
-	/* Latency present, HDMI Video Present */
-	new_edid.data[pos++] = 0x20;
-	/* HDMI Video */
-	new_edid.data[pos++] = 0x00; /* 3D present */
-
-	/* HDMI MODE LEN -- how many entries */
-	new_edid.data[pos++] = 0x20;
-	/* 2160p, specified as short descriptor */
-	new_edid.data[pos++] = 0x01;
-
-	update_edid_csum(new_edid.data, length);
-}
-
 /**
  * kmstest_unset_all_crtcs:
  * @drm_fd: the DRM fd
lib/igt_kms.h +1 -1
index f72508640712..203719878d86 100644
@@ -195,7 +195,6 @@ enum intel_broadcast_rgb_mode {
 bool kmstest_force_connector(int fd, drmModeConnector *connector,
 			     enum kmstest_force_connector_state state);
 void kmstest_edid_add_3d(const unsigned char *edid, size_t length, unsigned char *new_edid_ptr[], size_t *new_length);
-void kmstest_edid_add_4k(const unsigned char *edid, size_t length, unsigned char *new_edid_ptr[], size_t *new_length);
 void kmstest_force_edid(int drm_fd, drmModeConnector *connector,
 			const unsigned char *edid);
 
@@ -763,6 +762,7 @@ const unsigned char *igt_kms_get_base_edid(void);
 const unsigned char *igt_kms_get_alt_edid(void);
 const unsigned char *igt_kms_get_hdmi_audio_edid(void);
 const unsigned char *igt_kms_get_dp_audio_edid(void);
+const unsigned char *igt_kms_get_4k_edid(void);
 
 struct udev_monitor *igt_watch_hotplug(void);
 bool igt_hotplug_detected(struct udev_monitor *mon,
lib/tests/igt_edid.c +1 -0
index a847df272525..1a78b38a945b 100644
@@ -76,6 +76,7 @@ igt_simple_main
 		{ "base", igt_kms_get_base_edid, 0 },
 		{ "alt", igt_kms_get_alt_edid, 0 },
 		{ "hdmi_audio", igt_kms_get_hdmi_audio_edid, 1 },
+		{ "4k", igt_kms_get_4k_edid, 1 },
 		{0},
 	}, *f;
 	const unsigned char *edid;
lib/tests/igt_hdmi_inject.c +0 -1
index 2534b1a23acb..c70c3195cb1d 100644
@@ -72,7 +72,6 @@ igt_simple_main
 		hdmi_inject_func inject;
 	} funcs[] = {
 		{ "3D", kmstest_edid_add_3d },
-		{ "4k", kmstest_edid_add_4k },
 		{ NULL, NULL },
 	}, *f;
 
tests/kms_hdmi_inject.c +2 -7
index 9a968fa9e50e..60198f529817 100644
@@ -76,8 +76,7 @@ get_connector(int drm_fd, drmModeRes *res)
 static void
 hdmi_inject_4k(int drm_fd, drmModeConnector *connector)
 {
-	unsigned char *edid;
-	size_t length;
+	const unsigned char *edid;
 	struct kmstest_connector_config config;
 	int ret, cid, i, crtc_mask = -1;
 	int fb_id;
@@ -90,9 +89,7 @@ hdmi_inject_4k(int drm_fd, drmModeConnector *connector)
 	/* 4K requires at least HSW */
 	igt_require(IS_HASWELL(devid) || intel_gen(devid) >= 8);
 
-	kmstest_edid_add_4k(igt_kms_get_base_edid(), EDID_LENGTH, &edid,
-			    &length);
-
+	edid = igt_kms_get_4k_edid();
 	kmstest_force_edid(drm_fd, connector, edid);
 
 	if (!kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_ON))
@@ -135,8 +132,6 @@ hdmi_inject_4k(int drm_fd, drmModeConnector *connector)
 
 	kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_UNSPECIFIED);
 	kmstest_force_edid(drm_fd, connector, NULL);
-
-	free(edid);
 }
 
 static void
Signature · 1 line
2.22.0
Signature · 6 lines
Ville Syrjälä
Intel
_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev
author
#8 lore raw

Re: [igt-dev] [PATCH i-g-t v2 6/6] lib/igt_kms: use igt_edid to generate a 4K EDID

Quoted 6 lines · Ville Syrjälä
Quoted 3 lines · Simon Ser

The new EDID has been byte-by-byte checked to be exactly the same as before.

Seems ok

Honestly, if you have ideas to improve igt_edid, they are very welcome!

How would the perfect EDID library look like?

Quoted 219 lines
Quoted 217 lines
---
 lib/igt_kms.c               | 107 ++++++++++++++++++++----------------
 lib/igt_kms.h               |   2 +-
 lib/tests/igt_edid.c        |   1 +
 lib/tests/igt_hdmi_inject.c |   1 -
 tests/kms_hdmi_inject.c     |   9 +--
 5 files changed, 64 insertions(+), 56 deletions(-)
lib/igt_kms.c +60 -47
index 424c83159c78..19d8acac8d77 100644
@@ -284,6 +284,66 @@ const unsigned char *igt_kms_get_dp_audio_edid(void)
 	return raw_edid;
 }
 
+static const uint8_t edid_4k_svds[] = {
+	32 | CEA_SVD_NATIVE, /* 1080p @ 24Hz (native) */
+	5,                   /* 1080i @ 60Hz */
+	20,                  /* 1080i @ 50Hz */
+	4,                   /* 720p @ 60Hz */
+	19,                  /* 720p @ 50Hz */
+};
+
+const unsigned char *igt_kms_get_4k_edid(void)
+{
+	static unsigned char raw_edid[256];
+	struct edid *edid;
+	struct edid_ext *edid_ext;
+	struct edid_cea *edid_cea;
+	char *cea_data;
+	struct edid_cea_data_block *block;
+	/* We'll add 6 extension fields to the HDMI VSDB. */
+	char raw_hdmi[HDMI_VSDB_MIN_SIZE + 6] = {0};
+	struct hdmi_vsdb *hdmi;
+	size_t cea_data_size = 0;
+
+	/* Create a new EDID from the base IGT EDID, and add an
+	 * extension that advertises 4K support. */
+	edid = (struct edid *) raw_edid;
+	memcpy(edid, igt_kms_get_base_edid(), sizeof(struct edid));
+	edid->extensions_len = 1;
+	edid_ext = &edid->extensions[0];
+	edid_cea = &edid_ext->data.cea;
+	cea_data = edid_cea->data;
+
+	/* Short Video Descriptor */
+	block = (struct edid_cea_data_block *) &cea_data[cea_data_size];
+	cea_data_size += edid_cea_data_block_set_svd(block, edid_4k_svds,
+						     sizeof(edid_4k_svds));
+
+	/* Vendor-Specific Data Block */
+	hdmi = (struct hdmi_vsdb *) raw_hdmi;
+	hdmi->src_phy_addr[0] = 0x10;
+	hdmi->src_phy_addr[1] = 0x00;
+	/* 6 extension fields */
+	hdmi->flags1 = 0;
+	hdmi->max_tdms_clock = 0;
+	hdmi->flags2 = HDMI_VSDB_VIDEO_PRESENT;
+	hdmi->data[0] = 0x00; /* HDMI video flags */
+	hdmi->data[1] = 1 << 5; /* 1 VIC entry, 0 3D entries */
+	hdmi->data[2] = 0x01; /* 2160p, specified as short descriptor */
+
+	block = (struct edid_cea_data_block *) &cea_data[cea_data_size];
+	cea_data_size += edid_cea_data_block_set_hdmi_vsdb(block, hdmi,
+							   sizeof(raw_hdmi));
+
+	assert(cea_data_size <= sizeof(edid_cea->data));
+
+	edid_ext_set_cea(edid_ext, cea_data_size, 0, 0);
+
+	edid_update_checksum(edid);
+	edid_ext_update_cea_checksum(edid_ext);
+	return raw_edid;
+}
+
 const char * const igt_plane_prop_names[IGT_NUM_PLANE_PROPS] = {
 	[IGT_PLANE_SRC_X] = "SRC_X",
 	[IGT_PLANE_SRC_Y] = "SRC_Y",
@@ -1346,8 +1406,6 @@ struct edid_block {
     unsigned char *data;
 };
 
-#define DTD_SUPPORTS_AUDIO 1<<6
-
 static struct edid_block
 init_cea_block(const unsigned char *edid, size_t length,
 	       unsigned char *new_edid_ptr[], size_t *new_length,
@@ -1435,51 +1493,6 @@ void kmstest_edid_add_3d(const unsigned char *edid, size_t length,
 	update_edid_csum(new_edid.data, length);
 }
 
-/**
- * kmstest_edid_add_4k:
- * @edid: an existing valid edid block
- * @length: length of @edid
- * @new_edid_ptr: pointer to where the new edid will be placed
- * @new_length: pointer to the size of the new edid
- *
- * Makes a copy of an existing edid block and adds an extension indicating
- * a HDMI 4K mode in vsdb.
- */
-void kmstest_edid_add_4k(const unsigned char *edid, size_t length,
-			 unsigned char *new_edid_ptr[], size_t *new_length)
-{
-	char vsdb_block_len = 12;
-	struct edid_block new_edid = init_cea_block(edid, length, new_edid_ptr,
-						    new_length, vsdb_block_len,
-						    0);
-	int pos = new_edid.pos;
-
-	/* vsdb block ( id | length ) */
-	new_edid.data[pos++] = 3 << 5 | (vsdb_block_len - 1);
-	/* registration id */
-	new_edid.data[pos++] = 0x3;
-	new_edid.data[pos++] = 0xc;
-	new_edid.data[pos++] = 0x0;
-	/* source physical address */
-	new_edid.data[pos++] = 0x10;
-	new_edid.data[pos++] = 0x00;
-	/* Supports_AI ... etc */
-	new_edid.data[pos++] = 0x00;
-	/* Max TMDS Clock */
-	new_edid.data[pos++] = 0x00;
-	/* Latency present, HDMI Video Present */
-	new_edid.data[pos++] = 0x20;
-	/* HDMI Video */
-	new_edid.data[pos++] = 0x00; /* 3D present */
-
-	/* HDMI MODE LEN -- how many entries */
-	new_edid.data[pos++] = 0x20;
-	/* 2160p, specified as short descriptor */
-	new_edid.data[pos++] = 0x01;
-
-	update_edid_csum(new_edid.data, length);
-}
-
 /**
  * kmstest_unset_all_crtcs:
  * @drm_fd: the DRM fd
lib/igt_kms.h +1 -1
index f72508640712..203719878d86 100644
@@ -195,7 +195,6 @@ enum intel_broadcast_rgb_mode {
 bool kmstest_force_connector(int fd, drmModeConnector *connector,
 			     enum kmstest_force_connector_state state);
 void kmstest_edid_add_3d(const unsigned char *edid, size_t length, unsigned char *new_edid_ptr[], size_t *new_length);
-void kmstest_edid_add_4k(const unsigned char *edid, size_t length, unsigned char *new_edid_ptr[], size_t *new_length);
 void kmstest_force_edid(int drm_fd, drmModeConnector *connector,
 			const unsigned char *edid);
 
@@ -763,6 +762,7 @@ const unsigned char *igt_kms_get_base_edid(void);
 const unsigned char *igt_kms_get_alt_edid(void);
 const unsigned char *igt_kms_get_hdmi_audio_edid(void);
 const unsigned char *igt_kms_get_dp_audio_edid(void);
+const unsigned char *igt_kms_get_4k_edid(void);
 
 struct udev_monitor *igt_watch_hotplug(void);
 bool igt_hotplug_detected(struct udev_monitor *mon,
lib/tests/igt_edid.c +1 -0
index a847df272525..1a78b38a945b 100644
@@ -76,6 +76,7 @@ igt_simple_main
 		{ "base", igt_kms_get_base_edid, 0 },
 		{ "alt", igt_kms_get_alt_edid, 0 },
 		{ "hdmi_audio", igt_kms_get_hdmi_audio_edid, 1 },
+		{ "4k", igt_kms_get_4k_edid, 1 },
 		{0},
 	}, *f;
 	const unsigned char *edid;
lib/tests/igt_hdmi_inject.c +0 -1
index 2534b1a23acb..c70c3195cb1d 100644
@@ -72,7 +72,6 @@ igt_simple_main
 		hdmi_inject_func inject;
 	} funcs[] = {
 		{ "3D", kmstest_edid_add_3d },
-		{ "4k", kmstest_edid_add_4k },
 		{ NULL, NULL },
 	}, *f;
 
tests/kms_hdmi_inject.c +2 -7
index 9a968fa9e50e..60198f529817 100644
@@ -76,8 +76,7 @@ get_connector(int drm_fd, drmModeRes *res)
 static void
 hdmi_inject_4k(int drm_fd, drmModeConnector *connector)
 {
-	unsigned char *edid;
-	size_t length;
+	const unsigned char *edid;
 	struct kmstest_connector_config config;
 	int ret, cid, i, crtc_mask = -1;
 	int fb_id;
@@ -90,9 +89,7 @@ hdmi_inject_4k(int drm_fd, drmModeConnector *connector)
 	/* 4K requires at least HSW */
 	igt_require(IS_HASWELL(devid) || intel_gen(devid) >= 8);
 
-	kmstest_edid_add_4k(igt_kms_get_base_edid(), EDID_LENGTH, &edid,
-			    &length);
-
+	edid = igt_kms_get_4k_edid();
 	kmstest_force_edid(drm_fd, connector, edid);
 
 	if (!kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_ON))
@@ -135,8 +132,6 @@ hdmi_inject_4k(int drm_fd, drmModeConnector *connector)
 
 	kmstest_force_connector(drm_fd, connector, FORCE_CONNECTOR_UNSPECIFIED);
 	kmstest_force_edid(drm_fd, connector, NULL);
-
-	free(edid);
 }
 
Quoted 3 lines
Quoted 3 lines
tests/kms_hdmi_inject.c +0 -0
 static void
Signature · 1 line
2.22.0

_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev

#9 lore raw

[igt-dev] ✗ Fi.CI.BAT: failure for series starting with [i-g-t,v2,1/6] lib/igt_kms: remove length parameter from kmstest_force_edid

In reply to Simon Ser
== Series Details ==

== Series Details ==

Series: series starting with [i-g-t,v2,1/6] lib/igt_kms: remove length parameter from kmstest_force_edid
URL : https://patchwork.freedesktop.org/series/63124/
State : failure

== Summary ==

CI Bug Log - changes from IGT_5080 -> IGTPW_3231
====================================================

Summary
-------

**FAILURE**

Serious unknown changes coming with IGTPW_3231 absolutely need to be verified manually.

If you think the reported changes have nothing to do with the changes introduced in IGTPW_3231, please notify your bug team to allow them to document this new failure mode, which will reduce false positives in CI.

External URL: https://patchwork.freedesktop.org/api/1.0/series/63124/revisions/1/mbox/

Possible new issues
-------------------

Here are the unknown changes that may have been introduced in IGTPW_3231:

### IGT changes ###

#### Possible regressions ####

* igt@i915_selftest@live_execlists:
- fi-bwr-2160: [PASS][1] -> [DMESG-WARN][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-bwr-2160/igt@i915_selftest@live_execlists.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-bwr-2160/igt@i915_selftest@live_execlists.html

* igt@i915_selftest@live_hangcheck:
- fi-bwr-2160: [PASS][3] -> [DMESG-FAIL][4]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-bwr-2160/igt@i915_selftest@live_hangcheck.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-bwr-2160/igt@i915_selftest@live_hangcheck.html

Known issues
------------

Here are the changes found in IGTPW_3231 that come from known issues:

### IGT changes ###

#### Issues hit ####

* igt@gem_ctx_create@basic-files:
- fi-icl-guc: [PASS][5] -> [INCOMPLETE][6] ([fdo#107713] / [fdo#109100])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-icl-guc/igt@[email protected]
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-icl-guc/igt@[email protected]

* igt@gem_mmap_gtt@basic-small-bo:
- fi-icl-u3: [PASS][7] -> [DMESG-WARN][8] ([fdo#107724])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-icl-u3/igt@[email protected]
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-icl-u3/igt@[email protected]

* igt@kms_chamelium@dp-crc-fast:
- fi-cml-u2: [PASS][9] -> [FAIL][10] ([fdo#110387])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-cml-u2/igt@[email protected]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-cml-u2/igt@[email protected]

#### Possible fixes ####

* igt@gem_exec_suspend@basic-s3:
- fi-blb-e6850: [INCOMPLETE][11] ([fdo#107718]) -> [PASS][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-blb-e6850/igt@[email protected]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-blb-e6850/igt@[email protected]

* igt@gem_flink_basic@bad-open:
- fi-icl-u3: [DMESG-WARN][13] ([fdo#107724]) -> [PASS][14]
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-icl-u3/igt@[email protected]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-icl-u3/igt@[email protected]

[fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
[fdo#107718]: https://bugs.freedesktop.org/show_bug.cgi?id=107718
[fdo#107724]: https://bugs.freedesktop.org/show_bug.cgi?id=107724
[fdo#109100]: https://bugs.freedesktop.org/show_bug.cgi?id=109100
[fdo#110387]: https://bugs.freedesktop.org/show_bug.cgi?id=110387

Participating hosts (54 -> 46)
------------------------------

Missing (8): fi-kbl-soraka fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-icl-y fi-byt-clapper fi-bdw-samus

Build changes
-------------

* IGT: IGT_5080 -> IGTPW_3231

CI_DRM_6404: 1b853e6e181c6015faca908b57956ea836e1f440 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_3231: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/
IGT_5080: d255249d3d2a16edf66d90b8e889270ceb8bb9b9 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/
_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev

author
#10 lore raw

Re: [igt-dev] ✗ Fi.CI.BAT: failure for series starting with [i-g-t,v2,1/6] lib/igt_kms: remove length parameter from kmstest_force_edid

Quoted 39 lines · Patchwork

== Series Details ==

Series: series starting with [i-g-t,v2,1/6] lib/igt_kms: remove length parameter from kmstest_force_edid
URL : https://patchwork.freedesktop.org/series/63124/
State : failure

== Summary ==

CI Bug Log - changes from IGT_5080 -> IGTPW_3231
====================================================

Summary
-------

**FAILURE**

Serious unknown changes coming with IGTPW_3231 absolutely need to be verified manually.

If you think the reported changes have nothing to do with the changes introduced in IGTPW_3231, please notify your bug team to allow them to document this new failure mode, which will reduce false positives in CI.

External URL: https://patchwork.freedesktop.org/api/1.0/series/63124/revisions/1/mbox/

Possible new issues
-------------------

Here are the unknown changes that may have been introduced in IGTPW_3231:

### IGT changes ###

#### Possible regressions ####

* igt@i915_selftest@live_execlists:
- fi-bwr-2160: [PASS][1] -> [DMESG-WARN][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-bwr-2160/igt@i915_selftest@live_execlists.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-bwr-2160/igt@i915_selftest@live_execlists.html

Quoted 4 lines

* igt@i915_selftest@live_hangcheck:
- fi-bwr-2160: [PASS][3] -> [DMESG-FAIL][4]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-bwr-2160/igt@i915_selftest@live_hangcheck.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-bwr-2160/igt@i915_selftest@live_hangcheck.html

Cc Martin

Quoted 57 lines

Known issues
------------

Here are the changes found in IGTPW_3231 that come from known issues:

### IGT changes ###

#### Issues hit ####

* igt@gem_ctx_create@basic-files:
- fi-icl-guc: [PASS][5] -> [INCOMPLETE][6] ([fdo#107713] / [fdo#109100])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-icl-guc/igt@[email protected]
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-icl-guc/igt@[email protected]

* igt@gem_mmap_gtt@basic-small-bo:
- fi-icl-u3: [PASS][7] -> [DMESG-WARN][8] ([fdo#107724])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-icl-u3/igt@[email protected]
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-icl-u3/igt@[email protected]

* igt@kms_chamelium@dp-crc-fast:
- fi-cml-u2: [PASS][9] -> [FAIL][10] ([fdo#110387])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-cml-u2/igt@[email protected]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-cml-u2/igt@[email protected]

#### Possible fixes ####

* igt@gem_exec_suspend@basic-s3:
- fi-blb-e6850: [INCOMPLETE][11] ([fdo#107718]) -> [PASS][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-blb-e6850/igt@[email protected]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-blb-e6850/igt@[email protected]

* igt@gem_flink_basic@bad-open:
- fi-icl-u3: [DMESG-WARN][13] ([fdo#107724]) -> [PASS][14]
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5080/fi-icl-u3/igt@[email protected]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/fi-icl-u3/igt@[email protected]

[fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
[fdo#107718]: https://bugs.freedesktop.org/show_bug.cgi?id=107718
[fdo#107724]: https://bugs.freedesktop.org/show_bug.cgi?id=107724
[fdo#109100]: https://bugs.freedesktop.org/show_bug.cgi?id=109100
[fdo#110387]: https://bugs.freedesktop.org/show_bug.cgi?id=110387

Participating hosts (54 -> 46)
------------------------------

Missing (8): fi-kbl-soraka fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-icl-y fi-byt-clapper fi-bdw-samus

Build changes
-------------

* IGT: IGT_5080 -> IGTPW_3231

Quoted 7 lines

CI_DRM_6404: 1b853e6e181c6015faca908b57956ea836e1f440 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_3231: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/
IGT_5080: d255249d3d2a16edf66d90b8e889270ceb8bb9b9 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3231/

_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev

#11 lore raw

[igt-dev] ✗ GitLab.Pipeline: warning for series starting with [i-g-t,v2,1/6] lib/igt_kms: remove length parameter from kmstest_force_edid (rev2)

In reply to Simon Ser
== Series Details ==

== Series Details ==

Series: series starting with [i-g-t,v2,1/6] lib/igt_kms: remove length parameter from kmstest_force_edid (rev2)
URL : https://patchwork.freedesktop.org/series/63124/
State : warning

== Summary ==

Pipeline status: FAILED.

See https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/pipelines/46544 for more details.

== Logs ==

For more details see: https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/pipelines/46544
_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev

#12 lore raw

[igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,v2,1/6] lib/igt_kms: remove length parameter from kmstest_force_edid (rev2)

In reply to Simon Ser
== Series Details ==

== Series Details ==

Series: series starting with [i-g-t,v2,1/6] lib/igt_kms: remove length parameter from kmstest_force_edid (rev2)
URL : https://patchwork.freedesktop.org/series/63124/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6407 -> IGTPW_3239
====================================================

Summary
-------

**SUCCESS**

No regressions found.

External URL: https://patchwork.freedesktop.org/api/1.0/series/63124/revisions/2/mbox/

Known issues
------------

Here are the changes found in IGTPW_3239 that come from known issues:

### IGT changes ###

#### Issues hit ####

* igt@gem_ctx_create@basic-files:
- fi-icl-dsi: [PASS][1] -> [INCOMPLETE][2] ([fdo#107713] / [fdo#109100])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/fi-icl-dsi/igt@[email protected]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/fi-icl-dsi/igt@[email protected]

#### Possible fixes ####

* igt@gem_close_race@basic-threads:
- fi-icl-u3: [INCOMPLETE][3] ([fdo#107713]) -> [PASS][4]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/fi-icl-u3/igt@[email protected]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/fi-icl-u3/igt@[email protected]

* igt@i915_pm_rpm@module-reload:
- fi-skl-6770hq: [FAIL][5] ([fdo#108511]) -> [PASS][6]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/fi-skl-6770hq/igt@[email protected]
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/fi-skl-6770hq/igt@[email protected]

* igt@kms_busy@basic-flip-c:
- fi-skl-6770hq: [SKIP][7] ([fdo#109271] / [fdo#109278]) -> [PASS][8] +2 similar issues
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/fi-skl-6770hq/igt@[email protected]
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/fi-skl-6770hq/igt@[email protected]
- {fi-icl-u4}: [DMESG-WARN][9] ([fdo#105602]) -> [PASS][10] +5 similar issues
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/fi-icl-u4/igt@[email protected]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/fi-icl-u4/igt@[email protected]

* igt@kms_chamelium@hdmi-hpd-fast:
- fi-kbl-7500u: [FAIL][11] ([fdo#109485]) -> [PASS][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/fi-kbl-7500u/igt@[email protected]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/fi-kbl-7500u/igt@[email protected]

* igt@kms_flip@basic-flip-vs-dpms:
- fi-skl-6770hq: [SKIP][13] ([fdo#109271]) -> [PASS][14] +23 similar issues
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/fi-skl-6770hq/igt@[email protected]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/fi-skl-6770hq/igt@[email protected]

{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).

[fdo#102505]: https://bugs.freedesktop.org/show_bug.cgi?id=102505
[fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
[fdo#105602]: https://bugs.freedesktop.org/show_bug.cgi?id=105602
[fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
[fdo#108511]: https://bugs.freedesktop.org/show_bug.cgi?id=108511
[fdo#109100]: https://bugs.freedesktop.org/show_bug.cgi?id=109100
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278
[fdo#109485]: https://bugs.freedesktop.org/show_bug.cgi?id=109485
[fdo#111045]: https://bugs.freedesktop.org/show_bug.cgi?id=111045
[fdo#111049]: https://bugs.freedesktop.org/show_bug.cgi?id=111049

Participating hosts (53 -> 45)
------------------------------

Additional (1): fi-cml-u
Missing (9): fi-ilk-m540 fi-hsw-4200u fi-bsw-n3050 fi-byt-squawks fi-bsw-cyan fi-icl-y fi-icl-guc fi-byt-clapper fi-bdw-samus

Build changes
-------------

* IGT: IGT_5082 -> IGTPW_3239

CI_DRM_6407: 65a3c2434ef1aed9578567e76a95a714f8d79a79 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_3239: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/
IGT_5082: f7c51e6fbf8da0784b64a1edaee5266aa9b9f829 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/
_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev

#13 lore raw

[igt-dev] ✓ Fi.CI.IGT: success for series starting with [i-g-t,v2,1/6] lib/igt_kms: remove length parameter from kmstest_force_edid (rev2)

In reply to Simon Ser
== Series Details ==

== Series Details ==

Series: series starting with [i-g-t,v2,1/6] lib/igt_kms: remove length parameter from kmstest_force_edid (rev2)
URL : https://patchwork.freedesktop.org/series/63124/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_6407_full -> IGTPW_3239_full
====================================================

Summary
-------

**SUCCESS**

No regressions found.

External URL: https://patchwork.freedesktop.org/api/1.0/series/63124/revisions/2/mbox/

Known issues
------------

Here are the changes found in IGTPW_3239_full that come from known issues:

### IGT changes ###

#### Issues hit ####

* igt@kms_flip@2x-modeset-vs-vblank-race-interruptible:
- shard-glk: [PASS][1] -> [FAIL][2] ([fdo#103060])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-glk7/igt@[email protected]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-glk8/igt@[email protected]

* igt@kms_flip@flip-vs-suspend:
- shard-hsw: [PASS][3] -> [INCOMPLETE][4] ([fdo#103540])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-hsw2/igt@[email protected]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-hsw1/igt@[email protected]

* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-gtt:
- shard-iclb: [PASS][5] -> [FAIL][6] ([fdo#103167]) +3 similar issues
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-iclb8/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-gtt.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-iclb2/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-gtt.html

* igt@kms_frontbuffer_tracking@fbc-2p-indfb-fliptrack:
- shard-glk: [PASS][7] -> [FAIL][8] ([fdo#103167])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-glk6/igt@[email protected]
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-glk8/igt@[email protected]

* igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
- shard-apl: [PASS][9] -> [DMESG-WARN][10] ([fdo#108566]) +4 similar issues
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-apl1/igt@[email protected]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-apl8/igt@[email protected]

* igt@kms_psr@psr2_basic:
- shard-iclb: [PASS][11] -> [SKIP][12] ([fdo#109441]) +2 similar issues
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-iclb2/igt@kms_psr@psr2_basic.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-iclb8/igt@kms_psr@psr2_basic.html

* igt@kms_setmode@basic:
- shard-kbl: [PASS][13] -> [FAIL][14] ([fdo#99912])
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-kbl3/igt@[email protected]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-kbl7/igt@[email protected]

* igt@kms_universal_plane@universal-plane-gen9-features-pipe-b:
- shard-iclb: [PASS][15] -> [INCOMPLETE][16] ([fdo#107713])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-iclb4/igt@[email protected]
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-iclb7/igt@[email protected]

#### Possible fixes ####

* igt@gem_busy@close-race:
- shard-hsw: [DMESG-FAIL][17] ([fdo#111063]) -> [PASS][18]
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-hsw6/igt@[email protected]
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-hsw8/igt@[email protected]
- shard-kbl: [DMESG-FAIL][19] ([fdo#111063]) -> [PASS][20]
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-kbl1/igt@[email protected]
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-kbl7/igt@[email protected]

* igt@gem_eio@in-flight-suspend:
- shard-apl: [DMESG-WARN][21] ([fdo#108566]) -> [PASS][22] +2 similar issues
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-apl3/igt@[email protected]
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-apl1/igt@[email protected]

* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite:
- shard-iclb: [FAIL][23] ([fdo#103167]) -> [PASS][24] +3 similar issues
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-iclb5/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-iclb3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html

* igt@kms_plane_lowres@pipe-a-tiling-y:
- shard-iclb: [FAIL][25] ([fdo#103166]) -> [PASS][26]
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-iclb5/igt@[email protected]
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-iclb8/igt@[email protected]

* igt@kms_psr@psr2_cursor_plane_onoff:
- shard-iclb: [SKIP][27] ([fdo#109441]) -> [PASS][28] +2 similar issues
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6407/shard-iclb5/igt@kms_psr@psr2_cursor_plane_onoff.html
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/shard-iclb2/igt@kms_psr@psr2_cursor_plane_onoff.html

[fdo#103060]: https://bugs.freedesktop.org/show_bug.cgi?id=103060
[fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
[fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
[fdo#103540]: https://bugs.freedesktop.org/show_bug.cgi?id=103540
[fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
[fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
[fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
[fdo#111063]: https://bugs.freedesktop.org/show_bug.cgi?id=111063
[fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912

Participating hosts (10 -> 6)
------------------------------

Missing (4): pig-skl-6260u shard-skl pig-hsw-4770r pig-glk-j5005

Build changes
-------------

* IGT: IGT_5082 -> IGTPW_3239
* Piglit: piglit_4509 -> None

CI_DRM_6407: 65a3c2434ef1aed9578567e76a95a714f8d79a79 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_3239: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/
IGT_5082: f7c51e6fbf8da0784b64a1edaee5266aa9b9f829 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3239/
_______________________________________________
igt-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/igt-dev