From: Louis Chauvet <louis.chauvet@bootlin.com>
To: igt-dev@lists.freedesktop.org
Cc: thomas.petazzoni@bootlin.com, luca.ceresoli@bootlin.com,
kory.maincent@bootlin.com, markyacoub@google.com,
khaled.almahallawy@intel.com,
Louis Chauvet <louis.chauvet@bootlin.com>
Subject: [PATCH i-g-t v10 36/49] lib/igt_pipe_crc: Add unigraf crc calculation
Date: Tue, 31 Mar 2026 19:11:53 +0200 [thread overview]
Message-ID: <20260331-unigraf-integration-v10-36-12266c34cc1d@bootlin.com> (raw)
In-Reply-To: <20260331-unigraf-integration-v10-0-12266c34cc1d@bootlin.com>
Unigraf can read crc from the physical output, use this CRC instead of
internal CRC when configured. This allows to also test the hardware signal
generation.
This small addition allows to use the unigraf device for most of the
kms_* tests.
Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
---
lib/igt_pipe_crc.c | 35 +++++++++++++++++++++++++++++++++++
lib/vendor/unigraf/unigraf.c | 22 ++++++++++++++++++++++
2 files changed, 57 insertions(+)
diff --git a/lib/igt_pipe_crc.c b/lib/igt_pipe_crc.c
index 9a79edd51531..ad76e5ca37f7 100644
--- a/lib/igt_pipe_crc.c
+++ b/lib/igt_pipe_crc.c
@@ -3,9 +3,12 @@
* Copyright © 2013 Intel Corporation
*/
+#include "igt_core.h"
+#include "unigraf/unigraf.h"
#include <inttypes.h>
#include <sys/stat.h>
#include <sys/mount.h>
+#include <xf86drmMode.h>
#ifdef __linux__
#include <sys/sysmacros.h>
#endif
@@ -359,6 +362,38 @@ static void read_one_crc(igt_pipe_crc_t *pipe_crc, igt_crc_t *out)
} while (ret == -EINTR);
fcntl(pipe_crc->crc_fd, F_SETFL, pipe_crc->flags);
+
+#if HAVE_UNIGRAF
+ if (unigraf_open_device(pipe_crc->fd) && unigraf_use_crc()) {
+ int crtc_index;
+ int stream_id;
+ drmModeConnectorPtr connector = unigraf_get_connector(pipe_crc->fd);
+
+ if (!connector)
+ return;
+
+ crtc_index = igt_get_crtc_index_from_connector_id(pipe_crc->fd,
+ connector->connector_id);
+ drmModeFreeConnector(connector);
+
+ if (crtc_index && crtc_index == pipe_crc->crtc_index) {
+ unigraf_read_crc(0, out);
+ return;
+ }
+
+ for (stream_id = 0; stream_id < unigraf_get_mst_stream_count(); stream_id++) {
+ int connector_id = unigraf_get_connector_id_by_stream(pipe_crc->fd,
+ stream_id);
+ crtc_index = igt_get_crtc_index_from_connector_id(pipe_crc->fd,
+ connector_id);
+
+ if (crtc_index && crtc_index == pipe_crc->crtc_index) {
+ unigraf_read_crc(stream_id, out);
+ return;
+ }
+ }
+ }
+#endif
}
/**
diff --git a/lib/vendor/unigraf/unigraf.c b/lib/vendor/unigraf/unigraf.c
index 29db564b2ce4..ae8036526156 100644
--- a/lib/vendor/unigraf/unigraf.c
+++ b/lib/vendor/unigraf/unigraf.c
@@ -68,6 +68,13 @@ static bool unigraf_crc;
*/
#define UNIGRAF_CONFIG_USE_CRC_NAME "UseCRC"
+/**
+ * UNIGRAF_CONFIG_MST_STREAM_COUNT - Key for the stream count configuration
+ *
+ * Set to 0 to use SST, 1..4 for MST
+ */
+#define UNIGRAF_CONFIG_MST_STREAM_COUNT "MSTStreams"
+
/**
* UNIGRAF_DEFAULT_ROLE_NAME - Default role name to search on the unigraf device
*/
@@ -367,6 +374,7 @@ bool unigraf_open_device(int drm_fd)
int chosen_device = 0;
int chosen_role;
int chosen_input;
+ int unigraf_stream_count;
assert(igt_can_fail());
@@ -423,6 +431,15 @@ bool unigraf_open_device(int drm_fd)
unigraf_debug("CRC usage not configured, using unigraf CRC.\n");
unigraf_crc = true;
}
+
+ cfg_error = NULL;
+ unigraf_stream_count = g_key_file_get_boolean(igt_key_file, UNIGRAF_CONFIG_GROUP,
+ UNIGRAF_CONFIG_MST_STREAM_COUNT,
+ &cfg_error);
+ if (cfg_error) {
+ unigraf_debug("MST usage not configured, using SST.\n");
+ unigraf_stream_count = 0;
+ }
}
unigraf_assert(TSIX_DEV_RescanDevices(0, TSI_DEVCAP_VIDEO_CAPTURE, 0));
@@ -501,6 +518,11 @@ bool unigraf_open_device(int drm_fd)
unigraf_reset();
+ if (!unigraf_stream_count)
+ unigraf_set_sst();
+ else
+ unigraf_set_mst_stream_count(unigraf_stream_count);
+
return unigraf_connector_name != NULL;
}
--
2.52.0
next prev parent reply other threads:[~2026-03-31 17:14 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-31 17:11 [PATCH i-g-t v10 00/49] Unigraf integration Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 01/49] lib/igt_kms: Add a detect timeout value Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 02/49] lib/igt_kms: Add helper to wait for a specific status on a connector Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 03/49] lib/igt_kms: Add function to list connected connectors Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 04/49] lib/igt_kms: Add helper to obtain a connector by its name or MST path Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 05/49] lib/igt_kms: Add helper to wait for new connectors Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 06/49] lib/tests: Add tests for array manipulations Louis Chauvet
2026-04-20 16:08 ` Kory Maincent
2026-03-31 17:11 ` [PATCH i-g-t v10 07/49] lib/igt_kms: Add helper to get a pipe from a connector Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 08/49] lib/igt_kms: Expose dump_connector_attrs Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 09/49] lib/igt_kms: Expose reset_connectors_at_exit Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 10/49] lib/igt_kms: Expose connector_attr_set and igt_connector_attr_set Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 11/49] lib/igt_debugfs: Move debugfs helpers to the proper location Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 12/49] lib/igt_debugfs: Add const when make sense Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 13/49] lib/igt_amd: " Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 14/49] lib/igt_kms: " Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 15/49] lib/monitor_edids: Add helper functions for using monitor_edid objects Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 16/49] lib/monitor_edids: Add helper to get an EDID by its name Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 17/49] lib/monitor_edids: Add helper to print all available EDID names Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 18/49] lib/unigraf: Add used defines for TSI_Types Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 19/49] lib/unigraf: Add TSI.h Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 20/49] lib/unigraf: Initial Unigraf support Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 21/49] lib/igt_kms: Automatically connect unigraf on display require Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 22/49] lib/unigraf: Introduce device configuration Louis Chauvet
2026-04-20 16:10 ` Kory Maincent
2026-03-31 17:11 ` [PATCH i-g-t v10 23/49] lib/unigraf: Introduce role configuration Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 24/49] lib/unigraf: Introduce input configuration Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 25/49] lib/unigraf: Add reset function Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 26/49] lib/unigraf: Add unigraf assert and deassert helpers Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 27/49] lib/unigraf: Add plug/unplug helpers Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 28/49] lib/unigraf: Allows sst/mst configuration Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 29/49] lib/unigraf: Add helpers to read and write edid Louis Chauvet
2026-04-20 16:29 ` Kory Maincent
2026-03-31 17:11 ` [PATCH i-g-t v10 30/49] lib/unigraf: Add connector and EDID configuration Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 31/49] tests/unigraf: Add basic unigraf tests Louis Chauvet
2026-04-20 16:49 ` Kory Maincent
2026-04-23 5:45 ` Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 32/49] lib/unigraf: Add unigraf CRC capture Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 33/49] lib/unigraf: Add configuration for CRC usage Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 34/49] lib/unigraf: add unigraf_get_connector_by_stream Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 35/49] lib/unigraf: Add helper to check timings received by unigraf Louis Chauvet
2026-03-31 17:11 ` Louis Chauvet [this message]
2026-03-31 17:11 ` [PATCH i-g-t v10 37/49] lib/i915/dp: Move DP-related function for i915 to proper folder Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 38/49] lib/i915/dp: Rename functions to avoid confusion Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 39/49] lib/i915/dp: Add helper to get maximum supported rate Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 40/49] lib/i915/dp: Properly check sscanf results Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 41/49] lib/i915/dp: Use igt_output_name instead of private field Louis Chauvet
2026-03-31 17:11 ` [PATCH i-g-t v10 42/49] lib/igt_dp: Create generic helpers for DP information Louis Chauvet
2026-04-24 15:49 ` Kory Maincent
2026-03-31 17:12 ` [PATCH i-g-t v10 43/49] lib/igt_kms: Add asserts to avoid null pointer dereference Louis Chauvet
2026-03-31 17:12 ` [PATCH i-g-t v10 44/49] lib/igt_kms: Add helper to get a CRTC from an output Louis Chauvet
2026-04-20 16:07 ` Kory Maincent
2026-03-31 17:12 ` [PATCH i-g-t v10 45/49] lib/unigraf: Add lane count configuration Louis Chauvet
2026-03-31 17:12 ` [PATCH i-g-t v10 46/49] docs/unigraf: Add unigraf documentation Louis Chauvet
2026-04-20 16:06 ` Kory Maincent
2026-03-31 17:12 ` [PATCH i-g-t v10 47/49] lib/unigraf: Add helpers to set maximum link rate Louis Chauvet
2026-03-31 17:12 ` [PATCH i-g-t v10 48/49] lib/unigraf: Add helpers to get the current LT status Louis Chauvet
2026-03-31 17:12 ` [PATCH i-g-t v10 49/49] tests/unigraf/unigraf_lt: Add test for link training Louis Chauvet
2026-03-31 17:49 ` ✓ Xe.CI.BAT: success for Unigraf integration (rev9) Patchwork
2026-03-31 18:17 ` ✗ i915.CI.BAT: failure " Patchwork
2026-03-31 23:45 ` ✓ Xe.CI.FULL: success " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260331-unigraf-integration-v10-36-12266c34cc1d@bootlin.com \
--to=louis.chauvet@bootlin.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=khaled.almahallawy@intel.com \
--cc=kory.maincent@bootlin.com \
--cc=luca.ceresoli@bootlin.com \
--cc=markyacoub@google.com \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox