From patchwork Tue Feb 25 17:59:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990416 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AB73AC021B8 for ; Tue, 25 Feb 2025 17:59:46 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2BEFE10E780; Tue, 25 Feb 2025 17:59:46 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="AN9iYZay"; dkim-atps=neutral Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7698C10E6EE for ; Tue, 25 Feb 2025 17:59:43 +0000 (UTC) Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-439a2780b44so37917105e9.1 for ; Tue, 25 Feb 2025 09:59:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506382; x=1741111182; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zDEi+IB29m5kaXCQs1Xh/NAR1EeJ74QIHesF2OX+9WQ=; b=AN9iYZay1NjfMYCeYOSvPo4mH+sWW8fj4MmVgpAxfnRjWnWSQdWnj/FUoEQMd7iCNs vUSUG62M/eu01wzCRxnPRrpq4vVFYObXZWmOdCCSO/OS2Quef0jhtmBMMj6CeF8OypcD 1mPhGaiIujvH+GlLWOl8nDEag6rONm8zo8Czny1kKgsbAhJopjqzrARPMafxpOYrjRNo KQb52rgBWbvcqi7bDjpPQTsQ3y16Zgcq8V6DBHn1vm2N2rfHpSlDeK5N7eWXnfhyGV1w 8Lb1YED252QnjhPVog+YNCfYcZKmalWruOBEZgv4Dz5yUy2U5JtnVPWMEQAnuwJtOCyL PjvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506382; x=1741111182; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zDEi+IB29m5kaXCQs1Xh/NAR1EeJ74QIHesF2OX+9WQ=; b=b+DFCmfbBDUTRmuiuWS2mmA7ZQcEaQCs+/tDYcWfDAhqWxWYKptFwyxcUMi/CsAWFw HM0KPz+qd3YOQqeC6RMcjB/AxYawbkFb2szU64K1Hvhr/WTJcmj/5v4KXzFAVv1kCzYz Gds70jDwK+FZgUrnSTAiLqaE801f2jbZYhlpnxT5ryoLMOAs0DEIOP/PVTzqUhdmrAK4 Q8KqOjF6xVuk0CReIoRt1+OrXyHQFiNYO+mVzqwH2mfU5z/dKqwQIaupoiAS2PL2c1QT olE9nkweAQnDHehTqCBrA/uwLvlKaBdeFBWn4C4dmjA9CZueQs0/WBikwzc/sSL81IxE KlUg== X-Forwarded-Encrypted: i=1; AJvYcCV1k/vDcTTFLw1dfLYJ/cuifxsEalAxrVdRbBf+1KUxHmf4bUTq9HOsSDSeaB8gSxcoXWTPfqq51OM=@lists.freedesktop.org X-Gm-Message-State: AOJu0YyJplU3vzWfOA2kCBXaRbhLULjFvl0PBoJmNsfD+10YNw76LfBK m03CHh9cdIlI7lCCvDlSKoMbkuiEG7qgAc7zk51Es7gktFnMOYKQ X-Gm-Gg: ASbGncsMSM1gfi4CJsW2NK0L1YWR4X/aTFwP0N1bxubATOLjQ3Kben5LcdX8EoAQhrF +gS0MqQKUXTR6JyVtCw3HVFENbeczyCsgnTQwusQcwhfvsmR0oTwho5Q8kKYsIK75D5fuRwckpA 9yBoPaq7JfownyfDDXkzpztfYgESCUUk5qlkxVbkKVlG2O8I/Ol97TFGoiTrywM33yPQ8MI9lM9 vbxp5+yDzU32t55zpFj/b+M7yb5XKl9rNIrI4abpprGxwTkQrvR4uEh5hv7Vpm6zUAr1RLj1qya 6t9C1B9S3nu6cQdHTmcDnHkbma7S X-Google-Smtp-Source: AGHT+IGLk9bjzumLU58MNpaygHhKj7RjQYegcaCcfgsinAKj5M6r6P6pmCzsRocIk9CriKFeU9tX1A== X-Received: by 2002:a05:600c:4f0d:b0:439:98ca:e3a4 with SMTP id 5b1f17b1804b1-43ab90169d5mr4187105e9.19.1740506381786; Tue, 25 Feb 2025 09:59:41 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:40 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 01/16] drm/vkms: Expose device creation and destruction Date: Tue, 25 Feb 2025 18:59:21 +0100 Message-ID: <20250225175936.7223-2-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" In preparation for configfs support, expose vkms_create() and vkms_destroy(). Reviewed-by: Louis Chauvet Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: José Expósito --- drivers/gpu/drm/vkms/vkms_drv.c | 4 ++-- drivers/gpu/drm/vkms/vkms_drv.h | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c index a24d1655f7b8..23817c7b997e 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -146,7 +146,7 @@ static int vkms_modeset_init(struct vkms_device *vkmsdev) return vkms_output_init(vkmsdev); } -static int vkms_create(struct vkms_config *config) +int vkms_create(struct vkms_config *config) { int ret; struct platform_device *pdev; @@ -229,7 +229,7 @@ static int __init vkms_init(void) return 0; } -static void vkms_destroy(struct vkms_config *config) +void vkms_destroy(struct vkms_config *config) { struct platform_device *pdev; diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_drv.h index a74a7fc3a056..2ad8e3da3b7b 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.h +++ b/drivers/gpu/drm/vkms/vkms_drv.h @@ -223,6 +223,26 @@ struct vkms_device { #define to_vkms_plane_state(target)\ container_of(target, struct vkms_plane_state, base.base) +/** + * vkms_create() - Create a device from a configuration + * @config: Config used to configure the new device + * + * A pointer to the created vkms_device is stored in @config + * + * Returns: + * 0 on success or an error. + */ +int vkms_create(struct vkms_config *config); + +/** + * vkms_destroy() - Destroy a device + * @config: Config from which the device was created + * + * The device is completely removed, but the @config is not freed. It can be + * reused or destroyed with vkms_config_destroy(). + */ +void vkms_destroy(struct vkms_config *config); + /** * vkms_crtc_init() - Initialize a CRTC for VKMS * @dev: DRM device associated with the VKMS buffer From patchwork Tue Feb 25 17:59:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990417 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 19F17C021B2 for ; Tue, 25 Feb 2025 17:59:47 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 429D810E797; Tue, 25 Feb 2025 17:59:46 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="TR8NZxY/"; dkim-atps=neutral Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8E4C810E798 for ; Tue, 25 Feb 2025 17:59:44 +0000 (UTC) Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-38f2f748128so2768935f8f.1 for ; Tue, 25 Feb 2025 09:59:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506383; x=1741111183; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HwUFYj9lX6AbtJacLuV777Jdbit64p1AUoia1eEq0TE=; b=TR8NZxY/X73wnj0N/yvqV4fwWcXwkxi9F28nTNR+PWQt08acwF0Upwh+BHOJoBX/zq AZ7W9YhoFJFk9bZZt/4WZevpmb4gE0L7A2J/+q0yywX8ffvOenpwGjqkYLsKqK0FUGQo SRKSB94pFy5JWa9db3L6I5UIpuhGX6ZKYPtQprNzG/krk//IZXjszzpvog/szMQK6ztV FEgXnZSFzspS9M/RbKp6hAmNBLrJ/RncDtw0As0NUPuHF8dpE4FOdLM9T5cTR61QMayN QhAea30CIAju8UsZs/loAfkkN+mmWvUoDjqwEnnd5ss9NAYNpnjkpuGQJojDjrltP/Nf cOag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506383; x=1741111183; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HwUFYj9lX6AbtJacLuV777Jdbit64p1AUoia1eEq0TE=; b=MiHTK0l21A0nvsk6k33EHQfU7yI1CKSMDF4BSBuYs7FQ/X27yiI6IGaz47u8Lw6V6d BLzMb8KJKq8kNNr/d1ktO5AoPk41NBx3aUNo1abc9G+Tmfa0ytPpaCEUtvEK35Yw2x3g MP+F4bo6E19cPOupf3JJa2YlqEpT0MfhlcahZ/XHSS5m+AOEnkhkwuZdj9q2DByKmcpJ 3wRkVORsAC+kUknfwqVJ6QhAsChCdayvgiraYhOxJsUcQPPjgQig5HiTtOsYgUve6zZV hzpRfR5ynTLUiJCZBZ5+UB77TITqxrFj3zqq25bTEa2bK8rwyIzcRaNPSIQIL1yjPqxW WUtw== X-Forwarded-Encrypted: i=1; AJvYcCWHsrM4UNAwYVk+DwB75qAg0oYMi8QbPW/sfab+/mnUzdVKOUmWUKp9nyFIo4TNxFJBfPrQhOdvx4g=@lists.freedesktop.org X-Gm-Message-State: AOJu0YyWvL/kZ/H/Wgf0dTW4RRo0Y2rwwk5fF4QRmwvkr2WhvqcaoQGQ +ICvLPjCGrw+2J13SbB32HfrAk3z6yAHyV466eA3LLwJEYcrZ8O2 X-Gm-Gg: ASbGnctdo+rDBavo50Of9TnoBhuO3c+wsk/JlT4vqHkrMOSQaBUj/+ekUf8Pr3YU9/n +9JdY23RSYSIlj1obaL5NvweUcASkQ0R+0Ypym3uCW2yLQUZDvcx1A3oqlKigz4jw2CDVk9Hl1S N9YyP7fKtCBjXng2V8kcCj9hWDFT1T4qdKl3SSNcvKpXd9w96I95NFcOiruDbxOPIrOy2a7+1aY TOqJMCKZKHNO577G/p8S049F9R8nvfkh/ZPt4bvxhbO6RJ2DV5KsHSI/2DG4s0XAnyVTqOWVYES KTUUlGTb42kFceOTtnw9s7+m/WEH X-Google-Smtp-Source: AGHT+IGmB9ohZkLJUkHLZZRAc91PWdg4gVD+hN0GNDoxwSFhf/3qEImdOZeZRijhFSChhV9ImkzeQg== X-Received: by 2002:adf:e912:0:b0:38f:24f9:8bac with SMTP id ffacd0b85a97d-390cc60c1f9mr3314768f8f.23.1740506382914; Tue, 25 Feb 2025 09:59:42 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:42 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 02/16] drm/vkms: Add and remove VKMS instances via configfs Date: Tue, 25 Feb 2025 18:59:22 +0100 Message-ID: <20250225175936.7223-3-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Allow to create, enable, disable and destroy VKMS instances using configfs. For the moment, it is not possible to add pipeline items, so trying to enable the device will fail printing an informative error to the log. Reviewed-by: Louis Chauvet Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: José Expósito --- Documentation/gpu/vkms.rst | 32 +++++ drivers/gpu/drm/vkms/Kconfig | 1 + drivers/gpu/drm/vkms/Makefile | 3 +- drivers/gpu/drm/vkms/vkms_configfs.c | 169 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_configfs.h | 8 ++ drivers/gpu/drm/vkms/vkms_drv.c | 7 ++ 6 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.c create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.h diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index ba04ac7c2167..423bdf86b5b1 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -51,6 +51,38 @@ To disable the driver, use :: sudo modprobe -r vkms +Configuring With Configfs +========================= + +It is possible to create and configure multiple VKMS instances via configfs. + +Start by mounting configfs and loading VKMS:: + + sudo mount -t configfs none /config + sudo modprobe vkms + +Once VKMS is loaded, ``/config/vkms`` is created automatically. Each directory +under ``/config/vkms`` represents a VKMS instance, create a new one:: + + sudo mkdir /config/vkms/my-vkms + +By default, the instance is disabled:: + + cat /config/vkms/my-vkms/enabled + 0 + +Once you are done configuring the VKMS instance, enable it:: + + echo "1" | sudo tee /config/vkms/my-vkms/enabled + +Finally, you can remove the VKMS instance disabling it:: + + echo "0" | sudo tee /config/vkms/my-vkms/enabled + +And removing the top level directory:: + + sudo rmdir /config/vkms/my-vkms + Testing With IGT ================ diff --git a/drivers/gpu/drm/vkms/Kconfig b/drivers/gpu/drm/vkms/Kconfig index 3c02f928ffe6..3977bbb99f7d 100644 --- a/drivers/gpu/drm/vkms/Kconfig +++ b/drivers/gpu/drm/vkms/Kconfig @@ -7,6 +7,7 @@ config DRM_VKMS select DRM_KMS_HELPER select DRM_GEM_SHMEM_HELPER select CRC32 + select CONFIGFS_FS default n help Virtual Kernel Mode-Setting (VKMS) is used for testing or for diff --git a/drivers/gpu/drm/vkms/Makefile b/drivers/gpu/drm/vkms/Makefile index d657865e573f..939991fc8233 100644 --- a/drivers/gpu/drm/vkms/Makefile +++ b/drivers/gpu/drm/vkms/Makefile @@ -8,7 +8,8 @@ vkms-y := \ vkms_composer.o \ vkms_writeback.o \ vkms_connector.o \ - vkms_config.o + vkms_config.o \ + vkms_configfs.o obj-$(CONFIG_DRM_VKMS) += vkms.o obj-$(CONFIG_DRM_VKMS_KUNIT_TEST) += tests/ diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c new file mode 100644 index 000000000000..92512d52ddae --- /dev/null +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -0,0 +1,169 @@ +// SPDX-License-Identifier: GPL-2.0+ +#include +#include +#include +#include + +#include "vkms_drv.h" +#include "vkms_config.h" +#include "vkms_configfs.h" + +/* To avoid registering configfs more than once or unregistering on error */ +static bool is_configfs_registered; + +/** + * struct vkms_configfs_device - Configfs representation of a VKMS device + * + * @group: Top level configuration group that represents a VKMS device. + * Initialized when a new directory is created under "/config/vkms/" + * @lock: Lock used to project concurrent access to the configuration attributes + * @config: Protected by @lock. Configuration of the VKMS device + * @enabled: Protected by @lock. The device is created or destroyed when this + * option changes + */ +struct vkms_configfs_device { + struct config_group group; + + struct mutex lock; + struct vkms_config *config; + bool enabled; +}; + +#define device_item_to_vkms_configfs_device(item) \ + container_of(to_config_group((item)), struct vkms_configfs_device, \ + group) + +static ssize_t device_enabled_show(struct config_item *item, char *page) +{ + struct vkms_configfs_device *dev; + + dev = device_item_to_vkms_configfs_device(item); + + guard(mutex)(&dev->lock); + return sprintf(page, "%d\n", dev->enabled); +} + +static ssize_t device_enabled_store(struct config_item *item, const char *page, + size_t count) +{ + struct vkms_configfs_device *dev; + bool enabled; + int ret = 0; + + dev = device_item_to_vkms_configfs_device(item); + + if (kstrtobool(page, &enabled)) + return -EINVAL; + + guard(mutex)(&dev->lock); + + if (!dev->enabled && enabled) { + if (!vkms_config_is_valid(dev->config)) + return -EINVAL; + + ret = vkms_create(dev->config); + if (ret) + return ret; + } else if (dev->enabled && !enabled) { + vkms_destroy(dev->config); + } + + dev->enabled = enabled; + + return (ssize_t)count; +} + +CONFIGFS_ATTR(device_, enabled); + +static struct configfs_attribute *device_item_attrs[] = { + &device_attr_enabled, + NULL, +}; + +static void device_release(struct config_item *item) +{ + struct vkms_configfs_device *dev; + + dev = device_item_to_vkms_configfs_device(item); + + if (dev->enabled) + vkms_destroy(dev->config); + + mutex_destroy(&dev->lock); + vkms_config_destroy(dev->config); + kfree(dev); +} + +static struct configfs_item_operations device_item_operations = { + .release = &device_release, +}; + +static const struct config_item_type device_item_type = { + .ct_attrs = device_item_attrs, + .ct_item_ops = &device_item_operations, + .ct_owner = THIS_MODULE, +}; + +static struct config_group *make_device_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + + if (strcmp(name, DEFAULT_DEVICE_NAME) == 0) + return ERR_PTR(-EINVAL); + + dev = kzalloc(sizeof(*dev), GFP_KERNEL); + if (!dev) + return ERR_PTR(-ENOMEM); + + dev->config = vkms_config_create(name); + if (IS_ERR(dev->config)) { + kfree(dev); + return ERR_CAST(dev->config); + } + + config_group_init_type_name(&dev->group, name, &device_item_type); + mutex_init(&dev->lock); + + return &dev->group; +} + +static struct configfs_group_operations device_group_ops = { + .make_group = &make_device_group, +}; + +static const struct config_item_type device_group_type = { + .ct_group_ops = &device_group_ops, + .ct_owner = THIS_MODULE, +}; + +static struct configfs_subsystem vkms_subsys = { + .su_group = { + .cg_item = { + .ci_name = "vkms", + .ci_type = &device_group_type, + }, + }, + .su_mutex = __MUTEX_INITIALIZER(vkms_subsys.su_mutex), +}; + +int vkms_configfs_register(void) +{ + int ret; + + if (is_configfs_registered) + return 0; + + config_group_init(&vkms_subsys.su_group); + ret = configfs_register_subsystem(&vkms_subsys); + + is_configfs_registered = ret == 0; + + return ret; +} + +void vkms_configfs_unregister(void) +{ + if (is_configfs_registered) + configfs_unregister_subsystem(&vkms_subsys); +} diff --git a/drivers/gpu/drm/vkms/vkms_configfs.h b/drivers/gpu/drm/vkms/vkms_configfs.h new file mode 100644 index 000000000000..e9020b0043db --- /dev/null +++ b/drivers/gpu/drm/vkms/vkms_configfs.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +#ifndef _VKMS_CONFIGFS_H_ +#define _VKMS_CONFIGFS_H_ + +int vkms_configfs_register(void); +void vkms_configfs_unregister(void); + +#endif /* _VKMS_CONFIGFS_H_ */ diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c index 23817c7b997e..5bcfbcb6c0c5 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -28,6 +28,7 @@ #include #include "vkms_config.h" +#include "vkms_configfs.h" #include "vkms_drv.h" #define DRIVER_NAME "vkms" @@ -214,6 +215,10 @@ static int __init vkms_init(void) int ret; struct vkms_config *config; + ret = vkms_configfs_register(); + if (ret) + return ret; + config = vkms_config_default_create(enable_cursor, enable_writeback, enable_overlay); if (IS_ERR(config)) return PTR_ERR(config); @@ -250,6 +255,8 @@ void vkms_destroy(struct vkms_config *config) static void __exit vkms_exit(void) { + vkms_configfs_unregister(); + if (!default_config) return; From patchwork Tue Feb 25 17:59:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990422 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3F98EC021B2 for ; Tue, 25 Feb 2025 18:00:04 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B02D510E69E; Tue, 25 Feb 2025 18:00:03 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="IZ++wBVS"; dkim-atps=neutral Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) by gabe.freedesktop.org (Postfix) with ESMTPS id 24F3710E4C9 for ; Tue, 25 Feb 2025 17:59:46 +0000 (UTC) Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-43995b907cfso37450395e9.3 for ; Tue, 25 Feb 2025 09:59:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506385; x=1741111185; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=g4KkuzN3YdsW2noIqZOCpqoqa4GrMlri4rj4Q/z0qqo=; b=IZ++wBVSSzrJ6zuTMVoZMFcRo4YuWs+q7BUb6WTptS8Klgzhqd+S7Oz/3Db5j6xG5I T5hlxjyg2/uhbX6Pzrfm5BX/QOJ/ycqLzFghzltTS4zsAmB5Nf+RQoYsrHjG4ADZ6so+ IWo/jAPFvk8b8ql051Vjy210JO9twP0rmP5NckZzUt3g8jPxLOsFoKeGzoI25rr04urF Vzl45As68KqCah1hOLXu8u1r0Gw/vQ5jhoqnm9LlfIh4sz9aCgsznvr06zg7eNrYBdkk t78Bst+A9cNz/unu3GMi/m4TCnoCpR8sWHPCOrmcqFKjIMZu3O3AYq/9NWwoNN5NCddy 7W8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506385; x=1741111185; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g4KkuzN3YdsW2noIqZOCpqoqa4GrMlri4rj4Q/z0qqo=; b=QDj0vbRxzbVwGhayY+P4U2/rb3FNNZ1+dy9GvLzDA1uveC0D72EpD7p1Llfat6vIms UIHouLKfUk1JpGZUXWw/5pTz31nfxcP/jzQ8u6up/KdFY+n1HPEt/SALUEPMeXdEwvSJ Wq/rCzRnKZG12rL/mBmhXbTtuFbJh6WoOcBQX3KaXGKHcydYDFCs/NuFrwTKlgPHRxmk 7XrxnjbJ5viPmJHQ179v1W+D6MPAYizyzBi6FyrRc9Eh5i6BhuHHSR8Gq3yxVBPb4hzT blxUP34PWjFRPrZJqZBrQeJZbeqTVQ8cS8lDK8VhJPpGNsSM4doKGlrSBxGvoMiGdI6w lPuA== X-Forwarded-Encrypted: i=1; AJvYcCUN9Vpo3TxhAuRqTpY0NNLuE6mMS1XzXmi1OmHv76INinSYkTk4W/D50/ryAhp7MvxdvdePbSjEtIQ=@lists.freedesktop.org X-Gm-Message-State: AOJu0YyN7+Bjqn7KM7AVUayNC4fZhZEuL0tIkrXPt+frZ5tYA2XsUAg0 HwRvqQVc7agpKnSBE2LodUkjwR6HJwYsrno5ITn2nMY8Rd4U+D2Y X-Gm-Gg: ASbGncts4YDxq1Jc5MY2OjHmhUtCXWrgbLhpAKa5tM5cu6K8QQRPu6qqj4Kx8NvSKBh qfUsdqfirAlRFyRRKQ97BON3s+pwx87NTjf87uN7I/TzlWhzWUbg2CM4wG0xuCq70UjPu8HXwoA NFp50bcx4S6r0549AlLTXLt/wfC3dBCoO3iEs58EOX+OBVb3fCdoKKNx3meNGKvuh1w496lignS KIf7cJ0KgsqlR3syb0IckYAXuwWL7UK++LtOWszIeQ0cs00EYMgjVx4C7qqJ/XKJppaKuYvc+hH +XR5orztIHD3teJJebi/8SjUQZND X-Google-Smtp-Source: AGHT+IHo42lY7FnvR0p1Ete6FL/ExPhlesqNSGcsVd2G9FTBSK+yI0MIu82ukvvcb1oHod4TNQdN6A== X-Received: by 2002:a05:600c:198e:b0:439:9e53:49d8 with SMTP id 5b1f17b1804b1-43ab0f979cdmr45977615e9.30.1740506384463; Tue, 25 Feb 2025 09:59:44 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:43 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 03/16] drm/vkms: Allow to configure multiple planes via configfs Date: Tue, 25 Feb 2025 18:59:23 +0100 Message-ID: <20250225175936.7223-4-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Create a default subgroup at /config/vkms/planes to allow to create as many planes as required. Reviewed-by: Louis Chauvet Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: José Expósito --- Documentation/gpu/vkms.rst | 16 ++++- drivers/gpu/drm/vkms/vkms_configfs.c | 87 ++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 423bdf86b5b1..bf23d0da33fe 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -71,6 +71,19 @@ By default, the instance is disabled:: cat /config/vkms/my-vkms/enabled 0 +And directories are created for each configurable item of the display pipeline:: + + tree /config/vkms/my-vkms + ├── enabled + └── planes + +To add items to the display pipeline, create one or more directories under the +available paths. + +Start by creating one or more planes:: + + sudo mkdir /config/vkms/my-vkms/planes/plane0 + Once you are done configuring the VKMS instance, enable it:: echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -79,8 +92,9 @@ Finally, you can remove the VKMS instance disabling it:: echo "0" | sudo tee /config/vkms/my-vkms/enabled -And removing the top level directory:: +And removing the top level directory and its subdirectories:: + sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c index 92512d52ddae..4f9d3341e6c0 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -16,6 +16,7 @@ static bool is_configfs_registered; * * @group: Top level configuration group that represents a VKMS device. * Initialized when a new directory is created under "/config/vkms/" + * @planes_group: Default subgroup of @group at "/config/vkms/planes" * @lock: Lock used to project concurrent access to the configuration attributes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when this @@ -23,16 +24,98 @@ static bool is_configfs_registered; */ struct vkms_configfs_device { struct config_group group; + struct config_group planes_group; struct mutex lock; struct vkms_config *config; bool enabled; }; +/** + * struct vkms_configfs_plane - Configfs representation of a plane + * + * @group: Top level configuration group that represents a plane. + * Initialized when a new directory is created under "/config/vkms/planes" + * @dev: The vkms_configfs_device this plane belongs to + * @config: Configuration of the VKMS plane + */ +struct vkms_configfs_plane { + struct config_group group; + struct vkms_configfs_device *dev; + struct vkms_config_plane *config; +}; + #define device_item_to_vkms_configfs_device(item) \ container_of(to_config_group((item)), struct vkms_configfs_device, \ group) +#define child_group_to_vkms_configfs_device(group) \ + device_item_to_vkms_configfs_device((&(group)->cg_item)->ci_parent) + +#define plane_item_to_vkms_configfs_plane(item) \ + container_of(to_config_group((item)), struct vkms_configfs_plane, group) + +static void plane_release(struct config_item *item) +{ + struct vkms_configfs_plane *plane; + struct mutex *lock; + + plane = plane_item_to_vkms_configfs_plane(item); + lock = &plane->dev->lock; + + guard(mutex)(lock); + vkms_config_destroy_plane(plane->config); + kfree(plane); +} + +static struct configfs_item_operations plane_item_operations = { + .release = &plane_release, +}; + +static const struct config_item_type plane_item_type = { + .ct_item_ops = &plane_item_operations, + .ct_owner = THIS_MODULE, +}; + +static struct config_group *make_plane_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_plane *plane; + + dev = child_group_to_vkms_configfs_device(group); + + guard(mutex)(&dev->lock); + + if (dev->enabled) + return ERR_PTR(-EBUSY); + + plane = kzalloc(sizeof(*plane), GFP_KERNEL); + if (!plane) + return ERR_PTR(-ENOMEM); + + plane->dev = dev; + + plane->config = vkms_config_create_plane(dev->config); + if (IS_ERR(plane->config)) { + kfree(plane); + return ERR_CAST(plane->config); + } + + config_group_init_type_name(&plane->group, name, &plane_item_type); + + return &plane->group; +} + +static struct configfs_group_operations planes_group_operations = { + .make_group = &make_plane_group, +}; + +static const struct config_item_type plane_group_type = { + .ct_group_ops = &planes_group_operations, + .ct_owner = THIS_MODULE, +}; + static ssize_t device_enabled_show(struct config_item *item, char *page) { struct vkms_configfs_device *dev; @@ -125,6 +208,10 @@ static struct config_group *make_device_group(struct config_group *group, config_group_init_type_name(&dev->group, name, &device_item_type); mutex_init(&dev->lock); + config_group_init_type_name(&dev->planes_group, "planes", + &plane_group_type); + configfs_add_default_group(&dev->planes_group, &dev->group); + return &dev->group; } From patchwork Tue Feb 25 17:59:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990421 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 16EB4C021BE for ; Tue, 25 Feb 2025 17:59:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4D12110E6A0; Tue, 25 Feb 2025 17:59:52 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="aPG6MasH"; dkim-atps=neutral Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by gabe.freedesktop.org (Postfix) with ESMTPS id D4F9410E4C9 for ; Tue, 25 Feb 2025 17:59:47 +0000 (UTC) Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4399deda38cso36715775e9.1 for ; Tue, 25 Feb 2025 09:59:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506386; x=1741111186; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JmwMWV6oF+Vmhdp0fICh2mmxVSO2Me4ydPSVWJnw9l0=; b=aPG6MasHUCZS1vF+sS2Zr0+5Nn+UB/H5jAOM7s1IxpBLPh1nkQTd/NQEiStJ6pd8yZ jr9jIdToASw8A+dJ56ruNYeftfMUswNjjMAePpac+gR6J27vDOW7pMS1aCn+VWaq00ZP w32W9LFutRw557BGZfFtgkQstkMcre+bFcWe0O7Ojs2B+L7avtkrx8h64AigzsUfjESn FSbkByUA8JL8vQtSA85A7I58278YJRDxFhlVEOKxnIu/lKcrbD0jBjwrY0F4Hq48n0IN rbbvB6wLIJyPQitwjj/mGXzLPQ6lZkSlk/XjuIeLXW02YqucX0xlp08Enl2QEJSMZTIY HSUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506386; x=1741111186; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JmwMWV6oF+Vmhdp0fICh2mmxVSO2Me4ydPSVWJnw9l0=; b=sDvnkJQ//yRXZC2l/xiYLd0lRHyIgX3ujwD/xmR3vcuU2Z+1YaulX6nT49KJAjjpry IvvRtSt8ygmE/JEN9xCPuxligKcaynAnapwkWGOS9gKhTzbscvkjaXmR2dwNKKTVj3/e NhHxVnvTiiyH4pJG76AcPr/gqqybQKJ9Edl8FUEKaTWSO7uADJxuaCIOIZWHYYyfz7mn f3KN1KIgYnuZaAs9Nht8C906tq1pUPT2t+B0OXf5AIVhIo/ILvv8aXFAhVFUp4EKwVdp 6H28JpvtBGvPZHaqaLb1FOl9UOTf3MlsTRsXs6f+GMpogyWhaP9SL92OLwYut/marxeS oysg== X-Forwarded-Encrypted: i=1; AJvYcCVES/B9a78jAifFHrIhroTW3Ige6bAVxRjshHLEGPDdcRUOsUaosvB/pUg0b2gN//SDoQ05MGXVoLU=@lists.freedesktop.org X-Gm-Message-State: AOJu0YzQ2v3ziTK57btHd9mzSFcEmrM4eoG3VHVYqZs0vicCVdbylEDG jWCCbUc65+3z1Dg8xGSVea6oZjRhXvS743poYAZXPmb2F9jqml7f X-Gm-Gg: ASbGncv6TA1/35lbHBf9+TYTDgUhfcSn5Qr1bq/cF4Tdl/zHWU++mLqVi5aButsjYQB nwgfRiqIEeERbraQ8uWD/QWF0W5GAdbuZ5wz2lxbhKWTWu9wZ3+jQG0bs9kG1TaMqEF6LmHrseR mgypcGk5nAIOukaSTpwwTXkkv+8xc7gzHe1ZrD6gzqZSMBqcyKo+O/jrWz5+Jw91M1t1bd1AJi/ xC7bgLEci6kUQ67myS9GculkjSJk11IQqUFZY4K81A8uHksb/TJLSb2BRqgMsHwV/T9+fa/lNBF hxjdo9HuIT4ttFKRiKjXVg2bdhOD X-Google-Smtp-Source: AGHT+IFLjeZRYlh7NEmH/CmtWS5phKKBkIkl2C2e27eaJkg9xOLmwwxXIek45/j4yp0tP6BluN2ZOQ== X-Received: by 2002:a05:600c:5012:b0:439:98b0:f8ce with SMTP id 5b1f17b1804b1-43ab60f0c1bmr25519295e9.7.1740506386063; Tue, 25 Feb 2025 09:59:46 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:44 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 04/16] drm/vkms: Allow to configure the plane type via configfs Date: Tue, 25 Feb 2025 18:59:24 +0100 Message-ID: <20250225175936.7223-5-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" When a plane is created, add a `type` file to allow to set the type: - 0 overlay - 1 primary - 2 cursor Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: José Expósito --- Documentation/gpu/vkms.rst | 5 ++++ drivers/gpu/drm/vkms/vkms_configfs.c | 43 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index bf23d0da33fe..a87e0925bebb 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -84,6 +84,11 @@ Start by creating one or more planes:: sudo mkdir /config/vkms/my-vkms/planes/plane0 +Planes have 1 configurable attribute: + +- type: Plane type: 0 overlay, 1 primary, 2 cursor (same values as those + exposed by the "type" property of a plane) + Once you are done configuring the VKMS instance, enable it:: echo "1" | sudo tee /config/vkms/my-vkms/enabled diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c index 4f9d3341e6c0..c2e1eef75906 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -55,6 +55,48 @@ struct vkms_configfs_plane { #define plane_item_to_vkms_configfs_plane(item) \ container_of(to_config_group((item)), struct vkms_configfs_plane, group) +static ssize_t plane_type_show(struct config_item *item, char *page) +{ + struct vkms_configfs_plane *plane; + + plane = plane_item_to_vkms_configfs_plane(item); + + guard(mutex)(&plane->dev->lock); + return sprintf(page, "%u", vkms_config_plane_get_type(plane->config)); +} + +static ssize_t plane_type_store(struct config_item *item, const char *page, + size_t count) +{ + struct vkms_configfs_plane *plane; + enum drm_plane_type type; + + plane = plane_item_to_vkms_configfs_plane(item); + + if (kstrtouint(page, 10, &type)) + return -EINVAL; + + if (type != DRM_PLANE_TYPE_OVERLAY && type != DRM_PLANE_TYPE_PRIMARY && + type != DRM_PLANE_TYPE_CURSOR) + return -EINVAL; + + guard(mutex)(&plane->dev->lock); + + if (plane->dev->enabled) + return -EBUSY; + + vkms_config_plane_set_type(plane->config, type); + + return (ssize_t)count; +} + +CONFIGFS_ATTR(plane_, type); + +static struct configfs_attribute *plane_item_attrs[] = { + &plane_attr_type, + NULL, +}; + static void plane_release(struct config_item *item) { struct vkms_configfs_plane *plane; @@ -73,6 +115,7 @@ static struct configfs_item_operations plane_item_operations = { }; static const struct config_item_type plane_item_type = { + .ct_attrs = plane_item_attrs, .ct_item_ops = &plane_item_operations, .ct_owner = THIS_MODULE, }; From patchwork Tue Feb 25 17:59:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990419 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CA28EC021B2 for ; Tue, 25 Feb 2025 17:59:52 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 38AC810E69F; Tue, 25 Feb 2025 17:59:52 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="dV3kkkU7"; dkim-atps=neutral Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by gabe.freedesktop.org (Postfix) with ESMTPS id CD2F510E4C9 for ; Tue, 25 Feb 2025 17:59:48 +0000 (UTC) Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-43998deed24so56447295e9.2 for ; Tue, 25 Feb 2025 09:59:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506387; x=1741111187; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nC1+hzLjpAD0CpG9te0z8ab5IM3YNOmmBls2ySCSckA=; b=dV3kkkU7hwvhUxNKmRD5ycvozh3uLf7MI4QzmyYtyfIfxHYqoBRGdoFFhnzWH7oTCQ LSuBizuqQQyR7A293f0s67rIZFKC30m6mKJyylxjyGaSXlRjjWPPeTXIzhtDcUOzXDZi FXQ2bopESduf2/ned0nE6E5xJu7DzgsPQ3vocleukD9vmKzGLq8l/j3fZy7IApLmJJTc yYZEm/jr1QmJIDqpO9aGWdaWNkyBvJdt0ilE7yob4+hWx3jAG8Jb/LxTkJg/hdSElpN6 LV9TyIxGwu13Q+xjREtw9Y1omLkkeCneQ7fqNjBWLKWLDHAHCnFF4MeFHn97uOnhmLIu OW6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506387; x=1741111187; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nC1+hzLjpAD0CpG9te0z8ab5IM3YNOmmBls2ySCSckA=; b=h7hsdpXTVKmHiUQAsz7PMwR9WMb0YhK4mSdd0XOBRJ6qNPaa3aqzRsz5kGlQVoxuhH nPlnZN6BDNHb+8jcvRRKgFv/GAQr5aR/8F0y6qJBXtqgwWU9YgW1zNun6HSv6qEAbnCU KpDx6Oy37qGiN4H835tzMPq6rKHXd1qYE65mc+89nNUAG48Tdeb+6zW60B8exlWnKz15 z74h7HteCAwR6GWd2B6DIioiJp88fmcfwypa7qB5pr3xkkxeV1ikihJpy+166lf9Q/pY aX+hy44vH7TsJSKJcVzQIHx5GaZxnP4tik1vnDc0+MMPMC/LJZCVaFGXNjGAKmX6BoUJ EwzQ== X-Forwarded-Encrypted: i=1; AJvYcCWtURJ6d0tzmEhdML5b2EEFjYir9SEJ3jGRhK3dfCYYeNwQiO4cEftEh34YEa+Bzi22+Ax+juPd1I8=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwfePQxA0DdAHpBhvipM1/q9nRs3WJFvtAigbBWrVCLzrksKhjX 6ioi10sMND7kTt3RMfjLg9wIWnmXI88Q2CiTC78ZX6+1WPbpR72G X-Gm-Gg: ASbGncu61gV5LiR8HtzW5v6cMZps0xTqm/4FyuXsIexXt0WszDglUeEJyzjIYA+HOJl VCcx8NeiZULdbifRlyEClAz5EhozC8k1lQ4XZz20fO2tyN3w1/4O89xGC89Q1+wZonBLAIRXXiK mJ+vpkh/BJTxr3MXpYHKoeTCyBw8zJmb0rjDgKX9Y+lahaHM7cFEcZ0RqDskGaqCN2+C8OEY3xi dFIyGNTI5VhUVUoHpk4FW9Rv3lgxckzYmW90INSqPAloCSNlNF+FsWt+NTEzm4l8ZpKQ426GNmh cuZEC8IVk4AClEr1jkiUtKPPruuE X-Google-Smtp-Source: AGHT+IGyYnb11gZgclvRVsL9ItAF6/JENZwu39j6igcuRB0HwP1x3A2vZbkH/rqQYAL9dpUt1LRpVg== X-Received: by 2002:a05:600c:450d:b0:439:9a43:dd62 with SMTP id 5b1f17b1804b1-439aebb2d6fmr119679735e9.24.1740506386934; Tue, 25 Feb 2025 09:59:46 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:46 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 05/16] drm/vkms: Allow to configure multiple CRTCs via configfs Date: Tue, 25 Feb 2025 18:59:25 +0100 Message-ID: <20250225175936.7223-6-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Create a default subgroup at /config/vkms/crtcs to allow to create as many CRTCs as required. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: José Expósito --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 84 ++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index a87e0925bebb..e0699603ef53 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -74,6 +74,7 @@ By default, the instance is disabled:: And directories are created for each configurable item of the display pipeline:: tree /config/vkms/my-vkms + ├── crtcs ├── enabled └── planes @@ -89,6 +90,10 @@ Planes have 1 configurable attribute: - type: Plane type: 0 overlay, 1 primary, 2 cursor (same values as those exposed by the "type" property of a plane) +Continue by creating one or more CRTCs:: + + sudo mkdir /config/vkms/my-vkms/crtcs/crtc0 + Once you are done configuring the VKMS instance, enable it:: echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -100,6 +105,7 @@ Finally, you can remove the VKMS instance disabling it:: And removing the top level directory and its subdirectories:: sudo rmdir /config/vkms/my-vkms/planes/* + sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c index c2e1eef75906..1483f47244e6 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -17,6 +17,7 @@ static bool is_configfs_registered; * @group: Top level configuration group that represents a VKMS device. * Initialized when a new directory is created under "/config/vkms/" * @planes_group: Default subgroup of @group at "/config/vkms/planes" + * @crtcs_group: Default subgroup of @group at "/config/vkms/crtcs" * @lock: Lock used to project concurrent access to the configuration attributes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when this @@ -25,6 +26,7 @@ static bool is_configfs_registered; struct vkms_configfs_device { struct config_group group; struct config_group planes_group; + struct config_group crtcs_group; struct mutex lock; struct vkms_config *config; @@ -45,6 +47,20 @@ struct vkms_configfs_plane { struct vkms_config_plane *config; }; +/** + * struct vkms_configfs_crtc - Configfs representation of a CRTC + * + * @group: Top level configuration group that represents a CRTC. + * Initialized when a new directory is created under "/config/vkms/crtcs" + * @dev: The vkms_configfs_device this CRTC belongs to + * @config: Configuration of the VKMS CRTC + */ +struct vkms_configfs_crtc { + struct config_group group; + struct vkms_configfs_device *dev; + struct vkms_config_crtc *config; +}; + #define device_item_to_vkms_configfs_device(item) \ container_of(to_config_group((item)), struct vkms_configfs_device, \ group) @@ -55,6 +71,70 @@ struct vkms_configfs_plane { #define plane_item_to_vkms_configfs_plane(item) \ container_of(to_config_group((item)), struct vkms_configfs_plane, group) +#define crtc_item_to_vkms_configfs_crtc(item) \ + container_of(to_config_group((item)), struct vkms_configfs_crtc, group) + +static void crtc_release(struct config_item *item) +{ + struct vkms_configfs_crtc *crtc; + struct mutex *lock; + + crtc = crtc_item_to_vkms_configfs_crtc(item); + lock = &crtc->dev->lock; + + guard(mutex)(lock); + vkms_config_destroy_crtc(crtc->dev->config, crtc->config); + kfree(crtc); +} + +static struct configfs_item_operations crtc_item_operations = { + .release = &crtc_release, +}; + +static const struct config_item_type crtc_item_type = { + .ct_item_ops = &crtc_item_operations, + .ct_owner = THIS_MODULE, +}; + +static struct config_group *make_crtc_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_crtc *crtc; + + dev = child_group_to_vkms_configfs_device(group); + + guard(mutex)(&dev->lock); + + if (dev->enabled) + return ERR_PTR(-EBUSY); + + crtc = kzalloc(sizeof(*crtc), GFP_KERNEL); + if (!crtc) + return ERR_PTR(-ENOMEM); + + crtc->dev = dev; + + crtc->config = vkms_config_create_crtc(dev->config); + if (IS_ERR(crtc->config)) { + kfree(crtc); + return ERR_CAST(crtc->config); + } + + config_group_init_type_name(&crtc->group, name, &crtc_item_type); + + return &crtc->group; +} + +static struct configfs_group_operations crtcs_group_operations = { + .make_group = &make_crtc_group, +}; + +static const struct config_item_type crtc_group_type = { + .ct_group_ops = &crtcs_group_operations, + .ct_owner = THIS_MODULE, +}; + static ssize_t plane_type_show(struct config_item *item, char *page) { struct vkms_configfs_plane *plane; @@ -255,6 +335,10 @@ static struct config_group *make_device_group(struct config_group *group, &plane_group_type); configfs_add_default_group(&dev->planes_group, &dev->group); + config_group_init_type_name(&dev->crtcs_group, "crtcs", + &crtc_group_type); + configfs_add_default_group(&dev->crtcs_group, &dev->group); + return &dev->group; } From patchwork Tue Feb 25 17:59:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990418 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A2DE0C021B8 for ; Tue, 25 Feb 2025 17:59:52 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 23DB210E67F; Tue, 25 Feb 2025 17:59:52 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="cuCsOpiy"; dkim-atps=neutral Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9134210E4C9 for ; Tue, 25 Feb 2025 17:59:49 +0000 (UTC) Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4399deda38cso36716245e9.1 for ; Tue, 25 Feb 2025 09:59:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506388; x=1741111188; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+1Ilm0hsqaAWJ6FLSDKxA/oNa1o2785HX4v9RhTC7S0=; b=cuCsOpiy61Sxv7IzB5EmUHpMIvjKRTNlhRrDvlCT/CKLve3TOoL9QLvxPAdLIt2erO wTOj6qa/WA0W3OOw07FZgFFNBfz2NvVDz4nqHz6dJi4JB2XFBi6Q00PWFvfpeEDtfJeB iqYfBpH4h8hJrveUCPtxyWvOkcoktKCLNKigxEri8HvBzlBVqJz1wFx4Ez16qNwbVZtC Wu96tjC/rQsyUwgteaIXy5dyMmtgBfXaCuO6Tt7HeEkkbVTpNx8B7pA+IJLE/OxGutmC n/Zv2nTS+/5aiFmPlYpkLcxeRXDYYGTwfUHWPCOPVHNPB/GJ2DfVmIQYmQlfZ+AcxUZV BHjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506388; x=1741111188; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+1Ilm0hsqaAWJ6FLSDKxA/oNa1o2785HX4v9RhTC7S0=; b=BEg+kbFLi5643hgEzIMVWixTkmz6kDhm5tOdAVe0E0B8fSoPH9KHf9F7v23VgnrNQs MCpiMxK/75wzhZZkpoooWUKK2ymYDH452xj5mdj0bKAtM4UVrzqeu+evygukUuYcbD0b ajeV+02K1G5VV1lsMQ1JuOTqXSMnpqc8CtmuQgF3+9sHPeAEG7lm6BRQAXGBohooBjK4 8dzQcweZd3WUwV8O7CQnSiNvHdDM8Lt1/WmRPvcUkYpkUti1kzXSidm0PDzvC48iAixw OD/YF2ZNqXzXL2y00EQUq6MiNSASk76RKgzEG20/tO7JXNda/AEVLp2/2Spx/m/Y0ywR 5+2A== X-Forwarded-Encrypted: i=1; AJvYcCXk9iodSA5FE7bNrPi/qhELZ2d+DGgNLrso8Fm3Ft0CMC6dflmfMH3DLy8m42p5D1jMiJtqdJTouPs=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwK984KMKI57ggzyURZzcj4u5xNfAftmCzoANIKKrTrVHhwjr4E hD7iBr8hW97cRm7szr9Ev2mnm9/vOXfV4s4aLRAAtv/7aRFUkmQr X-Gm-Gg: ASbGncsrQG1RXe1JYgyJO9hWG0KXVll9iM33W1gFZNL+SGAgqEaAYFLsmlFFqg2M0DV pKxsNr4UKUNsI9z7I6Q611J6gHBzk/rbrHHy1t9gifwyJgDc2fZ3j0xJhEVHm7nRdY+3jc2Fu1E Xp07P74nhW73MKhJPXpPrs9Ji0xEgdRv8qOIkOlvi7L43j/1tD/y1nGYgAjoQrJlxSAA3vMJ8oj /pdOneH4favJqaA7iaUwwEi4l9UlK4YT7kDltXC6d8v4fbQLLamLko6NB27JI1AeqThkY8gqGYV CM8t6a31ZQqB7zECx4XEn7vJIJY8 X-Google-Smtp-Source: AGHT+IG/Jg6sQzfteNDw1Z0ZLJPWyZtj1UzkuvnZQYZgwvyGWiXUaguZlAArqY4qPHtreL4LKbBH/Q== X-Received: by 2002:a05:600c:1989:b0:439:a6db:1824 with SMTP id 5b1f17b1804b1-43ab0f4271cmr48566515e9.16.1740506387928; Tue, 25 Feb 2025 09:59:47 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:47 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 06/16] drm/vkms: Allow to configure CRTC writeback support via configfs Date: Tue, 25 Feb 2025 18:59:26 +0100 Message-ID: <20250225175936.7223-7-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" When a CRTC is created, add a `writeback` file to allow to enable or disable writeback connector support Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: José Expósito --- Documentation/gpu/vkms.rst | 4 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 40 ++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index e0699603ef53..abe7a0f5a4ab 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -94,6 +94,10 @@ Continue by creating one or more CRTCs:: sudo mkdir /config/vkms/my-vkms/crtcs/crtc0 +CRTCs have 1 configurable attribute: + +- writeback: Enable or disable writeback connector support by writing 1 or 0 + Once you are done configuring the VKMS instance, enable it:: echo "1" | sudo tee /config/vkms/my-vkms/enabled diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c index 1483f47244e6..233a3d4ad75c 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -74,6 +74,45 @@ struct vkms_configfs_crtc { #define crtc_item_to_vkms_configfs_crtc(item) \ container_of(to_config_group((item)), struct vkms_configfs_crtc, group) +static ssize_t crtc_writeback_show(struct config_item *item, char *page) +{ + struct vkms_configfs_crtc *crtc; + + crtc = crtc_item_to_vkms_configfs_crtc(item); + + guard(mutex)(&crtc->dev->lock); + return sprintf(page, "%d\n", + vkms_config_crtc_get_writeback(crtc->config)); +} + +static ssize_t crtc_writeback_store(struct config_item *item, const char *page, + size_t count) +{ + struct vkms_configfs_crtc *crtc; + bool writeback; + + crtc = crtc_item_to_vkms_configfs_crtc(item); + + if (kstrtobool(page, &writeback)) + return -EINVAL; + + guard(mutex)(&crtc->dev->lock); + + if (crtc->dev->enabled) + return -EBUSY; + + vkms_config_crtc_set_writeback(crtc->config, writeback); + + return (ssize_t)count; +} + +CONFIGFS_ATTR(crtc_, writeback); + +static struct configfs_attribute *crtc_item_attrs[] = { + &crtc_attr_writeback, + NULL, +}; + static void crtc_release(struct config_item *item) { struct vkms_configfs_crtc *crtc; @@ -92,6 +131,7 @@ static struct configfs_item_operations crtc_item_operations = { }; static const struct config_item_type crtc_item_type = { + .ct_attrs = crtc_item_attrs, .ct_item_ops = &crtc_item_operations, .ct_owner = THIS_MODULE, }; From patchwork Tue Feb 25 17:59:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990426 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BB659C021B2 for ; Tue, 25 Feb 2025 18:00:13 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 371EC10E6EE; Tue, 25 Feb 2025 18:00:13 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="KzGlkcAA"; dkim-atps=neutral Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9550B10E67F for ; Tue, 25 Feb 2025 17:59:50 +0000 (UTC) Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-38f488f3161so3276601f8f.3 for ; Tue, 25 Feb 2025 09:59:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506389; x=1741111189; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jQ3qzmV/GwODyLkEBydltNTBiPP7GsnM7FoOeuRwhyU=; b=KzGlkcAAvqN+eYgu+vKqO2tuvhT/UPJ/5QJyKf0iAXQKzLsJ8jo9ZxZmguEDgO0gYP y2uHW5azJX9u5Vs+XqjgMYGLUdIszXn8XQZzn2bkQ8xAs5Nkunbh5MHRfkKxjHEbnvTy cWWd7Kvpnws71XOCpaKskZ0z2xoVJ5XcD2kSLun47mBH91YcclouWnZQqDGM2/jPLVaS x3KjK2nfyweszI5eS9x4oui4u7cK+FO6Y2vLnRn1mW4J1jpansbcNZTalUyAJD+uJrzm SXojrYMKISdxiPPHLw7wH4sNpI0M98/I8pNmY1BHuHo7Ml4MqWutX2FzWtsOQVa8jEuW 59pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506389; x=1741111189; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jQ3qzmV/GwODyLkEBydltNTBiPP7GsnM7FoOeuRwhyU=; b=WtIt24aJRyOYmXZR9NvNF3mAg299HF8Y48YpgIJT+RKSOI9xBFmxsx0r7MsYSsDikN VJSOUl4gnUgQLIHlisBDs+ykhgNSnn4KBRDIJ98F1ZVELAw5y3oskD94b6pkBFp5Uz14 2WT/wPX1PfReLJojIxSGucWqJtQkkyLakN0OWGKdtHObj2dhHLZ536qzTWEus6ZwKjR+ aRdcpIjccSemvrcPtmxJlmk2TOwkgMBrgS3WyAuhzpsyWGNoF9/PVrsGT38a4b+races VkY3NGDUg6/0gR93weGRsy3RNkMtZS1kkGL+LpY2qs1f//T2N8EAHf2xd4QRs51fSbq4 LtSg== X-Forwarded-Encrypted: i=1; AJvYcCWTIgG6wc7ytE4/dZOfOjVi6Y7WS1X5tnI/AYRNmDCeE/FmNBRMSHbDVHEcegZ+J33XBNoIljRq/qo=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwFVO35bahvPg+Xk/4Q9MqvAHpxNNfTLuisHR2skMCVlWd1fqAS R++T+ZPjkUs3VMFSWKP//wNLEHaKjny7K+UEWfr96D0dC7PDxvbP X-Gm-Gg: ASbGncuZpg3yjeh829MAC9TCqcMsGSEsBXuYADcySTLlXdW+rNgT9l0AcKcTIVLxqkk q+9Swgh0yL4NBU5mCfT8O6lNEiDzVY4BMmw/QMGPzFNMZSS2mAhytFQmI4cq8boo/qGqO7A0Ed6 xRvAcFYw9Q0f/Hs3OunU9ltQAwW/hIlyy6wg/r4NbM6DYIEaArKy8Ag5qP7zzQwZdNwyZ5gVjG/ YPe9r0EoeyhU2hqqur2+g4zXH7RIIuZ1DjYO2NZfh3dnLIA9all+KBLdhNygr3nTVvs6obByQj/ lqOjDu9kyG4hPHEG7qunKun4C4hu X-Google-Smtp-Source: AGHT+IEy+IL/4SACMuAp4ri5486dK+aWSMx2NkyH5sRE4U8G0AbrFzsBBuGGPkYXj/bg5UH5g8T4Iw== X-Received: by 2002:a05:6000:154a:b0:38d:e3da:8b50 with SMTP id ffacd0b85a97d-38f7082821bmr17517108f8f.39.1740506389035; Tue, 25 Feb 2025 09:59:49 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:48 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 07/16] drm/vkms: Allow to attach planes and CRTCs via configfs Date: Tue, 25 Feb 2025 18:59:27 +0100 Message-ID: <20250225175936.7223-8-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Create a default subgroup at /config/vkms/planes/plane/possible_crtcs that will contain symbolic links to the possible CRTCs for the plane. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: José Expósito --- Documentation/gpu/vkms.rst | 9 +++++ drivers/gpu/drm/vkms/vkms_configfs.c | 54 ++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index abe7a0f5a4ab..13b96837a266 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -98,6 +98,14 @@ CRTCs have 1 configurable attribute: - writeback: Enable or disable writeback connector support by writing 1 or 0 +To finish the configuration, link the different pipeline items:: + + sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/plane0/possible_crtcs + +Since at least one primary plane is required, make sure to set the right type:: + + echo "1" | sudo tee /config/vkms/my-vkms/planes/plane0/type + Once you are done configuring the VKMS instance, enable it:: echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -108,6 +116,7 @@ Finally, you can remove the VKMS instance disabling it:: And removing the top level directory and its subdirectories:: + sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c index 233a3d4ad75c..09d1f2224d01 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -38,11 +38,13 @@ struct vkms_configfs_device { * * @group: Top level configuration group that represents a plane. * Initialized when a new directory is created under "/config/vkms/planes" + * @possible_crtcs_group: Default subgroup of @group at "plane/possible_crtcs" * @dev: The vkms_configfs_device this plane belongs to * @config: Configuration of the VKMS plane */ struct vkms_configfs_plane { struct config_group group; + struct config_group possible_crtcs_group; struct vkms_configfs_device *dev; struct vkms_config_plane *config; }; @@ -71,6 +73,10 @@ struct vkms_configfs_crtc { #define plane_item_to_vkms_configfs_plane(item) \ container_of(to_config_group((item)), struct vkms_configfs_plane, group) +#define plane_possible_crtcs_item_to_vkms_configfs_plane(item) \ + container_of(to_config_group((item)), struct vkms_configfs_plane, \ + possible_crtcs_group) + #define crtc_item_to_vkms_configfs_crtc(item) \ container_of(to_config_group((item)), struct vkms_configfs_crtc, group) @@ -175,6 +181,49 @@ static const struct config_item_type crtc_group_type = { .ct_owner = THIS_MODULE, }; +static int plane_possible_crtcs_allow_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_plane *plane; + struct vkms_configfs_crtc *crtc; + + if (target->ci_type != &crtc_item_type) + return -EINVAL; + + plane = plane_possible_crtcs_item_to_vkms_configfs_plane(src); + crtc = crtc_item_to_vkms_configfs_crtc(target); + + guard(mutex)(&plane->dev->lock); + + if (plane->dev->enabled) + return -EBUSY; + + return vkms_config_plane_attach_crtc(plane->config, crtc->config); +} + +static void plane_possible_crtcs_drop_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_plane *plane; + struct vkms_configfs_crtc *crtc; + + plane = plane_possible_crtcs_item_to_vkms_configfs_plane(src); + crtc = crtc_item_to_vkms_configfs_crtc(target); + + guard(mutex)(&plane->dev->lock); + vkms_config_plane_detach_crtc(plane->config, crtc->config); +} + +static struct configfs_item_operations plane_possible_crtcs_item_operations = { + .allow_link = plane_possible_crtcs_allow_link, + .drop_link = plane_possible_crtcs_drop_link, +}; + +static const struct config_item_type plane_possible_crtcs_group_type = { + .ct_item_ops = &plane_possible_crtcs_item_operations, + .ct_owner = THIS_MODULE, +}; + static ssize_t plane_type_show(struct config_item *item, char *page) { struct vkms_configfs_plane *plane; @@ -267,6 +316,11 @@ static struct config_group *make_plane_group(struct config_group *group, config_group_init_type_name(&plane->group, name, &plane_item_type); + config_group_init_type_name(&plane->possible_crtcs_group, + "possible_crtcs", + &plane_possible_crtcs_group_type); + configfs_add_default_group(&plane->possible_crtcs_group, &plane->group); + return &plane->group; } From patchwork Tue Feb 25 17:59:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990420 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EB3C4C021BB for ; Tue, 25 Feb 2025 17:59:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B1E5810E4C9; Tue, 25 Feb 2025 17:59:52 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="c/Z/keQQ"; dkim-atps=neutral Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) by gabe.freedesktop.org (Postfix) with ESMTPS id 98C5110E69F for ; Tue, 25 Feb 2025 17:59:51 +0000 (UTC) Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-439350f1a0bso459255e9.0 for ; Tue, 25 Feb 2025 09:59:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506390; x=1741111190; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uTsFuw25JN5p3fGYw8niDWV82fMArp6L/Ntua1mS02k=; b=c/Z/keQQsAdgpjAOfDdmSs9R3TjYwe4Dld1RLpKMZmCcOh4SeYh8ZEn6f7pe3yFWux qrgvbZY4cp75aTsib7yyK/3EHLLdnu+F+Bs941BVO6eAb9OfsC4ooBiknBNOFT175clf HgaL38t9sKt+44TeMDcGXA1386isgWfrL5m5abS8ptMrYxvqd0hirpun3hzG8IJg7+mG Zy2nQzArOIqbs2NqOL7rjro4hP9pRQb3kya7h3mXkHQJdA5faA9XMjB4qVpHeNqM/hIl FJbA1LPOmUAd5F7UxxdfsaMdHKxPltcbxe+iY2y9tY7R960lWgEXfcxHZYHIIo3wUrWi oG/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506390; x=1741111190; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uTsFuw25JN5p3fGYw8niDWV82fMArp6L/Ntua1mS02k=; b=HeR4qy6q93Si15gvUHTGOuB4FqYZK5PHv72YVXdoL2GceAaNHT/m5XUrPVFod+ap9h AGNGCMtEHiNSuqnCK9wbJyT+HnxaK9y+KcgfZBxlAYCTMg1w/6QaK5LExchvhTD2P+2X BxNFT7SKk7EUEFkVX5RGlBhyYpsH1wUp7Fojqkws1OyfOanEWK5HTyqSXAK4GSeNdWBX eZnHg0bO0DmRs4kSp87eVYuHTMLzURNgUxshU/ap9ikUgpLSx+Ubzc0teL/Eb29BqXZo 414v+6OYQr1uXvU2H4N6Dbbohvm3QITfEW+LRE262dxAwOqYzfQnGd1Q+ORnDlsCvJ3p cXkw== X-Forwarded-Encrypted: i=1; AJvYcCXdoeXMHEf8i2Sdtpj62jMPQmPe1veyTGAm51nAUwx0h9zmokoEAQgZW6GJLULDbzeQkMRM/0qNq6w=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwAJzz2BM9AUIaajf9QZiaLXDY/csjwYhGv7+28ZkvfKiRwarUM 2YL2lkls46aRFZ1CMOo7JxM4pu9yyWVbUbQ/kwUw/15YujTH+GJC X-Gm-Gg: ASbGncsezzZm7nzZw7RfZSdCZyFptakd+g7h1SrS6lkRWSyemLqqq32a63IMbJ1t6Z2 QxAjUAt1Ml8GbWUzq/81Yd18XPCWwoKZY5OkqXSUnNQdZDmCvwVB6tEEp17qhIdLWNe0sDFWmmh P3t/6Ad06cvpJ2OplaMxC5w66V08XhVcUdYgKtZAn5tNuLFtznLVEEgdSHunlTif5F38OD+M2BH lXm2n3uiAcKZnNErAjNKTUiDhln4+NMUTRTD1MraBDboS/Y9zsnweiKouKdtp3EfQcX7h+MN9Rh J384wei5WH4dVqtA4mVKICMNKcgM X-Google-Smtp-Source: AGHT+IEOazIMO3dYrk+eRsHezFG2wuGzjSRuNjHFFDNYiidmpZhlQQKcv5oVveo+glrBODNV5JWyUg== X-Received: by 2002:a05:600c:46ca:b0:439:4b23:9e8e with SMTP id 5b1f17b1804b1-439ae2d1f3fmr145310205e9.3.1740506389953; Tue, 25 Feb 2025 09:59:49 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:49 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 08/16] drm/vkms: Allow to configure multiple encoders via configfs Date: Tue, 25 Feb 2025 18:59:28 +0100 Message-ID: <20250225175936.7223-9-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Create a default subgroup at /config/vkms/encoders to allow to create as many encoders as required. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: José Expósito --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 85 ++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 13b96837a266..e24767448775 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -76,6 +76,7 @@ And directories are created for each configurable item of the display pipeline:: tree /config/vkms/my-vkms ├── crtcs ├── enabled + ├── encoders └── planes To add items to the display pipeline, create one or more directories under the @@ -98,6 +99,10 @@ CRTCs have 1 configurable attribute: - writeback: Enable or disable writeback connector support by writing 1 or 0 +Next, create one or more encoders:: + + sudo mkdir /config/vkms/my-vkms/encoders/encoder0 + To finish the configuration, link the different pipeline items:: sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/plane0/possible_crtcs @@ -119,6 +124,7 @@ And removing the top level directory and its subdirectories:: sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* + sudo rmdir /config/vkms/my-vkms/encoders/* sudo rmdir /config/vkms/my-vkms Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c index 09d1f2224d01..cf865728abc2 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -18,6 +18,7 @@ static bool is_configfs_registered; * Initialized when a new directory is created under "/config/vkms/" * @planes_group: Default subgroup of @group at "/config/vkms/planes" * @crtcs_group: Default subgroup of @group at "/config/vkms/crtcs" + * @encoders_group: Default subgroup of @group at "/config/vkms/encoders" * @lock: Lock used to project concurrent access to the configuration attributes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when this @@ -27,6 +28,7 @@ struct vkms_configfs_device { struct config_group group; struct config_group planes_group; struct config_group crtcs_group; + struct config_group encoders_group; struct mutex lock; struct vkms_config *config; @@ -63,6 +65,20 @@ struct vkms_configfs_crtc { struct vkms_config_crtc *config; }; +/** + * struct vkms_configfs_encoder - Configfs representation of a encoder + * + * @group: Top level configuration group that represents a encoder. + * Initialized when a new directory is created under "/config/vkms/encoders" + * @dev: The vkms_configfs_device this encoder belongs to + * @config: Configuration of the VKMS encoder + */ +struct vkms_configfs_encoder { + struct config_group group; + struct vkms_configfs_device *dev; + struct vkms_config_encoder *config; +}; + #define device_item_to_vkms_configfs_device(item) \ container_of(to_config_group((item)), struct vkms_configfs_device, \ group) @@ -80,6 +96,10 @@ struct vkms_configfs_crtc { #define crtc_item_to_vkms_configfs_crtc(item) \ container_of(to_config_group((item)), struct vkms_configfs_crtc, group) +#define encoder_item_to_vkms_configfs_encoder(item) \ + container_of(to_config_group((item)), struct vkms_configfs_encoder, \ + group) + static ssize_t crtc_writeback_show(struct config_item *item, char *page) { struct vkms_configfs_crtc *crtc; @@ -333,6 +353,67 @@ static const struct config_item_type plane_group_type = { .ct_owner = THIS_MODULE, }; +static void encoder_release(struct config_item *item) +{ + struct vkms_configfs_encoder *encoder; + struct mutex *lock; + + encoder = encoder_item_to_vkms_configfs_encoder(item); + lock = &encoder->dev->lock; + + guard(mutex)(lock); + vkms_config_destroy_encoder(encoder->dev->config, encoder->config); + kfree(encoder); +} + +static struct configfs_item_operations encoder_item_operations = { + .release = &encoder_release, +}; + +static const struct config_item_type encoder_item_type = { + .ct_item_ops = &encoder_item_operations, + .ct_owner = THIS_MODULE, +}; + +static struct config_group *make_encoder_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_encoder *encoder; + + dev = child_group_to_vkms_configfs_device(group); + + guard(mutex)(&dev->lock); + + if (dev->enabled) + return ERR_PTR(-EBUSY); + + encoder = kzalloc(sizeof(*encoder), GFP_KERNEL); + if (!encoder) + return ERR_PTR(-ENOMEM); + + encoder->dev = dev; + + encoder->config = vkms_config_create_encoder(dev->config); + if (IS_ERR(encoder->config)) { + kfree(encoder); + return ERR_CAST(encoder->config); + } + + config_group_init_type_name(&encoder->group, name, &encoder_item_type); + + return &encoder->group; +} + +static struct configfs_group_operations encoders_group_operations = { + .make_group = &make_encoder_group, +}; + +static const struct config_item_type encoder_group_type = { + .ct_group_ops = &encoders_group_operations, + .ct_owner = THIS_MODULE, +}; + static ssize_t device_enabled_show(struct config_item *item, char *page) { struct vkms_configfs_device *dev; @@ -433,6 +514,10 @@ static struct config_group *make_device_group(struct config_group *group, &crtc_group_type); configfs_add_default_group(&dev->crtcs_group, &dev->group); + config_group_init_type_name(&dev->encoders_group, "encoders", + &encoder_group_type); + configfs_add_default_group(&dev->encoders_group, &dev->group); + return &dev->group; } From patchwork Tue Feb 25 17:59:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990428 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 51AD0C021B8 for ; Tue, 25 Feb 2025 18:00:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 79B3B10E784; Tue, 25 Feb 2025 18:00:13 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="bVrGxqzF"; dkim-atps=neutral Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) by gabe.freedesktop.org (Postfix) with ESMTPS id D2EFC10E6EE for ; Tue, 25 Feb 2025 17:59:52 +0000 (UTC) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4399a1eada3so51838805e9.2 for ; Tue, 25 Feb 2025 09:59:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506391; x=1741111191; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9ERnhTJ83jS9HrIxUIwFbH0bG0W+iXLYtduz4GOdzo4=; b=bVrGxqzF653TYspgxkj2mMCzgegGMgTTXnjmsGTH5lLVIF4jQzaT+rOGlNV9ptnDH+ lBXz1OYizYhpC3cv8AWR8e+gwUo/Tw7o28jnjo0+UwNCNIwQpgRFeouMrl9zFew0piFP 8sblxNLqSWmemaeEHxwQLBQ/SFuy2bz6RfYb6evh9O2xPaVSenAYSb/P95HeZm+olfrR G0PZbbwmXLqVss8r+RuRsApK4VlI2BfJzVwHcNBAemxPDkKFB+l5QNh4EQ0z+nkKsKUP j+sTvPElGaySnBU9F6CpIyK8/ySybIM/0xEevISzrvatatsRu2Tjy2tS1gFzblIZlWqN Qj3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506391; x=1741111191; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9ERnhTJ83jS9HrIxUIwFbH0bG0W+iXLYtduz4GOdzo4=; b=rRcz14d6kQnFxEYgnPzEbqPhii1d570b7N5eAv3QHUfQQKGxvddkBxsVvo6PLbKeDc nrKUAAvd5XxlgZSL/oy3hdo2ZSwwKPWvpQLSzmT5Wn4lG39caIbgY35ra5UiXWPOT2z5 2Y4jV2whNvPwvKRLSbX33QJcu4FYWDqhVbOsXSYJaIOX2zA9WrIOJE3WEC6K6HKEmW91 gOc2j4qO2ZxChHjxRozpmtqewlCDKCdH8ZE0SceKcMaLQlhA6lo8awQQZv6+qSoN7gmF LDRSuw5xYStMQGcApSPNwUx1cIYiX2x+uDRPvYeo15ozxxclRql1fOnhHiDmNbZI+qjH NhwQ== X-Forwarded-Encrypted: i=1; AJvYcCVTpZ+cFkEn2n67IAn85fybCT6xkZfFYSH+GWeyyNC0TMZzoJhDjnqfik+OhrOpKLPLHl6KzRHslD0=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwTGP5DCaTKp/urUkvFEqbMgzWvTw1KqfBwi+FOXIVO/z7O06Bu Vqa1mu/G8u5dC2TGsrPMMwn6VnqYRm5QpFzZJfF0PtSTLmeF2HlK X-Gm-Gg: ASbGncvGninElV+SIsI0dO3LVvNzwnb/Ux4yomAJA7uWl/kiguyt+a7jNdo/DblMwjg HG8xB+svHAcdy3+OBPYEFb3HcLJ/q9KnFPuIv1Wprdq4AtqvpU8J7Z+AdTiCqEOz8L4lIYjtQ+v mVrOuEnQ+9NIWIglYyrY9zaU03fwYEERmeJi4hMxCxVGkLLv2L4py1XaRMXqHovYHXK7xycHOVo usDFA4DE4wt8/Y9nDqMggJ20g74PpeAaDmymu6zLAU7XySACCOY87XnSlcaEQYTukLNtk3q6YyZ QYkSvKhUiwPHtf5iiDnrKkZaXc8W X-Google-Smtp-Source: AGHT+IHCWQpZfQj2ZmqqchJwQSTf4iypFQkgwB0Olxc8jlH2dpN0x4GiKPXIgyo4G4hwCub03XS22A== X-Received: by 2002:a05:600c:4f86:b0:439:967b:46fc with SMTP id 5b1f17b1804b1-43ab8fd73f2mr4044375e9.8.1740506391126; Tue, 25 Feb 2025 09:59:51 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:50 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 09/16] drm/vkms: Allow to attach encoders and CRTCs via configfs Date: Tue, 25 Feb 2025 18:59:29 +0100 Message-ID: <20250225175936.7223-10-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Create a default subgroup at /config/vkms/encoders/encoder/possible_crtcs that will contain symbolic links to the possible CRTCs for the encoder. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: José Expósito --- Documentation/gpu/vkms.rst | 2 + drivers/gpu/drm/vkms/vkms_configfs.c | 55 ++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index e24767448775..650dbfa76f59 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -106,6 +106,7 @@ Next, create one or more encoders:: To finish the configuration, link the different pipeline items:: sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/plane0/possible_crtcs + sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/encoders/encoder0/possible_crtcs Since at least one primary plane is required, make sure to set the right type:: @@ -122,6 +123,7 @@ Finally, you can remove the VKMS instance disabling it:: And removing the top level directory and its subdirectories:: sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* + sudo rm /config/vkms/my-vkms/encoders/*/possible_crtcs/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms/encoders/* diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c index cf865728abc2..64aa10cd3156 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -70,11 +70,13 @@ struct vkms_configfs_crtc { * * @group: Top level configuration group that represents a encoder. * Initialized when a new directory is created under "/config/vkms/encoders" + * @possible_crtcs_group: Default subgroup of @group at "encoder/possible_crtcs" * @dev: The vkms_configfs_device this encoder belongs to * @config: Configuration of the VKMS encoder */ struct vkms_configfs_encoder { struct config_group group; + struct config_group possible_crtcs_group; struct vkms_configfs_device *dev; struct vkms_config_encoder *config; }; @@ -100,6 +102,10 @@ struct vkms_configfs_encoder { container_of(to_config_group((item)), struct vkms_configfs_encoder, \ group) +#define encoder_possible_crtcs_item_to_vkms_configfs_encoder(item) \ + container_of(to_config_group((item)), struct vkms_configfs_encoder, \ + possible_crtcs_group) + static ssize_t crtc_writeback_show(struct config_item *item, char *page) { struct vkms_configfs_crtc *crtc; @@ -353,6 +359,49 @@ static const struct config_item_type plane_group_type = { .ct_owner = THIS_MODULE, }; +static int encoder_possible_crtcs_allow_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_encoder *encoder; + struct vkms_configfs_crtc *crtc; + + if (target->ci_type != &crtc_item_type) + return -EINVAL; + + encoder = encoder_possible_crtcs_item_to_vkms_configfs_encoder(src); + crtc = crtc_item_to_vkms_configfs_crtc(target); + + guard(mutex)(&encoder->dev->lock); + + if (encoder->dev->enabled) + return -EBUSY; + + return vkms_config_encoder_attach_crtc(encoder->config, crtc->config); +} + +static void encoder_possible_crtcs_drop_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_encoder *encoder; + struct vkms_configfs_crtc *crtc; + + encoder = encoder_possible_crtcs_item_to_vkms_configfs_encoder(src); + crtc = crtc_item_to_vkms_configfs_crtc(target); + + guard(mutex)(&encoder->dev->lock); + vkms_config_encoder_detach_crtc(encoder->config, crtc->config); +} + +static struct configfs_item_operations encoder_possible_crtcs_item_operations = { + .allow_link = encoder_possible_crtcs_allow_link, + .drop_link = encoder_possible_crtcs_drop_link, +}; + +static const struct config_item_type encoder_possible_crtcs_group_type = { + .ct_item_ops = &encoder_possible_crtcs_item_operations, + .ct_owner = THIS_MODULE, +}; + static void encoder_release(struct config_item *item) { struct vkms_configfs_encoder *encoder; @@ -402,6 +451,12 @@ static struct config_group *make_encoder_group(struct config_group *group, config_group_init_type_name(&encoder->group, name, &encoder_item_type); + config_group_init_type_name(&encoder->possible_crtcs_group, + "possible_crtcs", + &encoder_possible_crtcs_group_type); + configfs_add_default_group(&encoder->possible_crtcs_group, + &encoder->group); + return &encoder->group; } From patchwork Tue Feb 25 17:59:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990429 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 96EAFC021BE for ; Tue, 25 Feb 2025 18:00:15 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 943B010E787; Tue, 25 Feb 2025 18:00:13 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Qn3H1HqM"; dkim-atps=neutral Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) by gabe.freedesktop.org (Postfix) with ESMTPS id CB58D10E6EE for ; Tue, 25 Feb 2025 17:59:53 +0000 (UTC) Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-4399ee18a57so362735e9.1 for ; Tue, 25 Feb 2025 09:59:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506392; x=1741111192; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0WseHHM1e/WuDgTg/fwsfkleyEd/vJ3pyq4Ce8rsGHo=; b=Qn3H1HqMe4BKymNIfsKvPiv4GCFRfwypG67GzXU1f2X2+qDzAAxqZp+qyZvuGWhmwc lHfwtIN64zPvV9Pfw1KhwQhzZsc29mdX6ga3Zi2e+XCLa9qUa27LG8px0JA6MBF2VlZs J7uU0g+Bx5/Rt2ZMtAuq/IcBsL8RMcH2roIaEndsTJEGaCxCI7QuQMGvJm/WRGg5n4K+ xTOgefhCaCSDCOWm75g54KXltbUdNl6DkXrErH2U8wEcxurDqo5reoybnx33/BzKDVF/ OQ3CXP/H9NOt2vLZgSrP4ZVOc0per/sq71fuKl89Za97s0K01T4hPS9nr6fwniXmAkkq g+KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506392; x=1741111192; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0WseHHM1e/WuDgTg/fwsfkleyEd/vJ3pyq4Ce8rsGHo=; b=D6yHeHD0AUlakQ28EdVLFNtZ16PiKEoXTgeNYqMIuugDvrPjPb81fHyGQk+/swNxpt FNccWFua8DTm+tRz6Xd/UwxKzNG/QjuzXbjeKW/R0OQF7LuxSxyhIYv0I5Zi0TJWZUm0 KR8MSI0fPmgKzBUfcN+XcNovwdkhPxds6lDAKkFwSU1iSu0HW29pPWOJrxFimatUSDRZ IDQYFQ1Gn5jArazBO6K7jUHRhQr8KVwUgH+hFknBrr1AaobAtOjseh/nV5XQtreJxU+P k8y8hD2xbZgNDlp16yviRSqhD7CfDaiWNk1CFrkovfpXGlmfj5XU0bo8oLKsLld1Xx9U ApNg== X-Forwarded-Encrypted: i=1; AJvYcCVLE55YTgQe9qQF/ss+pqRreFPkSMiVNp9jdt/6d8slCqXWnoDBFUkPwmyuPAN/lsTPrrtlfTFf/KY=@lists.freedesktop.org X-Gm-Message-State: AOJu0YxlRXAI4sOsCcyFl2wzX5Ags1dDQGC46hNWv4RmCLv9jfH/sDtu hVk7WYZSe5H/l/d3opEYOHX5bXjkQ2nZ9KPlnorpjAmy/bUHSHnd X-Gm-Gg: ASbGncuhUBvfydBTd/ldUTZRV91YDowDIbDJ1Dbq50roLGtJ+mF2HtfcwpAmNAJl5n5 FUH+Rdv5mPRpyjfC53/ekciprNS2WOVGgOJ0vzzyMJ9HktHoPYyWGaLjOIZ9V/+RcyH9xwI6plr Jcqvfy2V81eWdBXpq9F4uU44kABsJGt2fmpMxWq0r8rjSGy+rhiiftDLO/CAO7PIr+ADHCoos2V krHhRl4AJPaYCo/ytc7w5ih2lCuMnXifrmPRD0MQxY4Kb3uszIUX7D2LCa2KcDTy5qWzyonRcpl 78naXKWUFxYYi0q0qO3daR0BK5cc X-Google-Smtp-Source: AGHT+IFMAiFjDJbbuzZZaSIag4FnPbXCSWUSYHSMiX/Uiybv87JNBZ27yyUVQxEKr+V2yQ7kikWXmw== X-Received: by 2002:a05:600c:88a:b0:439:91c7:895a with SMTP id 5b1f17b1804b1-439a30af6edmr185928635e9.7.1740506392239; Tue, 25 Feb 2025 09:59:52 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:51 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 10/16] drm/vkms: Allow to configure multiple connectors via configfs Date: Tue, 25 Feb 2025 18:59:30 +0100 Message-ID: <20250225175936.7223-11-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Create a default subgroup at /config/vkms/connectors to allow to create as many connectors as required. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: José Expósito --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 86 ++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 650dbfa76f59..744e2355db23 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -74,6 +74,7 @@ By default, the instance is disabled:: And directories are created for each configurable item of the display pipeline:: tree /config/vkms/my-vkms + ├── connectors ├── crtcs ├── enabled ├── encoders @@ -103,6 +104,10 @@ Next, create one or more encoders:: sudo mkdir /config/vkms/my-vkms/encoders/encoder0 +Last but not least, create one or more connectors:: + + sudo mkdir /config/vkms/my-vkms/connectors/connector0 + To finish the configuration, link the different pipeline items:: sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/plane0/possible_crtcs @@ -127,6 +132,7 @@ And removing the top level directory and its subdirectories:: sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms/encoders/* + sudo rmdir /config/vkms/my-vkms/connectors/* sudo rmdir /config/vkms/my-vkms Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c index 64aa10cd3156..bcbf91fbcd44 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -19,6 +19,7 @@ static bool is_configfs_registered; * @planes_group: Default subgroup of @group at "/config/vkms/planes" * @crtcs_group: Default subgroup of @group at "/config/vkms/crtcs" * @encoders_group: Default subgroup of @group at "/config/vkms/encoders" + * @connectors_group: Default subgroup of @group at "/config/vkms/connectors" * @lock: Lock used to project concurrent access to the configuration attributes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when this @@ -29,6 +30,7 @@ struct vkms_configfs_device { struct config_group planes_group; struct config_group crtcs_group; struct config_group encoders_group; + struct config_group connectors_group; struct mutex lock; struct vkms_config *config; @@ -81,6 +83,20 @@ struct vkms_configfs_encoder { struct vkms_config_encoder *config; }; +/** + * struct vkms_configfs_connector - Configfs representation of a connector + * + * @group: Top level configuration group that represents a connector. + * Initialized when a new directory is created under "/config/vkms/connectors" + * @dev: The vkms_configfs_device this connector belongs to + * @config: Configuration of the VKMS connector + */ +struct vkms_configfs_connector { + struct config_group group; + struct vkms_configfs_device *dev; + struct vkms_config_connector *config; +}; + #define device_item_to_vkms_configfs_device(item) \ container_of(to_config_group((item)), struct vkms_configfs_device, \ group) @@ -106,6 +122,10 @@ struct vkms_configfs_encoder { container_of(to_config_group((item)), struct vkms_configfs_encoder, \ possible_crtcs_group) +#define connector_item_to_vkms_configfs_connector(item) \ + container_of(to_config_group((item)), struct vkms_configfs_connector, \ + group) + static ssize_t crtc_writeback_show(struct config_item *item, char *page) { struct vkms_configfs_crtc *crtc; @@ -469,6 +489,68 @@ static const struct config_item_type encoder_group_type = { .ct_owner = THIS_MODULE, }; +static void connector_release(struct config_item *item) +{ + struct vkms_configfs_connector *connector; + struct mutex *lock; + + connector = connector_item_to_vkms_configfs_connector(item); + lock = &connector->dev->lock; + + guard(mutex)(lock); + vkms_config_destroy_connector(connector->config); + kfree(connector); +} + +static struct configfs_item_operations connector_item_operations = { + .release = &connector_release, +}; + +static const struct config_item_type connector_item_type = { + .ct_item_ops = &connector_item_operations, + .ct_owner = THIS_MODULE, +}; + +static struct config_group *make_connector_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_connector *connector; + + dev = child_group_to_vkms_configfs_device(group); + + guard(mutex)(&dev->lock); + + if (dev->enabled) + return ERR_PTR(-EBUSY); + + connector = kzalloc(sizeof(*connector), GFP_KERNEL); + if (!connector) + return ERR_PTR(-ENOMEM); + + connector->dev = dev; + + connector->config = vkms_config_create_connector(dev->config); + if (IS_ERR(connector->config)) { + kfree(connector); + return ERR_CAST(connector->config); + } + + config_group_init_type_name(&connector->group, name, + &connector_item_type); + + return &connector->group; +} + +static struct configfs_group_operations connectors_group_operations = { + .make_group = &make_connector_group, +}; + +static const struct config_item_type connector_group_type = { + .ct_group_ops = &connectors_group_operations, + .ct_owner = THIS_MODULE, +}; + static ssize_t device_enabled_show(struct config_item *item, char *page) { struct vkms_configfs_device *dev; @@ -573,6 +655,10 @@ static struct config_group *make_device_group(struct config_group *group, &encoder_group_type); configfs_add_default_group(&dev->encoders_group, &dev->group); + config_group_init_type_name(&dev->connectors_group, "connectors", + &connector_group_type); + configfs_add_default_group(&dev->connectors_group, &dev->group); + return &dev->group; } From patchwork Tue Feb 25 17:59:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990424 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0A4D9C021BE for ; Tue, 25 Feb 2025 18:00:05 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1E06210E724; Tue, 25 Feb 2025 18:00:04 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="e4xmTF3m"; dkim-atps=neutral Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) by gabe.freedesktop.org (Postfix) with ESMTPS id E409510E6EE for ; Tue, 25 Feb 2025 17:59:54 +0000 (UTC) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43996e95114so39389545e9.3 for ; Tue, 25 Feb 2025 09:59:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506393; x=1741111193; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=aWiThvun9v9oBFVV2WdtDnI+lemWxWkbnKGuQol7/Nk=; b=e4xmTF3mkw8GNd1WN8L/LCZIhg6DEkE0gIb0YwN6syWlY6sFF+904RmoDDjQyHqeFO JjdCKN7xGbBvIuKvJZMCakEo95QJ0i2cxHaPsjsOzuqo3zQrDKrCItwc4snQTMRTusfb Q6edwTnKcAH4R9EXJlytpmKNfB88fLaBnyoxDBYyoVJw/+Ok6L3U4pKvujkifTOn3RxM cQe6ALwpEjKvuF/Mb00SHXhXM4PTQ+Dy7wZeIO4R/UMyFXifqMAsPeLtT3Z0K670oe0C Bi1XBIJoLwVG4RBrnHXktUaP+mc5p7EjKGZkjF7Y0ngCaugT4Pb1N+rGGqFMJXQ41FeS sMYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506393; x=1741111193; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=aWiThvun9v9oBFVV2WdtDnI+lemWxWkbnKGuQol7/Nk=; b=UNcacylLCeCO+qqS+wpZ2CFgGfjL6ZG1DZX/TsPjyggytdr7Mcm1VdKJIIkIiPl7ru Lz4PvQd5QJV3d4eEiPs32BpviLGHMgE/MpcYQ1J3F6NzKrplYjiNFDjqkCBv1xyx6Eo8 ILN90e1zpc3OgBnLdShPwQtyDN11MoWodunmMHEyc4eCPKiG1IGpeiXEpTHX1qDqVR/H 7tXH3XzIePyuA/ofObLVK+2JwVJ/Fk5dBBTu9Aog6tKSrHZ/prz+lMwOpdnYCb49s6sD OmnpRgRuyrPvut9Ypp7oq5bMp0JUdZIhxuif7+P0FfQSrcTCnTZqwDZLQONKfuv7uuEq 6zlw== X-Forwarded-Encrypted: i=1; AJvYcCXZtG2i0ZTCRNFEGXS9IMxtQcGTtdi3ovbRwq3r+LtChiGS9e2hldajtJnhF1NioCaVcYWp/CfGf/Y=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yyq5W0PW87Gt8xDJ6UROmmn1PYVvLDF8+B7OdQ2D0LuILmuimaC bgbrIlI1cRWVq/vS7YmqkG+z32WvjPpfsRnmKbsSwG0hGRMphgNp X-Gm-Gg: ASbGncs0HjshxZpe0nijZqihIzy4M11nlBP9OndzM9DXAkpxvBK4BWxXLSkM7yeZ9Ph guw/2IXMbW/3EzXW6c73CcJ2xaeJ5THmDyqx6X7AO4Q/9/Q4HbcFO5G/Hys9n9ndBzT15R47LiK aF07rPggjrXkkI4nXLt3WhevUuLuo24F5JgRh9xBqmlrrW9tjG/ukROJUuy7p1GDBq3x3+1ThAd 1P3j60ypA5ii2jgAMpydSjgyyd8UgtpXJWDM3Hy+NkF2GwLuJDvX+MZiTE4I5qABHgBzmbgefA9 tCOp4byX4GYD6EQPUcSZZWDVc19K X-Google-Smtp-Source: AGHT+IG/QEmeDgGP8pEbID7bpFqeuH4nVI6f0hc07wTpQeF5+mhgQ8WHTlsm2+zkpyEBsYCIYCDp0w== X-Received: by 2002:a05:600c:19ce:b0:439:94ef:3766 with SMTP id 5b1f17b1804b1-439aebc3138mr147139015e9.19.1740506393230; Tue, 25 Feb 2025 09:59:53 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:52 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 11/16] drm/vkms: Allow to attach connectors and encoders via configfs Date: Tue, 25 Feb 2025 18:59:31 +0100 Message-ID: <20250225175936.7223-12-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Create a default subgroup at /config/vkms/connectors/connector/possible_encoders that will contain symbolic links to the possible encoders for the connector. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: José Expósito --- Documentation/gpu/vkms.rst | 2 + drivers/gpu/drm/vkms/vkms_configfs.c | 58 ++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 744e2355db23..74126d2e32e4 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -112,6 +112,7 @@ To finish the configuration, link the different pipeline items:: sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/plane0/possible_crtcs sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/encoders/encoder0/possible_crtcs + sudo ln -s /config/vkms/my-vkms/encoders/encoder0 /config/vkms/my-vkms/connectors/connector0/possible_encoders Since at least one primary plane is required, make sure to set the right type:: @@ -129,6 +130,7 @@ And removing the top level directory and its subdirectories:: sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* sudo rm /config/vkms/my-vkms/encoders/*/possible_crtcs/* + sudo rm /config/vkms/my-vkms/connectors/*/possible_encoders/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms/encoders/* diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c index bcbf91fbcd44..d4d36d2c8f3d 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -88,11 +88,14 @@ struct vkms_configfs_encoder { * * @group: Top level configuration group that represents a connector. * Initialized when a new directory is created under "/config/vkms/connectors" + * @possible_encoders_group: Default subgroup of @group at + * "connector/possible_encoders" * @dev: The vkms_configfs_device this connector belongs to * @config: Configuration of the VKMS connector */ struct vkms_configfs_connector { struct config_group group; + struct config_group possible_encoders_group; struct vkms_configfs_device *dev; struct vkms_config_connector *config; }; @@ -126,6 +129,10 @@ struct vkms_configfs_connector { container_of(to_config_group((item)), struct vkms_configfs_connector, \ group) +#define connector_possible_encoders_item_to_vkms_configfs_connector(item) \ + container_of(to_config_group((item)), struct vkms_configfs_connector, \ + possible_encoders_group) + static ssize_t crtc_writeback_show(struct config_item *item, char *page) { struct vkms_configfs_crtc *crtc; @@ -511,6 +518,51 @@ static const struct config_item_type connector_item_type = { .ct_owner = THIS_MODULE, }; +static int connector_possible_encoders_allow_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_connector *connector; + struct vkms_configfs_encoder *encoder; + + if (target->ci_type != &encoder_item_type) + return -EINVAL; + + connector = connector_possible_encoders_item_to_vkms_configfs_connector(src); + encoder = encoder_item_to_vkms_configfs_encoder(target); + + guard(mutex)(&connector->dev->lock); + + if (connector->dev->enabled) + return -EBUSY; + + return vkms_config_connector_attach_encoder(connector->config, + encoder->config); +} + +static void connector_possible_encoders_drop_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_connector *connector; + struct vkms_configfs_encoder *encoder; + + connector = connector_possible_encoders_item_to_vkms_configfs_connector(src); + encoder = encoder_item_to_vkms_configfs_encoder(target); + + guard(mutex)(&connector->dev->lock); + vkms_config_connector_detach_encoder(connector->config, + encoder->config); +} + +static struct configfs_item_operations connector_possible_encoders_item_operations = { + .allow_link = connector_possible_encoders_allow_link, + .drop_link = connector_possible_encoders_drop_link, +}; + +static const struct config_item_type connector_possible_encoders_group_type = { + .ct_item_ops = &connector_possible_encoders_item_operations, + .ct_owner = THIS_MODULE, +}; + static struct config_group *make_connector_group(struct config_group *group, const char *name) { @@ -539,6 +591,12 @@ static struct config_group *make_connector_group(struct config_group *group, config_group_init_type_name(&connector->group, name, &connector_item_type); + config_group_init_type_name(&connector->possible_encoders_group, + "possible_encoders", + &connector_possible_encoders_group_type); + configfs_add_default_group(&connector->possible_encoders_group, + &connector->group); + return &connector->group; } From patchwork Tue Feb 25 17:59:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990427 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 43FF5C18E7C for ; Tue, 25 Feb 2025 18:00:16 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C1D3210E788; Tue, 25 Feb 2025 18:00:13 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="DAQS234X"; dkim-atps=neutral Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) by gabe.freedesktop.org (Postfix) with ESMTPS id F07CB10E6EE for ; Tue, 25 Feb 2025 17:59:55 +0000 (UTC) Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-4399d14334aso52021035e9.0 for ; Tue, 25 Feb 2025 09:59:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506394; x=1741111194; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zIdjBnojDe9JlRJkQtXkq6PiLeEhZjPQxZt/O+Cfesg=; b=DAQS234X21iJx4/WMVP3FsirgwB+05ytsU+AB2ySSxQkfjmQKR719/48rZgdeowiLr vUUsb2nFgJDYrUU8oXMDprqDNYJR48nQl2lW/3ckmXWimNFz+iEAyyII+eNVZYpIoFwm 1DH0yss+PSe1RUwsJOcr7ObfnZyVmIAo6SfywR8S2ofT52Y8Xi0G4KHq1o9nxaZE3ilF M97T8Oloj4CgC4b+pq98uz43PNdTbnMYCE51BD0n/WyjS+PwHRBn4yIoLHQ5fcIrQML7 IG22SU/kLsCyxoy+tzEre8iG+BEM4xX9UOehZ7U9yDq2zuVsoNpaGktKcbO/FCflznCu cXXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506394; x=1741111194; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zIdjBnojDe9JlRJkQtXkq6PiLeEhZjPQxZt/O+Cfesg=; b=Xb2nOSj0Sk927ZrWRypgZP32+VRXB6XkRvtWxhqYdLfb/MA5mARH8Yd2QU4YI1RhK1 rzuKvOlox2uIU1JW5ffgZWne4Txj17y8DwmCAmxnxqoj21sKy425lzjleZU8Gn1AkvRX 1NiuCOM/3JN+uuJiABNfLFbh9BD2d1yA3Fp+/+gbNoZ7PxKEDBmvONQFP6IKQWKNCQYJ pb7dhcBSD9wylS4Zm6H2EJN0YnA8Mqt1Kb/22Fvi8DpcrT2IvB4om5er4js7u0Lief+R 3KkE4JXkNmx5LKOPTVCRKPxs3IFdjIhN2zE1kgq9ZZEC6dI9xdJZJgbjJZv+K8bY7Pot aWmg== X-Forwarded-Encrypted: i=1; AJvYcCVUe1koJxEXRz4z/BQI7671+cWXfWHo7mWjZzaTENi2kLYRLxW8KVkWXd/JDZmQP6RoXUrz7GQwaIU=@lists.freedesktop.org X-Gm-Message-State: AOJu0YzehYlL7CCukvn31yO+MVhkY7X5ZOHDDRAp/pDl2JHeJRN7agdQ /2/6XFUdEeXeT72/PEDrYtc60I5eYuOtdKX5t4ciTKG20wlpksG2 X-Gm-Gg: ASbGnctnmETu7kiwLKGSMt53LqS0hWPzmZFS4oMvCXH+cCsL7YCBORXrfuf7lJIBXBd WuYqGkfMSSALJJszsjXYKc/yxElA2Lb1vWIxzRc4676vHx5SWh/CpRdr74EzlVoNjZ2+tJlQYIL Y/MTxge+BxjHNi0Tr9sdE0SFtaPnf2BpLcR11FTmdH09EVmey7i7ojBdInrmeemAMy4etuUr8Vq CZNTdRcHPmZ1WUAmK3UPt8YpPV92+1LaOT5bCP+pVd02l6ExhUsIXXn4THK24ZBQEWwKfrvXbLl XTGkkUbMlAC8rgsBotIm1e3+sG2R X-Google-Smtp-Source: AGHT+IEDK6mCAOgu8hG/ZIDX6sti+i4PgULEycQ5M/TU5713F8zbTbDTErKhL+ginH4PGoNCQwXC+A== X-Received: by 2002:a5d:68cc:0:b0:38f:330a:acbc with SMTP id ffacd0b85a97d-390d4fb02b6mr136963f8f.54.1740506394420; Tue, 25 Feb 2025 09:59:54 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:53 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 12/16] drm/vkms: Allow to configure the default device creation Date: Tue, 25 Feb 2025 18:59:32 +0100 Message-ID: <20250225175936.7223-13-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Add a new module param to allow to create or not the default VKMS instance. Useful when combined with configfs to avoid having additional VKMS instances. Reviewed-by: Louis Chauvet Signed-off-by: José Expósito --- drivers/gpu/drm/vkms/vkms_drv.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c index 5bcfbcb6c0c5..b4ed19c97576 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -50,6 +50,10 @@ static bool enable_overlay; module_param_named(enable_overlay, enable_overlay, bool, 0444); MODULE_PARM_DESC(enable_overlay, "Enable/Disable overlay support"); +static bool create_default_dev = true; +module_param_named(create_default_dev, create_default_dev, bool, 0444); +MODULE_PARM_DESC(create_default_dev, "Create or not the default VKMS device"); + DEFINE_DRM_GEM_FOPS(vkms_driver_fops); static void vkms_atomic_commit_tail(struct drm_atomic_state *old_state) @@ -219,6 +223,9 @@ static int __init vkms_init(void) if (ret) return ret; + if (!create_default_dev) + return 0; + config = vkms_config_default_create(enable_cursor, enable_writeback, enable_overlay); if (IS_ERR(config)) return PTR_ERR(config); From patchwork Tue Feb 25 17:59:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990425 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 18174C021BB for ; Tue, 25 Feb 2025 18:00:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5DF8A10E77A; Tue, 25 Feb 2025 18:00:13 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="JzO5zpZt"; dkim-atps=neutral Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1283010E77A for ; Tue, 25 Feb 2025 17:59:57 +0000 (UTC) Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-439a1e8ba83so56429155e9.3 for ; Tue, 25 Feb 2025 09:59:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506395; x=1741111195; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=g2I+AKiUaGilJvwS/f5X1LlsvDutZk3cs9KHKo4vYS0=; b=JzO5zpZtL6FqlISwqYvnjPCtwTzs8y0W6yuU+W6RsNtgE75bUlQVrFMgixXWPdkwHZ vjWp1pz0PWBZIXPsJtuks1/kgggaEx3sGloJopHCE9MjOgoHbwyEkymsp0ivZpWQRp+K xBBKgxylhNivRjDpNwTlTLMFCUM3RxzJfOl7hCRef1/y0WTnVcNSgiGRirf8tAdTQ1gT Yg0m7Cfv47rCyV9o4liVt7DeaT7o8pR6xCKJUScTZz4lkPIBx/xFPI7bZbDlZXJyyFra XDTBHtUedB5A6bmm73Qg7DbILR9bbhlx52nsZuD1huZk5X6qQwdlghX0NmPWqZZTpQJ6 I/Yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506395; x=1741111195; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g2I+AKiUaGilJvwS/f5X1LlsvDutZk3cs9KHKo4vYS0=; b=vlraXZCBBUQyTG85QEFH0ME/VAKmvqVPNeQpLitK2P487O68CZuQvGBCx8PBLWn/7+ jA8YSC2ZrHbpvY4inFWzpoCpgWw7ljKdG/N8OMGoNZxUmrJCiimtpuHLW/uza7+SvGph E35Vg9FjqcADuR8RZVq6dCmrEpyXHQPqv1Y1Es3xc4J5YlVPiYAO5RP3HTyOl+gx1cZa LccOWK1VFj0CTVpTi6epSOii71qpCUKgasqgP70AeHLUBBz6Wh+Zmsi6JbVujFgAgFo4 0We5QTkVVPag6wHWNN4YJ7C9tq1Ygm0Yc7f6B2gB8Eik9FTqalWekfoI6dbfHUqfDAu5 XftQ== X-Forwarded-Encrypted: i=1; AJvYcCWX2F1SfSAnvds+GqcYqcHyaL/ob0pXKhByhH34MsAQVtSPW7R6hAA5d3Yg7JOIxSRw6oSj5I19IlU=@lists.freedesktop.org X-Gm-Message-State: AOJu0YyioiOpT8LwTjDLPEgcslOv8PjnlofOCOiWXIu3LpAvp5nA9CfT xqFk+Nbqzt+xJ4+Ub1a4+RpONKSYhQm8UwAsUvnb3atqmG/Kl93F X-Gm-Gg: ASbGncuj8t/bKcFEv1l82ESlFlLzj5XBckjh2lSA4RS4K4sYTUKPfoGNYpRDfp3QTKx IDTvItS/6Z4I5GggcGA0fCSNUEy0j6nZ8C9iObQrE2Eh+e8HoTAus1X/YVDsLqts1OLorekv72D PcS3VnPHb0B2IYLt4j+yxqAtI2jFcfuigvOwXWftD+7/SjxwUgBX1eUjUUogjKUk5D7eA12BWlt fcZBiRrPPHbL0W7U96s44vsC49dwJJsgwhJ7/Fj3HSdUiEM4KT4QROtlM7z5mHzw8YxhsX3/6Ai XUYOzHd4FqnWI2Cefj1j4skKxsxR X-Google-Smtp-Source: AGHT+IFXeUWeTF6dXkp/wlfC8bPpRknIuSG+G1DBxyLoGn/dLvboeFM7RCjs+ZLYjnsXSSYydGev3g== X-Received: by 2002:a5d:6dae:0:b0:38f:2481:a6a3 with SMTP id ffacd0b85a97d-38f7079a3a9mr16896866f8f.18.1740506395455; Tue, 25 Feb 2025 09:59:55 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:55 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 13/16] drm/vkms: Remove completed task from the TODO list Date: Tue, 25 Feb 2025 18:59:33 +0100 Message-ID: <20250225175936.7223-14-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Remove the configfs related TODO items from the "Runtime Configuration" section. Reviewed-by: Louis Chauvet Signed-off-by: José Expósito --- Documentation/gpu/vkms.rst | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 74126d2e32e4..c551241fe873 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -222,21 +222,14 @@ Runtime Configuration --------------------- We want to be able to reconfigure vkms instance without having to reload the -module. Use/Test-cases: +module through configfs. Use/Test-cases: - Hotplug/hotremove connectors on the fly (to be able to test DP MST handling of compositors). -- Configure planes/crtcs/connectors (we'd need some code to have more than 1 of - them first). - - Change output configuration: Plug/unplug screens, change EDID, allow changing the refresh rate. -The currently proposed solution is to expose vkms configuration through -configfs. All existing module options should be supported through configfs -too. - Writeback support ----------------- From patchwork Tue Feb 25 17:59:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990423 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 06756C021BB for ; Tue, 25 Feb 2025 18:00:05 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4885C10E77C; Tue, 25 Feb 2025 18:00:04 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Z3kI3CPY"; dkim-atps=neutral Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 22F7010E6EE for ; Tue, 25 Feb 2025 17:59:58 +0000 (UTC) Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-43989226283so40905445e9.1 for ; Tue, 25 Feb 2025 09:59:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506397; x=1741111197; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sDAURXwAx1KsBXr4riUk4MzDkYMXGUuztgEFx9hlcRg=; b=Z3kI3CPYJL+uXqzIC12cjSyDWB8obTs2HE3wh8tGk9CYm/GUursVB0qFQxa2j7bIas /xMPSPbz8Mtg1Ksz7lKNkF99yhCNcugHUWcHSfDgKSHhx/uHkyd0qISCqs7eviK3p5d2 ddr1MZvehotJ3YlK+BiauGJWydh1oiFVv1vt6iDIs65oTS4k6/Z9kNlSMC6q9oeCjTWA YxoxRQ5AdUdylkF1mRUYMo4AxPTI7htw3Yysz+XeEeQ8l8tvpVRAo7IQseW6Nj2Dxwd0 pnCr728A1WrfTv2JduMN0Th6XJZAOtK1QHKqkvXx8XbKjHHmOXbSaK9eX16y5nscJDsE gzLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506397; x=1741111197; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sDAURXwAx1KsBXr4riUk4MzDkYMXGUuztgEFx9hlcRg=; b=wocI3STm2dAQOko/Bn5elaZPEK50Egf856o0YD7HM1FAwzUVFAg7d6zZTaN1dXcGgy qAFQ5rHXh729P1t+DQuqtL8U/h625QLA3eRw9ik0PZtawG8ie77eYpJFqtq5ur+VZE4T NaTozDrTmrvn4ULEaMnvJnEZaNruxWnNDwoJXYehmmawX5zAV1jBoM0FOjqXVHExZxTq B0J1mxDH0XK01WAZS4fW7gIYB+Rvlx97Llc9Sxf9cLJcEGdc7tpp/zO4ChTYMiTkPGxK lcVDUFumNm4+TTZp3nO44q4Gvq3g0gZyXCGCvXgcsPmKVoCMosQuSIjRTI9fjfRcHwN5 w9lg== X-Forwarded-Encrypted: i=1; AJvYcCUSjIL+i071nfCtdjHFG8dccYONOkMqBMl5xqv3pPhL4PF8zb0v3fPH0Eygji4Ihn8IqfdIe+1jcNQ=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yww9OV/xOm3Kaw3XoWKlVLzIz3C9rbWM2mIcyykGuVfd6pQYl1E iYXWQpvf//McgTn8KHwcznUBFWAYZgsvWkc0LIcnlS1ywx+tR5NG X-Gm-Gg: ASbGnctxcZ35t3UhT4F98EHsEucwvoadjKRZKJshmSltoeIZCf/17WwF0wKuhZB8Uoo gMD7Gnb0SVutYmPMjPHmQ4eLJvSp8dlrcNXiricZacQ9vsafr0Lyz2+R4He4uarKpL+9NghEUuL Bnt4mCzVyYkEHRHA0DYDZ19RbS0hpm3hEulXIAEeXjPR6vzHtOI9LbOPhlb78c7cbWyKIPXk2Ls EDCnxEAlfMfklvTdBfG0dntPyhiZ0bDE59VPtFCxiUvkB/p+7GVK7vWgzS75JRhUddcGtjhGfGI RBLIo7fCOTIOC/qeNidtG5m7xO4m X-Google-Smtp-Source: AGHT+IHoNrE7lElorE2nBrogemoz9GreX5xiOI4tcL2igHg9mmoHPhzuv6lZfljM8vKeq46S3NNwkA== X-Received: by 2002:a05:600c:3582:b0:434:f131:1e64 with SMTP id 5b1f17b1804b1-439ae1e960dmr143520395e9.9.1740506396488; Tue, 25 Feb 2025 09:59:56 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:55 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 14/16] drm/vkms: Allow to configure connector status Date: Tue, 25 Feb 2025 18:59:34 +0100 Message-ID: <20250225175936.7223-15-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Allow to store the connector status in vkms_config_connector and add a getter and a setter functions as well a KUnit test. This change only adds the configuration, the connector status is not used yet. Signed-off-by: José Expósito --- drivers/gpu/drm/vkms/tests/vkms_config_test.c | 24 +++++++++++++++++ drivers/gpu/drm/vkms/vkms_config.c | 8 ++++-- drivers/gpu/drm/vkms/vkms_config.h | 26 +++++++++++++++++++ 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/vkms/tests/vkms_config_test.c b/drivers/gpu/drm/vkms/tests/vkms_config_test.c index ff4566cf9925..3574a829a6ed 100644 --- a/drivers/gpu/drm/vkms/tests/vkms_config_test.c +++ b/drivers/gpu/drm/vkms/tests/vkms_config_test.c @@ -916,6 +916,29 @@ static void vkms_config_test_connector_get_possible_encoders(struct kunit *test) vkms_config_destroy(config); } +static void vkms_config_test_connector_status(struct kunit *test) +{ + struct vkms_config *config; + struct vkms_config_connector *connector_cfg; + enum drm_connector_status status; + + config = vkms_config_create("test"); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, config); + + connector_cfg = vkms_config_create_connector(config); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, connector_cfg); + + status = vkms_config_connector_get_status(connector_cfg); + KUNIT_EXPECT_EQ(test, status, connector_status_connected); + + vkms_config_connector_set_status(connector_cfg, + connector_status_disconnected); + status = vkms_config_connector_get_status(connector_cfg); + KUNIT_EXPECT_EQ(test, status, connector_status_disconnected); + + vkms_config_destroy(config); +} + static struct kunit_case vkms_config_test_cases[] = { KUNIT_CASE(vkms_config_test_empty_config), KUNIT_CASE_PARAM(vkms_config_test_default_config, @@ -937,6 +960,7 @@ static struct kunit_case vkms_config_test_cases[] = { KUNIT_CASE(vkms_config_test_plane_get_possible_crtcs), KUNIT_CASE(vkms_config_test_encoder_get_possible_crtcs), KUNIT_CASE(vkms_config_test_connector_get_possible_encoders), + KUNIT_CASE(vkms_config_test_connector_status), {} }; diff --git a/drivers/gpu/drm/vkms/vkms_config.c b/drivers/gpu/drm/vkms/vkms_config.c index a1df5659b0fb..f8394a063ecf 100644 --- a/drivers/gpu/drm/vkms/vkms_config.c +++ b/drivers/gpu/drm/vkms/vkms_config.c @@ -361,8 +361,11 @@ static int vkms_config_show(struct seq_file *m, void *data) vkms_config_for_each_encoder(vkmsdev->config, encoder_cfg) seq_puts(m, "encoder\n"); - vkms_config_for_each_connector(vkmsdev->config, connector_cfg) - seq_puts(m, "connector\n"); + vkms_config_for_each_connector(vkmsdev->config, connector_cfg) { + seq_puts(m, "connector:\n"); + seq_printf(m, "\tstatus=%d\n", + vkms_config_connector_get_status(connector_cfg)); + } return 0; } @@ -588,6 +591,7 @@ struct vkms_config_connector *vkms_config_create_connector(struct vkms_config *c return ERR_PTR(-ENOMEM); connector_cfg->config = config; + connector_cfg->status = connector_status_connected; xa_init_flags(&connector_cfg->possible_encoders, XA_FLAGS_ALLOC); list_add_tail(&connector_cfg->link, &config->connectors); diff --git a/drivers/gpu/drm/vkms/vkms_config.h b/drivers/gpu/drm/vkms/vkms_config.h index 0118e3f99706..e202b5a84ddd 100644 --- a/drivers/gpu/drm/vkms/vkms_config.h +++ b/drivers/gpu/drm/vkms/vkms_config.h @@ -7,6 +7,8 @@ #include #include +#include + #include "vkms_drv.h" /** @@ -99,6 +101,7 @@ struct vkms_config_encoder { * * @link: Link to the others connector in vkms_config * @config: The vkms_config this connector belongs to + * @status: Status (connected, disconnected...) of the connector * @possible_encoders: Array of encoders that can be used with this connector * @connector: Internal usage. This pointer should never be considered as valid. * It can be used to store a temporary reference to a VKMS connector @@ -109,6 +112,7 @@ struct vkms_config_connector { struct list_head link; struct vkms_config *config; + enum drm_connector_status status; struct xarray possible_encoders; /* Internal usage */ @@ -434,4 +438,26 @@ int __must_check vkms_config_connector_attach_encoder(struct vkms_config_connect void vkms_config_connector_detach_encoder(struct vkms_config_connector *connector_cfg, struct vkms_config_encoder *encoder_cfg); +/** + * vkms_config_connector_get_status() - Return the status of the connector + * @connector_cfg: Connector to get the status from + */ +static inline enum drm_connector_status +vkms_config_connector_get_status(struct vkms_config_connector *connector_cfg) +{ + return connector_cfg->status; +} + +/** + * vkms_config_crtc_set_writeback() - If a writeback connector will be created + * @crtc_cfg: Target CRTC + * @writeback: Enable or disable the writeback connector + */ +static inline void +vkms_config_connector_set_status(struct vkms_config_connector *connector_cfg, + enum drm_connector_status status) +{ + connector_cfg->status = status; +} + #endif /* _VKMS_CONFIG_H_ */ From patchwork Tue Feb 25 17:59:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990431 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 05C31C021BB for ; Tue, 25 Feb 2025 18:00:18 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3686110E78A; Tue, 25 Feb 2025 18:00:14 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="bXt2rXoK"; dkim-atps=neutral Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id 495CB10E69E for ; Tue, 25 Feb 2025 17:59:59 +0000 (UTC) Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-38f29a1a93bso4753927f8f.1 for ; Tue, 25 Feb 2025 09:59:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506398; x=1741111198; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NfdjeoHNn9vAEGMDN9L94Mho5GfMjQgvCgSJKDEGohI=; b=bXt2rXoKcfauQWxwZXZ38pGQYh1rI2ap8JInlQeQwyRKaRVegsICWyfRkzJfjD+RH2 8W8rl861zsK1idLzcZZIBrm9TPNeHtLVIzWADs8mrKeF/OqyQ/e7dq8B2CyuRQKCG9F0 etqhQQZuLxUl8Il2rf++kDDIa0jbUsoa+LPETt74SS+Lgv7a/v/waHJiL6D8zh9CWdhD a1UCEwj7HJNcs9U9b9LUd4ftMEM9io05fS2sK66R7g6ps+9fag1jjgB8iMS6/rZBJgX8 IYf1famfOCgeP7qd+hf6tfWZFKCWcFT28NsS6A37tJ+o684zNWRS3I7EC9y8PrTukhXY N5PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506398; x=1741111198; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NfdjeoHNn9vAEGMDN9L94Mho5GfMjQgvCgSJKDEGohI=; b=BIAGBfhQu0NFu/t8fYuY6CmvEywOToddr0s3sPTQL9FBXSZ5ITNnl2IHuo42shpz1d RCXL3cnQL6eo5PfuN1cr87a5PIah2FcYfQeBsXBeklocN+WCuWq101CpqLqjA5TRAWxX LWbT0WDAKfZqKImmx1A9E86czRnSFpvw6NALF5e8tAHteIsnnZfs+mZ3xbo6KqOArfcw RSQbgSpyWoBpZmvudIdiWFowZjbktJjf1L7PKLXTOfHNl4AcWERrTnOXhqcgn6Yu5XaU HLYFmzfH/T4htNRlIb81V5h7GY5WNlAiY1v8OVfBTJjX2gpR/fot7DPFtzKxIzZEqfZy 4fTA== X-Forwarded-Encrypted: i=1; AJvYcCVTwlSsFTHN1+W7diAjHem0utjy+whgj+u6EWN+MDriEO1gGkibpPVfeXqbmNFoKYVq3SbcaPjKk4w=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwhbCVA17FgHuyDKcKG7vV1fBAymhGmUGYLdp/EUP5PTvGRv6Ek woXPXkAux0s9tvRsCUv7tbotBx5kQzuv7IpjfhqUI3seHzNOpbe/ X-Gm-Gg: ASbGncvABVST5OhZQ/2GXroFskHzmCqv1HyVMHKd66JDcMQ2glPR09MtjZe1qhZgQ+w V7lq63F+W0ZjNxU3Ah1JgmHHN/up/thjQfOQkU+FqUpNIPMdWWuk2rXppDxZLMrQs8FuynazLIV /0NSJ7JdgjG/smFMfpQWBH1bLTflhFmkxpxk5Zgm7+LWZfXy9kpFCrJvb/0CU7w2ZVfALet3ps7 JRvMH5RtuH1dSIsWKKYv66XnqnT35vrzPszvPZK8JQoZQtKSFB5h5EsVQMcmbvhvu+qB2s7lJxn wg2gxlZ5F4FL5VrFYo/iGsOcVNGF X-Google-Smtp-Source: AGHT+IFmy3TLi8XjtwOwVQRKla+t9XcozrFfuQ2APFo1NcW327AwNtnvk589f2rdg/oiUJGtDZCmlg== X-Received: by 2002:a5d:6483:0:b0:38f:465d:fdf5 with SMTP id ffacd0b85a97d-390d4f4310emr170501f8f.26.1740506397599; Tue, 25 Feb 2025 09:59:57 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:57 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 15/16] drm/vkms: Allow to update the connector status Date: Tue, 25 Feb 2025 18:59:35 +0100 Message-ID: <20250225175936.7223-16-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Implement the drm_connector_funcs.detect() callback to update the connector status by returning the status stored in the configuration. Signed-off-by: José Expósito --- drivers/gpu/drm/vkms/vkms_connector.c | 19 ++++++++++++++++++- drivers/gpu/drm/vkms/vkms_connector.h | 12 +++++++++++- drivers/gpu/drm/vkms/vkms_output.c | 2 +- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/vkms/vkms_connector.c b/drivers/gpu/drm/vkms/vkms_connector.c index 48b10cba322a..b03a00b5803a 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -5,9 +5,23 @@ #include #include +#include "vkms_config.h" #include "vkms_connector.h" +static enum drm_connector_status vkms_connector_detect(struct drm_connector *connector, + bool force) +{ + struct vkms_connector *vkms_connector; + enum drm_connector_status status; + + vkms_connector = drm_connector_to_vkms_connector(connector); + status = vkms_config_connector_get_status(vkms_connector->connector_cfg); + + return status; +} + static const struct drm_connector_funcs vkms_connector_funcs = { + .detect = vkms_connector_detect, .fill_modes = drm_helper_probe_single_connector_modes, .reset = drm_atomic_helper_connector_reset, .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, @@ -40,7 +54,8 @@ static const struct drm_connector_helper_funcs vkms_conn_helper_funcs = { .best_encoder = vkms_conn_best_encoder, }; -struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev) +struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev, + struct vkms_config_connector *connector_cfg) { struct drm_device *dev = &vkmsdev->drm; struct vkms_connector *connector; @@ -50,6 +65,8 @@ struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev) if (!connector) return ERR_PTR(-ENOMEM); + connector->connector_cfg = connector_cfg; + ret = drmm_connector_init(dev, &connector->base, &vkms_connector_funcs, DRM_MODE_CONNECTOR_VIRTUAL, NULL); if (ret) diff --git a/drivers/gpu/drm/vkms/vkms_connector.h b/drivers/gpu/drm/vkms/vkms_connector.h index c9149c1b7af0..5ab8a6d65182 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.h +++ b/drivers/gpu/drm/vkms/vkms_connector.h @@ -5,22 +5,32 @@ #include "vkms_drv.h" +struct vkms_config_connector; + +#define drm_connector_to_vkms_connector(target) \ + container_of(target, struct vkms_connector, base) + /** * struct vkms_connector - VKMS custom type wrapping around the DRM connector * * @drm: Base DRM connector + * @connector_cfg: Connector configuration */ struct vkms_connector { struct drm_connector base; + + struct vkms_config_connector *connector_cfg; }; /** * vkms_connector_init() - Initialize a connector * @vkmsdev: VKMS device containing the connector + * @connector_cfg: Configuration for the connector * * Returns: * The connector or an error on failure. */ -struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev); +struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev, + struct vkms_config_connector *connector_cfg); #endif /* _VKMS_CONNECTOR_H_ */ diff --git a/drivers/gpu/drm/vkms/vkms_output.c b/drivers/gpu/drm/vkms/vkms_output.c index 8d7ca0cdd79f..3af95983026e 100644 --- a/drivers/gpu/drm/vkms/vkms_output.c +++ b/drivers/gpu/drm/vkms/vkms_output.c @@ -87,7 +87,7 @@ int vkms_output_init(struct vkms_device *vkmsdev) struct vkms_config_encoder *possible_encoder; unsigned long idx = 0; - connector_cfg->connector = vkms_connector_init(vkmsdev); + connector_cfg->connector = vkms_connector_init(vkmsdev, connector_cfg); if (IS_ERR(connector_cfg->connector)) { DRM_ERROR("Failed to init connector\n"); return PTR_ERR(connector_cfg->connector); From patchwork Tue Feb 25 17:59:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= X-Patchwork-Id: 13990430 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2BB48C021B2 for ; Tue, 25 Feb 2025 18:00:17 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id ED3A710E789; Tue, 25 Feb 2025 18:00:13 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="N/v5nA8C"; dkim-atps=neutral Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id BF9CB10E69E for ; Tue, 25 Feb 2025 18:00:00 +0000 (UTC) Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-43948f77f1aso36797835e9.0 for ; Tue, 25 Feb 2025 10:00:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506399; x=1741111199; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yGxwG+6bGnNIthEQL+F1Y0qNbK+3kLrCEEdzMCdmayU=; b=N/v5nA8CSY0Ebko1eSgVFWhUmwNZq3uibpFnS98hBJGJhQClSJyMsNkyuiaymDZLGe cKwzEY9Cm1XPr++YReAj+bmCSkOGNtMyl8WijfhZB4b9BF5lqELQOJNan/XVuHtjeLo0 pUNitljb8LvJwCVDPNAzxbruKRCADQ/69nkr1G9Xn+H6T2b2iit/f2bPTaK7PBRSxZHv jHJnQvcwBhaMTxywJDbUYVZJRwHhQgHoDm7QyEHsMErON/fsQwUoTNQrT/sX5HlQITYH tYaGMZpLUnMFIwrcrMNMitptGN2W7vf4xVDf25zFvRQz32IznGLsd6Vv7gUFqtjv/W5R 5P8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506399; x=1741111199; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yGxwG+6bGnNIthEQL+F1Y0qNbK+3kLrCEEdzMCdmayU=; b=qyTR+1Pyxbch6Jp3vY7KMzN5v56nsHSQL+aEvL5NMobEWupP5XKiZp8czrybO3CYG9 T+JcFmN3LHNcL3M4zjZ7FfEl/iJ0KC1DPEOr0Y8KhhBamAXRM4mz70MFMZBM2q9tTHWE VEaz+TWf1X3wgJTpdJ/Da0I25YbTwlj20vi/9KMGcyyzX8O4D+hgq4jJxPgRyrMcjQ+V 7Zl/9gzTrTgmwJgvRMf6oxdc1nqN7D7dqGBvhshreBTrLjzUlX7edK8vioYYG9ijno5w 0FU0RxrEUDYlMZF9Do8xAj8ys+VaRwnYm48Yp+rA9JSy7Qp9tKR0T+46WX6k2MPXcSvO y5yQ== X-Forwarded-Encrypted: i=1; AJvYcCWzlRXeUeNWjgN4q1TLFeKQazMlV+Y6Y/zTneGf6FLtK/uTu0lMtzElI5h68ETvy2m+2RL3zxop3Ag=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yz6xPxe4e1fSHJlL6RuTJvsseAXQn+jgaSF5pS+SwEyyQcgH7WS YQaE0kgYKxaVa0DP/1lk/FOq5Xst5ZGYhefSlTMKq/2x4UWbVdgp X-Gm-Gg: ASbGncuoH/g+c950xxtUH3NkCgti4s5NcjgwQd0jtWUK7d5PPcxT8ECCmtajwe7D6xH yxf/0jhPHW1xtOO3dLro0ulgyO8gY9xStdGNXrHAsId6rxkXX9c8NswfkFdFT0IFTZakILz1h6H mePdpKzDeR5ayQ4cVMB0KcV0M3RlWzP+Z73RW485dJ2/qaqTOed/Ur850Vg62SnCPWvC9LGnkif DdlCiG3PnT6bo7ysUwRmchrL1w/EA/Griq8Bn5weJOQOoVieweb4YD8mOj9pLCxqLAdZ73FpOCz oOqAmezw1guMJwpwr2BzUuZWGeEb X-Google-Smtp-Source: AGHT+IGqBZvURkcaxlMPmAxOYXrBfupjLCf9BWOro848BGonvQQbFRhIpMLdNCyILndFVpqQPjDTTQ== X-Received: by 2002:a5d:53cf:0:b0:38d:a90c:d489 with SMTP id ffacd0b85a97d-390cc6384a1mr3115400f8f.45.1740506399191; Tue, 25 Feb 2025 09:59:59 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:58 -0800 (PST) From: =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?utf-8?b?Sm9zw6kgRXhww7NzaXRv?= Subject: [PATCH v2 16/16] drm/vkms: Allow to configure connector status via configfs Date: Tue, 25 Feb 2025 18:59:36 +0100 Message-ID: <20250225175936.7223-17-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" When a connector is created, add a `status` file to allow to update the connector status to: - 1 connector_status_connected - 2 connector_status_disconnected - 3 connector_status_unknown If the device is enabled, updating the status hot-plug or unplugs the connector. Signed-off-by: José Expósito --- Documentation/gpu/vkms.rst | 5 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 46 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_connector.c | 7 ++++ drivers/gpu/drm/vkms/vkms_connector.h | 6 ++++ 4 files changed, 64 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index c551241fe873..7c54099b1dc6 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -108,6 +108,11 @@ Last but not least, create one or more connectors:: sudo mkdir /config/vkms/my-vkms/connectors/connector0 +Connectors have 1 configurable attribute: + +- status: Connection status: 1 connected, 2 disconnected, 3 unknown (same values + as those exposed by the "status" property of a connector) + To finish the configuration, link the different pipeline items:: sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/plane0/possible_crtcs diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vkms_configfs.c index d4d36d2c8f3d..76afb0245388 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -7,6 +7,7 @@ #include "vkms_drv.h" #include "vkms_config.h" #include "vkms_configfs.h" +#include "vkms_connector.h" /* To avoid registering configfs more than once or unregistering on error */ static bool is_configfs_registered; @@ -496,6 +497,50 @@ static const struct config_item_type encoder_group_type = { .ct_owner = THIS_MODULE, }; +static ssize_t connector_status_show(struct config_item *item, char *page) +{ + struct vkms_configfs_connector *connector; + + connector = connector_item_to_vkms_configfs_connector(item); + + guard(mutex)(&connector->dev->lock); + return sprintf(page, "%u", + vkms_config_connector_get_status(connector->config)); +} + +static ssize_t connector_status_store(struct config_item *item, + const char *page, size_t count) +{ + struct vkms_configfs_connector *connector; + enum drm_connector_status status; + + connector = connector_item_to_vkms_configfs_connector(item); + + if (kstrtouint(page, 10, &status)) + return -EINVAL; + + if (status != connector_status_connected && + status != connector_status_disconnected && + status != connector_status_unknown) + return -EINVAL; + + guard(mutex)(&connector->dev->lock); + + vkms_config_connector_set_status(connector->config, status); + + if (connector->dev->enabled) + vkms_trigger_connector_hotplug(connector->dev->config->dev); + + return (ssize_t)count; +} + +CONFIGFS_ATTR(connector_, status); + +static struct configfs_attribute *connector_item_attrs[] = { + &connector_attr_status, + NULL, +}; + static void connector_release(struct config_item *item) { struct vkms_configfs_connector *connector; @@ -514,6 +559,7 @@ static struct configfs_item_operations connector_item_operations = { }; static const struct config_item_type connector_item_type = { + .ct_attrs = connector_item_attrs, .ct_item_ops = &connector_item_operations, .ct_owner = THIS_MODULE, }; diff --git a/drivers/gpu/drm/vkms/vkms_connector.c b/drivers/gpu/drm/vkms/vkms_connector.c index b03a00b5803a..ed99270c590f 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -76,3 +76,10 @@ struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev, return connector; } + +void vkms_trigger_connector_hotplug(struct vkms_device *vkmsdev) +{ + struct drm_device *dev = &vkmsdev->drm; + + drm_kms_helper_hotplug_event(dev); +} diff --git a/drivers/gpu/drm/vkms/vkms_connector.h b/drivers/gpu/drm/vkms/vkms_connector.h index 5ab8a6d65182..7865f54a313c 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.h +++ b/drivers/gpu/drm/vkms/vkms_connector.h @@ -33,4 +33,10 @@ struct vkms_connector { struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev, struct vkms_config_connector *connector_cfg); +/** + * struct vkms_device *vkmsdev() - Update the device's connectors status + * @vkmsdev: VKMS device to update + */ +void vkms_trigger_connector_hotplug(struct vkms_device *vkmsdev); + #endif /* _VKMS_CONNECTOR_H_ */