From patchwork Fri Mar 7 16:33:38 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: 14006734 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 22A08C28B23 for ; Fri, 7 Mar 2025 16:34:03 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4310710EBE9; Fri, 7 Mar 2025 16:34:02 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="eIZFEelM"; dkim-atps=neutral Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id E25ED10EBF8 for ; Fri, 7 Mar 2025 16:34:00 +0000 (UTC) Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-38a8b17d7a7so1125007f8f.2 for ; Fri, 07 Mar 2025 08:34:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365239; x=1741970039; 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=eIZFEelMOz0AyhDPEGH3QIag+ztF7ZxQOjNmIpzwll299BYoE8ZwCvk1dXJQSZZ+Sv opvmWT0NapuashqHNjmyyKNAMtoInSM4CwAjXKxqNGXpcpawd0/G84ono5W5woDYk9/g 6jpM4YSZ+XrsrZ+JNw/xniz/YEiPGfpyrLw18LJwq+DCex/V3t2hdSOocGrhCWlSjzYy 5lcKIPoHJM/LTnB663lY78kYhbavZf1a+47u8gIDxH2ELPDWhHBsF0wElPyeOpt9bl8X Rryp3RnKn/VjRViOsO4pf6zM3OZBxDU5VHwblirLS5kq6kCww0r0pndB3Vb3SppYhJGC VIrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365239; x=1741970039; 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=Upf2Un28xFv3hHkXUzK5BcAbW6vA+tXt8a+4EaKOAtIKZLVMUkdyb/vWupl07Mokfh 9H2nJbEQvOJDyYQY1O5tHBZ8ZcIOTqnlNwK8RhyURmI3V2qiY45o3CLCDexgzC5SOeOW 9xt031EV5RKO9S7pG1pTZZMG0KLoB93GtvhVzie3gwFuxUhupCLse30YMbm71L9dpUkc OJfYJlTAMPagoJGzn+K5aE9rrahdfUMmRXsCliYALftJxJls47R/Uw1aQ0gf3nJBBlYk QbR5RpIxhCx9GujIy+8j62957RN4Rg5WjM6SYseRJJ737TmTnr24/GE3qV7fTfNKPky5 /chA== X-Forwarded-Encrypted: i=1; AJvYcCVFK1H2guVOYDI7en7j/TjJ64FBNXm9Gn2BeFsxN6AIe6f3w6H54AAkSmMXSjM2AYBq+l5Zt6aIjaY=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwYZpk/Tt9Z4IXobMJSyNdE1HBCn2AzoXsi6SQHRFv/fnMNmoPi 9wJGArDHfns1YWqtha9O+Nm5ewS/OXhXdb7XWPI/uk/w9IWzHtdB X-Gm-Gg: ASbGncsSQiUYM7pMoqveuZ6DVQHLCHkl5eyB+zlH5jZ92GFT5kTtP5lhOgl9ujcnFiP hgoyWcwdtP1Uzsv16CDRITsoHMKDqyfsljMR/JDoJpGBFJmKLttxFtZ4tYZglSHIsIaIl4zq7Ye JGFNMLKrHQSt0SstcCTVHk/qaCr9Ih/QEJxVH4WMHkjPnaFMEa/Jw1nhosiOKfp4b9jcNM3JsxF gptH875YHAku3JFtwzPA5M3uR4fubry8qUFgmNE087Mg8LZK2lFqSbYmXf7gdXPT6fwDvUtlKCj 63BM5Y2/6Km/mGInoxEcTuGjC5w2bgBnplJHZhygsJMxUJg= X-Google-Smtp-Source: AGHT+IHvEOquRlRDE6sNgZzthTbLfd1K6H7yZoCbaCvUV5F730ddnKBLTzQkXWvjxk1UN7ARIK+LDA== X-Received: by 2002:a5d:5987:0:b0:391:78a:33de with SMTP id ffacd0b85a97d-39132d1ca75mr2576203f8f.12.1741365239196; Fri, 07 Mar 2025 08:33:59 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.33.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:33: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 v3 01/16] drm/vkms: Expose device creation and destruction Date: Fri, 7 Mar 2025 17:33:38 +0100 Message-ID: <20250307163353.5896-2-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 Fri Mar 7 16:33:39 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: 14006735 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 39B31C19F32 for ; Fri, 7 Mar 2025 16:34:04 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 99D7A10E1A3; Fri, 7 Mar 2025 16:34:03 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="T1PG0nnm"; dkim-atps=neutral Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) by gabe.freedesktop.org (Postfix) with ESMTPS id BDB7610EBE5 for ; Fri, 7 Mar 2025 16:34:02 +0000 (UTC) Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-38a25d4b9d4so1083453f8f.0 for ; Fri, 07 Mar 2025 08:34:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365241; x=1741970041; 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=OehO6Qhr6WGHbOewVFsNr8BMqlTR3xPb+7+1msX4IOo=; b=T1PG0nnm2QsSBzvl90A7GXlt5KhDiO/X/gr4uPYaxBHBTlaeEGWznVRpzRumnLWcPL xgD/lLK4ibhBEuwqbeSW28nIl75/2U/x0iBfyStSCJizIcOy8+oMdmUIJuMPDkbtfOlX nciSK2Re7KTrdVLcV7zqFbyogY7fdDv5f0GlQbi7f8Cn9nwhf8zxj/eAoIfkGGpuCirs 1s4FudjjsDON1tBAQi8c18cqtoWYTWe+p3L7iqnTsmAQEfVBjMFOGfTg8xMMaiRRPS6T MjMzVz1U5i+0HFF5ex2BhRV8FBBo+WkrgRwueYk/kAqrz6EuOn2hkdcBlwsQxoic8TgW 7E6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365241; x=1741970041; 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=OehO6Qhr6WGHbOewVFsNr8BMqlTR3xPb+7+1msX4IOo=; b=Q4FfV5UQU1E1S1C0vQjRzGPksRSnwpMilb6hPwqgRrivgEtkCnXTJGkGZ4mStsNY7T 1C+8U+CNVKW20L2MihSDUqptPQS8EIyWtKW8K03+zDkhnR5pcBO//Bvpdeog+ywQlSYN ESK70Mzt+5+N59ZTcV2fNWrUOqdNN4UCk6SYVBWkBqz8VX+bgTNNCoWrQiXJsPL3Q+vH EPkByKUyRZGHDgsSQ/Ssq0A73Qy8uU15AOBDrF15ANJripKMIxeHIJLyvZvNKNETggt0 0ewvdZeTFTpm3XCsC7bfbzueyPJkNfK9rE/h/6XVIBlwu+//SshIssx2pOeJ2z1oXyHQ FpXQ== X-Forwarded-Encrypted: i=1; AJvYcCWSAzF84wNQNYAIXObJ7tMWXFq3z8QiJySDuifmEiltzsHBmIvhYxPIoN4kKGGkSQ71jDDp7eGgXk8=@lists.freedesktop.org X-Gm-Message-State: AOJu0YyGiQGA3KdAGG48fWkQWePpiL8l6fiAqWm8IGgG61CLOMPeVEyP Gnbb3A3qBh8L//usHIqcpPfUcxJP8aPfbXKUGLavOlYLV/G1XopV X-Gm-Gg: ASbGncvJv7Lm5xjgPsX//QIXKYW/tCKNhV/H35hWVtw+Yk8jX9M6fEvNqT08tVvXVhl apPZILs3H7u3Y3/lXoYLCuCiu81MAAYFubQh4t82RHjyA0yxbLMB6qzn02Io5CaFLY5+yzbxWHA ExSxFinaPtS6SIhlJeI8iILo3b32YHomsi/QtA6+gFqXWUcTIpg01uMyf9ZhsOhnDuqcMBmmYXa +Kf0ns2UyIxBfezcuC2RM105LvHcotLV0FEjz9tRo4HmRpGdXTT1kpVLiSdXlira2Fj4H11TEr1 aqhjCcsX0xzinnzSQGis+1wp7oLL2ufPWyEgi+eekyissXI= X-Google-Smtp-Source: AGHT+IHsYe0vbQupMHSrJP5IQwdIqh/U3A41zvaZCt9hGpwRD8kj241TXz1aUDolhkgB/jb73AxAIQ== X-Received: by 2002:a05:6000:402b:b0:38d:e401:fd61 with SMTP id ffacd0b85a97d-39132db746amr2524803f8f.49.1741365240541; Fri, 07 Mar 2025 08:34:00 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.33.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:33:59 -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 v3 02/16] drm/vkms: Add and remove VKMS instances via configfs Date: Fri, 7 Mar 2025 17:33:39 +0100 Message-ID: <20250307163353.5896-3-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 | 172 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_configfs.h | 8 ++ drivers/gpu/drm/vkms/vkms_drv.c | 7 ++ 6 files changed, 222 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..ee186952971b --- /dev/null +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -0,0 +1,172 @@ +// 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; + bool enabled; + + dev = device_item_to_vkms_configfs_device(item); + + scoped_guard(mutex, &dev->lock) + enabled = dev->enabled; + + return sprintf(page, "%d\n", 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; + + scoped_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 Fri Mar 7 16:33:40 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: 14006736 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 04E57C19F32 for ; Fri, 7 Mar 2025 16:34:07 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 63EB810E0F4; Fri, 7 Mar 2025 16:34:06 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="MfWlweHE"; dkim-atps=neutral Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5D0AC10E1A3 for ; Fri, 7 Mar 2025 16:34:03 +0000 (UTC) Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-38f406e9f80so1521502f8f.2 for ; Fri, 07 Mar 2025 08:34:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365242; x=1741970042; 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=gYVCtKALM7tRTxTIBs5CBqjqnZ0ufRMiomzRADReB1Y=; b=MfWlweHEYca+R8nbaw19DCqc3menFmqGXq9fTIK1I+5KwOt8YhsYgb0dr+yJIkAxl3 hlqGRnzLkmDV3GSvx7r+HqzxsagUtT8v6CjATl+zxqQCPI5OguCoz/WAXMWTAhNj+W+w AxnFy5PK2vHwWs8XZMaKLKfshtBzh6yHtfJ7n94jt00WI+YfDrDTwOXplfkzd++TlViZ a5eO8ZRLmZfNPDlSKFdevgBSuPOgrfFbAUlmdUlvtX8LUbEFA5zKlkQCgcziMF/UVCf7 mW2oUax3gr42cFgdYIk0/f88nwiHoWzXJoH9VxhuyaWXGLMdaHqaTZ/CqjXsXmpWT4iI xNng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365242; x=1741970042; 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=gYVCtKALM7tRTxTIBs5CBqjqnZ0ufRMiomzRADReB1Y=; b=qUDApR8vrQMVYpLA1B3GdrRoCVTaF0Fl2EwkZGgN0XxZV9rr+PkuzVCBdJ/erOZo4j tMMgZLWW+k0aQemBi5MmE2ZZQVSqd0DBfEFZ4iP4MwhNpjnC0pmblNQ8xfejFP82hoY1 ZjaPjvS99hVx1ejNAe60SiyRD+eBhnoj5fYf80WwoDO5H4V1wn0+Kv525ei+TlQ/ph/+ 4n6AbfPfGv+fCwL6dcrJgxvfFpQ95GyRIk4teA0wk8Z4HsFR/BVpqcuVba0GbicVt0y5 z6uzebarFKkt21XW+aH8jpXGiwcPINY/ix9rl3UrmClxJfmhE3c+FByWEvk82lA67XcO Mrrg== X-Forwarded-Encrypted: i=1; AJvYcCWxu6OK7PcsAWu7MfJp/HZ9oYJzrpjoGYRZdC06W2uCFfLayn3rada75gOXg56FTXIx5R/DIZx3JjY=@lists.freedesktop.org X-Gm-Message-State: AOJu0YxtS6sJWadHHflZyIUtMHrxfsbN1GpBMUHonc50m+P5aquhzmzm gdbZ2ByO/F3mDC2o7cYMsnYlRADR5XQXRiREBbsM98fYxQv10731 X-Gm-Gg: ASbGncseUzmAMz2xEJ0vMg5m/z93A2lTvOb6nW5lWMXBG8tNpsSMvxl4MOjOPLZKZIW mfnpeujvOrchRNVjUQiVhzAyAVvFQQvTm+0rY5X51DKS2p65U2+WD7LpJZHDG1M7oK6qe2WW6Zy qn/IoZtm7q0ZT2v5NI2rW/YJ3D+fVlMVkaoaYxURst4CwMNPSQxqMohhpp9PiUhBhsVhWzet5/v y2DmR7YMhraB4WTgCvtKqE43+Snf1eSuZEsS33XkOj7h+Pax30KZiMvY3+kGz8eKQg8RsBCtQt9 ukHLbUvYYPKtrNwteW68zioEK/nez/3J+9pF0NNrjZWzFR4= X-Google-Smtp-Source: AGHT+IHUuKO6qRQ3oA5vpJ7m+Un5BJ2C/6O9k5CT+//v2AYCHfRgiVqmxqLuZIOxa0Icg/nj8Yx3UQ== X-Received: by 2002:a05:6000:1867:b0:390:f9f9:3e9c with SMTP id ffacd0b85a97d-39132d7a804mr2826550f8f.25.1741365241768; Fri, 07 Mar 2025 08:34:01 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:01 -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 v3 03/16] drm/vkms: Allow to configure multiple planes via configfs Date: Fri, 7 Mar 2025 17:33:40 +0100 Message-ID: <20250307163353.5896-4-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 | 88 ++++++++++++++++++++++++++++ 2 files changed, 103 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 ee186952971b..a7c705e00e4c 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,99 @@ 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; + + scoped_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); + + scoped_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; @@ -128,6 +212,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 Fri Mar 7 16:33:41 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: 14006738 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 654EEC19F32 for ; Fri, 7 Mar 2025 16:34:10 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D4A4110EBE5; Fri, 7 Mar 2025 16:34:09 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="B6M1ueDb"; dkim-atps=neutral Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) by gabe.freedesktop.org (Postfix) with ESMTPS id A269410EBE4 for ; Fri, 7 Mar 2025 16:34:06 +0000 (UTC) Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-4394a0c65fcso24147025e9.1 for ; Fri, 07 Mar 2025 08:34:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365245; x=1741970045; 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=6MV2OWA6Mh9vxWtK9J9PJqfJQiomHto+OaIeMpCvYMU=; b=B6M1ueDbHaysrv1XFZZBIfCWUbXx9RLLm4EXquUUyvms5Mx9XwTXn4foMKdeZ25TaH 1JW4YsQ7qv8NmiRnFOYSkzGCJldeVxPj6ZLwVXMnP9zjbRn1nfI5lS94X5J45BhSHa9/ E7xjR9H6UE1xTsW1DQEl7uQefVT9Lu3gFKngaJy3/IyFejKiLN48gRqSLb8srfu7MrDb VkShDzEBDCfyvPxtjN+ztU4XXZkNCUpL6gae8w75piO6JweXizsy4VE+02SO59Y+NryM 6mQxbroMkx1axBBOdMwg2M1QNZOtGGo/zELUX2RUT7mIW6l7hgIfLLZGtfYoSqcXWdka BJPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365245; x=1741970045; 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=6MV2OWA6Mh9vxWtK9J9PJqfJQiomHto+OaIeMpCvYMU=; b=v5qWPVcIV7PIxfneOX7qC6ujgIuioR59EqsTIPMZDHX6pbjjBHUqJoLEv7NItoP7/T twaETRWDzU8Wuz1MDmcaxrmg7iVWwUlJHdC5/XnoW2hnf5RtWPtt0tpj9Hrz+1oWcmvI jToJcKduEs9GrLSBA1q2XUW+RnUiFFVlJHW6AEe6pjXT+SoEyoyMeojwLIBbNMQrF+Yx kbsYOpbxTW36s3f4t5NTbCkH18YHoDwCyI1DIlR3mGM4ZzCZGq2rLjs5jF0V4+rpAGdl GrmwuyCBB89D/1cvBvsClJcoLVlyxVzlPxmayYGfUvjJ1ADFaTbLuXXPt+N9Dr9/M7Ll ZHFw== X-Forwarded-Encrypted: i=1; AJvYcCVqWnoEY0AbDPghVAS07WAeTsFZoGC/Ac5Iz1lkqPI4r2GTklXNM1yTWVEe+f6JMGxyuRn0HRRx6+0=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yy9zdJfq7taMTPUpfrz00sDU9smbPos3niYvpKn+5DOf68awzLD P67UTvzyM8vRnjI9/UOaIGw0JhMO7KSlEeDBTSeINlh8tazdtphJ X-Gm-Gg: ASbGncvR+g9h2hWvyhalktl5nB88yQsttrsCpViEY9/hkR/fpL9ov9BT85jqRwiyGej i7EphBcqbedY9X+BWhxtPmhTOdRcUbnfztel88tP1r7gKgjE/jjnOFPNLEfwCxTijKnnItja+H4 2tCeWSmaaeAXg1C9/S8GN9QihWa4rqwDBTE9dkA28rhAFXFOS2vhE3El/NY9fEks9mayUC8O5cs oEWgdMnZueffJiv7Y1M7/x74QYKlgZlFtrcGBb0TILFNGAEUlhzuBNsfftm6TiOxOHN04/8V7xB FkKzcZBcTjoopkPj7PqZe8MZpwYH9WEMgbgQFRxdosg1yiA= X-Google-Smtp-Source: AGHT+IHy6prLRyeDeLBBqQYAih4z7dhF8ZsgqaozMxKPj1Kdi9OZe1sSmPCaA48+hp2UIfpfozoC+w== X-Received: by 2002:a5d:47cd:0:b0:391:952:c730 with SMTP id ffacd0b85a97d-39132d09078mr4081895f8f.11.1741365243576; Fri, 07 Mar 2025 08:34:03 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:02 -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 v3 04/16] drm/vkms: Allow to configure the plane type via configfs Date: Fri, 7 Mar 2025 17:33:41 +0100 Message-ID: <20250307163353.5896-5-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 | 46 ++++++++++++++++++++++++++++ 2 files changed, 51 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 a7c705e00e4c..398755127759 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -55,6 +55,51 @@ 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; + enum drm_plane_type type; + + plane = plane_item_to_vkms_configfs_plane(item); + + scoped_guard(mutex, &plane->dev->lock) + type = vkms_config_plane_get_type(plane->config); + + return sprintf(page, "%u", type); +} + +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; + + scoped_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; @@ -74,6 +119,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 Fri Mar 7 16:33:42 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: 14006737 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 E13C8C28B23 for ; Fri, 7 Mar 2025 16:34:07 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4799110EBE4; Fri, 7 Mar 2025 16:34:07 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="GYwmsIP9"; dkim-atps=neutral Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2641110E0F4 for ; Fri, 7 Mar 2025 16:34:06 +0000 (UTC) Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-38f403edb4eso1163263f8f.3 for ; Fri, 07 Mar 2025 08:34:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365245; x=1741970045; 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=rQlMQlCFKnmKdpNz3j/9En9DKgH57otLDgNbJI7oEnA=; b=GYwmsIP9I87iDye/ZVs8NgWXdH3vT31mTtLWzaG42e2FjrGPrlJwYv59P+4hXbbEO+ pmgj8m3p4EJOSEKYYUPD4Or/MMjCyzCV63N46FtegAhZGU+PtyAnDPy1oizbYAn2ZhEs XztTKeavTWP6VI3GvkH/E9ATk775NILjSdtRgyJhd7hgfrsMrEaeBw+T8yJA+srHDokR wldyIgZL9LNO8RBCU4MUD2ZAJX17UmNrbV7+y+j4oIobXqeed+WVAnwZKW+zeGkJH7KU /JijhhTLS9HaNExkgna0wFZDF96b949S+KpFL7h6BSNLNMgo8/AVthzcDdTi+cX/AszE 4tQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365245; x=1741970045; 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=rQlMQlCFKnmKdpNz3j/9En9DKgH57otLDgNbJI7oEnA=; b=D6bTJVUoC5uOrnD4+yvlgVL6CKBGDUmZ1NDvuceSh2jAAtOwiOIoJ/mMvNT5OjethY XzFBCW1Naa2NhfxzqkP0H7lCzDRMOqfGHp6AS6qIoYRnQNJDKTkjV5SOSGYT7NE/RsGR 5NTYkEbBbLlxkp5F71+x8oBMdWNHq+WorPOyjazwSc0EOrDuJt7UQEyzEM3gfszZ+LVb TxdoiEl/aU7P2MAxIJ/tYNh2BzamMyICpMqcl7Bp7Vz7VBQ9ZTvHpuNIct8E5MZIS313 vh2xD/A+GO1wrTuIRX14X66tmH5kT5IziR/0dYfMaCdOz2aXrrR4Dbsptq64syzX2MmS 5LAA== X-Forwarded-Encrypted: i=1; AJvYcCX+ejkgdpnxakIFtpR/Mr/I2dDh6gaJHSE3JckiTn+TyPuo9LNNfxn/sVeOUFEXv6bcNjzy9F8jFbY=@lists.freedesktop.org X-Gm-Message-State: AOJu0Ywmua3wpNh4JdK976vmaop5X7pXB2YgXKa8hBYfAeWzDiN8wxnE cMIKjrxgUVDAD+xZFA+W+2xg/EpyvqxzNFnzaP/Ujuzl+mjt9xPJ X-Gm-Gg: ASbGncuEWdtHTpgoUjMS1IpEQxNmXbgTbUXmn15m5tg4q138J4Rm6GRDAZuJA1jLYPp je099eH6WugQ29QVcjDn7wfUZ1f/tfH3i4JNXZyFtvZOLv16ymD4ZqgBFbn6IDCAm7MZ95c88Wy 3hBDbg/j4IcLcuk0oO33v7Sfh2m8JoUgshgPyD1esuIv5K4RTAwShCxlnbKAUhVDVSEIPEk1OPC D+bPU7aM02Keob338I7yEhzAkeN+dbfBd2dLMUCVzuaLnyjdIasUGjNJYVxLa+HxNorJdKqZH1l AT1mAz2ZasfW7z8JM7EXRqbGdQQuOCQMFQ/Ud7Pk36RoRCM= X-Google-Smtp-Source: AGHT+IEghPLDlJPmvq/wiT5I8JEW5bsFoBksc9aRUiGeNRF/3NTsA37xXdz7/FA2hteWHdFBtnqzKA== X-Received: by 2002:a5d:648f:0:b0:390:fe13:e0ba with SMTP id ffacd0b85a97d-39132d70bc4mr2691197f8f.27.1741365244533; Fri, 07 Mar 2025 08:34:04 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:04 -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 v3 05/16] drm/vkms: Allow to configure multiple CRTCs via configfs Date: Fri, 7 Mar 2025 17:33:42 +0100 Message-ID: <20250307163353.5896-6-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 | 85 ++++++++++++++++++++++++++++ 2 files changed, 91 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 398755127759..62a82366791d 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,71 @@ 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; + + scoped_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); + + scoped_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; @@ -262,6 +343,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 Fri Mar 7 16:33:43 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: 14006739 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 C54C6C282D0 for ; Fri, 7 Mar 2025 16:34:10 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1560410EBEB; Fri, 7 Mar 2025 16:34:10 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="CElAJYUc"; 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 6047F10EBEB for ; Fri, 7 Mar 2025 16:34:08 +0000 (UTC) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4394a0c65fcso24147385e9.1 for ; Fri, 07 Mar 2025 08:34:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365247; x=1741970047; 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=adxvT7ii/BhGf5+g/wbSaeJv9L6Vrv0AMOExKXchHM4=; b=CElAJYUcXtdRRAuiUuaQbSQA+jL+uHm27pVhVJ9iiMevZnI4WQC9Shql8Y8zMis8Jz PacJHL/Zx1PPunRsVX6oAzwKIzdEGDsWCuC8/s57u66/lv5ZmHSF0WFVHg+dqFiMhnmq zRinHjZP8S4A/zuWmll0uYfsNU6PEjPGfUcUW2Frtd9MK8NpDAsLRt3s2RlOGrI3Vmdm ADIYNbCTxcGpDrIIT0Nqhzt/kZG1NzpCGH/xcLXJt27ThX6YpwmPZuVfNcqgPZ5Vzqm8 mUZg6u4KvYvIFwwYWAZG+KHKtHc0axfTpOY76TijKzQ/kpcv5Z7fw6XCMlI/ValrG6z3 SCJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365247; x=1741970047; 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=adxvT7ii/BhGf5+g/wbSaeJv9L6Vrv0AMOExKXchHM4=; b=gkcmQeuy1iO3nb/3rCt8LgcJYTBBOIg4Fp/ZKV7R77xEXUxqv4hhL8atb8T9ytD7m7 w8AJLS3MjtqleEq2iGydLJ/OiQAROZ9IdTy+t5k8A8Q2J0WaCiCZN6SMhqQNYUmBcvD7 mn+hkY7xogSU4zSZjc2jXwzcKS72lplViYj71XiAEbQ3jP3Zo53O2svFedIj9DImFNVO tXb8AFX5xmOHuqVo4aHJzK+BY+6yetlzQ7bhd6Mq1Z56AGqyHYix3ECC9ikk1I+AKTb/ m8KlNnogb2WuqeXrngrvUNislQboG53D0JFBkPcLX7CXp5TyaL+rw8zM8tBYv1wpo//e 2YTQ== X-Forwarded-Encrypted: i=1; AJvYcCVQjbWEOv9PK9xo++L47dKRw97UbTfPC+H01avPhPX4DzEKs4w64s4jY0T3dU4Tj5IsYF3bUaln0kQ=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwKIinB/h8SHKK387S0bkKSbHsT88N8+OH0b+5UlwJskJmYiZYM C8ul43fqAagy5fP149OubwzyPbCWv/DThmDZGpzMFtkUCJT4tw/1 X-Gm-Gg: ASbGncu/sO4JMuk8HXrFeL2a3/0b9au5ONZLULFSxEOZo70dkhWThRDDrS6Xfpt2YjF ZraZoelbH6m+ZPUSVm+2Z8LqbG5gzfCjDXpvmI18tKs/7WbIehwy5BVEZTZwPNwrkPWmVRGtaTG zJd/wZ11sZ/kT8goU2MT5CzpAMA0F/iW5jlD2hhHeeIiupTEvQzhkUtOcpgSiHBoGKdZtOyr2Ir NfnBHufg/gBDRSpm3DyHHdNyd02WY9A0HqwWBYVIzv5PdZZSvRAUpQUP/8oaX4ZF0Qc00WtZiGo KgeXLrgdisWFmmJTN653OXQVzHZtTM78SdI8RBdSWV/x+p4= X-Google-Smtp-Source: AGHT+IG5OJlDQkUEWLTKW9FjBSL7uf+mEOU/9qxTIBuGznGo8NW21a6bnmcM0Z6BWJ1f1cOvwRXYgA== X-Received: by 2002:a05:600c:4e91:b0:43b:d116:6483 with SMTP id 5b1f17b1804b1-43c6021f13cmr34597475e9.27.1741365246562; Fri, 07 Mar 2025 08:34:06 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:05 -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 v3 06/16] drm/vkms: Allow to configure CRTC writeback support via configfs Date: Fri, 7 Mar 2025 17:33:43 +0100 Message-ID: <20250307163353.5896-7-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 | 42 ++++++++++++++++++++++++++++ 2 files changed, 46 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 62a82366791d..e9f445043268 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -74,6 +74,47 @@ 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; + bool writeback; + + crtc = crtc_item_to_vkms_configfs_crtc(item); + + scoped_guard(mutex, &crtc->dev->lock) + writeback = vkms_config_crtc_get_writeback(crtc->config); + + return sprintf(page, "%d\n", writeback); +} + +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; + + scoped_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; @@ -93,6 +134,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 Fri Mar 7 16:33:44 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: 14006740 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 1ABE0C19F32 for ; Fri, 7 Mar 2025 16:34:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 81F5410EBEE; Fri, 7 Mar 2025 16:34:13 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Dyh1psd7"; dkim-atps=neutral Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6323610EBEE for ; Fri, 7 Mar 2025 16:34:10 +0000 (UTC) Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-4394a0c65fcso24148055e9.1 for ; Fri, 07 Mar 2025 08:34:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365249; x=1741970049; 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=VdvTo+glOxdqzKi9x0MlR4nPEnMDWOMdVsZOru5+zTg=; b=Dyh1psd7MoIGZTc1Kf7B2C1UxupRGC33DREJz3hk50yw+HyLCnwDQAsrcni/2jw1W3 Vf6RxAc312AMldtWuNcPT35dkEec6J9aZ/p1EM3qxSLpYs84+UjD/RlzVaTUh+WqK/A4 NQaKvmdx8dTPtULVjtN1yiN0EKz7uEcQQ8792wQR31Gg9RDiQJL6f8hfQl8oIaXeE5lv Um5oRS78z9LKebzsNnglO/YhQt5jB+bESHBPMC1954FfngAfYqfeR50NyJptoVTNvhK+ 1K7iPENEp7UFlKLEBOkga/qnv5J50wv4nax1f+ZLcp+u+irjqFtJMoaOkJEqEBe8/G++ NJhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365249; x=1741970049; 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=VdvTo+glOxdqzKi9x0MlR4nPEnMDWOMdVsZOru5+zTg=; b=aSgOoiNTu76/vfPZ7p2fOAh7ecnBLEbAJG9zdskO6SRZ0hG2LyOG1rrev0o0bOUprY uZExUIXo3B8wAZPrdwgOOlsT+tuNhk58oAmg0L8s9U4/a6NBsXyzVfQKB3opBomdFta7 gjy1hljdX6rachqMiDvvDcnb9PjKcJt+EmKioJ1uCd6hDBThcRj/M6MpjcmLQCe5HquS Y9fKPMIGV2r/0aZ/8Hq3sWytcDu89eQ64/3IwCWTVjt7DbT3ErVPqQGee7rW3AHXG1Iw eEFChJZdM51nDc1XUokK0AYFEk1zo8DsaStvJntAXUo7LSw25bbZDDrtkiQAQTS6e0Td MUgQ== X-Forwarded-Encrypted: i=1; AJvYcCX8lFanYqIBOColywVqnSSt+udTQRmVGbbvwSj0y6yEqoePtZozdqCHqwDCqt6LolxxDKn2M9MWVlc=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yxou3YMVfMTuW0r62ynXJ41RI9+KnA6FN3n+senfVaqPNSvmgzQ iqJF/NErDHmffLmCt3l3UGCbrpbJAcjQ1/ok4aCpyV3USYyEIt5c X-Gm-Gg: ASbGncvSWSiUXFWC2nw9Qsuax8bjFsj7xZ7lkOpVp9GhvqD0pQBOE0CUeW+lfP9Cg8Q eFCP2RB/t+gTes9RhHpElRPTxRWfCY70aTwSNk68nd/dbklILnyAx89CCmCN55vyMvMjYmCgpgQ SYk6wubXh3L/1wUANESaEemF9iCQQdLH+FPgSjsyta0tvSS1oG4h4HBC59T0YbCzCvXooWCeIKZ 6DH1qiqcLYMmYu25cvUfY8AZNkbPuTo3SX669uJ7+dSUDlSchWOszjRvu6hl5EEZttPJbWfWXtO 7yPIU82FlwLiqTNkIuRMATOgnUZ4VaNPjJSYkGD+RkMpCJQ= X-Google-Smtp-Source: AGHT+IFPRccxnoFktNFSGhc7+pjS3ePButwIioS5C1b+Nw+vSpBYT06wzWLbIJFKik54mEQ9Ap2++w== X-Received: by 2002:a05:600c:8581:b0:43c:e409:b8a7 with SMTP id 5b1f17b1804b1-43ce409bb17mr4439105e9.9.1741365248662; Fri, 07 Mar 2025 08:34:08 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:07 -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 v3 07/16] drm/vkms: Allow to attach planes and CRTCs via configfs Date: Fri, 7 Mar 2025 17:33:44 +0100 Message-ID: <20250307163353.5896-8-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 | 58 ++++++++++++++++++++++++++++ 2 files changed, 67 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 e9f445043268..2cf97c2b6203 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) @@ -178,6 +184,52 @@ 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; + int ret; + + 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); + + scoped_guard(mutex, &plane->dev->lock) { + if (plane->dev->enabled) + return -EBUSY; + + ret = vkms_config_plane_attach_crtc(plane->config, crtc->config); + } + + return ret; +} + +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); + + scoped_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; @@ -272,6 +324,12 @@ 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 Fri Mar 7 16:33:45 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: 14006745 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 83EB4C19F32 for ; Fri, 7 Mar 2025 16:34:20 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B512F10EBF6; Fri, 7 Mar 2025 16:34:19 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="e2gbWvQp"; 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 067FF10EBF0 for ; Fri, 7 Mar 2025 16:34:11 +0000 (UTC) Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-438a39e659cso12269355e9.2 for ; Fri, 07 Mar 2025 08:34:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365250; x=1741970050; 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=3oQHAhb9mjt4fInrJwzIGdl9Ptg528EudUlnjp2MNA8=; b=e2gbWvQpCqrFZBmKqhjkSXDzW/WBITQRmtz//vWIborGKRf6bKdIege7N/x5W6+C7j vA15yTXVjvJO20Ibx6zdZWKvHXkjjxesbw7+APKPt0YKcOBby/9mwuSXLxjTJ5ZQtI1D lqnMVoVGjxTC8j3cTN/PkPfXSR+GazXsp1SKn1HVLJwegsym0YI5YPI2zkN1Ox1Egg/J Xa4/aadAPSvp6ed/kwuwxaP3Xc4IHUCdJEjTJ/A3PKg+Jroo9Nhqo/34aBg+6qc1GAKy V6i4iyJOh9YuTBljdS4UtMEntnIJenQDZRC1nDrqB79OqQ9qqsPz91nmYXxk7/zfzhY7 hWHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365250; x=1741970050; 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=3oQHAhb9mjt4fInrJwzIGdl9Ptg528EudUlnjp2MNA8=; b=BP3T6htdwaSZM8eJ9tLMIoNrx9it9lGnkhDmL1XpjZHusRWDxR//Y+/iHl2GjCw7r9 IWjekyAge4JODhbBFM7Nz/IHwwsQ9ttiSaZHdl02+7m3XGU7xScNe9BnpkRQOVscKvSu xJKyRxc1bK5D+nPAJ+7IcfhLE4L5qpH067mG/fX7KnqKgVEGgklhdIjmO8CGJ+eyR9Gt RtXPOSqaDK257Xd4dsR3euTpTN8dQJfeQcfwpaHhXzxTB0lGqnfVEWGII6oZNT331FIA ZoX+hBODorga1xtKc8EASVHtkjJ93EAyPyWIb6L96l4pWMfkN6RE1X+o2vIYGn+jXzbI 5UYA== X-Forwarded-Encrypted: i=1; AJvYcCWULSJvIQ24lsYgoNWK6yXwmV4ELs5FIEam5SLVWOt7nvPzy8RDny61eXXKl+/Cp10ZMZWgGQFYSFQ=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yxo8a0khQn0fPhoILtw9g8kEY/A4BAA7fFgZ4wE3hw6zhpKUmk9 9COz3k3xb/VA2ozKG5XWX3d2ZoR+vYPzjMUsOTkdfHtylt+/IupI X-Gm-Gg: ASbGnctaG+euMgtErVjRXtxDq8solqWTVvWNp01QpPyyrPEM51bcL6kKxOq6HftLWq2 FAEY1/+G4DRyN7vK/ZY3rxvmFWUpiASpC4CuDlhY6TOAwFu09KOMb14NVOm+/sXHco8JGzRFe0z 7Pn7czZeTAo2BVwhmyKtJXXiEuzg3RNJJ0QeWldx34P+vtIlyad3MQnyBkn8rT0xGSiTXn2Oebs VwIRrkAgPnVQ++t+H3tkarlN/kcqSAQqzXjp9OTcGWdyWzaAcGmhE5coLp8XG4VugsNfFrBnx+K GX9J3C6dBSf3L8N9VIAkDzZH5FMk8fYN+z1hEe0Q1i9pVCI= X-Google-Smtp-Source: AGHT+IFsrm3QntpbyPuP4HXlK5m2E23x9fnNTDWBthJFYTPmQuedXlywOAqGxiFsqYouDrx4t6NaqA== X-Received: by 2002:a5d:6d04:0:b0:391:10c5:d1c6 with SMTP id ffacd0b85a97d-39132d77194mr2387021f8f.2.1741365249931; Fri, 07 Mar 2025 08:34:09 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:09 -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 v3 08/16] drm/vkms: Allow to configure multiple encoders via configfs Date: Fri, 7 Mar 2025 17:33:45 +0100 Message-ID: <20250307163353.5896-9-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 | 87 ++++++++++++++++++++++++++++ 2 files changed, 93 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 2cf97c2b6203..0df86e63570a 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; @@ -344,6 +364,69 @@ 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; + + scoped_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); + + scoped_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; @@ -447,6 +530,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 Fri Mar 7 16:33:46 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: 14006741 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 AECCDC28B23 for ; Fri, 7 Mar 2025 16:34:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1F9F810EBF2; Fri, 7 Mar 2025 16:34:14 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="j9qp2kQe"; dkim-atps=neutral Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) by gabe.freedesktop.org (Postfix) with ESMTPS id D7EEA10EBEE for ; Fri, 7 Mar 2025 16:34:12 +0000 (UTC) Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-43bc63876f1so17641015e9.3 for ; Fri, 07 Mar 2025 08:34:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365251; x=1741970051; 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=++hf8G4nEk9Bpzh89kQV5A47zc/b6vQ6MPdCQxsR9cg=; b=j9qp2kQeMwcYy+uD2F+uEMSJZSMtaOwroZ9dvRE5npkf5O8KNtpCER2aAn3Qy61Ayz qXA6ERo6rnPIBM76rgEDXF0gqgBQlynp4fflnH9REzApXXw44L+0GBpmedxzD/SuKCfD JhWUg92q6OG1c6hwP3RbAjsOgE1kTDv9ccN78zEVO6zf+Fed1cKmToYc4ff4I0zAEmTP sWkMnqveaqcGoB4V3T9efUDOpfsce85EDWh4TMGT1HSnWVwuS85T3TdXEifbmrMOkB9S 4drem/MJ0YC+DM6i+IJlBvdyR3pwVzTV2IiExYSK6thXyz6C8NzeJ3h79vgu6IKTDLCO 3BFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365251; x=1741970051; 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=++hf8G4nEk9Bpzh89kQV5A47zc/b6vQ6MPdCQxsR9cg=; b=g5Q0HiDrLTV/MN0SQsTnpyImljvpAQaqeRC5xbMfk5rmLFldAht0UTqfxRWtOs7HZ8 +g29Ci502+pyet8E5SLC6QlmqZIQfoLngVUY4o1dVfDgohN0hSdcFuKmkISLSzxo1t+J KMsnntzYQT3P5623NGUvMqqztlIShKGnVdDyOlPylSSxBLY3gC8atbWs5ZbqFKP7wF4V 0JPFITh+eSAKHdfhprBXlJ+RWxn5uR7y7XP+outLHVTzBfzMc6X++tlS97Lr3VC/rriG yUMxZ6JA1qaIF8iOcQsafzeopSzahS1N0RaoK03gJjWI4GDa8SewDcQwDKGluShHsQhr 2Uaw== X-Forwarded-Encrypted: i=1; AJvYcCUFuZBLLDSL4pj1+E8x4a1cBn1yVFXbeCLIJm03LeB1pp/190NHV7w9jAHHFWSqEfgYobgzvQulD2Q=@lists.freedesktop.org X-Gm-Message-State: AOJu0YyBJZxh2qqYo2/+mIzFQLl3FDKGzP90NQdjLm66R/axC/j+IZKj rgUAN75hd6jLSuG2Qh0W7T91Xo1JigrPoBdqqWfR2g9/gm7JH78/ X-Gm-Gg: ASbGnctgqU0xtHJtPp0tTu5Q0LzcwD3oY+69zcgC87jFeF0aSbgxkonjz2VrlDabI6W 16fpdbHaJIp9Dgq43nVqSKrl9SrhxEzQno+Q26sWvxoXk19M0hji1L5Aze2aydolaHh5lF7liaM J4IiIjtPNWxnFTySshfudTFnQUFRjkaBDel8DGRGv5xM8G8XdmITmUPbHPEKK/wkyCqfBMhOlpm 10+S1IC1/tgwi2AFGqkd9Z967Skk5qxHdyK3DkHEDgOm7O5Oct+ptHjzbm5SjgYLd04+t+V277x Oo0xiCeXpqCUwNHgzbAk2nlS0KFJfExxzHiR0lxlCgnesng= X-Google-Smtp-Source: AGHT+IFRCRTbXpFBWuMUYNVgD4erCo26cMvSvBPI4MZCLSewSYGptXR8L/t9TuQLLLKD6G3ia6vuQg== X-Received: by 2002:a05:600c:3b0e:b0:43b:d04a:3506 with SMTP id 5b1f17b1804b1-43c686f703emr25579665e9.25.1741365251122; Fri, 07 Mar 2025 08:34:11 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:10 -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 v3 09/16] drm/vkms: Allow to attach encoders and CRTCs via configfs Date: Fri, 7 Mar 2025 17:33:46 +0100 Message-ID: <20250307163353.5896-10-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 | 58 ++++++++++++++++++++++++++++ 2 files changed, 60 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 0df86e63570a..7de601e39d2b 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; @@ -364,6 +370,52 @@ 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; + int ret; + + 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); + + scoped_guard(mutex, &encoder->dev->lock) { + if (encoder->dev->enabled) + return -EBUSY; + + ret = vkms_config_encoder_attach_crtc(encoder->config, crtc->config); + } + + return ret; +} + +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); + + scoped_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; @@ -413,6 +465,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 Fri Mar 7 16:33:47 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: 14006742 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 8EC8DC282D0 for ; Fri, 7 Mar 2025 16:34:17 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 006B410EBF3; Fri, 7 Mar 2025 16:34:17 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="a3uYxwU8"; 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 6440B10EBF0 for ; Fri, 7 Mar 2025 16:34:14 +0000 (UTC) Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-3912d2c89ecso1651038f8f.2 for ; Fri, 07 Mar 2025 08:34:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365253; x=1741970053; 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=cPglBRQzm3PeNfTp1IXfadGrcc/1PZ/sWQxkyGuh1Hg=; b=a3uYxwU8e1FyzJ+qF/7Go/fxTAALVFtRiiHl/O2zyTG42Bqlgatt7azGCrxKI1ly42 UW05eWdluf8HJDGoxHvXKlnzpF3nKDlFlZs8MvzJn4Pb58meiTaBKHdw9wM9102aZcpT NG0yp5+2cdkis/wac5yJWZ58LOebiOg5OvFGPoR+z5YW7t935BWgC6vHjxj5rogvk80E 1+GA0QkghLF1x2bPpsg/Xq1kcPYzKU4Jysg+I/fUXxZ5rsWrYT0BgbU6DhDrn8AJ1u0o k3kZz43aiSIoh5rifVyLceMVw2ZKmqsRBD1FV0qr8SFed51aB+su7JBy0GxU5uBUgx8q 5Oyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365253; x=1741970053; 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=cPglBRQzm3PeNfTp1IXfadGrcc/1PZ/sWQxkyGuh1Hg=; b=ZryWC7GVO1K0wEqf2HQdDNlYt84yVCk2ZXfCbBvxAy0HwV7HQz+UxF2SPsJwuUZWu6 5T7I9vTr94GZo3tS55LbCoxt1i25t3VFYAK67J2tIJ0K8hMSCT4+toleLHGnMS0ukeI3 CYJkiR1KKEL7MBujaKJjjdXPJMULw9oKh+/drh/yR6nsSyQbI4YK1I9Q1W+FPxn0qutC QmNoW8TWMwX54T/3ft1LbMZzj/4yjPZMKRAC2ENGgshHuO6HLx7I5GLl+m3p4Xp2u3aF P1fptpDOBkMgDdmBTKO+/DCkARZy1VxZq7TYt6mJ+c4vSYOUTZN8GtXyJL/tJBA+TzMW Ha6w== X-Forwarded-Encrypted: i=1; AJvYcCWC4vfL/CR4hONkicOeX0QSPQd2HSRIwDFp1aSAI4gFVpPCckdlReiW1rmOSY1xQMi34QWSiTNs790=@lists.freedesktop.org X-Gm-Message-State: AOJu0YzStWz6UeWm7K9bJqNDqhTMQ8ZH9TVx01aWDWcBcm9F58Er5TwE 6ZSRo1oCQMGQpVReNGZVqYg2AhWD4bAFoFMnAmtXDY9hr2PdcZiN X-Gm-Gg: ASbGncuIZbWdQgNS/OINykxDZLtg+fn5sd4Xv4NXscBPhNOVgOBUpfT4tFpIfzwDPtv 80u+cHS8oWrAZS8Ey+Ocq4/wCSGjQq6X7sxpLQhYQax+V9vWVUVornBeZQeTH9jKMVa6wkdzuFt +0g63xBZvLE5N/B+1yWJXKJhiNIgk9qqUUAbcn6V4UBGpD3N72mWucpYMPIQoWJJPDPQzBUPwrN DiN3lbt7bHKhJND2mkZd/rkIDMETyngx9hl3R22gY/B1utPSuP7uKgZ4RJrvFxSQrYIL+85pZIl PlVbBGbqWD4AnK26b7Qn6HDS5GClD97FJV6UGz+K3Opiipc= X-Google-Smtp-Source: AGHT+IF63rOdhDcyNIxc0Af2rMIu3XHsDnVUzLpB/8CyhXcU6KC2Y/tzuWU0AngWy0NaISRGyKp2tQ== X-Received: by 2002:a5d:5f4e:0:b0:391:fcc:9ee8 with SMTP id ffacd0b85a97d-39132d6bc06mr2454738f8f.23.1741365252797; Fri, 07 Mar 2025 08:34:12 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:11 -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 v3 10/16] drm/vkms: Allow to configure multiple connectors via configfs Date: Fri, 7 Mar 2025 17:33:47 +0100 Message-ID: <20250307163353.5896-11-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 | 87 ++++++++++++++++++++++++++++ 2 files changed, 93 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 7de601e39d2b..692e1b708012 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; @@ -485,6 +505,69 @@ 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; + + scoped_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); + + scoped_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; @@ -592,6 +675,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 Fri Mar 7 16:33:48 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: 14006743 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 09DE2C19F32 for ; Fri, 7 Mar 2025 16:34:18 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 58ADF10EBF4; Fri, 7 Mar 2025 16:34:17 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NvMZxTTj"; dkim-atps=neutral Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) by gabe.freedesktop.org (Postfix) with ESMTPS id EC6C610EBF0 for ; Fri, 7 Mar 2025 16:34:15 +0000 (UTC) Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-39104c1cbbdso1080969f8f.3 for ; Fri, 07 Mar 2025 08:34:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365254; x=1741970054; 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=pkjoxigyIPAGM4bWibC29uQWmfsXcpbtj5sqbZDQnLA=; b=NvMZxTTjF5A8DEj9RuSZF1GbBHvLf+R2NBPbMVm6FVSfmlDYEzslChJCuI5d/ODNwl S4TPm1phdlit+xDbPVYHj2mqHJ9vvNMsLjyYDY5LRN295lLOs5eZtteHm4ztkXPOPPJk lpNqHgrPr7T31WN9zbB4lEuffyFC3X+qPxrxyyO1/VtfwPUDmt2Ps1upY3AcDv2hE3nQ y2NPuSmjTGKrbm7tyHji5suThJWkQeAcmr8I5hGK3UIG7KNgxVpRbHZr8XfGZiTp32kd uJbV8zZbtZFXApYSDur6NdtmxjKLLILxiYNgU/dW2Pvq8ovadPnjqxg6WnrUpmzWNqCW zfnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365254; x=1741970054; 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=pkjoxigyIPAGM4bWibC29uQWmfsXcpbtj5sqbZDQnLA=; b=w159ZXl3M+31Q/alLspmJJPTrvydQMZbt2PfaZcncU/xH8vfHFv59oJsyu1MrD8xr+ pBGpFMGX1SQ5RczBlt8CEHD93TGk7usv1BayYpmudg2un2qy/O+bMDzXXyuWu6o5oLjj 94oMRBq0T4D3gqXxNplA2Mx9NxaCnoI5xNpAPArkz2GLOf6Kq+XFJ+IDosjbJZLjgz+J 4gO7X4rzhVNrypWO90Io71COo9f0Yw0SsI16JdlfoKxFHPrtl7JzfoqIsWXF9AM+JaBX 20AtHydrCdoqx1Dm32JbyFky+uU7abI9gC7/pZzxxyNelfwqrfVLt5gzyWDsHcud3B7P lZgg== X-Forwarded-Encrypted: i=1; AJvYcCXD/68OruxkcN5aIRFipIt6kn+ZZ408s0Xk9xScZyKHseERQ05o2HEoyKSW95e5qBhczpCT9rmGbrc=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yxv2RUfJInWOnQW01LBAXsRRyufIAZXLNxaFAOhj9OKPEBq+oga wWoQTDkk541LoAT888AWI3f/HKQC2lPIybG3DmgBY0JH82mBFtUj X-Gm-Gg: ASbGncsul3kMp5jMBUTyVmTELv0V+pjphhEiv5qy3d+RISL+y3kd+NuiQelBAZ1XJux leLH2JqslrNIUF49Re8hIJLK4DPa22w38/woePsTpv9BFCie9m70TC7BlHaofXMl/0k9ffUaL1h tXN7YbKvnDBmSkz73dwxZHbmrgl9sxRa1c/jN6ZnPDagCk6qLX/6qXoFnOf4MRnbsPPJ+cLfq80 5gxRjLklbTiaohv4efxoaPoJMmJ6l7mqZV0rZltGTBOV9hX5p4FSfHkCWinAgVITWdLbnQ4CXop HAThxqph+AbDAR6njq/xDTCUC/B3zrhQFfYV/QCUYYzMPOY= X-Google-Smtp-Source: AGHT+IESNA23In2kHjqdFJ6dx0smo1M6kzDdgbcUv2LBI727vsHZMdwd4dUthvuCgUPRlt36reWHvA== X-Received: by 2002:a05:6000:4185:b0:391:306f:57d1 with SMTP id ffacd0b85a97d-39132dd6d3cmr2539139f8f.35.1741365254331; Fri, 07 Mar 2025 08:34:14 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:13 -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 v3 11/16] drm/vkms: Allow to attach connectors and encoders via configfs Date: Fri, 7 Mar 2025 17:33:48 +0100 Message-ID: <20250307163353.5896-12-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 | 62 ++++++++++++++++++++++++++++ 2 files changed, 64 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 692e1b708012..8e90acbebd6a 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; @@ -528,6 +535,55 @@ 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; + int ret; + + 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); + + scoped_guard(mutex, &connector->dev->lock) { + if (connector->dev->enabled) + return -EBUSY; + + ret = vkms_config_connector_attach_encoder(connector->config, + encoder->config); + } + + return ret; +} + +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); + + scoped_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) { @@ -554,6 +610,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 Fri Mar 7 16:33:49 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: 14006748 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 11F65C28B23 for ; Fri, 7 Mar 2025 16:34:24 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 315ED10EBF8; Fri, 7 Mar 2025 16:34:23 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="KG/8SCSH"; 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 0F12810EBF4 for ; Fri, 7 Mar 2025 16:34:17 +0000 (UTC) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4394a823036so17585465e9.0 for ; Fri, 07 Mar 2025 08:34:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365255; x=1741970055; 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=KG/8SCSHe9fPwNPUIGPVkUGU7ajWzwmCws4huvVN5dni7FCO9EEp8TCrRg+0UwWs3l KrmbN354AcowCAe4XbK5anG+WQL1hqLoStfj4+U8Glir11Z3WDQ3XdcVW1WYJhMF2m6s D+H+Aje7a1bgZq2/tIzZRdj8fFRaBblnVQ2G1Mlb8J3nAZ7lFyI4IeBTpIt+otCzNT+c +KrVRyHu0Da+ub+DJenxyUMnvnUnH4L6l9xFBvu9a2k9jrbCDTtbKUFHsc3ocnMU5veV Kw9Ua2DGbIvzIjeyM32q9bPpdVSjfheURvrkKeVGMUiVuRdBNZMojMDr9e98qwYnSNsm RCsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365255; x=1741970055; 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=WzJgTlFI4isdqP3GIEZW6gMitvNndR7trT4dsZ4KcqU7aN0AgIdKjyQUw9SxkKNgvd LrkPeOhqCnLp7MJ10ISu8Fh/+g4OQUaDNrATSflzDIPQrmg9mUAPh/ACy0EYFGhCehvJ HtzEU+5bltFRJEmRpmZYxGzdlfYy1eKg6mRc1LKj7VEAD5i+ML8xss4r8+pH/w1NSZ+q Z9/t/lUha217V6uimYZd2UQSMDQzoK5aZevuWGeS60ZydyWuT2bouwGCrca85XYUQsw7 EpTMtiRtM1ECzy0Xt1vFdgJUKg9RfWQUO0ggWURF+nejctHoluha8IUEd0joGBYtNUMO zXqQ== X-Forwarded-Encrypted: i=1; AJvYcCVXt6X5SUCnk7Scxv+7i1TftMTaXbi4teYv5q3Bz3xadV5BBSbpom0NUn7YbLn1sJvQAakKujD0Jwc=@lists.freedesktop.org X-Gm-Message-State: AOJu0YxB0Tis9TmDBYPJvfukT6/AJZ3Asb/1ApgYgCnFzIZw4kKjAoQa M4u9pUdBaInKh/klTib2p6JHJXlgBi58P1yZ1I6t7q3eb5ZjZvR7 X-Gm-Gg: ASbGncuhsdBKd/X84t0eIgRT7HqGPdkMqYqaldxjBeUzWcR9sZejdmjIx/Ums7vRsb+ n9+oM+P2apH2y8juiRevSRK9UKKNf2kJSBOHmAqtehz3KUSww6VxP8uyepflfO8PovtkeztKZKq Lhh3jED0Dv0xxzPIHrEAA2CzNS5NetTj8wUtw57LjQPpByn8pNiyblFVD8Ew76h4veDgiFcDjUQ ATeR9ck+sMTLxE6bRlo7I3b5/mncDM1sW5S5dOERFB0gmcwlReVQ9nArsC1IyNJKpzr+udJd0+W hf1gDsV8Jr9lgtFqZDJ4c6rFLuZp+swkQnqK3Q0hanBOVxU= X-Google-Smtp-Source: AGHT+IEwPvhouBA6vZMQodw9FQoUs0STHqGK32YOVJMT04SsOqUtTVNTysfRc3/xVYG7647HWWzuxg== X-Received: by 2002:a05:6000:1846:b0:390:f6be:af1d with SMTP id ffacd0b85a97d-39132d98ae2mr2659989f8f.41.1741365255560; Fri, 07 Mar 2025 08:34:15 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:14 -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 v3 12/16] drm/vkms: Allow to configure the default device creation Date: Fri, 7 Mar 2025 17:33:49 +0100 Message-ID: <20250307163353.5896-13-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 Fri Mar 7 16:33:50 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: 14006744 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 125A0C282D0 for ; Fri, 7 Mar 2025 16:34:20 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7078710EBF5; Fri, 7 Mar 2025 16:34:19 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="m+r8UsZl"; 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 707A410EBF0 for ; Fri, 7 Mar 2025 16:34:18 +0000 (UTC) Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-43bd87f7c2eso12091335e9.3 for ; Fri, 07 Mar 2025 08:34:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365257; x=1741970057; 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=m+r8UsZlkl1Gn+4turYizF4/yCh3lA7o3mFbUsUPpGoJEnHM0S9FbPdS43e9F8RuqD tzPtvLO/P41kqwJ8Qh1lcOe3uVEv/yDqp/a8AzQowqHwDdQlLqZsNSepSRyVNmqi08j2 yjx17x328pfeR74F27vE3vvO2LSSWVl/ezsBhPotwvpWgd2lRlH9hQtnu6aH1zulGrCW dd32cFs1DOQwW82XuajkkhkOVKff0VW2XinERzfxQ6efG3vC5okr6XEsUFOkXhzdRTH8 IlRiUmhSC4EHJmI0JgK+bSkSJWLtWBgCYDV/UzQDV/x7v5UoHE3Kc/YW7ug39S0hbItj 7tPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365257; x=1741970057; 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=Jvg2LlK9miWwkZep3dleCt1D1X03dj8VLYVppss9m6+QxIqyjAYnipThlURK+Sti1I mN0xiJ68dCVYFHt7YX6lk2juaMEkaq7HmusJYN2TiYyUvUIiPm0Sq6KNnzWQXz4gg5Il O45p+lst4oURhVkjPUiZf7c0wRV1g1d6UdIyMYIQc4mMz/cbXP0Y8NxSKiysnlKmjdTC 3UXzDMFGHAEoOFIbErpRCFst/B8YADkgJeDoCZBcjNUHdu6jP5vek+RPQUnvE6lOype4 3Ci0ngLgH7aPLAFvcImoFN8CfyELtUPxD+SSzBtaa1c7uh5oFVCBZxmUyXNKIKrMRhbU Q7dA== X-Forwarded-Encrypted: i=1; AJvYcCUjPUth4ZaY64fMzm8dc00VXzLCKhcSW5LCeAY4ynksGHEmGj9LfnkSPBWhwD2K8mnHI4WHrGE2SHw=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yx8574auke6ZriklR5slOzdFKvtjLyJBoTQaGwPzMYdJ11NMJeg /XCQLGPohiEfO2vSZTbJR9fQe5j0w9Y2s5l+MzkEJlQqxNRg1FK4 X-Gm-Gg: ASbGncuhwdJBHmQQfPpMMJyg7SNlvlNjXwaaAoZuO5DcLQ8Amsb00kPDMb+YN7l/4TP dkJq4MfN68Jag2moFphzqu4zrEu1e/JgAbWupXdgpH2EykCq27SS/PLOYlNAh3B22TQqXQ8gYLt K69LRI34VQ9U81esChX07NvQIoQYBM9RKZ6mEbBaUc8xItVdiKsAefFrFTovx8YJ/sZvTpDgUKC xltMHsXX5Vojs10cIdnhXfsTq9nxCH5bNv05UbexcVdXX1bGHil1U3tLHIuF0ku8pTfJ4g9rnxR T3EUnBHC/NBzSbjdSnLMblkSEbQKISFOr2bw3t86FkVQbPY= X-Google-Smtp-Source: AGHT+IE+/rU5pkLDM1WZfm1em60SGqLyoPo8j+dxcpf3SNDsL/ewtlrCgxTKAsjxe6CqNBfr06tkCQ== X-Received: by 2002:a05:600c:3b92:b0:43b:c7ad:55c2 with SMTP id 5b1f17b1804b1-43c5a5e9853mr27338655e9.6.1741365256861; Fri, 07 Mar 2025 08:34:16 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:16 -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 v3 13/16] drm/vkms: Remove completed task from the TODO list Date: Fri, 7 Mar 2025 17:33:50 +0100 Message-ID: <20250307163353.5896-14-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 Fri Mar 7 16:33:51 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: 14006747 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 A9611C19F32 for ; Fri, 7 Mar 2025 16:34:23 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id EEE7710EBFB; Fri, 7 Mar 2025 16:34:22 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="jMN/XLc+"; dkim-atps=neutral Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) by gabe.freedesktop.org (Postfix) with ESMTPS id BF5A910EBF7 for ; Fri, 7 Mar 2025 16:34:19 +0000 (UTC) Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3912e96c8e8so1145406f8f.2 for ; Fri, 07 Mar 2025 08:34:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365258; x=1741970058; 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=jMN/XLc+9Ejclu/sm4dIGwLajAsxl+a4qGTTSfaWIUWPZdnxwCFhdkkfrhuG23v47v bZXJ8eBtciKyk/z6CfBmD3VG7/ClFa+ChPsN8UlYPlUmo6MGflfIH+fpXfWMBzuPOIIw H4L4JxI/p29LSuYtAqyXOABpGJtpJrcv+Ugy2zVjl+Z3Zm80vD+SDgtDXj3qavH2YUZm o4Ho/AlsAkYCZgTULuutEKuFAgXnGGR5tpwi7dsAz1JgAKSt3OMTj4OkkU8zKgu8QRYn vJajDSRSu6zNrCkqNapqbAzFGwiVvr7HH8kLrcFVgyspo8VIVy++o7h5Z1lKTY1c6SMv Q3ZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365258; x=1741970058; 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=AmdB8IdiAcmhllvYLTfMYMc1ZDemlSgZuVU+brMmKRwx1OGSoBczX1/1EOtJo4JtpV Kb8iy/HLIvY/oZMvfg3TkyoSj49hHJzLs37uo0vEBVuJDb1Ess5NKujEi4kAzxkuuBJS xGb5MGNLzZWbIgKHoQHxVRZX4MAOdUhTnabJ2Px8OAh13nIDD/WfSR9QcAzouIp9sMN9 CJ+GUKsZMkKwXRV6216WWqzBAyK+4JaKyyPMNtmJTkdy1toR+8JhYYkVopH9nzuzAgcH mhggeImcFQ+FX8mO2BdleZvT7OYtTpqgrPsEKLsIQeO8G7tuBoA+8ogFaBptLq0h4uQp Un7w== X-Forwarded-Encrypted: i=1; AJvYcCVSLQmUSC+vUE9zAGG494jiSVB4/EdVZZm28Df0GBhb2z4uSJRhLHNAALb7Rz06SnDJ+0GbxC8NNCg=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwqMCVmyjMGK6xw35AYnpDHW4c/swlYYeuFU2U0M6Czl2fgL8xM G70x5IbXNHfS8MkUp14jv9SWVFIHesrcXXeBZU/cqhJJ2Qh8/895 X-Gm-Gg: ASbGncsNNy5YUEb0HQoGdjqGuHRbKKOcDEGlUG9MBSiliZEPVE/eSr3d24h/8yqrvs4 WfSOu8Ej3KsbJTORqEtFV7dYj/fzoDN32BRLQ4bIJ7LeCN1UXaWiJQlMnk3lZS37rKlvCRlCTFz k4OqQ9kAl2nedBiFqsSiCaL34Wd+4Zs1GSURfYp2rCV0DlIvuPj95h3u4AM7cD2JqUpMZrqSd2q TpOK4sa2nmIQvGyhcH1rSTeJI9KczE+XBltmogebhDd48TpX/iC0y47tkqoQAr5idVH2vyZkJWE vZgZIowynxwWCyo9cbElKbDF9yituVFhjSWWknREQfRDVf0= X-Google-Smtp-Source: AGHT+IEHAK/O4CJHl9ysak7QbxIiuSOZVGHkpbi9q4T78G4ZtKDKPIP1C1QDFQphOc/Ef8wVAs612Q== X-Received: by 2002:a05:6000:186d:b0:390:df75:ddc4 with SMTP id ffacd0b85a97d-39132db1113mr3150084f8f.44.1741365258109; Fri, 07 Mar 2025 08:34:18 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:17 -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 v3 14/16] drm/vkms: Allow to configure connector status Date: Fri, 7 Mar 2025 17:33:51 +0100 Message-ID: <20250307163353.5896-15-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 Fri Mar 7 16:33:52 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: 14006746 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 00360C282D0 for ; Fri, 7 Mar 2025 16:34:22 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6509210EBF7; Fri, 7 Mar 2025 16:34:22 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="YK8xuiw4"; 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 A8AE310EBF7 for ; Fri, 7 Mar 2025 16:34:21 +0000 (UTC) Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-4394a0c65fcso24150545e9.1 for ; Fri, 07 Mar 2025 08:34:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365260; x=1741970060; 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=PnVpWku238hbA4Nkq9IkwuoRE17xKzZpiURAgcmw2aY=; b=YK8xuiw4vMtGxxyi5qbal1XHeQV0oRnYhMnGDM1LKRH5Tu5KHlZWJqUr8Tp531+OOX ADb5Pk2TP+QS7ZLL+BjLWUOolVGJrzWHwuv72S076vjydm/SxTrO3OAesPo0foXwrMaa gAEzvmLXb5TYZZzRc7FTJHRz/Xw1CeyzMNDhyf7wLW6deSgf0Kp05Bl3iB8o3sDko/97 7VRZHMqyKf/I2zGjWEHnhywMlMnD74OIFjQ8ehrUeoAxGpLluJy+BHqT1+or18j2z2km +4wgMCoB42VqFKBnTBGrCCLgG21jTZcXgBmSLw0M3T+Lux9szhj7d7ZZ873A7/ObUEPV yVnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365260; x=1741970060; 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=PnVpWku238hbA4Nkq9IkwuoRE17xKzZpiURAgcmw2aY=; b=fCUleQVhQXrGsQcuth9Xt/jq63RfaQISM0trkWRUI6P71P+laL8DVWKal0Tfc5TaLT gGeIkePl3VBRihSTRTOsYuojVRXySk1qm0XDMEayb1OWsGf74I+uP3BUPEPXJX1ZouwC ybeUsjP8OQwcNg0C4GzjpEzkAueAHNz+2XCoflvZ1N8stGnRPupH/i+aCFKSqG1ZIzld jYOklbKGleBwcpdBqt651Xq5xcPmuPnJoQCU9Cu61QO3lo/AIdb6b7sjQjUVvHpoc/Nf Bo3WriDlGtKHBxeOjqirKzt8CnACd12HkRqErpD3BCQQayv0jZM8Lcbcbu53Bf5A/8h6 ItkA== X-Forwarded-Encrypted: i=1; AJvYcCW5bu033pHVjawXsbfBRgPBU/1+WmhaUgnPmiO6LTsmkeF5SMBOqHGMU9EUm+n3fjyUBYe4afnI3XI=@lists.freedesktop.org X-Gm-Message-State: AOJu0YxgXNBDjZhaDlZLGc4BIx5VgXETJLTh1B5njdacpGwo3xB9Pqh2 OKnMGch9SNxv2EW/1xCDPvo2DM33PMd12RT/1+xvtU3T9MNxPeK8 X-Gm-Gg: ASbGncu67ScoPw+1MgaLca34q/jmzSwFgqVROI6jJS1yNAj51LCGKJZwZ1Fj2YcGGO7 ZR4dobBCEG4zx6H2XbMlPilF2zglGYcDoT8iJQQC6ijHok58X/keDIZ64JjWkMIoxZaWg3fnJnc zkG+iU1/O4bo5mEJ/zxca8+bI2KDNO7SUEZx3dipk7WOkcTAwzGMfF9hhqbp9xMqVsU+PCMfgEB S69NDib0iDW4wUGRUTBHy7wPy7DT3Yq57xM50kZT+/gSBvcxN9e/VLOx2Q7F3XyDXZblk2az1cU L/7P43PMgBOsddLEKRX5P8HypCUst9+QAkoMpHGO2N9kM1g= X-Google-Smtp-Source: AGHT+IF9VU28XVk26daC2mTqspzNuZbNjUdKZ9qIjQPsZn1hhFXRxmxu6k5LBVmtgB181vLER+ecvg== X-Received: by 2002:a05:600c:3b88:b0:43b:da79:582b with SMTP id 5b1f17b1804b1-43c601d67edmr41758015e9.18.1741365259880; Fri, 07 Mar 2025 08:34:19 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:18 -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 v3 15/16] drm/vkms: Allow to update the connector status Date: Fri, 7 Mar 2025 17:33:52 +0100 Message-ID: <20250307163353.5896-16-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 | 28 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_connector.h | 3 +++ 2 files changed, 31 insertions(+) diff --git a/drivers/gpu/drm/vkms/vkms_connector.c b/drivers/gpu/drm/vkms/vkms_connector.c index 48b10cba322a..89fa8d9d739b 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -5,9 +5,37 @@ #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 drm_device *dev = connector->dev; + struct vkms_device *vkmsdev = drm_device_to_vkms_device(dev); + struct vkms_connector *vkms_connector; + enum drm_connector_status status; + struct vkms_config_connector *connector_cfg; + + vkms_connector = drm_connector_to_vkms_connector(connector); + + /* + * The connector configuration might not exist if its configfs directory + * was deleted. Therefore, use the configuration if present or keep the + * current status if we can not access it anymore. + */ + status = connector->status; + + vkms_config_for_each_connector(vkmsdev->config, connector_cfg) { + if (connector_cfg->connector == vkms_connector) + status = vkms_config_connector_get_status(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, diff --git a/drivers/gpu/drm/vkms/vkms_connector.h b/drivers/gpu/drm/vkms/vkms_connector.h index c9149c1b7af0..90f835f70b3b 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.h +++ b/drivers/gpu/drm/vkms/vkms_connector.h @@ -5,6 +5,9 @@ #include "vkms_drv.h" +#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 * From patchwork Fri Mar 7 16:33:53 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: 14006749 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 E93B5C19F32 for ; Fri, 7 Mar 2025 16:34:27 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 628C710EBFA; Fri, 7 Mar 2025 16:34:27 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="FwQZSS34"; dkim-atps=neutral Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) by gabe.freedesktop.org (Postfix) with ESMTPS id C747410EBF8 for ; Fri, 7 Mar 2025 16:34:22 +0000 (UTC) Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-390ec449556so2537558f8f.1 for ; Fri, 07 Mar 2025 08:34:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365261; x=1741970061; 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=xK4w0zRijqvJSQy92+j3ZDq7C+G47BlmHwixThFbhJo=; b=FwQZSS34AWrgntnMMbX0yhWp+14JUBRLhfJ71KsQEiwFrj7geWpv0BEe1qqSyb8dkk S8ia06uOlNEjMAXMPL0LUr7igSyhMLHPNIvyeq0UysOT2mg1ROZU+t3jjBD/xuCyTf5u ObS08vgz2tf8zmj1R1/YQJgjs8vwL/3tDF3h0dKmOVeKXDd7xvfEO03jjeoLmXluLUfi f1SzPj+ZiVj0zGSmrDzYrH/6bAyEdB+ZUJ49OYL5VYIIKIRGND2kTN5N/QpGr2g+zjn0 67zIfUJyVDMSiTUcJqaD6uGYvG40p7LYoF4YknGGPQ/jMrIfB/kTx9iFaHLEo6x6K7Rw jeYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365261; x=1741970061; 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=xK4w0zRijqvJSQy92+j3ZDq7C+G47BlmHwixThFbhJo=; b=lJUkv2qiB+trjzS9KhexG+h5ZahG0QIxRl1pm9iFDRwysHcfhYY0d2fNtbi6kCDaqR p1k0+IB5T+/Ck6JRDtA+CFVaeZlDsehBcINX2U7eRMBw/lQtFnsxvyvjE6ak7HH7vNsS SxMaeKI/bo1enebQIbVYlGT5uTjAWf/3xF2Ly2mHiOzaOVdJfCnsuOCkrnG/QtoiaAmp qatV6QmrLLmTTIrfUMw2ZhQYz+EuxlZ7NhF3g0tRMLbuoW9kD1G4RyYQ3kohG69RKm6F 5Z4DWpvjvwqYtVaiLgFpgXCWwSV4K9S1yGNQ+Y2/x5bSTisjXAhEk/DcsvJU0LZuuzv2 nyhg== X-Forwarded-Encrypted: i=1; AJvYcCX+u+aTvi59e+4n5+Cgf+3n34OjGYjnC4d8SEaADzp2QfBY5XizmoBTcVr3LhfDHajEmjt1A4ZC3e0=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yy8lyau+inn2HE16gWC3styogxT0CoYqIeZ3OV428WDtjbRvzrF ++UCmJOuT2Nnw0s0soWezF4caSdPWMaVhuS+vDRBypRTjFMErsfW X-Gm-Gg: ASbGncs5luwR3JkvdOwdzXMnImQvOmxOYpD8zxovZ3iAbtH3UggBCCqjRkb6njryWBC NNMjIDzX4T5hXvwRQh/7YNcOygSybyl40CStmWpCwcN6x6uq2YkU8iD0MJKC313lJocGe1moWhu FKah9HtMpt+f4/V6wCI8w2VFGszOzNVxjhVzo0MU3bNwuxPBFlu+uF0cIJTtFQncOvEjsPUmBmd 5UFn5POL1vOe81x8jSJ+CVhlJdHDsnV8vIAYXHHyZuG21lokdSUqdCSN7TMiEWpabQel54GzC8E Q5xnWUvZ1NP6IV03iGMcUolp7YdThxcb2rH8K+qHFq4PMb4= X-Google-Smtp-Source: AGHT+IFIs9tK6Ia3HZmasKFOBkOZ5DkA964+wt56EXCns6wInJJjqFt3Tdwt5ChZJns81z6POSdXoQ== X-Received: by 2002:a5d:588a:0:b0:391:298c:d673 with SMTP id ffacd0b85a97d-39132da2286mr4274440f8f.40.1741365261208; Fri, 07 Mar 2025 08:34:21 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:20 -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 v3 16/16] drm/vkms: Allow to configure connector status via configfs Date: Fri, 7 Mar 2025 17:33:53 +0100 Message-ID: <20250307163353.5896-17-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-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 | 48 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_connector.c | 7 ++++ drivers/gpu/drm/vkms/vkms_connector.h | 6 ++++ 4 files changed, 66 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 8e90acbebd6a..07ab794e1052 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; @@ -512,6 +513,52 @@ 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; + enum drm_connector_status status; + + connector = connector_item_to_vkms_configfs_connector(item); + + scoped_guard(mutex, &connector->dev->lock) + status = vkms_config_connector_get_status(connector->config); + + return sprintf(page, "%u", status); +} + +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; + + scoped_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; @@ -531,6 +578,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 89fa8d9d739b..b0a6b212d3f4 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -87,3 +87,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 90f835f70b3b..35f2adf97e32 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.h +++ b/drivers/gpu/drm/vkms/vkms_connector.h @@ -26,4 +26,10 @@ struct vkms_connector { */ struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev); +/** + * 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_ */