[PATCH i-g-t v2 00/26] Unigraf integration

Louis Chauvet louis.chauvet at bootlin.com
Thu Jul 17 18:46:20 UTC 2025


Hi everyone,

I am excited to share I currently have access to a Unigraf device,
which I believe could significantly enhance the capabilities within IGT.
This device has the potential to enable testing of low-level hardware
features that are currently not covered. Specifically, Unigraf devices can
assist in testing link training, signal integrity, HDCP, DSC, and more.

It's important to note that the Unigraf SDK is not open-source, and the
communication protocol with the device is proprietary. As a result, I have
utilized the libTSI.so library, which can be downloaded from [1]. In this
RFC, I have not used the official TSI_types.h header because it was
incompatible with C, so I hardcoded some necessary values. The next
iteration will use the official TSI_types.h (they plan to fix it for the
next release).

This RFC is intentionally concise to gather initial feedback from the
community regarding the integration of a proprietary device into the test
suite. I plan to expand on this work by adding more features and pushing
the developments upstream.

I have also started to work on MST testing (hotplug, link training, 
bandwith limitation), but I have a big issue: connector detection is very 
strange when changing MST configurat (MST->SST, sink count...).

If I use the Unigraf GUI or my own C script outside IGT, everything seems 
fine: `watch -n0 modetest -c` update connector status almost immediatly 
after a HDP pulse, never hang and always have the correct result.

But if I do the same in IGT (same script in igt_main), igt have too 
much/not all connectors, and some of them are broken (no EDID property 
for example). I tried to run `watch -n0 modetest -c` in parallel, but 
modetest can:
- hang
- only update once igt test is finished.

Do you have any hint about something I missed in IGT to properly enumerate 
connectors? I tried close/open the DRM device, added a lot of delay 
everywhere, emulate plug/unplug... I used kms_wait_for_new_connectors (in 
this series) and for_each_connected_output to get list the connectors.

Looking forward to your thoughts and suggestions!

Thanks,
Louis Chauvet

Signed-off-by: Louis Chauvet <louis.chauvet at bootlin.com>
---
Changes in v2:
- Splitted in many commits
- Add CRC support
- Link to v1: https://lore.kernel.org/r/20250517-unigraf-integration-v1-1-044acd2133dd@bootlin.com

---
Louis Chauvet (26):
      lib/igt_kms: Add a detect timeout value
      lib/igt_kms: Add helper to wait for a specific status on a connector
      lib/igt_kms: Add function to list connected connectors
      lib/igt_kms: Add helper to obtain a connector by its name or MST path
      lib/igt_kms: Add helper to wait for new connectors
      lib/monitor_edids: Add helper functions for using monitor_edid objects
      lib/monitor_edids: Add helper to get an EDID by its name
      lib/monitor_edids: Add helper to print all available EDID names
      [DO NOT MERGE] lib/unigraf: Add used defines for TSI_Types
      lib/unigraf: Add TSI.h
      lib/unigraf: Initial Unigraf support
      lib/igt_kms: Automatically connect unigraf on display require
      lib/unigraf: Introduce device configuration
      lib/unigraf: Introduce role configuration
      lib/unigraf: Introduce input configuration
      lib/unigraf: Add unigraf assert and deassert helpers
      lib/unigraf: Add plug/unplug helpers
      lib/unigraf: Allows sst/mst configuration
      lib/unigraf: Add helpers to read and write edid
      lib/unigraf: Add connector configuration
      lib/unigraf: Add connector autodetection
      lib/unigraf: Add edid configuration
      tests/unigraf: Add basic unigraf tests
      lib/unigraf: Add unigraf CRC grab
      lib/unigraf: Add configuration for CRC usage
      lib/igt_pipe_crc: Add ungiraf crc calculation

 lib/igt_core.c                           |   4 +
 lib/igt_kms.c                            | 346 ++++++++++++++++++++
 lib/igt_kms.h                            |  23 ++
 lib/igt_pipe_crc.c                       |  22 ++
 lib/meson.build                          |  10 +
 lib/monitor_edids/dp_edids.h             |   3 +
 lib/monitor_edids/hdmi_edids.h           |   3 +
 lib/monitor_edids/monitor_edids_helper.c | 127 ++++++++
 lib/monitor_edids/monitor_edids_helper.h |  10 +-
 lib/unigraf/TSI.h                        | 227 +++++++++++++
 lib/unigraf/TSI_types.h                  |  44 +++
 lib/unigraf/unigraf.c                    | 530 +++++++++++++++++++++++++++++++
 lib/unigraf/unigraf.h                    | 168 ++++++++++
 meson.build                              |  14 +
 tests/meson.build                        |   4 +
 tests/unigraf/meson.build                |  12 +
 tests/unigraf/unigraf_connectivity.c     | 126 ++++++++
 17 files changed, 1672 insertions(+), 1 deletion(-)
---
base-commit: b4e1ccd32037008012d5c41ac6bb04da22082302
change-id: 20250425-unigraf-integration-11ed330755d5

Best regards,
-- 
Louis Chauvet <louis.chauvet at bootlin.com>



More information about the igt-dev mailing list