[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