From: Louis Chauvet <louis.chauvet@bootlin.com>
To: Kamil Konieczny <kamil.konieczny@linux.intel.com>,
igt-dev@lists.freedesktop.org, thomas.petazzoni@bootlin.com,
luca.ceresoli@bootlin.com, kory.maincent@bootlin.com,
markyacoub@google.com, khaled.almahallawy@intel.com
Subject: Re: [PATCH i-g-t v9 15/49] lib/monitor_edids: Add helper functions for using monitor_edid objects
Date: Tue, 24 Mar 2026 15:09:24 +0100 [thread overview]
Message-ID: <7a95ae14-740d-4125-822a-6854fb85f69a@bootlin.com> (raw)
In-Reply-To: <20260324101517.jmxyfubljamsoyrs@kamilkon-DESK.igk.intel.com>
On 3/24/26 11:15, Kamil Konieczny wrote:
> Hi Louis,
> On 2026-03-16 at 17:17:36 +0100, Louis Chauvet wrote:
>> Introduce the functions edid_from_monitor_edid() and
>> get_edids_for_connector_type(). The former converts a monitor_edid object
>> to a struct edid, which can then be utilized by igt_kms helpers. The
>> latter returns a list of monitor_edid objects for a specific connector
>> with certain characteristics
>>
>> Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
>> Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
>> ---
>> lib/monitor_edids/dp_edids.h | 3 ++
>> lib/monitor_edids/hdmi_edids.h | 3 ++
>> lib/monitor_edids/monitor_edids_helper.c | 80 ++++++++++++++++++++++++++++++++
>> lib/monitor_edids/monitor_edids_helper.h | 7 ++-
>> 4 files changed, 92 insertions(+), 1 deletion(-)
>>
>> diff --git a/lib/monitor_edids/dp_edids.h b/lib/monitor_edids/dp_edids.h
>> index 144907558be1..07793381257e 100644
>> --- a/lib/monitor_edids/dp_edids.h
>> +++ b/lib/monitor_edids/dp_edids.h
>> @@ -194,4 +194,7 @@ monitor_edid DP_EDIDS_NON_4K[] = {
>>
>> };
>>
>> +#define DP_EDIDS_4K_COUNT ARRAY_SIZE(DP_EDIDS_4K)
>> +#define DP_EDIDS_NON_4K_COUNT ARRAY_SIZE(DP_EDIDS_NON_4K)
>> +
>> #endif /* TESTS_CHAMELIUM_MONITOR_EDIDS_DP_EDIDS_H_ */
>> diff --git a/lib/monitor_edids/hdmi_edids.h b/lib/monitor_edids/hdmi_edids.h
>> index f6cfe82ff6e1..3984241775c3 100644
>> --- a/lib/monitor_edids/hdmi_edids.h
>> +++ b/lib/monitor_edids/hdmi_edids.h
>> @@ -604,4 +604,7 @@ monitor_edid HDMI_EDIDS_NON_4K[] = {
>> "1620582c2500baac4200009e0000006b" },
>> };
>>
>> +#define HDMI_EDIDS_4K_COUNT ARRAY_SIZE(HDMI_EDIDS_4K)
>> +#define HDMI_EDIDS_NON_4K_COUNT ARRAY_SIZE(HDMI_EDIDS_NON_4K)
>> +
>> #endif /* TESTS_CHAMELIUM_MONITOR_EDIDS_HDMI_EDIDS_H_ */
>> diff --git a/lib/monitor_edids/monitor_edids_helper.c b/lib/monitor_edids/monitor_edids_helper.c
>> index 1cbf1c22f0bb..6043e7a084b3 100644
>> --- a/lib/monitor_edids/monitor_edids_helper.c
>> +++ b/lib/monitor_edids/monitor_edids_helper.c
>> @@ -15,6 +15,10 @@
>> #include <assert.h>
>>
>> #include "igt_core.h"
>> +#include "igt_edid.h"
>> +#include "dp_edids.h"
>> +#include "drmtest.h"
>
> Why do you need drmtest.h header?
For ARRAY_SIZE, is there a better definition ARRAY_SIZE somewhere else?
>> +#include "hdmi_edids.h"
>>
>> static uint8_t convert_hex_char_to_byte(char c)
>> {
>> @@ -90,3 +94,79 @@ void free_chamelium_edid_from_monitor_edid(struct chamelium_edid *edid)
>> free(edid);
>> edid = NULL;
>> }
>> +
>> +/**
>> + * edid_from_monitor_edid:
>> + * @mon_edid: Monitor EDID to convert
>> + *
>> + * Get a struct edid from a monitor_edid. This returns a pointer to a newly allocated struct edid.
>> + * The caller is in charge to free this pointer when required.
>> + */
>> +struct edid *edid_from_monitor_edid(const monitor_edid *mon_edid)
>> +{
>> + uint8_t *raw_edid;
>> + size_t edid_size;
>> + int i;
>> +
>> + edid_size = strlen(mon_edid->edid) / 2; /* each ascii is a nibble. */
>> + raw_edid = malloc(edid_size);
>> + igt_assert(raw_edid);
>> +
>> + for (i = 0; i < edid_size; i++) {
>> + raw_edid[i] = convert_hex_char_to_byte(mon_edid->edid[i * 2]) << 4 |
>> + convert_hex_char_to_byte(mon_edid->edid[i * 2 + 1]);
>> + }
>> +
>> + if (edid_get_size((struct edid *)raw_edid) > edid_size) {
>> + uint8_t *new_edid;
>> +
>> + igt_debug("The edid size stored in the raw edid is longer than the edid stored in the table.");
>> + new_edid = realloc(raw_edid, edid_get_size((struct edid *)raw_edid));
>> + igt_assert(new_edid);
>> + raw_edid = new_edid;
>> + }
>> +
>> + return (struct edid *)raw_edid;
>> +}
>> +
>> +/**
>> + * get_edids_for_connector_type:
>> + * @type: The connector type to get the EDIDs from
>> + * @count: Used to store the number of EDIDs in the returned list
>> + * @four_k: Use true to fetch 4k EDIDs, false to fetch non-4k EDIDs
>> + *
>> + * Get the list of EDIDS for a specific connector type. This returns a pointer to a static list,
>> + * so no need to free the pointer.
>> + */
>> +struct monitor_edid *get_edids_for_connector_type(uint32_t type, size_t *count, bool four_k)
>> +{
>> + if (four_k) {
>> + switch (type) {
>> + case DRM_MODE_CONNECTOR_DisplayPort:
>> + *count = DP_EDIDS_4K_COUNT;
>> + return DP_EDIDS_4K;
>> + case DRM_MODE_CONNECTOR_HDMIA:
>> + *count = HDMI_EDIDS_4K_COUNT;
>> + return HDMI_EDIDS_4K;
>> + default:
>> + *count = 0;
>> + igt_debug("No 4k EDID for the connector %s\n",
>> + kmstest_connector_type_str(type));
>> + return NULL;
>> + }
>> + } else {
>> + switch (type) {
>> + case DRM_MODE_CONNECTOR_DisplayPort:
>> + *count = DP_EDIDS_NON_4K_COUNT;
>> + return DP_EDIDS_NON_4K;
>> + case DRM_MODE_CONNECTOR_HDMIA:
>> + *count = HDMI_EDIDS_NON_4K_COUNT;
>> + return HDMI_EDIDS_NON_4K;
>> + default:
>> + *count = 0;
>> + igt_debug("No EDID for the connector %s\n",
>> + kmstest_connector_type_str(type));
>> + return NULL;
>> + }
>> + }
>> +}
>> diff --git a/lib/monitor_edids/monitor_edids_helper.h b/lib/monitor_edids/monitor_edids_helper.h
>> index 05679f0897f3..e5069868683d 100644
>> --- a/lib/monitor_edids/monitor_edids_helper.h
>> +++ b/lib/monitor_edids/monitor_edids_helper.h
>> @@ -12,6 +12,8 @@
>> #define TESTS_CHAMELIUM_MONITOR_EDIDS_MONITOR_EDIDS_HELPER_H_
>>
>> #include <stdint.h>
>> +#include <stddef.h>
>> +#include <stdbool.h>
>
> Place them before stdint.h
>
> Regards,
> Kamil
>
>>
>> #include "igt_chamelium.h"
>>
>> @@ -30,4 +32,7 @@ get_chameleon_edid_from_monitor_edid(struct chamelium *chamelium,
>> const monitor_edid *edid);
>> void free_chamelium_edid_from_monitor_edid(struct chamelium_edid *edid);
>>
>> -#endif /* TESTS_CHAMELIUM_MONITOR_EDIDS_MONITOR_EDIDS_HELPER_H_ */
>> \ No newline at end of file
>> +struct edid *edid_from_monitor_edid(const monitor_edid *monitor_edid);
>> +struct monitor_edid *get_edids_for_connector_type(uint32_t type, size_t *count, bool four_k);
>> +
>> +#endif /* TESTS_CHAMELIUM_MONITOR_EDIDS_MONITOR_EDIDS_HELPER_H_ */
>>
>> --
>> 2.52.0
>>
next prev parent reply other threads:[~2026-03-24 14:08 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-16 16:17 [PATCH i-g-t v9 00/49] Unigraf integration Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 01/49] lib/igt_kms: Add a detect timeout value Louis Chauvet
2026-03-16 18:50 ` Kamil Konieczny
2026-03-16 16:17 ` [PATCH i-g-t v9 02/49] lib/igt_kms: Add helper to wait for a specific status on a connector Louis Chauvet
2026-03-24 10:22 ` Kamil Konieczny
2026-03-16 16:17 ` [PATCH i-g-t v9 03/49] lib/igt_kms: Add function to list connected connectors Louis Chauvet
2026-03-24 10:34 ` Kamil Konieczny
2026-03-24 13:56 ` Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 04/49] lib/igt_kms: Add helper to obtain a connector by its name or MST path Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 05/49] lib/igt_kms: Add helper to wait for new connectors Louis Chauvet
2026-03-17 14:56 ` Kory Maincent
2026-03-23 14:40 ` Louis Chauvet
2026-03-24 10:11 ` Kamil Konieczny
2026-03-16 16:17 ` [PATCH i-g-t v9 06/49] lib/tests: Add tests for array manipulations Louis Chauvet
2026-03-17 15:00 ` Kory Maincent
2026-03-16 16:17 ` [PATCH i-g-t v9 07/49] lib/igt_kms: Add helper to get a pipe from a connector Louis Chauvet
2026-03-24 7:58 ` Jani Nikula
2026-03-24 10:02 ` Kamil Konieczny
2026-03-16 16:17 ` [PATCH i-g-t v9 08/49] lib/igt_kms: Expose dump_connector_attrs Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 09/49] lib/igt_kms: Expose reset_connectors_at_exit Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 10/49] lib/igt_kms: Expose connector_attr_set and igt_connector_attr_set Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 11/49] lib/igt_debugfs: Move debugfs helpers to the proper location Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 12/49] lib/igt_debugfs: Add const when make sense Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 13/49] lib/igt_amd: " Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 14/49] lib/igt_kms: " Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 15/49] lib/monitor_edids: Add helper functions for using monitor_edid objects Louis Chauvet
2026-03-17 15:09 ` Kory Maincent
2026-03-24 10:15 ` Kamil Konieczny
2026-03-24 14:09 ` Louis Chauvet [this message]
2026-03-16 16:17 ` [PATCH i-g-t v9 16/49] lib/monitor_edids: Add helper to get an EDID by its name Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 17/49] lib/monitor_edids: Add helper to print all available EDID names Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 18/49] lib/unigraf: Add used defines for TSI_Types Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 19/49] lib/unigraf: Add TSI.h Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 20/49] lib/unigraf: Initial Unigraf support Louis Chauvet
2026-03-24 8:19 ` Naladala, Ramanaidu
2026-03-24 9:37 ` Louis Chauvet
2026-03-26 9:59 ` Louis Chauvet
2026-03-24 9:58 ` Kamil Konieczny
2026-03-16 16:17 ` [PATCH i-g-t v9 21/49] lib/igt_kms: Automatically connect unigraf on display require Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 22/49] lib/unigraf: Introduce device configuration Louis Chauvet
2026-03-17 15:16 ` Kory Maincent
2026-03-16 16:17 ` [PATCH i-g-t v9 23/49] lib/unigraf: Introduce role configuration Louis Chauvet
2026-03-17 15:19 ` Kory Maincent
2026-03-16 16:17 ` [PATCH i-g-t v9 24/49] lib/unigraf: Introduce input configuration Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 25/49] lib/unigraf: Add reset function Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 26/49] lib/unigraf: Add unigraf assert and deassert helpers Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 27/49] lib/unigraf: Add plug/unplug helpers Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 28/49] lib/unigraf: Allows sst/mst configuration Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 29/49] lib/unigraf: Add helpers to read and write edid Louis Chauvet
2026-03-17 15:32 ` Kory Maincent
2026-03-23 14:46 ` Louis Chauvet
2026-03-23 16:26 ` Kamil Konieczny
2026-03-23 17:34 ` Louis Chauvet
2026-03-24 9:35 ` Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 30/49] lib/unigraf: Add connector and EDID configuration Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 31/49] tests/unigraf: Add basic unigraf tests Louis Chauvet
2026-03-17 15:46 ` Kory Maincent
2026-03-23 14:49 ` Louis Chauvet
2026-03-24 19:25 ` Naladala, Ramanaidu
2026-03-16 16:17 ` [PATCH i-g-t v9 32/49] lib/unigraf: Add unigraf CRC capture Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 33/49] lib/unigraf: Add configuration for CRC usage Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 34/49] lib/unigraf: add unigraf_get_connector_by_stream Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 35/49] lib/unigraf: Add helper to check timings received by unigraf Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 36/49] lib/igt_pipe_crc: Add unigraf crc calculation Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 37/49] lib/i915/dp: Move DP-related function for i915 to proper folder Louis Chauvet
2026-03-16 16:17 ` [PATCH i-g-t v9 38/49] lib/i915/dp: Rename functions to avoid confusion Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 39/49] lib/i915/dp: Add helper to get maximum supported rate Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 40/49] lib/i915/dp: Properly check sscanf results Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 41/49] lib/i915/dp: Use igt_output_name instead of private field Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 42/49] lib/igt_dp: Create generic helpers for DP information Louis Chauvet
2026-03-17 15:55 ` Kory Maincent
2026-03-23 14:52 ` Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 43/49] lib/igt_kms: Add asserts to avoid null pointer dereference Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 44/49] lib/igt_kms: Add helper to get a CRTC from an output Louis Chauvet
2026-03-17 15:56 ` Kory Maincent
2026-03-16 16:18 ` [PATCH i-g-t v9 45/49] lib/unigraf: Add lane count configuration Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 46/49] docs/unigraf: Add unigraf documentation Louis Chauvet
2026-03-17 15:58 ` Kory Maincent
2026-03-24 8:07 ` Naladala, Ramanaidu
2026-03-16 16:18 ` [PATCH i-g-t v9 47/49] lib/unigraf: Add helpers to set maximum link rate Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 48/49] lib/unigraf: Add helpers to get the current LT status Louis Chauvet
2026-03-16 16:18 ` [PATCH i-g-t v9 49/49] tests/unigraf/unigraf_lt: Add test for link training Louis Chauvet
2026-03-17 12:02 ` ✗ Fi.CI.BUILD: failure for Unigraf integration (rev8) 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=7a95ae14-740d-4125-822a-6854fb85f69a@bootlin.com \
--to=louis.chauvet@bootlin.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=kamil.konieczny@linux.intel.com \
--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