Skip to contentSkip to conversation

tests/kms_chamelium: add HDMI audio test

PATCH Superseded Simon Ser 2 participants 13 messages May 14, 2019 – May 15, 2019 Library code

v3 of 7 Superseded Latest is v7 →

lore
Share & tools
lore

Simon Ser

author
#0 lore raw

v3 cover tests/kms_chamelium: add HDMI audio test

Changes from v2 to v3: skip tests if GetAudioFormat is not supported

Simon Ser (9):
tests/kms_chamelium: skip if GetAudioFormat is not supported lib/igt_edid: add support for Short Audio Descriptors lib/igt_edid: add support for Vendor Specific Data blocks lib/igt_chamelium: add CHAMELIUM_DEFAULT_EDID tests/kms_chamelium: generate an EDID with audio support tests/kms_chamelium: disable >48KHz audio tests tests/kms_chamelium: enable audio test on HDMI ports tests/kms_chamelium: don't abort audio test on first fail
HAX: add {dp,hdmi}-audio test to fast-feedback

 lib/igt_chamelium.c                   |  74 ++++++--
 lib/igt_chamelium.h                   |   7 +
 lib/igt_edid.c                        | 113 +++++++++++-
 lib/igt_edid.h                        | 103 ++++++++++-
 tests/intel-ci/fast-feedback.testlist |   2 +
 tests/kms_chamelium.c                 | 246 ++++++++++++++++++--------
 6 files changed, 452 insertions(+), 93 deletions(-)

--
2.21.0

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

author
#1 lore raw

PATCH v3 1/9 tests/kms_chamelium: skip if GetAudioFormat is not supported

Skip audio tests in case GetAudioFormat is not supported by the Chamelium device (because it is outdated).

A new __chamelium_rpc function has been introduced. The difference with chamelium_rpc is that it doesn't asserts that the XML-RPC succeeds.

A new chamelium_supports_get_audio_format function has been introduced. It tries to call GetAudioFormats with abritrary parameters, and checks whether the call fails because the method doesn't exist. It is not possible to generalize it into chamelium_supports_method because some methods might have side-effects (and the only way to check whether a method exists is to try to call it).

---
 lib/igt_chamelium.c   | 65 +++++++++++++++++++++++++++++++++++++------
 lib/igt_chamelium.h   |  1 +
 tests/kms_chamelium.c |  5 ++--
 3 files changed, 60 insertions(+), 11 deletions(-)
lib/igt_chamelium.c +56 -9
index 94825002cab3..d3ab1ffcc5d6 100644
@@ -265,14 +265,13 @@ static void *chamelium_fsm_mon(void *data)
 	return NULL;
 }
 
-static xmlrpc_value *chamelium_rpc(struct chamelium *chamelium,
-				   struct chamelium_port *fsm_port,
-				   const char *method_name,
-				   const char *format_str,
-				   ...)
+static xmlrpc_value *__chamelium_rpc_va(struct chamelium *chamelium,
+					struct chamelium_port *fsm_port,
+					const char *method_name,
+					const char *format_str,
+					va_list va_args)
 {
-	xmlrpc_value *res;
-	va_list va_args;
+	xmlrpc_value *res = NULL;
 	struct fsm_monitor_args monitor_args;
 	pthread_t fsm_thread_id;
 
@@ -296,17 +295,49 @@ static xmlrpc_value *chamelium_rpc(struct chamelium *chamelium,
 			       &monitor_args);
 	}
 
-	va_start(va_args, format_str);
 	xmlrpc_client_call2f_va(&chamelium->env, chamelium->client,
 				chamelium->url, method_name, format_str, &res,
 				va_args);
-	va_end(va_args);
 
 	if (fsm_port) {
 		pthread_cancel(fsm_thread_id);
 		igt_cleanup_hotplug(monitor_args.mon);
 	}
 
+	return res;
+}
+
+static xmlrpc_value *__chamelium_rpc(struct chamelium *chamelium,
+				     struct chamelium_port *fsm_port,
+				     const char *method_name,
+				     const char *format_str,
+				     ...)
+{
+	xmlrpc_value *res;
+	va_list va_args;
+
+	va_start(va_args, format_str);
+	res = __chamelium_rpc_va(chamelium, fsm_port, method_name,
+				 format_str, va_args);
+	va_end(va_args);
+
+	return res;
+}
+
+static xmlrpc_value *chamelium_rpc(struct chamelium *chamelium,
+				   struct chamelium_port *fsm_port,
+				   const char *method_name,
+				   const char *format_str,
+				   ...)
+{
+	xmlrpc_value *res;
+	va_list va_args;
+
+	va_start(va_args, format_str);
+	res = __chamelium_rpc_va(chamelium, fsm_port, method_name,
+				 format_str, va_args);
+	va_end(va_args);
+
 	igt_assert_f(!chamelium->env.fault_occurred,
 		     "Chamelium RPC call failed: %s\n",
 		     chamelium->env.fault_string);
@@ -1031,6 +1062,22 @@ void chamelium_get_audio_format(struct chamelium *chamelium,
 	xmlrpc_DECREF(res);
 }
 
+/**
+ * chamelium_supports_get_audio_format: check the Chamelium device supports
+ * retrieving the capture audio format.
+ */
+bool chamelium_supports_get_audio_format(struct chamelium *chamelium)
+{
+	xmlrpc_value *res;
+
+	res = __chamelium_rpc(chamelium, NULL, "GetAudioFormat", "(i)", 3);
+	if (res)
+		xmlrpc_DECREF(res);
+
+	return (!chamelium->env.fault_occurred ||
+		chamelium->env.fault_code != XMLRPC_NO_SUCH_METHOD_ERROR);
+}
+
 /**
  * chamelium_start_capturing_audio:
  * @chamelium: the Chamelium instance
lib/igt_chamelium.h +1 -0
index a067c888c0ff..ba44a44d6d8f 100644
@@ -114,6 +114,7 @@ void chamelium_get_audio_channel_mapping(struct chamelium *chamelium,
 void chamelium_get_audio_format(struct chamelium *chamelium,
 				struct chamelium_port *port,
 				int *rate, int *channels);
+bool chamelium_supports_get_audio_format(struct chamelium *chamelium);
 void chamelium_start_capturing_audio(struct chamelium *chamelium,
 				    struct chamelium_port *port, bool save_to_file);
 struct chamelium_audio_file *chamelium_stop_capturing_audio(struct chamelium *chamelium,
tests/kms_chamelium.c +3 -2
index 7c3006982abd..c2d5793a41c5 100644
@@ -1033,9 +1033,10 @@ test_display_audio(data_t *data, struct chamelium_port *port,
 
 	igt_require(alsa_has_exclusive_access());
 
-	/* Old Chamelium devices need an update for DisplayPort audio
-	 * support. */
+	/* Old Chamelium devices need an update for DisplayPort audio and
+	 * chamelium_get_audio_format support. */
 	igt_require(chamelium_has_audio_support(data->chamelium, port));
+	igt_require(chamelium_supports_get_audio_format(data->chamelium));
 
 	alsa = alsa_init();
 	igt_assert(alsa);
Signature · 6 lines
2.21.0

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

PATCH v3 2/9 lib/igt_edid: add support for Short Audio Descriptors

In reply to Simon Ser

Short Audio Descriptors (SADs) can be wrapped in an EDID extension to advertise audio support.

The EDID structure is as follows:
- The 128-byte EDID block contains a field with the number of 128-byte extension blocks that follow.
- Each extension block has a tag which specifies its type. The tag we're interested in is CEA-861.
- The CEA block has a few flags, including one that indicates whether basic audio is supported. The CEA block contains several sub-blocks of variable size. There are two types of CEA sub-blocks:
- Detailed Timing Descriptors (DTDs): additional video timings
- Data Block Collection: these can detail video, audio, speaker placement and other pieces of information about the display.
We're interested in audio blocks.
- Audio blocks contain one or more Short Audio Descriptors (SADs). A SAD is a 3-byte record describing a supported format.
- SADs can describe support for the PCM format, including sampling rate, sample size and channels.

The igt_edid library intentionally exposes all of this complexity because it would be nice to generate all kind of valid EDIDs and test the kernel handles them correctly (e.g. multiple SADs in different CEA blocks, or any EDID we find in the wild really).

---
 lib/igt_edid.c | 71 +++++++++++++++++++++++++++++++++++++-----
 lib/igt_edid.h | 84 ++++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 145 insertions(+), 10 deletions(-)
lib/igt_edid.c +63 -8
index 9d604b13c4d6..d01defb0925e 100644
@@ -252,19 +252,74 @@ void edid_init_with_mode(struct edid *edid, drmModeModeInfo *mode)
 				   EDID_DETAIL_MONITOR_NAME, "IGT");
 }
 
+static uint8_t compute_checksum(const uint8_t *buf, size_t size)
+{
+	size_t i;
+	uint8_t sum = 0;
+
+	assert(size > 0);
+	for (i = 0; i < size - 1; i++) {
+		sum += buf[i];
+	}
+
+	return 256 - sum;
+}
+
 /**
  * edid_update_checksum: compute and update the EDID checksum
  */
 void edid_update_checksum(struct edid *edid)
 {
-	size_t i;
-	const uint8_t *buf = (const uint8_t *) edid;
-	uint8_t sum = 0;
+	edid->checksum = compute_checksum((uint8_t *) edid,
+					  sizeof(struct edid));
+}
 
-	/* calculate checksum */
-	for (i = 0; i < sizeof(struct edid) - 1; i++) {
-		sum = sum + buf[i];
-	}
+/**
+ * cea_sad_init_pcm:
+ * @channels: the number of supported channels (max. 8)
+ * @sampling_rates: bitfield of enum cea_sad_sampling_rate
+ * @sample_sizes: bitfield of enum cea_sad_pcm_sample_size
+ *
+ * Initialize a Short Audio Descriptor to advertise PCM support.
+ */
+void cea_sad_init_pcm(struct cea_sad *sad, int channels,
+		      uint8_t sampling_rates, uint8_t sample_sizes)
+{
+	assert(channels <= 8);
+	sad->format_channels = CEA_SAD_FORMAT_PCM << 3 | (channels - 1);
+	sad->sampling_rates = sampling_rates;
+	sad->bitrate = sample_sizes;
+}
+
+/**
+ * edid_ext_set_cea_sad: set an extension block to be CEA SAD
+ */
+void edid_ext_set_cea_sad(struct edid_ext *ext, const struct cea_sad *sads,
+			  size_t sads_len)
+{
+	struct edid_cea *cea = &ext->data.cea;
+	struct edid_cea_data_block *data_block;
+	size_t sads_size, data_block_size;
 
-	edid->checksum = 256 - sum;
+	memset(ext, 0, sizeof(struct edid_ext));
+
+	sads_size = sizeof(struct cea_sad) * sads_len;
+	data_block_size = sizeof(struct edid_cea_data_block) + sads_size;
+
+	ext->tag = EDID_EXT_CEA;
+
+	cea->revision = 3;
+	cea->dtd_start = 4 + data_block_size;
+	cea->misc = 1 << 6; /* basic audio, no DTD */
+
+	assert(sads_size <= 0xFF);
+	data_block = (struct edid_cea_data_block *) cea->data;
+	data_block->type_len = EDID_CEA_DATA_AUDIO << 5 | sads_size;
+	memcpy(data_block->data.sads, sads, sads_size);
+}
+
+void edid_ext_update_cea_checksum(struct edid_ext *ext)
+{
+	ext->data.cea.checksum = compute_checksum((uint8_t *) ext,
+						  sizeof(struct edid_ext));
 }
lib/igt_edid.h +82 -2

101 lines not on this page · raw message

Signature · 6 lines
2.21.0

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

PATCH v3 3/9 lib/igt_edid: add support for Vendor Specific Data blocks

In reply to Simon Ser

For some reason HDMI audio won't work unless you cast a magic IEEE Registration Identifier alongside with its appropriate Components of Source Physical Address. The easiest way to do this is to capture a wild HDMI EDID, study it, and blindly copy bytes because you don't understand anything about their possible meaning (if any).

This commit also changes the SAD API exposed by igt_edid, to allow for both a SAD block and a VSD block to be included in the same CEA block.

---
 lib/igt_edid.c | 72 +++++++++++++++++++++++++++++++++++++++-----------
 lib/igt_edid.h | 23 ++++++++++++++--
 2 files changed, 78 insertions(+), 17 deletions(-)
lib/igt_edid.c +57 -15
index d01defb0925e..fbdb0c06b8d7 100644
@@ -292,30 +292,72 @@ void cea_sad_init_pcm(struct cea_sad *sad, int channels,
 }
 
 /**
- * edid_ext_set_cea_sad: set an extension block to be CEA SAD
+ * cea_vsd_get_hdmi_default:
+ *
+ * Returns the default Vendor Specific Data block for HDMI.
  */
-void edid_ext_set_cea_sad(struct edid_ext *ext, const struct cea_sad *sads,
-			  size_t sads_len)
+const struct cea_vsd *cea_vsd_get_hdmi_default(size_t *size)
 {
-	struct edid_cea *cea = &ext->data.cea;
-	struct edid_cea_data_block *data_block;
-	size_t sads_size, data_block_size;
+	static char raw[sizeof(struct cea_vsd) + 4] = {0};
+	struct cea_vsd *vsd;
+
+	*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;
+}
+
+static void edid_cea_data_block_init(struct edid_cea_data_block *block,
+				     enum edid_cea_data_type type, size_t size)
+{
+	assert(size <= 0xFF);
+	block->type_len = type << 5 | size;
+}
 
-	memset(ext, 0, sizeof(struct edid_ext));
+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 sads_size;
 
 	sads_size = sizeof(struct cea_sad) * sads_len;
-	data_block_size = sizeof(struct edid_cea_data_block) + sads_size;
+	edid_cea_data_block_init(block, EDID_CEA_DATA_AUDIO, sads_size);
+
+	memcpy(block->data.sads, sads, sads_size);
+
+	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)
+{
+	edid_cea_data_block_init(block, EDID_CEA_DATA_VENDOR_SPECIFIC,
+				 vsd_size);
+
+	memcpy(block->data.vsds, vsd, vsd_size);
+
+	return sizeof(struct edid_cea_data_block) + vsd_size;
+}
+
+void edid_ext_set_cea(struct edid_ext *ext, size_t data_blocks_size,
+		      uint8_t flags)
+{
+	struct edid_cea *cea = &ext->data.cea;
 
 	ext->tag = EDID_EXT_CEA;
 
 	cea->revision = 3;
-	cea->dtd_start = 4 + data_block_size;
-	cea->misc = 1 << 6; /* basic audio, no DTD */
-
-	assert(sads_size <= 0xFF);
-	data_block = (struct edid_cea_data_block *) cea->data;
-	data_block->type_len = EDID_CEA_DATA_AUDIO << 5 | sads_size;
-	memcpy(data_block->data.sads, sads, sads_size);
+	cea->dtd_start = 4 + data_blocks_size;
+	cea->misc = flags; /* just flags, no DTD */
 }
 
 void edid_ext_update_cea_checksum(struct edid_ext *ext)
lib/igt_edid.h +21 -2
index 3668d733f06a..7edd7e38f41e 100644
@@ -189,6 +189,12 @@ struct cea_sad {
 	uint8_t bitrate;
 } __attribute__((packed));
 
+/* Vendor Specific Data */
+struct cea_vsd {
+	uint8_t ieee_oui[3];
+	char data[];
+};
+
 enum edid_cea_data_type {
 	EDID_CEA_DATA_AUDIO = 1,
 	EDID_CEA_DATA_VIDEO = 2,
@@ -200,9 +206,17 @@ 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];
 	} data;
 } __attribute__((packed));
 
+enum edid_cea_flag {
+	EDID_CEA_YCBCR422 = 1 << 4,
+	EDID_CEA_YCBCR444 = 1 << 5,
+	EDID_CEA_BASIC_AUDIO = 1 << 6,
+	EDID_CEA_UNDERSCAN = 1 << 7,
+};
+
 struct edid_cea {
 	uint8_t revision;
 	uint8_t dtd_start;
@@ -275,8 +289,13 @@ 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_set_cea_sad(struct edid_ext *ext, const struct cea_sad *sads,
-			  size_t sads_len);
 void edid_ext_update_cea_checksum(struct edid_ext *ext);
+const struct cea_vsd *cea_vsd_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);
+void edid_ext_set_cea(struct edid_ext *ext, size_t data_blocks_size,
+		      uint8_t flags);
 
 #endif
Signature · 6 lines
2.21.0

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

PATCH v3 4/9 lib/igt_chamelium: add CHAMELIUM_DEFAULT_EDID

In reply to Simon Ser

This ID can be provided to chamelium_port_set_edid to use the default EDID for the port.

---
 lib/igt_chamelium.h | 6 ++++++
 1 file changed, 6 insertions(+)
lib/igt_chamelium.h +6 -0
index ba44a44d6d8f..c6fb7b9d4737 100644
@@ -59,6 +59,12 @@ struct chamelium_audio_file {
 	int channels;
 };
 
+/**
+ * CHAMELIUM_DEFAULT_EDID: provide this ID to #chamelium_port_set_edid to use
+ * the default EDID.
+ */
+#define CHAMELIUM_DEFAULT_EDID 0
+
 struct chamelium *chamelium_init(int drm_fd);
 void chamelium_deinit(struct chamelium *chamelium);
 void chamelium_reset(struct chamelium *chamelium);
Signature · 6 lines
2.21.0

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

PATCH v3 5/9 tests/kms_chamelium: generate an EDID with audio support

In reply to Simon Ser

The default Chamelium EDID works great with DisplayPort but has issues with HDMI. The EDID advertises itself as a DisplayPort-only device, which causes issues with HDMI audio. Additionally, the EDID doesn't contain a magic incantation within a vendor-specific data block that is needed for audio to work.

This patch makes it so an EDID is generated and set by IGT. The EDID is the base IGT EDID patched to append a Short Audio Descriptor and Vendor Specific Data block extension.

This generated EDID is suitable for HDMI audio. For DisplayPort audio, we keep using the Chamelium's default EDID.

A new enum test_edid has been introduced to prevent mismatches between the Chamelium EDID ID and the raw EDID.

The global variable holding the test frequencies has been renamed to prevent shadowing by local variables.

---
 lib/igt_chamelium.c   |   9 +-
 tests/kms_chamelium.c | 192 ++++++++++++++++++++++++++++++------------
 2 files changed, 147 insertions(+), 54 deletions(-)
lib/igt_chamelium.c +7 -2
index d3ab1ffcc5d6..91d330ddcd68 100644
@@ -38,6 +38,7 @@
 #include "igt_chamelium.h"
 #include "igt_core.h"
 #include "igt_aux.h"
+#include "igt_edid.h"
 #include "igt_frame.h"
 #include "igt_list.h"
 #include "igt_kms.h"
@@ -530,14 +531,18 @@ void chamelium_schedule_hpd_toggle(struct chamelium *chamelium,
  *
  * Returns: The ID of the EDID uploaded to the chamelium.
  */
-int chamelium_new_edid(struct chamelium *chamelium, const unsigned char *edid)
+int chamelium_new_edid(struct chamelium *chamelium,
+		       const unsigned char *raw_edid)
 {
 	xmlrpc_value *res;
 	struct chamelium_edid *allocated_edid;
 	int edid_id;
+	struct edid *edid = (struct edid *) raw_edid;
+	size_t edid_size = sizeof(struct edid) +
+			   edid->extensions_len * sizeof(struct edid_ext);
 
 	res = chamelium_rpc(chamelium, NULL, "CreateEdid", "(6)",
-			    edid, EDID_LENGTH);
+			    raw_edid, edid_size);
 
 	xmlrpc_read_int(&chamelium->env, res, &edid_id);
 	xmlrpc_DECREF(res);
tests/kms_chamelium.c +140 -52

387 lines not on this page · raw message

Signature · 6 lines
2.21.0

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

PATCH v3 6/9 tests/kms_chamelium: disable >48KHz audio tests

In reply to Simon Ser

These weren't tested on DisplayPort (because the Chamelium's default EDID doesn't advertise them) so this doesn't remove some test cases.

On HDMI they don't work reliably: sometimes no audio data is captured by the Chamelium. This needs to be investigated, but for now let's just disable them.

---
 tests/kms_chamelium.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
tests/kms_chamelium.c +5 -4
index 6d9d4111ea9b..a686d3479a80 100644
@@ -772,14 +772,15 @@ test_display_frame_dump(data_t *data, struct chamelium_port *port)
 /* A streak of 3 gives confidence that the signal is good. */
 #define MIN_STREAK 3
 
+/* TODO: enable >48KHz rates, these are not reliable */
 static int test_sampling_rates[] = {
 	32000,
 	44100,
 	48000,
-	88200,
-	96000,
-	176400,
-	192000,
+	/* 88200, */
+	/* 96000, */
+	/* 176400, */
+	/* 192000, */
 };
 
 static int test_sampling_rates_count = sizeof(test_sampling_rates) / sizeof(int);
Signature · 6 lines
2.21.0

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

PATCH v3 7/9 tests/kms_chamelium: enable audio test on HDMI ports

In reply to Simon Ser

Now that we have all the required EDID bits in place, we can add a new hdmi-audio test.

---
 tests/kms_chamelium.c | 4 ++++
 1 file changed, 4 insertions(+)
tests/kms_chamelium.c +4 -0
index a686d3479a80..51f335efb94b 100644
@@ -1927,6 +1927,10 @@ igt_main
 
 		connector_subtest("hdmi-frame-dump", HDMIA)
 			test_display_frame_dump(&data, port);
+
+		connector_subtest("hdmi-audio", HDMIA)
+			test_display_audio(&data, port, "HDMI",
+					   TEST_EDID_HDMI_AUDIO);
 	}
 
 	igt_subtest_group {
Signature · 6 lines
2.21.0

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

PATCH v3 8/9 tests/kms_chamelium: don't abort audio test on first fail

In reply to Simon Ser

The audio test is repeated with a few different frequencies. When the test fails for one frequency, continue testing other frequencies so that we get a better understanding of the situation: is only one frequency failing, or are all of them failing?

---
 tests/kms_chamelium.c | 38 +++++++++++++++++++++++---------------
 1 file changed, 23 insertions(+), 15 deletions(-)
tests/kms_chamelium.c +23 -15
index 51f335efb94b..c1dbd99d0e76 100644
@@ -841,15 +841,6 @@ do_test_display_audio(data_t *data, struct chamelium_port *port,
 	struct audio_state state = {};
 	int channel_mapping[8], capture_chan;
 
-	if (!alsa_test_output_configuration(alsa, playback_channels,
-					    playback_rate)) {
-		igt_debug("Skipping test with sample rate %d Hz and %d channels "
-			  "because at least one of the selected output devices "
-			  "doesn't support this configuration\n",
-			  playback_rate, playback_channels);
-		return false;
-	}
-
 	igt_debug("Testing with playback sampling rate %d Hz and %d channels\n",
 		  playback_rate, playback_channels);
 	alsa_configure_output(alsa, playback_channels, playback_rate);
@@ -1028,15 +1019,14 @@ do_test_display_audio(data_t *data, struct chamelium_port *port,
 	audio_signal_fini(signal);
 	chamelium_stream_deinit(stream);
 
-	igt_assert(success);
-	return true;
+	return success;
 }
 
 static void
 test_display_audio(data_t *data, struct chamelium_port *port,
 		   const char *audio_device, enum test_edid edid)
 {
-	bool run = false;
+	bool run, success;
 	struct alsa *alsa;
 	int ret;
 	igt_output_t *output;
@@ -1045,6 +1035,7 @@ test_display_audio(data_t *data, struct chamelium_port *port,
 	drmModeModeInfo *mode;
 	drmModeConnector *connector;
 	int fb_id, i;
+	int channels, sampling_rate;
 
 	igt_require(alsa_has_exclusive_access());
 
@@ -1077,20 +1068,37 @@ test_display_audio(data_t *data, struct chamelium_port *port,
 
 	enable_output(data, port, output, mode, &fb);
 
+	run = false;
+	success = true;
 	for (i = 0; i < test_sampling_rates_count; i++) {
 		ret = alsa_open_output(alsa, audio_device);
 		igt_assert(ret >= 0);
 
 		/* TODO: playback on all 8 available channels */
-		run |= do_test_display_audio(data, port, alsa,
-					     PLAYBACK_CHANNELS,
-					     test_sampling_rates[i]);
+		channels = PLAYBACK_CHANNELS;
+		sampling_rate = test_sampling_rates[i];
+
+		if (!alsa_test_output_configuration(alsa, channels,
+						    sampling_rate)) {
+			igt_debug("Skipping test with sample rate %d Hz and %d channels "
+				  "because at least one of the selected output devices "
+				  "doesn't support this configuration\n",
+				  channels, sampling_rate);
+			continue;
+		}
+
+		run = true;
+
+		success &= do_test_display_audio(data, port, alsa, channels,
+						 sampling_rate);
 
 		alsa_close_output(alsa);
 	}
 
 	/* Make sure we tested at least one frequency. */
 	igt_assert(run);
+	/* Make sure all runs were successful. */
+	igt_assert(success);
 
 	igt_remove_fb(data->drm_fd, &fb);
 
Signature · 6 lines
2.21.0

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

PATCH v3 9/9 HAX: add {dp, hdmi}-audio test to fast-feedback

In reply to Simon Ser

Waiting for the whole series to be complete to decide whether or not we want this test in fast-feedback.

---
 tests/intel-ci/fast-feedback.testlist | 2 ++
 1 file changed, 2 insertions(+)
tests/intel-ci/fast-feedback.testlist +2 -0
index 40475b1ab361..d39b92a866da 100644
@@ -175,9 +175,11 @@ igt@kms_addfb_basic@unused-pitches
 igt@kms_busy@basic-flip-a
 igt@kms_busy@basic-flip-b
 igt@kms_busy@basic-flip-c
+igt@kms_chamelium@dp-audio
 igt@kms_chamelium@dp-hpd-fast
 igt@kms_chamelium@dp-edid-read
 igt@kms_chamelium@dp-crc-fast
+igt@kms_chamelium@hdmi-audio
 igt@kms_chamelium@hdmi-hpd-fast
 igt@kms_chamelium@hdmi-edid-read
 igt@kms_chamelium@hdmi-crc-fast
Signature · 6 lines
2.21.0

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

[igt-dev] ✓ Fi.CI.BAT: success for tests/kms_chamelium: add HDMI audio test

In reply to Simon Ser
== Series Details ==

== Series Details ==

Series: tests/kms_chamelium: add HDMI audio test
URL : https://patchwork.freedesktop.org/series/60626/
State : success

== Summary ==

CI Bug Log - changes from IGT_4987 -> IGTPW_2980
====================================================

Summary
-------

**SUCCESS**

No regressions found.

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

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

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

### IGT changes ###

#### Possible regressions ####

* {igt@kms_chamelium@hdmi-audio} (NEW):
- fi-kbl-7567u: NOTRUN -> [FAIL][1]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-kbl-7567u/igt@[email protected]
- {fi-cml-u2}: NOTRUN -> [SKIP][2]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-cml-u2/igt@[email protected]
- fi-icl-u2: NOTRUN -> [FAIL][3]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-icl-u2/igt@[email protected]
- fi-kbl-7500u: NOTRUN -> [DMESG-FAIL][4]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-kbl-7500u/igt@[email protected]
- fi-skl-6700k2: NOTRUN -> [FAIL][5]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-skl-6700k2/igt@[email protected]

#### Suppressed ####

The following results come from untrusted machines, tests, or statuses. They do not affect the overall result.

* {igt@kms_chamelium@dp-audio}:
- fi-icl-u2: NOTRUN -> [SKIP][6]
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-icl-u2/igt@[email protected]
- {fi-cml-u2}: NOTRUN -> [SKIP][7]
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-cml-u2/igt@[email protected]

New tests
---------

New tests have been introduced between IGT_4987 and IGTPW_2980:

### New IGT tests (1) ###

* igt@kms_chamelium@hdmi-audio:
- Statuses : 1 dmesg-fail(s) 3 fail(s) 41 skip(s)
- Exec time: [0.0, 6.95] s

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

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

### IGT changes ###

#### Issues hit ####

* igt@gem_exec_suspend@basic-s4-devices:
- fi-blb-e6850: [PASS][8] -> [INCOMPLETE][9] ([fdo#107718])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/fi-blb-e6850/igt@[email protected]
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-blb-e6850/igt@[email protected]

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

#### Possible fixes ####

* igt@i915_selftest@live_hangcheck:
- fi-skl-iommu: [INCOMPLETE][12] ([fdo#108602] / [fdo#108744]) -> [PASS][13]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/fi-skl-iommu/igt@i915_selftest@live_hangcheck.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-skl-iommu/igt@i915_selftest@live_hangcheck.html

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

[fdo#107718]: https://bugs.freedesktop.org/show_bug.cgi?id=107718
[fdo#108511]: https://bugs.freedesktop.org/show_bug.cgi?id=108511
[fdo#108602]: https://bugs.freedesktop.org/show_bug.cgi?id=108602
[fdo#108744]: https://bugs.freedesktop.org/show_bug.cgi?id=108744

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

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

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

* IGT: IGT_4987 -> IGTPW_2980

CI_DRM_6080: 6c6b621677cc0d3616de3dab025d967aa2c43877 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_2980: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/
IGT_4987: 13632f2414fc911a0e983bb5d5eb644a7c11a1fe @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Testlist changes ==

+igt@kms_chamelium@hdmi-audio

== Logs ==

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

author
#11 lore raw

Re: [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_chamelium: add HDMI audio test

Quoted 29 lines · Patchwork

== Series Details ==

Series: tests/kms_chamelium: add HDMI audio test
URL : https://patchwork.freedesktop.org/series/60626/
State : success

== Summary ==

CI Bug Log - changes from IGT_4987 -> IGTPW_2980
====================================================

Summary
-------

**SUCCESS**

No regressions found.

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

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

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

### IGT changes ###

#### Possible regressions ####

Quoted 11 lines

* {igt@kms_chamelium@hdmi-audio} (NEW):
- fi-kbl-7567u: NOTRUN -> [FAIL][1]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-kbl-7567u/igt@[email protected]
- {fi-cml-u2}: NOTRUN -> [SKIP][2]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-cml-u2/igt@[email protected]
- fi-icl-u2: NOTRUN -> [FAIL][3]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-icl-u2/igt@[email protected]
- fi-kbl-7500u: NOTRUN -> [DMESG-FAIL][4]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-kbl-7500u/igt@[email protected]
- fi-skl-6700k2: NOTRUN -> [FAIL][5]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-skl-6700k2/igt@[email protected]

Turns out this version still fails instead of skipping. Will send a v4.

Quoted 80 lines

#### Suppressed ####

The following results come from untrusted machines, tests, or statuses. They do not affect the overall result.

* {igt@kms_chamelium@dp-audio}:
- fi-icl-u2: NOTRUN -> [SKIP][6]
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-icl-u2/igt@[email protected]
- {fi-cml-u2}: NOTRUN -> [SKIP][7]
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-cml-u2/igt@[email protected]

New tests
---------

New tests have been introduced between IGT_4987 and IGTPW_2980:

### New IGT tests (1) ###

* igt@kms_chamelium@hdmi-audio:
- Statuses : 1 dmesg-fail(s) 3 fail(s) 41 skip(s)
- Exec time: [0.0, 6.95] s

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

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

### IGT changes ###

#### Issues hit ####

* igt@gem_exec_suspend@basic-s4-devices:
- fi-blb-e6850: [PASS][8] -> [INCOMPLETE][9] ([fdo#107718])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/fi-blb-e6850/igt@[email protected]
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-blb-e6850/igt@[email protected]

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

#### Possible fixes ####

* igt@i915_selftest@live_hangcheck:
- fi-skl-iommu: [INCOMPLETE][12] ([fdo#108602] / [fdo#108744]) -> [PASS][13]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/fi-skl-iommu/igt@i915_selftest@live_hangcheck.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/fi-skl-iommu/igt@i915_selftest@live_hangcheck.html

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

[fdo#107718]: https://bugs.freedesktop.org/show_bug.cgi?id=107718
[fdo#108511]: https://bugs.freedesktop.org/show_bug.cgi?id=108511
[fdo#108602]: https://bugs.freedesktop.org/show_bug.cgi?id=108602
[fdo#108744]: https://bugs.freedesktop.org/show_bug.cgi?id=108744

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

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

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

* IGT: IGT_4987 -> IGTPW_2980

CI_DRM_6080: 6c6b621677cc0d3616de3dab025d967aa2c43877 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_2980: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/
IGT_4987: 13632f2414fc911a0e983bb5d5eb644a7c11a1fe @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

Quoted 7 lines

== Testlist changes ==

+igt@kms_chamelium@hdmi-audio

== Logs ==

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

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

#12 lore raw

[igt-dev] ✓ Fi.CI.IGT: success for tests/kms_chamelium: add HDMI audio test

In reply to Simon Ser
== Series Details ==

== Series Details ==

Series: tests/kms_chamelium: add HDMI audio test
URL : https://patchwork.freedesktop.org/series/60626/
State : success

== Summary ==

CI Bug Log - changes from IGT_4987_full -> IGTPW_2980_full
====================================================

Summary
-------

**SUCCESS**

No regressions found.

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

New tests
---------

New tests have been introduced between IGT_4987_full and IGTPW_2980_full:

### New IGT tests (1) ###

* igt@kms_chamelium@hdmi-audio:
- Statuses : 6 skip(s)
- Exec time: [0.0] s

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

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

### IGT changes ###

#### Issues hit ####

* igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite:
- shard-iclb: [PASS][1] -> [FAIL][2] ([fdo#103167]) +2 similar issues
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-iclb5/igt@[email protected]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-iclb2/igt@[email protected]

* igt@kms_plane_lowres@pipe-a-tiling-y:
- shard-iclb: [PASS][3] -> [FAIL][4] ([fdo#103166])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-iclb1/igt@[email protected]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-iclb1/igt@[email protected]

* igt@kms_setmode@basic:
- shard-apl: [PASS][5] -> [FAIL][6] ([fdo#99912])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-apl5/igt@[email protected]
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-apl8/igt@[email protected]

* igt@kms_vblank@pipe-c-ts-continuation-suspend:
- shard-apl: [PASS][7] -> [DMESG-WARN][8] ([fdo#108566]) +3 similar issues
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-apl8/igt@[email protected]
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-apl1/igt@[email protected]

#### Possible fixes ####

* igt@gem_mmap_gtt@forked-medium-copy-odd:
- shard-iclb: [TIMEOUT][9] ([fdo#109673]) -> [PASS][10]
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-iclb2/igt@[email protected]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-iclb7/igt@[email protected]

* igt@gem_tiled_swapping@non-threaded:
- shard-hsw: [FAIL][11] ([fdo#108686]) -> [PASS][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-hsw1/igt@[email protected]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-hsw7/igt@[email protected]

* igt@i915_pm_rc6_residency@rc6-accuracy:
- shard-kbl: [SKIP][13] ([fdo#109271]) -> [PASS][14]
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-kbl1/igt@[email protected]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-kbl1/igt@[email protected]

* {igt@kms_cursor_crc@pipe-a-cursor-suspend}:
- shard-kbl: [FAIL][15] ([fdo#103232]) -> [PASS][16]
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-kbl1/igt@[email protected]
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-kbl1/igt@[email protected]

* igt@kms_frontbuffer_tracking@fbc-suspend:
- shard-apl: [DMESG-WARN][17] ([fdo#108566]) -> [PASS][18] +6 similar issues
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-apl6/igt@[email protected]
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-apl7/igt@[email protected]

* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-blt:
- shard-iclb: [FAIL][19] ([fdo#103167]) -> [PASS][20] +6 similar issues
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-iclb2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-blt.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-iclb1/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-blt.html

* igt@kms_psr2_su@frontbuffer:
- shard-iclb: [SKIP][21] ([fdo#109642]) -> [PASS][22]
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-iclb5/igt@[email protected]
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-iclb2/igt@[email protected]

* igt@kms_psr@psr2_cursor_plane_onoff:
- shard-iclb: [SKIP][23] ([fdo#109441]) -> [PASS][24] +2 similar issues
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-iclb7/igt@kms_psr@psr2_cursor_plane_onoff.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-iclb2/igt@kms_psr@psr2_cursor_plane_onoff.html

* igt@kms_setmode@basic:
- shard-iclb: [FAIL][25] ([fdo#99912]) -> [PASS][26]
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-iclb5/igt@[email protected]
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-iclb5/igt@[email protected]

#### Warnings ####

* igt@gem_mmap_gtt@forked-big-copy-xy:
- shard-iclb: [INCOMPLETE][27] ([fdo#107713] / [fdo#109100]) -> [TIMEOUT][28] ([fdo#109673])
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_4987/shard-iclb7/igt@[email protected]
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/shard-iclb5/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#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
[fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
[fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232
[fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
[fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
[fdo#108686]: https://bugs.freedesktop.org/show_bug.cgi?id=108686
[fdo#109100]: https://bugs.freedesktop.org/show_bug.cgi?id=109100
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
[fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
[fdo#109673]: https://bugs.freedesktop.org/show_bug.cgi?id=109673
[fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912

Participating hosts (7 -> 6)
------------------------------

Missing (1): shard-skl

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

* IGT: IGT_4987 -> IGTPW_2980

CI_DRM_6080: 6c6b621677cc0d3616de3dab025d967aa2c43877 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_2980: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2980/
IGT_4987: 13632f2414fc911a0e983bb5d5eb644a7c11a1fe @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

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