Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Louis Chauvet <louis.chauvet@bootlin.com>
To: igt-dev@lists.freedesktop.org, ihf@google.com,
	markyacoub@google.com,  thomas.petazzoni@bootlin.com,
	jeremie.dautheribes@bootlin.com
Cc: Louis Chauvet <louis.chauvet@bootlin.com>
Subject: [PATCH i-g-t v2 21/39] lib/chamelium/v3: Implement methods for managing Chamelium EDID
Date: Tue, 09 Jul 2024 17:34:37 +0200	[thread overview]
Message-ID: <20240709-dev-remove-static-ports-v2-21-5adfc6985778@bootlin.com> (raw)
In-Reply-To: <20240709-dev-remove-static-ports-v2-0-5adfc6985778@bootlin.com>

Introduce functionality to apply different EDIDs to each Chamelium port.
This includes uploading EDIDs and assigning identifiers for applying them
to specific connectors. This feature allows for greater flexibility in
configuring and testing display setups.

Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
---
 lib/chamelium/v3/igt_chamelium.c | 47 +++++++++++++++++++++++++++++++++++++++-
 lib/chamelium/v3/igt_chamelium.h |  8 +++++++
 2 files changed, 54 insertions(+), 1 deletion(-)

diff --git a/lib/chamelium/v3/igt_chamelium.c b/lib/chamelium/v3/igt_chamelium.c
index 334098d4dea6..767dfcfcb182 100644
--- a/lib/chamelium/v3/igt_chamelium.c
+++ b/lib/chamelium/v3/igt_chamelium.c
@@ -364,7 +364,7 @@ void chamelium_v3_plug_with_children(struct igt_chamelium_v3 *chamelium,
 	xmlrpc_value *children_array = xmlrpc_array_new(&chamelium->env);
 
 	for (int i = 0; i < children_port_count; i++) {
-		tmp = xmlrpc_int_new(&chamelium->env, (int) children[i]);
+		tmp = xmlrpc_int_new(&chamelium->env, (int)children[i]);
 		xmlrpc_array_append_item(&chamelium->env, children_array, tmp);
 		xmlrpc_DECREF(tmp);
 	}
@@ -374,3 +374,48 @@ void chamelium_v3_plug_with_children(struct igt_chamelium_v3 *chamelium,
 				      children_array));
 	xmlrpc_DECREF(children_array);
 }
+
+/**
+ * chamelium_v3_create_edid - Upload an EDID to the chamelium
+ *
+ * @chamelium: Chamelium to get the ports from
+ * @edid: EDID to upload
+ *
+ * Upload an EDID to the chamelium. The returned value must then be used with
+ * chamelium_v3_apply_edid to associate this EDID with a port.
+ *
+ * If you prefer to not upload, the chamelium already has a default EDID that you can apply by using
+ * the value CHAMELIUM_V3_EDID_DEFAULT.
+ */
+chamelium_edid_id chamelium_v3_create_edid(struct igt_chamelium_v3 *chamelium,
+					   const struct edid *edid)
+{
+	xmlrpc_value *res;
+	chamelium_edid_id edid_id;
+
+	igt_debug("RPC CreateEdid(...)\n");
+	res = __chamelium_rpc(chamelium, "CreateEdid", "(6)",
+			      edid, edid_get_size(edid));
+	xmlrpc_read_int(&chamelium->env, res, &edid_id);
+	xmlrpc_DECREF(res);
+
+	return edid_id;
+}
+
+/**
+ * chamelium_v3_apply_edid - Set an EDID to a specific port
+ *
+ * @chamelium: Chamelium to get the ports from
+ * @port_id: Port to apply the EDID
+ * @edid_id: EDID to apply
+ *
+ * Apply a specific EDID to a port. The @edid_id is the value returned by a call to
+ * chamelium_v3_create_edid. For simplicity you can also use CHAMELIUM_V3_EDID_DEFAULT to use the
+ * default EDID.
+ */
+void chamelium_v3_apply_edid(struct igt_chamelium_v3 *chamelium,
+			     chamelium_v3_port_id port_id, chamelium_edid_id edid_id)
+{
+	igt_debug("RPC ApplyEdid(%d, %d)\n", port_id, edid_id);
+	xmlrpc_DECREF(__chamelium_rpc(chamelium, "ApplyEdid", "(ii)", port_id, edid_id));
+}
diff --git a/lib/chamelium/v3/igt_chamelium.h b/lib/chamelium/v3/igt_chamelium.h
index 9bad733b717b..cab33e43aadd 100644
--- a/lib/chamelium/v3/igt_chamelium.h
+++ b/lib/chamelium/v3/igt_chamelium.h
@@ -5,10 +5,14 @@
 
 #include <stdint.h>
 
+#include "igt_edid.h"
 #include "igt_list.h"
 
 struct igt_chamelium_v3;
 typedef uint32_t chamelium_v3_port_id;
+typedef int chamelium_edid_id;
+
+#define CHAMELIUM_V3_EDID_DEFAULT 0
 
 /** struct chamelium_v3_port_mapping - Represent a mapping between a DRM connector and a port on
  * the chamelium
@@ -53,5 +57,9 @@ void chamelium_v3_plug(struct igt_chamelium_v3 *chamelium, chamelium_v3_port_id
 void chamelium_v3_plug_with_children(struct igt_chamelium_v3 *chamelium,
 				     chamelium_v3_port_id port_id, chamelium_v3_port_id *children,
 				     size_t children_port_count);
+chamelium_edid_id chamelium_v3_create_edid(struct igt_chamelium_v3 *chamelium,
+					   const struct edid *edid);
+void chamelium_v3_apply_edid(struct igt_chamelium_v3 *chamelium, chamelium_v3_port_id port_id,
+			     chamelium_edid_id edid_id);
 
 #endif //V3_IGT_CHAMELIUM_H

-- 
2.44.2


  parent reply	other threads:[~2024-07-09 15:35 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-09 15:34 [PATCH i-g-t v2 00/39] tests/chamelium: Integrate the chamelium v3 Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 01/39] lib/igt_kms: Add a detect timeout value Louis Chauvet
2024-08-27  7:51   ` Kamil Konieczny
2024-08-28 14:31     ` Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 02/39] lib/igt_kms: Add helper to wait for a specific status on a connector Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 03/39] lib/igt_kms: Add function to list connected connectors Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 04/39] lib/igt_kms: Add helper to obtain a connector by its name or MST path Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 05/39] lib/igt_kms: Add function to get valid pipe for specific output Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 06/39] lib/monitor_edids: Add helper functions for using monitor_edid objects Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 07/39] lib/monitor_edids: Add helper to get an EDID by its name Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 08/39] lib/monitor_edids: Add helper to print all available EDID names Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 09/39] lib/monitor_edids: Fix missing names in some monitor EDID Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 10/39] lib/monitor_edids: Add new EDID for HDMI 4k Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 11/39] tests/chamelium: Extract Chamelium v2 tests into a separate directory Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 12/39] lib/chamelium/v2: Extract chamelium v2 wrapper into its own directory Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 13/39] lib/chamelium/v2: Modify build options to separate Chamelium v2 and v3 Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 14/39] lib/chamelium/v3: Introduce the foundation for the Chamelium v3 wrapper Louis Chauvet
2024-08-26  9:22   ` Vignesh Raman
2024-08-28 17:26     ` Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 15/39] lib/chamelium/v3: Introduce initialization and cleanup of Chamelium-related structures Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 16/39] lib/chamelium/v3: Add method to discover Chamelium ports Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 17/39] lib/chamelium/v3: Implement method to retrieve Chamelium port names Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 18/39] tests/chamelium/v3: Implement a basic Chamelium v3 accessibility test Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 19/39] lib/chamelium/v3: Implement Chamelium reinitialization via Reset RPC call Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 20/39] lib/chamelium/v3: Implement methods for plugging Chamelium ports Louis Chauvet
2024-07-09 15:34 ` Louis Chauvet [this message]
2024-07-09 15:34 ` [PATCH i-g-t v2 22/39] lib/chamelium/v3: Implement Chamelium configuration parsing Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 23/39] lib/chamelium/v3: Log port mapping for debugging purposes Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 24/39] lib/chamelium/v3: Introduce new configuration format for MST support Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 25/39] lib/chamelium/v3: Provide access to port_mapping via method call Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 26/39] lib/chamelium/v3: Implement helper function to get port mapping from Chameleon port id Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 27/39] lib/chamelium/v3: Implement helper function to retrieve connector from port mapping Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 28/39] lib/chamelium/v3: Plug specific ports for all tests Louis Chauvet
2024-08-26  9:26   ` Vignesh Raman
2024-08-28 17:26     ` Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 29/39] lib/chamelium/v3: Implement Chamelium port autodetection algorithm Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 30/39] lib/chamelium/v3: Add save option to avoid doing autodetection every time Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 31/39] tests/chamelium/v3: Implement basic EDID handling test Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 32/39] tests/chamelium/v3: Implement 4K EDID stress test Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 33/39] tests/chamelium/v3: Implement non-4K " Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 34/39] lib/chamelium/v3: Implement method to discover video signal status Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 35/39] tests/chamelium/v3: Implement test for DRM device resolution Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 36/39] lib/chamelium/v3: Implement hot plug toggle scheduling method Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 37/39] tests/chamelium/v3: Add test for display change detection during sleep Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 38/39] tests/chamelium/v3: Add MST EDID reading test Louis Chauvet
2024-07-09 15:34 ` [PATCH i-g-t v2 39/39] docs: Add Chamelium v3 Louis Chauvet
2024-07-09 15:47 ` [PATCH i-g-t v2 00/39] tests/chamelium: Integrate the chamelium v3 Louis Chauvet
2024-07-09 16:16 ` ✗ Fi.CI.BUILD: failure for " Patchwork
2024-07-10  9:48   ` Louis Chauvet
2024-08-26  9:30     ` Vignesh Raman
2024-07-09 16:21 ` ✗ GitLab.Pipeline: warning " 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=20240709-dev-remove-static-ports-v2-21-5adfc6985778@bootlin.com \
    --to=louis.chauvet@bootlin.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=ihf@google.com \
    --cc=jeremie.dautheribes@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