From: "José Expósito" <jose.exposito89@gmail.com>
To: Louis Chauvet <louis.chauvet@bootlin.com>
Cc: Haneen Mohammed <hamohammed.sa@gmail.com>,
Simona Vetter <simona@ffwll.ch>,
Melissa Wen <melissa.srw@gmail.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>,
Jonathan Corbet <corbet@lwn.net>,
victoria@system76.com, sebastian.wick@redhat.com,
thomas.petazzoni@bootlin.com, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
Luca Ceresoli <luca.ceresoli@bootlin.com>
Subject: Re: [PATCH v3 28/33] drm/vkms: Introduce configfs for connector EDID
Date: Mon, 29 Dec 2025 18:24:11 +0100 [thread overview]
Message-ID: <aVK5OyydXrQfIcc7@fedora> (raw)
In-Reply-To: <20251222-vkms-all-config-v3-28-ba42dc3fb9ff@bootlin.com>
On Mon, Dec 22, 2025 at 11:11:30AM +0100, Louis Chauvet wrote:
> Introduce new attributes to configure EDID of a connector:
> - edid_enable - chose if the connector will have an EDID or not
> - edid - raw edid content
>
> Due to limitation of ConfigFS, the max len of EDID is PAGE_SIZE (4kB on
> x86), it should be sufficient for many tests. One possible evolution is
> using a ConfigFS blob to allow bigger EDID.
>
> Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
> Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
> ---
> Documentation/ABI/testing/configfs-vkms | 14 ++++++
> Documentation/gpu/vkms.rst | 5 ++-
> drivers/gpu/drm/vkms/vkms_configfs.c | 80 +++++++++++++++++++++++++++++++++
> drivers/gpu/drm/vkms/vkms_connector.c | 3 ++
> 4 files changed, 101 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/ABI/testing/configfs-vkms b/Documentation/ABI/testing/configfs-vkms
> index f750e616be54..4061ada5d88b 100644
> --- a/Documentation/ABI/testing/configfs-vkms
> +++ b/Documentation/ABI/testing/configfs-vkms
> @@ -48,6 +48,20 @@ Description:
> Value is a bitfield, where 0x1 = NO_DATA, 0x2 = SMPTE_170M_YCC,
> etc. See enum drm_colorspace for full list.
>
> +What: /sys/kernel/config/vkms/<device>/connectors/<connector>/edid_enabled
> +Date: Nov 2025
> +Contact: dri-devel@lists.freedesktop.org
> +Description:
> + Enable or disable EDID for this connector. Value:
> + 1 - enabled, 0 - disabled.
> +
> +What: /sys/kernel/config/vkms/<device>/connectors/<connector>/edid
> +Date: Nov 2025
> +Contact: dri-devel@lists.freedesktop.org
> +Description:
> + Content of the EDID for this connector. Ignored if
> + edid_enabled is not set.
> +
> What: /sys/kernel/config/vkms/<device>/connectors/<connector>/possible_encoders
> Date: Nov 2025
> Contact: dri-devel@lists.freedesktop.org
> diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst
> index 1c4a8023374c..60367fd1bd65 100644
> --- a/Documentation/gpu/vkms.rst
> +++ b/Documentation/gpu/vkms.rst
> @@ -138,7 +138,7 @@ Last but not least, create one or more connectors::
>
> sudo mkdir /config/vkms/my-vkms/connectors/connector0
>
> -Connectors have 3 configurable attribute:
> +Connectors have 5 configurable attribute:
>
> - status: Connection status: 1 connected, 2 disconnected, 3 unknown (same values
> as those exposed by the "status" property of a connector)
> @@ -147,6 +147,9 @@ Connectors have 3 configurable attribute:
> If supported_colorspaces is not 0, the HDR_OUTPUT_METADATA will also be created.
> Value is a bitfield, 0x1 = NO_DATA, 0x2 = SMPTE_170M_YCC... see enum drm_colorspace
> for full list.
> +- edid_enabled: Enable or not EDID for this connector. Some connectors may not have an
> + EDID but just a list of modes, this attribute allows to disable EDID property.
> +- edid: Content of the EDID. Ignored if edid_enabled is not set
>
>
> To finish the configuration, link the different pipeline items::
> diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c
> index 90bf6e6995ae..20f5150e8b24 100644
> --- a/drivers/gpu/drm/vkms/vkms_configfs.c
> +++ b/drivers/gpu/drm/vkms/vkms_configfs.c
> @@ -1271,14 +1271,94 @@ static ssize_t connector_supported_colorspaces_store(struct config_item *item,
> return count;
> }
>
> +static ssize_t connector_edid_enabled_show(struct config_item *item, char *page)
> +{
> + struct vkms_configfs_connector *connector;
> + bool enabled;
> +
> + connector = connector_item_to_vkms_configfs_connector(item);
> +
> + scoped_guard(mutex, &connector->dev->lock)
> + enabled = vkms_config_connector_get_edid_enabled(connector->config);
> +
> + return sprintf(page, "%d\n", enabled);
> +}
> +
> +static ssize_t connector_edid_enabled_store(struct config_item *item,
> + const char *page, size_t count)
> +{
> + struct vkms_configfs_connector *connector;
> + struct vkms_config_connector *connector_cfg;
> + bool enabled;
> +
> + connector = connector_item_to_vkms_configfs_connector(item);
> + connector_cfg = connector->config;
> +
> + if (kstrtobool(page, &enabled))
> + return -EINVAL;
> +
> + scoped_guard(mutex, &connector->dev->lock)
> + {
> + vkms_config_connector_set_edid_enabled(connector_cfg, enabled);
> +
> + if (connector->dev->enabled &&
> + vkms_config_connector_get_status(connector_cfg) !=
> + connector_status_disconnected)
> + vkms_trigger_connector_hotplug(connector->dev->config->dev);
> + }
> + return count;
> +}
> +
> +static ssize_t connector_edid_show(struct config_item *item, char *page)
> +{
> + struct vkms_configfs_connector *connector;
> +
> + connector = connector_item_to_vkms_configfs_connector(item);
> +
> + scoped_guard(mutex, &connector->dev->lock)
> + {
Sorry for the additional email. I forgot to mention that this brace should go
in the same line.
> + unsigned int len = 0;
> + const u8 *edid = vkms_config_connector_get_edid(connector->config, &len);
> +
> + memcpy(page, edid, min(len, PAGE_SIZE));
> + return min(len, PAGE_SIZE);
> + }
> +
> + return -EINVAL;
> +}
> +
> +static ssize_t connector_edid_store(struct config_item *item,
> + const char *page, size_t count)
> +{
> + struct vkms_configfs_connector *connector;
> +
> + connector = connector_item_to_vkms_configfs_connector(item);
> +
> + scoped_guard(mutex, &connector->dev->lock)
> + {
> + vkms_config_connector_set_edid(connector->config, page, count);
> +
> + if (connector->dev->enabled &&
> + vkms_config_connector_get_status(connector->config) !=
> + connector_status_disconnected)
> + vkms_trigger_connector_hotplug(connector->dev->config->dev);
> + }
> +
> + return count;
> +}
> +
> CONFIGFS_ATTR(connector_, status);
> CONFIGFS_ATTR(connector_, type);
> CONFIGFS_ATTR(connector_, supported_colorspaces);
> +CONFIGFS_ATTR(connector_, edid_enabled);
> +CONFIGFS_ATTR(connector_, edid);
>
> static struct configfs_attribute *connector_item_attrs[] = {
> &connector_attr_status,
> &connector_attr_type,
> &connector_attr_supported_colorspaces,
> + &connector_attr_edid_enabled,
> + &connector_attr_edid,
> NULL,
> };
>
> diff --git a/drivers/gpu/drm/vkms/vkms_connector.c b/drivers/gpu/drm/vkms/vkms_connector.c
> index c85d19013720..311858727175 100644
> --- a/drivers/gpu/drm/vkms/vkms_connector.c
> +++ b/drivers/gpu/drm/vkms/vkms_connector.c
> @@ -143,6 +143,9 @@ struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev,
>
> drm_connector_helper_add(&connector->base, &vkms_conn_helper_funcs);
>
> + if (vkms_config_connector_get_edid_enabled(connector_cfg))
> + drm_connector_attach_edid_property(&connector->base);
> +
> return connector;
> }
>
>
> --
> 2.51.2
>
next prev parent reply other threads:[~2025-12-29 17:24 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-22 10:11 [PATCH v3 00/33] VKMS: Introduce multiple configFS attributes Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 01/33] Documentation: ABI: vkms: Add current VKMS ABI documentation Louis Chauvet
2025-12-23 11:12 ` Luca Ceresoli
2025-12-22 10:11 ` [PATCH v3 02/33] drm/drm_mode_config: Add helper to get plane type name Louis Chauvet
2025-12-23 11:12 ` Luca Ceresoli
2025-12-22 10:11 ` [PATCH v3 03/33] drm/vkms: Explicitly display plane type Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 04/33] drm/vkms: Use enabled/disabled instead of 1/0 for debug Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 05/33] drm/vkms: Explicitly display connector status Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 06/33] drm/vkms: Introduce config for plane name Louis Chauvet
2025-12-23 11:13 ` Luca Ceresoli
2025-12-22 10:11 ` [PATCH v3 07/33] drm/vkms: Introduce configfs " Louis Chauvet
2025-12-23 11:14 ` Luca Ceresoli
2025-12-29 14:40 ` Louis Chauvet
2025-12-29 16:01 ` José Expósito
2025-12-29 15:51 ` José Expósito
2025-12-22 10:11 ` [PATCH v3 08/33] drm/blend: Get a rotation name from it's bitfield Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 09/33] drm/vkms: Introduce config for plane rotation Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 10/33] drm/vkms: Introduce configfs " Louis Chauvet
2025-12-23 11:14 ` Luca Ceresoli
2025-12-22 10:11 ` [PATCH v3 11/33] drm/drm_color_mgmt: Expose drm_get_color_encoding_name Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 12/33] drm/vkms: Introduce config for plane color encoding Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 13/33] drm/vkms: Introduce configfs " Louis Chauvet
2025-12-23 12:56 ` Luca Ceresoli
2025-12-22 10:11 ` [PATCH v3 14/33] drm/drm_color_mgmt: Expose drm_get_color_range_name Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 15/33] drm/vkms: Introduce config for plane color range Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 16/33] drm/vkms: Introduce configfs " Louis Chauvet
2025-12-23 13:58 ` Luca Ceresoli
2025-12-22 10:11 ` [PATCH v3 17/33] drm/vkms: Introduce config for plane format Louis Chauvet
2025-12-23 13:58 ` Luca Ceresoli
2025-12-29 15:29 ` Louis Chauvet
2025-12-30 9:08 ` Luca Ceresoli
2025-12-22 10:11 ` [PATCH v3 18/33] drm/vkms: Introduce configfs " Louis Chauvet
2025-12-22 23:12 ` kernel test robot
2025-12-23 1:00 ` kernel test robot
2025-12-23 13:06 ` kernel test robot
2025-12-23 13:58 ` Luca Ceresoli
2025-12-25 0:59 ` Bagas Sanjaya
2025-12-29 15:33 ` Louis Chauvet
2025-12-30 4:37 ` Bagas Sanjaya
2025-12-29 16:09 ` José Expósito
2025-12-29 16:59 ` José Expósito
2025-12-22 10:11 ` [PATCH v3 19/33] drm/vkms: Properly render plane using their zpos Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 20/33] drm/vkms: Introduce config for plane zpos property Louis Chauvet
2025-12-23 15:18 ` Luca Ceresoli
2025-12-22 10:11 ` [PATCH v3 21/33] drm/vkms: Introduce configfs " Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 22/33] drm/vkms: Introduce config for connector type Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 23/33] drm/vkms: Introduce configfs " Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 24/33] drm/connector: Export drm_get_colorspace_name Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 25/33] drm/vkms: Introduce config for connector supported colorspace Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 26/33] drm/vkms: Introduce configfs " Louis Chauvet
2025-12-29 17:26 ` José Expósito
2025-12-22 10:11 ` [PATCH v3 27/33] drm/vkms: Introduce config for connector EDID Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 28/33] drm/vkms: Introduce configfs " Louis Chauvet
2025-12-29 17:20 ` José Expósito
2025-12-29 17:24 ` José Expósito [this message]
2025-12-22 10:11 ` [PATCH v3 29/33] drm/vkms: Store the enabled/disabled status for connector Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 30/33] drm/vkms: Rename vkms_connector_init to vkms_connector_init_static Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 31/33] drm/vkms: Extract common code for connector initialization Louis Chauvet
2025-12-22 10:11 ` [PATCH v3 32/33] drm/vkms: Allow to hot-add connectors Louis Chauvet
2025-12-29 17:09 ` José Expósito
2025-12-22 10:11 ` [PATCH v3 33/33] drm/vkms: Introduce configfs for dynamic connector creation Louis Chauvet
2025-12-23 15:17 ` Luca Ceresoli
2025-12-29 17:14 ` José Expósito
2025-12-23 10:30 ` [PATCH v3 00/33] VKMS: Introduce multiple configFS attributes Luca Ceresoli
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=aVK5OyydXrQfIcc7@fedora \
--to=jose.exposito89@gmail.com \
--cc=airlied@gmail.com \
--cc=corbet@lwn.net \
--cc=dri-devel@lists.freedesktop.org \
--cc=hamohammed.sa@gmail.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=louis.chauvet@bootlin.com \
--cc=luca.ceresoli@bootlin.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=melissa.srw@gmail.com \
--cc=mripard@kernel.org \
--cc=sebastian.wick@redhat.com \
--cc=simona@ffwll.ch \
--cc=thomas.petazzoni@bootlin.com \
--cc=tzimmermann@suse.de \
--cc=victoria@system76.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.