public inbox for igt-dev@lists.freedesktop.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t v2 0/3] Test tiled display with aid of chamelium.
@ 2020-01-20  4:20 Kunal Joshi
  2020-01-20  4:20 ` [igt-dev] [PATCH i-g-t v2 1/3] Make basic chamelium function accessible to other tests Kunal Joshi
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Kunal Joshi @ 2020-01-20  4:20 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi, martin.peres

As of now we have kms_dp_tiled_display test which needs a physical
panel.Added changes to have chamelium act as a tiled panel and then
execute the test.

Kunal Joshi (3):
  Make basic chamelium function accessible to other tests.
  Added structures and functions to generate tiled edids.
  Added a subtest where chamelium acts as a tiled panel.

 lib/igt_chamelium.c          | 152 +++++++++++++++++++++++++++++++++++++++++++
 lib/igt_chamelium.h          |  33 ++++++++++
 lib/igt_edid.c               |  27 ++++++++
 lib/igt_edid.h               |  20 ++++++
 lib/igt_kms.c                | 102 +++++++++++++++++++++++++++++
 lib/igt_kms.h                |   2 +
 tests/kms_chamelium.c        |  81 +----------------------
 tests/kms_dp_tiled_display.c | 111 ++++++++++++++++++++++++-------
 8 files changed, 424 insertions(+), 104 deletions(-)

-- 
2.7.4

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [igt-dev] [PATCH i-g-t v2 1/3] Make basic chamelium function accessible to other tests.
  2020-01-20  4:20 [igt-dev] [PATCH i-g-t v2 0/3] Test tiled display with aid of chamelium Kunal Joshi
@ 2020-01-20  4:20 ` Kunal Joshi
  2020-03-11  8:23   ` Petri Latvala
  2020-01-20  4:20 ` [igt-dev] [PATCH i-g-t v2 2/3] Added structures and functions to generate tiled edids Kunal Joshi
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 8+ messages in thread
From: Kunal Joshi @ 2020-01-20  4:20 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi, martin.peres

There are many use case where we can integrate chamelium with other tests,
Migrating some of basic chamelium functions to igt_chamelium lib to avoid
Code rewriting.

v2: Moved one more function reset_state from tests/kms_chamelium to
lib/igt_chamelium.

Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Signed-off-by: Karthik B S <karthik.b.s@intel.com>
---
 lib/igt_chamelium.c   | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_chamelium.h   | 28 +++++++++++++++++
 tests/kms_chamelium.c | 81 +-----------------------------------------------
 3 files changed, 114 insertions(+), 80 deletions(-)

diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c
index 9971f51..8b910bf 100644
--- a/lib/igt_chamelium.c
+++ b/lib/igt_chamelium.c
@@ -132,6 +132,91 @@ static struct chamelium *cleanup_instance;
 static void chamelium_do_calculate_fb_crc(cairo_surface_t *fb_surface,
 					  igt_crc_t *out);
 
+void
+require_displayport_connector_present(struct data_chamelium_t *data,
+							    unsigned int type)
+{
+	int i, count = 0;
+	bool found = false;
+
+	for (i = 0; i < data->port_count && !found; i++) {
+		if (chamelium_port_get_type(data->ports[i]) == type)
+			count++;
+		if (count == 2)
+			found = true;
+	}
+	igt_require_f(found,
+		"Need atleast 2 ports of type %s connected, found %d\n",
+		kmstest_connector_type_str(type), count);
+}
+
+drmModeConnection
+reprobe_connector(struct data_chamelium_t *data, struct chamelium_port *port)
+{
+	drmModeConnector *connector;
+	drmModeConnection status;
+
+	igt_debug("Reprobing %s...\n", chamelium_port_get_name(port));
+	connector = chamelium_port_get_connector(data->chamelium, port, true);
+	igt_assert(connector);
+	status = connector->connection;
+
+	drmModeFreeConnector(connector);
+	return status;
+}
+
+const char *connection_str(drmModeConnection c)
+{
+	switch (c) {
+	case DRM_MODE_CONNECTED:
+		return "connected";
+	case DRM_MODE_DISCONNECTED:
+		return "disconnected";
+	case DRM_MODE_UNKNOWNCONNECTION:
+		return "unknown";
+	}
+	assert(0); /* unreachable */
+}
+
+void
+wait_for_connector(struct data_chamelium_t *data, struct chamelium_port *port,
+		   drmModeConnection status)
+{
+	igt_debug("Waiting for %s to get %s...\n",
+		chamelium_port_get_name(port), connection_str(status));
+
+	/*
+	 * Rely on simple reprobing so we don't fail tests that don't require
+	 * that hpd events work in the event that hpd doesn't work on the system
+	 */
+	igt_until_timeout(HOTPLUG_TIMEOUT) {
+	if (reprobe_connector(data, port) == status)
+		return;
+
+	usleep(50000);
+
+	}
+	igt_assert_f(false, "Timed out waiting for %s to get %s\n",
+		chamelium_port_get_name(port), connection_str(status));
+}
+
+void
+reset_state(struct data_chamelium_t *data, struct chamelium_port *port)
+{
+	int p;
+
+	chamelium_reset(data->chamelium);
+
+	if (port) {
+		wait_for_connector(data, port, DRM_MODE_DISCONNECTED);
+	} else {
+		for (p = 0; p < data->port_count; p++) {
+			port = data->ports[p];
+			wait_for_connector(data, port, DRM_MODE_DISCONNECTED);
+		}
+	}
+}
+
 /**
  * chamelium_get_ports:
  * @chamelium: The Chamelium instance to use
diff --git a/lib/igt_chamelium.h b/lib/igt_chamelium.h
index 08705a9..71080f4 100644
--- a/lib/igt_chamelium.h
+++ b/lib/igt_chamelium.h
@@ -25,6 +25,8 @@
 
 #ifndef IGT_CHAMELIUM_H
 #define IGT_CHAMELIUM_H
+#define TEST_EDID_COUNT 5
+#define HOTPLUG_TIMEOUT 20
 
 #include "config.h"
 
@@ -32,6 +34,7 @@
 #include <xf86drmMode.h>
 
 #include "igt_debugfs.h"
+#include "igt_kms.h"
 
 struct igt_fb;
 struct edid;
@@ -81,6 +84,17 @@ struct chamelium_infoframe {
 
 struct chamelium_edid;
 
+struct data_chamelium_t {
+	struct chamelium *chamelium;
+	struct chamelium_port **ports;
+	igt_display_t display;
+	int port_count;
+
+	int drm_fd;
+
+	struct chamelium_edid *edids[TEST_EDID_COUNT];
+};
+
 /**
  * CHAMELIUM_MAX_PORTS: the maximum number of ports supported by igt_chamelium.
  *
@@ -210,4 +224,18 @@ void chamelium_destroy_frame_dump(struct chamelium_frame_dump *dump);
 void chamelium_destroy_audio_file(struct chamelium_audio_file *audio_file);
 void chamelium_infoframe_destroy(struct chamelium_infoframe *infoframe);
 
+void
+require_displayport_connector_present(struct data_chamelium_t *data,
+							unsigned int type);
+
+drmModeConnection
+reprobe_connector(struct data_chamelium_t *data, struct chamelium_port *port);
+
+const char *connection_str(drmModeConnection c);
+
+void
+wait_for_connector(struct data_chamelium_t *data, struct chamelium_port *port,
+		   drmModeConnection status);
+void
+reset_state(struct data_chamelium_t *data, struct chamelium_port *port);
 #endif /* IGT_CHAMELIUM_H */
diff --git a/tests/kms_chamelium.c b/tests/kms_chamelium.c
index 5c4a189..972f045 100644
--- a/tests/kms_chamelium.c
+++ b/tests/kms_chamelium.c
@@ -43,20 +43,9 @@ enum test_edid {
 	TEST_EDID_DP_AUDIO,
 	TEST_EDID_ASPECT_RATIO,
 };
-#define TEST_EDID_COUNT 5
 
-typedef struct {
-	struct chamelium *chamelium;
-	struct chamelium_port **ports;
-	igt_display_t display;
-	int port_count;
-
-	int drm_fd;
-
-	struct chamelium_edid *edids[TEST_EDID_COUNT];
-} data_t;
+typedef struct data_chamelium_t data_t;
 
-#define HOTPLUG_TIMEOUT 20 /* seconds */
 #define ONLINE_TIMEOUT 20 /* seconds */
 
 #define HPD_STORM_PULSE_INTERVAL_DP 100 /* ms */
@@ -106,57 +95,6 @@ require_connector_present(data_t *data, unsigned int type)
 		      kmstest_connector_type_str(type));
 }
 
-static drmModeConnection
-reprobe_connector(data_t *data, struct chamelium_port *port)
-{
-	drmModeConnector *connector;
-	drmModeConnection status;
-
-	igt_debug("Reprobing %s...\n", chamelium_port_get_name(port));
-	connector = chamelium_port_get_connector(data->chamelium, port, true);
-	igt_assert(connector);
-	status = connector->connection;
-
-	drmModeFreeConnector(connector);
-	return status;
-}
-
-static const char *connection_str(drmModeConnection c)
-{
-	switch (c) {
-	case DRM_MODE_CONNECTED:
-		return "connected";
-	case DRM_MODE_DISCONNECTED:
-		return "disconnected";
-	case DRM_MODE_UNKNOWNCONNECTION:
-		return "unknown";
-	}
-	assert(0); /* unreachable */
-}
-
-static void
-wait_for_connector(data_t *data, struct chamelium_port *port,
-		   drmModeConnection status)
-{
-	igt_debug("Waiting for %s to get %s...\n",
-		  chamelium_port_get_name(port), connection_str(status));
-
-	/*
-	 * Rely on simple reprobing so we don't fail tests that don't require
-	 * that hpd events work in the event that hpd doesn't work on the system
-	 */
-	igt_until_timeout(HOTPLUG_TIMEOUT) {
-		if (reprobe_connector(data, port) == status) {
-			return;
-		}
-
-		usleep(50000);
-	}
-
-	igt_assert_f(false, "Timed out waiting for %s to get %s\n",
-		  chamelium_port_get_name(port), connection_str(status));
-}
-
 static int chamelium_vga_modes[][2] = {
 	{ 1600, 1200 },
 	{ 1920, 1200 },
@@ -225,23 +163,6 @@ check_analog_bridge(data_t *data, struct chamelium_port *port)
 	return false;
 }
 
-static void
-reset_state(data_t *data, struct chamelium_port *port)
-{
-	int p;
-
-	chamelium_reset(data->chamelium);
-
-	if (port) {
-		wait_for_connector(data, port, DRM_MODE_DISCONNECTED);
-	} else {
-		for (p = 0; p < data->port_count; p++) {
-			port = data->ports[p];
-			wait_for_connector(data, port, DRM_MODE_DISCONNECTED);
-		}
-	}
-}
-
 static const char test_basic_hotplug_desc[] =
 	"Check that we get uevents and updated connector status on "
 	"hotplug and unplug";
-- 
2.7.4

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [igt-dev] [PATCH i-g-t v2 2/3] Added structures and functions to generate tiled edids.
  2020-01-20  4:20 [igt-dev] [PATCH i-g-t v2 0/3] Test tiled display with aid of chamelium Kunal Joshi
  2020-01-20  4:20 ` [igt-dev] [PATCH i-g-t v2 1/3] Make basic chamelium function accessible to other tests Kunal Joshi
@ 2020-01-20  4:20 ` Kunal Joshi
  2020-01-20  4:20 ` [igt-dev] [PATCH i-g-t v2 3/3] Added a subtest where chamelium acts as a tiled panel Kunal Joshi
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Kunal Joshi @ 2020-01-20  4:20 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi, martin.peres

Generating the tiled edid which can be flashed on chamelium and added
some functions to support the same.

v2: No change.

Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Signed-off-by: Karthik B S <karthik.b.s@intel.com>
---
 lib/igt_chamelium.c |  67 ++++++++++++++++++++++++++++++++++
 lib/igt_chamelium.h |   5 +++
 lib/igt_edid.c      |  27 ++++++++++++++
 lib/igt_edid.h      |  20 +++++++++++
 lib/igt_kms.c       | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_kms.h       |   2 ++
 6 files changed, 223 insertions(+)

diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c
index 8b910bf..19c4484 100644
--- a/lib/igt_chamelium.c
+++ b/lib/igt_chamelium.c
@@ -734,6 +734,33 @@ const struct edid *chamelium_edid_get_raw(struct chamelium_edid *edid,
 }
 
 /**
+ * chamelium_edid_get_editable_raw: get the raw EDID which can be edited later.
+ * @edid: the Chamelium EDID
+ * @port: the Chamelium port
+ *
+ * The EDID provided to #chamelium_new_edid may be mutated for identification
+ * purposes. This function allows to retrieve the exact EDID that will be set
+ * for a given port.
+ *
+ * The returned raw EDID is only valid until the next call to this function.
+ */
+struct edid *chamelium_edid_get_editable_raw(struct chamelium_edid *edid,
+					  struct chamelium_port *port)
+{
+	size_t port_index = port - edid->chamelium->ports;
+	size_t edid_size;
+
+	if (!edid->raw[port_index]) {
+		edid_size = edid_get_size(edid->base);
+		edid->raw[port_index] = malloc(edid_size);
+		memcpy(edid->raw[port_index], edid->base, edid_size);
+		chamelium_port_tag_edid(port, edid->raw[port_index]);
+	}
+
+	return edid->raw[port_index];
+}
+
+/**
  * chamelium_port_set_edid:
  * @chamelium: The Chamelium instance to use
  * @port: The port on the Chamelium to set the EDID on
@@ -772,6 +799,46 @@ void chamelium_port_set_edid(struct chamelium *chamelium,
 }
 
 /**
+ * chamelium_port_set_tiled_edid:
+ * @chamelium: The Chamelium instance to use
+ * @port: The port on the Chamelium to set the EDID on
+ * @edid: The Chamelium EDID to set or NULL to use the default Chamelium EDID
+ *
+ * Sets unique serial for tiled edid.
+ * Sets a port on the chamelium to use the specified EDID. This does not fire a
+ * hotplug pulse on it's own, and merely changes what EDID the chamelium port
+ * will report to us the next time we probe it. Users will need to reprobe the
+ * connectors themselves if they want to see the EDID reported by the port
+ * change.
+ *
+ * To create an EDID, see #chamelium_new_edid.
+ */
+void chamelium_port_set_tiled_edid(struct chamelium *chamelium,
+			     struct chamelium_port *port,
+			     struct chamelium_edid *edid)
+{
+	int edid_id;
+	size_t port_index;
+	struct edid *raw_edid;
+
+	if (edid) {
+		port_index = port - chamelium->ports;
+		edid_id = edid->ids[port_index];
+		if (edid_id == 0) {
+			raw_edid = chamelium_edid_get_editable_raw(edid, port);
+			raw_edid->serial[0] = 0x02;
+			base_edid_update_checksum(raw_edid);
+			edid_id = chamelium_upload_edid(chamelium, raw_edid);
+			edid->ids[port_index] = edid_id;
+		}
+	} else {
+		edid_id = 0;
+	}
+	xmlrpc_DECREF(chamelium_rpc(chamelium, NULL, "ApplyEdid", "(ii)",
+				    port->id, edid_id));
+}
+
+/**
  * chamelium_port_set_ddc_state:
  * @chamelium: The Chamelium instance to use
  * @port: The port to change the DDC state on
diff --git a/lib/igt_chamelium.h b/lib/igt_chamelium.h
index 71080f4..654c469 100644
--- a/lib/igt_chamelium.h
+++ b/lib/igt_chamelium.h
@@ -146,9 +146,14 @@ struct chamelium_edid *chamelium_new_edid(struct chamelium *chamelium,
 					  const struct edid *edid);
 const struct edid *chamelium_edid_get_raw(struct chamelium_edid *edid,
 					  struct chamelium_port *port);
+struct edid *chamelium_edid_get_editable_raw(struct chamelium_edid *edid,
+					  struct chamelium_port *port);
 void chamelium_port_set_edid(struct chamelium *chamelium,
 			     struct chamelium_port *port,
 			     struct chamelium_edid *edid);
+void chamelium_port_set_tiled_edid(struct chamelium *chamelium,
+			     struct chamelium_port *port,
+			     struct chamelium_edid *edid);
 bool chamelium_port_get_ddc_state(struct chamelium *chamelium,
 				  struct chamelium_port *port);
 void chamelium_port_set_ddc_state(struct chamelium *chamelium,
diff --git a/lib/igt_edid.c b/lib/igt_edid.c
index 1c85486..b6edde8 100644
--- a/lib/igt_edid.c
+++ b/lib/igt_edid.c
@@ -313,10 +313,28 @@ void edid_update_checksum(struct edid *edid)
 			ext->data.cea.checksum =
 				compute_checksum((uint8_t *) ext,
 						 sizeof(struct edid_ext));
+		else if (ext->tag == EDID_EXT_DISPLAYID) {
+			ext->data.tile.extension_checksum =
+				compute_checksum((uint8_t *) &ext->data.tile,
+						 sizeof(struct edid_ext));
+			ext->data.tile.checksum =
+				compute_checksum((uint8_t *) ext,
+						 sizeof(struct edid_ext));
+		}
 	}
 }
 
 /**
+ * base_edid_update_checksum: compute and update the checksum of the main EDID
+ * block
+ */
+void base_edid_update_checksum(struct edid *edid)
+{
+	edid->checksum = compute_checksum((uint8_t *) edid,
+					  sizeof(struct edid));
+}
+
+/**
  * edid_get_size: return the size of the EDID block in bytes including EDID
  * extensions, if any.
  */
@@ -459,6 +477,15 @@ size_t edid_cea_data_block_set_speaker_alloc(struct edid_cea_data_block *block,
 }
 
 /**
+ * edid_ext_set_tile initialize an EDID extension block to be identified
+ * as a tiled display topology block
+ */
+void edid_ext_set_displayid(struct edid_ext *ext)
+{
+	ext->tag = EDID_EXT_DISPLAYID;
+}
+
+/**
  * edid_ext_set_cea: initialize an EDID extension block to contain a CEA
  * extension. CEA extensions contain a Data Block Collection (with multiple
  * CEA data blocks) followed by multiple Detailed Timing Descriptors.
diff --git a/lib/igt_edid.h b/lib/igt_edid.h
index 59b47a9..7c2ce12 100644
--- a/lib/igt_edid.h
+++ b/lib/igt_edid.h
@@ -304,12 +304,30 @@ struct edid_cea {
 
 enum edid_ext_tag {
 	EDID_EXT_CEA = 0x02,
+	EDID_EXT_DISPLAYID = 0x70,
+};
+
+struct edid_tile {
+	uint8_t header[7];
+	uint8_t tile_cap;
+	uint8_t topo[3];
+	uint8_t tile_size[4];
+	uint8_t tile_pixel_bezel[5];
+	uint8_t topology_id[9];
+	uint8_t data[96];
+	uint8_t extension_checksum;
+	uint8_t checksum;
+} __attribute__((packed));
+
+enum edid_tile_cap {
+	SCALE_TO_FIT = 0x82,
 };
 
 struct edid_ext {
 	uint8_t tag; /* enum edid_ext_tag */
 	union {
 		struct edid_cea cea;
+		struct edid_tile tile;
 	} data;
 } __attribute__((packed));
 
@@ -356,6 +374,7 @@ struct edid {
 void edid_init(struct edid *edid);
 void edid_init_with_mode(struct edid *edid, drmModeModeInfo *mode);
 void edid_update_checksum(struct edid *edid);
+void base_edid_update_checksum(struct edid *edid);
 size_t edid_get_size(const struct edid *edid);
 void edid_get_mfg(const struct edid *edid, char out[static 3]);
 void detailed_timing_set_mode(struct detailed_timing *dt, drmModeModeInfo *mode,
@@ -383,4 +402,5 @@ 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 num_native_dtds, uint8_t flags);
 
+void edid_ext_set_displayid(struct edid_ext *ext);
 #endif
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index d20daaa..0be14bb 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -84,6 +84,9 @@
 
 /* list of connectors that need resetting on exit */
 #define MAX_CONNECTORS 32
+#define MAX_EDID 2
+#define DISPLAY_TILE_BLOCK 0x12
+
 static struct {
 	uint32_t connector_type;
 	uint32_t connector_type_id;
@@ -126,6 +129,26 @@ const struct edid *igt_kms_get_base_edid(void)
 	return &edid;
 }
 
+const struct edid *igt_kms_get_base_tile_edid(void)
+{
+	static struct edid edid;
+	drmModeModeInfo mode = {};
+
+	mode.clock = 277250;
+	mode.hdisplay = 1920;
+	mode.hsync_start = 1968;
+	mode.hsync_end = 2000;
+	mode.htotal = 2080;
+	mode.vdisplay = 2160;
+	mode.vsync_start = 2163;
+	mode.vsync_end = 2173;
+	mode.vtotal = 2222;
+	mode.vrefresh = 60;
+	edid_init_with_mode(&edid, &mode);
+	edid_update_checksum(&edid);
+	return &edid;
+}
+
 /**
  * igt_kms_get_alt_edid:
  *
@@ -261,6 +284,85 @@ const struct edid *igt_kms_get_dp_audio_edid(void)
 	return generate_audio_edid(raw_edid, false, &sad, &speaker_alloc);
 }
 
+struct edid **igt_kms_get_tiled_edid(uint8_t htile, uint8_t vtile)
+{
+	uint8_t top[2];
+	int edids, i;
+	static  char raw_edid[MAX_EDID][256] = {0};
+	static struct edid *edid[MAX_EDID];
+
+	top[0] = 0x00;
+	top[1] = 0x00;
+	top[0] = top[0] | (htile<<4);
+	vtile = vtile & 15;
+	top[0] = top[0] | vtile;
+	top[1] = top[1] | ((htile << 2) & 192);
+	top[1] = top[1] | (vtile & 48);
+
+	edids = (htile+1) * (vtile+1);
+
+	for (i = 0; i < edids; i++)
+		edid[i] = (struct edid *) raw_edid[i];
+
+	for (i = 0; i < edids; i++) {
+
+		struct edid_ext *edid_ext;
+		struct edid_tile *edid_tile;
+
+	/* Create a new EDID from the base IGT EDID, and add an
+	 * extension that advertises tile support.
+	 */
+		memcpy(edid[i],
+		igt_kms_get_base_tile_edid(), sizeof(struct edid));
+		edid[i]->extensions_len = 1;
+		edid_ext = &edid[i]->extensions[0];
+		edid_tile = &edid_ext->data.tile;
+	/* Set 0x70 to 1st byte of extension,
+	 * so it is identified as display block
+	 */
+		edid_ext_set_displayid(edid_ext);
+	/* To identify it as a tiled display block extension */
+		edid_tile->header[0] = DISPLAY_TILE_BLOCK;
+		edid_tile->header[1] = 0x79;
+		edid_tile->header[2] = 0x00;
+		edid_tile->header[3] = 0x00;
+		edid_tile->header[4] = 0x12;
+		edid_tile->header[5] = 0x00;
+		edid_tile->header[6] = 0x16;
+	/* Tile Capabilities */
+		edid_tile->tile_cap = SCALE_TO_FIT;
+	/* Set number of htile and vtile */
+		edid_tile->topo[0] = top[0];
+		if (i == 0)
+			edid_tile->topo[1] = 0x10;
+		else if (i == 1)
+			edid_tile->topo[1] = 0x00;
+		edid_tile->topo[2] = top[1];
+	/* Set tile resolution */
+		edid_tile->tile_size[0] = 0x7f;
+		edid_tile->tile_size[1] = 0x07;
+		edid_tile->tile_size[2] = 0x6f;
+		edid_tile->tile_size[3] = 0x08;
+	/* Dimension of Bezels */
+		edid_tile->tile_pixel_bezel[0] = 0;
+		edid_tile->tile_pixel_bezel[1] = 0;
+		edid_tile->tile_pixel_bezel[2] = 0;
+		edid_tile->tile_pixel_bezel[3] = 0;
+		edid_tile->tile_pixel_bezel[4] = 0;
+	/* Manufacturer Information */
+		edid_tile->topology_id[0] = 0x44;
+		edid_tile->topology_id[1] = 0x45;
+		edid_tile->topology_id[2] = 0x4c;
+		edid_tile->topology_id[3] = 0x43;
+		edid_tile->topology_id[4] = 0x48;
+		edid_tile->topology_id[5] = 0x02;
+		edid_tile->topology_id[6] = 0x00;
+		edid_tile->topology_id[7] = 0x00;
+		edid_tile->topology_id[8] = 0x00;
+	}
+	return edid;
+}
+
 static const uint8_t edid_4k_svds[] = {
 	32 | CEA_SVD_NATIVE, /* 1080p @ 24Hz (native) */
 	5,                   /* 1080i @ 60Hz */
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 6c919e9..1c43f0f 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -769,6 +769,8 @@ const struct edid *igt_kms_get_hdmi_audio_edid(void);
 const struct edid *igt_kms_get_dp_audio_edid(void);
 const struct edid *igt_kms_get_4k_edid(void);
 const struct edid *igt_kms_get_3d_edid(void);
+const struct edid *igt_kms_get_base_tile_edid(void);
+struct edid **igt_kms_get_tiled_edid(uint8_t htile, uint8_t vtile);
 
 struct udev_monitor *igt_watch_hotplug(void);
 bool igt_hotplug_detected(struct udev_monitor *mon,
-- 
2.7.4

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [igt-dev] [PATCH i-g-t v2 3/3] Added a subtest where chamelium acts as a tiled panel.
  2020-01-20  4:20 [igt-dev] [PATCH i-g-t v2 0/3] Test tiled display with aid of chamelium Kunal Joshi
  2020-01-20  4:20 ` [igt-dev] [PATCH i-g-t v2 1/3] Make basic chamelium function accessible to other tests Kunal Joshi
  2020-01-20  4:20 ` [igt-dev] [PATCH i-g-t v2 2/3] Added structures and functions to generate tiled edids Kunal Joshi
@ 2020-01-20  4:20 ` Kunal Joshi
  2020-01-20 22:34 ` [igt-dev] ✓ Fi.CI.BAT: success for Test tiled display with aid of chamelium. (rev2) Patchwork
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Kunal Joshi @ 2020-01-20  4:20 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi, martin.peres

Split kms_dp_tiled_display into to two subtest.First to execute the
basic test with physical tiled panel and second with chamelium.

v2:Revised to just have basic test if chamelium dependencies are not present.
   Reset ports after the test executes.Changed subtest name from with-chamelium
   to basic-test-pattern-with-chamelium

Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Signed-off-by: Karthik B S <karthik.b.s@intel.com>
---
 tests/kms_dp_tiled_display.c | 111 +++++++++++++++++++++++++++++++++----------
 1 file changed, 87 insertions(+), 24 deletions(-)

diff --git a/tests/kms_dp_tiled_display.c b/tests/kms_dp_tiled_display.c
index b1160fe..21c13d9 100644
--- a/tests/kms_dp_tiled_display.c
+++ b/tests/kms_dp_tiled_display.c
@@ -40,6 +40,7 @@
 #include "poll.h"
 #include "drm_mode.h"
 #include "drm_fourcc.h"
+#include "igt_edid.h"
 
 IGT_TEST_DESCRIPTION("Test for Transcoder Port Sync for Display Port Tiled Displays");
 
@@ -61,6 +62,13 @@ typedef struct {
 	struct timeval first_ts;
 } data_t;
 
+void basic_test(data_t *data, drmEventContext *drm_event, struct pollfd *pfd);
+
+#ifdef HAVE_CHAMELIUM
+static void test_with_chamelium(data_t data,
+				struct data_chamelium_t *data_cham);
+#endif
+
 static int drm_property_is_tile(drmModePropertyPtr prop)
 {
 	return (strcmp(prop->name, "TILE") ? 0 : 1) &&
@@ -206,7 +214,6 @@ static void test_cleanup(data_t *data)
 	igt_display_commit2(data->display, data->commit);
 	memset(conns, 0, sizeof(data_connector_t) * data->num_h_tiles);
 }
-
 static void setup_mode(data_t *data)
 {
 	int count = 0, prev = 0, i = 0;
@@ -380,21 +387,84 @@ static bool got_all_page_flips(data_t *data)
 	return true;
 }
 
+#ifdef HAVE_CHAMELIUM
+static void test_with_chamelium(data_t data,
+				struct data_chamelium_t *data_cham)
+{
+	int i, count = 0;
+	uint8_t htile = 2, vtile = 1;
+	struct edid **edid;
+
+	data_cham->chamelium = chamelium_init(data.drm_fd);
+	igt_assert(data_cham->chamelium);
+	data_cham->ports = chamelium_get_ports
+		(data_cham->chamelium, &data_cham->port_count);
+	require_displayport_connector_present(
+		data_cham, DRM_MODE_CONNECTOR_DisplayPort);
+	edid = igt_kms_get_tiled_edid(htile-1, vtile-1);
+
+	for (i = 0; i < 2; i++)
+		data_cham->edids[i] =
+			chamelium_new_edid(data_cham->chamelium, edid[i]);
+
+	for (i = 0; i < data_cham->port_count; i++) {
+		if (chamelium_port_get_type(data_cham->ports[i]) ==
+				DRM_MODE_CONNECTOR_DisplayPort) {
+
+			chamelium_port_set_tiled_edid(data_cham->chamelium,
+				data_cham->ports[i], data_cham->edids[i]);
+			chamelium_plug(data_cham->chamelium,
+				       data_cham->ports[i]);
+			wait_for_connector(data_cham, data_cham->ports[i],
+				DRM_MODE_CONNECTED);
+			count++;
+		}
+		if (count == 2)
+			break;
+	}
+}
+#endif
+
+void basic_test(data_t *data, drmEventContext *drm_event, struct pollfd *pfd)
+{
+		int ret;
+
+		get_number_of_h_tiles(data);
+		igt_debug("Number of Horizontal Tiles: %d\n",
+			  data->num_h_tiles);
+		igt_require(data->num_h_tiles > 0);
+		data->conns = calloc(data->num_h_tiles,
+				     sizeof(data_connector_t));
+		igt_assert(data->conns);
+
+		get_connectors(data);
+		setup_mode(data);
+		setup_framebuffer(data);
+		timerclear(&data->first_ts);
+		igt_display_commit_atomic(data->display,
+			DRM_MODE_ATOMIC_NONBLOCK |
+			DRM_MODE_PAGE_FLIP_EVENT, data);
+		while (!got_all_page_flips(data)) {
+			ret = poll(pfd, 1, 1000);
+			igt_assert(ret == 1);
+			drmHandleEvent(data->drm_fd, drm_event);
+		}
+}
+
 igt_main
 {
 	igt_display_t display;
 	data_t data = {0};
+	#ifdef HAVE_CHAMELIUM
+	struct data_chamelium_t data_cham = {0};
+	#endif
 	struct pollfd pfd = {0};
 	drmEventContext drm_event = {0};
-	int ret;
-
 	igt_fixture {
 		data.drm_fd = drm_open_driver_master(DRIVER_ANY);
-
 		kmstest_set_vt_graphics_mode();
 		igt_display_require(&display, data.drm_fd);
 		igt_display_reset(&display);
-
 		data.display = &display;
 		pfd.fd = data.drm_fd;
 		pfd.events = POLLIN;
@@ -402,33 +472,26 @@ igt_main
 		drm_event.page_flip_handler2 = page_flip_handler;
 		data.commit = data.display->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY;
 		igt_require(data.commit == COMMIT_ATOMIC);
-
-		get_number_of_h_tiles(&data);
-		igt_debug("Number of Horizontal Tiles: %d\n", data.num_h_tiles);
-		igt_require(data.num_h_tiles > 0);
-		data.conns = calloc(data.num_h_tiles, sizeof(data_connector_t));
 	}
 
 	igt_describe("Make sure the Tiled CRTCs are synchronized and we get "
 		     "page flips for all tiled CRTCs in one vblank.");
 	igt_subtest("basic-test-pattern") {
-		igt_assert(data.conns);
-
-		get_connectors(&data);
-		setup_mode(&data);
-		setup_framebuffer(&data);
-		timerclear(&data.first_ts);
-		igt_display_commit_atomic(data.display, DRM_MODE_ATOMIC_NONBLOCK |
-					  DRM_MODE_PAGE_FLIP_EVENT, &data);
-		while (!got_all_page_flips(&data)) {
-			ret = poll(&pfd, 1, 1000);
-			igt_assert(ret == 1);
-			drmHandleEvent(data.drm_fd, &drm_event);
-		}
-
+		basic_test(&data, &drm_event, &pfd);
 		test_cleanup(&data);
 	}
 
+	#ifdef HAVE_CHAMELIUM
+	igt_subtest_f("basic-test-pattern-with-chamelium") {
+		int i;
+
+		test_with_chamelium(data, &data_cham);
+		basic_test(&data, &drm_event, &pfd);
+		test_cleanup(&data);
+		for (i = 0; i < data_cham.port_count; i++)
+			reset_state(&data_cham, data_cham.ports[i]);
+	}
+	#endif
 	igt_fixture {
 		free(data.conns);
 		close(data.drm_fd);
-- 
2.7.4

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for Test tiled display with aid of chamelium. (rev2)
  2020-01-20  4:20 [igt-dev] [PATCH i-g-t v2 0/3] Test tiled display with aid of chamelium Kunal Joshi
                   ` (2 preceding siblings ...)
  2020-01-20  4:20 ` [igt-dev] [PATCH i-g-t v2 3/3] Added a subtest where chamelium acts as a tiled panel Kunal Joshi
@ 2020-01-20 22:34 ` Patchwork
  2020-01-21  6:33 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
  2020-03-10 19:43 ` [igt-dev] [PATCH i-g-t v2 0/3] Test tiled display with aid of chamelium Manasi Navare
  5 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2020-01-20 22:34 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

== Series Details ==

Series: Test tiled display with aid of chamelium. (rev2)
URL   : https://patchwork.freedesktop.org/series/71393/
State : success

== Summary ==

CI Bug Log - changes from IGT_5373 -> IGTPW_3950
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/index.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live_hangcheck:
    - fi-icl-guc:         [PASS][1] -> [INCOMPLETE][2] ([fdo#108569] / [i915#140])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/fi-icl-guc/igt@i915_selftest@live_hangcheck.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/fi-icl-guc/igt@i915_selftest@live_hangcheck.html

  * igt@kms_chamelium@hdmi-hpd-fast:
    - fi-kbl-7500u:       [PASS][3] -> [FAIL][4] ([i915#217])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html

  
#### Possible fixes ####

  * igt@gem_close_race@basic-threads:
    - fi-byt-j1900:       [TIMEOUT][5] ([fdo#112271] / [i915#816]) -> [PASS][6]
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/fi-byt-j1900/igt@gem_close_race@basic-threads.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/fi-byt-j1900/igt@gem_close_race@basic-threads.html

  * igt@i915_module_load@reload-with-fault-injection:
    - fi-kbl-7500u:       [INCOMPLETE][7] ([i915#879]) -> [PASS][8]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/fi-kbl-7500u/igt@i915_module_load@reload-with-fault-injection.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/fi-kbl-7500u/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_selftest@live_blt:
    - fi-ivb-3770:        [DMESG-FAIL][9] ([i915#563]) -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/fi-ivb-3770/igt@i915_selftest@live_blt.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/fi-ivb-3770/igt@i915_selftest@live_blt.html
    - fi-hsw-4770:        [DMESG-FAIL][11] ([i915#563]) -> [PASS][12]
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/fi-hsw-4770/igt@i915_selftest@live_blt.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/fi-hsw-4770/igt@i915_selftest@live_blt.html

  
#### Warnings ####

  * igt@i915_module_load@reload-with-fault-injection:
    - fi-skl-lmem:        [INCOMPLETE][13] ([i915#671]) -> [DMESG-WARN][14] ([i915#889])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/fi-skl-lmem/igt@i915_module_load@reload-with-fault-injection.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/fi-skl-lmem/igt@i915_module_load@reload-with-fault-injection.html

  
  [fdo#108569]: https://bugs.freedesktop.org/show_bug.cgi?id=108569
  [fdo#112271]: https://bugs.freedesktop.org/show_bug.cgi?id=112271
  [i915#140]: https://gitlab.freedesktop.org/drm/intel/issues/140
  [i915#217]: https://gitlab.freedesktop.org/drm/intel/issues/217
  [i915#563]: https://gitlab.freedesktop.org/drm/intel/issues/563
  [i915#671]: https://gitlab.freedesktop.org/drm/intel/issues/671
  [i915#816]: https://gitlab.freedesktop.org/drm/intel/issues/816
  [i915#879]: https://gitlab.freedesktop.org/drm/intel/issues/879
  [i915#889]: https://gitlab.freedesktop.org/drm/intel/issues/889


Participating hosts (49 -> 43)
------------------------------

  Missing    (6): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-byt-clapper 


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

  * CI: CI-20190529 -> None
  * IGT: IGT_5373 -> IGTPW_3950

  CI-20190529: 20190529
  CI_DRM_7778: 8442e59b2b3aa0f081ee31fc13dcd0f31e5981e5 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_3950: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/index.html
  IGT_5373: 224e565df36693ab8ae8f58eb6ae42600c2464e2 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@kms_dp_tiled_display@basic-test-pattern-with-chamelium

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/index.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [igt-dev] ✗ Fi.CI.IGT: failure for Test tiled display with aid of chamelium. (rev2)
  2020-01-20  4:20 [igt-dev] [PATCH i-g-t v2 0/3] Test tiled display with aid of chamelium Kunal Joshi
                   ` (3 preceding siblings ...)
  2020-01-20 22:34 ` [igt-dev] ✓ Fi.CI.BAT: success for Test tiled display with aid of chamelium. (rev2) Patchwork
@ 2020-01-21  6:33 ` Patchwork
  2020-03-10 19:43 ` [igt-dev] [PATCH i-g-t v2 0/3] Test tiled display with aid of chamelium Manasi Navare
  5 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2020-01-21  6:33 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

== Series Details ==

Series: Test tiled display with aid of chamelium. (rev2)
URL   : https://patchwork.freedesktop.org/series/71393/
State : failure

== Summary ==

CI Bug Log - changes from IGT_5373_full -> IGTPW_3950_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_3950_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_3950_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/index.html

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@kms_dp_tiled_display@basic-test-pattern:
    - shard-tglb:         NOTRUN -> [SKIP][1]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb2/igt@kms_dp_tiled_display@basic-test-pattern.html

  * {igt@kms_dp_tiled_display@basic-test-pattern-with-chamelium} (NEW):
    - shard-apl:          NOTRUN -> [FAIL][2]
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-apl8/igt@kms_dp_tiled_display@basic-test-pattern-with-chamelium.html
    - shard-tglb:         NOTRUN -> [FAIL][3]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb1/igt@kms_dp_tiled_display@basic-test-pattern-with-chamelium.html
    - shard-glk:          NOTRUN -> [FAIL][4]
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-glk7/igt@kms_dp_tiled_display@basic-test-pattern-with-chamelium.html
    - shard-snb:          NOTRUN -> [FAIL][5]
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-snb2/igt@kms_dp_tiled_display@basic-test-pattern-with-chamelium.html
    - shard-iclb:         NOTRUN -> [FAIL][6]
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb8/igt@kms_dp_tiled_display@basic-test-pattern-with-chamelium.html
    - shard-hsw:          NOTRUN -> [FAIL][7]
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-hsw2/igt@kms_dp_tiled_display@basic-test-pattern-with-chamelium.html
    - shard-kbl:          NOTRUN -> [FAIL][8]
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-kbl4/igt@kms_dp_tiled_display@basic-test-pattern-with-chamelium.html

  
#### Warnings ####

  * igt@kms_dp_tiled_display@basic-test-pattern:
    - shard-iclb:         [SKIP][9] ([i915#426]) -> [SKIP][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb1/igt@kms_dp_tiled_display@basic-test-pattern.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb3/igt@kms_dp_tiled_display@basic-test-pattern.html

  
New tests
---------

  New tests have been introduced between IGT_5373_full and IGTPW_3950_full:

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

  * igt@kms_dp_tiled_display@basic-test-pattern-with-chamelium:
    - Statuses : 7 fail(s)
    - Exec time: [0.01, 0.99] s

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_busy@busy-vcs1:
    - shard-iclb:         [PASS][11] -> [SKIP][12] ([fdo#112080]) +7 similar issues
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb4/igt@gem_busy@busy-vcs1.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb3/igt@gem_busy@busy-vcs1.html

  * igt@gem_busy@close-race:
    - shard-tglb:         [PASS][13] -> [INCOMPLETE][14] ([i915#472] / [i915#977])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb8/igt@gem_busy@close-race.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb3/igt@gem_busy@close-race.html

  * igt@gem_ctx_persistence@vcs1-mixed-process:
    - shard-iclb:         [PASS][15] -> [SKIP][16] ([fdo#109276] / [fdo#112080]) +4 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb1/igt@gem_ctx_persistence@vcs1-mixed-process.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb8/igt@gem_ctx_persistence@vcs1-mixed-process.html

  * igt@gem_ctx_shared@q-smoketest-vebox:
    - shard-tglb:         [PASS][17] -> [INCOMPLETE][18] ([fdo#111735] / [i915#472])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb2/igt@gem_ctx_shared@q-smoketest-vebox.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb4/igt@gem_ctx_shared@q-smoketest-vebox.html

  * igt@gem_exec_create@madvise:
    - shard-tglb:         [PASS][19] -> [INCOMPLETE][20] ([i915#472])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb1/igt@gem_exec_create@madvise.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb8/igt@gem_exec_create@madvise.html

  * igt@gem_exec_schedule@pi-userfault-bsd:
    - shard-iclb:         [PASS][21] -> [SKIP][22] ([i915#677])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb8/igt@gem_exec_schedule@pi-userfault-bsd.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb1/igt@gem_exec_schedule@pi-userfault-bsd.html

  * igt@gem_exec_schedule@preempt-queue-bsd:
    - shard-iclb:         [PASS][23] -> [SKIP][24] ([fdo#112146]) +1 similar issue
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb3/igt@gem_exec_schedule@preempt-queue-bsd.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb1/igt@gem_exec_schedule@preempt-queue-bsd.html

  * igt@gem_exec_schedule@preempt-queue-bsd1:
    - shard-tglb:         [PASS][25] -> [INCOMPLETE][26] ([fdo#111677] / [i915#472])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb2/igt@gem_exec_schedule@preempt-queue-bsd1.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb6/igt@gem_exec_schedule@preempt-queue-bsd1.html

  * igt@gem_exec_schedule@promotion-bsd1:
    - shard-iclb:         [PASS][27] -> [SKIP][28] ([fdo#109276]) +15 similar issues
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb2/igt@gem_exec_schedule@promotion-bsd1.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb8/igt@gem_exec_schedule@promotion-bsd1.html

  * igt@gem_exec_suspend@basic:
    - shard-tglb:         [PASS][29] -> [INCOMPLETE][30] ([i915#460] / [i915#472])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb7/igt@gem_exec_suspend@basic.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb3/igt@gem_exec_suspend@basic.html

  * igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing:
    - shard-apl:          [PASS][31] -> [INCOMPLETE][32] ([CI#80] / [fdo#103927] / [i915#530])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-apl2/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-apl8/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing.html
    - shard-iclb:         [PASS][33] -> [INCOMPLETE][34] ([CI#80] / [i915#140] / [i915#530])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb3/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb3/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing.html

  * igt@gem_persistent_relocs@forked-interruptible-thrash-inactive:
    - shard-kbl:          [PASS][35] -> [TIMEOUT][36] ([fdo#112271] / [i915#530])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-kbl2/igt@gem_persistent_relocs@forked-interruptible-thrash-inactive.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-kbl6/igt@gem_persistent_relocs@forked-interruptible-thrash-inactive.html

  * igt@gem_set_tiling_vs_gtt:
    - shard-snb:          [PASS][37] -> [DMESG-WARN][38] ([i915#478])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-snb1/igt@gem_set_tiling_vs_gtt.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-snb2/igt@gem_set_tiling_vs_gtt.html

  * igt@gem_userptr_blits@map-fixed-invalidate-busy:
    - shard-snb:          [PASS][39] -> [DMESG-WARN][40] ([fdo#111870] / [i915#478])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-snb2/igt@gem_userptr_blits@map-fixed-invalidate-busy.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-snb6/igt@gem_userptr_blits@map-fixed-invalidate-busy.html

  * igt@i915_pm_dc@dc6-psr:
    - shard-iclb:         [PASS][41] -> [FAIL][42] ([i915#454])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb1/igt@i915_pm_dc@dc6-psr.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb6/igt@i915_pm_dc@dc6-psr.html

  * igt@i915_selftest@mock_requests:
    - shard-glk:          [PASS][43] -> [INCOMPLETE][44] ([i915#58] / [k.org#198133])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-glk4/igt@i915_selftest@mock_requests.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-glk8/igt@i915_selftest@mock_requests.html

  * igt@kms_cursor_crc@pipe-b-cursor-alpha-opaque:
    - shard-apl:          [PASS][45] -> [FAIL][46] ([i915#54])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-apl6/igt@kms_cursor_crc@pipe-b-cursor-alpha-opaque.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-apl7/igt@kms_cursor_crc@pipe-b-cursor-alpha-opaque.html
    - shard-kbl:          [PASS][47] -> [FAIL][48] ([i915#54])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-kbl7/igt@kms_cursor_crc@pipe-b-cursor-alpha-opaque.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-kbl4/igt@kms_cursor_crc@pipe-b-cursor-alpha-opaque.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible:
    - shard-kbl:          [PASS][49] -> [FAIL][50] ([i915#79])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-kbl3/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-kbl4/igt@kms_flip@flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-apl:          [PASS][51] -> [DMESG-WARN][52] ([i915#180]) +3 similar issues
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-apl6/igt@kms_flip@flip-vs-suspend-interruptible.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-apl6/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_force_connector_basic@prune-stale-modes:
    - shard-snb:          [PASS][53] -> [INCOMPLETE][54] ([CI#80] / [i915#82])
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-snb4/igt@kms_force_connector_basic@prune-stale-modes.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-snb4/igt@kms_force_connector_basic@prune-stale-modes.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-pwrite:
    - shard-tglb:         [PASS][55] -> [FAIL][56] ([i915#49])
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-pwrite.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-pwrite.html

  * igt@kms_psr2_su@frontbuffer:
    - shard-iclb:         [PASS][57] -> [SKIP][58] ([fdo#109642] / [fdo#111068])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb2/igt@kms_psr2_su@frontbuffer.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb7/igt@kms_psr2_su@frontbuffer.html

  * igt@kms_psr@psr2_primary_blt:
    - shard-iclb:         [PASS][59] -> [SKIP][60] ([fdo#109441])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb2/igt@kms_psr@psr2_primary_blt.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb8/igt@kms_psr@psr2_primary_blt.html

  * igt@kms_vblank@pipe-b-query-busy:
    - shard-hsw:          [PASS][61] -> [DMESG-WARN][62] ([i915#44])
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-hsw5/igt@kms_vblank@pipe-b-query-busy.html
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-hsw5/igt@kms_vblank@pipe-b-query-busy.html

  * igt@kms_vblank@pipe-c-ts-continuation-suspend:
    - shard-kbl:          [PASS][63] -> [DMESG-WARN][64] ([i915#180]) +3 similar issues
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-kbl1/igt@kms_vblank@pipe-c-ts-continuation-suspend.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-kbl4/igt@kms_vblank@pipe-c-ts-continuation-suspend.html

  
#### Possible fixes ####

  * igt@gem_ctx_isolation@vcs1-none:
    - shard-iclb:         [SKIP][65] ([fdo#109276] / [fdo#112080]) -> [PASS][66] +2 similar issues
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb8/igt@gem_ctx_isolation@vcs1-none.html
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb1/igt@gem_ctx_isolation@vcs1-none.html

  * igt@gem_ctx_persistence@vecs0-mixed-process:
    - shard-apl:          [FAIL][67] ([i915#679]) -> [PASS][68]
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-apl4/igt@gem_ctx_persistence@vecs0-mixed-process.html
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-apl6/igt@gem_ctx_persistence@vecs0-mixed-process.html

  * igt@gem_ctx_shared@q-smoketest-bsd:
    - shard-tglb:         [INCOMPLETE][69] ([i915#461] / [i915#472]) -> [PASS][70]
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb6/igt@gem_ctx_shared@q-smoketest-bsd.html
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb5/igt@gem_ctx_shared@q-smoketest-bsd.html

  * igt@gem_exec_create@basic:
    - shard-tglb:         [INCOMPLETE][71] ([fdo#111736] / [i915#472]) -> [PASS][72]
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb3/igt@gem_exec_create@basic.html
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb4/igt@gem_exec_create@basic.html

  * igt@gem_exec_parallel@vcs1-fds:
    - shard-iclb:         [SKIP][73] ([fdo#112080]) -> [PASS][74] +9 similar issues
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb6/igt@gem_exec_parallel@vcs1-fds.html
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb2/igt@gem_exec_parallel@vcs1-fds.html

  * igt@gem_exec_schedule@pi-common-bsd:
    - shard-iclb:         [SKIP][75] ([i915#677]) -> [PASS][76]
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb1/igt@gem_exec_schedule@pi-common-bsd.html
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb3/igt@gem_exec_schedule@pi-common-bsd.html

  * igt@gem_exec_schedule@preempt-bsd:
    - shard-iclb:         [SKIP][77] ([fdo#112146]) -> [PASS][78] +5 similar issues
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb4/igt@gem_exec_schedule@preempt-bsd.html
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb6/igt@gem_exec_schedule@preempt-bsd.html

  * igt@gem_exec_schedule@preempt-queue-bsd1:
    - shard-iclb:         [SKIP][79] ([fdo#109276]) -> [PASS][80] +20 similar issues
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb6/igt@gem_exec_schedule@preempt-queue-bsd1.html
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb1/igt@gem_exec_schedule@preempt-queue-bsd1.html

  * igt@gem_exec_schedule@smoketest-bsd1:
    - shard-tglb:         [INCOMPLETE][81] ([i915#463] / [i915#472]) -> [PASS][82] +1 similar issue
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb4/igt@gem_exec_schedule@smoketest-bsd1.html
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb2/igt@gem_exec_schedule@smoketest-bsd1.html

  * igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing:
    - shard-kbl:          [TIMEOUT][83] ([fdo#112271] / [i915#530]) -> [PASS][84]
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-kbl2/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing.html
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-kbl7/igt@gem_persistent_relocs@forked-interruptible-faulting-reloc-thrashing.html

  * igt@gem_persistent_relocs@forked-interruptible-thrashing:
    - shard-apl:          [INCOMPLETE][85] ([CI#80] / [fdo#103927] / [i915#530]) -> [PASS][86]
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-apl8/igt@gem_persistent_relocs@forked-interruptible-thrashing.html
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-apl8/igt@gem_persistent_relocs@forked-interruptible-thrashing.html

  * igt@gem_persistent_relocs@forked-thrashing:
    - shard-hsw:          [INCOMPLETE][87] ([i915#530] / [i915#61]) -> [PASS][88]
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-hsw2/igt@gem_persistent_relocs@forked-thrashing.html
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-hsw6/igt@gem_persistent_relocs@forked-thrashing.html

  * igt@gem_softpin@noreloc-s3:
    - shard-hsw:          [DMESG-WARN][89] -> [PASS][90]
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-hsw6/igt@gem_softpin@noreloc-s3.html
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-hsw7/igt@gem_softpin@noreloc-s3.html

  * igt@gem_sync@basic-each:
    - shard-tglb:         [INCOMPLETE][91] ([i915#472] / [i915#707]) -> [PASS][92]
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb3/igt@gem_sync@basic-each.html
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb4/igt@gem_sync@basic-each.html

  * igt@gem_sync@basic-store-all:
    - shard-tglb:         [INCOMPLETE][93] ([i915#472]) -> [PASS][94]
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb1/igt@gem_sync@basic-store-all.html
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb2/igt@gem_sync@basic-store-all.html

  * igt@gem_tiled_partial_pwrite_pread@reads:
    - shard-hsw:          [FAIL][95] -> [PASS][96]
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-hsw1/igt@gem_tiled_partial_pwrite_pread@reads.html
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-hsw1/igt@gem_tiled_partial_pwrite_pread@reads.html

  * igt@gem_userptr_blits@dmabuf-sync:
    - shard-snb:          [DMESG-WARN][97] ([fdo#111870] / [i915#478]) -> [PASS][98]
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-snb1/igt@gem_userptr_blits@dmabuf-sync.html
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-snb2/igt@gem_userptr_blits@dmabuf-sync.html

  * igt@gen9_exec_parse@allowed-all:
    - shard-glk:          [DMESG-WARN][99] ([i915#716]) -> [PASS][100]
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-glk9/igt@gen9_exec_parse@allowed-all.html
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-glk3/igt@gen9_exec_parse@allowed-all.html

  * igt@i915_selftest@live_gt_timelines:
    - shard-tglb:         [INCOMPLETE][101] ([i915#455] / [i915#472]) -> [PASS][102]
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb8/igt@i915_selftest@live_gt_timelines.html
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb7/igt@i915_selftest@live_gt_timelines.html

  * igt@i915_selftest@mock_requests:
    - shard-apl:          [INCOMPLETE][103] ([fdo#103927]) -> [PASS][104]
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-apl6/igt@i915_selftest@mock_requests.html
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-apl4/igt@i915_selftest@mock_requests.html

  * igt@i915_suspend@fence-restore-tiled2untiled:
    - shard-apl:          [DMESG-WARN][105] ([i915#180]) -> [PASS][106]
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-apl3/igt@i915_suspend@fence-restore-tiled2untiled.html
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-apl4/igt@i915_suspend@fence-restore-tiled2untiled.html

  * igt@kms_cursor_crc@pipe-a-cursor-128x128-random:
    - shard-kbl:          [INCOMPLETE][107] ([CI#80] / [fdo#103665]) -> [PASS][108]
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-kbl2/igt@kms_cursor_crc@pipe-a-cursor-128x128-random.html
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-kbl1/igt@kms_cursor_crc@pipe-a-cursor-128x128-random.html
    - shard-snb:          [INCOMPLETE][109] ([CI#80] / [i915#82]) -> [PASS][110]
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-snb6/igt@kms_cursor_crc@pipe-a-cursor-128x128-random.html
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-snb4/igt@kms_cursor_crc@pipe-a-cursor-128x128-random.html

  * igt@kms_cursor_crc@pipe-c-cursor-suspend:
    - shard-kbl:          [DMESG-WARN][111] ([i915#180]) -> [PASS][112] +5 similar issues
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-kbl7/igt@kms_cursor_crc@pipe-c-cursor-suspend.html
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-kbl7/igt@kms_cursor_crc@pipe-c-cursor-suspend.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt:
    - shard-tglb:         [FAIL][113] ([i915#49]) -> [PASS][114]
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt.html
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt.html

  * igt@kms_psr@psr2_sprite_render:
    - shard-iclb:         [SKIP][115] ([fdo#109441]) -> [PASS][116] +3 similar issues
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb6/igt@kms_psr@psr2_sprite_render.html
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb2/igt@kms_psr@psr2_sprite_render.html

  * igt@kms_setmode@basic:
    - shard-apl:          [FAIL][117] ([i915#31]) -> [PASS][118]
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-apl2/igt@kms_setmode@basic.html
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-apl7/igt@kms_setmode@basic.html

  * igt@perf_pmu@cpu-hotplug:
    - shard-hsw:          [INCOMPLETE][119] ([i915#61]) -> [PASS][120]
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-hsw1/igt@perf_pmu@cpu-hotplug.html
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-hsw5/igt@perf_pmu@cpu-hotplug.html

  
#### Warnings ####

  * igt@gem_ctx_isolation@vcs1-nonpriv:
    - shard-iclb:         [SKIP][121] ([fdo#109276] / [fdo#112080]) -> [FAIL][122] ([IGT#28])
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-iclb6/igt@gem_ctx_isolation@vcs1-nonpriv.html
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-iclb2/igt@gem_ctx_isolation@vcs1-nonpriv.html

  * igt@gem_eio@kms:
    - shard-snb:          [DMESG-WARN][123] ([i915#444]) -> [INCOMPLETE][124] ([i915#82])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-snb5/igt@gem_eio@kms.html
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-snb2/igt@gem_eio@kms.html

  * igt@gem_tiled_blits@normal:
    - shard-hsw:          [FAIL][125] ([i915#818]) -> [FAIL][126] ([i915#694])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-hsw7/igt@gem_tiled_blits@normal.html
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-hsw5/igt@gem_tiled_blits@normal.html

  * igt@gem_userptr_blits@sync-unmap-after-close:
    - shard-snb:          [DMESG-WARN][127] ([fdo#110789] / [fdo#111870] / [i915#478]) -> [DMESG-WARN][128] ([fdo#111870] / [i915#478])
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-snb2/igt@gem_userptr_blits@sync-unmap-after-close.html
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-snb1/igt@gem_userptr_blits@sync-unmap-after-close.html

  * igt@i915_pm_dc@dc6-dpms:
    - shard-snb:          [SKIP][129] ([fdo#109271]) -> [INCOMPLETE][130] ([i915#82])
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-snb6/igt@i915_pm_dc@dc6-dpms.html
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-snb6/igt@i915_pm_dc@dc6-dpms.html

  * igt@i915_pm_dc@dc6-psr:
    - shard-tglb:         [FAIL][131] ([i915#454]) -> [SKIP][132] ([i915#468])
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-tglb4/igt@i915_pm_dc@dc6-psr.html
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-tglb3/igt@i915_pm_dc@dc6-psr.html

  * igt@kms_cursor_crc@pipe-b-cursor-suspend:
    - shard-kbl:          [DMESG-WARN][133] ([i915#180]) -> [INCOMPLETE][134] ([fdo#103665])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-kbl4/igt@kms_cursor_crc@pipe-b-cursor-suspend.html
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-kbl6/igt@kms_cursor_crc@pipe-b-cursor-suspend.html

  * igt@runner@aborted:
    - shard-apl:          ([FAIL][135], [FAIL][136]) ([i915#873] / [i915#997]) -> ([FAIL][137], [FAIL][138]) ([i915#997])
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-apl6/igt@runner@aborted.html
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-apl8/igt@runner@aborted.html
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-apl3/igt@runner@aborted.html
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-apl2/igt@runner@aborted.html
    - shard-glk:          ([FAIL][139], [FAIL][140]) ([i915#997] / [k.org#202321]) -> ([FAIL][141], [FAIL][142], [FAIL][143]) ([i915#873] / [i915#997] / [k.org#202321])
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-glk9/igt@runner@aborted.html
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5373/shard-glk9/igt@runner@aborted.html
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-glk5/igt@runner@aborted.html
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-glk6/igt@runner@aborted.html
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/shard-glk8/igt@runner@aborted.html

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

  [CI#80]: https://gitlab.freedesktop.org/gfx-ci/i915-infra/issues/80
  [IGT#28]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/28
  [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
  [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276
  [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441
  [fdo#109642]: https://bugs.freedesktop.org/show_bug.cgi?id=109642
  [fdo#110789]: https://bugs.freedesktop.org/show_bug.cgi?id=110789
  [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
  [fdo#111677]: https://bugs.freedesktop.org/show_bug.cgi?id=111677
  [fdo#111735]: https://bugs.freedesktop.org/show_bug.cgi?id=111735
  [fdo#111736]: https://bugs.freedesktop.org/show_bug.cgi?id=111736
  [fdo#111870]: https://bugs.freedesktop.org/show_bug.cgi?id=111870
  [fdo#112080]: https://bugs.freedesktop.org/show_bug.cgi?id=112080
  [fdo#112146]: https://bugs.freedesktop.org/show_bug.cgi?id=112146
  [fdo#112271]: https://bugs.freedesktop.org/show_bug.cgi?id=112271
  [i915#140]: https://gitlab.freedesktop.org/drm/intel/issues/140
  [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
  [i915#31]: https://gitlab.freedesktop.org/drm/intel/issues/31
  [i915#426]: https://gitlab.freedesktop.org/drm/intel/issues/426
  [i915#44]: https://gitlab.freedesktop.org/drm/intel/issues/44
  [i915#444]: https://gitlab.freedesktop.org/drm/intel/issues/444
  [i915#454]: https://gitlab.freedesktop.org/drm/intel/issues/454
  [i915#455]: https://gitlab.freedesktop.org/drm/intel/issues/455
  [i915#460]: https://gitlab.freedesktop.org/drm/intel/issues/460
  [i915#461]: https://gitlab.freedesktop.org/drm/intel/issues/461
  [i915#463]: https://gitlab.freedesktop.org/drm/intel/issues/463
  [i915#468]: https://gitlab.freedesktop.org/drm/intel/issues/468
  [i915#472]: https://gitlab.freedesktop.org/drm/intel/issues/472
  [i915#478]: https://gitlab.freedesktop.org/drm/intel/issues/478
  [i915#49]: https://gitlab.freedesktop.org/drm/intel/issues/49
  [i915#530]: https://gitlab.freedesktop.org/drm/intel/issues/530
  [i915#54]: https://gitlab.freedesktop.org/drm/intel/issues/54
  [i915#58]: https://gitlab.freedesktop.org/drm/intel/issues/58
  [i915#61]: https://gitlab.freedesktop.org/drm/intel/issues/61
  [i915#677]: https://gitlab.freedesktop.org/drm/intel/issues/677
  [i915#679]: https://gitlab.freedesktop.org/drm/intel/issues/679
  [i915#694]: https://gitlab.freedesktop.org/drm/intel/issues/694
  [i915#707]: https://gitlab.freedesktop.org/drm/intel/issues/707
  [i915#716]: https://gitlab.freedesktop.org/drm/intel/issues/716
  [i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
  [i915#818]: https://gitlab.freedesktop.org/drm/intel/issues/818
  [i915#82]: https://gitlab.freedesktop.org/drm/intel/issues/82
  [i915#873]: https://gitlab.freedesktop.org/drm/intel/issues/873
  [i915#973]: https://gitlab.freedesktop.org/drm/intel/issues/973
  [i915#977]: https://gitlab.freedesktop.org/drm/intel/issues/977
  [i915#997]: https://gitlab.freedesktop.org/drm/intel/issues/997
  [k.org#198133]: https://bugzilla.kernel.org/show_bug.cgi?id=198133
  [k.org#202321]: https://bugzilla.kernel.org/show_bug.cgi?id=202321


Participating hosts (8 -> 8)
------------------------------

  No changes in participating hosts


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

  * CI: CI-20190529 -> None
  * IGT: IGT_5373 -> IGTPW_3950

  CI-20190529: 20190529
  CI_DRM_7778: 8442e59b2b3aa0f081ee31fc13dcd0f31e5981e5 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_3950: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3950/index.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v2 0/3] Test tiled display with aid of chamelium.
  2020-01-20  4:20 [igt-dev] [PATCH i-g-t v2 0/3] Test tiled display with aid of chamelium Kunal Joshi
                   ` (4 preceding siblings ...)
  2020-01-21  6:33 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
@ 2020-03-10 19:43 ` Manasi Navare
  5 siblings, 0 replies; 8+ messages in thread
From: Manasi Navare @ 2020-03-10 19:43 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev, martin.peres

So one qq, on the Chamelium board we do expect the first subtest of basic test pattern
will be skipped right?

In general, Series 

Reviewed-by: Manasi Navare <manasi.d.navare@intel.com>

Could you Ankit or Karthik also add a tested by tag?

Manasi

On Mon, Jan 20, 2020 at 09:50:24AM +0530, Kunal Joshi wrote:
> As of now we have kms_dp_tiled_display test which needs a physical
> panel.Added changes to have chamelium act as a tiled panel and then
> execute the test.
> 
> Kunal Joshi (3):
>   Make basic chamelium function accessible to other tests.
>   Added structures and functions to generate tiled edids.
>   Added a subtest where chamelium acts as a tiled panel.
> 
>  lib/igt_chamelium.c          | 152 +++++++++++++++++++++++++++++++++++++++++++
>  lib/igt_chamelium.h          |  33 ++++++++++
>  lib/igt_edid.c               |  27 ++++++++
>  lib/igt_edid.h               |  20 ++++++
>  lib/igt_kms.c                | 102 +++++++++++++++++++++++++++++
>  lib/igt_kms.h                |   2 +
>  tests/kms_chamelium.c        |  81 +----------------------
>  tests/kms_dp_tiled_display.c | 111 ++++++++++++++++++++++++-------
>  8 files changed, 424 insertions(+), 104 deletions(-)
> 
> -- 
> 2.7.4
> 
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v2 1/3] Make basic chamelium function accessible to other tests.
  2020-01-20  4:20 ` [igt-dev] [PATCH i-g-t v2 1/3] Make basic chamelium function accessible to other tests Kunal Joshi
@ 2020-03-11  8:23   ` Petri Latvala
  0 siblings, 0 replies; 8+ messages in thread
From: Petri Latvala @ 2020-03-11  8:23 UTC (permalink / raw)
  To: Kunal Joshi, Arkadiusz Hiler; +Cc: igt-dev, martin.peres

On Mon, Jan 20, 2020 at 09:50:25AM +0530, Kunal Joshi wrote:
> There are many use case where we can integrate chamelium with other tests,
> Migrating some of basic chamelium functions to igt_chamelium lib to avoid
> Code rewriting.
> 
> v2: Moved one more function reset_state from tests/kms_chamelium to
> lib/igt_chamelium.
> 
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
> Signed-off-by: Karthik B S <karthik.b.s@intel.com>
> ---
>  lib/igt_chamelium.c   | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  lib/igt_chamelium.h   | 28 +++++++++++++++++
>  tests/kms_chamelium.c | 81 +-----------------------------------------------
>  3 files changed, 114 insertions(+), 80 deletions(-)
> 
> diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c
> index 9971f51..8b910bf 100644
> --- a/lib/igt_chamelium.c
> +++ b/lib/igt_chamelium.c
> @@ -132,6 +132,91 @@ static struct chamelium *cleanup_instance;
>  static void chamelium_do_calculate_fb_crc(cairo_surface_t *fb_surface,
>  					  igt_crc_t *out);
>  
> +void
> +require_displayport_connector_present(struct data_chamelium_t *data,
> +							    unsigned int type)
> +{
> +	int i, count = 0;
> +	bool found = false;
> +
> +	for (i = 0; i < data->port_count && !found; i++) {
> +		if (chamelium_port_get_type(data->ports[i]) == type)
> +			count++;
> +		if (count == 2)
> +			found = true;
> +	}
> +	igt_require_f(found,
> +		"Need atleast 2 ports of type %s connected, found %d\n",
> +		kmstest_connector_type_str(type), count);
> +}

For a helper, this could use some generalizing. It's called "require
displayport connector" but requires exactly 2 connectors of a given
type, not displayport. The name also needs to be prefixed with
chamelium_. chamelium_require_connectors(chamelium, type, count)?

Comment below for data_chamelium_t usage.

> +
> +drmModeConnection
> +reprobe_connector(struct data_chamelium_t *data, struct chamelium_port *port)
> +{
> +	drmModeConnector *connector;
> +	drmModeConnection status;
> +
> +	igt_debug("Reprobing %s...\n", chamelium_port_get_name(port));
> +	connector = chamelium_port_get_connector(data->chamelium, port, true);
> +	igt_assert(connector);
> +	status = connector->connection;
> +
> +	drmModeFreeConnector(connector);
> +	return status;
> +}

As a library function, this functions looks redundant. Just keep
copies of that function in the tests IMHO.


> +
> +const char *connection_str(drmModeConnection c)
> +{
> +	switch (c) {
> +	case DRM_MODE_CONNECTED:
> +		return "connected";
> +	case DRM_MODE_DISCONNECTED:
> +		return "disconnected";
> +	case DRM_MODE_UNKNOWNCONNECTION:
> +		return "unknown";
> +	}
> +	assert(0); /* unreachable */
> +}

Isn't this just kmstest_connector_status_str()?

> +
> +void
> +wait_for_connector(struct data_chamelium_t *data, struct chamelium_port *port,
> +		   drmModeConnection status)
> +{
> +	igt_debug("Waiting for %s to get %s...\n",
> +		chamelium_port_get_name(port), connection_str(status));
> +
> +	/*
> +	 * Rely on simple reprobing so we don't fail tests that don't require
> +	 * that hpd events work in the event that hpd doesn't work on the system
> +	 */
> +	igt_until_timeout(HOTPLUG_TIMEOUT) {
> +	if (reprobe_connector(data, port) == status)
> +		return;
> +
> +	usleep(50000);
> +
> +	}
> +	igt_assert_f(false, "Timed out waiting for %s to get %s\n",
> +		chamelium_port_get_name(port), connection_str(status));
> +}
> +
> +void
> +reset_state(struct data_chamelium_t *data, struct chamelium_port *port)
> +{
> +	int p;
> +
> +	chamelium_reset(data->chamelium);
> +
> +	if (port) {
> +		wait_for_connector(data, port, DRM_MODE_DISCONNECTED);
> +	} else {
> +		for (p = 0; p < data->port_count; p++) {
> +			port = data->ports[p];
> +			wait_for_connector(data, port, DRM_MODE_DISCONNECTED);
> +		}
> +	}
> +}
> +

I'm fairly certain we already have helpers for doing these operations,
or if we don't, we don't need them in lib.


>  /**
>   * chamelium_get_ports:
>   * @chamelium: The Chamelium instance to use
> diff --git a/lib/igt_chamelium.h b/lib/igt_chamelium.h
> index 08705a9..71080f4 100644
> --- a/lib/igt_chamelium.h
> +++ b/lib/igt_chamelium.h
> @@ -25,6 +25,8 @@
>  
>  #ifndef IGT_CHAMELIUM_H
>  #define IGT_CHAMELIUM_H
> +#define TEST_EDID_COUNT 5
> +#define HOTPLUG_TIMEOUT 20
>  
>  #include "config.h"
>  
> @@ -32,6 +34,7 @@
>  #include <xf86drmMode.h>
>  
>  #include "igt_debugfs.h"
> +#include "igt_kms.h"
>  
>  struct igt_fb;
>  struct edid;
> @@ -81,6 +84,17 @@ struct chamelium_infoframe {
>  
>  struct chamelium_edid;
>  
> +struct data_chamelium_t {
> +	struct chamelium *chamelium;
> +	struct chamelium_port **ports;
> +	igt_display_t display;
> +	int port_count;
> +
> +	int drm_fd;
> +
> +	struct chamelium_edid *edids[TEST_EDID_COUNT];
> +};
> +

This struct is entirely tests/kms_chamelium.c specific. Make the new
lib helpers take a struct chamelium* instead. Why kms_chamelium even
has this intermediary storage for all this data is beyond my expertise
but I'm not seeing it.

From a quick look, the only thing the new lib functions would need is
access to the chamelium ports, and they can be retrieved with
chamelium_get_ports(). 


CC'ing Arek for comments with his chamelium lib expertise.


-- 
Petri Latvala
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-03-11  8:23 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-01-20  4:20 [igt-dev] [PATCH i-g-t v2 0/3] Test tiled display with aid of chamelium Kunal Joshi
2020-01-20  4:20 ` [igt-dev] [PATCH i-g-t v2 1/3] Make basic chamelium function accessible to other tests Kunal Joshi
2020-03-11  8:23   ` Petri Latvala
2020-01-20  4:20 ` [igt-dev] [PATCH i-g-t v2 2/3] Added structures and functions to generate tiled edids Kunal Joshi
2020-01-20  4:20 ` [igt-dev] [PATCH i-g-t v2 3/3] Added a subtest where chamelium acts as a tiled panel Kunal Joshi
2020-01-20 22:34 ` [igt-dev] ✓ Fi.CI.BAT: success for Test tiled display with aid of chamelium. (rev2) Patchwork
2020-01-21  6:33 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
2020-03-10 19:43 ` [igt-dev] [PATCH i-g-t v2 0/3] Test tiled display with aid of chamelium Manasi Navare

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox