From patchwork Tue Feb 18 17:07: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: 13980284 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 996CDC021AD for ; Tue, 18 Feb 2025 17:08:22 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C3CC210E0D8; Tue, 18 Feb 2025 17:08:17 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="GF6eKNnZ"; dkim-atps=neutral Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) by gabe.freedesktop.org (Postfix) with ESMTPS id E9D4210E04F for ; Tue, 18 Feb 2025 17:08:16 +0000 (UTC) Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-4394a0c65fcso64221455e9.1 for ; Tue, 18 Feb 2025 09:08:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898495; x=1740503295; 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=uL6cYtME81OabMEvJHb4zln7D1CzFUsjB88Lba9wNjg=; b=GF6eKNnZqzozxtddxjA9a5SngKr1WA0AF54RIKVNAEs1PpqbZBnQAr1BxfxWi8BCiT 1jY0A8JGWMp6bOqnRXNw0wnpRbIhAqPrbxf4UnETxT7/TLL23sG+G8fOqbUs4On3RXR/ e5EuvIalOdvvBd9AiAHcjbsuzM0JpBiGeV9gqMAZET/T2JtQI5LRiDi7vUQ7AHSBRFJV A2cg9Mjg2RbpwjwmsZFfWQD1mYOPilPEOWNSeM6k72nNx8BN+DnPrQHz5xH0L831TLrU pSJQiYycvkD8Q9IAlziIrBvs6dpTrJVZKj2f2V9DeB+5hV3xsm+2+PPS3IAhHd2zUXsG JYzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898495; x=1740503295; 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=uL6cYtME81OabMEvJHb4zln7D1CzFUsjB88Lba9wNjg=; b=weMXO7RyTTDZPIZZ44vgsFUwMqbe7tjdpONtyKZ4si1cOQI2B/osq3EN+kzFem4SJ6 gZrWxWhuQvqTfIpzD0OwHJJsCIq4QYC6z1ZzBHRaU4F7bLp5VHBa79Qf3EAq8vbqUjvF EKUQOJvKt/JZ/0X2iixWnQ7HMrskyh4Kcj/x8bAcN2ormI9SIlYtp4VdzMGhbzY9dTxJ hIWV5SXOTa86YJcezkQQLrisY6Ay71J7wHI8/O/rQxIlBdk9alcHuguFYiDV/pYxYQH9 3hmWEwnTsyC6BiVFVymIxQHzHBAtWSBXeA77c4qAFMZfi4xnXTvkm9ekELz6qQy+bzbn 1ZFQ== X-Forwarded-Encrypted: i=1; AJvYcCW5DQfUq6DLxxky8Bo/S+ipHn3tROlpfxvvc6LPrg8Y9wiEqe6WBdlh41E/Y1/EEDLDhcR1g70+G0E=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yyq73+ISsEscKZi0CytWuPdB+fbHkYgtP2HbWGVUXSdwjxiHS/U GNMbyXRgGDiu3oU4iOvs7C0KkyxciZikeWxZ1x8+phVJaOCj2MEz X-Gm-Gg: ASbGncuBAulXyLAU6zajIHNtdlFLaqTp0GGwlwJi1obb4auJxux2OrrTO89IRJhxGRO UKgoQORhM3eEhtcP1nItEfobBJWmXMlBHYdaLnvcCmLDrVF/FsU9sT2Ngw8123SfBIO2AvHHm4o nRHZ99v2KU1bSqBPha0IyNqhOj79F8kxK//iFMxzQ2mopXjEMz8KA+5GV4yE7HuhrBJYqvRUVT9 YZ0/6v0UJdY7R2iXJa5406oUCL5/4jhakeR3HtUfldDF2lksW8luxQj0//F5Mt/uM83FOFyZSyJ 2VFTkZ2J8QeBpBDvNQ== X-Google-Smtp-Source: AGHT+IF44VIn/rxhr0e48RyjAhlq5WyDUp5UN4pEKUc0N1DwkqpoyhaBjR6V+hO1E+VpZZ3N93vboQ== X-Received: by 2002:a05:600c:4fce:b0:439:3d5c:8c19 with SMTP id 5b1f17b1804b1-4396e717094mr127675585e9.24.1739898493749; Tue, 18 Feb 2025 09:08:13 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08: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 01/16] drm/vkms: Expose device creation and destruction Date: Tue, 18 Feb 2025 18:07:53 +0100 Message-ID: <20250218170808.9507-2-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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(). 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 | 4 ++++ 2 files changed, 6 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..0fe08cd0c461 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.h +++ b/drivers/gpu/drm/vkms/vkms_drv.h @@ -223,6 +223,10 @@ struct vkms_device { #define to_vkms_plane_state(target)\ container_of(target, struct vkms_plane_state, base.base) +/* VKMS device */ +int vkms_create(struct vkms_config *config); +void vkms_destroy(struct vkms_config *config); + /** * vkms_crtc_init() - Initialize a CRTC for VKMS * @dev: DRM device associated with the VKMS buffer From patchwork Tue Feb 18 17:07:54 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: 13980282 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 EF906C021AA for ; Tue, 18 Feb 2025 17:08:17 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4741B10E09D; Tue, 18 Feb 2025 17:08:17 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="hTjJuv+3"; dkim-atps=neutral Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) by gabe.freedesktop.org (Postfix) with ESMTPS id 93DB310E04F for ; Tue, 18 Feb 2025 17:08:16 +0000 (UTC) Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-38f378498b0so2569689f8f.0 for ; Tue, 18 Feb 2025 09:08:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898495; x=1740503295; 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=xhlZKEVK2CmNkJTJqhmNOGWOzMxjDVOcBuJnC6zguE0=; b=hTjJuv+3Ny59qALIL2fpqc0E2oKaznzBaEIcfG/d5X1c1vxs6js2yy53nozBuwKq8T m6lM1s1kRX8NRBZQgMHHbZmSCFFg3Nto7IJBrBQt1y/FHJidmYTYO6XMUDzMdOQdDmpx vU7TQaySNgHucu3lc5omtPUW0ab1X+BP5DMUNgFsrC/+CdKQavJT6FBUxYVw582AYxaw NkcX+1EIP7vB6r+9EtddFR+/FD7kI/BCTnBSztIgfHBkFIYE9FWS2MkPqz3y2sQFgjV0 dxMmXb84zzGJ8oUB/wusbgsHtHO/L9zw5TjufmCEe+pO1gshFxbUhaK46xsv8nxlu9wS kF2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898495; x=1740503295; 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=xhlZKEVK2CmNkJTJqhmNOGWOzMxjDVOcBuJnC6zguE0=; b=IjhRMIxMMoB2oeukNa8a+CTzRpPsWFWegqyT5xrJynADbIV0YtSSUYosHW7kh3dvHM 5gqgGakWLoB6qqH6YMVI+u1LLORjy+QnXgk40WN8C2AxAdE5OkfwH8/vB/vmIoTfzDRB 0MgjZ0CV2gNXmECggw3lAhs4n9FLj6peSRbkjKKtcIoYuLzVjlVgS+hFFjzfxq4K5NPw qztrnag0T3WaQ2aSz5w9BEK9AJndaJPi1NsewU7mIvzP2KCc9PT2NQD77iyVhWnfDU5S y5Df5VTbtKAH/JjJEc7cpuNhi7o+gJRV6mdhrtZ85swnZ/e8p2NH1MOOVkG4Lgb1JBpA oP4A== X-Forwarded-Encrypted: i=1; AJvYcCWNNiQEN8hmo8IvOzbH91kfuzjyxwm8LL9PqUAMfZPUaqOXK30SMFQ8A/exH/s59cIpELKWDQ3tQhw=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwcbHumE/a+miaCFGcK1z6Z61mE7P67lJRcyEZJdTlJDZClO9/B 1x3rpx+XCrBYmaJMAu1lhf8bI1hX7j2t5rfDs/tedG1N3n6raWyE X-Gm-Gg: ASbGncuVmHqDFrIoFCIUmMfMLqtqjkft16zDdPsB8B15DHSS5ehBH5XHQlb5lFDCfkH xgve5BuBnMc+FudEwCn6thLT2s25U9ey8M6ALGdO4QOMCuPu1CQVAvf4zc15vSTPhKhjthNmA9b LIXp2PwGudRL4/xsNGL8gVm0h5fS4Bts6NuT3Bqxv1QFYfL4NHAGBvmrx8nIfgqTBQLC8haubeX eC49PumMK6uQgIVW2vsaMIofYm+RdJcUGuhFy4jBxx7DlocHmTBvDctucdhDTfZEGVI9wkLEohJ YhpFGCGNch2wMyPbkg== X-Google-Smtp-Source: AGHT+IH8icho+L38oeOKMswgW+BxTpG0fhVPgZJOh4fltmkYl59ah50mSmw2PXO/3y6I7QpnfIlb1g== X-Received: by 2002:a05:6000:400c:b0:38f:2a32:abbb with SMTP id ffacd0b85a97d-38f58781d2bmr229666f8f.4.1739898494867; Tue, 18 Feb 2025 09:08:14 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08: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 02/16] drm/vkms: Add and remove VKMS instances via configfs Date: Tue, 18 Feb 2025 18:07:54 +0100 Message-ID: <20250218170808.9507-3-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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. 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 | 181 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_configfs.h | 8 ++ drivers/gpu/drm/vkms/vkms_drv.c | 7 ++ 6 files changed, 231 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..306f571559b7 --- /dev/null +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -0,0 +1,181 @@ +// SPDX-License-Identifier: GPL-2.0+ +#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); + + mutex_lock(&dev->lock); + enabled = dev->enabled; + mutex_unlock(&dev->lock); + + 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; + + mutex_lock(&dev->lock); + + if (!dev->enabled && enabled) { + if (!vkms_config_is_valid(dev->config)) { + ret = -EINVAL; + goto err_unlock; + } + + ret = vkms_create(dev->config); + } else if (dev->enabled && !enabled) { + vkms_destroy(dev->config); + } + + if (ret) + goto err_unlock; + + dev->enabled = enabled; + + mutex_unlock(&dev->lock); + + return (ssize_t)count; + +err_unlock: + mutex_unlock(&dev->lock); + return ret; +} + +CONFIGFS_ATTR(device_, enabled); + +static struct configfs_attribute *device_item_attrs[] = { + &device_attr_enabled, + NULL, +}; + +static void device_release(struct config_item *item) +{ + struct vkms_configfs_device *dev; + + dev = device_item_to_vkms_configfs_device(item); + + if (dev->enabled) + vkms_destroy(dev->config); + + mutex_destroy(&dev->lock); + vkms_config_destroy(dev->config); + kfree(dev); +} + +static struct configfs_item_operations device_item_operations = { + .release = &device_release, +}; + +static const struct config_item_type device_item_type = { + .ct_attrs = device_item_attrs, + .ct_item_ops = &device_item_operations, + .ct_owner = THIS_MODULE, +}; + +static struct config_group *make_device_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + + if (strcmp(name, DEFAULT_DEVICE_NAME) == 0) + return ERR_PTR(-EINVAL); + + dev = kzalloc(sizeof(*dev), GFP_KERNEL); + if (!dev) + return ERR_PTR(-ENOMEM); + + dev->config = vkms_config_create(name); + if (IS_ERR(dev->config)) { + kfree(dev); + return ERR_CAST(dev->config); + } + + config_group_init_type_name(&dev->group, name, &device_item_type); + mutex_init(&dev->lock); + + return &dev->group; +} + +static struct configfs_group_operations device_group_ops = { + .make_group = &make_device_group, +}; + +static const struct config_item_type device_group_type = { + .ct_group_ops = &device_group_ops, + .ct_owner = THIS_MODULE, +}; + +static struct configfs_subsystem vkms_subsys = { + .su_group = { + .cg_item = { + .ci_name = "vkms", + .ci_type = &device_group_type, + }, + }, + .su_mutex = __MUTEX_INITIALIZER(vkms_subsys.su_mutex), +}; + +int vkms_configfs_register(void) +{ + int ret; + + if (is_configfs_registered) + return 0; + + config_group_init(&vkms_subsys.su_group); + ret = configfs_register_subsystem(&vkms_subsys); + + is_configfs_registered = ret == 0; + + return ret; +} + +void vkms_configfs_unregister(void) +{ + if (is_configfs_registered) + configfs_unregister_subsystem(&vkms_subsys); +} diff --git a/drivers/gpu/drm/vkms/vkms_configfs.h b/drivers/gpu/drm/vkms/vkms_configfs.h new file mode 100644 index 000000000000..e9020b0043db --- /dev/null +++ b/drivers/gpu/drm/vkms/vkms_configfs.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +#ifndef _VKMS_CONFIGFS_H_ +#define _VKMS_CONFIGFS_H_ + +int vkms_configfs_register(void); +void vkms_configfs_unregister(void); + +#endif /* _VKMS_CONFIGFS_H_ */ diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c index 23817c7b997e..5bcfbcb6c0c5 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -28,6 +28,7 @@ #include #include "vkms_config.h" +#include "vkms_configfs.h" #include "vkms_drv.h" #define DRIVER_NAME "vkms" @@ -214,6 +215,10 @@ static int __init vkms_init(void) int ret; struct vkms_config *config; + ret = vkms_configfs_register(); + if (ret) + return ret; + config = vkms_config_default_create(enable_cursor, enable_writeback, enable_overlay); if (IS_ERR(config)) return PTR_ERR(config); @@ -250,6 +255,8 @@ void vkms_destroy(struct vkms_config *config) static void __exit vkms_exit(void) { + vkms_configfs_unregister(); + if (!default_config) return; From patchwork Tue Feb 18 17:07:55 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: 13980285 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 E5891C021AF for ; Tue, 18 Feb 2025 17:08:24 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 54D7910E2B8; Tue, 18 Feb 2025 17:08:24 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="glwXB9/+"; dkim-atps=neutral Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id B2FB710E40E for ; Tue, 18 Feb 2025 17:08:18 +0000 (UTC) Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-439950a45daso6149295e9.2 for ; Tue, 18 Feb 2025 09:08:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898497; x=1740503297; 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=yjhuBRdxXqW/2QEKLkzw2I4K7vjGSpOOdxc8AYlfvfY=; b=glwXB9/+JUMfmRCGSWocgNQ+oWCTaWUPb1G4CWJsDNEmV6Dv92MWKUwx4IJu4Q8rkQ Y7FczsGu3YZtjeUkK9GTcPXFMMXzXfT8Ze1Be7/xFnVi5wkaJ0OEbAm1FQB8jLb09O3h 15oEJG1q6Nfh6IWvL1wo4FAOGth18aKE0EmXQGKIZYGKCZHlrvwWnsfMV4EtRKl88AnS Hw7NtRM1voiigSQFgyBegSIooqzj4P/Sw5tC6cAv7eZaDncSw980DKyz1pVvbVxe8g5K tCX/Y9ol9jm1rBNkRKbLHvcqiFcICHn+cvDN3wyWHutrBqG174yIPQDgPF8Zyxly5UiU 8Hhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898497; x=1740503297; 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=yjhuBRdxXqW/2QEKLkzw2I4K7vjGSpOOdxc8AYlfvfY=; b=ckyo6v4xr8w+irB3K77cOrAvpZFbDHk3HtwfoawaUstA7qLMqs4Vj9tqul1snO2KDk zHH9mZOn9vNbGcrGpmRgpw5uzEt5F42BxlUQQBzd7Dqz9oHEie/VgdB0TOAhZSL08FUW FrtsbGBZSc/P2+pbPI4ySoFqeF/UQ5HjS7JzGGbapKgKKXzwhfS5mcCLfVvHbWTqzrr7 OIgs3ga80DCkbdydVcxaChTb4ncGweFnpcNdQiJu/lTd5IRljYzZSaKLEY2LKwJgRNGU rHo7UVAYIvwzUKF9QpmUJ1Ia4O+rTazBbpInjwSUYZXRQmL+IaHVxRYY+wEF6fiqpFW/ p4cQ== X-Forwarded-Encrypted: i=1; AJvYcCVwMkAGpBZe0uskbPH4ApOzuzeITqrsFNCTWH3+xVkjeNRkQfVBxH3L8onjgj9RwBGDPIufntfvNQU=@lists.freedesktop.org X-Gm-Message-State: AOJu0YyzSRsrX39fvv4dYdfhRnYk9N/vM0P4JTh77ur65gaXPGX31khZ 3ptsAfG+JnAh/aN3QqOlvXNxrMoJZBUkUU1c9r4jnwVdp+4uECo4 X-Gm-Gg: ASbGncs8fHTAtH1qcsrKcM2x6zC/RWfOoIQ1a2Ii2ig7lELHm86Q9qW14xN38f5JL10 IpoKCGNHjJX3H1HoSDGP7ZmXFYn9AJTPheNgbSe7hh0oWkVohk3/FI4xwfzDpJS3zj0RpI446rY zrj6+zrinDy3jKbnjY0MbniOpkWDQl9cGbS62z9AYS9/dMDo5r3uRsFn/bpxTOly9fQbVXR4ie5 y3sBzvPSNmDJoiCzlxYrW8pcYZBXRVmLWJHWQY9QVO1hyYc1+jhDMeWIzTYDzlCOUh0G0+pcqiu 7snlInIsTtE5NB/kXw== X-Google-Smtp-Source: AGHT+IFbJF9e5WdqgLAejew7B490btdgXX9pwq+ZzgR0AWX/aBt0neIv4ytIpTTz6pcQA9tCEhfsdA== X-Received: by 2002:a05:600c:1e11:b0:439:86fb:7324 with SMTP id 5b1f17b1804b1-43986fb738amr67674355e9.4.1739898496776; Tue, 18 Feb 2025 09:08:16 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08:15 -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 03/16] drm/vkms: Allow to configure multiple planes via configfs Date: Tue, 18 Feb 2025 18:07:55 +0100 Message-ID: <20250218170808.9507-4-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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. 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 | 101 +++++++++++++++++++++++++++ 2 files changed, 116 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 306f571559b7..dd9dfe51eb3a 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -15,6 +15,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 @@ -22,16 +23,112 @@ 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; + + mutex_lock(lock); + vkms_config_destroy_plane(plane->config); + kfree(plane); + mutex_unlock(lock); +} + +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; + int ret; + + dev = child_group_to_vkms_configfs_device(group); + + mutex_lock(&dev->lock); + + if (dev->enabled) { + ret = -EINVAL; + goto err_unlock; + } + + plane = kzalloc(sizeof(*plane), GFP_KERNEL); + if (!plane) { + ret = -ENOMEM; + goto err_unlock; + } + + plane->dev = dev; + + plane->config = vkms_config_create_plane(dev->config); + if (IS_ERR(plane->config)) { + ret = PTR_ERR(plane->config); + goto err_free; + } + + config_group_init_type_name(&plane->group, name, &plane_item_type); + + mutex_unlock(&dev->lock); + + return &plane->group; + +err_free: + kfree(plane); +err_unlock: + mutex_unlock(&dev->lock); + return ERR_PTR(ret); +} + +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; @@ -137,6 +234,10 @@ static struct config_group *make_device_group(struct config_group *group, config_group_init_type_name(&dev->group, name, &device_item_type); mutex_init(&dev->lock); + config_group_init_type_name(&dev->planes_group, "planes", + &plane_group_type); + configfs_add_default_group(&dev->planes_group, &dev->group); + return &dev->group; } From patchwork Tue Feb 18 17:07:56 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: 13980287 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 B63A2C021AF for ; Tue, 18 Feb 2025 17:08:27 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5313B10E40E; Tue, 18 Feb 2025 17:08:25 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="g9ksKz5j"; dkim-atps=neutral Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by gabe.freedesktop.org (Postfix) with ESMTPS id DA78010E3F4 for ; Tue, 18 Feb 2025 17:08:19 +0000 (UTC) Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4398c8c8b2cso21812825e9.2 for ; Tue, 18 Feb 2025 09:08:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898498; x=1740503298; 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=Y8R03JFVj2NKekAWxfkOZ96PWx+yt6w/rnA7LR8wx3E=; b=g9ksKz5jwCb5GPIPvvQRhjRonYZJ8MPzkwZNX0/dNp3ktt3J7ngmy+e/Z8e2LTap6b gKIu2E6bBv0jwmKaN1c8lZ3QVvPkF4AyJqcnDWogKnChOBDXagdEpDde3jRHRLNuQfvr 7uRJeTy0y1lMpt1eSwIZGDa3VX5VjsdjnPUPA3cCaYFOl8+2hXs3ckuZpwHl5d8L04eZ /BwBrCcFlObSKkmwMib1aKRkOYkG2bjkRIFN2AyUZ1T0SWgcgzM/7gloubDuwzRFWboR QTbTSUIeTenzUBLdaks19JoIIP1oPu7myE3hPCuL5vLVuC4DcsJYfuDEUPlHmnU7pvhT TH1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898498; x=1740503298; 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=Y8R03JFVj2NKekAWxfkOZ96PWx+yt6w/rnA7LR8wx3E=; b=mk1Lqx6vNtvXIXsgRaBeqoVvhgCF6/FejQXvK1K012rfw7TVLIO9jz1xTMMAvsauBm aD/KCcDFKR4tMZ73ZfDqw7QQ4poYkSYmvVmkPAFTj558I2srlKOX3tOJHgNrFbU0Pz11 DIhxIIY97Le0biV9MepnNnyVbnYWCjZqGhMIplACN9zCySVMdEb87eiR31UVoqq9Tyd5 USozKYZ/rkBl9o+KwIbvo6tqnjp1u+S4UeOXwIfOaZNaMZgnb9u9/mcG8RgGr3U7T+C3 SjPUz9fFx+7C/qHtC/MVbjVD6AFWSMR7dEifK8gSs7YaFbxRyKuCr+kLqtpnLmRVbvdf HpWA== X-Forwarded-Encrypted: i=1; AJvYcCWI/Rgoo7ieRIts0DAtOSUL5MIHv7LXtBL/m+6ocf5dAeZZdE+ax9GynPQ7wRUo84LwpoeanSvOtkM=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yx/9yHgIiAauB62+yRP7d6Ah3yA7nootj3ZcVjpXoxrTZfc6BQ4 0GMsdVskbJvilDUbVRCHO2w0cRxg9dd4pI2whDH9ANJod/qwxGPh X-Gm-Gg: ASbGncvL8XZo2xJiqO3iiPJ1zeH6DiuIydUkDpjJ5+ji+b1Dm2ia6wnz+wXCFRW6J4T VM6IeRWJNTAAVyd/0MddfKfHDVw7rZ0HAly/ps6ZSe+G1nZ7PY2x38FjqqMr9gLcJXTw4sBB3kO 4qPnbI+xKcN/BkbAg07ltQqCNTob34x1g+ZW2sv4fZ3FbEHkRuZq/J+ZrhkvggF9bec7rvGlB49 SAlOKDyQlDj6tKKNv1Jc2S8tnIASk+sdpnZDtP1EDbdYQAGeuwAU7aTpCP/XbQSHN+uw1GA4j3W 9gVCu4Ygj+7J6yNvMA== X-Google-Smtp-Source: AGHT+IFHJhZKf7IH9i9zM3eHxhLXuccFXsGBcnnRTeEzbT9cC2YctBvx2HRssvzKQvcni8dI79RnDw== X-Received: by 2002:a05:600c:4ecd:b0:439:35e2:bb45 with SMTP id 5b1f17b1804b1-4396e6dfd41mr152201005e9.18.1739898498201; Tue, 18 Feb 2025 09:08:18 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08: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 04/16] drm/vkms: Allow to configure the plane type via configfs Date: Tue, 18 Feb 2025 18:07:56 +0100 Message-ID: <20250218170808.9507-5-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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 | 4 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 51 ++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index bf23d0da33fe..d95f228de05b 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -84,6 +84,10 @@ 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 + 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 dd9dfe51eb3a..093735f47858 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -54,6 +54,56 @@ 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); + + mutex_lock(&plane->dev->lock); + type = vkms_config_plane_get_type(plane->config); + mutex_unlock(&plane->dev->lock); + + 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; + + mutex_lock(&plane->dev->lock); + + if (plane->dev->enabled) { + mutex_unlock(&plane->dev->lock); + return -EPERM; + } + + vkms_config_plane_set_type(plane->config, type); + + mutex_unlock(&plane->dev->lock); + + return (ssize_t)count; +} + +CONFIGFS_ATTR(plane_, type); + +static struct configfs_attribute *plane_item_attrs[] = { + &plane_attr_type, + NULL, +}; + static void plane_release(struct config_item *item) { struct vkms_configfs_plane *plane; @@ -73,6 +123,7 @@ static struct configfs_item_operations plane_item_operations = { }; static const struct config_item_type plane_item_type = { + .ct_attrs = plane_item_attrs, .ct_item_ops = &plane_item_operations, .ct_owner = THIS_MODULE, }; From patchwork Tue Feb 18 17:07:57 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: 13980286 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 906C0C021AA for ; Tue, 18 Feb 2025 17:08:25 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A356610E3F4; Tue, 18 Feb 2025 17:08:24 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Zo7VAzlq"; dkim-atps=neutral Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2DF0E10E2B8 for ; Tue, 18 Feb 2025 17:08:21 +0000 (UTC) Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-43996e95114so5925855e9.3 for ; Tue, 18 Feb 2025 09:08:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898500; x=1740503300; 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=2duRuE/yZVXOXN/jBplEXsWwBrq6X3padZ2YIHFcxIY=; b=Zo7VAzlqmHPMRRGjVlIbqfcqVdIypDf3mdIyke/RUyUMXLiZ7dFhtBPPKAnF1ityXV mWIHtPfS69u4LkiKFUvCMJhd1YcMlJYO5Umbv78PK6ARoZNnwda4WFUpeh9CpePN69Kb I1yWhPRKZOo7Ud4aLz73jRMJooQxZOT0qsmtdsb/jnvzXmb6LpQmj07pUtdweRcksIIM 5yE0mVgecSp2sErydHlFFbwFoVTgzSUENeE3f+05BUVzcL0afvxiraS7sGyQZoBDMFzV rIgOCF146Ag2/xBVpZyL5EhHt+xVvA7H9sIKwKFMSaPD4gb4gJWr8Wuj/b9ghFuL1O05 jaLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898500; x=1740503300; 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=2duRuE/yZVXOXN/jBplEXsWwBrq6X3padZ2YIHFcxIY=; b=FmrkMrCRWFoIGO8upq/UtaXopL8x6hVtclelsWQmXKb31PxXYn5rTQIZ8PFEDaHksO Kw7e1lUnuMjj4d6jxlfMe8fhzyjfY26T260473PujToVSwdp6FEeGeatZhmsLIhnUd7M +bSRyvJKZm5tNzV92MRziYcjFv37/59Dhdm64BPiUVkMhwzQgG4pIGS3Pz5A36vVOSiQ /nJaUr/BZxZhFaOfVEBSH13AbiBxIXjX7QsPR23JVjYewec8F2IdJt+E8orz/lt3w+t5 ddDeW/unlMrom/JSPOTYFil0W0sBYMEXsAg/4BMVsy+Q245QxhyvCUTvFsQ5mGdpjEFv JR3Q== X-Forwarded-Encrypted: i=1; AJvYcCXybVLcL948w2zJKCgxLJQi2GH4DOc34PppHkota2RJ//JNOi0U7RjqnqfdtcF0H+6EcX0Kfo4/luk=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yy70Z9OZ2j4sxjKO1j80xI5xrZL7tcZBJNhTTma6+PWgR93Uj3g h1eC+SWAm2QBjCYrGOdzmtU3P7to3avMwxAMas/RouZpYGMmt+Ea X-Gm-Gg: ASbGnct8pJeZz6DDv0KuebLCrZgqZR3mG8CHeqJ9lCYxHk2hpdi3npBAYEUYqBlj7ER YadRDFYjyhuWa6HIZZRl9dNDVR55J5ZtIhPLJwp8Ipj9iY9tekeu3e86MRdkbK889hG21Z1/eqC xBBDjls8teA/Xe6BXQQc8VD3VWftQkdyQX4Lfy4KboCbCjhLQaTBa4SgW4KnsYNEzL0AABpXn2L ADxWbutG/xHDWRqcd0FhtjxVw8EPRd8MTy7HZphXcfD3iSqPkJn5+MDBndHAWWwQsjITlHWbtOY EA17MK1P2htiLS1xVg== X-Google-Smtp-Source: AGHT+IExW6UuaTDCAVrVvvER/ec1B5FRhWSiJKQBV1MNTPXbV9fjpuD31Qx9KXMPB/93kGDF8ru3hQ== X-Received: by 2002:a05:600c:354f:b0:439:6b57:c6b with SMTP id 5b1f17b1804b1-4396e700738mr127330165e9.17.1739898499450; Tue, 18 Feb 2025 09:08:19 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08: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 05/16] drm/vkms: Allow to configure multiple CRTCs via configfs Date: Tue, 18 Feb 2025 18:07:57 +0100 Message-ID: <20250218170808.9507-6-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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 | 98 ++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index d95f228de05b..da5157adfd79 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 @@ -88,6 +89,10 @@ Planes have 1 configurable attribute: - type: Plane type: 0 overlay, 1 primary, 2 cursor +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 @@ -99,6 +104,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 093735f47858..52205a8a9cb4 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" + * @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 @@ -24,6 +25,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; @@ -44,6 +46,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) @@ -54,6 +70,84 @@ 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; + + mutex_lock(lock); + vkms_config_destroy_crtc(crtc->dev->config, crtc->config); + kfree(crtc); + mutex_unlock(lock); +} + +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; + int ret; + + dev = child_group_to_vkms_configfs_device(group); + + mutex_lock(&dev->lock); + + if (dev->enabled) { + ret = -EINVAL; + goto err_unlock; + } + + crtc = kzalloc(sizeof(*crtc), GFP_KERNEL); + if (!crtc) { + ret = -ENOMEM; + goto err_unlock; + } + + crtc->dev = dev; + + crtc->config = vkms_config_create_crtc(dev->config); + if (IS_ERR(crtc->config)) { + ret = PTR_ERR(crtc->config); + goto err_free; + } + + config_group_init_type_name(&crtc->group, name, &crtc_item_type); + + mutex_unlock(&dev->lock); + + return &crtc->group; + +err_free: + kfree(crtc); +err_unlock: + mutex_unlock(&dev->lock); + return ERR_PTR(ret); +} + +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; @@ -289,6 +383,10 @@ static struct config_group *make_device_group(struct config_group *group, &plane_group_type); configfs_add_default_group(&dev->planes_group, &dev->group); + config_group_init_type_name(&dev->crtcs_group, "crtcs", + &crtc_group_type); + configfs_add_default_group(&dev->crtcs_group, &dev->group); + return &dev->group; } From patchwork Tue Feb 18 17:07:58 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: 13980297 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 A6BD8C021B0 for ; Tue, 18 Feb 2025 17:08:52 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1DD7410E740; Tue, 18 Feb 2025 17:08:52 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="WKejIpoN"; 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 5911110E2B8 for ; Tue, 18 Feb 2025 17:08:22 +0000 (UTC) Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4396a4d5e3bso42449435e9.3 for ; Tue, 18 Feb 2025 09:08:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898501; x=1740503301; 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=b1/MGJA6ABLV0I3ehMALxcBw1PNxhc/iy12fyDBkAZY=; b=WKejIpoNq0f22KnKBM+vZP4NUpda7A3g5O0Qjm65X3oMlzPN8G7DTsOTUQ3agYw8gx +dLMm0a0/RQHe8nINijGKCnbyD+S/CaHdbAGtUzNNniOj4FhwUqcKvWhQMIgPh2otGWS F5PKOk/1ndwqYKP1RY1ShSOUipHZ+eFNdh6pqzpYz3BEvXoTLnPzGyfmVQDKsDwXBXD6 zyF6ejKTSZ3OyNMvy3d+DlRcXkhofizDojIO7quJBRHD6kipFOKQWFZ/hfv6oyFa1Gfl 4WKSr8a9zfk88R1uFX0Q2q1GMoaJz54UXnQYUySJRhudlewYjK4Dj4toFY2snPTguAcT SRkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898501; x=1740503301; 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=b1/MGJA6ABLV0I3ehMALxcBw1PNxhc/iy12fyDBkAZY=; b=ZYcpoP4Xy3TKsKzGzLS/60JeVFCxZPL7eZBxYl4E4Bs5OQ7LRdTYesNkA0XcTdkH/B qUg1mdM9e3ZYXCLUxt6aqdXWPRwE5+eqsz5h3yaz4FI1cFCj1w6/oxY6VpMm6j96EeF/ XQT4jez6a2zEQePhlZ7xBbZ9ngCnIWEbuu19G9VFXhGKhzdFWMigzFY2q1OYG5h+Kl9g P4IoxE1/qJgVPIxb/1174NfGtmWuCnOTxTS5UBd/6DmYuDIq7+0DjxtW9FhtCQkiqKh1 5cin75gbugwAZz5wbwq62CKyT1HI1hOhqMuZ9kyykY+H11RZwu/ZHn3AcSmOE4th57LF m2og== X-Forwarded-Encrypted: i=1; AJvYcCWfS+9aP6Jv856zmVNCbniH3RRxiYDhuT74V5he6vROwfPIyPvf4iFI7LYT2Mk8eWRu5Me3l9lq4lU=@lists.freedesktop.org X-Gm-Message-State: AOJu0YxtqPe+flIB+Na+46auASCgQyeG1IIweZcfsFnzpcU3ofcZ4Xvz xmEjqvsBaMPhJ0wMhp8XkMAbfGJljwMvp9XRpe3RlA/nlvtWdZRo X-Gm-Gg: ASbGncsBaJe0PDIZcUo1ijBDkbbdI7ZCyxfOYfgvEsPgeZcYSqV+i/r1Bk4ce+qud/q eZ/745E3ywQT5W14RNDVOjKKSQX/xesPWliX+uctYnvrdoRlSWKHiGmTwFVcN0YENJ8KVYnPMAU BTiOEETY7Jz9vWsG8TvkGCNYKEkI6PRfwj12uEwLsVUJiTcHWlTzlqTNOrL/DsSRYHuLzFkKYIr +viw6mEAyV+V48bcVyWZhLmxPsXArheytIHZ4iw50Zfy160Esvf/eBblW35M3BijzbJPLjphMwP 5b4IUqXFs942ToBcVQ== X-Google-Smtp-Source: AGHT+IF1iQmYZpMoTMMeqAXis1UUCoLwudIFl99fCClIyXGpAUbfavofD4v8daX3RdLtI67Xxu9Krg== X-Received: by 2002:a05:600c:19ce:b0:439:6a7b:7697 with SMTP id 5b1f17b1804b1-43999da70d4mr5526705e9.14.1739898500661; Tue, 18 Feb 2025 09:08:20 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08: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 06/16] drm/vkms: Allow to configure CRTC writeback support via configfs Date: Tue, 18 Feb 2025 18:07:58 +0100 Message-ID: <20250218170808.9507-7-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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 | 47 ++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index da5157adfd79..4e87d8a81844 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -93,6 +93,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 + 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 52205a8a9cb4..88037a57a138 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -73,6 +73,52 @@ 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); + + mutex_lock(&crtc->dev->lock); + writeback = vkms_config_crtc_get_writeback(crtc->config); + mutex_unlock(&crtc->dev->lock); + + 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; + + mutex_lock(&crtc->dev->lock); + + if (crtc->dev->enabled) { + mutex_unlock(&crtc->dev->lock); + return -EPERM; + } + + vkms_config_crtc_set_writeback(crtc->config, writeback); + + mutex_unlock(&crtc->dev->lock); + + return (ssize_t)count; +} + +CONFIGFS_ATTR(crtc_, writeback); + +static struct configfs_attribute *crtc_item_attrs[] = { + &crtc_attr_writeback, + NULL, +}; + static void crtc_release(struct config_item *item) { struct vkms_configfs_crtc *crtc; @@ -92,6 +138,7 @@ static struct configfs_item_operations crtc_item_operations = { }; static const struct config_item_type crtc_item_type = { + .ct_attrs = crtc_item_attrs, .ct_item_ops = &crtc_item_operations, .ct_owner = THIS_MODULE, }; From patchwork Tue Feb 18 17:07:59 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: 13980288 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 DD9EEC021B0 for ; Tue, 18 Feb 2025 17:08:26 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BD88F10E411; Tue, 18 Feb 2025 17:08:24 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="lbnkPTgO"; dkim-atps=neutral Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7CBE610E2B8 for ; Tue, 18 Feb 2025 17:08:23 +0000 (UTC) Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-38f2b7ce2e5so2360579f8f.2 for ; Tue, 18 Feb 2025 09:08:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898502; x=1740503302; 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=9hQRUblb+vO7RJ4YMQbXRW++SdGt5uub9rk+BJCkK/4=; b=lbnkPTgOsh93By7EVTsFJzaJ1D4BLEXI3/CEzdMHtxkqbdUIO9ARrIqt4BojfFisxA env5s03bbsim0+76qgQ4CANYh3lc59iqaX/8A1+HCB0MlPAgUlbPgMUWV2Sns3za3TIC niWP58xRcUXrBwj3i5t7tPhA41EjE6Sh/MeTPWoCvDHqKxobN2TvKP7kimuIuhrtrGK0 GYi3kpUw6Nl38vYin2/a2tMl4n4tWh3uFX5BtIybLs1nFQDbLZe8UIYmQAuq0vOEQpCR KjZ4gVvcFo4MScfR2xKzqBeL9yznhEmuBG8fMGYqQIfnVozyiP94BDZZKmIP8wCSmAuY aZjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898502; x=1740503302; 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=9hQRUblb+vO7RJ4YMQbXRW++SdGt5uub9rk+BJCkK/4=; b=X4Z3KO2pvvRCJMZmLqMtUNglhSUgawH+vBhfUHjK/TAx1W8jgP6v72hq/Xeai03XAW KWnKUrW5nacT7vl55WwbgQzlcwnc7oJ5GLaYsqK7OAVysl3dpPs/UdESn4HFUqgiBOk0 VYTDSBDalVWAi+gwGmoKDxbAokQ9rC59RQ/00b2jK6e2hGEKdvVZw2kT/s8iUuLWwf6X yOj9fTWAIkogpL/KIBGqoH/HRK17JSly0vslQPL9g0UrgWfXfxxWphfIm3ZrkArUbj37 QWorPcpG3lzSKC5+TjEBnTYS9n4bgsA7Bido+LrChtsF7oU9BVWEMC/KYq71n93SF2On quGA== X-Forwarded-Encrypted: i=1; AJvYcCVB4niW6U0DUzXoZpyP/Er0kRoc/Nt7oEwyArFctJmSMokOigHEGNQ6RqQX5FblJWhNiYmmN0KoMS4=@lists.freedesktop.org X-Gm-Message-State: AOJu0YxmbRgezJszEMgbxTeTrXZU85LRpdRCDtO9tJ7EztZR6hWZtwis EVYrpguN2C3zyXUVNO1+x2mzymFzk6jqdCAo1picW1frn4yf3faM X-Gm-Gg: ASbGncsLWEPYtSbj7AcgP9GnsWBxJyUUCCNneLwicvjqzlirwNfBlCBR5JRvRwPAVNW K2vtbh+mm9pFOHy8PvbMiJ67JU7H+3eTfAdC0Q4RNJJFWzg9H9OtsvSkt2XQl0PhuGGkVPG2sFy qRwa6KgnI2hqnP8e+TW6/F2EFU2As3aQ1m7gmvBtSwQYwTlhmeiFq46sEM6U2HpL4NdCYcln4Sn LPl7IrRXqYbqnC8pn1BeK5FwL0vbEDKJJ2MNJfWNnDwx469oAoMZeykJ6VHmMcn17Q10U6RsQ2m cf70N1rT3G0K+DZoYg== X-Google-Smtp-Source: AGHT+IFcWb1Y+wG/0Wid8Odg/wbxw6fNIMjnOHVTs78p5eZGd+zacraSrMvuQdfCFFp6AbRWpnHw+A== X-Received: by 2002:a5d:47a9:0:b0:38f:4531:3973 with SMTP id ffacd0b85a97d-38f45313bccmr6180267f8f.4.1739898501833; Tue, 18 Feb 2025 09:08:21 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08:21 -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 07/16] drm/vkms: Allow to attach planes and CRTCs via configfs Date: Tue, 18 Feb 2025 18:07:59 +0100 Message-ID: <20250218170808.9507-8-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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 | 61 ++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 4e87d8a81844..3c9d72bdb65a 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -97,6 +97,14 @@ CRTCs have 1 configurable attribute: - writeback: Enable or disable writeback connector support +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 @@ -107,6 +115,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 88037a57a138..7d5ebdd45d53 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -37,11 +37,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; }; @@ -70,6 +72,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) @@ -195,6 +201,56 @@ 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); + + mutex_lock(&plane->dev->lock); + + if (plane->dev->enabled) { + mutex_unlock(&plane->dev->lock); + return -EPERM; + } + + ret = vkms_config_plane_attach_crtc(plane->config, crtc->config); + mutex_unlock(&plane->dev->lock); + + 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); + + mutex_lock(&plane->dev->lock); + vkms_config_plane_detach_crtc(plane->config, crtc->config); + mutex_unlock(&plane->dev->lock); +} + +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; @@ -301,6 +357,11 @@ static struct config_group *make_plane_group(struct config_group *group, config_group_init_type_name(&plane->group, name, &plane_item_type); + config_group_init_type_name(&plane->possible_crtcs_group, + "possible_crtcs", + &plane_possible_crtcs_group_type); + configfs_add_default_group(&plane->possible_crtcs_group, &plane->group); + mutex_unlock(&dev->lock); return &plane->group; From patchwork Tue Feb 18 17:08:00 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: 13980296 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 645B0C021AF for ; Tue, 18 Feb 2025 17:08:48 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9664310E73A; Tue, 18 Feb 2025 17:08:47 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="HPgyvIbN"; 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 B455110E40E for ; Tue, 18 Feb 2025 17:08:24 +0000 (UTC) Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-38a8b17d7a7so3243985f8f.2 for ; Tue, 18 Feb 2025 09:08:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898503; x=1740503303; 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=JGOAV+n91+x7w7PPxVJ9AYuQQLXVm0lW+qAsfnT2Nw4=; b=HPgyvIbNlju7DH8feW7CKejjBrFCnelNTINH3sBrGmt0oWwrGawqRn19zAd0zsJHC0 M7uS/YHNov6p6gFD0oDClgsp5x+tRU1whnH89YBbjPpDk7nBr7SLhw3bXx3qYQ2nLy7J HFI9g/V3te+zRuC735smO9oJqEV9nLDw1UBcgdG3hx+lla99gr2zHjqvj8rNHu2BiaZL 58A1V2hwyLNxj79so7evjHAhzsvcp6UCAUkEgqBwY8YmqX5ZxANcGAwiS8dmdfMcHeok 7ITZlltVUPTkpQLVml4k5wHvk1EeM0n/+Xc818/XbOkt9qfoSXthzpVbF3KYbrkldm0o FMYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898503; x=1740503303; 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=JGOAV+n91+x7w7PPxVJ9AYuQQLXVm0lW+qAsfnT2Nw4=; b=VErgt/PQDvyzGkdIud0O0YZaRqVFJIka2X/0dZ3j8YJgiU6DwOW9I9HSqwdQTihurc 1G9T/pmWTuJFt7JZY33v0M1NvkyotAQUi/z9YV3cFreTRhF4KdlrLJOiFGY4yBskjnSF c56FzCCTDBac9/t04JA9Oj0hR3kJRX84NDuFtnnuYFsKl8EbSo6lR3J3E5bOs2x2gqNX 6M861Gu7vN8jxJOMk6MeIAzDWjK6Hz0AoF8sAYMLVmiqgPOh8jEfkOL//iTC0plfoxEb Rjuj/OP9ivgeI9UFGvmhnPuowuup3T7o9PmxbE50y1iE5jRo5QgfDd0+FeX7xSFPb9QB 18bg== X-Forwarded-Encrypted: i=1; AJvYcCW6RX5wfjBUvKzf/VBefnNRynKz9YwHDIrwZkpLa2Fp44hu0FWhhQ77lrITyaWpQ+hRNynX4jHv+U8=@lists.freedesktop.org X-Gm-Message-State: AOJu0Ywln8tZ04i4xK1XTLiq6Koe7Z1q9+lwg2QVkZUPeEmj5gmxGS96 VcbgTuBUyw1aoRhvOM4gaZMHKVR38qizBFFCmh2m2Q/kPIaGrc0w X-Gm-Gg: ASbGncvRK2NtGpscAN8ADAnxLJoveGmjpFdfvim/A8KlSlxeMelgeIb0EM6ZpEY8/v9 oQR96UQ/WvVotAnGi4UeK97JI12jT0zKmNBmkW1pdoIkC3xKSHbis6LWs/4lT7AIlxFIdaAiuWy RiwU0xiqFMYy/gZWxu1pFU00GkKNYgi+er1anmnUQJCxXj0uhrhqWkJ+4tjiAL8A6f/ij8mSOSA 4KfwjIehQdYk4SgY508dSGA2cG+4PnCiFs6AHiN6IYpOvggVZ+6U8qqlRwiArUINYWSRoMyUOAv NnjRhovjrDpdYaB/tQ== X-Google-Smtp-Source: AGHT+IGVwOCse7i0Rjw0IStrwKsXzhkTTPNQyrA+eVwBPg5ii444ycnjb80RjsHuyBpDCbaSDwenXA== X-Received: by 2002:a05:6000:2a4:b0:38f:483f:8319 with SMTP id ffacd0b85a97d-38f587f3ec3mr204987f8f.51.1739898502998; Tue, 18 Feb 2025 09:08:22 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08:22 -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 08/16] drm/vkms: Allow to configure multiple encoders via configfs Date: Tue, 18 Feb 2025 18:08:00 +0100 Message-ID: <20250218170808.9507-9-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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 | 99 ++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 3c9d72bdb65a..24f40128e8f3 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 @@ -97,6 +98,10 @@ CRTCs have 1 configurable attribute: - writeback: Enable or disable writeback connector support +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 @@ -118,6 +123,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 7d5ebdd45d53..d7efa50a3fba 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; * 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 @@ -26,6 +27,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; @@ -62,6 +64,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) @@ -79,6 +95,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; @@ -382,6 +402,81 @@ 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; + + mutex_lock(lock); + vkms_config_destroy_encoder(encoder->dev->config, encoder->config); + kfree(encoder); + mutex_unlock(lock); +} + +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; + int ret; + + dev = child_group_to_vkms_configfs_device(group); + + mutex_lock(&dev->lock); + + if (dev->enabled) { + ret = -EINVAL; + goto err_unlock; + } + + encoder = kzalloc(sizeof(*encoder), GFP_KERNEL); + if (!encoder) { + ret = -ENOMEM; + goto err_unlock; + } + + encoder->dev = dev; + + encoder->config = vkms_config_create_encoder(dev->config); + if (IS_ERR(encoder->config)) { + ret = PTR_ERR(encoder->config); + goto err_free; + } + + config_group_init_type_name(&encoder->group, name, &encoder_item_type); + + mutex_unlock(&dev->lock); + + return &encoder->group; + +err_free: + kfree(encoder); +err_unlock: + mutex_unlock(&dev->lock); + return ERR_PTR(ret); +} + +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; @@ -495,6 +590,10 @@ static struct config_group *make_device_group(struct config_group *group, &crtc_group_type); configfs_add_default_group(&dev->crtcs_group, &dev->group); + config_group_init_type_name(&dev->encoders_group, "encoders", + &encoder_group_type); + configfs_add_default_group(&dev->encoders_group, &dev->group); + return &dev->group; } From patchwork Tue Feb 18 17:08:01 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: 13980290 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 EF524C021AF for ; Tue, 18 Feb 2025 17:08:34 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4CF3610E457; Tue, 18 Feb 2025 17:08:34 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="D/fn/ae0"; dkim-atps=neutral Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7A07310E418 for ; Tue, 18 Feb 2025 17:08:27 +0000 (UTC) Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-4394a0c65fcso64224785e9.1 for ; Tue, 18 Feb 2025 09:08:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898506; x=1740503306; 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=xxl4nD/rAmawJnGv7wGWIydakUQ3xQq8ck/CP82D2ZE=; b=D/fn/ae0mo1mZZrXe/WtLnIsnul8m7vHMZFh2gfeLjN4+p9fK+yhR3992V9PlcK5Lx 8sAAXVnVcDXvaomB7+FI1m6JgZ194QiVHVIC5HyKzguWxnnnsNOkInL15Ef3gve6+tMX +PoHOCmSoZcmp87Bp3TS3MAfHS0dBsp18hKNiaY4qJHLXkobyYH6GCoyFngyjyZgUJp/ g9/mFxRNleNIRYiwTA3zYvk9GbZbeocTWa5lmJ4gde91Lsd/qMGp9QKvzce1z4nZiNES F5pe5GlGRueVr7y6uMCIcyBKcCBnGaK1xtE3or6jNCV2hOEEPOuSQzMYD+6pFSjTuTL8 Wzsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898506; x=1740503306; 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=xxl4nD/rAmawJnGv7wGWIydakUQ3xQq8ck/CP82D2ZE=; b=lEIFLbBfRMl669lU7khP0OPlJd3zgsr8XWYY8k8aE91ogUBg539JJoM7rLVdf9ePIY nJlKzqlogGCEyGtoHJpsJVYIX7rDAdgZ3chlKyS55xgEcSRLBYwDsxC/h+5Usn32BH67 yyom/Aw1oa/PkIcTiBRzBrnffGh0eeKaXK8q0KwYF83ZUd3hYB95+jfMWF024Z+aqoR8 8GATCTTeQBtt4PTiSDGsudxNsfC6dRwfZRCnxZpIXokYMqRXpdAEq3qYjq1av+eRX22i TaKNEQRub+yUImNs0rB6IXRL18rLAhZRNccJkLIYwgafEOxu52kROewno3As4CgFWyJC PQ+Q== X-Forwarded-Encrypted: i=1; AJvYcCURoMaPiE3A7MDMKzItfdjk6N7NmXhWrhAh/MsCn9DG8U5HWmBkTtqjy1OiU/l+fkcBWpqH8ly6mY0=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yx4nbODz7pwYfhJqZ0hk6ngorEZvRNT+vE+vTTBp6hRejI1o0br U3Yd7dwNLiDIHjfCSJ3wJMb8sWwnSt4ZlSTyN6Box/bAQQcsfuNP X-Gm-Gg: ASbGncvi9nIWl7DlK2Q9CVwGrM9Yp647I/85LWm/kFVJX2EPHlctidpyr7ZV+YLzo8O sfHmFqMMxtQCmMbVbvEAa5G76eAxY3uHX3YazvfGHwSvhuijRKyAhphIMd5IdhDaKqMgDXxOvbl OxsdiYYppvQnDGXvNIXEzQUqFgDZDZNiDt6rxCVgvRxiwLDUSZmnEj0PRl+ULCyvjEm3DYIT5QG 0btTAZMRO9teMhqgu2aBB6j4nOUBp+UdiYZLM7FsprQPjZKrXPOEPNtT8WTKUCldvNWVH2ckVop jqtjPl7k7lcOwadTCQ== X-Google-Smtp-Source: AGHT+IFOp5iSe+2jxXvP5iADRB2bGk089MQxVl+L+ViO/4h4dBkCGWhr8Swc12hrEHrxNb5s4GEhDQ== X-Received: by 2002:a05:600c:3b8c:b0:431:5c3d:1700 with SMTP id 5b1f17b1804b1-4396e716f3dmr134120115e9.21.1739898504233; Tue, 18 Feb 2025 09:08:24 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08:23 -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 09/16] drm/vkms: Allow to attach encoders and CRTCs via configfs Date: Tue, 18 Feb 2025 18:08:01 +0100 Message-ID: <20250218170808.9507-10-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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 | 63 ++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 24f40128e8f3..6a15af0b7317 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -105,6 +105,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:: @@ -121,6 +122,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 d7efa50a3fba..66c8a66f7b2b 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -69,11 +69,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; }; @@ -99,6 +101,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; @@ -402,6 +408,57 @@ 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); + + mutex_lock(&encoder->dev->lock); + + if (encoder->dev->enabled) { + mutex_unlock(&encoder->dev->lock); + return -EPERM; + } + + ret = vkms_config_encoder_attach_crtc(encoder->config, crtc->config); + + mutex_unlock(&encoder->dev->lock); + + 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); + + mutex_lock(&encoder->dev->lock); + vkms_config_encoder_detach_crtc(encoder->config, crtc->config); + mutex_unlock(&encoder->dev->lock); +} + +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; @@ -457,6 +514,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); + mutex_unlock(&dev->lock); return &encoder->group; From patchwork Tue Feb 18 17:08:02 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: 13980292 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 48232C021B0 for ; Tue, 18 Feb 2025 17:08:36 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6F90810E45D; Tue, 18 Feb 2025 17:08:34 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="PtxY3Vnt"; dkim-atps=neutral Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0A36810E418 for ; Tue, 18 Feb 2025 17:08:27 +0000 (UTC) Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4396f579634so20766715e9.1 for ; Tue, 18 Feb 2025 09:08:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898505; x=1740503305; 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=Ve8gYYXgy7/64VPreNjA6gL3Ezxa0nJl8754eZoTxPM=; b=PtxY3VntcANCkd6/nZtlteZWqSncm26RcxRBMab/jqW7ErfDAukws4DeSISlrMCoHe r2e17GgqHzNbXB/vgWtrM/Rk1RRGUDYGaJl9DPRladxUMRmbdD2i4N40YFMSE5Qc8Yo1 iZxA3zOGcG+tmZeLClri6LPBw0ePVL/Kp2yh0qglI6z2NnFJ8X3S1+hsHSZ0+TFOyJdb mzIFUfSz+q56HfxXmqr6KrN43qMvFfjycQw+TV4FIp/fcwGEjya7AH3ay6eCwDtZx81Q aTdWS9uWtf/sJPm0m7ZDEsC+SOX0T5GvJPzF7s3ONXjb0lnkrXG+F9FOw2ISfoKRsfcp 15VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898505; x=1740503305; 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=Ve8gYYXgy7/64VPreNjA6gL3Ezxa0nJl8754eZoTxPM=; b=Mnn8udpWmqyClAQTyJZLGPyYLgauQn+DD6PGQC8eJOPA4K5UCTp+V+YrZC96maA9NC nRLlq8lCGWUTl0TGRL2Qg93kM/3Btd16L7a45sNV9mF2nlu1KYBQGphOOK3s5Tps4pKI LdXyEaX8A0vkzmJeDNLmcrWju5Z+AuYHGvp+0FpfMGqzt+rp+TMlHKOWWz0gAIxDRq8W arLYQ8HCWqtnkhn9MICybV+dPxBYj6ajGBUAaP/bAj6sc8pYjfwlJOuQnEwAICGxL/ad 3x79VrS0A5PPfpPVCDtvGpLgx0f1GCG3Izfe0oY8HHsCWtX8QRHrHHLcj/K4uly5PXcR T0qQ== X-Forwarded-Encrypted: i=1; AJvYcCVRvuSTu9q8CiAvxHk/0+xA3RC+fRj3v04LvyEH8GBAKL4aCPgZoXeeYxSPk1Mw6/VTFuQoU4cnktA=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yxybb2Gcxblpho0MroO4d3/B8f3cllEqA8VyckTChTkqEuBb1gR MpPsGYAQFs2jSdfPAfRAWPhrPkMbgi1xYp3Fd6g18906ypoVnrXU X-Gm-Gg: ASbGncs34jVBdM43/BdxOPEebxFfuNhFHVw09Ry/MDXgtdnrHDj0CAi1AN7n+DIuQbw d0JA47hK8P/1IT47pT4wzsGund1S23ul+yYO8UAavXm1R/2YZTfpJVKJ9c44j4RGoBbKWz8w4yD oflhvMrDv9wSPl/Vr70M7kO7eWRP8zOQmGIhDdIgteHipIqcCN+9c8BmSuoJ0PJutI+zkTxoiJ5 tu6WR17FgKOj6c66KN/r5EwKKg0JtFOPv92Rb/ZC/ykmdutXCJOOiFrkKMT+/fPONMgyhBM/yfP 3w3vOkqEWL/gTa+qBg== X-Google-Smtp-Source: AGHT+IGmly+ynTiNsVzHpyu5bN60h1mqH3TEwz4cVT9xPOFUwl9vP/Rmkjriv0H/tD9iti+dt9LUDQ== X-Received: by 2002:a05:600c:354c:b0:439:9951:1220 with SMTP id 5b1f17b1804b1-43999da7d5emr4465085e9.13.1739898505333; Tue, 18 Feb 2025 09:08:25 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08:24 -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 10/16] drm/vkms: Allow to configure multiple connectors via configfs Date: Tue, 18 Feb 2025 18:08:02 +0100 Message-ID: <20250218170808.9507-11-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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 | 100 +++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 6a15af0b7317..3dd55c3e8900 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 @@ -102,6 +103,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 @@ -126,6 +131,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 66c8a66f7b2b..cd8a164bda3d 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; * @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 @@ -28,6 +29,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; @@ -80,6 +82,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) @@ -105,6 +121,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; @@ -540,6 +560,82 @@ 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; + + mutex_lock(lock); + vkms_config_destroy_connector(connector->config); + kfree(connector); + mutex_unlock(lock); +} + +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; + int ret; + + dev = child_group_to_vkms_configfs_device(group); + + mutex_lock(&dev->lock); + + if (dev->enabled) { + ret = -EINVAL; + goto err_unlock; + } + + connector = kzalloc(sizeof(*connector), GFP_KERNEL); + if (!connector) { + ret = -ENOMEM; + goto err_unlock; + } + + connector->dev = dev; + + connector->config = vkms_config_create_connector(dev->config); + if (IS_ERR(connector->config)) { + ret = PTR_ERR(connector->config); + goto err_free; + } + + config_group_init_type_name(&connector->group, name, + &connector_item_type); + + mutex_unlock(&dev->lock); + + return &connector->group; + +err_free: + kfree(connector); +err_unlock: + mutex_unlock(&dev->lock); + return ERR_PTR(ret); +} + +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; @@ -657,6 +753,10 @@ static struct config_group *make_device_group(struct config_group *group, &encoder_group_type); configfs_add_default_group(&dev->encoders_group, &dev->group); + config_group_init_type_name(&dev->connectors_group, "connectors", + &connector_group_type); + configfs_add_default_group(&dev->connectors_group, &dev->group); + return &dev->group; } From patchwork Tue Feb 18 17:08:03 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: 13980293 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 067CEC021B2 for ; Tue, 18 Feb 2025 17:08:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C77FC10E460; Tue, 18 Feb 2025 17:08:34 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="WWlQ9C+E"; dkim-atps=neutral Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) by gabe.freedesktop.org (Postfix) with ESMTPS id 25EA310E418 for ; Tue, 18 Feb 2025 17:08:28 +0000 (UTC) Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-38a25d4b9d4so3788467f8f.0 for ; Tue, 18 Feb 2025 09:08:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898506; x=1740503306; 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=zMh+KUfn1etWGOIGMQruCkQ1YBGyd1feerZxvX24mUE=; b=WWlQ9C+ErMv1iwjEwzBcqmrg/ZGrd7WG/T2j3VgwmUpPTSS7QJ1JrKOJ/odS8DR4LK Isntv5AdqqxYVm1sMBtN0luOcjpqSGRoH5fp2ol5PTvckW+F0CPCXktu2fSBoqww0JgG 6N67sDEZ62B1/rM4Zr/HBLEjGl2tleDUCCAjIgP60hWQHrobDs6cO2qYQUuQPxrfQGmu cb6wOqJTpQKsdshKXmoQVgx3VYvV/6VHWNXn34Zv/WSuDDrLSpUnJFP1yA2K8H70XZqG uTLBlrbDaLveq82LZyUk4ovBb/W9C4BXPuXXVURECegMfL/9CmRrnOARY77HStnd6vhq gkgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898506; x=1740503306; 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=zMh+KUfn1etWGOIGMQruCkQ1YBGyd1feerZxvX24mUE=; b=oHO8nz6kQoMuDps100NG0x24jB/2/UpZn5Ps5EfvQAWNpFY6lClwHeMf/2vl4qFRDh Podor1h43erFjbq0Til21L77tPu9jf6lAFrO0Dqtgn6FfiSKxBDfkshgp0ZcnSuqwnUs Jm/7S7BKuPuPHxzmNNdZymoO20em3JrlWB8opYkT8nGsWAXqZ0dTd+jiR1I3gDvETB+I tbryG01pWp7zRntUv9lEyjPYJ27LRCFo8EmZ0dwLpQP70u4qiHd6CDDLMEb0zPREMR4o Lk9W2cBgCbZWiBEzkT4VuLS5JPfsNxrIlnIax5vW2iad2xy6jnvJJFYLgsDVLkoOQmpv mgBQ== X-Forwarded-Encrypted: i=1; AJvYcCUjc7IlA9FtD3OBspXtP9Bj+sWd0ICrQVQCQx9sBiSq6cUqggN8vQ/oxa/M2aolRKwU5MdL0l7nx+w=@lists.freedesktop.org X-Gm-Message-State: AOJu0YxZNq3WQDWOBh1tW8ugzxWZQYnnM7MJrO3PMncfAlmiyA5Pz1Vm Qv7wkzkp7gm2v59D1ssIM1UA574RRtykD+5rE9kZ2TayKsVfWRhL X-Gm-Gg: ASbGnctSdlSk2VCWAdglMfdE1StB94TqQAY0ZY0yU/BzYALlA8aQBiBZ1gqc4NXJJk/ HJ5w/4299pTTQpqvbPQo/BZ8p4JYfej0f9do3NhfQyfZksLMGCObeE7kGPtuWbVkRPTLqOst1s2 eE27/3nZELl6F++lNRq8Wq6mbHZzj43pj7Clb1wthvLZnuPEZdfuzEqtHQ1o5D28J7oUYGHMTyJ 2DhGGo7HVg6H1oCl59OsY80b46RTNA1QcXE+c1DT7hBTwu/2dUeSpMqEwjwxhgt2KoaP8MEuKk5 VhogAa98Nyqh+K8H0A== X-Google-Smtp-Source: AGHT+IFyFS3GiZT59tCTqcUuta/dOVRknOAV/MGyTCdLGGBN9rKzilnjOpZ3GrgUo/1tmo6lnG8kkg== X-Received: by 2002:a5d:47c6:0:b0:38f:3ea6:1b98 with SMTP id ffacd0b85a97d-38f3ea62215mr10025877f8f.31.1739898506471; Tue, 18 Feb 2025 09:08:26 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08:26 -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 11/16] drm/vkms: Allow to attach connectors and encoders via configfs Date: Tue, 18 Feb 2025 18:08:03 +0100 Message-ID: <20250218170808.9507-12-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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 | 66 ++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 3dd55c3e8900..0212e99e12dd 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -111,6 +111,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:: @@ -128,6 +129,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 cd8a164bda3d..9036d9983078 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -87,11 +87,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; }; @@ -125,6 +128,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; @@ -583,6 +590,59 @@ 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); + + mutex_lock(&connector->dev->lock); + + if (connector->dev->enabled) { + mutex_unlock(&connector->dev->lock); + return -EPERM; + } + + ret = vkms_config_connector_attach_encoder(connector->config, + encoder->config); + + mutex_unlock(&connector->dev->lock); + + 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); + + mutex_lock(&connector->dev->lock); + vkms_config_connector_detach_encoder(connector->config, + encoder->config); + mutex_unlock(&connector->dev->lock); +} + +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) { @@ -616,6 +676,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); + mutex_unlock(&dev->lock); return &connector->group; From patchwork Tue Feb 18 17:08:04 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: 13980298 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 7B953C021AF for ; Tue, 18 Feb 2025 17:08:55 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id ED58A10E418; Tue, 18 Feb 2025 17:08:54 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ngSio4Zc"; dkim-atps=neutral Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) by gabe.freedesktop.org (Postfix) with ESMTPS id 37ADF10E418 for ; Tue, 18 Feb 2025 17:08:29 +0000 (UTC) Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-4398e3dfc66so16624115e9.0 for ; Tue, 18 Feb 2025 09:08:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898508; x=1740503308; 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=ngSio4ZcbgcL5XuVnoNwaRiVNSJXinDfAF3eQGpJJPZr2ebnRpTvT9y1IAwfYBJSF+ aZkUspFUR3GeYkiAYAlxGbIUCDqjjvk1vMtDnI34U7EI0Goxc0u/nwrvmcgl/FGgk/Ym fXoUxhLodTjfWXZQEViTHhXYmUTXChvPNVQv/7Q24ys4VlqpSBN7F5Bl21pP96a/CNSy FALkywTtL4ddT9boLNP9LmIlAodcS/s1zkMUlgQxil+2vEdGaAdpYyLTEQz2MXq8IaHD hK/tkwpauNwMnFah7/+21xko1ONCwXGph8NMmMjKp6JDACLX7CgomvVIpom31cFsYWC7 xw8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898508; x=1740503308; 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=guv7EPz0Ld1rKHkhPtYrDzZusb14BGlYUGxqZkDWUTZEKWqYLEI5RBDg70ic9zkUdJ 2kAQapZRyHehnplxRIcbq6RYWZ1TnzCEWupk9AA6vpyXqZuH/tIkCyDP1Eyevvn1BPIy 7HDfu6J6yOe7jIxleZc/LcTwbRQdk0QQN9Kv1wW/oy8UYbfSkrADCoZVK8qFQbVeamCh rs1Q4TrblYtxJCr5XwWNv5ulDSssjztamYq+1O8VNzNfvrTsvHBNWt/R7N9ZhOsoyOc5 AD7wkkzH8GvXf1EFnJ4hwUYSx3QD3g1w6uzg7QDWHVO/HGRSc8tN5FjMd5AUfO0Y7kRj KgSQ== X-Forwarded-Encrypted: i=1; AJvYcCXv6oHNHP8cMRnWFeBOjwBnwUy6UvyHR1Rh6R2pPLhtPY6u0Y4LqFNNJhySB06+32Wdf/KTZwg0jX8=@lists.freedesktop.org X-Gm-Message-State: AOJu0YxurSta1E5gtPfOvup5zc61U4R/0O+IVewE0gbL8TP6FOtmbnM6 iqQREdBSiahrTCxha93QhUivwtXRVQZ0k4Mejf3sSwg+TXOIM4VT X-Gm-Gg: ASbGnctYIXBCVLg4nMtZpoe4d90AY0bKb7XL9EPvorYXK6ozyGD8DE23jrXsMZGphsT BRqPU+sjJedIPAPP9txfYx0G0AVTFVPOG4j5AecrZCFusLbQdS1926xKfxHZXpaxUhFfVmXfoMf D3xqpCH4bgRipIr9/iEEINrWpvI0/q81VGA9WghJNqyByUroYq+mzPvE/dTzsCjtxJVmZiy00bF Z1imPqzjQfqil6gtvuqfvtsOyrnez3tUhkDmVlUG11qZNck6tEASawUltw5/vsGvZLOrduI+8Pe +EwwVlc+ffxy7NAMrw== X-Google-Smtp-Source: AGHT+IH86DlM2bJkhQtq/SuDDWBdaxNVLBKTS9fR8nYsmP+2MFV+J87LH9yijU9dT1LYxHXVZBQyaA== X-Received: by 2002:a05:600c:5114:b0:439:89d1:30ec with SMTP id 5b1f17b1804b1-43999ddb366mr4554355e9.29.1739898507577; Tue, 18 Feb 2025 09:08:27 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08:27 -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 12/16] drm/vkms: Allow to configure connector status Date: Tue, 18 Feb 2025 18:08:04 +0100 Message-ID: <20250218170808.9507-13-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Allow to store the connector status in vkms_config_connector and add a getter and a setter functions as well a KUnit test. This change only adds the configuration, the connector status is not used yet. Signed-off-by: José Expósito --- drivers/gpu/drm/vkms/tests/vkms_config_test.c | 24 +++++++++++++++++ drivers/gpu/drm/vkms/vkms_config.c | 8 ++++-- drivers/gpu/drm/vkms/vkms_config.h | 26 +++++++++++++++++++ 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/vkms/tests/vkms_config_test.c b/drivers/gpu/drm/vkms/tests/vkms_config_test.c index ff4566cf9925..3574a829a6ed 100644 --- a/drivers/gpu/drm/vkms/tests/vkms_config_test.c +++ b/drivers/gpu/drm/vkms/tests/vkms_config_test.c @@ -916,6 +916,29 @@ static void vkms_config_test_connector_get_possible_encoders(struct kunit *test) vkms_config_destroy(config); } +static void vkms_config_test_connector_status(struct kunit *test) +{ + struct vkms_config *config; + struct vkms_config_connector *connector_cfg; + enum drm_connector_status status; + + config = vkms_config_create("test"); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, config); + + connector_cfg = vkms_config_create_connector(config); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, connector_cfg); + + status = vkms_config_connector_get_status(connector_cfg); + KUNIT_EXPECT_EQ(test, status, connector_status_connected); + + vkms_config_connector_set_status(connector_cfg, + connector_status_disconnected); + status = vkms_config_connector_get_status(connector_cfg); + KUNIT_EXPECT_EQ(test, status, connector_status_disconnected); + + vkms_config_destroy(config); +} + static struct kunit_case vkms_config_test_cases[] = { KUNIT_CASE(vkms_config_test_empty_config), KUNIT_CASE_PARAM(vkms_config_test_default_config, @@ -937,6 +960,7 @@ static struct kunit_case vkms_config_test_cases[] = { KUNIT_CASE(vkms_config_test_plane_get_possible_crtcs), KUNIT_CASE(vkms_config_test_encoder_get_possible_crtcs), KUNIT_CASE(vkms_config_test_connector_get_possible_encoders), + KUNIT_CASE(vkms_config_test_connector_status), {} }; diff --git a/drivers/gpu/drm/vkms/vkms_config.c b/drivers/gpu/drm/vkms/vkms_config.c index a1df5659b0fb..f8394a063ecf 100644 --- a/drivers/gpu/drm/vkms/vkms_config.c +++ b/drivers/gpu/drm/vkms/vkms_config.c @@ -361,8 +361,11 @@ static int vkms_config_show(struct seq_file *m, void *data) vkms_config_for_each_encoder(vkmsdev->config, encoder_cfg) seq_puts(m, "encoder\n"); - vkms_config_for_each_connector(vkmsdev->config, connector_cfg) - seq_puts(m, "connector\n"); + vkms_config_for_each_connector(vkmsdev->config, connector_cfg) { + seq_puts(m, "connector:\n"); + seq_printf(m, "\tstatus=%d\n", + vkms_config_connector_get_status(connector_cfg)); + } return 0; } @@ -588,6 +591,7 @@ struct vkms_config_connector *vkms_config_create_connector(struct vkms_config *c return ERR_PTR(-ENOMEM); connector_cfg->config = config; + connector_cfg->status = connector_status_connected; xa_init_flags(&connector_cfg->possible_encoders, XA_FLAGS_ALLOC); list_add_tail(&connector_cfg->link, &config->connectors); diff --git a/drivers/gpu/drm/vkms/vkms_config.h b/drivers/gpu/drm/vkms/vkms_config.h index 0118e3f99706..e202b5a84ddd 100644 --- a/drivers/gpu/drm/vkms/vkms_config.h +++ b/drivers/gpu/drm/vkms/vkms_config.h @@ -7,6 +7,8 @@ #include #include +#include + #include "vkms_drv.h" /** @@ -99,6 +101,7 @@ struct vkms_config_encoder { * * @link: Link to the others connector in vkms_config * @config: The vkms_config this connector belongs to + * @status: Status (connected, disconnected...) of the connector * @possible_encoders: Array of encoders that can be used with this connector * @connector: Internal usage. This pointer should never be considered as valid. * It can be used to store a temporary reference to a VKMS connector @@ -109,6 +112,7 @@ struct vkms_config_connector { struct list_head link; struct vkms_config *config; + enum drm_connector_status status; struct xarray possible_encoders; /* Internal usage */ @@ -434,4 +438,26 @@ int __must_check vkms_config_connector_attach_encoder(struct vkms_config_connect void vkms_config_connector_detach_encoder(struct vkms_config_connector *connector_cfg, struct vkms_config_encoder *encoder_cfg); +/** + * vkms_config_connector_get_status() - Return the status of the connector + * @connector_cfg: Connector to get the status from + */ +static inline enum drm_connector_status +vkms_config_connector_get_status(struct vkms_config_connector *connector_cfg) +{ + return connector_cfg->status; +} + +/** + * vkms_config_crtc_set_writeback() - If a writeback connector will be created + * @crtc_cfg: Target CRTC + * @writeback: Enable or disable the writeback connector + */ +static inline void +vkms_config_connector_set_status(struct vkms_config_connector *connector_cfg, + enum drm_connector_status status) +{ + connector_cfg->status = status; +} + #endif /* _VKMS_CONFIG_H_ */ From patchwork Tue Feb 18 17:08:05 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: 13980291 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 5C21BC021AD for ; Tue, 18 Feb 2025 17:08:35 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6978010E458; Tue, 18 Feb 2025 17:08:34 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="LnI3LcVE"; 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 DA52910E117 for ; Tue, 18 Feb 2025 17:08:30 +0000 (UTC) Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4396f579634so20767195e9.1 for ; Tue, 18 Feb 2025 09:08:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898509; x=1740503309; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NfdjeoHNn9vAEGMDN9L94Mho5GfMjQgvCgSJKDEGohI=; b=LnI3LcVEeFQKcl3WaAk2JTBQ0s6i6s4UIhvk4xwAOBl7pSo2p7QUyXs6BoS3ET/y27 xIjoOXcmo2yL5aosP6x37Cb0rsx7km/eFXIdxgGnv0kEWDRp3sI7n1ILa2qAuBL44L8M sNbD6qYSpGj5QKbUREw5lvJ5qzg5JfgiwNBFhYteGM4/kHvTAZ3MvKSgXiySro1KaRdb Vwie/l0v51KCrrgyLaDjKUIy+NN0+HNxrxFFexsmUmxHU8mqM8Tqisj0q7jMOd+ukWO/ BAlgf1Y+Ggj1NgKojTpBaRcvD6ee+qWp2vprhzzzKykMUJ78V6mxHNmjBU20vqSmF9GL hWtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898509; x=1740503309; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NfdjeoHNn9vAEGMDN9L94Mho5GfMjQgvCgSJKDEGohI=; b=TjtskKGojEZ7iw9RcXEpjoQZOg+qcWCGZZ7G3GKNwW31uvSVUR5bwFm7HFMzuDXiyp gu4LMBheXAWU4TXy+CQQ4gTs4T/otkVw94yDhAH3muF0ZP+Hq+v8XUguyCQADrHvLBA1 tvaazWpnXChaY+315teAZlphACpmVBrTAh06f1wkVdtQZ4MpWHiFzIeyvN9PRF8LAG5b N9rXIqu6nAB4ORGMTwtXfmqsR0m1emiHCfLZolEW6CSIonIXc6XxMm5MZQoSeroyU3+5 xsNc2izayGE0xUgCfIY26tUyVz9y3DE5l5HHt+w5uXU0ueZEzHa+ULl1zdzlDRmsXS57 Pm7A== X-Forwarded-Encrypted: i=1; AJvYcCVKv0mYBF2jHmAwNa5DysN4TyEGOKiVCrgpXiny1Uwd9WhyVppR1eeE53E9bdk7bA73Zv1GJp3Pjg4=@lists.freedesktop.org X-Gm-Message-State: AOJu0YzWXKlKc7iRjAB0dN9ep33l7HQLzEP/PTuNZMhn4lSf+KXm7lHZ jMsFK0C02VhdMSX2hIjVRqZowSx2pF5vxBISfbA/urIhjJiP1H8w X-Gm-Gg: ASbGncurDr/YIYEIP4ChRrm8OoCqBZ44kJVqnfn+GGtf/EYx/NrmVjirFTGOBirr04g 8PyLmzdvQqytzNx32WXSVoQ46rbsdD6V9esWxOtm0eZWad38VXWKLpvqIMmQd2U/+l04wFqrw6v XItYd1RV0fZVs1nD8eVxCOaWM+sXVcn2sfeCqHWK4gaq3Hw/lTmDgcTddfN/WRdE/+BV4UYzqON Kn2chAcis26vs4+y8sHkhx1bWZWlheggaPr+dGKPOACuhwz9VKn5L42caXWDBZWN+8HMZjHZxGs 3xmVaUxeZpVBp4tWkg== X-Google-Smtp-Source: AGHT+IE1eFPl5+Oyx/1vusPe9+rS4AS9gxivs8zXH8Jex7fZs4KuM1ByBapfkEHksqciSOncUv53jg== X-Received: by 2002:a05:600c:1c18:b0:434:fa55:eb56 with SMTP id 5b1f17b1804b1-43999d923a9mr5039395e9.7.1739898509206; Tue, 18 Feb 2025 09:08:29 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08:28 -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 13/16] drm/vkms: Allow to update the connector status Date: Tue, 18 Feb 2025 18:08:05 +0100 Message-ID: <20250218170808.9507-14-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-1-jose.exposito89@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Implement the drm_connector_funcs.detect() callback to update the connector status by returning the status stored in the configuration. Signed-off-by: José Expósito --- drivers/gpu/drm/vkms/vkms_connector.c | 19 ++++++++++++++++++- drivers/gpu/drm/vkms/vkms_connector.h | 12 +++++++++++- drivers/gpu/drm/vkms/vkms_output.c | 2 +- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/vkms/vkms_connector.c b/drivers/gpu/drm/vkms/vkms_connector.c index 48b10cba322a..b03a00b5803a 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -5,9 +5,23 @@ #include #include +#include "vkms_config.h" #include "vkms_connector.h" +static enum drm_connector_status vkms_connector_detect(struct drm_connector *connector, + bool force) +{ + struct vkms_connector *vkms_connector; + enum drm_connector_status status; + + vkms_connector = drm_connector_to_vkms_connector(connector); + status = vkms_config_connector_get_status(vkms_connector->connector_cfg); + + return status; +} + static const struct drm_connector_funcs vkms_connector_funcs = { + .detect = vkms_connector_detect, .fill_modes = drm_helper_probe_single_connector_modes, .reset = drm_atomic_helper_connector_reset, .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, @@ -40,7 +54,8 @@ static const struct drm_connector_helper_funcs vkms_conn_helper_funcs = { .best_encoder = vkms_conn_best_encoder, }; -struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev) +struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev, + struct vkms_config_connector *connector_cfg) { struct drm_device *dev = &vkmsdev->drm; struct vkms_connector *connector; @@ -50,6 +65,8 @@ struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev) if (!connector) return ERR_PTR(-ENOMEM); + connector->connector_cfg = connector_cfg; + ret = drmm_connector_init(dev, &connector->base, &vkms_connector_funcs, DRM_MODE_CONNECTOR_VIRTUAL, NULL); if (ret) diff --git a/drivers/gpu/drm/vkms/vkms_connector.h b/drivers/gpu/drm/vkms/vkms_connector.h index c9149c1b7af0..5ab8a6d65182 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.h +++ b/drivers/gpu/drm/vkms/vkms_connector.h @@ -5,22 +5,32 @@ #include "vkms_drv.h" +struct vkms_config_connector; + +#define drm_connector_to_vkms_connector(target) \ + container_of(target, struct vkms_connector, base) + /** * struct vkms_connector - VKMS custom type wrapping around the DRM connector * * @drm: Base DRM connector + * @connector_cfg: Connector configuration */ struct vkms_connector { struct drm_connector base; + + struct vkms_config_connector *connector_cfg; }; /** * vkms_connector_init() - Initialize a connector * @vkmsdev: VKMS device containing the connector + * @connector_cfg: Configuration for the connector * * Returns: * The connector or an error on failure. */ -struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev); +struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev, + struct vkms_config_connector *connector_cfg); #endif /* _VKMS_CONNECTOR_H_ */ diff --git a/drivers/gpu/drm/vkms/vkms_output.c b/drivers/gpu/drm/vkms/vkms_output.c index 8d7ca0cdd79f..3af95983026e 100644 --- a/drivers/gpu/drm/vkms/vkms_output.c +++ b/drivers/gpu/drm/vkms/vkms_output.c @@ -87,7 +87,7 @@ int vkms_output_init(struct vkms_device *vkmsdev) struct vkms_config_encoder *possible_encoder; unsigned long idx = 0; - connector_cfg->connector = vkms_connector_init(vkmsdev); + connector_cfg->connector = vkms_connector_init(vkmsdev, connector_cfg); if (IS_ERR(connector_cfg->connector)) { DRM_ERROR("Failed to init connector\n"); return PTR_ERR(connector_cfg->connector); From patchwork Tue Feb 18 17:08:06 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: 13980294 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 BE580C021AA for ; Tue, 18 Feb 2025 17:08:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C3ECB10E45F; Tue, 18 Feb 2025 17:08:34 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="OUYmp//T"; dkim-atps=neutral Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) by gabe.freedesktop.org (Postfix) with ESMTPS id EAE7D10E117 for ; Tue, 18 Feb 2025 17:08:31 +0000 (UTC) Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-43948f77f1aso37668155e9.0 for ; Tue, 18 Feb 2025 09:08:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898510; x=1740503310; 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=HlEG/chzPR/lrdsujZEdOLY/tag0kKNloUyKVadlYPE=; b=OUYmp//TbdJ7iEfXegOqLnsLW6i5kdqdzp7ha9mxtVIQrbU16AOvns4uZuo5R51i74 EkekCj1luW+jdOH1/fdnKohZsY97z0EY+GiNE/ymAAJfPXMNzqXH/ZDJ+fo4hBIcR8++ /Vcp5JmJ+VMR+Ai9awFSjAVSsSTtw1jNjaraW5mkO+P+nd3epii8u6S6MLubXNNZfdpf gv2IeTFuaIQRG86FPUn6T5xScdnXktfNzMuZIdfxn1MN0O/l9lIlcoGk6IMP2nAhDJ3x Xo6kvXP58o5Y4XJEQixNWZTqDD3PuL1CLC+HJfY49/oK36DjY2azPsVpookw39BoiFFZ 4ouA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898510; x=1740503310; 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=HlEG/chzPR/lrdsujZEdOLY/tag0kKNloUyKVadlYPE=; b=RCkV1tqoGJ4Wph1lre6tyOcUqbfi+tVkqCvI1qnec41On3ctqjDTVyCsW3gpu2hEAJ b4eiJqGCsP6kLg6eAZcJvSKfaOwjOtah3y2bhmhJ3HqWmEVy3y3+fWZ70KU3nqiHUTaE ZorppC8TgGRSqG/6X3ARaRYUGptWppDkF4O2cvUQsZURAw4ukTx7wTeTGtceAY484YnZ Qfx0bUImFvDsG1A8Ux4dWgBgzq8i5TkHHAaQ8moau6bpI6ITJpNsEh2RTPE2ADx17KJa CXgjWOMdGKhXRiWmmOJCX7LZ0IsUBGUPUZ5e0TKSiL2p7rAFijYcI0AEh/fh+SElITQa 9Wjg== X-Forwarded-Encrypted: i=1; AJvYcCXRLP7+l1O9g3AnBFJAh/0i34Ck9aRpK2beC6U2e+3v/Bohl2pstBW1mKUbrqIPOGjNrA4LwXGrJcg=@lists.freedesktop.org X-Gm-Message-State: AOJu0YzOvCaJTvYOpNa8fgfTOtVs308jfwTKCpOTdfPx/68Jwx23J84K dh4q8QskwtW7IBceUEEhm0fpZN0k8KvAU0slPBIKiWoPLXQvHGov X-Gm-Gg: ASbGncv65NQ4++CPnwWNRl459ksSzqwNEnh0Ow1VVosi+8na9wUmpXS6o5mHKz+2Jf+ udETD6PX2gyKfw1BI6jMJbrx3tsG9oFyAlBK5biQna+syHxplg4snw0dbhOnwmeaQN96aHLx1vz y2Ku5dTSLNJcOGweO6HIpHn8M7zm7pUY68Qz5iAY8KTdUqzoNIDUb7y+EL4H1WMFf/670dKCUNw EP1+OLrI3oZVX2SPfFyqWaxNRHX6IU9Fyv1OmrntVwd23XfH+odjLUrKdNLtAuxgkP/JkILfh9x f0cWjOI+So8y98SLWw== X-Google-Smtp-Source: AGHT+IHJmx9NR3wfEj00ecrWtmWoVJ6ofaJLqeLW5MRWaQuX9F66y4B2x+CLpKatjE9UzUn3+3O1BQ== X-Received: by 2002:a05:600c:1c86:b0:439:9863:e876 with SMTP id 5b1f17b1804b1-4399863e985mr13677105e9.24.1739898510369; Tue, 18 Feb 2025 09:08:30 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08:29 -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 14/16] drm/vkms: Allow to configure connector status via configfs Date: Tue, 18 Feb 2025 18:08:06 +0100 Message-ID: <20250218170808.9507-15-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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 | 4 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 51 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_connector.c | 7 ++++ drivers/gpu/drm/vkms/vkms_connector.h | 6 ++++ 4 files changed, 68 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 0212e99e12dd..3068879ce1fc 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -107,6 +107,10 @@ 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 + 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 9036d9983078..f0813536be12 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -6,6 +6,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; @@ -567,6 +568,55 @@ 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); + + mutex_lock(&connector->dev->lock); + status = vkms_config_connector_get_status(connector->config); + mutex_unlock(&connector->dev->lock); + + 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; + + mutex_lock(&connector->dev->lock); + + vkms_config_connector_set_status(connector->config, status); + + if (connector->dev->enabled) + vkms_trigger_connector_hotplug(connector->dev->config->dev); + + mutex_unlock(&connector->dev->lock); + + 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; @@ -586,6 +636,7 @@ static struct configfs_item_operations connector_item_operations = { }; static const struct config_item_type connector_item_type = { + .ct_attrs = connector_item_attrs, .ct_item_ops = &connector_item_operations, .ct_owner = THIS_MODULE, }; diff --git a/drivers/gpu/drm/vkms/vkms_connector.c b/drivers/gpu/drm/vkms/vkms_connector.c index b03a00b5803a..ed99270c590f 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -76,3 +76,10 @@ struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev, return connector; } + +void vkms_trigger_connector_hotplug(struct vkms_device *vkmsdev) +{ + struct drm_device *dev = &vkmsdev->drm; + + drm_kms_helper_hotplug_event(dev); +} diff --git a/drivers/gpu/drm/vkms/vkms_connector.h b/drivers/gpu/drm/vkms/vkms_connector.h index 5ab8a6d65182..7865f54a313c 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.h +++ b/drivers/gpu/drm/vkms/vkms_connector.h @@ -33,4 +33,10 @@ struct vkms_connector { struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev, struct vkms_config_connector *connector_cfg); +/** + * struct vkms_device *vkmsdev() - Update the device's connectors status + * @vkmsdev: VKMS device to update + */ +void vkms_trigger_connector_hotplug(struct vkms_device *vkmsdev); + #endif /* _VKMS_CONNECTOR_H_ */ From patchwork Tue Feb 18 17:08:07 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: 13980289 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 40AF8C021AA for ; Tue, 18 Feb 2025 17:08:34 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B735310E117; Tue, 18 Feb 2025 17:08:33 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="mcN/rXSn"; dkim-atps=neutral Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) by gabe.freedesktop.org (Postfix) with ESMTPS id EFE6F10E117 for ; Tue, 18 Feb 2025 17:08:32 +0000 (UTC) Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-4393dc02b78so38958175e9.3 for ; Tue, 18 Feb 2025 09:08:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898511; x=1740503311; 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=46U11AO6xb80BamoNjm5kPpbkH0qTV1KcPGiHji9h2E=; b=mcN/rXSnlrGwTuJbLMURTBVLrMJdWW981t6o92DPLSwwCsR6b3r3B/K+FxsUPdavo1 bHTShPjryaCgtM4GfFlPybzZ6LaQU3QjfN8Ujniy5AnAhLPdRzflmdu8h7sfC+IoSTDe vvdhcug709g57wVIPhiL9b0HAqqge7K16ElMRwiZ5/7Iwecjthe5KdDKxOJwlEAab2XB VgUBpm9fiNaexcM58hfz4AERa63YADaZviR6+wZp828l8haAONawg1W073kKKRe1NlqG zvbdybiNMuxNhXZ0xXExHt+pKeHiXv5lkWWNm66dkkIeIX49oyF4Ho5+d7JH7GlOHmOP WMTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898511; x=1740503311; 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=46U11AO6xb80BamoNjm5kPpbkH0qTV1KcPGiHji9h2E=; b=N9pmaTohMq6LgnGtAexotTfofBwo/LxyKBn1UkV7BYqdWb9r/hnC9PbiD921nBoLzs lHqFG/VjCDdXsvby/wtxz4jII3PHuRx72Tabt1ppnWSfovu8fpZuDI7yAR9/dkrUkkHU iokImQEDe6vIVdHmdZoNqfkvpp5owtcQPW85yC7ID2J1dUMlKewx8V6pqb316bUL0Tg1 TgPu3uduhbU5M6jXXC9s5vQsC49GAEtJ5U0tTDhjq1lHk6R2a2PoOx9NSlS6fZxy87NN 190evahWItf/JWYyKSo/sYuw7ycJl5PsFB4g22nYD2C+g3z7qvv7f0YCUt/BpjcdOEP2 sm8g== X-Forwarded-Encrypted: i=1; AJvYcCXxJ2ZvFZU/RfcGEOofREYOIJbWjb6xPXlp1OzDtVjW2MEdHNE5fusalNVJe8HbxPMHy0mQNeRN6BE=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yx1qXymxR0vvL0oadRtpssoYgL+H/8pkqFhmyKbvVBLJ0aPctsj Zl+Cb9q9N1ImAeF+1QQKI9dTdDu7JWGV/qCeGCv9zC/foGwxGlcB X-Gm-Gg: ASbGncteSqwvcDkznpy1YnRXR61nVywDj48k7NsShoVbihyh3JnMX4r+QqasUu9X6AE hkFsUDaPZmMpoHz2RUzn5kVDgrWmn+Mq6SCYZ648hM64j4q4f2jgA1BuQIZMXpWT+TNxOaz0kYZ ijnrYspcpRj+wg5G0/zJdd9RJf+UWpmfetwDFSEgIzxqi3AMabPcem8Xma5nFGAIO3Q9hPeZfhp SG0fB/DCr9lXwqOseCnl0YnzrKHGHhRw/XRIlX5BPLbI1gw9qVESkOvseynZJ6zbGqgxZqCq/hA uQU5KV6+PUdye4Ffwg== X-Google-Smtp-Source: AGHT+IFj0qB2qfVbC3n33K9GAWHWIFhdo1khdlRmgJtnZwIcOGa13vHbilTat8DaM/+qL3Ncs9+1aw== X-Received: by 2002:a05:600c:3107:b0:439:9828:c447 with SMTP id 5b1f17b1804b1-4399828c60emr17222845e9.17.1739898511415; Tue, 18 Feb 2025 09:08:31 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08:31 -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 15/16] drm/vkms: Allow to configure the default device creation Date: Tue, 18 Feb 2025 18:08:07 +0100 Message-ID: <20250218170808.9507-16-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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. Signed-off-by: José Expósito --- drivers/gpu/drm/vkms/vkms_drv.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c index 5bcfbcb6c0c5..b4ed19c97576 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -50,6 +50,10 @@ static bool enable_overlay; module_param_named(enable_overlay, enable_overlay, bool, 0444); MODULE_PARM_DESC(enable_overlay, "Enable/Disable overlay support"); +static bool create_default_dev = true; +module_param_named(create_default_dev, create_default_dev, bool, 0444); +MODULE_PARM_DESC(create_default_dev, "Create or not the default VKMS device"); + DEFINE_DRM_GEM_FOPS(vkms_driver_fops); static void vkms_atomic_commit_tail(struct drm_atomic_state *old_state) @@ -219,6 +223,9 @@ static int __init vkms_init(void) if (ret) return ret; + if (!create_default_dev) + return 0; + config = vkms_config_default_create(enable_cursor, enable_writeback, enable_overlay); if (IS_ERR(config)) return PTR_ERR(config); From patchwork Tue Feb 18 17:08:08 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: 13980295 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 C2C7EC021AA for ; Tue, 18 Feb 2025 17:08:47 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3F13B10E73C; Tue, 18 Feb 2025 17:08:47 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="GPjg/7pU"; 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 1B2B410E457 for ; Tue, 18 Feb 2025 17:08:34 +0000 (UTC) Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-43964e79314so53420215e9.3 for ; Tue, 18 Feb 2025 09:08:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739898512; x=1740503312; 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=22DLucK3+Yc7gD+u5BwcgCf4UC4+6P633YUEKabQtVs=; b=GPjg/7pUJsEnEglg4k+B7Rdun4bXFXgEYxocqNT7KK/ase1OQmGernQGkn3qiA7JAl vQ6y+/Yfte7Xw4P2/VIsA7GxxdGNm/ikkLziZ7sYMTYQvmt5KjPxrNfAEKrc6EPlvE59 eiZLanAsN0HO23NTq++PAImVOVrsa7OeAM9EEjRPwmXcA6GypyKrp/DvQ+Ay1RQ9U/PA ERSucNQjVREYI8eVQ7XqquUUD891WmsnFWSSAAlawrNEDSch9gZf1GLPhJ9WJbgpdqTi 4ES8VAIJdBSp1Z5dEbC6ESBJkmBceT/xmXWNdwDF12uXe3hsemPQbtZwHhy7T7OSfo9S 5lmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739898513; x=1740503313; 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=22DLucK3+Yc7gD+u5BwcgCf4UC4+6P633YUEKabQtVs=; b=Ti2e1AF4GjCClWp5yUERlLEbCVzDciqWOKNw8zgLp1Kauw4UecqjhiUWFa5hOZGM+d iaLVOEM89tHNaZ6rjrAHuOpm2BJrYOng5B7vkMOyumwHCg743VCpkJgXjIi2pSWagxoj 0cCxOAkxgcgrgpcUssZKi7KnHn3miI1mpc7q0iYiIwPXCX6TDFFG8S7MiqrU0sjfYzY4 TU9p5b41ZutgRKlyqeTznS+bsSDtVV2p2aYxpz3MNrYb42oN2E3JsSnMcRHwKkDuK65t ZFnvCBJasQdB1uf433iYBEZHe0AdMRdJZHUcQCSOteeTZjTzxIVFhQlyiiw6+bxKRqsu WdTQ== X-Forwarded-Encrypted: i=1; AJvYcCV6Teu2MT3yBVhfbKasS2F+JkvEOL8DamHG6Ihr6u56Kz0PyuzRU5whvopfgUuK+2K0JhEPfLNE8zU=@lists.freedesktop.org X-Gm-Message-State: AOJu0YyCdatiDmKxaW8C/KEEJOqf82Z7CqiQdpyvLHEhPg1fK4HDo+ke hZL8GFBR7Bbv1Ecatz2W3lTvPRmHEOIQVUHGCNVZdIoEFLR3mxln X-Gm-Gg: ASbGncsdsDAwqaoLobRTDFTBim/xmI++uESMEEgPA/A5Gv7IOAlGs3FT+MLZsHurLwb uittPFXhSHkehfnvwO2H2AGGVEg2bQvEJ+eswqeogNNPIHCpJ53JZ5FkeQaOLYNmRhaNyjm2xfc Df+8c525ozA8+hS8UAgF4KWDLvSGQyYg7Aa8m2pNsVoA6Jz/zgju4pIE/SvX6JlDiaKF5aKvaG4 4kZwzB6E9Emtwk03LMzSwdKkchy4mBK5numDXFr+XoNB/J37XTloA0ooGFspANUwU2OpBW5mYqi 5eZXmc3aXOVu+WQkag== X-Google-Smtp-Source: AGHT+IGiD3HptGQJEipMmcpgiCAIU0akacuYmIdP7lpU6nnc+z3is2VM6M2uT+zI0Es6m92LwRl5VQ== X-Received: by 2002:a05:600c:4e8c:b0:439:99e6:2ab with SMTP id 5b1f17b1804b1-43999e60444mr3652025e9.28.1739898512471; Tue, 18 Feb 2025 09:08:32 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439941bd54bsm24680135e9.11.2025.02.18.09.08.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Feb 2025 09:08:32 -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 16/16] drm/vkms: Remove completed task from the TODO list Date: Tue, 18 Feb 2025 18:08:08 +0100 Message-ID: <20250218170808.9507-17-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250218170808.9507-1-jose.exposito89@gmail.com> References: <20250218170808.9507-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. 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 3068879ce1fc..0a5fcf0b3114 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -225,21 +225,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 -----------------