From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2B18426F457 for ; Tue, 18 Feb 2025 17:08:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898498; cv=none; b=ueMcMRLRCMNzzWFAXpphfFZ/6zqzbv81xEZy+UOvMLGY/VQkw1Fnq+dKZFDH3PssBa7f8XXPQc9uo1UV0a3E1OqEGOUbJBOb/mTSxQg5XuRKV1VbyNVqMbD7zv285qdMyRRHBE3HepLSI2Ji0aXhBDs4M67xLWqw4rwTu2LZFIE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898498; c=relaxed/simple; bh=jOGVzx0B5armIJs+uY25Q2Q336m0m5Toe/PBYNpttxo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=r5kpYF7LTyZkBvLUdSJVUL1uJn7z8L/EIGuOFQlodEYh73GqSvDdZ2s4gBbLld5LPnFBJ64HRd157A1V5hkFzO7tqvRIpGbcHm54hTWPnq/LMcVRuu+8544hYUkpyXKXd3AqekA/sgMSGQiFEv0eVsxzvXRm64oGkGHbUiHuxaU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OCCZ8f7e; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OCCZ8f7e" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-4396424d173so58936145e9.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=vger.kernel.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=OCCZ8f7e4QJjB3osF1Hmwxu6/PrEKWFERa0UskghSj4a4+s01Y4Y5GlRl0qGBTyP3Z YTxTQXz6S4gA+F6xX2QplhTcA4t0StDK82xZuuKIFl5kDn14U++jPkNgJxaIFdXnZunw iEbdCdvxtP3rZDwXHjbK7tLGOrdD4jDtU7o27NCwYXrSZPb/pHW07Yr6Qo6jvEwFt5yC 5PW+TJhoFYhftRnuOw2YYYNwlbv8yQny0G7kmf0MTgJYamQ23d2Z4dzy+xHu1YTIOJEW x6SuW2MVuAismvUn8RAtthFfLjP0MY2xdwhWSeFTZLTopr15wKoFCqEVLxZcoPxgSocr eO9Q== 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=bcFNVmRnVRUP49/fnYmN+RgUPhUkrT8wNZ/x4wPMEtCZq/Gd8HCl/ViHwnGotQJr7J QfBgxKdWwhWbFpVbLNdrgtSPK/BV1SzucKqE4pjFu9FYpqhDXiZKQ+Cw//u4P+BKIo7r SwMI3Ml459ilXPZcnGLC0ThVyFQ/6q+aEo57RpvOJ2wg3jnxn4EkuxfiFGD6KWz3FAZm 96M6+Gk0I2U37jMuBRhe3p+BP5iKFwC4DqIOZtS1gC8Lr9Uql5sJghEfon3Y5vliykiM sKzpYkoP1VuajZ2QSJl80eza6mNjNWjnxumVxc40QEC+ex9o7DxT0QHwKx7lu7N0ldY8 COXg== X-Forwarded-Encrypted: i=1; AJvYcCUWKzj+4fSaMrEiFEL78w1eFBIzH5FHkLUUEG2DkXBPdO2TPl3ncS47js7gIHW4AQTPi7dMJjQ7ugjDdFg=@vger.kernel.org X-Gm-Message-State: AOJu0YzQUnpoNNuDkdkADFTknVfMxbc9Rnf57jDbVsEb4LCmUKqR7t2F D1uMiOaa6u6bBVbjk60oVh2rDnZ4cXbx5iLpzSC/ffRG1MaJ9o+X X-Gm-Gg: ASbGncuh+lkfOuYGENgx0bL1rPEdlshOeOljlvKynPnG3o0/3Z66oZ3hg03RhsaDX6e gbGreixyDKDiYnYY0TtK5P4zxKZ3WS6fCaaQrlNthb1rY3V+mLMJNBeVNAMjgDJ2jt6ZMbo5ewX 0IIkRNujFb2L3QAksRDTAEViqHbwgRgjLeHYUhrk8S44Cx/NYPPY4m2/kufZw9OM2KIMm+cklvf ZNiR/Oi4nu4UK+4nx27xqzGmURA8RapCbeOukb73ZFmkzxJGPWlBcpK8d7mxqaRcggxkcID1MU8 gRC4sEdSZwfO9kD5Lw== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- 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_dr= v.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 *vkmsde= v) return vkms_output_init(vkmsdev); } =20 -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; } =20 -static void vkms_destroy(struct vkms_config *config) +void vkms_destroy(struct vkms_config *config) { struct platform_device *pdev; =20 diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_dr= v.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) =20 +/* 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 --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DCE9826AABB for ; Tue, 18 Feb 2025 17:08:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898498; cv=none; b=tC+MQPVtkZWj0OnIIA4yxIA63mhjsxvfMGaxxXKJxilJDocI9kmy/AdFeQ71bGJJokSirYbLcnCJ1jmC95d23iF4xrU3GuJmi33qD6KxNp5LAqBcH5mYvPCzgdG777Ft5m7ovxRLvxXlaUD5g+oQRxTbudsQoJf5zXUiV15aW1k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898498; c=relaxed/simple; bh=8Oyq+oSwvBymrVcB7lQbFipn8YB2xKbJ8ywOdYZStPo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VV3oOzxshQ+iXOAJWCqSOAtwfym8Apy+MxEdGwN7Qeq/iTD41/aILpA+jj0sv+/TwRjFhNfbFE7ZDoG77B1kvUdsr/3DQ/Nvi/w7ijV3AcnA8zn2MWRc2s5SJ5lplgV634tQ8NFCIXa9fuWgmQNY2gqfl1KWkgDaPa506ssygHw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fIyEkLHR; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fIyEkLHR" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-38f2f783e4dso3215640f8f.3 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=vger.kernel.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=fIyEkLHRht0qElR/udkxTrdiQt4D7onMLyVkWlxrleynkE+erplS6KJSUTFP86dwGb 8+qlrLRXNrHbOaNYY92TDcpsQsuzQ+e7GczKrtghwOzJ9kIy1ZXpg81h/zDCON86ioQ8 d6enxoVczBz1bueb/puvHszkHo9O9GViVJuBs21iWqRWz+E2xpN/RVspisDLuQM0KhFn barwTL2jH41iu5deJvMjorFxfpxVgn/O0zOPH4Ue97UNinXi7mK9eekhyGElZgCavk1j DN4kNrRFX2EyFnnX1mSucNDOE5OMS1Fl7kBcCUTKkUUH1MNId/TXbI5WnPRHhpDs18dn Qr9A== 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=dfkVr05ka+fwwJ7SPPU74+obHogZMJgp5lTDPxJYCPH5UDXGmTLXHB0Gr9jSC2QPao dhm9HZoPzpDPYhHqHRdCfhIKb88UApEJ4yQI7Fa1/7KMasjRJIdfcqInUuqQyX4Y2c4e LDU3tAAgcwogrUB+TSzVAeL2N87iLLGYyu+s0xSFnp0iDROCF29dKsj/9abpb6N/DVLh o7VguXnlaf3u4YH3/YSigHjnAthJ8Qtj6VunIZFdfrNRqMYLNQM8blLu27QFCnKwE3kG 753+84YV0KH0sVrP55T6mFjDeg5jG5fLAGuj/slo5gBCUY5DPpm7aVMNrEEIIb6umQDu knbQ== X-Forwarded-Encrypted: i=1; AJvYcCXZtRDjE1ra9smXzPMSGHwH5ypgZ7Gme8HP5UH4oSxM7hy2sXbJT0m4u7RGUwgm3GKvbFGu1SGgRN2ZVsw=@vger.kernel.org X-Gm-Message-State: AOJu0Yxg1INLRbKz3jgZlnfpwaNr2JQu2tugByTDpyWgG0hjKGPq4bHA BEmWlXvAznrPSZKpMPVoBHtpu4hFgXzjR0qLLxxN2fl6pTUac8QP X-Gm-Gg: ASbGncukGNfVTCgETAxImUPPD1LNd/3D/a0q7m0ZwKV3jdzhiR6mw1tkPf96smqaNWJ 6lSPbMEd1hS7+48x5FsVL2vHiPr+MYl05PcmbrIalXhJ94Xdilsw/wjBkiuD20irl0gVvj1S0Ha QpbBQQxaKNQd/mWe/SNIlIsp6kGPbO+rpBnsHpLuNRbvmhnHXbb3G4PiZaw4UqOwKQuzQ2x8bxn hpR3zSiKv6ae+FOEUR8HDpUXEGAACb0ue5mTL+/YK2UtG8mIGV52Q/4ka4eSD3kQcvlKYZjxPFc JLZVyGK5iKrp3QMI6Q== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- 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 :: =20 sudo modprobe -r vkms =20 +Configuring With Configfs +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D + +It is possible to create and configure multiple VKMS instances via configf= s. + +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 direc= tory +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 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 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 :=3D \ vkms_composer.o \ vkms_writeback.o \ vkms_connector.o \ - vkms_config.o + vkms_config.o \ + vkms_configfs.o =20 obj-$(CONFIG_DRM_VKMS) +=3D vkms.o obj-$(CONFIG_DRM_VKMS_KUNIT_TEST) +=3D tests/ diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_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 attr= ibutes + * @config: Protected by @lock. Configuration of the VKMS device + * @enabled: Protected by @lock. The device is created or destroyed when t= his + * 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 =3D device_item_to_vkms_configfs_device(item); + + mutex_lock(&dev->lock); + enabled =3D 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 =3D 0; + + dev =3D 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 =3D -EINVAL; + goto err_unlock; + } + + ret =3D vkms_create(dev->config); + } else if (dev->enabled && !enabled) { + vkms_destroy(dev->config); + } + + if (ret) + goto err_unlock; + + dev->enabled =3D 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[] =3D { + &device_attr_enabled, + NULL, +}; + +static void device_release(struct config_item *item) +{ + struct vkms_configfs_device *dev; + + dev =3D 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 =3D { + .release =3D &device_release, +}; + +static const struct config_item_type device_item_type =3D { + .ct_attrs =3D device_item_attrs, + .ct_item_ops =3D &device_item_operations, + .ct_owner =3D 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) =3D=3D 0) + return ERR_PTR(-EINVAL); + + dev =3D kzalloc(sizeof(*dev), GFP_KERNEL); + if (!dev) + return ERR_PTR(-ENOMEM); + + dev->config =3D 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 =3D { + .make_group =3D &make_device_group, +}; + +static const struct config_item_type device_group_type =3D { + .ct_group_ops =3D &device_group_ops, + .ct_owner =3D THIS_MODULE, +}; + +static struct configfs_subsystem vkms_subsys =3D { + .su_group =3D { + .cg_item =3D { + .ci_name =3D "vkms", + .ci_type =3D &device_group_type, + }, + }, + .su_mutex =3D __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 =3D configfs_register_subsystem(&vkms_subsys); + + is_configfs_registered =3D ret =3D=3D 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/vk= ms_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_dr= v.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 =20 #include "vkms_config.h" +#include "vkms_configfs.h" #include "vkms_drv.h" =20 #define DRIVER_NAME "vkms" @@ -214,6 +215,10 @@ static int __init vkms_init(void) int ret; struct vkms_config *config; =20 + ret =3D vkms_configfs_register(); + if (ret) + return ret; + config =3D vkms_config_default_create(enable_cursor, enable_writeback, en= able_overlay); if (IS_ERR(config)) return PTR_ERR(config); @@ -250,6 +255,8 @@ void vkms_destroy(struct vkms_config *config) =20 static void __exit vkms_exit(void) { + vkms_configfs_unregister(); + if (!default_config) return; =20 --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF66626F46F for ; Tue, 18 Feb 2025 17:08:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898500; cv=none; b=VJZaXsikTkViOcPJ5hO/cZ7o3oPEYcMuF00vtqJpw3FrPybBkcbh0ptNmc9tu8+jHMEuDlt7UJnuHEU58ZnKr9iP+1rpvrZ3Hqqif4npGGxYO0PibxrAADpq26OjB3SYWpv2ntVN4Sx627gilu/+BzB4mJ/e1lYC/npiWZIYyms= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898500; c=relaxed/simple; bh=rzgWkrbttX0Ywyxe/JMBlAciu582uXAm1V0Cu2EAARg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=B0BdhRVDwmXtLlrO6qy7fBsdyyiGDF1snp85d51ZnJKqd6LVcyDSgwYImYq7Wu9XS4SAseq9Kj0renW8/OyMfFnPhSRQwj+yAtjFEXqSmDBxRkidmhAYlkrSZ6Wd9ql3pD4vxgc8wMKxOjArhoovm7IGdRUdKyznDXtiIOf9wpQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=HBMVuIUd; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HBMVuIUd" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-43995b907cfso5894455e9.3 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=vger.kernel.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=HBMVuIUdbCtVvoMRilakvU9+neJTGWpWPSqBXI9l2Nw20XQwWDvPvpcV26ZCUsv3+4 y8qV7VWq9Ptb3NNCSinmTmRmF3zSEbQHre4NnFG/cLHWxY+NXZugwzKdb9lDIc2kaed+ IKPdlO66Ztb//FYK/zUTOI8cRXnS+woAO0getgz5gY7X/onRDWgfw0s3h1yTBFaO9hyt +cyqJ73Mn0G/n5aovH6PZ8+qALBPEzkjEG8QobSTK9QUKXFdpl3tPXgnFaEBXyZEv0FI mlu2sTAlKtTlxXZi28MfMx2hKLaBvuFyow+DQoBbz2FlsscKXy7dDEbPKlLe0cWsPTGe DF1g== 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=ju+TJ1FRDI4sgR+zPXbdyY2aHTY1nEcjYaStN3/HAOZ1ZkgknkPStZPz2nZFX7Vqex yEC6+E4xxwDBV/2yEnwxxbgTZ1v6lvyWRCvVhHR9h5fvVwBN0RID3yYlS+6KFjANvMcY yVB/TqgN13eU/V9xy9YOQx+lwb7RvTALaQ7gO1nTw56WUxG+kHOkniXwKPrFrSVyEWou F4K6WqRL3BzUjayMhiCKkWdmLp2B2jdVG/tO/6kjHhNuxzpYh33vi2PxuDZzlJEXDNNt rqgCRh4R2cJ+0GNctBAiMlHnxv7ulWJhHFK335HZCf391hpaKEjoKGIbHW5GFOKJZfsJ Qdmw== X-Forwarded-Encrypted: i=1; AJvYcCWkUDe+C9TmYJnxSe1wRgfM2dOItapjf8JY59zRyFg3lgACgQeAcoItZADADUBtYAjoxEh2kRO7T5pADPk=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/6OSDk1ofwCvlNRHTacQmee4+VbCkqOfRRjmCCArdvM4cUo1w ZwtzKbX0WEVKAz27dhA+uot6pCxS6QLl+SPH5kYW3yDXqZE+XP/M X-Gm-Gg: ASbGnctzzJNLyNTDeEmdMeo3srCFjre1pNj9qGf3x0+/Q8B+XEpnlJtCgpXltLC7rGd /dv0qSjErPI3Hw5JibA5TSEEgwHxGruefOpjr2tZHt35S622m2+uM9JzULzDuartSF6oUI9ypr4 8muH1d4xduVMaUJhutpA/aoTqMj5WWvNMm3OgC9dq2/bY7Uz9ELMUVGlHrgZuJz2HTmQih88FJR JeNTx/CIlAHMNLhzr+NuT1YkRlFRgyNcozvruVspH0iNAY42eGPVhaB4Py/zFKDYNz24yKsbVbB 2n+qMARrF1/L+G86Kw== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- 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 =20 +And directories are created for each configurable item of the display pipe= line:: + + tree /config/vkms/my-vkms + =E2=94=9C=E2=94=80=E2=94=80 enabled + =E2=94=94=E2=94=80=E2=94=80 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:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -79,8 +92,9 @@ Finally, you can remove the VKMS instance disabling it:: =20 echo "0" | sudo tee /config/vkms/my-vkms/enabled =20 -And removing the top level directory:: +And removing the top level directory and its subdirectories:: =20 + sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_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 attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -22,16 +23,112 @@ static bool is_configfs_registered; */ struct vkms_configfs_device { struct config_group group; + struct config_group planes_group; =20 struct mutex lock; struct vkms_config *config; bool enabled; }; =20 +/** + * 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) =20 +#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 =3D plane_item_to_vkms_configfs_plane(item); + lock =3D &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 =3D { + .release =3D &plane_release, +}; + +static const struct config_item_type plane_item_type =3D { + .ct_item_ops =3D &plane_item_operations, + .ct_owner =3D 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 =3D child_group_to_vkms_configfs_device(group); + + mutex_lock(&dev->lock); + + if (dev->enabled) { + ret =3D -EINVAL; + goto err_unlock; + } + + plane =3D kzalloc(sizeof(*plane), GFP_KERNEL); + if (!plane) { + ret =3D -ENOMEM; + goto err_unlock; + } + + plane->dev =3D dev; + + plane->config =3D vkms_config_create_plane(dev->config); + if (IS_ERR(plane->config)) { + ret =3D 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 =3D { + .make_group =3D &make_plane_group, +}; + +static const struct config_item_type plane_group_type =3D { + .ct_group_ops =3D &planes_group_operations, + .ct_owner =3D 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 c= onfig_group *group, config_group_init_type_name(&dev->group, name, &device_item_type); mutex_init(&dev->lock); =20 + config_group_init_type_name(&dev->planes_group, "planes", + &plane_group_type); + configfs_add_default_group(&dev->planes_group, &dev->group); + return &dev->group; } =20 --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2141626FD90 for ; Tue, 18 Feb 2025 17:08:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898502; cv=none; b=Zy8JMVCa2+KKqRp2yMoMIu/Hb1pGeaXLub/4CjtZmUUVspNZDNWfiPR49RwgAXffWP8lR/VqnZKvn61mshp4aIqRjQ+sJwDt4bf5QXb297e5GsyV0QMFGWYP8HK4sPNc58j5kprIEepNfr2+p6r4Z4+WGmcYXxl+DuUXfK3guPo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898502; c=relaxed/simple; bh=XitDAvUM1Wx5xFhJ7Os5VQ2nlEn501y+yZnDKuH2EAo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=MPwmls29YokYQu/6nRNK6Y5dzengyP6YWL9EqRC67W6a5eS5nNuLGUQXbOi+8G3d7hYdy3JNkWWA30Zd7HZ303hwzU9uy0PoalhY1EU6BxWC6zF9rZOaimHKa8VkR14n3SDXbnkrbpkJfjTwFqbRZ8KeToYL3hHGbgw5dj7x8Ig= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lOAKHPss; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lOAKHPss" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-43932b9b09aso64099655e9.3 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=vger.kernel.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=lOAKHPss8+7WbAMjm0djjUQ5vxrneCrLwr7maIswxgcokt4NPGUAUUu9ZDDw3fP16u 8i7b3oCPDKadc0LTDLPmcmD2VWDXoCNMe62Sf+h3i5xk6Ka5hww9V0PPu5p47ITuZ6uv p1S2caGhBUmzS996YAw16KAjXRLeD9PURLsMEhGI22ZED9cBl1Gk4ZeQ26mDa1wPc4ee gSWMzEIj8MR7nqrvzXnAhTj+xAoLHC/fnk1Ekx7nUTAZi54DNRx2zgFjDrVmzV0UHJX8 pcwsa8SjCk9scqXiGk/sIgk693Z7JQsxzjPt9YXEa3+wYqRyuQt/zuVD9tenzLspM/kI CKhw== 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=kEaEURPe2+gLxfco69D3ibW2AGe7R+GG4ZAmbqBSXQBvIx79X+89V5IVBUchC8SoVS 9JWjJycpx2DgOVRJjT6TOSWsfkPsK/OA8ihISou2uPzsSNRRkJ4NQJi8X64Y1rNDxlTl e+YLD6IzEjskTGjYWUKO5hruem7XF02kxeVOF1VEUrIxpSVAG2ycGFvWidXmCTUNa/Mo OcVkZEKIeGSls2Ojjf662Kr/Qr02SNJ94KAv7FvDMtuExtvVem1/fyWQGvyppRwVlUdH d9j95s2RVUebgrlY+xCcGZ9bWL6LxtGyTtpDEjAL5t3JXsu6STZ+3bbgZxAC5J24s70H qeQQ== X-Forwarded-Encrypted: i=1; AJvYcCXOEkthsLvw23ErpJmIab1WoagRMPqMEzOVyVnkHurb5Isl2r7IivEouYtxP/VcGS/zGFRdjefXc3WiJnI=@vger.kernel.org X-Gm-Message-State: AOJu0YyKN9nLQpFrAwIynp+LGePLV5qz1bJT3y76JAtaNAbpO6zfcaZV zjIB452TH7VPzv92bMFjDTwU5OZYFx3PVYoUKadAAbdIUrAeHY4D X-Gm-Gg: ASbGncufHqYoDtJbvwDaFdILJ1dvLQNDUMNDGHpPq9Td+/DrOBGMyqUgluJv3/bu3qd /uO93ZNAWd4mRr6LzKDXQZO0/3IG4Gg3obcY4/Tw6UkMoWskEk7si5LbpSa2xQvmxb7Kv2qV2Nz Hm6Rl943YrDn28E4WtTmBr3hUraUyotHduIB3WNOv9EZxmZkDnbpnRc2S4IBmxxdeKG2ZLrksqq EahgTVWfFahVV6d/x54oKlryOYj2K6vz5Hz7w2/mdM9/eLmb5+DhFQlIoQX5P28sk8fdlFzL2S+ ZR0hVxHBB2XE1kAekQ== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito --- 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:: =20 sudo mkdir /config/vkms/my-vkms/planes/plane0 =20 +Planes have 1 configurable attribute: + +- type: Plane type: 0 overlay, 1 primary, 2 cursor + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_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) =20 +static ssize_t plane_type_show(struct config_item *item, char *page) +{ + struct vkms_configfs_plane *plane; + enum drm_plane_type type; + + plane =3D plane_item_to_vkms_configfs_plane(item); + + mutex_lock(&plane->dev->lock); + type =3D 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 =3D plane_item_to_vkms_configfs_plane(item); + + if (kstrtouint(page, 10, &type)) + return -EINVAL; + + if (type !=3D DRM_PLANE_TYPE_OVERLAY && type !=3D DRM_PLANE_TYPE_PRIMARY = && + type !=3D 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[] =3D { + &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_operat= ions =3D { }; =20 static const struct config_item_type plane_item_type =3D { + .ct_attrs =3D plane_item_attrs, .ct_item_ops =3D &plane_item_operations, .ct_owner =3D THIS_MODULE, }; --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7BCD526FD9D for ; Tue, 18 Feb 2025 17:08:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898503; cv=none; b=K+57ThPTQ/5yAs2rirp1Zqi8uOmG7j2SJ3XeLxzB+S271vOXFyaIgM0UOUnc/dI/BG2xII7k+aQlEAR1uvuYo6oWkvsJy1yGI2Xxce2fRTPboiz6fmXu43JtgZQ0TmJ8f0PJjkSOFmjJcA8N5P/bnjlSCp454rlVoaiJPzKbzvU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898503; c=relaxed/simple; bh=15Z9PezUwicqW9NL6pJPQ9JdwXGYW40aTptsqa3QCBc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=igsM8iiozvgDJgQVYjKbRYdVFSujYHTrHjugMrDxHbDy78O8u28mUqXiFml/SY6bIOEd2zCM2emcKOL5jm9IobQ9JuB2/brE+075QAro9kIUZmBiiZyTgaR6Ga+hi8K6CcNbd2JzDvaCqnW107w5NWFrOW8O0PVHwRb5EaCF6W8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ac/OEvMb; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ac/OEvMb" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-438a39e659cso39943325e9.2 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=vger.kernel.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=ac/OEvMb5s5UWAzIzDTGfse0ffsEOIz4hMl4SZyOqavD+fITzWQSwQ9TCggbP+6JbC 59OasSKaKqDXL5KueZTLTtqOVtwKoeKW85SJn6HQ0PL2QKvG78g6OnL5FZIpvEVWZlrS SlqK/2yBZxUv1k+A0Sv8kt02J8yX6WbpGnxEjuh+NSHkifD3Vska3/OevoLmIlYnCCXp fwh3YRNXc+DAkglbFgydtx9RIdfshLnUlD2NkezG56T69LtLyD9Fnkz/d+NqBNgo1ote XJvwVyRoWxJIP+04Yi1C7KlVhGTB1OSP8JR2raKppCcDgYF1sWgsjpZ7V/hnHcdwHT1k RHrQ== 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=vvpvvYl/OGp225iCJP5C3T1YGco//nCn/z6+WNzQeHZWlzDpHS9NbdUDjLaHrZoIUE IqN5159mAmpdL6QTYQ0xNjrv7j+h4dkwtkyEOo3RRUQzrhRVk1l1rB8rMbIOy4FcYXcp fVTUVLMLAIVa5fouNIuPGbmbnhwbMF64j6sVjqKHfxHnio2WLnmqcjE0Uc0hW2oNYJ/K B0MNEODUuIMcqlCbQVivbSqfL5xSsDmlF3ovr72WJADlUlZ+z6v8SYybENHvNCGlrK37 aWjvRVT6lT5BADXWL9snyn4prdvtUsv4cQooL4DEfrAWpFMx+8X6S9RL1jjQhFEfeyUJ b3lg== X-Forwarded-Encrypted: i=1; AJvYcCVcfSKLmsDa0oCOWBZZDQkJ38+Q8H7IkLhpQk4o5M4x8U5twBX5Ty8BjYJJb6KqfR9wVEjB6v/FE7buiQQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxmWLh/56/IBs7R13pe5DPd6ZvyThALt+oDelRDAT30jgUhi07Y Qxl62cVTvQGy9o4bt+ZOSXCiXbOg+uJI0Pzvc82jf36XzFtSL1ah X-Gm-Gg: ASbGncvm86xNCYDsnvrfEp1+gqkoov/r6Ec3dZyKcPncF96VyKmT6LsYjqWKIY3f8Qx n/HPvU05ahVuhEy6yrboJ4ZrS34Dx/vy2vhZimBIFWgH20uG9QGFb+OeZ29FgKqhkBlGovfHnAI r95p4A+Gmwnpy7uYlyXr/TxBw5VAeOTxzP5ZRI6hxtyXYoa64d4Oe15w/L37JWs9EVguDGfMuJD PtBltiBycDgN7mVG94ZOgtC2UfiQXT0ushThDGIdsWwr9WTg9qzyf1wvWLgC+/8y3cFJe9Kbt42 VvBHxHd/RdD+92mZrw== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito --- 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 pipe= line:: =20 tree /config/vkms/my-vkms + =E2=94=9C=E2=94=80=E2=94=80 crtcs =E2=94=9C=E2=94=80=E2=94=80 enabled =E2=94=94=E2=94=80=E2=94=80 planes =20 @@ -88,6 +89,10 @@ Planes have 1 configurable attribute: =20 - type: Plane type: 0 overlay, 1 primary, 2 cursor =20 +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:: =20 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:: =20 sudo rmdir /config/vkms/my-vkms/planes/* + sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_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 attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -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; =20 struct mutex lock; struct vkms_config *config; @@ -44,6 +46,20 @@ struct vkms_configfs_plane { struct vkms_config_plane *config; }; =20 +/** + * 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) =20 +#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 =3D crtc_item_to_vkms_configfs_crtc(item); + lock =3D &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 =3D { + .release =3D &crtc_release, +}; + +static const struct config_item_type crtc_item_type =3D { + .ct_item_ops =3D &crtc_item_operations, + .ct_owner =3D 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 =3D child_group_to_vkms_configfs_device(group); + + mutex_lock(&dev->lock); + + if (dev->enabled) { + ret =3D -EINVAL; + goto err_unlock; + } + + crtc =3D kzalloc(sizeof(*crtc), GFP_KERNEL); + if (!crtc) { + ret =3D -ENOMEM; + goto err_unlock; + } + + crtc->dev =3D dev; + + crtc->config =3D vkms_config_create_crtc(dev->config); + if (IS_ERR(crtc->config)) { + ret =3D 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 =3D { + .make_group =3D &make_crtc_group, +}; + +static const struct config_item_type crtc_group_type =3D { + .ct_group_ops =3D &crtcs_group_operations, + .ct_owner =3D 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 c= onfig_group *group, &plane_group_type); configfs_add_default_group(&dev->planes_group, &dev->group); =20 + config_group_init_type_name(&dev->crtcs_group, "crtcs", + &crtc_group_type); + configfs_add_default_group(&dev->crtcs_group, &dev->group); + return &dev->group; } =20 --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9A24826FDBB for ; Tue, 18 Feb 2025 17:08:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898504; cv=none; b=Nj5cWni5d0PLAFg4WcJg/Erf2mb7AHfce3PZ938PRL8OGV9L0s6AXgkDXgIUVstukP0uMlR3IkzlQmN2cwkmkovTGrwl52TTskhpdD3K01IIu+mxXaEC0tMhvyMAJtP48OBL9lGkjk+8GcqXt6kAymA8nRP8dIB53jiZeEfVnfs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898504; c=relaxed/simple; bh=UXB8z+a8DWFyN1/YnVgBN9tWyovb/3R/u7SPCbhhKfw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NCP7AfUjbhytYwH7dtXilYBzo/63TfkonQbRmLoXFkduvgbpJLjAVbJTSX0fQ/1c0PGFF+DsH3yIq9JBctj1UTLndLbkN8bDThkjlHNNHLtrra4yv1M9BXIlPS/0uDBXie+uIVgR6kZj7j/buDuQtGtSnc+xFVHTUH8VLUA0gXo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=SUT9YQwT; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SUT9YQwT" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4396a24118dso42678325e9.0 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=vger.kernel.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=SUT9YQwT6fjupN0IU2EgID4HnAremrNm7+augFHVjbC+vzIJrxyCzT6fEy1E/jLViZ 2nj0fwWiTGzIRUWa7OuSAvIJWDSNvpFenbUunN2tlt4diVushwpDGZ+3UkjbM/vFjAVz mU+Scja98y3tsA639DNo2kyQfudoRas0B4Uty4v+lVfK5kI5sDB0emqDwJcpMGXG1iga mONVnJFfeZ0e15Tjo6lHt5uXaTr3WksvD/LbO+7ioYAb+oz1PFo40fROGMUm9alnJNZD 79PQr+ampn+RS8Qxg2CBya3Bu+TZx9VfLpHcbW4aoUQ2JNhXYaZ/EQR714BrBAH/r55c WEZQ== 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=kVZxIPMdjKUs5zXTQO4IBDILHTCHUlw8bOZzHVv2tJD/uY4OsFsFo0Il9zJSihSG8x cbL4OmoIAcSVoakF6+1kArFezYErlbSROObIb7Lmrk33Gi3CYrv5FzyBZuSP9fZxL5im MVoHeIRqLGidTCGZTHEr+6uopNc0vqcae5i3Bqe6hnJlWbcUne50FayX3+pLA63cCOqP M1upZMq9xHUNm36uRlFfQnvwoXEaIHWEupJ2sU6VhohI0BHqKQa8QSBiUMFk2IeFP59T gFuXYGR4WBd8mxvzjWMEjakNqMh9C4VtG4mIebIVPSvRALXvep7ajuf6Zky3iRuDSRgj XwjA== X-Forwarded-Encrypted: i=1; AJvYcCVWvsBX8qwyIX1oCCnIm9DNKef7XIO65Bx+ML1tDd0B+HXYMYiCoO1vG8RoQTKPkWgD36rZTh92jF8HMmw=@vger.kernel.org X-Gm-Message-State: AOJu0YwBmkLcYpenB3/9HEY9eY9UgnBxOfcyrfZZsJ7TjrQE2G2dEMj0 X1+dgH4TSQ/gB+ebeXw8NaMyLBSToJ1slHCPlCZWiczfYAcBoxke X-Gm-Gg: ASbGncvKtlU+6nmf6jKy1vJsooRuHjBe+EaJAjmhGqXeQseRkVPOp6oKiSEn7AGSNn2 rpwIrChcfB+M42I3befviC7FOohBw2Ym7tkuHdgj4oy5nmUbbJI6gVqJtYnK/y6mdKsFdJha+xZ 1VPwEnb0ezzDgo+N+dvvKH3H+lvmEuV28MGUBLwrwSTUWu2h5E0P910GUWYC2NoqDZjoYRLou0a oOTIfLmw5MAYqBR2ZI2fnlNndn9z3zMh/S5Kpb3D5Tuo7C/cPkPvlxpEKm2REutUkXyCH68x1RG BLnBq+/qnRltd6d1ww== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito --- 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:: =20 sudo mkdir /config/vkms/my-vkms/crtcs/crtc0 =20 +CRTCs have 1 configurable attribute: + +- writeback: Enable or disable writeback connector support + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_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) =20 +static ssize_t crtc_writeback_show(struct config_item *item, char *page) +{ + struct vkms_configfs_crtc *crtc; + bool writeback; + + crtc =3D crtc_item_to_vkms_configfs_crtc(item); + + mutex_lock(&crtc->dev->lock); + writeback =3D 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 =3D 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[] =3D { + &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_operati= ons =3D { }; =20 static const struct config_item_type crtc_item_type =3D { + .ct_attrs =3D crtc_item_attrs, .ct_item_ops =3D &crtc_item_operations, .ct_owner =3D THIS_MODULE, }; --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA973270EB2 for ; Tue, 18 Feb 2025 17:08:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898505; cv=none; b=EwnbFG0512wO5lNz3QPbglX7wptSGSdSsMRdbrqcg5p0GtHs7Kr6Qbdw6LV/HQr/3fGb7C8UjEyk3Ea+NvJHXANTHbD8ADnC1KVEfMPsN2vgWhLJ23ZBCpcRThMEToTe2qrVCs/jKnpsbY0kvpmEY9lYTBRa+SUDL5rjPskbyyY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898505; c=relaxed/simple; bh=7RGTdc8lk7mir7hsMeUENMX2iLD/M/D7x2QjNKZL1Q4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=AD51ueoX2bLvzpw0v7BMC59n4SwZfXPKpdlbMQ//CwhWXz+d0Hp4gd02MX52ICCDCVMUj+Ck3CxJpO6U8c0PkyzuPhkERjEzB/0RX0IvNEGbZrrkyTiU5YiVHsOEDVvupOtB+hjVNy3/2aL1VRCLFlq0GjGxMMxst9NRnhAtTF8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hILAVs+z; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hILAVs+z" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-38f2b7ce2e5so2360580f8f.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=vger.kernel.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=hILAVs+zprRE9/+v3GqxrRfXvt87lClFs4t3NWMEkURnS5J5RRSLfo+pjV2gW/tIzS T7aYzQ4Vb69Zx6LrlEhpG6tqkcJgJaIKZlzOf7uVVrx6E+kK4O7OIeY0NHn8KI0OHGpe fRAx5xe78Xety7jkUN3J40+2IjX27kGSHvcuTKXikPyyxMIsDw7ZmyEcKPeT0iE5Ry2u CN4JfPd/8Kc/9kSd6TIDM6689N4mSN4xpGAxxZqjI/CxWiVT0QMAJ7CkgtkcHgZCOZ09 qKoFkZraYVM8RXDcduFbT6RQ1OOnjq5M1o4ps5+qso+HYmu8IBjjX4yZT0I3LAP0C/CT Uc3A== 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=N89iX1MGXE5tFwEamqM4o4kWQMqmCOBN3fCrTRw2lucqIVRfelI6zh9h112R13Z0Sm z3HZOSPNUwLHJbj3bVALxKFqYIWkxiQhVpXvu3WQxpDwQBO4qC2HGqCs/NPsXkT365UJ T6elmJczsz1ULtjLubkrqv5DIoecmHq9mBrPmgk2O1RbxG0jV4NARQCqh60yICzn+AlJ vKa8W3eUk5KsagVz7jS4f+PA+aaRQsI20qGG3rABsE9SxbZoTz+oVi6qjPqFUeExsfs+ Zu6r99fuU30nnLd5Z2hfEMGReGXvjEfeXtEVCCB36yxZBOibQp3kbGMs1KmGZ6MPGNWu bl0w== X-Forwarded-Encrypted: i=1; AJvYcCVDSmpR8narm9gKiCrBinln5NXN1DHW+om2WUDaquWokgm731K/EimJG2qdxmHjG2XscWihLZtUmAifcWA=@vger.kernel.org X-Gm-Message-State: AOJu0YzYbzyP/qP9T+2y5SseqUfGIqiq+pXigz7MAbqTdMY+41cPg4Yd sIK0F7WBwtubckuP4mF5mdn4lE7n7pr48E675IJKs9nnWDO/ga6j X-Gm-Gg: ASbGncsiUHLj1BMNTdtFDPr5eWXNM8WFDd6SesfLpd5OFPFmPudiETLY6Gb4kTeZEC3 ZKENCmiI/ZseAcIsstzOiJl5tlRrAd6umkq4yD8Bw1ubaxWvnhn+UyadVoqKMFhGAg1fvns56pE DyzapQcVDovb+4hcnFOD+eHIQmbfWNSbISjLlMTud3nI+HszgdTC6tH3grcSUAOMisJB/y6cCVc B1XlXeQN4o8RNzyo3DOfdRFpbBhDeJEuAjKF+lGs4xydUxkgbkL4tGPULyBpUK9Q5yv4n+S3yJh Eb8U20hvrWWuYg2fqw== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito --- 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: =20 - writeback: Enable or disable writeback connector support =20 +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 t= ype:: + + echo "1" | sudo tee /config/vkms/my-vkms/planes/plane0/type + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -107,6 +115,7 @@ Finally, you can remove the VKMS instance disabling it:: =20 And removing the top level directory and its subdirectories:: =20 + 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/vk= ms_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_cr= tcs" * @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) =20 +#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) =20 @@ -195,6 +201,56 @@ static const struct config_item_type crtc_group_type = =3D { .ct_owner =3D THIS_MODULE, }; =20 +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 !=3D &crtc_item_type) + return -EINVAL; + + plane =3D plane_possible_crtcs_item_to_vkms_configfs_plane(src); + crtc =3D crtc_item_to_vkms_configfs_crtc(target); + + mutex_lock(&plane->dev->lock); + + if (plane->dev->enabled) { + mutex_unlock(&plane->dev->lock); + return -EPERM; + } + + ret =3D 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 =3D plane_possible_crtcs_item_to_vkms_configfs_plane(src); + crtc =3D 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_operation= s =3D { + .allow_link =3D plane_possible_crtcs_allow_link, + .drop_link =3D plane_possible_crtcs_drop_link, +}; + +static const struct config_item_type plane_possible_crtcs_group_type =3D { + .ct_item_ops =3D &plane_possible_crtcs_item_operations, + .ct_owner =3D 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 co= nfig_group *group, =20 config_group_init_type_name(&plane->group, name, &plane_item_type); =20 + 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); =20 return &plane->group; --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2019270ED0 for ; Tue, 18 Feb 2025 17:08:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898507; cv=none; b=iE5lntb+4q3NWIPPZlbj66FZbT94tBBsltdOoUgur+D3PdktlXEJp5hFKdtZuK6APnLcHO86PrM/90BpCbk1zGoXQU8FqJ7iaTw9kq2lInS/i3GCsWbsTNenFWewwOE/639p47t7hFs1L7ZV463448gN0FNpkmZXUtscZ6SbQCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898507; c=relaxed/simple; bh=VuelZb5gmcF/CrImU1SbT5eRtDQaQemg8yDuGmfzkw0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=RCj4E+nZRlb5nNH3fGBa/6tZLolUZpu2YMQ/Fmyw8dRJm+XWjV+nlL6v0vtX+S48AiaQyHp6Uu7LE1188fbjpmgjc0P8T+jO13Y39G7v2N+dF6x9hSjmq8FHg03D/nciuFU4PJGq4wENgpKXRV09oz5obZdYyrSSq/vLUHECECU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fufn+QG6; arc=none smtp.client-ip=209.85.221.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fufn+QG6" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-38f31f7731fso2065909f8f.0 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=vger.kernel.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=fufn+QG6FF/8+f8rjBFhvt4jDSlAWXn9aI4UHreK9vGdJA7XOgtGwBKzmGhbBw2PEH fMqUI3RIai7JVEDVN7yOJ/EBwjYYNNV0BZPqyzvJsA6r0E9WTYzC7DYWDDOEpVVcTO0S PBiHLIyeM7klQeor0D3OQsf8nWmxyX0R4VKym2NaYJS0RlaDfCtUlGiGsPSUx58mCXrN t1tG93YX/V7MbUdnCA0uvKM0lLNiSQKcWoXODuSPdZxpAWHOj1ZN5JcT9ImTkRj/Hkkh TaQRudyL9BhhHnz/XkDjuKFfZKkevPMKe5sijvKLbnldGMFca6WT0nlRC7hVFpPnqZtQ oI5w== 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=cnvU3zwuIY0kqFMjQP9XOScbaCfe7sR2W3WRIb+I/Lz67UFVMaiRQdh9ZxTpdKm5WY 03Fs3gFrEXmWKxYYua7MewojFui4/5iZrLBli30xG8rZMaN8gET1x5JyX3HcaCdrp1V0 fnJj0iq75E5wjzE4AGbP4a5jwid4uQidMtTr3xAvbCEiSQla9USBhlx14wuNG/7XUGGJ ahRx4/3Y+QHJJEZD5mHWsBkVy6cQduNVl4jJfK5wM9dQIxIQEGxq05mXHn8N9Y7JXrx0 keo2f4VnDmscW70KH3JEPuTBqxXSIztuuzpi7UD6/49fNFrDlP3BFdBwlUGBNCyTUsgn t6RQ== X-Forwarded-Encrypted: i=1; AJvYcCXIgT94UbtMX/qI8Mcfq2+ro/cxSUFi5S/PEWjKb2YTt7xvNt9NQhOZYn1/f7oIMCzbIXP+ULkXuWt+D2c=@vger.kernel.org X-Gm-Message-State: AOJu0Ywp+IdIYIhkWez9yU6M9hwJwzrkGeT+/QEb2a2kZdibiMQnlGMf NJyZrY3q16ngNbTOUT4x6isre0UjOuPuY3yKTg5ZyD/DgbY+3EJFAfHzF3LC X-Gm-Gg: ASbGncvjXEUQ6x799xcU4Lm3ku7JC1W2glUv/xoUWicBgmWgL5G4NwJXE+ZnIx/7NIU jYU8AgRyjHyRMLa/Js6lu5dZdyb+kqtzB4sZD7F6uGhrniHrAxhb3IqBwfM/uaaZgX2qLXPcIoj Scm1S6hRvGXEAHUundonKDSIHmUasnqdf3ksnUj0YTelHLsu+akow5KNu6sgZf8jH2zSjGYcyU1 ZwyBPg28n6rtb6tyO2P05OSP1ERhmd86ZBwYikfQQ36QEwAzdc4UJ0M3wZ4D/1t9Lv2/iu/P26S pZ+wxDvJq/YBKrbANQ== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito --- 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 =E2=94=9C=E2=94=80=E2=94=80 crtcs =E2=94=9C=E2=94=80=E2=94=80 enabled + =E2=94=9C=E2=94=80=E2=94=80 encoders =E2=94=94=E2=94=80=E2=94=80 planes =20 To add items to the display pipeline, create one or more directories under= the @@ -97,6 +98,10 @@ CRTCs have 1 configurable attribute: =20 - writeback: Enable or disable writeback connector support =20 +Next, create one or more encoders:: + + sudo mkdir /config/vkms/my-vkms/encoders/encoder0 + To finish the configuration, link the different pipeline items:: =20 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 subdirecto= ries:: 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 =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_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 attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -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; =20 struct mutex lock; struct vkms_config *config; @@ -62,6 +64,20 @@ struct vkms_configfs_crtc { struct vkms_config_crtc *config; }; =20 +/** + * 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/encoder= s" + * @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) =20 +#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 = =3D { .ct_owner =3D THIS_MODULE, }; =20 +static void encoder_release(struct config_item *item) +{ + struct vkms_configfs_encoder *encoder; + struct mutex *lock; + + encoder =3D encoder_item_to_vkms_configfs_encoder(item); + lock =3D &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 =3D { + .release =3D &encoder_release, +}; + +static const struct config_item_type encoder_item_type =3D { + .ct_item_ops =3D &encoder_item_operations, + .ct_owner =3D 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 =3D child_group_to_vkms_configfs_device(group); + + mutex_lock(&dev->lock); + + if (dev->enabled) { + ret =3D -EINVAL; + goto err_unlock; + } + + encoder =3D kzalloc(sizeof(*encoder), GFP_KERNEL); + if (!encoder) { + ret =3D -ENOMEM; + goto err_unlock; + } + + encoder->dev =3D dev; + + encoder->config =3D vkms_config_create_encoder(dev->config); + if (IS_ERR(encoder->config)) { + ret =3D 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 =3D { + .make_group =3D &make_encoder_group, +}; + +static const struct config_item_type encoder_group_type =3D { + .ct_group_ops =3D &encoders_group_operations, + .ct_owner =3D 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 c= onfig_group *group, &crtc_group_type); configfs_add_default_group(&dev->crtcs_group, &dev->group); =20 + config_group_init_type_name(&dev->encoders_group, "encoders", + &encoder_group_type); + configfs_add_default_group(&dev->encoders_group, &dev->group); + return &dev->group; } =20 --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C476026FA57 for ; Tue, 18 Feb 2025 17:08:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898509; cv=none; b=Uo9WK+OqtFbvkMS177si845tghFg0f+Y7+/EEc2ax83o0Xi2WQjmSlrSs8+pbWb8+wS3zPYI2vza2MBgt+PVXDQQitGjsFgpVWF+XGurxXSCpy335z5pwEshqDIcsJ8O7h7HacedeIo9uIJjdHkQf+TGDF/J05mePW48LFtAhzM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898509; c=relaxed/simple; bh=10qJz4DfL30OvLuBYfai46DKiU2YhgUqLkSq4zK5/SU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=GIaffGD89el7D5bU02+Mu677ZNFCLYHUjoULUcz/CyfhO/kJepnHWuKefCFAxIoogiv7MRSb6ZKtEV3jDXCKDT/gVe0/SgzcwxWoRlzFZ97pD34e44YyPPHNLl8jDmz11Y+foGEseKfIxci23a3DbWHqrPYK5unra5eCxY2deJQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VVi6Wz7l; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VVi6Wz7l" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4394a0c65fcso64224775e9.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=vger.kernel.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=VVi6Wz7lee2w9IQ08OgQF5/rNnuPB3fRbBz65sfFNg55RbzYBH8cfAFar8DWizH479 iV57dp7ennQMYO+WcjGEJ3ufQn8KznnJUYx6BZorg+DDPBioJIX/uVe+Gw46LmaS61Ve ml+KTgH2TaOdXjTAoNNyGfXs6uS5BocbcotVr2B/gXQ+EmV7QAvsdvC01fGEla6Wf6kP 3V7PqhAblndpS40kmghk1wdeTJttBML2eHg8YjU0SNDnRvZPCM7PnBxSa46LqoIlfQeN LGMmgadbqGUWgS1MdHMoJnjX+B1MWG70VGuUQe3W5bwkyc5gNMFsoG4w3lPMyjSKecYj 4NOQ== 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=MIy/iFKMZuncXVE57wJPBwmoBI1VEfn8YiWgViOLcvQmdazvrDgmt7F7LGxFXudrLN d0YOJ9ZVeVT9cUb6gEq//YAP7JTKip03N6FHfyB4Uc37dWXje4+SwFNArYrjSNyw+PWo sRbC4/2BKoIDtT83jUY908+zzWdCT0zne5Lk1eA9SBM2PWbyT9l68nUJxB4nh/ywRG0X Nva4mo2wI+mw8tnA4Z3E4YrZXe5oiz41SlLgJ8Y7DV18rC0jwIM73NWRCYm1dwj/gRqY O59//dzKj/0r/eK/EzOk+1hVSK/oKnk0p3W176uG9O8fnYFbyl3r8VcNBxccaDyawwDR 6Qpw== X-Forwarded-Encrypted: i=1; AJvYcCWYfuTglCP11WJ/tnZojXBl1w59qqelwuMezXDhf6eNQBS9cqn6bnvqjH2uRatpWnVSYUGtjU/V+PWQULI=@vger.kernel.org X-Gm-Message-State: AOJu0YywUJCD1CmY3fXbiLzpaxC9dOgzTXCM1X5NgllkuXlh/mNDzRHT D9jfCJ1exfLTLI0RaYsKW6UuRSoI4ZNSTIRhs/6MP8jl2dVIJ4TW X-Gm-Gg: ASbGncvKBpr1/yrRLbDSOoaM+pcfNDFDZns5rHQl7QG23xiSESHSrkeoTn4yMfp8k0R /VWGIJeVLwyaXH6KejruZ4GIzBpyxkeu4MJWbWrHTKeZzzSBYtN/cXyosMIqxAEJ0qZkIt9AYwK 0zyiUitGXtmtGi00Ip4CH29PC9AeqGSwZhbfjkXr9adrp+493oEt/9nGxK2Az2R3O9aPVYD/Vj5 Aqcm00kLTbDivlvO/LJwJMuXjMog5TWRWdyr2KWURZe5ffetORZuVLD4A22+kI9iPnV8UgtxjLq 2yqn/f0yAfHTTKjakw== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito --- 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:: =20 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/encoder= s/encoder0/possible_crtcs =20 Since at least one primary plane is required, make sure to set the right t= ype:: =20 @@ -121,6 +122,7 @@ Finally, you can remove the VKMS instance disabling it:: And removing the top level directory and its subdirectories:: =20 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/vk= ms_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/encoder= s" + * @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) =20 +#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 = =3D { .ct_owner =3D THIS_MODULE, }; =20 +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 !=3D &crtc_item_type) + return -EINVAL; + + encoder =3D encoder_possible_crtcs_item_to_vkms_configfs_encoder(src); + crtc =3D crtc_item_to_vkms_configfs_crtc(target); + + mutex_lock(&encoder->dev->lock); + + if (encoder->dev->enabled) { + mutex_unlock(&encoder->dev->lock); + return -EPERM; + } + + ret =3D 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 =3D encoder_possible_crtcs_item_to_vkms_configfs_encoder(src); + crtc =3D 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_operati= ons =3D { + .allow_link =3D encoder_possible_crtcs_allow_link, + .drop_link =3D encoder_possible_crtcs_drop_link, +}; + +static const struct config_item_type encoder_possible_crtcs_group_type =3D= { + .ct_item_ops =3D &encoder_possible_crtcs_item_operations, + .ct_owner =3D 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, =20 config_group_init_type_name(&encoder->group, name, &encoder_item_type); =20 + 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); =20 return &encoder->group; --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 49F4027128D for ; Tue, 18 Feb 2025 17:08:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898509; cv=none; b=hwDBAWmUSb139NNkQFZLYKM4/EEt3XC5ToZcF2XoOKHjm668EqFE+/jJI/kMW2KBZblsBmSH3acuPqdJjDqu3pvovPKCBuq+QiPxFoGXOYI/fbde+gcsYTLYUDlaYRF0yJFSlQXzW1ZCCzgdruK9Da39Bw9McV5nkjOhgi/BMaA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898509; c=relaxed/simple; bh=JBwCjJfnIIBAwOswG8u5BqWTr2aTuoJehl8qwiIRm2U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lDvDdsdy+Ife+fE2mak9UA7qk+C+DTKF2A4EGC8eD2ycK/V5tR3bLC1Mnn5biPVq6FTkxYEuVAnDUMH3rehdjiS15CY4ttNHgr4U+PSZrwS4nnlF9bWh/RLinYHXDFarXAQocPjKW9vI4Ok7uzd59oZcqTdq4iKdW3+ORUnWfIY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LMWNTHm8; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LMWNTHm8" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-439946a49e1so6934535e9.0 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=vger.kernel.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=LMWNTHm8O9aY0NWkxRFvxd0jPXmX+DAVg6YQ/KOfcToHqTfIIByvwCz9lHmpjbG1Pt mrPY0CxdXYgVrNdGu4RpZ9e8h13VlpnKA5Tx/1apU5XY6PhW3AniFwZnQaj9ySpYWd0f IijgsL9ywIGAmbwGuaFEpwWb399XtVBCu/fhh9Lfp7howE822xraOS989is5qZFS1tB2 nANKDYd9eWOT/KU+ueOEu54t0Bq3GLRWsA9tjJPYHkhRhoavOdbC6BYs0M9QiQ38/NAf 4m67msLHPDgmRYy0MMtO6oyDqkAC+hu+Odc6O0tVSoFUzwYShva8tU12SqdVtwsqlJWR tujw== 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=DXJVqKUSDkxq+wk1y6rmTHnurLOiS65qCV1nPlRME5W0+6oB9IYYBUdY76/bsbj5B4 KsXHoL10VuUYzp4ON3NFAnkuBMJfxsgd+u8iV2qLG+/8Hv711Nr8kLtCvp8tAL2q1Td+ qRuhymVkx335XhvJgFXVLb0HwCDf20wEqI0sqrnOOtwRPbhS74R5K1oG7703OfXOoSv6 wLLvWtiXVOIVxuq7MiGEHKgble+x9kTascu7fHHgNovI7IQn/PTFrHRlfGktM3cqEG05 ugkMJ9FtqLRnooufJnYuvjox6ZrZ+nCrXkMbebRxP94d1rl7kLDB/VeDQ98fjKUCIoPu qaBw== X-Forwarded-Encrypted: i=1; AJvYcCU22IhOm7tUxEBqf0vQLx+QEvdCIiwUVEuHHtuX+ztFEB19rH0ZT28JeJWgrCxpT2TJg7W2uhAcFCUSN0A=@vger.kernel.org X-Gm-Message-State: AOJu0YzjDrYOU9PkxQbqzN/BFbvhtvNcPVBuz9iNM2pJpgzqy2QfRx8X b9ZFj7sgTNGMjy6sau63MRhqz5xBp00lEJKH/s8IK6uZK1e1+5x+OfE+YLez X-Gm-Gg: ASbGncvROr/qoBXiYpm9npDGbuleeMzc8fbSZz/PElcXlLmaepOIvbnP8bmskBrMqPT sdyNJ2CEJ/lzZhRjXwpku/Bzk/Np9c4hRAicxfIn05AIsX48D3EGoyptR4RnG1aK8GiMCKy91kd ORFh4jDFOeTSuZDvUnrSx3F3cRcaEj6zMrdQF9QNA65dgBgBOePQ1NzZ10vI7mKo0dhCzLKWPhB sfgFLIccyI3OvdgKE5Uifi1p20uU6M3d1yCaoOIAP6hy0P58ylpA/lgEP7go+VI3+Ex+/J8EEtW 2GAh0tIm/NrfNKOVgg== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito --- 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 pipe= line:: =20 tree /config/vkms/my-vkms + =E2=94=9C=E2=94=80=E2=94=80 connectors =E2=94=9C=E2=94=80=E2=94=80 crtcs =E2=94=9C=E2=94=80=E2=94=80 enabled =E2=94=9C=E2=94=80=E2=94=80 encoders @@ -102,6 +103,10 @@ Next, create one or more encoders:: =20 sudo mkdir /config/vkms/my-vkms/encoders/encoder0 =20 +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:: =20 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 subdirecto= ries:: 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 =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_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/connecto= rs" * @lock: Lock used to project concurrent access to the configuration attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -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; =20 struct mutex lock; struct vkms_config *config; @@ -80,6 +82,20 @@ struct vkms_configfs_encoder { struct vkms_config_encoder *config; }; =20 +/** + * 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/connect= ors" + * @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) =20 +#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_typ= e =3D { .ct_owner =3D THIS_MODULE, }; =20 +static void connector_release(struct config_item *item) +{ + struct vkms_configfs_connector *connector; + struct mutex *lock; + + connector =3D connector_item_to_vkms_configfs_connector(item); + lock =3D &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 =3D { + .release =3D &connector_release, +}; + +static const struct config_item_type connector_item_type =3D { + .ct_item_ops =3D &connector_item_operations, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_group *make_connector_group(struct config_group *grou= p, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_connector *connector; + int ret; + + dev =3D child_group_to_vkms_configfs_device(group); + + mutex_lock(&dev->lock); + + if (dev->enabled) { + ret =3D -EINVAL; + goto err_unlock; + } + + connector =3D kzalloc(sizeof(*connector), GFP_KERNEL); + if (!connector) { + ret =3D -ENOMEM; + goto err_unlock; + } + + connector->dev =3D dev; + + connector->config =3D vkms_config_create_connector(dev->config); + if (IS_ERR(connector->config)) { + ret =3D 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 =3D { + .make_group =3D &make_connector_group, +}; + +static const struct config_item_type connector_group_type =3D { + .ct_group_ops =3D &connectors_group_operations, + .ct_owner =3D 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 c= onfig_group *group, &encoder_group_type); configfs_add_default_group(&dev->encoders_group, &dev->group); =20 + config_group_init_type_name(&dev->connectors_group, "connectors", + &connector_group_type); + configfs_add_default_group(&dev->connectors_group, &dev->group); + return &dev->group; } =20 --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D62927129C for ; Tue, 18 Feb 2025 17:08:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898510; cv=none; b=dIkdLI4Rsac7a/a6e5y2OWtQRdqUPnMDQoTSnliJ1TZHyxSAW0/5zqZDVAxVcQW/o83HIPyzAS+XQaRdjaFHPOXUB1idKFXUFm5xoDSeUS/a22K4ZrDm2SJ759KpuLCU1w2lvsR5RQm2tDr2W8MAJ7ZsrsR+btVjy9epSmJGeAA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898510; c=relaxed/simple; bh=qgDaNlR3toGwf4PKOUuHn0mQ4R1n5ygtIL9zeLSt4qo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FszK6kJLMx6Jhe3QF5PJsfyvbtPoTUFbBNXwIJvjlrN2RH40g8m8NoX25WyJfQ85+0ssMrxH0rehcmhNGqNM8Dfd/GPZ7UGMRF420x516eJhAWzFaMA0I+knJUL4oEKdls3fT9LIQMKBG9XuNusu+XsZwwq++SM9ZEP86lW1YkI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LAt8edWQ; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LAt8edWQ" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-38f2b7ce2e5so2360626f8f.2 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=vger.kernel.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=LAt8edWQeiP1rHrTxJ0VWoU1xEv5X3+DwphDMRHYVtpXmZnjv2Gr/x1AFcDdzkAcxZ 4AYvPrwJTzDrrhi7pXnN040SfDoZq363zDdUgKa25jYWVWpJoZvS6U9pCwbGSLRtTayj 2FGRhXPG3BEimDTYiMcNkrIV3uCHoJXVul+/hREuYH2KACG2bNLaxrCZevkVMXTk3Blb Z7hVoj0WCmyVy78tK5s25qmMywW6aBuw+/qsWe7MRSGzZdpgLzrHw0SV+MOQVpTCf2nx tOEdn+nILDgRpy+gh6SjkktCeHYxJCqLlgs/AebJJqanDWVRKm3bxC5mcOrOIyhdKmNm fbpg== 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=RPtBVAplMbRqKaztmOVwvICWxeoYEXP8c6+ei/HBfh6iy7lYxfM9BJxQ4BrbW+fypa dZnkw1nYeA9yG/dWDZ4ZpTwzUs58NzO1mk2Z+PKDLKK8s8umgzsN38djOcw4sTvINpLi zcdw4SvBXs8e+LB5aPM/dHYlZSZjeGs24LbS9Ql2DCVTybzURFncmmbTUhjpGicvJ6wP 15DaHoUsqQsnUWJRewTdUTon06IR7fjZ9YiQa/4jJCgKNt4EgW1oN9kNOKry6Bm0Pha/ pzNyGv9JPJ32lKGJcGV3jXlWONV6J3MoW88QM37Yn6ZTeWn5HSCvjCFiqHGAgVfwln2M AjmA== X-Forwarded-Encrypted: i=1; AJvYcCXHPLC5zjTZotztV89v3U3K1Q1mAJoGqe01PhDMl58uttiN2t4AFzcVRdqMHQbie0NLGAuQuL55QivLNUg=@vger.kernel.org X-Gm-Message-State: AOJu0Yzk1zeSVH/Y1PeHGh8gLTLv8nJ5cpJhFlBMRdWolemOCpB/GFIp 2n/rFc7K0ZodhuIk7Q+/qp/40HFJOsLbniygXH3kcFgskreqZpeW X-Gm-Gg: ASbGncuh/vaNL+AaDjUFBc/HPtMtFxptjDmlUZLbmjhIXhrRmte5+e04HriUhRglhed gEOQRN//QJDTPYNjFQ6FV0yzvVSvmNvjBf1tlRujyLxuTkrMj5h5lbZtYnJaOPhVQlpEq3gMXeQ wgcAfY1LFPDxluTr4mLyQD8C5yq0yPa4I21cUoJi6w63tvJ9p0sP1phQiIymOc7pY5YwDHBs2aO lnxNvYy3PbX4ac4xkeFiVr7IPgYotHIZ5dkgFQLkUeOf2nivu+E1ZWblUMiRY1doaOh9XNPcrw/ S4OpcxUbqZZPEdXXdw== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito --- 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 pipelin= e items:: =20 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/encoder= s/encoder0/possible_crtcs + sudo ln -s /config/vkms/my-vkms/encoders/encoder0 /config/vkms/my-vkms/c= onnectors/connector0/possible_encoders =20 Since at least one primary plane is required, make sure to set the right t= ype:: =20 @@ -128,6 +129,7 @@ And removing the top level directory and its subdirecto= ries:: =20 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/vk= ms_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/connect= ors" + * @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) =20 +#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_ty= pe =3D { .ct_owner =3D THIS_MODULE, }; =20 +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 !=3D &encoder_item_type) + return -EINVAL; + + connector =3D connector_possible_encoders_item_to_vkms_configfs_connector= (src); + encoder =3D encoder_item_to_vkms_configfs_encoder(target); + + mutex_lock(&connector->dev->lock); + + if (connector->dev->enabled) { + mutex_unlock(&connector->dev->lock); + return -EPERM; + } + + ret =3D 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 =3D connector_possible_encoders_item_to_vkms_configfs_connector= (src); + encoder =3D 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_op= erations =3D { + .allow_link =3D connector_possible_encoders_allow_link, + .drop_link =3D connector_possible_encoders_drop_link, +}; + +static const struct config_item_type connector_possible_encoders_group_typ= e =3D { + .ct_item_ops =3D &connector_possible_encoders_item_operations, + .ct_owner =3D THIS_MODULE, +}; + static struct config_group *make_connector_group(struct config_group *grou= p, const char *name) { @@ -616,6 +676,12 @@ static struct config_group *make_connector_group(struc= t config_group *group, config_group_init_type_name(&connector->group, name, &connector_item_type); =20 + 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); =20 return &connector->group; --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6064D272903 for ; Tue, 18 Feb 2025 17:08:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898511; cv=none; b=nBHdNhoBH1pS3jycCtts6FJ764CK3nzdUlRxtzYxnKpcODaiqP1XO5/YDYnZ+vu1PItT4ksfAWSQqdVdy7lEZuw2aiDuIh1d5AT9jaSvXBM49RIzQMDIzrBbJ7iQ27Dq/CdtHBU+jj2ToVkagp6t5Ls07OrnflpSLxN/9wEUFGg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898511; c=relaxed/simple; bh=/ItqekCx0ii3dBLNjzbyU9huWDpEytIDpvuIVGMSb7A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=mfIi4Pv+R74QvDuhcSTp6C1kQMPqS5cwDTpB46XLAP202d+/zjL7rXkC1C2JfesVSZ6rstOItKfs02APUkroAy+sHCEPSiqiRgVYbOccf+uwo5eG9abRnV5WzlDBBbDt3uaxnzoNoehvx7J+uQ+7/jmDyqM9J9B5K/mSS3yrPIM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hNI75qHd; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hNI75qHd" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-4397dff185fso25374755e9.2 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=vger.kernel.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=hNI75qHdZRzFb8I6sRU+e8ALlcVNw7ed9E6ItDFBexCBAOEQmyLN8RAFCXRPs4n+2Q 2gifIKhvkkyYtVexzKuLmmzmLnUHV6kRyWLqeOEyGGD428mWFvDEe7QUqYiuHoOS7q1N kghQOpE/Jlaag6eJ7INKun7J4o7FePwfn6m56Gw4vvtKrgxBZRZ/7MSjATJmMeWmgpw+ HBHEZvf3/BmxnSBelkP7TgduWoOlYXvhfhqCA0iQ5E6Azdg6bY/lBxKMJ8KH1QyCiZmB YC7C19chs2TqcULK2fW5J9G8I9c5NMJKHB5yiyRgLEGmtXxODARAiL01crfDYKEBKMx/ 44aA== 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=FWrFytpXjiQ9YIhVTBTEbtElXmcrZ6FIWsC1Svh509hj27njsD6z18v6BqM06+UvhN KSeVf1WYXfm1SrSfVGdOJLbE4gyJo7459YeXZvAjbVE95J9S3C57KKPsKcVqcARUgsD6 UYB4ryY+hY3D1hIx/u5B30MG0PLASIT7LfRDWi8ra4ClxHrmzNkLgC52Kn/I+y1My20D xgM8W3pMeRADcvJVRiUy2XFW8CljM0yHJgCPEuXqXtteWS1fdgj40CFCKi8FUfd7JOE+ /sEXn2fGEhlezvQt23TzxVRdMDWlJpTLv0tvgE0sEcjD97ZB/+COdgZdN+22T2OXE3EY nZOQ== X-Forwarded-Encrypted: i=1; AJvYcCX8rTrTxnMfrgs/NPZmUBr923CbjoepV9Og0E7njGhLRfNdPyOtf0I5etikw3DNSUXin87IgLme7gmC6CI=@vger.kernel.org X-Gm-Message-State: AOJu0Ywu2GukO845HxkaWYWJwA1EPYs6Rgihvo0fTpWsPmROlllX+y0D yjBG7gOK7fFy1BAw10xEGRjnfj3jyNRhNvTWqIuWi4traxzA6M2G X-Gm-Gg: ASbGncsxHVtjlCKAFQ9l2tk4Fyo7mCz1fJRUKRNLJePpnw/yMmigQoHbBiWUA9dhCw4 SuJiVjU6sVX1NR5bh6RDLkoNlLs2ivK6xqx018wEDZ0nCeZPBa+niD2WDo/s+c1VlKBUvl/SWxr nysir3S5wDHnRtwm30zDQEVOJ3RFXHWov92fzyVX7edknRQjiWG7pN2pimoSywWxoYR+939ZJnZ schDaQ0vbMB5rrSjLGKcIBy0LjYfkkQcIMTYrt+3sPXkoJPNUYAOu2W7XazsMznDSNRzL0i/dZb EDBFgxGWEwRfloJfNQ== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito --- 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/dr= m/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_en= coders(struct kunit *test) vkms_config_destroy(config); } =20 +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 =3D vkms_config_create("test"); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, config); + + connector_cfg =3D vkms_config_create_connector(config); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, connector_cfg); + + status =3D 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 =3D 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[] =3D { 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[] =3D { 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), {} }; =20 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"); =20 - 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=3D%d\n", + vkms_config_connector_get_status(connector_cfg)); + } =20 return 0; } @@ -588,6 +591,7 @@ struct vkms_config_connector *vkms_config_create_connec= tor(struct vkms_config *c return ERR_PTR(-ENOMEM); =20 connector_cfg->config =3D config; + connector_cfg->status =3D connector_status_connected; xa_init_flags(&connector_cfg->possible_encoders, XA_FLAGS_ALLOC); =20 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 =20 +#include + #include "vkms_drv.h" =20 /** @@ -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 connec= tor * @connector: Internal usage. This pointer should never be considered as = valid. * It can be used to store a temporary reference to a VKMS con= nector @@ -109,6 +112,7 @@ struct vkms_config_connector { struct list_head link; struct vkms_config *config; =20 + enum drm_connector_status status; struct xarray possible_encoders; =20 /* 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 *co= nnector_cfg, struct vkms_config_encoder *encoder_cfg); =20 +/** + * 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_c= fg) +{ + return connector_cfg->status; +} + +/** + * vkms_config_crtc_set_writeback() - If a writeback connector will be cre= ated + * @crtc_cfg: Target CRTC + * @writeback: Enable or disable the writeback connector + */ +static inline void +vkms_config_connector_set_status(struct vkms_config_connector *connector_c= fg, + enum drm_connector_status status) +{ + connector_cfg->status =3D status; +} + #endif /* _VKMS_CONFIG_H_ */ --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1086E27424D for ; Tue, 18 Feb 2025 17:08:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898514; cv=none; b=N7IQKbmQ1zyTNTFOeojUD1LBwN56q1moEjRTkjIzyH+dFEW68zrmRnjBKSvmG8eWW4sVQ7Q+ToN7RNLI03Zr0O4mQ3vcQNqsqbxw1zGQTFYWsopWwZr0zWAcXc+BHVgiD7R7H0gwScraKDWCi0KHuixaORz6M+yAAT8ZxJGhcTE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898514; c=relaxed/simple; bh=bvUa+h9JmV2ml66J/SlTMakEh4TAaYTL3p6zG9eX1wc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OzAQnE56HQbaDqM9UDlDg8o068OuOUEIdF7VqB3usUvwXabPOeTEt8ze1McVoh9uamfNsOpTJmup6gV3qukXFwYFSIsXmCMJVpiZihsOygdtzenOH9jWSIXxAGyqK7J8ykrkKSmE8P+EZW9ei2JMzPr2x+QVny8QwvJ6jexQXRs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fbvQc7o5; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fbvQc7o5" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-4396f579634so20767205e9.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=vger.kernel.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=fbvQc7o5Q8O1Y3+vbYay6L/jqVfYWX4GJdQX4Oge0nYARxVmDt2VBa3UnLolMLkxAD 13gbCgP6CKvXBULXoz+eRE9Uu7fd9r/jnCLWBbSGmABNN2UX11xCKirHfyQPzNvM3+Xu AaA1tN2oSbI9rZvUzjmGqLJh2PjCiusmOaAM2zOjuJPH2SLN/SW3UKFgQj+C1ZSrl285 JOUofnA5aMlUbvLLe6FeEDr8qrHYV+Pt53PLjp8wqs+ATUQ1da2oByVsYmEJ0sH1hfjQ 6j9mRI8TQZNaYuAgpVxGzsShhte/hLeS8tB+N1zYaPX3qRaZlXLfrlILtfqAFZr/Yel+ 3iRA== 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=pcrQpyaRxy19jnmVKHdoLcMxdhGjXJnPiNGKJ983Y1VmvXQ6u7cFUx/0QoLvD3Y55F EVq/TQLX753MV3mG6WcoartQL5GO1dYlUs619K9PkIrCz7G0UOziSJd7kc88XnyuxB/b zqwrL7nnJojpdt5fwSHHqiY28vhxC35ZhqbynXxuqXEwF/f+CG0mzi+HoewEpaxhFrgq EX0eoqcuAhwpx199iZK181YrFILXi3XpCfb+cskHk+ZtbMevLLvGBNF2TAPaS01VHOF0 PlsefvqpjnSNYOCtGyBtDdMRqx4ueCtw1PlPWgDGbF0RyhME4m6+kueLqGX+IS8+9VYB 3xKQ== X-Forwarded-Encrypted: i=1; AJvYcCUef2F2fDgHMDBYWl1San2Z3ohq4Sw6b+GjdRlc/2cFo/PBb95r/HqZ4YAiw6eIFZBz9DtwdOWo1UH+fko=@vger.kernel.org X-Gm-Message-State: AOJu0YzmusInyIfUJ2GchfYSIL+v3Q5ExPkT59UyOZBYmuO7PUyt60lX 719nP04AwuVQu5Xqf1gkyxr8DjaeqQlbG+f9/Heq0iM+H5F7oEcs X-Gm-Gg: ASbGncukd6IqFfqBUK+czzJekAGTg/2WeC/xJtHZ2Ae31+4TcMzXP7vVTwtk05M42cM lrRdVhZUiLdRKo6/eiaa32r7gEC8p6XPtNrUwIXsbSbYnxzjTajJcRJinGngagXG0br8RaGWiGS tD6K4MreXl2NV1R2Zubhi/TBKucxfx+lJ+B+haY5JplI5zeqyjQKJSz5xHowXntGzgTuTJpqWYv vfZWfYbT9RA0K3w7Xzp0cvp4NreeGxWqVDbD5KE+xBOZMjV1BcommVkFPOva9SBDv+H5/hJT8s4 CvCVf0Q0Me+rKE0XHA== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Implement the drm_connector_funcs.detect() callback to update the connector status by returning the status stored in the configuration. Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- 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/v= kms_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 =20 +#include "vkms_config.h" #include "vkms_connector.h" =20 +static enum drm_connector_status vkms_connector_detect(struct drm_connecto= r *connector, + bool force) +{ + struct vkms_connector *vkms_connector; + enum drm_connector_status status; + + vkms_connector =3D drm_connector_to_vkms_connector(connector); + status =3D vkms_config_connector_get_status(vkms_connector->connector_cfg= ); + + return status; +} + static const struct drm_connector_funcs vkms_connector_funcs =3D { + .detect =3D vkms_connector_detect, .fill_modes =3D drm_helper_probe_single_connector_modes, .reset =3D drm_atomic_helper_connector_reset, .atomic_duplicate_state =3D drm_atomic_helper_connector_duplicate_state, @@ -40,7 +54,8 @@ static const struct drm_connector_helper_funcs vkms_conn_= helper_funcs =3D { .best_encoder =3D vkms_conn_best_encoder, }; =20 -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 =3D &vkmsdev->drm; struct vkms_connector *connector; @@ -50,6 +65,8 @@ struct vkms_connector *vkms_connector_init(struct vkms_de= vice *vkmsdev) if (!connector) return ERR_PTR(-ENOMEM); =20 + connector->connector_cfg =3D connector_cfg; + ret =3D 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/v= kms_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 @@ =20 #include "vkms_drv.h" =20 +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 connec= tor * * @drm: Base DRM connector + * @connector_cfg: Connector configuration */ struct vkms_connector { struct drm_connector base; + + struct vkms_config_connector *connector_cfg; }; =20 /** * 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); =20 #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 =3D 0; =20 - connector_cfg->connector =3D vkms_connector_init(vkmsdev); + connector_cfg->connector =3D 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); --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1418C274252 for ; Tue, 18 Feb 2025 17:08:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898514; cv=none; b=RAwwubHswuW+afdsNu64LRkdYmU1z5YeFyzlp17WhvwN+DNHA4sPHVyLYEc12QpBzYKLp+A8Trc4+ApTwrP19R9+9gzSgQ8EMdxTjq7nmpgP1gFL54lgnYYsr/wVRaUCWnxNkmF74LvqVCAtHzKgIVjxEbTTmN10QuhrbE4BVq4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898514; c=relaxed/simple; bh=cP/vJyUBqJiIoGO1WrOZ5V3xdt/E8aOXvrwvz5xVmvs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=rlATIB6RlS3+5KfeSWJd/ITVXEQfSOr/W0rKlHEjEB2o1t2ctD3u5eN2iBRsOxQocreCD0m17BW05ON0/istk3Hek3f0quX3Q31f2e8JsMG5OX4anp8oNCh6VQpJ9kn4bGMtJfzOliA4afq17ydu6H6SsiYJVLLWwK8Tl7+ak88= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=bP7f1igo; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bP7f1igo" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-43962f7b0e4so35592255e9.3 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=vger.kernel.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=bP7f1igoOuxXb2rpEFZ6rnplIKAcXMesKODCrWbWmu5QUBHMRDpsvjSJ7MwyFocA+E zlLjMrJFScAOu3e3TVGXETnnuwpAeMmlewkKH3tMGM3sCoX6fmAuIUzgO6loR+9apqqB 8ggB7EGzKLMrGMhJdeBBPfKWeS4GpOwywoFJ8MZl7l1zqeExjrXkRIl70FWad6qpW5io 85OpB0Cd0sQqAv0mTn3JKv7qxbmxx8HqTcNIOGk++ZylMDAEFboj81JKCRSm1fh0RRc7 R6JnL7TEcnQYeVsj6gZFZVotALPxmFTlM4anekZRcqv6pOJu93nqRc0bBvSN5i4qstSu zP3A== 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=lvg/MMicGuHI8WvpNruPZJWlBCHbC8kvjUz6lNHV1PkteV8Ah3Qo90QNYYJeKaMNRq JtXC2g32jpDrm8nlJJ9EarUfAud19vHvarD7y+Yl9T/9ewxdz9S21Kkr70nHjxmnH7C6 1YKA+0zE+wj+lKd4v6w8oPTTQJ+hcu7qnYnI6t0e3RU8OWDN7W9zNrjvEBcsF+Iux0fw E+2dC1S730q1lYTQXTGhCeTycRCgO4ctDWDLdyHzlwLStGGaji5e0l1IOJkgvn4Eq2A2 xhddr8VFhQvxxkv1p/+f62G4WsT+P4C7cQ4PeXbc8mFolM3fFO1xUDZecbnNeXukvDnx fBug== X-Forwarded-Encrypted: i=1; AJvYcCUAKAVZ62avZhfr6pdgQQhq1ifZxfZBestvKxoDzCM3nCbzXO4lkGMhpZZ1qHFz7oRDR4tN1dvojplHrCA=@vger.kernel.org X-Gm-Message-State: AOJu0YxCnJaDCGhx4Lrj+u2PSqxlqE4qU06nAtEqoWRUXVGuqB75gzYc gfkB0QKPHiPKXjZ7zVc/7h4veaJgaiUBeQA9TJXkP97n21/6O4tI X-Gm-Gg: ASbGncvfD/rbo6OMwsR+4BKRf6r4WU4ZS7aMIyoO2/MPQeWv0qxvHi8lHzcViNr2CgJ hhszadYFu42lWfCWb+CL9vZfetrB6QXAkzyA4ZMWN15lQEdfY1tA5frrZ0VTTqbDpRPHgvFEAQ6 UZ/1QAiLA0PMZUgruJhZSCdGzv3Ne2xo6aeIo5Ns68Eal0Y8GkkGjB5Tkg2pEdH9//i1rLEPFLu Cl8vHs/Yn+ifVFV7sR2BQuoMkxXwXbSItdkCBex1dpJeO38fxhNoRWiPmvXDOdGCV9CF85kSjBS 4AM7VVsDYYCp0MuX6Q== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito --- 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:: =20 sudo mkdir /config/vkms/my-vkms/connectors/connector0 =20 +Connectors have 1 configurable attribute: + +- status: Connection status: 1 connected, 2 disconnected, 3 unknown + To finish the configuration, link the different pipeline items:: =20 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/vk= ms_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" =20 /* 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_typ= e =3D { .ct_owner =3D THIS_MODULE, }; =20 +static ssize_t connector_status_show(struct config_item *item, char *page) +{ + struct vkms_configfs_connector *connector; + enum drm_connector_status status; + + connector =3D connector_item_to_vkms_configfs_connector(item); + + mutex_lock(&connector->dev->lock); + status =3D 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 =3D connector_item_to_vkms_configfs_connector(item); + + if (kstrtouint(page, 10, &status)) + return -EINVAL; + + if (status !=3D connector_status_connected && + status !=3D connector_status_disconnected && + status !=3D 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[] =3D { + &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_o= perations =3D { }; =20 static const struct config_item_type connector_item_type =3D { + .ct_attrs =3D connector_item_attrs, .ct_item_ops =3D &connector_item_operations, .ct_owner =3D THIS_MODULE, }; diff --git a/drivers/gpu/drm/vkms/vkms_connector.c b/drivers/gpu/drm/vkms/v= kms_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_d= evice *vkmsdev, =20 return connector; } + +void vkms_trigger_connector_hotplug(struct vkms_device *vkmsdev) +{ + struct drm_device *dev =3D &vkmsdev->drm; + + drm_kms_helper_hotplug_event(dev); +} diff --git a/drivers/gpu/drm/vkms/vkms_connector.h b/drivers/gpu/drm/vkms/v= kms_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); =20 +/** + * 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_ */ --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2E2A327425D for ; Tue, 18 Feb 2025 17:08:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898515; cv=none; b=dtS6FNnwOKIheqWpxFavbKnfSc7ExhevGBw7cxtQZx1Nfix53nzD6cwxFxaFlYHB3UNMrmoLZGmBbhEvshSxhlfZobnScb0KMXAIcget6re+h7/mQJaSllfFBDILWkLHYVcZh2q3nbEcku4dnY+Y9JiAYDchOpSUdIb6A8ovklE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898515; c=relaxed/simple; bh=P8kC617s5cPjqzDEF8FzEtB0wmnP5TEWqsfop1ClzFY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ZGzTu/ReHiy+0zr4hmS2z6xDZGFFNtmzdKMV8WJkq90KEfPo9Wgggq4J1CSKmGvikBEJ38Ms+PpGYr3eoldsElviQvtN/ClLZKP5hv+DskM1X34uiZzWIypHfYL+lZkSFT93bLoq3V9FLp585zssJWYyGuiw/WQOPvrYF8/43aY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dwwWcNAv; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dwwWcNAv" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-4393dc02b78so38958185e9.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=vger.kernel.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=dwwWcNAvwJDOtYIe3VHDNEfP/hzIv0+159dlF5gzMra02DiHgv/0AQPCbTqAMYiM32 2y0IVPcBc/dVRR2HFMoZuVsPUqng0brLJSfpeiUAK+/Y/SVzM5ad2oas+BghBV37mO9p HKUXU3rnWgS5+MZRhC01fOhBt+OSIFYq7DBpSSjIiCRRLBExTYjZfBOMf2DL09EHO3qK pS4bKqBxaXzVwE9fPRfHnC3cMusruWhBY1WdS1aPuplZeKzAR9wyBUyEkKfLpRCMm84Z lvJYkSwiPCJD7UpyMXrE+2UM2yGXORMK7ntvGUcExVe+PL45IE3xPYuuwDT/huM82jy7 fOqA== 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=Mjz9Bn5MrySHzqyYEfPoxBosULgxUJt2+djfEUmpB1nAWsq5xyC0Ajmwxko4EtFHML NqVEQpqQGmZTxufuTSLH0H8t7zaa5SVh0eYBI6GUvSqUX04KLzh8b2mAlnnkFGApAAVW kQ4P4UpwuVG39/1JSTysod01Af2+kAd8hWfL34gj/u7LfZdGRM03Q4xIt+GoRp3iDCxX Q7+xy3pMVTUwweFkxpU0276VmbUBoE6rKxsEmcUkp0cKY+rwjUngtBYA54NBNDoDjc6p IKNRIyVxn6j8GlCk9p5oh3kdJMsgbz5L1obtaOo9XGM9oB58/7qOf3qgJGhpki6/c2kp TMyw== X-Forwarded-Encrypted: i=1; AJvYcCWKEOKglY3kMz45tjvpGeHk3jKT9dAMXLfvX9bT5wmvGEMR/IwgGZflz11228LMecdtMgQ7Ecj0M+jUE8Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yyvgf3AmysOdTgCLTaPkmAUlLo7uLsM2fT/99pwTaR8jxln7PjC m839rESwemo0dKHikN7CFeGOM0WbX1tyMx8xm0nLtUx6CLHBMqZv X-Gm-Gg: ASbGncugFGqXDu8FmzqDlmtl347sSOCfl2c2stu/LdawO9lKwKbGz+Ew3oA9JLgHPZr 2fFzYaMifQA6ot4+BV4Fjpeg+/1ZTsIN6rhcgkLsuG5AmViZBflBMJ8xd7JtooOPS8Vlo2YCk7n EgU0QBLpN59VO0kmpfXsHELhnmNSjUfoCdyc2/kIyNfeM5JxbX73zr35WdWIrA8YQOXDwQcrBmN sWhVWdJS/LS9rVWGFFvGdHfVai4Q7EM/GY24ZOpJa5NqqXQiYcJcc0Wjzt6YlpfjaTuIuaSbVRp plaVnUjdA5J2+D7TgQ== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- 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_dr= v.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"); =20 +static bool create_default_dev =3D true; +module_param_named(create_default_dev, create_default_dev, bool, 0444); +MODULE_PARM_DESC(create_default_dev, "Create or not the default VKMS devic= e"); + DEFINE_DRM_GEM_FOPS(vkms_driver_fops); =20 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; =20 + if (!create_default_dev) + return 0; + config =3D vkms_config_default_create(enable_cursor, enable_writeback, en= able_overlay); if (IS_ERR(config)) return PTR_ERR(config); --=20 2.48.1 From nobody Fri Dec 19 07:33:03 2025 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4796027FE7A for ; Tue, 18 Feb 2025 17:08:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898517; cv=none; b=pXrf87khyBinaV4xk9zF6aMdILzET11PUa9IWZZLjEjYIRLwWEaSb/Ik91A4ed37n7Vd+hlnb+3odsVa255qlxok31Ua92vBlBU5aMi1NlTWqPApZiAEhFCQbpbPIF6UBRzuj0FVKqID8LNlcV4keuXb8RpHov9U3pSvEkkStmM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739898517; c=relaxed/simple; bh=5TvCkp0MnHWh7GsS1WRI/iBunatRfB5yBJ2gYQ3Yvsk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=jQOWYKt0MPsdSXFcqbid+Rt24Nfx9jlJzWfj+OdqPPXVL1w/LIM6pdj6xHjqzcQAc0zfM58PA3S3UlWerrw34g799J6u7/ioNo5FB7F8ZYmPywaLqPxOtnnDoj7Gr3F0VWWs/7+oi+LQ4C3waLfjyBxeppJjtx5nnwybS+M56Fg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=h5+ntEOv; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="h5+ntEOv" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-438a3216fc2so59966435e9.1 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=1739898513; x=1740503313; darn=vger.kernel.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=h5+ntEOvgTqL0NkSJWu8T/Vq3E45iUXwwq5utLXy6siENMWpr8xRpzBADdGiNZxX3/ XR4DqFPXZx9M0htaulwu9pPLHwLkMNUZIWiiMGhkhy2fu7NXCSDw++Cgecm7HURreabJ rkiYNnT3qXsP5PoTNzD82MqjUy+8ERi0TKCudYx2Jxsce54eICcWfHD+eug7YwuAZ9Z/ BdWJ/wzBQJ9gFX814DzWE26a4Hw+cdHR1GYN39O+XfIGlmkcEqwKC2BzjJBftY9WBR2D +Alh5y5dKUYbsj1zbwx9F3Y4Pjt+wX4dAS24UKldCfv7ZOJCVXH1oBE/HvfQcPe1lSLv hVQA== 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=texliMWlC9ArbhFc91cdL1AF7agQPIi/aueMT/fx0qGKZzWT5cixtNaCZy+cBFShpR +UnCp8mNsktXnxGOYFiERsOn0dEMCwLEj46gx5oyoaaNen6uZBp8ejdMCBKtETgswbmJ vV3gw1zrTb8RuG6Iu8Zhgm7WWiwrlytOdAv3xiB+reBihiZUhuB046EqbfNcSwmX7Rs+ QqmYnf3kt3EV4dHJMsiFAY4q/AszEKhNGFATFTavEuLNqVJTzALSlUWn9ahtHN7g2J3e nDs3VkqezM6S1KipWjg/qRpTOPsuDYRsIAu7b/9ZhJ4TyFxtcnNXQu7m5mLZLww0kDLK lREA== X-Forwarded-Encrypted: i=1; AJvYcCUUyXLGDvMLzCH5oXPU/RF6rk5s1TU0oKqPsb9fETWZewPnaLoRIJMDMCzPj8M94KiaLUKt09eV64jqj4c=@vger.kernel.org X-Gm-Message-State: AOJu0YzTSJ/GLUPiUr4o/7YzbsyM2vPJUMjem1M5pi4ap+s4yUITWtvX FnL3qNukeRlgM+V8eSLQLzG9Tq9zDqpQQZIXc8/LCKi5uCKhM8fL X-Gm-Gg: ASbGncsxgkgokzRoy0cVqazUXJ9KLO5f/cbykCcBJPjQbOJJxy43SGuoeV5E3aZfWcV YeoO999SwznnW2BT8LRb4f11hthQRsNDZxkaSEvkLOew7fyv/GIQjUfmagbYfgMygiUeqf0G9Bz ycGA3yPvsAjg4CBtRfcmTsfXYHkdqWs3TdFGWYjnWUF9MbECP1hS3sh0/qUsxTvmSIApV6hScVV 7Y/De3gb41g2hwKczPR4vV9JCLfAL4JzIxsE3sSeuAwkmJRkpZKEGxgnNROwuLD5uxFtrqIsn7F ADZx00Fiwke0a0+bGw== 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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?q?Jos=C3=A9=20Exp=C3=B3sito?= 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Remove the configfs related TODO items from the "Runtime Configuration" section. Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- 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 --------------------- =20 We want to be able to reconfigure vkms instance without having to reload t= he -module. Use/Test-cases: +module through configfs. Use/Test-cases: =20 - Hotplug/hotremove connectors on the fly (to be able to test DP MST handl= ing of compositors). =20 -- 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 cha= nging the refresh rate. =20 -The currently proposed solution is to expose vkms configuration through -configfs. All existing module options should be supported through configfs -too. - Writeback support ----------------- =20 --=20 2.48.1