* [igt-dev] [PATCH i-g-t 0/3] Test tiled display with aid of chamelium.
@ 2019-12-26 10:50 Kunal Joshi
2019-12-26 10:50 ` [igt-dev] [PATCH i-g-t 1/3] Make basic chamelium function accessible to other tests Kunal Joshi
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Kunal Joshi @ 2019-12-26 10:50 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi
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 | 117 +++++++++++++++++++++++++++++++++++++++++++
lib/igt_chamelium.h | 25 +++++++++
lib/igt_edid.c | 27 ++++++++++
lib/igt_edid.h | 20 ++++++++
lib/igt_kms.c | 104 ++++++++++++++++++++++++++++++++++++++
lib/igt_kms.h | 2 +
tests/kms_chamelium.c | 64 +----------------------
tests/kms_dp_tiled_display.c | 109 ++++++++++++++++++++++++++++++++--------
8 files changed, 385 insertions(+), 83 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] 6+ messages in thread
* [igt-dev] [PATCH i-g-t 1/3] Make basic chamelium function accessible to other tests
2019-12-26 10:50 [igt-dev] [PATCH i-g-t 0/3] Test tiled display with aid of chamelium Kunal Joshi
@ 2019-12-26 10:50 ` Kunal Joshi
2019-12-26 10:50 ` [igt-dev] [PATCH i-g-t 2/3] Added structures and functions to generate tiled edids Kunal Joshi
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Kunal Joshi @ 2019-12-26 10:50 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi
There are many uses cases where we can integrate chamelium with other
tests,Migrating basic chamelium functions to igt_chamelium lib to avoid
code rewriting.
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Signed-off-by: Karthik B S <karthik.b.s@intel.com>
---
lib/igt_chamelium.c | 50 ++++++++++++++++++++++++++++++++++++++++
lib/igt_chamelium.h | 20 ++++++++++++++++
tests/kms_chamelium.c | 64 +--------------------------------------------------
3 files changed, 71 insertions(+), 63 deletions(-)
diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c
index 9971f51..29949bb 100644
--- a/lib/igt_chamelium.c
+++ b/lib/igt_chamelium.c
@@ -132,6 +132,56 @@ static struct chamelium *cleanup_instance;
static void chamelium_do_calculate_fb_crc(cairo_surface_t *fb_surface,
igt_crc_t *out);
+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));
+}
+
/**
* chamelium_get_ports:
* @chamelium: The Chamelium instance to use
diff --git a/lib/igt_chamelium.h b/lib/igt_chamelium.h
index 08705a9..3ce78a2 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 2
+#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,10 @@ 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);
+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);
#endif /* IGT_CHAMELIUM_H */
diff --git a/tests/kms_chamelium.c b/tests/kms_chamelium.c
index 5c4a189..da2037b 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;
+typedef struct data_chamelium_t data_t;
- struct chamelium_edid *edids[TEST_EDID_COUNT];
-} 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 },
--
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] 6+ messages in thread
* [igt-dev] [PATCH i-g-t 2/3] Added structures and functions to generate tiled edids.
2019-12-26 10:50 [igt-dev] [PATCH i-g-t 0/3] Test tiled display with aid of chamelium Kunal Joshi
2019-12-26 10:50 ` [igt-dev] [PATCH i-g-t 1/3] Make basic chamelium function accessible to other tests Kunal Joshi
@ 2019-12-26 10:50 ` Kunal Joshi
2019-12-26 10:50 ` [igt-dev] [PATCH i-g-t 3/3] Added a subtest where chamelium acts as a tiled panel Kunal Joshi
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Kunal Joshi @ 2019-12-26 10:50 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi
Generating the tiled edid which can be flashed on chamelium and added
functions to support the same.
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 | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++
lib/igt_kms.h | 2 +
6 files changed, 225 insertions(+)
diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c
index 29949bb..08efca1 100644
--- a/lib/igt_chamelium.c
+++ b/lib/igt_chamelium.c
@@ -699,6 +699,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
@@ -737,6 +764,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 3ce78a2..c74ae57 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..b7df4e7 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,87 @@ 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 "IGT" (ASCII HEX) */
+ edid_tile->topology_id[0] = 0x49;
+ edid_tile->topology_id[1] = 0x47;
+ edid_tile->topology_id[2] = 0x54;
+ /* Product code "CH" (ASCII HEX) */
+ edid_tile->topology_id[3] = 0x43;
+ edid_tile->topology_id[4] = 0x48;
+ /* Serial Code */
+ 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] 6+ messages in thread
* [igt-dev] [PATCH i-g-t 3/3] Added a subtest where chamelium acts as a tiled panel.
2019-12-26 10:50 [igt-dev] [PATCH i-g-t 0/3] Test tiled display with aid of chamelium Kunal Joshi
2019-12-26 10:50 ` [igt-dev] [PATCH i-g-t 1/3] Make basic chamelium function accessible to other tests Kunal Joshi
2019-12-26 10:50 ` [igt-dev] [PATCH i-g-t 2/3] Added structures and functions to generate tiled edids Kunal Joshi
@ 2019-12-26 10:50 ` Kunal Joshi
2019-12-26 11:28 ` [igt-dev] ✗ GitLab.Pipeline: warning for Test tiled display with aid of chamelium Patchwork
2019-12-26 11:54 ` [igt-dev] ✗ Fi.CI.BAT: failure " Patchwork
4 siblings, 0 replies; 6+ messages in thread
From: Kunal Joshi @ 2019-12-26 10:50 UTC (permalink / raw)
To: igt-dev; +Cc: Kunal Joshi
Split kms_dp_tiled_display into to two subtest.First to execute the
basic test with physical tiled panel and second 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 | 109 +++++++++++++++++++++++++++++++++++--------
1 file changed, 89 insertions(+), 20 deletions(-)
diff --git a/tests/kms_dp_tiled_display.c b/tests/kms_dp_tiled_display.c
index 219de01..c83a8e6 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,11 @@ typedef struct {
struct timeval first_ts;
} data_t;
+void basic_test(data_t data, drmEventContext drm_event, struct pollfd pfd);
+
+void
+require_displayport_connector_present(struct data_chamelium_t *data);
+
static int drm_property_is_tile(drmModePropertyPtr prop)
{
return (strcmp(prop->name, "TILE") ? 0 : 1) &&
@@ -380,13 +386,90 @@ static bool got_all_page_flips(data_t *data)
return true;
}
+void
+require_displayport_connector_present(struct data_chamelium_t *data)
+{
+ int i, count = 0;
+ bool found = false;
+ int type_dp = 10;
+
+ for (i = 0; i < data->port_count && !found; i++) {
+ if (chamelium_port_get_type(data->ports[i]) == type_dp)
+ count++;
+ if (count == 2)
+ found = true;
+ }
+ igt_require_f(found,
+ "Need atleast 2 ports of type %s connected, found %d\n",
+ "DisplayPort", count);
+}
+
+static void test_with_chamelium(data_t data)
+{
+ struct data_chamelium_t data_cham = {0};
+ 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);
+ 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;
+ }
+}
+
+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);
+ }
+
+ test_cleanup(&data);
+}
+
igt_main
{
igt_display_t display;
data_t data = {0};
struct pollfd pfd = {0};
drmEventContext drm_event = {0};
- int ret;
igt_fixture {
data.drm_fd = drm_open_driver_master(DRIVER_ANY);
@@ -402,31 +485,17 @@ 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);
+ igt_subtest("basic-test-pattern-with-chamelium") {
+ test_with_chamelium(data);
+ basic_test(data, drm_event, pfd);
}
igt_fixture {
--
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] 6+ messages in thread
* [igt-dev] ✗ GitLab.Pipeline: warning for Test tiled display with aid of chamelium.
2019-12-26 10:50 [igt-dev] [PATCH i-g-t 0/3] Test tiled display with aid of chamelium Kunal Joshi
` (2 preceding siblings ...)
2019-12-26 10:50 ` [igt-dev] [PATCH i-g-t 3/3] Added a subtest where chamelium acts as a tiled panel Kunal Joshi
@ 2019-12-26 11:28 ` Patchwork
2019-12-26 11:54 ` [igt-dev] ✗ Fi.CI.BAT: failure " Patchwork
4 siblings, 0 replies; 6+ messages in thread
From: Patchwork @ 2019-12-26 11:28 UTC (permalink / raw)
To: Kunal Joshi; +Cc: igt-dev
== Series Details ==
Series: Test tiled display with aid of chamelium.
URL : https://patchwork.freedesktop.org/series/71393/
State : warning
== Summary ==
Did not get list of undocumented tests for this run, something is wrong!
Other than that, pipeline status: FAILED.
see https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/pipelines/92155 for the overview.
build:tests-debian-meson-armhf has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/1233218):
chamelium_plug(data_cham.chamelium, data_cham.ports[i]);
^~~~~~~~~~~~~~
../tests/kms_dp_tiled_display.c:431:4: warning: nested extern declaration of ‘chamelium_plug’ [-Wnested-externs]
../tests/kms_dp_tiled_display.c:432:4: error: implicit declaration of function ‘wait_for_connector’; did you mean ‘get_connectors’? [-Werror=implicit-function-declaration]
wait_for_connector(&data_cham, data_cham.ports[i],
^~~~~~~~~~~~~~~~~~
get_connectors
../tests/kms_dp_tiled_display.c:432:4: warning: nested extern declaration of ‘wait_for_connector’ [-Wnested-externs]
../tests/kms_dp_tiled_display.c:409:26: warning: unused variable ‘data_cham’ [-Wunused-variable]
struct data_chamelium_t data_cham = {0};
^~~~~~~~~
cc1: some warnings being treated as errors
ninja: build stopped: subcommand failed.
section_end:1577359619:build_script
^[[0Ksection_start:1577359619:after_script
^[[0Ksection_end:1577359620:after_script
^[[0Ksection_start:1577359620:upload_artifacts_on_failure
^[[0Ksection_end:1577359622:upload_artifacts_on_failure
^[[0K^[[31;1mERROR: Job failed: exit code 1
^[[0;m
build:tests-debian-meson-arm64 has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/1233219):
chamelium_plug(data_cham.chamelium, data_cham.ports[i]);
^~~~~~~~~~~~~~
../tests/kms_dp_tiled_display.c:431:4: warning: nested extern declaration of ‘chamelium_plug’ [-Wnested-externs]
../tests/kms_dp_tiled_display.c:432:4: error: implicit declaration of function ‘wait_for_connector’; did you mean ‘get_connectors’? [-Werror=implicit-function-declaration]
wait_for_connector(&data_cham, data_cham.ports[i],
^~~~~~~~~~~~~~~~~~
get_connectors
../tests/kms_dp_tiled_display.c:432:4: warning: nested extern declaration of ‘wait_for_connector’ [-Wnested-externs]
../tests/kms_dp_tiled_display.c:409:26: warning: unused variable ‘data_cham’ [-Wunused-variable]
struct data_chamelium_t data_cham = {0};
^~~~~~~~~
cc1: some warnings being treated as errors
ninja: build stopped: subcommand failed.
section_end:1577359625:build_script
^[[0Ksection_start:1577359625:after_script
^[[0Ksection_end:1577359626:after_script
^[[0Ksection_start:1577359626:upload_artifacts_on_failure
^[[0Ksection_end:1577359627:upload_artifacts_on_failure
^[[0K^[[31;1mERROR: Job failed: exit code 1
^[[0;m
build:tests-debian-meson-mips has failed (https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/-/jobs/1233220):
../tests/kms_dp_tiled_display.c:431:4: error: implicit declaration of function ‘chamelium_plug’ [-Werror=implicit-function-declaration]
chamelium_plug(data_cham.chamelium, data_cham.ports[i]);
^~~~~~~~~~~~~~
../tests/kms_dp_tiled_display.c:431:4: warning: nested extern declaration of ‘chamelium_plug’ [-Wnested-externs]
../tests/kms_dp_tiled_display.c:432:4: error: implicit declaration of function ‘wait_for_connector’ [-Werror=implicit-function-declaration]
wait_for_connector(&data_cham, data_cham.ports[i],
^~~~~~~~~~~~~~~~~~
../tests/kms_dp_tiled_display.c:432:4: warning: nested extern declaration of ‘wait_for_connector’ [-Wnested-externs]
../tests/kms_dp_tiled_display.c:409:26: warning: unused variable ‘data_cham’ [-Wunused-variable]
struct data_chamelium_t data_cham = {0};
^~~~~~~~~
cc1: some warnings being treated as errors
ninja: build stopped: subcommand failed.
section_end:1577359593:build_script
^[[0Ksection_start:1577359593:after_script
^[[0Ksection_end:1577359594:after_script
^[[0Ksection_start:1577359594:upload_artifacts_on_failure
^[[0Ksection_end:1577359595:upload_artifacts_on_failure
^[[0K^[[31;1mERROR: Job failed: exit code 1
^[[0;m
== Logs ==
For more details see: https://gitlab.freedesktop.org/gfx-ci/igt-ci-tags/pipelines/92155
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 6+ messages in thread
* [igt-dev] ✗ Fi.CI.BAT: failure for Test tiled display with aid of chamelium.
2019-12-26 10:50 [igt-dev] [PATCH i-g-t 0/3] Test tiled display with aid of chamelium Kunal Joshi
` (3 preceding siblings ...)
2019-12-26 11:28 ` [igt-dev] ✗ GitLab.Pipeline: warning for Test tiled display with aid of chamelium Patchwork
@ 2019-12-26 11:54 ` Patchwork
4 siblings, 0 replies; 6+ messages in thread
From: Patchwork @ 2019-12-26 11:54 UTC (permalink / raw)
To: Kunal Joshi; +Cc: igt-dev
== Series Details ==
Series: Test tiled display with aid of chamelium.
URL : https://patchwork.freedesktop.org/series/71393/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_7636 -> IGTPW_3885
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with IGTPW_3885 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in IGTPW_3885, 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_3885/index.html
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_3885:
### IGT changes ###
#### Possible regressions ####
* igt@i915_module_load@reload-with-fault-injection:
- fi-skl-6600u: [PASS][1] -> [DMESG-WARN][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-skl-6600u/igt@i915_module_load@reload-with-fault-injection.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-skl-6600u/igt@i915_module_load@reload-with-fault-injection.html
* igt@i915_pm_rpm@module-reload:
- fi-skl-6600u: [PASS][3] -> [FAIL][4]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-skl-6600u/igt@i915_pm_rpm@module-reload.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-skl-6600u/igt@i915_pm_rpm@module-reload.html
* igt@i915_selftest@live_hangcheck:
- fi-bwr-2160: [PASS][5] -> [FAIL][6] +1 similar issue
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-bwr-2160/igt@i915_selftest@live_hangcheck.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-bwr-2160/igt@i915_selftest@live_hangcheck.html
Known issues
------------
Here are the changes found in IGTPW_3885 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_close_race@basic-threads:
- fi-byt-j1900: [PASS][7] -> [TIMEOUT][8] ([i915#816])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-byt-j1900/igt@gem_close_race@basic-threads.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-byt-j1900/igt@gem_close_race@basic-threads.html
- fi-byt-n2820: [PASS][9] -> [TIMEOUT][10] ([i915#816])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-byt-n2820/igt@gem_close_race@basic-threads.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-byt-n2820/igt@gem_close_race@basic-threads.html
* igt@i915_pm_rpm@module-reload:
- fi-skl-6770hq: [PASS][11] -> [FAIL][12] ([i915#178])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-skl-6770hq/igt@i915_pm_rpm@module-reload.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-skl-6770hq/igt@i915_pm_rpm@module-reload.html
* igt@kms_chamelium@hdmi-hpd-fast:
- fi-kbl-7500u: [PASS][13] -> [FAIL][14] ([fdo#111096] / [i915#323])
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
#### Possible fixes ####
* igt@i915_module_load@reload-with-fault-injection:
- fi-bxt-dsi: [INCOMPLETE][15] ([fdo#103927]) -> [PASS][16]
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-bxt-dsi/igt@i915_module_load@reload-with-fault-injection.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-bxt-dsi/igt@i915_module_load@reload-with-fault-injection.html
* igt@i915_selftest@live_blt:
- fi-hsw-4770: [DMESG-FAIL][17] ([i915#553] / [i915#725]) -> [PASS][18]
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-hsw-4770/igt@i915_selftest@live_blt.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-hsw-4770/igt@i915_selftest@live_blt.html
* igt@i915_selftest@live_gem_contexts:
- fi-cfl-8700k: [INCOMPLETE][19] ([i915#424]) -> [PASS][20]
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-cfl-8700k/igt@i915_selftest@live_gem_contexts.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-cfl-8700k/igt@i915_selftest@live_gem_contexts.html
* igt@i915_selftest@live_hugepages:
- fi-bwr-2160: [FAIL][21] -> [PASS][22]
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-bwr-2160/igt@i915_selftest@live_hugepages.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-bwr-2160/igt@i915_selftest@live_hugepages.html
#### Warnings ####
* igt@i915_module_load@reload-with-fault-injection:
- fi-kbl-x1275: [INCOMPLETE][23] ([i915#879]) -> [DMESG-WARN][24] ([i915#62] / [i915#92] / [i915#95])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-kbl-x1275/igt@i915_module_load@reload-with-fault-injection.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-kbl-x1275/igt@i915_module_load@reload-with-fault-injection.html
* igt@i915_selftest@live_blt:
- fi-hsw-4770r: [DMESG-FAIL][25] ([i915#725]) -> [DMESG-FAIL][26] ([i915#553] / [i915#725])
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-hsw-4770r/igt@i915_selftest@live_blt.html
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-hsw-4770r/igt@i915_selftest@live_blt.html
* igt@kms_cursor_legacy@basic-flip-after-cursor-legacy:
- fi-kbl-x1275: [DMESG-WARN][27] ([i915#62] / [i915#92] / [i915#95]) -> [DMESG-WARN][28] ([i915#62] / [i915#92]) +8 similar issues
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-kbl-x1275/igt@kms_cursor_legacy@basic-flip-after-cursor-legacy.html
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-kbl-x1275/igt@kms_cursor_legacy@basic-flip-after-cursor-legacy.html
* igt@kms_flip@basic-flip-vs-modeset:
- fi-kbl-x1275: [DMESG-WARN][29] ([i915#62] / [i915#92]) -> [DMESG-WARN][30] ([i915#62] / [i915#92] / [i915#95]) +7 similar issues
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7636/fi-kbl-x1275/igt@kms_flip@basic-flip-vs-modeset.html
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/fi-kbl-x1275/igt@kms_flip@basic-flip-vs-modeset.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
[fdo#111096]: https://bugs.freedesktop.org/show_bug.cgi?id=111096
[fdo#111736]: https://bugs.freedesktop.org/show_bug.cgi?id=111736
[i915#178]: https://gitlab.freedesktop.org/drm/intel/issues/178
[i915#323]: https://gitlab.freedesktop.org/drm/intel/issues/323
[i915#424]: https://gitlab.freedesktop.org/drm/intel/issues/424
[i915#435]: https://gitlab.freedesktop.org/drm/intel/issues/435
[i915#553]: https://gitlab.freedesktop.org/drm/intel/issues/553
[i915#62]: https://gitlab.freedesktop.org/drm/intel/issues/62
[i915#725]: https://gitlab.freedesktop.org/drm/intel/issues/725
[i915#816]: https://gitlab.freedesktop.org/drm/intel/issues/816
[i915#879]: https://gitlab.freedesktop.org/drm/intel/issues/879
[i915#92]: https://gitlab.freedesktop.org/drm/intel/issues/92
[i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95
Participating hosts (47 -> 46)
------------------------------
Additional (5): fi-gdg-551 fi-bsw-kefka fi-skl-lmem fi-tgl-y fi-snb-2600
Missing (6): fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-byt-clapper fi-bdw-samus
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_5352 -> IGTPW_3885
CI-20190529: 20190529
CI_DRM_7636: 57c982a802fb336cf9c10d811dfd88dd49103f48 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_3885: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_3885/index.html
IGT_5352: 0586d205f651674e575351c2d5a7d0760716c9f1 @ 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_3885/index.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2019-12-26 11:54 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-26 10:50 [igt-dev] [PATCH i-g-t 0/3] Test tiled display with aid of chamelium Kunal Joshi
2019-12-26 10:50 ` [igt-dev] [PATCH i-g-t 1/3] Make basic chamelium function accessible to other tests Kunal Joshi
2019-12-26 10:50 ` [igt-dev] [PATCH i-g-t 2/3] Added structures and functions to generate tiled edids Kunal Joshi
2019-12-26 10:50 ` [igt-dev] [PATCH i-g-t 3/3] Added a subtest where chamelium acts as a tiled panel Kunal Joshi
2019-12-26 11:28 ` [igt-dev] ✗ GitLab.Pipeline: warning for Test tiled display with aid of chamelium Patchwork
2019-12-26 11:54 ` [igt-dev] ✗ Fi.CI.BAT: failure " Patchwork
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.