From nobody Sun Feb 8 02:55:42 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (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 0FE1E212B14 for ; Mon, 7 Apr 2025 08:14:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013678; cv=none; b=g0A7zwyxiZFv+jquLOY7BjNA4Q40+35shjtfFb4OUOage1a6WXd/Bhyxtr7UUjwkbEROLDIghldfAS1Q07VsdO12l2iSV+7uqf+lGlYBSc/XGTPPGnK8H+OjKokpYgSVGz4OBaNzgTs7hHx0b7MMTGQ37YlQN2pBDxc6TlZNBnE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013678; c=relaxed/simple; bh=x8q2LQoaUnOBaiP5jsGvS/C96mTK7nmUfaD9bWRUJsg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=b01dsiH/QzuTtKuv0WUFNhh32YIx7oC7s6Sda3gbs0wFy1NHIEqV5UMewJUikarfGOtCK8LSWi2Ux7gzQyY+8Gs4nBDoWeMu/K+RACv8mgJ6HZEAU/Hx0kCO+nUfTb8oJBb00UrFQDBzyqA0FhPKG8zYNuVpOn9VRZN92Aa35iY= 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=JqNSnhvK; arc=none smtp.client-ip=209.85.128.41 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="JqNSnhvK" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-43cf848528aso33323155e9.2 for ; Mon, 07 Apr 2025 01:14:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013675; x=1744618475; 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=zDEi+IB29m5kaXCQs1Xh/NAR1EeJ74QIHesF2OX+9WQ=; b=JqNSnhvK3QkugWOS2kJ7RfBf40ujnAG44hA0+qnUiEQp/nDlzolQudHmHzHTsq8f4S uSaf+4SMHMVqV5pvA/ceLKFj6Ta56HFTCm354j+7vG142zevteiYc//n4Wp/PmODmRdu rEzD69PtNcQxM7lPtkVduUn5iUNR/BWRXCS2wTSg360e7mRpZSxokY9f9GM+h8481v3m KN5IPD2IMCH3zUkUYpJ2PePM43uguk7fQQTOjgTCdgLrUTOagImGNc5lMedGhJRiPB3f cdutp0+z7kl7T6v/9wNSDsb/NkF55O6zqFsgsJfduhD9ISh8yu2FNx/cEPrhL3LKdO15 chYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013675; x=1744618475; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zDEi+IB29m5kaXCQs1Xh/NAR1EeJ74QIHesF2OX+9WQ=; b=lynVoV2XKemqAJh6dN5w8btN4kUyZBZO43AkyVV4aEyxeiD5QqNcrlbr4jvCLiCiDA ogSnjbZF12KwdAIJDEn4LE7GA8OwrnK2f9hd8QiyGY7QKnnNmHpsBDQyVjnQLcrVW8s9 fnKgullfy83XuuVSvy7aTAgTXxKiCk9/I/bS1HJG9yI63fvyPrn68vbXbUWj1bFFtwli yh1Gab/N9/FMBKWBo7pc5YuvGNsobqX4UwNv/q8dWoCdCdeJsJUhtpy512J+v9Zei1XC 2FvR9WHX50ZZlVtof9x4jsAsNyZ4g9YZlIjiFwQ61EgEdWBrQxJ3XgyRalr5kt6uU1zh Fh9w== X-Forwarded-Encrypted: i=1; AJvYcCUiPVusZaNNhoH41eK6kCTs+fUmfmQ3NPUXPzuAubuKTgVZaL6TiwbYv7uFxYvRjJxkpLRWO02x2x+FrHs=@vger.kernel.org X-Gm-Message-State: AOJu0YzfZHMV3UgF3Sm2OJU0dfCSBT4b22sLcs+sOJuyc5+KIR3sNxPv qpBTLrfUHtjcXhGR8ZHZrS2LcZbJPd2lGyP67aEVbsGFYa7O9MNI X-Gm-Gg: ASbGncsNbEGtfyIdltP4fVkS/QRn/KHIUjGJmhHUQbNRcidM+QfpcDh57cg6FHgR//8 vN70i+cnzRAOLLNtXIFPOK5LANrW6jWVMefbvWRCmdOd0QNTiTMk0R4OQpDOcNVmf+55DqLEIBS wHbGbS9i6cH+8L8zlJOhnFdHhi/PgETehb7qpjReA0rnr0s7ppaHBGZH5QMlHbSNXgIOuW2zYbs 5U8lgqkHCTTM9EqmNl81Sbr29IZzOP4nDRg08BdruF4qyCLKhdp0Yubav/QijSCLpfB+/md7k9Z FqJzb3//cmEQZgVujqKvEEESRd/6UkfIar+KMbWS4gsm X-Google-Smtp-Source: AGHT+IHeQ6PKxLtWFAt3ZSnE3B1E9Vr4aedKoSG77fVWdG9+AIu5tdZ3hunUv2hLHfA45hJMDk73dw== X-Received: by 2002:a05:600c:548d:b0:43c:fa24:873e with SMTP id 5b1f17b1804b1-43ee0640f37mr71172575e9.13.1744013675032; Mon, 07 Apr 2025 01:14:35 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:34 -0700 (PDT) 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 v4 01/16] drm/vkms: Expose device creation and destruction Date: Mon, 7 Apr 2025 10:14:10 +0200 Message-ID: <20250407081425.6420-2-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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(). Reviewed-by: Louis Chauvet Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- drivers/gpu/drm/vkms/vkms_drv.c | 4 ++-- drivers/gpu/drm/vkms/vkms_drv.h | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_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..2ad8e3da3b7b 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.h +++ b/drivers/gpu/drm/vkms/vkms_drv.h @@ -223,6 +223,26 @@ struct vkms_device { #define to_vkms_plane_state(target)\ container_of(target, struct vkms_plane_state, base.base) =20 +/** + * vkms_create() - Create a device from a configuration + * @config: Config used to configure the new device + * + * A pointer to the created vkms_device is stored in @config + * + * Returns: + * 0 on success or an error. + */ +int vkms_create(struct vkms_config *config); + +/** + * vkms_destroy() - Destroy a device + * @config: Config from which the device was created + * + * The device is completely removed, but the @config is not freed. It can = be + * reused or destroyed with vkms_config_destroy(). + */ +void vkms_destroy(struct vkms_config *config); + /** * vkms_crtc_init() - Initialize a CRTC for VKMS * @dev: DRM device associated with the VKMS buffer --=20 2.48.1 From nobody Sun Feb 8 02:55:42 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 C53482153D8 for ; Mon, 7 Apr 2025 08:14:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013679; cv=none; b=DAXBS7aBbDREsncFYB5bAkdkYRpv2UJBvoqZZMx3zFjCOr6FLIWA9LxsnLqX6tEKySqr+AnPgO4uvjoFHWJ+iJ6tTeu3P9Jkh97ucYbeueOz7xc2FXcTQ4p6Dh1O/2sDVl1/7JHyqp+Af/Yp0WoxI/GR9CmipWjNFtgKGKpZZTU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013679; c=relaxed/simple; bh=V4DLmZseUOgYBVR4CesZkK6yAq40G0WKqdceJqtwkAc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QNddwL4+ft2qrgdL+n/6Yx3EDW0KXPuf07Au75mQYcakMNoS6ctOV+H+JCX7kwkg8rY2x9oFR1zdhoGcO2a/i/jpwGRCEcCwGcgC3qeZjXvXcDZYoZAItAONS6TnrqaHTZx51zbiFIR2RuhReW/XMNVzBom6VbRspGO6XRoVZH4= 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=BFqs0J5W; arc=none smtp.client-ip=209.85.128.50 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="BFqs0J5W" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-43cf034d4abso43632845e9.3 for ; Mon, 07 Apr 2025 01:14:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013676; x=1744618476; 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=p45cZLaf1gywk/MK+MXiVodTeLbOOWF7knTf30Q5E+0=; b=BFqs0J5WhxK3zBzsS6ZggxiToOPAZKLMPu2kmn+TFporFwCOob2BoaIOaUAmAn5akf K1K6Nya5Mo12UE1/+dxVvnOfatDaWjGMPyhJA4856Tak7eCWfDr2KzSF4/lBFm2mqGs6 duE4F4Mu8kMAWsJsoTRKsnJmip8rfT43tJWnugTq0VX40eGNlH+iNIyCWrCio3/fJm5L vuULcf7lGVY8hCoA61Rqf1m8GSKn4NXBO+c8vde9KrZunDa6deVPirv0hQ4uEhLui14u 5xzNnil4WZpwiJvONFbWLU2Lm2JHSflGgTpc7deP6L9pafJbav/7baF6iD7ZgDDbTVD4 TzTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013676; x=1744618476; 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=p45cZLaf1gywk/MK+MXiVodTeLbOOWF7knTf30Q5E+0=; b=C1k2wWXFbWfeqGllU1CnvmKFeNJ84WMom8r/qgNV2pa9cLimRLLrKOWd4TYNKysKWP /Nsx/AloRHEkxRAmrh3xviEOTEbs04F+26AO163JH9CABCYnwomepPTettvG6Qw/Ciru yLi2xxOI3oRBwYG7t7WybtXB9O8Yjok08dW2CspGyIpTl3bksndz00wb472Sl+Ue5FPE IpL8hwUcrgmUHGg/h9WzG3ff6bQRsF45i22PdVA7PjIYrPQCSft/3Ddcepj04AbzDA3z q4QaGoNxzazdTvZCFZ3vSImy3rNF4s3H/NQRn+eETIJmY55Q6bB9lEBQFW+TqbXRKNBm dRYA== X-Forwarded-Encrypted: i=1; AJvYcCXb3/TcxL/Ct/U14gVO1Yz6WW0I5HlnT3qAQwcLkX7tvOwWAvC/WW3jU74vLgon1O52KuhA/2e/qAy9y+w=@vger.kernel.org X-Gm-Message-State: AOJu0YyJzFxPs6x1+1H/qB35xvUeaI4+MjHcya/Wgh4y3+XD+Nd14R+j gzWF7GHTV+wWvXwqE8ONYWv5zUpmlCXz9bN4YGAwPa+uiVMTqON/ X-Gm-Gg: ASbGncsqGJU3xsss4utDsgotLGSpgxNaffcZDBXCSah2GwjWhCAPp3P57SBo/ohWf0m PdRcyqj/iNp1ZU3/pN3UeUxGogZJXaWRhHq8nr/mgUh7vEWMzRQICbdALItVzuoZSrAYpARvVG6 /pM1kr5LR8hbBzgFTXmbpRLleKjRUxeooX/ajpYm42SYRUsXAxtr9EwM9CDH52X0aHq/1G5a5K5 pzu76D2XLGKBneWEohkFQUzhJ2jiGVNk0EvYyMpc9uiid/hHdY/QBXhJBM0530rBt2kDZkZXu1K GEDNIifn9+bNmL6ihSNvIAW+ZF7E9Ja1kAeYr58vmEvE X-Google-Smtp-Source: AGHT+IHTil2/uh3cJO8bxgTxZ5+YsCg8av3wPML9m5DlMi4WmtfsU7UCRlE2HowySEpUtfUN/flm2g== X-Received: by 2002:a05:600c:3d0c:b0:43b:c284:5bc2 with SMTP id 5b1f17b1804b1-43ee047ca70mr75666355e9.0.1744013675857; Mon, 07 Apr 2025 01:14:35 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:35 -0700 (PDT) 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 v4 02/16] drm/vkms: Add and remove VKMS instances via configfs Date: Mon, 7 Apr 2025 10:14:11 +0200 Message-ID: <20250407081425.6420-3-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 From: Louis Chauvet Allow to create, enable, disable and destroy VKMS instances using configfs. For the moment, it is not possible to add pipeline items, so trying to enable the device will fail printing an informative error to the log. Reviewed-by: Louis Chauvet Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 32 +++++ drivers/gpu/drm/vkms/Kconfig | 1 + drivers/gpu/drm/vkms/Makefile | 3 +- drivers/gpu/drm/vkms/vkms_configfs.c | 172 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_configfs.h | 8 ++ drivers/gpu/drm/vkms/vkms_drv.c | 7 ++ 6 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.c create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.h diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index ba04ac7c2167..423bdf86b5b1 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -51,6 +51,38 @@ To disable the driver, use :: =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..ee186952971b --- /dev/null +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -0,0 +1,172 @@ +// SPDX-License-Identifier: GPL-2.0+ +#include +#include +#include +#include + +#include "vkms_drv.h" +#include "vkms_config.h" +#include "vkms_configfs.h" + +/* To avoid registering configfs more than once or unregistering on error = */ +static bool is_configfs_registered; + +/** + * struct vkms_configfs_device - Configfs representation of a VKMS device + * + * @group: Top level configuration group that represents a VKMS device. + * Initialized when a new directory is created under "/config/vkms/" + * @lock: Lock used to project concurrent access to the configuration 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); + + scoped_guard(mutex, &dev->lock) + enabled =3D dev->enabled; + + return sprintf(page, "%d\n", enabled); +} + +static ssize_t device_enabled_store(struct config_item *item, const char *= page, + size_t count) +{ + struct vkms_configfs_device *dev; + bool enabled; + int ret =3D 0; + + dev =3D device_item_to_vkms_configfs_device(item); + + if (kstrtobool(page, &enabled)) + return -EINVAL; + + scoped_guard(mutex, &dev->lock) { + if (!dev->enabled && enabled) { + if (!vkms_config_is_valid(dev->config)) + return -EINVAL; + + ret =3D vkms_create(dev->config); + if (ret) + return ret; + } else if (dev->enabled && !enabled) { + vkms_destroy(dev->config); + } + + dev->enabled =3D enabled; + } + + return (ssize_t)count; +} + +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 Sun Feb 8 02:55:42 2026 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 51473227B88 for ; Mon, 7 Apr 2025 08:14:39 +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=1744013681; cv=none; b=sRyaOVSwttJQhc+oOrrZa3g0a6ma1wLCDFK3usVrF3GK/tXHaAE9dpT+TpjiSxiC+6z8wZp3RAmvcLCALngJAWt7u08GXpHD4SPKpxPIYCUTLR5MBdtpOskjPaDhTwbMk7jPvTPyErqxL1jSkmXVU+dNOhWfiJ7HJjzOnaFDlkk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013681; c=relaxed/simple; bh=Tgt0Uo67U1aFY7DF/ChWQEn7GbH5WCKbG+n4bTjuaYQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=g1zbM+0t5ViHF0RklrFelODVJMU+jJHhU/Vf14d5wZncFzm1tTEwIozEkjcYHcHy7z+5ubLSCou4QAJOAavChOK+w4k+ASqBV3Jc8V6yXsgHTP7eteJJvdkMUSAHhjUTdwajfgVIS7USHX/VaOIUDjwbiSTdo3sxj2JvpOz1wd4= 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=K7hK7EG2; 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="K7hK7EG2" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43cec5cd73bso20878625e9.3 for ; Mon, 07 Apr 2025 01:14:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013677; x=1744618477; 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=yUua635QmFw+1KGcz2nLsMIEoZ9qsls24PS1/h9+cyA=; b=K7hK7EG2BvMQfT9mQgCbpoc0rujBYbkA8AoQ3vJ/rBs7Um7lowzkwGdaOiISyKl60y zQGulGAWr0rJA8Qa2PVZpqR5FXCT/1NV6aU4fW5Ezd5xELcISiZlNSejrqb1ofULZqRs ke4iKvU/NOcbioth+C9ekaF2jDolPT7SFAtZ7y1LFigxLIfmzWejToTvtFelRZi7J1Dp Tsu+HyjdWaKi0PPfgcpVNFVGGbBwoi8hkGU0KWF5E/HNB12NpTjcL+HxknyueZmEwqmd i8FohjO2gmeUCyW0LWQBL+LGxH0uMz5cVia0NlhbaXOyqrEaDeNJNUSt2b36VTTGaFEb ks7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013677; x=1744618477; 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=yUua635QmFw+1KGcz2nLsMIEoZ9qsls24PS1/h9+cyA=; b=r1FNxiKAKmShqD4ZxexTw94BEASwOkfCL6X3x+uaIAOOL7aLHLq+uP0G+a2GzZVTfd oCa2zKyg3NYvujQVtt9Rvnqps+9dFW8Ql5dCt+Xzx5jJzBid8zIt9OvOlZmMWU7jdSyI hNOf5g35mLOttPgLge6rHoXc1s9G+i4dtBnUydxLAJZ9j3VtQvBIspohxxlaVt5ggrxP hMRxMVWSzFfusfS/Li4Ud1Y1CXOc99nEyV31Hkn0g51hMTiELdMDovWJhlHaLocK3M3Y xyssyE1Ny5W9oMt1TJ6CgZIZFmVdrxJQuZTm8q/1MXMEfdM3RPo8KZ3NKQ/txIP6qUIk UEzA== X-Forwarded-Encrypted: i=1; AJvYcCWrVWJUZgiliPHzS7G6RF0IbbUCiTlEBpj+AE8/W4xrwSYLH0Lf5wWVJeNY5PVqP9F0HMR/wf+/q61y5Fs=@vger.kernel.org X-Gm-Message-State: AOJu0YwUD7AVVPglRQ8pN9/vCnmsLxEe8vj0Yqq/Wroi5vYam1TtGwFh UOzcarFi61q96EBBvIqO8W0mKezoO7E8OGSovVOT4kJKL3vTA+Mf X-Gm-Gg: ASbGncvHzseHxsdN04x8/tpq6mmkuZtZ8ZphVSVnmuvHahILn7yZS0vr1DfQUJh/O0G ER9rR5tZNeq1CQ99E6budLNF5yWddaKTfrPdC4+H+kjPGB4r9MBYvXH+dpQdsl5qUUgvs2YnAJB 4KQ23XbSNQ7duQRbtu01NzhRgKnQ2cBVfbGAwa3CYC9gBnyNoU8326SSuoiiUUuHZJoiwtpaXjz NDm2aknt2MLbnNKWeDFiPXMFqBfc2Zw8CM/Y5PpZ8dHh6Yl1fcg+JQg83HAORH+ee2SGKRdmbto xqozFzL6ufHq9tG1boVKuIcFPVdBirAOguYczzszMbyd X-Google-Smtp-Source: AGHT+IFI6ekk9Xs9/JQib7ERN8AX1pdeGzlpPQRVexeoG6RA4salMBX7SV3QcoiGa54zbZIQ1Bao2g== X-Received: by 2002:a05:600c:1989:b0:43d:5ec:b2f4 with SMTP id 5b1f17b1804b1-43ee0660a3cmr78042835e9.10.1744013677442; Mon, 07 Apr 2025 01:14:37 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:36 -0700 (PDT) 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 v4 03/16] drm/vkms: Allow to configure multiple planes via configfs Date: Mon, 7 Apr 2025 10:14:12 +0200 Message-ID: <20250407081425.6420-4-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 From: Louis Chauvet Create a default subgroup at /config/vkms/planes to allow to create as many planes as required. Reviewed-by: Louis Chauvet Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 16 ++++- drivers/gpu/drm/vkms/vkms_configfs.c | 88 ++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 423bdf86b5b1..bf23d0da33fe 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -71,6 +71,19 @@ By default, the instance is disabled:: cat /config/vkms/my-vkms/enabled 0 =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 ee186952971b..a7c705e00e4c 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -16,6 +16,7 @@ static bool is_configfs_registered; * * @group: Top level configuration group that represents a VKMS device. * Initialized when a new directory is created under "/config/vkms/" + * @planes_group: Default subgroup of @group at "/config/vkms/planes" * @lock: Lock used to project concurrent access to the configuration attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -23,16 +24,99 @@ 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; + + scoped_guard(mutex, lock) { + vkms_config_destroy_plane(plane->config); + kfree(plane); + } +} + +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; + + dev =3D child_group_to_vkms_configfs_device(group); + + scoped_guard(mutex, &dev->lock) { + if (dev->enabled) + return ERR_PTR(-EBUSY); + + plane =3D kzalloc(sizeof(*plane), GFP_KERNEL); + if (!plane) + return ERR_PTR(-ENOMEM); + + plane->dev =3D dev; + + plane->config =3D vkms_config_create_plane(dev->config); + if (IS_ERR(plane->config)) { + kfree(plane); + return ERR_CAST(plane->config); + } + + config_group_init_type_name(&plane->group, name, &plane_item_type); + } + + return &plane->group; +} + +static struct configfs_group_operations planes_group_operations =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; @@ -128,6 +212,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 Sun Feb 8 02:55:42 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (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 51485227E9E for ; Mon, 7 Apr 2025 08:14:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013682; cv=none; b=FyskZ95lmar4Y28Qo7V9jB+zChyDpj9r+qdtkejQ4g3VesKMg5iNDDk1o7TeBUJ0OYruWRDU1LZ7bitF5J63bZ70piPMy9bxy7YO7guFixePB9WRDgGQVlvnCuvYXVIW/Hr86lZasKKjJF4v5Inf4Wz9eeTaCqjQtxeHRk8pVGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013682; c=relaxed/simple; bh=kQj22Xp+Ha6gqWOMW/U6z++HMc+8PJcEGJdOBpR3odI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=jxtSE9n8K3oOnA1IZPYLtDC8yfj/qnycyJ+pWBmw6jw3nMSsmLMpd0dzk8XOyP7HHXJ17Iv6u8HmSAV3LpUYmfDsIj3JdaAE18koe24+K0LKS3Qoji3RDpQyAyOY3Q8smyp79i9VNJ9F1GF2NZjjDEIE+pCOPj9han5TSSK5LzQ= 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=AhkCZLwf; arc=none smtp.client-ip=209.85.128.41 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="AhkCZLwf" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-43cfdc2c8c9so23268175e9.2 for ; Mon, 07 Apr 2025 01:14:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013678; x=1744618478; 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=3YVCYzfxx8qviL1pZU6Jrz6KDb/rO6bc8XZpUckpDZE=; b=AhkCZLwfWzWzFkizO4cwqLR6GtveDCuvX0AXi7ZZ3N4u8A5lRE7M74Xpkw8hp3Px0a 4hi+stXc237zdboCGq2tpxmqUrkjyUFeoY/EArx2E3Cs4iqU07HuCnMWhusK0/G0lqvZ Gds5LaXNRG9R7htQ3zPwz0vlsubNM8CcLeMRas974SpH5fYyShB0x7L8+6YHm+yTftoB aF5l1DoTru+L+Ia3yfWiRj/1VVj7B7kuO6RlLjugMZg3fjX3T2NNd06lfwJnr8IOHURu pqnXGLNsOTE6kVzDgmaZYY2BpVmb+VZhIMBTcWN2ynkAH1k41/Bc1IadFlQR5ZDjR4x6 9hNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013678; x=1744618478; 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=3YVCYzfxx8qviL1pZU6Jrz6KDb/rO6bc8XZpUckpDZE=; b=CYQzgTqowjMVABdGOlA8n8TEffZFIjwQCTyea7klXAhqPMeuUKV1ig4Gthi8n12Fhq Je48FDiyDxssYhC/eDkZ39yPyU4qrmM/aNv9i1LB6Su+h24gGyfwQVFuOoRaytoeqBvO aC/67h1431GvJH5OB/HOAfs3lH0LS0STCCB+eZjgbsgWpyqMZLaU3SdXaRqiRnX1vR2J jw2+4Y00aXBRBMr1B2sB/RCb1NPDQ9RmOcgl4SIjAkmi7f0AEHUglm/A23GOB7XJZ8yu fws7ktjt7PimIsiuvHhYFneJBTikbDGy5GfWZ2hT0/ogdBQisEE00974yjjvEMGZa1gN K1cg== X-Forwarded-Encrypted: i=1; AJvYcCV7as7YjYxpxRZYCpE4tzJykZ9ze40KmcG83kgucgXR2GQVBWm9w8UbLV+KoCcMKshLGv1NgDkPgAenmbo=@vger.kernel.org X-Gm-Message-State: AOJu0YxvvHUlOtRhic2R//Rh1rEq+5W8p8KyClTFfI/A0QTAaOLYh9Dv uGsj4znrYInpttnaWHUt/us0wTuiAdwsEpZEYuEdseHcx+iKE8jq X-Gm-Gg: ASbGncv/xffla6ln/B15x0BSttcie2agm8csZvXmMQmKiIcjEPaLr8ND+yZUL4hpXnl jUOFbLILXqg9GMMav/lAY/mjbCtMyDblz0ReB4tyF2pnfFxUD47IxnBN7pC0H3RZudDUcOpLToy ThpxZjSf0aZR333BLS6r2VUYABAol+TD16SX72u4N1KPgFM4b9uBqt6x94e6E3kJUe/zrlKlWO7 bhUmB5mftxH4MY2T5qmDku0MZ+2iNVEsvUsw0CtwSbQ9OZkxKizfkLhWxOYBLfRm9stdFMztwY1 es2DLRJ3oNMli3GFmY0axTmnz82U2mFeNcKVzYSzXTYf X-Google-Smtp-Source: AGHT+IElBQGStyE2bMCP5d5QJjkdipCeXPcuZYwURkEiVB3dfTK496XhZrH7wiMK1+7MUwB5IZBupQ== X-Received: by 2002:a05:600c:5785:b0:43d:209:21fd with SMTP id 5b1f17b1804b1-43ee0783d96mr69770095e9.30.1744013678526; Mon, 07 Apr 2025 01:14:38 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:38 -0700 (PDT) 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 v4 04/16] drm/vkms: Allow to configure the plane type via configfs Date: Mon, 7 Apr 2025 10:14:13 +0200 Message-ID: <20250407081425.6420-5-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 From: Louis Chauvet When a plane is created, add a `type` file to allow to set the type: - 0 overlay - 1 primary - 2 cursor Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- Documentation/gpu/vkms.rst | 5 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 46 ++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index bf23d0da33fe..a87e0925bebb 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -84,6 +84,11 @@ Start by creating one or more planes:: =20 sudo mkdir /config/vkms/my-vkms/planes/plane0 =20 +Planes have 1 configurable attribute: + +- type: Plane type: 0 overlay, 1 primary, 2 cursor (same values as those + exposed by the "type" property of a plane) + Once you are done configuring the VKMS instance, enable it:: =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 a7c705e00e4c..398755127759 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -55,6 +55,51 @@ struct vkms_configfs_plane { #define plane_item_to_vkms_configfs_plane(item) \ container_of(to_config_group((item)), struct vkms_configfs_plane, group) =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); + + scoped_guard(mutex, &plane->dev->lock) + type =3D vkms_config_plane_get_type(plane->config); + + return sprintf(page, "%u", type); +} + +static ssize_t plane_type_store(struct config_item *item, const char *page, + size_t count) +{ + struct vkms_configfs_plane *plane; + enum drm_plane_type type; + + plane =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; + + scoped_guard(mutex, &plane->dev->lock) { + if (plane->dev->enabled) + return -EBUSY; + + vkms_config_plane_set_type(plane->config, type); + } + + return (ssize_t)count; +} + +CONFIGFS_ATTR(plane_, type); + +static struct configfs_attribute *plane_item_attrs[] =3D { + &plane_attr_type, + NULL, +}; + static void plane_release(struct config_item *item) { struct vkms_configfs_plane *plane; @@ -74,6 +119,7 @@ static struct configfs_item_operations plane_item_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 Sun Feb 8 02:55:42 2026 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 806B4229B0E for ; Mon, 7 Apr 2025 08:14:41 +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=1744013684; cv=none; b=A2E12innxqRQAIkAcBQFyLW/X3gyDmCYBExS1z7xPd/QKpM4lgijOZAhzv6fX9UG8yfosOAi2w7Mxw3G0pQt4feZ42vM6+H4B1seNqr3E49XpDaWd2/Bt1X858T33bfTRAWPVO+1x2Ucv/TDCDk+0UTY5M/aXWHqQIY9AB+uMoc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013684; c=relaxed/simple; bh=NtlP73y2QLHtTY2hQomX6whjhghjIfJHWmEBp2Sp+eo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Vo7WORnzLvXgIGXC8kidshqJN5+3pWyE/gP4qJsjZWSSQvpvQCe64mL2IB/RuUax5XRcRhuAcqgac7bqQ7+UEaTkL2EPT6/3K1zi8YsHLEKKGMQfwKIERNKgD+9aK+AZHz54mShiY5Enq/cejqUkCJhoByXfBEA12EJPPaskDqQ= 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=kFTyh3y5; 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="kFTyh3y5" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-43d0782d787so27844875e9.0 for ; Mon, 07 Apr 2025 01:14:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013680; x=1744618480; 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=stsFD64ii1jnZLgpjtErPKPFyA0QMQaSclvsTtujv5k=; b=kFTyh3y5R/uSyUC+jnmP8NGmap7WmsZ7OM7o9aKbMXoEBQAQnk4WRDfXYQFxP1sdU9 POnXTPzuRGUbttg+NTaNSetZBbdtnQv2nwP84QIY4KPPJjDvRIpK0DRkQuGBw+Vd38V0 5IIjAqsfEZhbK5+i2grIujFm1bpwJX/HOV3NnSYMHyUWQAPaO7opoc4qrldYvBqzosmg ucmvFm77tDqoWkBCS8mfFkAF52Kv8RXvmuFo97aEgYzyi+bLGQMH8eZgpDQFEisxToJI Ml5DWQPtKaRkkJph1Jy2KydoLv+5dg4RLFnQk7iex9GQgRQAlJXCHm/cN0dvDAc3AbWr MkCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013680; x=1744618480; 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=stsFD64ii1jnZLgpjtErPKPFyA0QMQaSclvsTtujv5k=; b=s0nJcOEQ1ZzWSZj4qmsU7/Be3+V/R4+3GzUUnm0u0YgbxYa2g4KQ3RbaxLcd3K02/S sYrIE1d1PxitgVXcgFfhalaVm1qgPFDGObazYjgxUfhsuLnVomhhJU+Gk7datSYGfdcW WItGu7PWQJtrwJl1aag3kZB2MuF1uPWqP2pRe1En+SNT0UEr7Tj8q7GBVRqOmued+xux llggXN24f9gLmbCOd4T6Vna4i9/rkTfvux3o+6KSaMfRUvv3Thclw+cvZbowNwKj+1Jf CIDBzDDGttD+BjZLnYOdQXkiCFEBTr30sxiV06tqQcXrtpb18Xo88U/MWyJDr/LqKm6B 4wcg== X-Forwarded-Encrypted: i=1; AJvYcCVLCVSHrxsxPn2btyDnn195xsKPPKJQ6aauJU3+9MSpNr+q9ZR1eCjMZJ2d5knOPrDxciLe/f0yLrfdOO4=@vger.kernel.org X-Gm-Message-State: AOJu0YwdpXHCKwjGqeT/aY/eTe27D3pxp5waRfUibKLvkCxJZt6KEq6/ 5+Y9CQ+qXoHxXoTChG/PKSxL4mTpvSNNv6ZFA6EQq/Dk5AsDi7Rl X-Gm-Gg: ASbGncvQGSTDydEOCqFJ9S2fI18Wt7d6QBh+aVNdq9jwhaxwFKT5Y0mjab3idyy+ule RBuIQBqoSr5XX0HDocXKhP2aRCG9SqK1V81mDbgQIriSgrEqTU2GrbgLpOoLXAoC8OWvSpNFlu9 ozbbG5YeHHer+fok9h5nHLZnwPwaaySPKT/9zN/xJPCOJxcxKKxxr2QGEOpF/OIDL9Cv1g+gRZD Yzvbp2U+yqgTJ9e8/xgRq1HvEt9euRNpBz++k6OcnVrvCm4VqH6GW18wnxlDVALjMyezm78INps u6axxnHG+IwVgAp1XcRI8q3dZ98L4flmFcvF6U9mVEIG X-Google-Smtp-Source: AGHT+IGWmc0qnmfw5ElLS8GVANgd5HNvybgkrzUJOpJp0hC5PBZchMlEi/qnTwrKl0W4fJBN/wWkuQ== X-Received: by 2002:a05:600c:3b14:b0:43c:ec97:75db with SMTP id 5b1f17b1804b1-43ed0bf6aeemr105262585e9.11.1744013679533; Mon, 07 Apr 2025 01:14:39 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:39 -0700 (PDT) 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 v4 05/16] drm/vkms: Allow to configure multiple CRTCs via configfs Date: Mon, 7 Apr 2025 10:14:14 +0200 Message-ID: <20250407081425.6420-6-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 From: Louis Chauvet Create a default subgroup at /config/vkms/crtcs to allow to create as many CRTCs as required. Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 85 ++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index a87e0925bebb..e0699603ef53 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -74,6 +74,7 @@ By default, the instance is disabled:: And directories are created for each configurable item of the display 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 @@ -89,6 +90,10 @@ Planes have 1 configurable attribute: - type: Plane type: 0 overlay, 1 primary, 2 cursor (same values as those exposed by the "type" property of a plane) =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 @@ -100,6 +105,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 398755127759..62a82366791d 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -17,6 +17,7 @@ static bool is_configfs_registered; * @group: Top level configuration group that represents a VKMS device. * Initialized when a new directory is created under "/config/vkms/" * @planes_group: Default subgroup of @group at "/config/vkms/planes" + * @crtcs_group: Default subgroup of @group at "/config/vkms/crtcs" * @lock: Lock used to project concurrent access to the configuration attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -25,6 +26,7 @@ static bool is_configfs_registered; struct vkms_configfs_device { struct config_group group; struct config_group planes_group; + struct config_group crtcs_group; =20 struct mutex lock; struct vkms_config *config; @@ -45,6 +47,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) @@ -55,6 +71,71 @@ struct vkms_configfs_plane { #define plane_item_to_vkms_configfs_plane(item) \ container_of(to_config_group((item)), struct vkms_configfs_plane, group) =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; + + scoped_guard(mutex, lock) { + vkms_config_destroy_crtc(crtc->dev->config, crtc->config); + kfree(crtc); + } +} + +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; + + dev =3D child_group_to_vkms_configfs_device(group); + + scoped_guard(mutex, &dev->lock) { + if (dev->enabled) + return ERR_PTR(-EBUSY); + + crtc =3D kzalloc(sizeof(*crtc), GFP_KERNEL); + if (!crtc) + return ERR_PTR(-ENOMEM); + + crtc->dev =3D dev; + + crtc->config =3D vkms_config_create_crtc(dev->config); + if (IS_ERR(crtc->config)) { + kfree(crtc); + return ERR_CAST(crtc->config); + } + + config_group_init_type_name(&crtc->group, name, &crtc_item_type); + } + + return &crtc->group; +} + +static struct configfs_group_operations crtcs_group_operations =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; @@ -262,6 +343,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 Sun Feb 8 02:55:42 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 068D2229B1F for ; Mon, 7 Apr 2025 08:14:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013684; cv=none; b=SR+2qHvadW8MnVw9UQNdM+D3yLz7RVmUp75RSiCKwQEtDrGVP4SzRbMk2c70BbIrvzDqstWl5vcynkBmw65BdLnAwL4vyVqIWqgsy8eeCcThUGbpaJ/eDPViU3SrqV49z2dZyicES6s7/5Nt3DF0iAxPPGOX4vdY/Ux7ndeoWJk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013684; c=relaxed/simple; bh=Qf5kJYjNJ5UjybP18Zj5zQoxTy3lvOqUtbeFwNnlolk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=jSXh8yw+D9thgZDKdCQLoTHO3ViigLMeiGv/b/QPbvbcgeS2DcD1WziJog1hGzfQH5d1QfBoxLRv7yLt76KPXMeJtxYRcsvlc3ad8kijeZ4EkmeTIb2MIOosFJL93lBhkzGmZMTx1x0zuuAA6lLeK46GdgHr/RRU+lp9eJNj7y8= 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=lsUsoCkN; arc=none smtp.client-ip=209.85.128.50 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="lsUsoCkN" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-43ede096d73so13156605e9.2 for ; Mon, 07 Apr 2025 01:14:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013681; x=1744618481; 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=PcXSp8pgzSq8wNXoM27HycQqegwL//5YxnDgqXeVDvc=; b=lsUsoCkNIWw19NBig/+0QenHqx+CzZFzbvYdzILAXpQhDYPxeOZ50ZPH7q0yG0f062 lBQeeB1Eun3nIYoVl7nVqiCYf5p06m+YekSShLwYo/jegMjX/6ES1iH2rOpGe01+resY 3tgMmIYWW0M9mQCQ3MV+YK6iPlFRk4odWioUcpFXz3dwFFoo7VKBl1gHELOMdBFaoi1e AgiLvlmfXeJSqC7lb49WdGO2t5J9Be4/T5Eem2EnvZP51qeI0Vcuf8p70Anmi1CLFILx yP2OGwfVaGpCEkxUMjRTYsjAmCiLVPaYoXtgDwPpMtfeOjjixpSPN5GPUdQVorOGizRb QfcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013681; x=1744618481; 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=PcXSp8pgzSq8wNXoM27HycQqegwL//5YxnDgqXeVDvc=; b=Lrzz1sSYVmxg5oA12IF0k6fGu6e97n5isSu9dIKJ3DSDde8vazBHQfMRPSUXCvOdKl BbgFTRjlOY1uR1ymMLvBomP8y58HJy1C4XO9HZQ8NlaiGPQ3dHEgRNqR9+gQ7sFTpau8 AoJLMCrDZPtl+H5ug9fvnvPMnVE+1mD3pRaoWZgiT5w8eQNN220a3ZRiwRDgicjjvoP+ z8eJvbq9noK7/wTFLc8vM+wUfIY94go+ZgXSIlGDrhXbqdvP6jQvIsQzUlstA4/8GQ+C E+Q8Sxmd5sdCWw1M1wKFgh1W3Cjwp61c0HkPlPOS+Pwr8Jp1CiKt0tcr8wAKiHbyKeED KYXQ== X-Forwarded-Encrypted: i=1; AJvYcCWWDYCITcyTSfheRI9k1B8lrHcIhUWZB5RGt63KVbWNCoEW3IDvgLQdAvOHk83KmK9CALE4SZ5R5cmu1P8=@vger.kernel.org X-Gm-Message-State: AOJu0YzP9NDVr1xo3tWFZsILG5/FCDpCGxuBKSNHhEJkXlgcanJ3mTcL cA8ZrnWmq4JBnp0L1cDUgTef4f0rgf3KhpAHchA/P5jaMra0nzjDuEdZOQ== X-Gm-Gg: ASbGncv9a+93+5Fn9MNsvGEI7vl4i94A2cFPoj17CevA6TlT9+FY+gPP+6tq0mKmLLO 5U719EM+PE1JJ6vx4vK3GBXBy49frqmI72qTCmS5bu5tfYzrGDItHnujEgyzX9J23R6MOcWOPOC if/YCoQAxJrPO8pz67G8wv5ptR3ObqV4Ge5mOcEPBVwTgjIWyPX5sBfLdDN8HDTLnaSnUq/Hb0e zpVau/i6UeNk1c19y3zyvhLF38/Cho8w1JCijc6DfxTKM1hT90CqUx91asPt0/9b47dqksOcL4E 5xf7SRhAXgGMtGhLWEL4Ew9CSVZxMQPA6BeBh58TcKKL X-Google-Smtp-Source: AGHT+IEOvcCjqwHYmHo/+QnfasqodtrBtlPdfu1XAaFA0hX44c5bBU1IaftsHeJH9DXHtC+DkVS0zw== X-Received: by 2002:a05:600c:3484:b0:43e:afca:808f with SMTP id 5b1f17b1804b1-43ed0db4006mr115955245e9.31.1744013681104; Mon, 07 Apr 2025 01:14:41 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:40 -0700 (PDT) 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 v4 06/16] drm/vkms: Allow to configure CRTC writeback support via configfs Date: Mon, 7 Apr 2025 10:14:15 +0200 Message-ID: <20250407081425.6420-7-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 From: Louis Chauvet When a CRTC is created, add a `writeback` file to allow to enable or disable writeback connector support Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- Documentation/gpu/vkms.rst | 4 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 42 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index e0699603ef53..abe7a0f5a4ab 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -94,6 +94,10 @@ Continue by creating one or more CRTCs:: =20 sudo mkdir /config/vkms/my-vkms/crtcs/crtc0 =20 +CRTCs have 1 configurable attribute: + +- writeback: Enable or disable writeback connector support by writing 1 or= 0 + Once you are done configuring the VKMS instance, enable it:: =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 62a82366791d..e9f445043268 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -74,6 +74,47 @@ struct vkms_configfs_crtc { #define crtc_item_to_vkms_configfs_crtc(item) \ container_of(to_config_group((item)), struct vkms_configfs_crtc, group) =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); + + scoped_guard(mutex, &crtc->dev->lock) + writeback =3D vkms_config_crtc_get_writeback(crtc->config); + + return sprintf(page, "%d\n", writeback); +} + +static ssize_t crtc_writeback_store(struct config_item *item, const char *= page, + size_t count) +{ + struct vkms_configfs_crtc *crtc; + bool writeback; + + crtc =3D crtc_item_to_vkms_configfs_crtc(item); + + if (kstrtobool(page, &writeback)) + return -EINVAL; + + scoped_guard(mutex, &crtc->dev->lock) { + if (crtc->dev->enabled) + return -EBUSY; + + vkms_config_crtc_set_writeback(crtc->config, writeback); + } + + return (ssize_t)count; +} + +CONFIGFS_ATTR(crtc_, writeback); + +static struct configfs_attribute *crtc_item_attrs[] =3D { + &crtc_attr_writeback, + NULL, +}; + static void crtc_release(struct config_item *item) { struct vkms_configfs_crtc *crtc; @@ -93,6 +134,7 @@ static struct configfs_item_operations crtc_item_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 Sun Feb 8 02:55:42 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 DA5ED22A1E6 for ; Mon, 7 Apr 2025 08:14:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013685; cv=none; b=M41cp/xtBRueFOIdpYcZ8khlC65pTHlPfFFqwJjduKOYWQKDJ3iZ00scMGUj7Z045E6oZrVoGKgVMvwDGBcvj5CnNaoLYYKPWatyfcda62SnImdEEhpD39bxPFH7bm2VqUXewMEMG2O4H0mqfmyP+w86G5cczXTW1ycdnTNl3YQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013685; c=relaxed/simple; bh=0L5O2xKCq57wM0jy0jSFudtqYmZe43mQO098xDB4ng0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=J+RZjy3iSgKkpQcWMkGEjLZ404J9OT6VOXIqKQvFnl/8EHKQoZ8uctc090Tm1vJZkgMvxSyfhR5Z6an3Ymz3lE+MH5sr+YQ/e1eZxld213n7dH73jx93tVqMtM2Fa5pbrvH4xu37Io4HjXFG9ZuHkbjUaEggXipHfVW5zhkjnHk= 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=KrSlwKFY; arc=none smtp.client-ip=209.85.128.48 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="KrSlwKFY" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-43cf257158fso27278045e9.2 for ; Mon, 07 Apr 2025 01:14:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013682; x=1744618482; 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=hDtCC6WPPqEmxKPhos4FDITpDjg13+QxXsw1Dug2hLM=; b=KrSlwKFYticCequfEhsek63AuYTaaMy8UP9Mx6fFVVTFcn+fP8Doz0xGoP/0IFJBQw NB4W4Ojz+tTFqpd44x3TC5+yzK1iD2PULoYSLFu70MwBU0mA5UHkATkJ1OC7hRMPNany RkJNoYdhXPxjNFn8wcdbmCR9LNxbxygUnk+Eva+XbxFPNIXTArTsEbvbSzgVSYi7IxGR PfEqvfJWJxlPQllJJK50Em5uu/t9hsTFk5AbDPetwZCHE0OP0h1UQ4/U4QGIXnybzjph 7cijqvhzhGCXcrZbWM3fVdTly+qyHpAyJ7/+RHfA6KwxECmNNAxtuhs6mSHcdo8xz0+7 ED+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013682; x=1744618482; 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=hDtCC6WPPqEmxKPhos4FDITpDjg13+QxXsw1Dug2hLM=; b=WT+DdyzEFnIAY31w6IsmmqYBGUdXe+8/NABedw1c/G8jozuxPmIuhoyZ4jUm9pAQU8 pu05skacANZ7fpOcXEiQ6IvjemG37uJR52xD4YQwGNIzXoLqGIrcBBXqfHTjFRaCqte4 4kcTe6ckhrVwGE6dwTsB022vANi+9ErAwuruGJNcd/n0F2IPypI+n0vXgYjNq0+xkr7Z SOshPAojDHcuXDFYDE4HLfxCSBh8OH0H+W+6XgwUj4LWtUoa9YTROVlIzFllnQtbLymx SrW8JAPq0Pmlw2pFwfKyaAk8gqskV1QVFqb55PcSsUGelqWyxsYmvkv/hWKqK3XLy61v DlKQ== X-Forwarded-Encrypted: i=1; AJvYcCXAVFT7bjoK6hsWlzgUVBWfSnHaQq/yFDBqb5fgTYKksI9EnB8BeiT2tjXpxkDBF3sgWZP4prt7SxQyGWM=@vger.kernel.org X-Gm-Message-State: AOJu0Yz8n025156EVf9RxQGTQuWwlF/iUmZVTPp5aRJcf6i0mif73/ek Tw9iS2rCai56Eb82zRTAv6N4q2kbViBQVuNln2OaVumtWrLNk7qw X-Gm-Gg: ASbGncvtSPTWeNZTR2dOgsJsoh8qRQfCmAJx2Rde7GCyynU8tIZUq8RPk4Nf1DTW1oH NYlnINZsgEmOkGrhATiF4IerTni0aS55Ro5h+YEd7IlY5DVZSaCSptbiRpvBghQrEdr+uYPnwDE N7OrX4R98wrSaLQdcRv0RobKpTdsZVTpRX/DhDaKsTGMEwsDMSHWAajqCXUkYiwQoKXxVaqogdg bR+nCDOR/CRuCpXz0JJ7xVGmBmZZ7NW24BNk+YfpKNtWaD37FYJFufXXGcYX4aoWFlFhGMkQo/8 OMIyMP//QH4UD6YxkDZtFnPHBPd7++WIaFPQxjd3zeGe X-Google-Smtp-Source: AGHT+IFv3N5CjA50DYh7NKzdUNFZe5+gAyJ96Kzu1deHkeTcpi2IBmRpXiK4xLtLmHZsZonXiPdJfg== X-Received: by 2002:a05:600c:4713:b0:43d:b3:f95 with SMTP id 5b1f17b1804b1-43ecfa35e5dmr81341465e9.28.1744013681951; Mon, 07 Apr 2025 01:14:41 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:41 -0700 (PDT) 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 v4 07/16] drm/vkms: Allow to attach planes and CRTCs via configfs Date: Mon, 7 Apr 2025 10:14:16 +0200 Message-ID: <20250407081425.6420-8-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 From: Louis Chauvet Create a default subgroup at /config/vkms/planes/plane/possible_crtcs that will contain symbolic links to the possible CRTCs for the plane. Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- Documentation/gpu/vkms.rst | 9 +++++ drivers/gpu/drm/vkms/vkms_configfs.c | 58 ++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index abe7a0f5a4ab..13b96837a266 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -98,6 +98,14 @@ CRTCs have 1 configurable attribute: =20 - writeback: Enable or disable writeback connector support by writing 1 or= 0 =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 @@ -108,6 +116,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 e9f445043268..2cf97c2b6203 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -38,11 +38,13 @@ struct vkms_configfs_device { * * @group: Top level configuration group that represents a plane. * Initialized when a new directory is created under "/config/vkms/planes" + * @possible_crtcs_group: Default subgroup of @group at "plane/possible_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; }; @@ -71,6 +73,10 @@ struct vkms_configfs_crtc { #define plane_item_to_vkms_configfs_plane(item) \ container_of(to_config_group((item)), struct vkms_configfs_plane, group) =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 @@ -178,6 +184,52 @@ 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); + + scoped_guard(mutex, &plane->dev->lock) { + if (plane->dev->enabled) + return -EBUSY; + + ret =3D vkms_config_plane_attach_crtc(plane->config, crtc->config); + } + + return ret; +} + +static void plane_possible_crtcs_drop_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_plane *plane; + struct vkms_configfs_crtc *crtc; + + plane =3D plane_possible_crtcs_item_to_vkms_configfs_plane(src); + crtc =3D crtc_item_to_vkms_configfs_crtc(target); + + scoped_guard(mutex, &plane->dev->lock) + vkms_config_plane_detach_crtc(plane->config, crtc->config); +} + +static struct configfs_item_operations plane_possible_crtcs_item_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; @@ -272,6 +324,12 @@ static struct config_group *make_plane_group(struct co= nfig_group *group, } =20 config_group_init_type_name(&plane->group, name, &plane_item_type); + + config_group_init_type_name(&plane->possible_crtcs_group, + "possible_crtcs", + &plane_possible_crtcs_group_type); + configfs_add_default_group(&plane->possible_crtcs_group, + &plane->group); } =20 return &plane->group; --=20 2.48.1 From nobody Sun Feb 8 02:55:42 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.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 95AEC22A4D3 for ; Mon, 7 Apr 2025 08:14:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013687; cv=none; b=YRGAXVZSSrA9bycjoftIHZdFmjG5ryP9wtoe499R8JPHhaFbHbqegThV1MTk3k9ZnSKgaSlMQwtcWLWxXMntXhKVIAmADiU71ZPd+xEpNINUamDSyUMbbgECsS/xTjqUOB39x+rh4sIbGaoWExkVSUK9s3M6TysU53DS8AG2QxI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013687; c=relaxed/simple; bh=Wi7ykHMtyPx1L0V++pfgxps2pB8dKAlH8vyEeYIBhdM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=l9W8L55bVfto+pV+VhJ7k944tr/j8lWNNojhEw7qwOSwwDq7kG4Hlg5/kMjMElY2u3hFcYz7bFN5kQfPGuiMTOCKIC+xXLrQZX8aP8AksYpKxOL6BdhdtfHCyf4baJTvoDlS15HarexwA1vbc1EB/ndQVFSIZg23bNbEE2KUnI8= 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=Ay0U8lD+; arc=none smtp.client-ip=209.85.128.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="Ay0U8lD+" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-43cf58eea0fso20457885e9.0 for ; Mon, 07 Apr 2025 01:14:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013683; x=1744618483; 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=f0WRLpCb7W4S/OASemBlBhF+MVaGI+eJr0lijF+1c3c=; b=Ay0U8lD+34h+pNsgZBd3OO5O1hS1a5g07m09KYD1UnvcEH3jStRxFTuVoCRklMdzfW WXGLrX8Kl+B6o4vbNtm9ktGUSTjSotgojQ0FSqqEM5SEZ4cdoOVYSBjW3EQmSg0pamNb 9IYTIKYJLTgTHkKrZozdblCoEwAVD/SSuHmLpStfzBdPPcXXbbOaWHAj1jXuUY44H4E9 uCVM1slLPX+ah5028HULOPfY8+mbc6qTE0mTVEpMxjjLQxF+pVzksyo24nvYwYQhFAyd W50HTai0YZqY+0V9ftprYxRErnylcxiIfsgIniaimb9hVYSI1YXax0ScxnKwVWWNcbBE PNWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013683; x=1744618483; 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=f0WRLpCb7W4S/OASemBlBhF+MVaGI+eJr0lijF+1c3c=; b=G4CdUkF9qCaVXferGC4EvLEb5vWe5j9CGdbVhRi2Xktff3a11PppK+/oOnueEw1/XW J+Xmf5rmk6zIpdtIzcIUUA3XBSv084uH9S16Gc4+B7P38m2/1v5uyoHIqH/9qUqfQ114 tRP8n2kX3vkTobWpPpE6+n3L5nlmpWeU48HHd0VXWDs8FTK/gI3OFiM6iya/iBQdoqyw +ma7Vg64lJX7MnTRfEtV27WQespxrb6twpHqU3bA3rzZNq7ckAgl/DD/0V8wJ7Q/32mx VtpnaYUXVfRPqCNYRIl05IlfGrYmWqhE7bb98OhF1VggrhP08982BwIeoHSF8gJIO5q1 Ao6Q== X-Forwarded-Encrypted: i=1; AJvYcCVdn28ytcLBzQQNlxBW5Od1QGt4bpX3cmSeDNGJsEmyMUT21cFQ1nLnudKuZXOXN9XkV8pfFTIMBokB2kY=@vger.kernel.org X-Gm-Message-State: AOJu0YzfduME/J1mYBJFr8wu/SLH1V0cEwrTVketZlgx+wTXQ4HIupKi bviuR9zeymrq49w0sCzJhSSvkcwXmG7Ixq0+oApu6hDJdthYLe+2 X-Gm-Gg: ASbGncsdIjv+HSnZuokbH1TWzzDlEFyncwWmJL4TlS4BI6pnPXrcVNUE4hGdP/MANq7 yY4gsumu2Xxz9VuZGb29hmUJPFHxTLKxtEqfCNwOxJOwtu6p30NfjVVO0LWub0ENIkVXpxGGWxN 2oGv7QV7w3COIDBB6zeDljMnmPtl3x7Ahm+qQabz2vOwfe/Eet4FEePQawGHFpDk2CC1QXYQrk5 XFYt6UgNoHgWrnN9LMtEiymB648B6e/aGDLVsd2dKQfFhzMvxitjEaFG/r/fejpM9g8VDDrWLrW rECJ+5IFKVeTCBqn/JiGPTxS+l7bZUM5T9bsEg1jYsOn X-Google-Smtp-Source: AGHT+IG/88e0b60/Y0C5GKyTtSCd9DooMjlQuLLois99UoJNmC+RM6Kq5lX/7f0WXIwo/PqsRyl+Rw== X-Received: by 2002:a05:600c:b95:b0:43c:fa0e:4713 with SMTP id 5b1f17b1804b1-43ecf81c336mr101643585e9.2.1744013682759; Mon, 07 Apr 2025 01:14:42 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:42 -0700 (PDT) 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 v4 08/16] drm/vkms: Allow to configure multiple encoders via configfs Date: Mon, 7 Apr 2025 10:14:17 +0200 Message-ID: <20250407081425.6420-9-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 From: Louis Chauvet Create a default subgroup at /config/vkms/encoders to allow to create as many encoders as required. Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 87 ++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 13b96837a266..e24767448775 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -76,6 +76,7 @@ And directories are created for each configurable item of= the display pipeline:: tree /config/vkms/my-vkms =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 @@ -98,6 +99,10 @@ CRTCs have 1 configurable attribute: =20 - writeback: Enable or disable writeback connector support by writing 1 or= 0 =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 @@ -119,6 +124,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 2cf97c2b6203..0df86e63570a 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -18,6 +18,7 @@ static bool is_configfs_registered; * Initialized when a new directory is created under "/config/vkms/" * @planes_group: Default subgroup of @group at "/config/vkms/planes" * @crtcs_group: Default subgroup of @group at "/config/vkms/crtcs" + * @encoders_group: Default subgroup of @group at "/config/vkms/encoders" * @lock: Lock used to project concurrent access to the configuration attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -27,6 +28,7 @@ struct vkms_configfs_device { struct config_group group; struct config_group planes_group; struct config_group crtcs_group; + struct config_group encoders_group; =20 struct mutex lock; struct vkms_config *config; @@ -63,6 +65,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) @@ -80,6 +96,10 @@ struct vkms_configfs_crtc { #define crtc_item_to_vkms_configfs_crtc(item) \ container_of(to_config_group((item)), struct vkms_configfs_crtc, group) =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; @@ -344,6 +364,69 @@ 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; + + scoped_guard(mutex, lock) { + vkms_config_destroy_encoder(encoder->dev->config, encoder->config); + kfree(encoder); + } +} + +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; + + dev =3D child_group_to_vkms_configfs_device(group); + + scoped_guard(mutex, &dev->lock) { + if (dev->enabled) + return ERR_PTR(-EBUSY); + + encoder =3D kzalloc(sizeof(*encoder), GFP_KERNEL); + if (!encoder) + return ERR_PTR(-ENOMEM); + + encoder->dev =3D dev; + + encoder->config =3D vkms_config_create_encoder(dev->config); + if (IS_ERR(encoder->config)) { + kfree(encoder); + return ERR_CAST(encoder->config); + } + + config_group_init_type_name(&encoder->group, name, + &encoder_item_type); + } + + return &encoder->group; +} + +static struct configfs_group_operations encoders_group_operations =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; @@ -447,6 +530,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 Sun Feb 8 02:55:42 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (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 C0E2D22A4F8 for ; Mon, 7 Apr 2025 08:14:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013687; cv=none; b=jJPuaBsFBB9UL2AJdGtXprWm2gI9Psht3ZKTqSDwMbA6A4BGtaCltn+kKvbB5Tc6PFrIfNYkmwLcDlH9ekqyhLjVYLtncIDMgxVDysH8WvSg5fwJqkyBouM58rs73NWHPBSYieYcOHvMrKKr4Hz23rgnig+8v1RaSmvQl+mCxm8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013687; c=relaxed/simple; bh=O0w8ZQss3MjaJTVH9OCQXnjasdNh6xzuj9r1mCBS+K8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SljcIyJXV4m9CjuTvL7mb1I5cZd+zMY1xjlWdbtLgzMOYIF76zUAWhxtq4TRWCEFJImm0gMPqLtnU3l4wJgTYqooJWB14sqv3wsoeBwLACFSTXkIoTSo9yvNVtnBRxQ40QGLH8iXzD7vmlaOxxKibAYTlJt08asmq0Fp1W+/+/w= 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=iwQLejnp; arc=none smtp.client-ip=209.85.128.41 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="iwQLejnp" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-43cfdc2c8c9so23268485e9.2 for ; Mon, 07 Apr 2025 01:14:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013684; x=1744618484; 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=JM/Fi/DDU9FwBSZywjo1FgF2AvwYFEClN7Cv+XzGCRQ=; b=iwQLejnp0YclbIw4p2Vqs+E/6OVV0+4mWWYe420OblC8Nc9j7kZPzzBxsTtghbxBVu f1A7ElBjzhvzzSB3aSBBd4ax8948S+gFDW6tKHUIB2WT+ktTjqwoNcbDdo1R2MEZr9Pj FqrFTEZjD+lrXrfSzKO9XD/wuQjyzLzNkmCZ0gCGIaY5Ax0+sy5LKoJ/UFj8lyypsi6a cOkpl11UjmAwaP1lIT6QrbydIdZeIBRaRR5Pxgf880q60QnKYoF11uzQF2kiicz83ZYf a2Ho10/5bgI+bfo7OcHL7Rf4Rh6pAsGsGZj95hYEompnADUUG5/dZXRaPQ80miXKl6aV R+lQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013684; x=1744618484; 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=JM/Fi/DDU9FwBSZywjo1FgF2AvwYFEClN7Cv+XzGCRQ=; b=D6yBrLidIxnyi+97J7Z1cCCkb27dKLa3Zh17rljSHuRIYKWIyueTct/w18J9ibkujR Ho8PfwuoW58ySSGsfeGEQjINqYmcjVDBG7FrQ1zqyfzHEeVZLNIiqPnV/Ae/qm2fcEd2 NicPzK21Ms3nG4+6yn1GfmnynpETdEQOkdONRQYdTQen6Yn8vPcZW/uvY3oEuWNGUsCj +rkpCFxrkibL2qlKPSpeBaUP2d6h0I8JqIywHOWdaasQDFtoFj13b39Evbpw0F5z4sP8 NaFKkSFXdI4ftlq5KY18fX8k2nlZg9fSoJwTH2Q/z+5qqESeeieLZ52R8ig9ENygMNy5 Z3aw== X-Forwarded-Encrypted: i=1; AJvYcCXLZv/2Ib57lPRxyFP0Y/X5UZQ/Af6GEs4GDX0uoX10IQxQcGirrlS28zlOAX689fFPADnDaw7SmqUhN6Y=@vger.kernel.org X-Gm-Message-State: AOJu0Ywj+HMzzhErIypYXx4+6F/aizweQ+O5ngilgj7VPZZHyZ4H3Nls A/jyKhaGlEZF5RZ8g5GsD4Nqbb/4z0JC/Kww/o02VaFwC5UyrAET X-Gm-Gg: ASbGnctcns/mKFoVTbrodIaNZD++iUVP1C2pxeIVR4CIXNbTZW+n6qNSQcTL8BFbPwY mLFzvOEsHVF6kTRGM0OfsJB9bB73DOUnR+dm24MMcOuwIZXni7D+ixznI4LuL05uVFXod9t7jIp u2SNBweDTpIsHHGJXXrj2Vp25YHzrqFT+DAeaOO6RszJpw9zNXXUjUGQKN3i8oawcvCljwbzeEh 8CLq9SWzREvk53F1/3AnQIwgwrbZnMz3+yhSX0b8J5u/FCA5STkyKOnADV5PQmGbE4F+FOc4ABj zsHl4vBSLCJmLZk7Dyw3cJvjkcakbKSONenWpQD2saxQ X-Google-Smtp-Source: AGHT+IEqDaM4S78b8UTDQYDDTn9k2Pc7xmCPXPXr8Ca/VQfBfIMtDZuyf5gdnsmRTVyBe5Ehu1j0+A== X-Received: by 2002:a05:600c:510d:b0:43d:fa58:700e with SMTP id 5b1f17b1804b1-43ee0789b05mr60393725e9.33.1744013683916; Mon, 07 Apr 2025 01:14:43 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:43 -0700 (PDT) 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 v4 09/16] drm/vkms: Allow to attach encoders and CRTCs via configfs Date: Mon, 7 Apr 2025 10:14:18 +0200 Message-ID: <20250407081425.6420-10-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 From: Louis Chauvet Create a default subgroup at /config/vkms/encoders/encoder/possible_crtcs that will contain symbolic links to the possible CRTCs for the encoder. Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- Documentation/gpu/vkms.rst | 2 + drivers/gpu/drm/vkms/vkms_configfs.c | 58 ++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index e24767448775..650dbfa76f59 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -106,6 +106,7 @@ Next, create one or more encoders:: To finish the configuration, link the different pipeline items:: =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 @@ -122,6 +123,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 0df86e63570a..7de601e39d2b 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -70,11 +70,13 @@ struct vkms_configfs_crtc { * * @group: Top level configuration group that represents a encoder. * Initialized when a new directory is created under "/config/vkms/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; }; @@ -100,6 +102,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; @@ -364,6 +370,52 @@ 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); + + scoped_guard(mutex, &encoder->dev->lock) { + if (encoder->dev->enabled) + return -EBUSY; + + ret =3D vkms_config_encoder_attach_crtc(encoder->config, crtc->config); + } + + return ret; +} + +static void encoder_possible_crtcs_drop_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_encoder *encoder; + struct vkms_configfs_crtc *crtc; + + encoder =3D encoder_possible_crtcs_item_to_vkms_configfs_encoder(src); + crtc =3D crtc_item_to_vkms_configfs_crtc(target); + + scoped_guard(mutex, &encoder->dev->lock) + vkms_config_encoder_detach_crtc(encoder->config, crtc->config); +} + +static struct configfs_item_operations encoder_possible_crtcs_item_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; @@ -413,6 +465,12 @@ static struct config_group *make_encoder_group(struct = config_group *group, =20 config_group_init_type_name(&encoder->group, name, &encoder_item_type); + + config_group_init_type_name(&encoder->possible_crtcs_group, + "possible_crtcs", + &encoder_possible_crtcs_group_type); + configfs_add_default_group(&encoder->possible_crtcs_group, + &encoder->group); } =20 return &encoder->group; --=20 2.48.1 From nobody Sun Feb 8 02:55:42 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (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 A1ED222ACD6 for ; Mon, 7 Apr 2025 08:14:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013689; cv=none; b=QbQI0TbTGnt/NSrjPVEoIZnnpkP3PHSaUXM39tHWqn9n5CEKP7iFdpGgNptPfON6HWDxU2IckptJi1NSyFVnIZeNrY0y8x7jHnJfqalBuIdhJC0V5wpbo/28QrkQyrVWOx6bPXx1rVWWFaOTy5w116Cm1zCw05wLUnuL5aXXhWo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013689; c=relaxed/simple; bh=/TDL05ebUIGcUgDxDTG1+pOuGY3vkFH0iYlDyZ7GUKc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=XLYN9HNeYG1+FikYvWjkDj7mYTQLXzCsei6Gfvk3LIngYjRTq2DeH06mZrekXaEADRVKMNHBP83v/t2wLaPHMexTtM9bW3GXtVnvk0egbWCGufgTazM2gQn3Rg2ei8f1MJRnyCZUfIQAdZTYb5gT9+aRG7+UNNYCBF/lCms5peQ= 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=W4xnLW3l; arc=none smtp.client-ip=209.85.221.42 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="W4xnLW3l" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-39c2688619bso2374767f8f.1 for ; Mon, 07 Apr 2025 01:14:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013685; x=1744618485; 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=GbNm5NirpaXtPMC8pxSKafBM99wUQJj6c+K5yh8PTzk=; b=W4xnLW3lF2vKzKr4D3KerGCPZ9cMbPS6wF2cJeNxSoSIHyHSO0n+3rGQbwPQdnVZqA Gwx+14PQXxX04H855nIlFc3FVW83RioX7F8g2+INAORZkj75IjFE/lZMWarVsZGqd2ho hzsaRr0avIkUovqDR5H53ezZ0oiU7vsUtxvUbPQjDWQTyIutcs+2L6Ljhqc7Gt+rdAt6 5/Rt/49iw7PEdvDPSA/1xZIH+Xv3SXp5dDtPc/+MBsA4blwLO3bLhmJcCPooUjLyB3ak CCvo6962VSTZSQKfyUl70CXV8sNDkLTHw4lHtWYXtsG2g2+XPVKYMWmFniVB1KnR7nvI k1yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013685; x=1744618485; 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=GbNm5NirpaXtPMC8pxSKafBM99wUQJj6c+K5yh8PTzk=; b=PXjHo26jxGLPxvlcZJPddBOtjn8aCtn6eG3Z2f6/75FfsHGq3GAT2/q7Janxgg/6gi Gc5Wi0jkcvc0w6MMf7EdkNGkgOhvWPVL5UmbK10ZeEpxVPzaMGCqiJ17WO4fwoG8MvZc 4qF0Zm05IlzOrLmEkYdLix3jp6M9KmOyPI/8ZSNiX7pqceuo1ql3pgpKoA+GgM+asZ2E cm3emaEqzI8t3ccLXCpwcOUo7pEWJ0LGBE/61lFzCyTv+OHnoEDr52W3QTMZtlMLUKui m6JBG2YCJB0i1onrqVDgWJLDqsUBgh4dSZRednnALZuYO9vodeKKzks73MzDuItvvRgS 9wyA== X-Forwarded-Encrypted: i=1; AJvYcCWskONauo8XmeanO6wT+us0H5Ft8uhjcZwhBS7jSPJnPPXJQVNpR+sncs72dkHeN+eAc17qF2ySXiTBAwE=@vger.kernel.org X-Gm-Message-State: AOJu0YyioNLkeLa9KNZr6ZffdDGDYQ4UeqikVrI8HXhWaI+0WnNCzg/g 75EAqekuOmPUQBloV8tCOGe2IJ7cOZkAptnlHzHUo/vbeUKC1O3+ X-Gm-Gg: ASbGnctlwNG/0+zZnxJOZMcpVaIDEvh63YH03WoMJ+24/Ai7StI9F47MCIxxUN675wv j1LxQ+thKp19g/RQJ54j17Ht7+1Sgs8M0sdCWpYUT1O3Mz/WFAM/kmAK5q6PpyOSe6tpH2uL7AA UaoKmx2KGuGWr2nZL32C5E7u7svkShujEKVBsUK1D42y5a5ScoOgki/FOOjCquZNNyMtPICdGPd /4HNEpZ1SBZUG1m6tu8zz/CJcI5T3OYareyzyxsI+1Ik/5XChkw7vZLMFyqz8ULdGd69ra1qjBG RecbczW0a/rxPEEGctj4NYYuEvHoaUgMQyhYE5Xp0s+u X-Google-Smtp-Source: AGHT+IEC9VkxZ2lAYUjC/Wj2JcXi3P3B+60UymRWG0A/oc0tTiBdLqPC0fRWUtAc90hdES/NQO4ZWw== X-Received: by 2002:a05:6000:228a:b0:39c:266c:421 with SMTP id ffacd0b85a97d-39cadc70f65mr9760811f8f.0.1744013684940; Mon, 07 Apr 2025 01:14:44 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:44 -0700 (PDT) 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 v4 10/16] drm/vkms: Allow to configure multiple connectors via configfs Date: Mon, 7 Apr 2025 10:14:19 +0200 Message-ID: <20250407081425.6420-11-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 From: Louis Chauvet Create a default subgroup at /config/vkms/connectors to allow to create as many connectors as required. Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 87 ++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 650dbfa76f59..744e2355db23 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -74,6 +74,7 @@ By default, the instance is disabled:: And directories are created for each configurable item of the display 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 @@ -103,6 +104,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 @@ -127,6 +132,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 7de601e39d2b..692e1b708012 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -19,6 +19,7 @@ static bool is_configfs_registered; * @planes_group: Default subgroup of @group at "/config/vkms/planes" * @crtcs_group: Default subgroup of @group at "/config/vkms/crtcs" * @encoders_group: Default subgroup of @group at "/config/vkms/encoders" + * @connectors_group: Default subgroup of @group at "/config/vkms/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 @@ -29,6 +30,7 @@ struct vkms_configfs_device { struct config_group planes_group; struct config_group crtcs_group; struct config_group encoders_group; + struct config_group connectors_group; =20 struct mutex lock; struct vkms_config *config; @@ -81,6 +83,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) @@ -106,6 +122,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; @@ -485,6 +505,69 @@ 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; + + scoped_guard(mutex, lock) { + vkms_config_destroy_connector(connector->config); + kfree(connector); + } +} + +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; + + dev =3D child_group_to_vkms_configfs_device(group); + + scoped_guard(mutex, &dev->lock) { + if (dev->enabled) + return ERR_PTR(-EBUSY); + + connector =3D kzalloc(sizeof(*connector), GFP_KERNEL); + if (!connector) + return ERR_PTR(-ENOMEM); + + connector->dev =3D dev; + + connector->config =3D vkms_config_create_connector(dev->config); + if (IS_ERR(connector->config)) { + kfree(connector); + return ERR_CAST(connector->config); + } + + config_group_init_type_name(&connector->group, name, + &connector_item_type); + } + + return &connector->group; +} + +static struct configfs_group_operations connectors_group_operations =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; @@ -592,6 +675,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 Sun Feb 8 02:55:42 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (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 CA7CA22ACF2 for ; Mon, 7 Apr 2025 08:14:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013689; cv=none; b=YJMDPcv1jhtInv2oG+IjMSmhBiLMka23tr1/bCF13BdDMD9xIoFF4xhd9OTjTjLwujpFj8QyF7E4X0NiZZVYmSaoNavJj4n9okHNmHsQCOAjaNwp5ZUubTW29xWyrwR+HEADIA8pMbwRQ4zWAQ3vsTIQoEOXEiR2tH4fGTbuALw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013689; c=relaxed/simple; bh=xlyc9xz7v7izQS5cxRl9uo+uAbZM1fvtbJc/RpAdlRw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=gq789XcccJZ5SPkeaIyP3z56u0Q0sgpK2AaSMhKID3A01ctsOQvF2Y5J+P6m2W/uIOFr7UF9r7eNALIXZEtC6Q4vjSUX/Lc2kiQXnitT/q7HVTHLVzgl7ovkKBgPH99PCtvN/pXxg7M10rKQG6v5AV0uJyuEbQ87THBOzADSG58= 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=dp2/uag0; arc=none smtp.client-ip=209.85.128.42 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="dp2/uag0" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-43d0c18e84eso20275975e9.3 for ; Mon, 07 Apr 2025 01:14:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013686; x=1744618486; 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=30g7j8THiH5G3j4prRnrzSzWMrdBeS/8zYzHDTqKqNo=; b=dp2/uag05dwXjnUkBMcDm9t0czReVYgX3pgaFpfrXlSACT2vQ62+FKIE2pL9kkoXDt ZtMADav5ispXJQb77KfYnODkgBtiCVfq3zinZvnle1uQvN2CyM0662LO+zou1FDOaaNH aqJ6+K2YuYMZFbh5jSDg5i3pBsclXDN9Kwe7qyxpNSmvD/IqGSUu8h8EvdE3k99QqI5H lIeZ3yKE3UgyddfFkPKLxscVBGk5jtA9F2aJLz4gIjMV3kdU3XrxGgA+2O4Kixp+XHJB rmwBkUpLZvJwaOMTY5BlSbI7LdQjuA74ffZwDYJ4wsCE9lsoO3Uf8VrP9hcEZa1NqPbA 3DIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013686; x=1744618486; 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=30g7j8THiH5G3j4prRnrzSzWMrdBeS/8zYzHDTqKqNo=; b=dKztWTbWxCWuBQpAmbBesy/s1bm6WE5Dx+hXIfwcW38cEKoVR/x4Sy/Ck6ikEZP8+7 2TQOBurkPN3SG27oIsRd2NOY5sWU73C6P9L5hovsLrZf8x3Te+NcSHEUO2wXEQZZYOXg +W3qOTCkfxz8+MKtJXvIjyUt1jYuuOEIRn6RXHp0lEvECOSLVyoC4qhCQ/n1SM4oePeP zQwf1SxK1dqerxCRnb3DScDMQlEZYIBExHtSde1TpvaTWgV9hnHoM62aygML36pSznvC Zn2kyS0mPYBXdXl0MXhAjkYuHNBqteUu8Z8Jd5VbtZmF2hLSVIkU/730uEgPyVJgQ1Mu pTZQ== X-Forwarded-Encrypted: i=1; AJvYcCW0g9xyrJK6XFsOXkSZxotVhw1JeulEF1X3o5jr7vXpBsJKPkyrJoU1zcOar14ikTYN3roR9rGuGuxoHPU=@vger.kernel.org X-Gm-Message-State: AOJu0YwTngXRwJMwDsZ1im2uRuPx6+yt13jHr8ukhHLszeh96hLG6XAa odTiZzzA/z1FirpAnqimuqEVRD2SLwYbg7BlkWMPWy51ISReUotW X-Gm-Gg: ASbGnctuZTB6xuLB5sOXCIQe39DpaESnu3t+OrP3CjPDGDz3HA4hqxzgHKgJbDHYaIA 8AbLF12yvVDLO46SxpaCSrELb6JkLruWkv7wLTivuaelJBXunyaaflGUOHWjnp8BMVOSxZ5k1N0 VLkqng7vWcTQlpM+1GMRLZzUeAoanAGOrM3I8OnsmMzyZ2p5wyOUzbj564Mz+noWTnXWP8nwDdG TzXWk3nQHgSSQ1rRTyoGiW3w4q11Laj59lfAmn/F0qGpXrzG2t5/RY67k8J22RH5UTIT+7BtauE kJbq47bMY4ezY+iMCWXqRW3wjw+jyBvucnT/BcTITEetZNzWvqTQ1q0= X-Google-Smtp-Source: AGHT+IHfD6WX+Bf3OS6nFCMzxsgLn+PXcybie2ZXiokzoVzxIvqAtscNt4JuusKeP7/Vs5fEVsEjNw== X-Received: by 2002:a05:6000:2907:b0:39c:1404:42df with SMTP id ffacd0b85a97d-39d0de3a383mr9421132f8f.30.1744013685893; Mon, 07 Apr 2025 01:14:45 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:45 -0700 (PDT) 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 v4 11/16] drm/vkms: Allow to attach connectors and encoders via configfs Date: Mon, 7 Apr 2025 10:14:20 +0200 Message-ID: <20250407081425.6420-12-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 From: Louis Chauvet Create a default subgroup at /config/vkms/connectors/connector/possible_encoders that will contain symbolic links to the possible encoders for the connector. Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Louis Chauvet --- Documentation/gpu/vkms.rst | 2 + drivers/gpu/drm/vkms/vkms_configfs.c | 62 ++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 744e2355db23..74126d2e32e4 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -112,6 +112,7 @@ To finish the configuration, link the different 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 @@ -129,6 +130,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 692e1b708012..8e90acbebd6a 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -88,11 +88,14 @@ struct vkms_configfs_encoder { * * @group: Top level configuration group that represents a connector. * Initialized when a new directory is created under "/config/vkms/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; }; @@ -126,6 +129,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; @@ -528,6 +535,55 @@ 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); + + scoped_guard(mutex, &connector->dev->lock) { + if (connector->dev->enabled) + return -EBUSY; + + ret =3D vkms_config_connector_attach_encoder(connector->config, + encoder->config); + } + + return ret; +} + +static void connector_possible_encoders_drop_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_connector *connector; + struct vkms_configfs_encoder *encoder; + + connector =3D connector_possible_encoders_item_to_vkms_configfs_connector= (src); + encoder =3D encoder_item_to_vkms_configfs_encoder(target); + + scoped_guard(mutex, &connector->dev->lock) { + vkms_config_connector_detach_encoder(connector->config, + encoder->config); + } +} + +static struct configfs_item_operations connector_possible_encoders_item_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) { @@ -554,6 +610,12 @@ static struct config_group *make_connector_group(struc= t config_group *group, =20 config_group_init_type_name(&connector->group, name, &connector_item_type); + + config_group_init_type_name(&connector->possible_encoders_group, + "possible_encoders", + &connector_possible_encoders_group_type); + configfs_add_default_group(&connector->possible_encoders_group, + &connector->group); } =20 return &connector->group; --=20 2.48.1 From nobody Sun Feb 8 02:55:42 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (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 2DF5722AE4E for ; Mon, 7 Apr 2025 08:14:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013690; cv=none; b=u7ETRmsM6687V8PQoz6QyBZ2D+dogTUbQsoCg50U7ZbcqkD97e6Jw2GuAjS7qhc487Ny3rh3I/+J21qcUD2UFk96ZX5HwlzRYMAEkCAEtPOmDErdFdRomgd5wScLmCyvTTGPHws374EN4DRinoxdVAtIjT/4v7hLl5zm+zcj4Rg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013690; c=relaxed/simple; bh=ruD0UQijRSTbAbiYbiy92bcwQmGm+acqNJsn/Xwt7PA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=j4T4E9ZjaDq5HQp24b08syhyN0QFJkfq9VMcj5jvkBzwlrVpdL3NZbzfsRF3Wd6lUnvi8Eg9cu7WCplM+RtdnmwFXHLJeDlakc+BVbMvmn32JGInjXUP0PcWCaOzfMiN2Bk9zvdl77a9or6maQrcA1aBs+qH+K25uqJBlOBk26Q= 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=DqHn6g9x; arc=none smtp.client-ip=209.85.128.43 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="DqHn6g9x" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4394a823036so36791315e9.0 for ; Mon, 07 Apr 2025 01:14:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013687; x=1744618487; 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=zIdjBnojDe9JlRJkQtXkq6PiLeEhZjPQxZt/O+Cfesg=; b=DqHn6g9x2yS3yXvW40AQcRv8mI9GP1XVs/URBpQ3J4tFx8FKAvdQI9dJEi0THQP+re r/YhpzS52SmwxhjGQF+PHbo+d9XR3twooyuaIXGV6J3Y+j2NWWFVRcz0Jpzhm5I69H/o sl5rB5vWvdt8JvQEMZLSr1h6XmP6ykXzscrrxr56S4IE580j+whzYRQpOeYX149i796X 41xYD+eZvowMiYcqUgEVCrEoWTJU9FjA49ytZdTIjwqVIJN7aqBa+JC26frsFiQmk7OJ sijfrDd/TKA3FDo5ISahJQe+ncEPKPWMuAsbtVikBqn8OcvJqyB9SKgd1QvKUfgKsebv Trow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013687; x=1744618487; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zIdjBnojDe9JlRJkQtXkq6PiLeEhZjPQxZt/O+Cfesg=; b=Cy0RsMxZ9U1eJOFDPVMp4Zt6CeEJL+NnqMyY+QWd/ZK18px5Fv9c0N3vOIyDfGN+ec QlKfEPK0W38tJlh/Gc4T5AtrZ+wGg5LQEYedU1pRspGmQqg+0W39YUQqZov5GytjvdRK 8osgmPaoWI73qUMmPPiAsuXoSbLBiCoUKTfxgtGyJQj5BoJFH4gwca7xp+AwsdSirPL5 Wgm9MYTsC4mG6MN79qId2TIYO04Nb6XAXr/150YtYkpkiu1eZVud5mr5/r4t6CvyPLcq mTP4iNbzHTCqQGg7J94UzJKU7zX2duhmQxA2qLv3XMSKl4o2+GUOfsCj+cTmICZqboAv Lukg== X-Forwarded-Encrypted: i=1; AJvYcCVP4/pf8QAn/MdkEtaTD0uWOZUkSp9kyKEIjptLiShknXNx8sPHwwwDUcInD4kEu2VOAOLBIhBeooAjI+0=@vger.kernel.org X-Gm-Message-State: AOJu0Yzcsk9hd3bugNzUF7jQlbWLRW9EMkdhlR4Z9nUtFQWlyrkw7xmW uESqt5FPl5wSnZMnF3iZiv0EAEUIqQWj368AeQ4Ysz8yM+v9zVB2 X-Gm-Gg: ASbGncukrO/0t7WXsn67cu2F6Cl4115vjZ2pLYIP8rMUweVlHxHG5NaF9wh5sBa+ueg GmN8rQjrEfJ3wr/qHdQlh5jpwG43OqVun/4LIQaH8vZxH4um/eWiC7q06AO/6GGk4vxRZECXmyk VjbBziRl7QsPLtgcyKEDOCakZW1qdBmFUmDzOC9jwqt0/mdHp2NCbVkJfYuSE+OWsI4Abp9QA7q 665aodwMte1WrVepLRWPPwI4W9+C5hb+eHiuR4PyD6UMwOJ1Obdu4LfkcYc2VF3vVS8Poaaq4Rc P6pTjMJTvx9ZYmPVwrz8whgZ2OGj97woVM2XZhtCJneZ X-Google-Smtp-Source: AGHT+IFEC5GG2+hUc2x3gBJXtIb381aGws3rfz4/kdhZc+Tli1KoK5wHEcldern7+kcj8ZfKsinmig== X-Received: by 2002:a05:600c:3d0c:b0:43b:c284:5bc2 with SMTP id 5b1f17b1804b1-43ee047ca70mr75672455e9.0.1744013687392; Mon, 07 Apr 2025 01:14:47 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:46 -0700 (PDT) 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 v4 12/16] drm/vkms: Allow to configure the default device creation Date: Mon, 7 Apr 2025 10:14:21 +0200 Message-ID: <20250407081425.6420-13-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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. Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- 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 Sun Feb 8 02:55:42 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 017B822B594 for ; Mon, 7 Apr 2025 08:14:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013691; cv=none; b=Ty0CjTVgUaxQg8LB5loPaxOEbdsrjC9buVTJ5xilZbbnwWyBvj8OG48OZdL+f7PMlrwRbJXYDpjWynmlsz8SDtVjRcyX6+FGRsqqMpdL6ar8iRpmCZtNnqoun3/3P+ejj2O/fKwcBgSrHk/ho2lnpjVpM0GDrZMHI3DOtZLj4Bo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013691; c=relaxed/simple; bh=Vi+uu/h5Zd8rK2aatFelcFPD2hYQTWMEmZWHarVSvJU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=eUnQrXSv4A4XVQYrOIl95OlcR4wk9AfdVI40bdYuIxT0Kwat1xYTHC1BIgIWKq81zhgezB46iWkrHI8fWc1eTCsQpXQ7t30qvXnc5Q8o4J8lsFgQ4l462ldNdojdRBkrtrVqASzBCPrdt4kMpmFaXhSXAYKT2X6tpTlM22Y7vyw= 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=anNqxzCV; arc=none smtp.client-ip=209.85.128.46 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="anNqxzCV" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-43ede096d73so13157295e9.2 for ; Mon, 07 Apr 2025 01:14:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013688; x=1744618488; 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=g2I+AKiUaGilJvwS/f5X1LlsvDutZk3cs9KHKo4vYS0=; b=anNqxzCVDij5BCXuvXsXYTi7KFbtszxsWLsEfKCvFsSkrL0EGZ3jnNBE3BQ+OGA4V3 qRQlMvfwin5befSzQLUc20jI9yQnH4KTUWs+88qfYjtb0CeOYvzsUD3HTtB+YTIK98Zg AJFcEBE/0yr+Fz3GXUdoZ9m7pWtgsDWc4ynnDINiyee0YXMV4i9PU0k8rHt70lIvImd8 wG2LpXauP1coA9YukSJN6k+rnnuxA7BXdP4ISoc52hrc15bpgp9jlmazqQFIso+DtaEN DYuldACXlOcTffxUKazKqnZSQ6TSpIgY99PWMbNbkQrUhV7MjVmhLNTqfZQJ5HEkhQnr /Tew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013688; x=1744618488; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g2I+AKiUaGilJvwS/f5X1LlsvDutZk3cs9KHKo4vYS0=; b=oDVAhnyM4PUhgSJo9nH346hBcbnZOau68FscSelifl1PcyiCAiO4LmGgU6Sf+yAE5L /3aTfnZj6+TEHNkCIFQJUJLQGvKal/oD19Wra6Njb7Sho+1hYf5tLu8HjQKi4HDK53yG mZyjNTOxpmitDV7vGmESIYhZmo9FsVe5AlGID/ZkD4cEbq0auhyXBvHgZUTjEWSe/RiB WHyhi6JPPuBVdMfpJoYLbSZFlKH9AIV1ruWpbyznVXZLWs4XbMprRtHTHBDgmmdDXCV/ zrwOzrLjHHLmk3pDgoam6CyE6Jch1j+Sq4ZSHQqN8Vc8IKqCSY2TKv/SwdOQe3u2tHQ+ +3Ig== X-Forwarded-Encrypted: i=1; AJvYcCUweORRDLlbh47+16Yx7enEil0/dEurVphtkC8AaTAXOK+EIcMoI2RfEQ5hU7pttFnxhK3638To5OYhmss=@vger.kernel.org X-Gm-Message-State: AOJu0Yzc2IgEuSOZe8nr1/Qszb4roYrTkSuiyWUffGteO7asQ3C3bxnt eq79xF9xtaggpXL4wHTf+OJRosFLSPHVcfCTpL6Jp+mDFmcsOma0 X-Gm-Gg: ASbGncsqksyH8FDn8QO8uVgk2auBTZhTmAZ130ZbVe0kmP9yRPbMVWpNid4l4DI4OZ0 JzPYxDdjMCPg+P7E6sHXeHPHYebZmf8n7/MUJVsM00Pfz9KMWmrbW1P2+kZzfCfOmWSZ4O8MAND 9yS9Cq+6renTO3IewrUwdUWstKdLVUl7vQUk3epZSi2mcwuUOjn4OGV8KKcAtGNi7UU/Wmc+7c1 3VAHZF7ESyuzBf+FOHAzM/Gd57SRg7ANnIG0izvyHeDNcQc33y/yVWn4WA+UqlaXaPLqkkv8cvA 0yc1xFFVd4qcsenl3OThjhIxtj7uksFis5Z+82mjBK7T X-Google-Smtp-Source: AGHT+IGbgQ//mAxkxBQPqRYYwqdydsPUaU2Ht9FH9jq4jjH4ZQzh906R4fJI7RwkRpSwroXoZXzckA== X-Received: by 2002:a5d:5f96:0:b0:390:f2f1:2a17 with SMTP id ffacd0b85a97d-39d1466229bmr10501615f8f.53.1744013688359; Mon, 07 Apr 2025 01:14:48 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:48 -0700 (PDT) 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 v4 13/16] drm/vkms: Remove completed task from the TODO list Date: Mon, 7 Apr 2025 10:14:22 +0200 Message-ID: <20250407081425.6420-14-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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. Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 74126d2e32e4..c551241fe873 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -222,21 +222,14 @@ Runtime Configuration --------------------- =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 From nobody Sun Feb 8 02:55:42 2026 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 2E64022B8AD for ; Mon, 7 Apr 2025 08:14:50 +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=1744013693; cv=none; b=XulsdM+UC6peDDuYf6jP61zZvnJftnRNKCqh5iSlz7ZeeVKn1bGXf0QNpizLCfHOADN80uBsRp97fouPSQSpyNutjmnhR/3Ay3VoLKVHTDTyheT9TCu2gt4XZ6rz1lkG0DLyxEn1u1BJ0co7fneypzs35ng7dMUpOkiFNBeA7cw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013693; c=relaxed/simple; bh=/ItqekCx0ii3dBLNjzbyU9huWDpEytIDpvuIVGMSb7A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SJwJcaTStnxxxDgcIaROaw8IKGOQ9f7HvnLp6f4u/0TEg/NJ2SGQFUfjYPCieP85+WuIZjT+R5EaXEhWFqy/VyLRwoml6cW7kBJPy/+EAHEqKccWa5Pyp/P4TYvtp9PrO1gr1ny59mFmSsUIMH4nM7pVHmNFVM1e91fIHc+Xj7s= 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=LnYkWKPD; 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="LnYkWKPD" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43cf58eea0fso20458265e9.0 for ; Mon, 07 Apr 2025 01:14:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013689; x=1744618489; 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=LnYkWKPD4DkoemeSBOAkhDewA/n2JAH5LADM00S6SmgEDEy4cP1buvaFP6z+Oas1ro TBE2F8no0c6qx7cWTDFH8yfukfhY7lZkKM4npI+8VD6G1e4Dbi5Sv8eDz6dQLC8L6uA0 EY5GqPX7mtD/4FJLCapbdrFQfDTakoW8yl+CQXORqlZTlR3AgyNOumpeWNPGVvRunAYb /rssqKtNvXk9vLylNCf9vr+gG1bCx4NK/YHxC4PKscgwmj6ia4VlIKubluYs1CPpx8vI octYEvUv4umA1yvkUrNMktkP9mRsDDYHXN01BOlF406yeR1SWwCXjZJZhcsVpPr7p0vm iJxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013689; x=1744618489; 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=lonowdhAJBnSrQu1WCEYIQAFVP6qhaX97vArK5ldzo2EFNd19ivtC/evhuVk+19E8a jKXAhC8TGHQ3UMJHcqq0aT58rE0VhN4Rz35jjB2N1xHBzuEfgFN9ci0a+cgqDZrSE9cQ VZz4jvuQnlteeVwbflmA8fI4zkbA/K+mMLi0rgrSVJ28lWPEW3DGmStDOwjpR1bCuDs8 83K1KhJ9qKsXv8JWQM+MuoIocIyE9qsZuTk5ciVTNJYtTaiUx4SONYyB2givGlkFgpxH JGw9O+pDpCoLqhvkMvs5cbrFSr9QHYONX/q6mlqch2kVy5e1/9/laS34TWNqG0umAJ3T 3FOg== X-Forwarded-Encrypted: i=1; AJvYcCWC2h1OdukI8RHkRrXUEclz+ODL7C4hWcCMbQGqeK9+xwN3m96IAuvlCk1WSGMUrPW9KHIgYb8zlbeRHkY=@vger.kernel.org X-Gm-Message-State: AOJu0YycST3+oyHG8as1KkjycLgMjaIu/3l24IqQY8K8Vs7TJPOrrAUW hWwwUri2zQFpyBnCqDNXu3dRIPYWn7vfoGXGA5dlTn4TY73pi4FA X-Gm-Gg: ASbGnct9jZDlwrR7GxMJZfo0n/djlr5QixNdFF0bpYzJkWyf00B8EUf8URCjGcFVPT9 rRrVHWUqOKjEYfHZClgjj98GfsjqQb/vhkWLWXcFUZ/SNsdar471NpJqAIwtcfnidn3XZqgfYYx GKffIhQ9Ns4Zsqy5vrox3JvnXFpW3rauwGTe7Kd1Bw/LFWBMGfJAgJleoeBv4UDK0I27VFJkVGe qGZgtNSwq286XVcqHdYKE1NJwiaK+2HbHNQXqlVQsaQXUiWDlPXEaeTFcDdL2CYrS/W4JX6iPB8 niOZ3E9XojX73WLlFrWOHA2w4czam+gLX4bHAczhEuzI X-Google-Smtp-Source: AGHT+IE6f6M1KHra/q4Is21z/AjbgrdNm1sf0V7pCHxLyOu0BmuTArVc0H+2ckarFreLsYNWXyZx+g== X-Received: by 2002:a05:600c:1c02:b0:43c:e6d1:efe7 with SMTP id 5b1f17b1804b1-43ecf9c3318mr89313545e9.26.1744013689269; Mon, 07 Apr 2025 01:14:49 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:48 -0700 (PDT) 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 v4 14/16] drm/vkms: Allow to configure connector status Date: Mon, 7 Apr 2025 10:14:23 +0200 Message-ID: <20250407081425.6420-15-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 Reviewed-by: Louis Chauvet --- 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 Sun Feb 8 02:55:42 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 1498322B8D7 for ; Mon, 7 Apr 2025 08:14:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013693; cv=none; b=UZoQgXrgwC1fUphx47IsbPuvHFkj8s3NWj+wqnAYRCK7pvKJQOHcY9xPU5Zd0FLDiFydJm7J+cFdT7RkNyxCyz3MHk7CrpqqJHOENhHgOD4nOelT4Tyn2cO6O3aRoUoDeAH9ACYHWUiY+w1dogL7Sgv0mX+nR2NhBJXNtRHwcLc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013693; c=relaxed/simple; bh=tHLRch/pNbAPUwCypXIU0Msmm9PT7vJclyYGUr0D7F8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=sw2RDxlCAuy0ZMhpswl1KqLk/MS2WRGkD77/IeuY6v6JZvN0bl/AxyZezS5rxF367dNC2ph/xSMO4isahxBT0S7iT5ER9zkwv7JJpqoa9qdf7SLxmpMyO+xIL6WwUVd9FsnYZ6BcD6Sa2R4Gz+XNXu0Xt2AUiEgRUpF6B3/TuHQ= 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=XtABukxQ; arc=none smtp.client-ip=209.85.128.48 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="XtABukxQ" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-43cf257158fso27278885e9.2 for ; Mon, 07 Apr 2025 01:14:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013690; x=1744618490; 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=PnVpWku238hbA4Nkq9IkwuoRE17xKzZpiURAgcmw2aY=; b=XtABukxQSVSpO62X+IEyHTvD0bL/T3Wl2AlLZmoOb8/NlPQ/+6FVmwSc0dFnj5XSiu GSM1eObpOm+QCjNTAlyp6ouLU4eSQK7JC3osQ49+dmEj8Q57oWb98uXJqh3Hc8n0A6wa naM1/I8RZPIQ1tYJxqE9yUwLVMjHnRlawoucYsXT4g94jlezMxN0HfmSJFLYWVaIiX3H 5jZ/KRhrR7l72bC9rxC0VyoKPVaS82a+RxhOLRP9kpg6rnZfahnC2ZX5Xu1Ad+fq/5VI tBFaB+MHSM08dDqNvB+7rr8hmQgPvOfB8tAlSPFGcigRbVT88uZvV7gMdgK90COPBJLX 8Byg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013690; x=1744618490; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PnVpWku238hbA4Nkq9IkwuoRE17xKzZpiURAgcmw2aY=; b=e6Ir0el2gAkU6Yte9G0OwMtSQga6svynOvoFR6FvJeBYHsg9678P2m7WOju4cDkqR6 0fXiGOhXfH9VkKVSZf1TfSfxEtdinpToqNJ3Xy7bJg6CLt5zK18XNTzx36GgH1JdVzYW c8tftz/46TNmYhtfjs2sveLoSF6f4CLjNcQ/yPReOjhP3QLkK/5hdBmXEXdW7kQkZcpC +tKwqgHu5kzsewqGdUJoGc7GjYNJ53Xowe8oiWVsF38F3Mijx0dUCtxVv0ZrPZvTY8o+ 3TAXxtMlIISHmq2lEZPi6pHTb+guiZktJxTWUPXdvvhF3txCZG0oyqR6G/pvn9J9wRMs D9/Q== X-Forwarded-Encrypted: i=1; AJvYcCXHwibc3ZhQrpRUPfb+15bj+spJC9zSW6v+4PYgDakHASAvbXfvkFqM8Y2etHMOEwvZsFn+DKtwfuSflsk=@vger.kernel.org X-Gm-Message-State: AOJu0Yxv5JZ25+O/RAikui/YeSrmKxXm7acWTOvTX1YeyntXX6JpNfhH sIRByXx6iilrjWfeDF0ahOwqOVi76rlG2FlbWj96h4AEWcVPqTse X-Gm-Gg: ASbGnct8N7ozEKvJGF/MptpJQcGOPdzssvMNOejkiiwqir7zYFj7nAgJw1X8aXwb5xi 0MkZuQZ41XitT8VK/zCbZJeImrxlvHz3fx96nJiZ9Gon7GBLXNPt/EAGUd3ipfvA5pilNu7rPJ3 /A3mD4qESpfsFV8TF+6BdqN24VTiMDpYuEv/S+eMxDSf1J5jvyy8VYeBGTEqM7nGeIQ1dIpqi+n dNlAQT048mEmSEpmD/FvDdOzDLm/oAvCzDeGyVw+rKu78JpAzbDI+tvvS2EK8ckDqHAEQ0util/ 5n/gYyohC+J8+K8qFBbxFi3jaFdt2mrjE0f68jSg7P6bhcilKJqzQzA= X-Google-Smtp-Source: AGHT+IHhKBmlY7br9pm8f5WIAoCtogRB7yIZ1AoNbNEUAWye6mIWcwnEpvMXHGsAgQU+b+HjhSrsiw== X-Received: by 2002:a05:6000:1847:b0:38d:de45:bf98 with SMTP id ffacd0b85a97d-39cb3575870mr8506590f8f.8.1744013690345; Mon, 07 Apr 2025 01:14:50 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:49 -0700 (PDT) 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 v4 15/16] drm/vkms: Allow to update the connector status Date: Mon, 7 Apr 2025 10:14:24 +0200 Message-ID: <20250407081425.6420-16-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 Reviewed-by: Louis Chauvet --- drivers/gpu/drm/vkms/vkms_connector.c | 28 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_connector.h | 3 +++ 2 files changed, 31 insertions(+) diff --git a/drivers/gpu/drm/vkms/vkms_connector.c b/drivers/gpu/drm/vkms/v= kms_connector.c index 48b10cba322a..89fa8d9d739b 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -5,9 +5,37 @@ #include #include =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 drm_device *dev =3D connector->dev; + struct vkms_device *vkmsdev =3D drm_device_to_vkms_device(dev); + struct vkms_connector *vkms_connector; + enum drm_connector_status status; + struct vkms_config_connector *connector_cfg; + + vkms_connector =3D drm_connector_to_vkms_connector(connector); + + /* + * The connector configuration might not exist if its configfs directory + * was deleted. Therefore, use the configuration if present or keep the + * current status if we can not access it anymore. + */ + status =3D connector->status; + + vkms_config_for_each_connector(vkmsdev->config, connector_cfg) { + if (connector_cfg->connector =3D=3D vkms_connector) + status =3D vkms_config_connector_get_status(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, diff --git a/drivers/gpu/drm/vkms/vkms_connector.h b/drivers/gpu/drm/vkms/v= kms_connector.h index c9149c1b7af0..90f835f70b3b 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.h +++ b/drivers/gpu/drm/vkms/vkms_connector.h @@ -5,6 +5,9 @@ =20 #include "vkms_drv.h" =20 +#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 * --=20 2.48.1 From nobody Sun Feb 8 02:55:42 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (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 A7CDA22CBF7 for ; Mon, 7 Apr 2025 08:14:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013695; cv=none; b=uwfFKKT2iCXvGf4uC0glTdbY6Zvd/wY2hF+KOsC7Z/l8bWl46fiBDiENl8rGPCC78VdInD7VHO2RBu1LDlOmqUM2ZTKtjbE/+dE8poCqx5S/F9zJCKUDfN44WISm40JytJ/8UPW4pNZKj6jAxsxWS4QPzJG+Wx8oPXERCoaN+hY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744013695; c=relaxed/simple; bh=UaHEGZDcjpFQM+/91kkr8nzcxY1detjrCFlN+Zq5nB4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=TX68tznB/zS2rRwwUIZIPTXrLT4Zv1r+OvQSMRGK3kKqAxQVYz7Jq40xLqhsyznVHu/NVkC6scnpwu5Lcu6FJJBag7m+qbIMjhtGq5wDlbUW1I7PUX5DZBFa1RR17fDWS02gFtgn5y+RNeI/A8oJY9cjkm38KYQmVaGPrMG3IVs= 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=STAbgTLl; arc=none smtp.client-ip=209.85.128.42 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="STAbgTLl" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-43690d4605dso26303005e9.0 for ; Mon, 07 Apr 2025 01:14:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744013692; x=1744618492; 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=xK4w0zRijqvJSQy92+j3ZDq7C+G47BlmHwixThFbhJo=; b=STAbgTLlbIIrwW1hWQBewWcHOUo1+MKywO0xfWwoHPboWL9O025HBCdGmsLgakIC5S jCyBvsHOw8xb3pkjnh4VhCPVbG9uItdjnWdXLOU8M6B1gzENJxwj7O4e9Doj9la8SndE ZLxPMnZfkDoMXJTvJff7kDU9AASdQ+BQXdVEFcmqnAH2QPAtIdk6O7WFZhyLdxkOr73I CT7s+7uKkWzEvMYr2zrLgLNG+9X/jeg3NUXbIwykzdAOv8LlJhjJRQS7bNz18QvrU3dg 2AHEyNi0DFIpVUhVkC+JCytwigvBq8nOaxX1b+oGSKeEDcRCF5bjO5YPRNoH7lFG4tiS VE6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744013692; x=1744618492; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xK4w0zRijqvJSQy92+j3ZDq7C+G47BlmHwixThFbhJo=; b=UbACEvKha3XcgL7HryNPT9mOA0zXe53yIbvwjjJuAGpYrwJzviJLobdm7shUmFmxqY JaELw2B+KGa45Y32UeUihCqinPTGvE2/SUSs5GpRv7Guxaf7vQ709PS9Z6o3Z3wpJgQ2 oCO93/MYURh3Vgvx9nwEJzuL6tjIbO4Y3Bzr+5Bz7xZ1yTC8nYuYqI3Oc2Ta7RpMD3ef NB1fDk4enQm3vHFqSyfMy0bUH/R6tOyr1aok9o7Bw9SmLNMFCbdJaTa4y/AbREXodOz4 M/0Z+XXoiqSjnl1ebraAQW+8/+fodYFtHjP0Wdkc+RFLbqRz0w+w9j4iRugHbGHSULP8 R+8g== X-Forwarded-Encrypted: i=1; AJvYcCXWKPOmk9qVzC6Vjx8b96yA5y814lNi6s9qNf/Sw+SAx62rr3VnoiuNTPuAgoc/ptl+GAdzLCvBAi3E0ic=@vger.kernel.org X-Gm-Message-State: AOJu0YxDuWTIBQ6js3HBQ7Z/+aP68dKL3jDeRLUsu3bPeJ6FmnT9ZKBS mkUPG/h5+9eXLKfyGGBLLIBQIU9RPgTsY4rSg6GRItuuJCQzncYy X-Gm-Gg: ASbGncsiKSmeNrni8I04oat1OnonJ1aBrXwEtYd6Qdv/dQwQWF2OFVSdBoOpAZ6zxOI 9s6xmDBhvr6PLtcq3FOmpA0MOV54ZT3E6F/rYp1uDfXjh8+lTDBEU16CTQvWhGRDLpij8s8zltK NqJVr9tnyUcIaeB6XlyFuVr6e4DzJmxbbq7W6XF5a+Af2a1sXGHNk1kizitd+FVRMvS/la/S1PG bNWVq1BWUfyiBNQ2leZ2Rd1Nzdi7d93H9tp8Z9GcpoBGttrZT0hue4H+QoKuMyUGSDG5BvRo6nh QnLYGH6CMq82BOKNNjCEIcnhOmkjDaM2D7o4rOAwl0u0 X-Google-Smtp-Source: AGHT+IGsQmQgOtBj5506Lq6aE02Cl59kHYz8T4g9MsZc1IMQIr6Edi6OTut4/mxeXQ0ztbCMSJbOSQ== X-Received: by 2002:a05:600c:3111:b0:43c:ef13:7e5e with SMTP id 5b1f17b1804b1-43ecf9c4691mr96175985e9.26.1744013691702; Mon, 07 Apr 2025 01:14:51 -0700 (PDT) Received: from fedora.. ([94.73.34.87]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43ec16a3aefsm125473445e9.21.2025.04.07.01.14.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Apr 2025 01:14:50 -0700 (PDT) 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 v4 16/16] drm/vkms: Allow to configure connector status via configfs Date: Mon, 7 Apr 2025 10:14:25 +0200 Message-ID: <20250407081425.6420-17-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250407081425.6420-1-jose.exposito89@gmail.com> References: <20250407081425.6420-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 Reviewed-by: Louis Chauvet --- Documentation/gpu/vkms.rst | 5 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 48 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_connector.c | 7 ++++ drivers/gpu/drm/vkms/vkms_connector.h | 6 ++++ 4 files changed, 66 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index c551241fe873..7c54099b1dc6 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -108,6 +108,11 @@ Last but not least, create one or more connectors:: =20 sudo mkdir /config/vkms/my-vkms/connectors/connector0 =20 +Connectors have 1 configurable attribute: + +- status: Connection status: 1 connected, 2 disconnected, 3 unknown (same = values + as those exposed by the "status" property of a connector) + To finish the configuration, link the different pipeline items:: =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 8e90acbebd6a..07ab794e1052 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -7,6 +7,7 @@ #include "vkms_drv.h" #include "vkms_config.h" #include "vkms_configfs.h" +#include "vkms_connector.h" =20 /* To avoid registering configfs more than once or unregistering on error = */ static bool is_configfs_registered; @@ -512,6 +513,52 @@ static const struct config_item_type encoder_group_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); + + scoped_guard(mutex, &connector->dev->lock) + status =3D vkms_config_connector_get_status(connector->config); + + return sprintf(page, "%u", status); +} + +static ssize_t connector_status_store(struct config_item *item, + const char *page, size_t count) +{ + struct vkms_configfs_connector *connector; + enum drm_connector_status status; + + connector =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; + + scoped_guard(mutex, &connector->dev->lock) { + vkms_config_connector_set_status(connector->config, status); + + if (connector->dev->enabled) + vkms_trigger_connector_hotplug(connector->dev->config->dev); + } + + return (ssize_t)count; +} + +CONFIGFS_ATTR(connector_, status); + +static struct configfs_attribute *connector_item_attrs[] =3D { + &connector_attr_status, + NULL, +}; + static void connector_release(struct config_item *item) { struct vkms_configfs_connector *connector; @@ -531,6 +578,7 @@ static struct configfs_item_operations connector_item_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 89fa8d9d739b..b0a6b212d3f4 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -87,3 +87,10 @@ struct vkms_connector *vkms_connector_init(struct vkms_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 90f835f70b3b..35f2adf97e32 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.h +++ b/drivers/gpu/drm/vkms/vkms_connector.h @@ -26,4 +26,10 @@ struct vkms_connector { */ struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev); =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