Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t v4 00/46] Unigraf integration
@ 2025-11-10 13:39 Louis Chauvet
  2025-11-10 13:39 ` [PATCH i-g-t v4 01/46] lib/igt_kms: Add a detect timeout value Louis Chauvet
                   ` (51 more replies)
  0 siblings, 52 replies; 90+ messages in thread
From: Louis Chauvet @ 2025-11-10 13:39 UTC (permalink / raw)
  To: igt-dev; +Cc: thomas.petazzoni, markyacoub, khaled.almahallawy, Louis Chauvet

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@bootlin.com>
---
Changes in v4:
- Rebased on master
- Fixed multiple unigraf callbacks
- Created link training tests
- Link to v3: https://lore.kernel.org/r/20250823-unigraf-integration-v3-0-cdc36d5fab4c@bootlin.com

Changes in v3:
- Rebased on master
- Added support for MST
- Repair autodetection and CRC usage
- Link to v2: https://lore.kernel.org/r/20250717-unigraf-integration-v2-0-77dc329e584c@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 (46):
      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/igt_kms: Add helper to get a pipe from a connector
      lib/igt_kms: Expose dump_connector_attrs
      lib/igt_kms: Expose reset_connectors_at_exit
      lib/igt_kms: Expose connector_attr_set and igt_connector_attr_set
      lib/igt_debugfs: Move debugfs helpers to the proper location
      lib/igt_debugfs: Add const when make sense
      lib/igt_amd: Add const when make sense
      lib/igt_kms: Add const when make sense
      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
      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 reset function
      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
      tests/unigraf: Add basic unigraf tests
      lib/unigraf: Add unigraf CRC capture
      lib/unigraf: Add configuration for CRC usage
      lib/unigraf: add unigraf_get_connector_by_stream
      lib/unigraf: Add helper to check timings received by unigraf
      lib/igt_pipe_crc: Add ungiraf crc calculation
      lib/unigraf: Add lane count configuration
      docs/unigraf: Add unigraf documentation
      lib/unigraf: Add helpers to set maximum link rate
      lib/i915/dp: Move DP-related function for i915 to proper folder
      lib/i915/dp: Rename functions to avoid confusion
      lib/i915/dp: Add helper to get maximum supported rate
      lib/igt_dp: Create generic helpers for DP information
      lib/igt_kms: Add asserts to avoid null pointer dereference
      lib/igt_kms: Add helper to get a pipe from an output
      lib/unigraf: Add helpers to get the current LT status
      tests/unigraf/unigraf_lt: Add test for link training

 docs/unigraf.txt                         |  81 +++
 lib/i915/i915_dp.c                       | 354 +++++++++++++
 lib/i915/i915_dp.h                       |  23 +
 lib/igt_amd.c                            |   2 +-
 lib/igt_amd.h                            |   2 +-
 lib/igt_core.c                           |   4 +
 lib/igt_debugfs.c                        |  96 +++-
 lib/igt_debugfs.h                        |  15 +-
 lib/igt_dp.c                             | 101 ++++
 lib/igt_dp.h                             |  89 ++++
 lib/igt_kms.c                            | 825 ++++++++++++++++---------------
 lib/igt_kms.h                            |  58 ++-
 lib/igt_pipe_crc.c                       |  28 ++
 lib/meson.build                          |  12 +
 lib/monitor_edids/dp_edids.h             |   3 +
 lib/monitor_edids/hdmi_edids.h           |   3 +
 lib/monitor_edids/monitor_edids_helper.c | 126 +++++
 lib/monitor_edids/monitor_edids_helper.h |  10 +-
 lib/unigraf/TSI.h                        | 226 +++++++++
 lib/unigraf/TSI_types.h                  | 117 +++++
 lib/unigraf/unigraf.c                    | 758 ++++++++++++++++++++++++++++
 lib/unigraf/unigraf.h                    | 257 ++++++++++
 meson.build                              |  14 +
 tests/intel/kms_dp_link_training.c       |  19 +-
 tests/intel/kms_dp_linktrain_fallback.c  |  57 +--
 tests/meson.build                        |   4 +
 tests/unigraf/meson.build                |  13 +
 tests/unigraf/unigraf_connectivity.c     | 123 +++++
 tests/unigraf/unigraf_lt.c               | 178 +++++++
 29 files changed, 3130 insertions(+), 468 deletions(-)
---
base-commit: bfab3ea5fab190f4ebf083db4dfe703f6d4f40c6
change-id: 20250425-unigraf-integration-11ed330755d5

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


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

end of thread, other threads:[~2026-01-26 12:00 UTC | newest]

Thread overview: 90+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-10 13:39 [PATCH i-g-t v4 00/46] Unigraf integration Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 01/46] lib/igt_kms: Add a detect timeout value Louis Chauvet
2026-01-20 21:09   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 02/46] lib/igt_kms: Add helper to wait for a specific status on a connector Louis Chauvet
2026-01-20 21:09   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 03/46] lib/igt_kms: Add function to list connected connectors Louis Chauvet
2026-01-20 21:10   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 04/46] lib/igt_kms: Add helper to obtain a connector by its name or MST path Louis Chauvet
2026-01-20 21:10   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 05/46] lib/igt_kms: Add helper to wait for new connectors Louis Chauvet
2026-01-20 21:10   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 06/46] lib/igt_kms: Add helper to get a pipe from a connector Louis Chauvet
2026-01-20 21:10   ` Luca Ceresoli
2026-01-22 15:50     ` Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 07/46] lib/igt_kms: Expose dump_connector_attrs Louis Chauvet
2026-01-20 21:10   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 08/46] lib/igt_kms: Expose reset_connectors_at_exit Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 09/46] lib/igt_kms: Expose connector_attr_set and igt_connector_attr_set Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 10/46] lib/igt_debugfs: Move debugfs helpers to the proper location Louis Chauvet
2026-01-20 21:10   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 11/46] lib/igt_debugfs: Add const when make sense Louis Chauvet
2026-01-20 21:11   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 12/46] lib/igt_amd: " Louis Chauvet
2026-01-20 21:11   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 13/46] lib/igt_kms: " Louis Chauvet
2026-01-20 21:11   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 14/46] lib/monitor_edids: Add helper functions for using monitor_edid objects Louis Chauvet
2026-01-20 21:11   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 15/46] lib/monitor_edids: Add helper to get an EDID by its name Louis Chauvet
2026-01-20 21:11   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 16/46] lib/monitor_edids: Add helper to print all available EDID names Louis Chauvet
2026-01-20 21:11   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 17/46] lib/unigraf: Add used defines for TSI_Types Louis Chauvet
2026-01-21 17:49   ` Luca Ceresoli
2026-01-22 16:40     ` Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 18/46] lib/unigraf: Add TSI.h Louis Chauvet
2026-01-21 17:49   ` Luca Ceresoli
2026-01-22 16:53     ` Louis Chauvet
2026-01-23 14:04       ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 19/46] lib/unigraf: Initial Unigraf support Louis Chauvet
2026-01-21 18:23   ` Luca Ceresoli
2026-01-21 18:30   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 20/46] lib/igt_kms: Automatically connect unigraf on display require Louis Chauvet
2026-01-22 20:26   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 21/46] lib/unigraf: Introduce device configuration Louis Chauvet
2026-01-23 17:38   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 22/46] lib/unigraf: Introduce role configuration Louis Chauvet
2026-01-26 11:28   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 23/46] lib/unigraf: Introduce input configuration Louis Chauvet
2026-01-23 17:38   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 24/46] lib/unigraf: Add reset function Louis Chauvet
2026-01-23 17:39   ` Luca Ceresoli
2026-01-26 10:45     ` Louis Chauvet
2026-01-26 11:28       ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 25/46] lib/unigraf: Add unigraf assert and deassert helpers Louis Chauvet
2026-01-23 17:40   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 26/46] lib/unigraf: Add plug/unplug helpers Louis Chauvet
2026-01-23 17:40   ` Luca Ceresoli
2026-01-26 11:28     ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 27/46] lib/unigraf: Allows sst/mst configuration Louis Chauvet
2026-01-23 17:40   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 28/46] lib/unigraf: Add helpers to read and write edid Louis Chauvet
2026-01-23 17:40   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 29/46] lib/unigraf: Add connector configuration Louis Chauvet
2026-01-26 11:40   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 30/46] tests/unigraf: Add basic unigraf tests Louis Chauvet
2026-01-26 12:00   ` Luca Ceresoli
2025-11-10 13:39 ` [PATCH i-g-t v4 31/46] lib/unigraf: Add unigraf CRC capture Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 32/46] lib/unigraf: Add configuration for CRC usage Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 33/46] lib/unigraf: add unigraf_get_connector_by_stream Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 34/46] lib/unigraf: Add helper to check timings received by unigraf Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 35/46] lib/igt_pipe_crc: Add ungiraf crc calculation Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 36/46] lib/unigraf: Add lane count configuration Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 37/46] docs/unigraf: Add unigraf documentation Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 38/46] lib/unigraf: Add helpers to set maximum link rate Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 39/46] lib/i915/dp: Move DP-related function for i915 to proper folder Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 40/46] lib/i915/dp: Rename functions to avoid confusion Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 41/46] lib/i915/dp: Add helper to get maximum supported rate Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 42/46] lib/igt_dp: Create generic helpers for DP information Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 43/46] lib/igt_kms: Add asserts to avoid null pointer dereference Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 44/46] lib/igt_kms: Add helper to get a pipe from an output Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 45/46] lib/unigraf: Add helpers to get the current LT status Louis Chauvet
2025-11-10 13:39 ` [PATCH i-g-t v4 46/46] tests/unigraf/unigraf_lt: Add test for link training Louis Chauvet
2025-11-10 22:34 ` ✓ Xe.CI.BAT: success for Unigraf integration (rev3) Patchwork
2025-11-10 22:44 ` ✓ i915.CI.BAT: " Patchwork
2025-11-11  5:34 ` ✓ i915.CI.Full: " Patchwork
2025-11-11  5:49 ` ✗ Xe.CI.Full: failure " Patchwork
2025-12-18 14:50 ` [PATCH i-g-t v4 00/46] Unigraf integration Louis Chauvet
2025-12-18 15:59   ` Mark Yacoub
2026-01-20 21:09 ` Luca Ceresoli

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