From nobody Mon Dec 15 21:29:53 2025 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 51FBE288CA3 for ; Wed, 7 May 2025 13:54:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626080; cv=none; b=Epui7C1jPJV0cSw+oUzLVuQmWS3HlzvLyOwiSA3ZJ0E5AYg17BvbLQHOqCB7Ch1yJ/7+WN48tak+hhrKAjppmGEjdirhHdfR1qs5IszeF66E5yCjL0sNtyu2em575iFKdgYxLOZYn288Y9HzlYa41TWURqx6WuUJRVKKY0+J808= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626080; c=relaxed/simple; bh=3ry3WfELp6x+Ml/xiDZ3Opjz8TMA3602TsfP6XlWpJA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=GVMQr4TWZA0KKQ4wgTksxbBgVmZ3VEHo5jbtPVvQgY+UPbUFwjs/Cyd/xdpmuzDjrqv0xyz5XruluaOc6/t0zL2pVIWHClBzZnUFBJU+MIWbRJE08sLGoLX+SW9weJVw35Y4+TiAgNnEbRAUyAai5KfpsD0ajvD0KylzVv/D/RI= 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=Ufdocidr; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ufdocidr" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-441ab63a415so70044005e9.3 for ; Wed, 07 May 2025 06:54:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626076; x=1747230876; 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=8NPtwIJHLj3TQvXijdYLwA2OCGkSxKtnzx80mLMYtA0=; b=UfdocidrIhM7VaO/J3EFLoBkvulaI2GC1bYFHYZn3D3CqHkTBtBG1pxUAxBY7LJxUC IwHpaiizTtXBKV5GC+laivqXJ0cA2WdLLuA36YkYEOGnNvBFLSaWOQbm3wDFTQTEG37+ CWvBpkE6TdQmqcVjbtzMPBXQdz72zx4PXGDxTa52Vz4aWJdYh7J6FrhGpDepZsRvDs7O wEBsRXemAKkTIY+umb25QtUo7Mz9Qi1KPNjjt/V2ihsy5XZHuSGzTQ0zRQqukmWZSdOh fuOejw5TVXSKBoXpNjxUbtBB6RffO7o8V/t3Jxb+RtV3GQpzirhDrFzUkok2E5GDuN/x Q/DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626076; x=1747230876; 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=8NPtwIJHLj3TQvXijdYLwA2OCGkSxKtnzx80mLMYtA0=; b=aoSl71xrmmqPPvMViOHNMCY8j/tEXf5UnDEXioduR9PE4Yr7eDeDzBL/kTgTefJ4hm yHU07sMQVymPaa6gBa7KBQnnn+Gbd+na/gH4mVd1RBhuvomlGR8ApZYE8FrXCRSsNfKn 4/t3DKvKmIlL4V8u0Xq5Nq5ELaQNColXOw6YTgWN4nHKHLg0dH9JdRBDyqMd/2iNVj64 CBqet9FWliYZV22pO4TuB8ta2dPAruaiccpjjxBScGoWPw4eUhZZRiH7xH3rzhdMs3y0 BQoXbYyjpUt895xikYBOoxGaKd0nsQG5KW1ztJ0XKve6IndHjcBqmkL0sYuneWQeV2fM ArBA== X-Forwarded-Encrypted: i=1; AJvYcCVgM5oTgvGy8T4yjmj5pWBLtT4Yp9p+PDueDcE3T+ZCfzFOsYGeqCkXUjtn7Rm9aRLMpnDSlty3Zg39Rcc=@vger.kernel.org X-Gm-Message-State: AOJu0YzwDp9C0AANk9qaDXFJSGHkrDjRrj/h2yDIR2vOF20ZuOcqrYMS xqFgtLYSVXXZSNtXEwbEVbe/QQ3M1kpe/xyQ9Jc4dx+sDeokNVBF X-Gm-Gg: ASbGncs8gTpLQ33vEps0E9lvCXHrdEouJKU/uZd3OjPbk/foUufeLlXHjpBQfdk94wn sJ7Z0o1wubKYZy9cTTTz3AF665WQNb1LoPp9FPNc4nyly20f0dz5diR+cZBAXvQRJ18UNPM1nFF jKotK8Njb4a/4yaFkpLymCABiQFdjpQTQbjG+0aMKVA1bRVK1zifZP7Mt4wxLvd+TzG1wQOBmE6 7gFhmWyUVCnLDPLpJdF8QKHFq/YTwwW02iu73fwxfB2CdAeQTYdg+eFvKb6dnhgiTcqASNLM6o/ BnOuSd94PNGXiLiYjBMIwcT5BlbKVfo5iQSImuAnbw== X-Google-Smtp-Source: AGHT+IEfmPBJDkQT4D/MvLcBOELc+mm/2hp0Cx6VyNjVr+QGxE66AppcyN93pmqNQP3ScgoUD3Mr7w== X-Received: by 2002:a05:600c:8289:b0:441:b00d:e9d1 with SMTP id 5b1f17b1804b1-441d44bbf50mr33147135e9.2.1746626076352; Wed, 07 May 2025 06:54:36 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 01/16] drm/vkms: Expose device creation and destruction Date: Wed, 7 May 2025 15:54:16 +0200 Message-ID: <20250507135431.53907-2-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 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 7A39A289375 for ; Wed, 7 May 2025 13:54:39 +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=1746626081; cv=none; b=tBar3RXS++Pd3oqTktW1+paKq2auERWikQcZuuizbQOsFuyHTlzKeb/jBRMWFLuRE9VFOBK7mcjAVAFKMnH5xCxeaOpsv3zS1ZdpU9jehQApw1ftgglZUFh7pLmjHJEMcnlR9yEz0rC8r8QO5PIXg+7UUfTbLHBcRmpAGQ2DC6E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626081; c=relaxed/simple; bh=pBghrZTtWCX0vV6P6pbRcJTnj0Cysp2iVNlAzgzE9oQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=MfHA9ln/EQSb1Ecxf7E1N/Y4Lh4nm/QWhM6kPAKBFFuAbHAUd/y26fLyTYytkLf9cY4jPfNhG20+45Me5XdI6TZCo5Cg9Wdf2WFZhs/hoCsPoT5BgbQ9ztP8Ant8EpQERgjMWLd1pU+zOKMK4z6rbpChhr4Or6ay+bxz8uYRnK8= 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=jPwz6kHV; 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="jPwz6kHV" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-441ab63a415so70044265e9.3 for ; Wed, 07 May 2025 06:54:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626078; x=1747230878; 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=4CLDDw3iRecFGyTKD2O7T3Am46FTDBUmOiKBnmX0j90=; b=jPwz6kHVLf9h5mgv1+hOtmKten4CuWUS18/NdHXzGVP7gUB+euFyvzuTr59cHZ6Aj5 EuCJxc2bT9pEzGf9U6SvfA9f+zjAI2oM8s0qv10xNDX+MnH+v8hNOuXNDATrcus5jZdL CXw73wbNT0SU/m16CMkoFdw21GVeQs4dTKI652+K2QSRmAryCFtir76o+y8TELVUKH3q AIfjBAo6h/MRz4SNXD/tAxvb+IuCvFpfVYVevE7cIqgdflf6e2EzOVqUBiRTFZHilkh3 t1V8oMjpLZHy2P3dDlihctj6oKINIowTd4N92QQe563UDa+aynLZ8SrmOc9qmVYe9sN3 ZR8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626078; x=1747230878; 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=4CLDDw3iRecFGyTKD2O7T3Am46FTDBUmOiKBnmX0j90=; b=GGjHwA0CSHayKyg8gINtL7gNtAMHaWfIp/XemY6H4gIQAdqHG3BI03THBssCza71wQ PafB3ul+ADDWLN0ckY1RKmGbpa3xirZwfPqN+A2syxFXptcY6OTXFEdXpv9Vz2pJCsL3 Bb/fCn4AsOOKv9z2zUnyVtBfxk0rVDe+4+5vGYwfF0MslkJJkGug7bA3Bd+CByZpQ82m pbcSAbmWRzF+0ZKpmuW3NPKSGoRW6RrZqdm/I+Z0i48lS1dpz+Hkf4NFRrZrCB3RcV0r WQF/WDoZCV0/R8f9vhxdysh9RiyfKt9t6floLYBwwPLjL+1Qvg2ohxuo0TFpmiaWQ/1c 7vag== X-Forwarded-Encrypted: i=1; AJvYcCW+nnB44l+OS/wHiNBZxz2U1BT3e7MCxrv06SWQIzlN4rk59JZ6Q/4DwcTTPbiwM6ausnivyWHqrgKdZgw=@vger.kernel.org X-Gm-Message-State: AOJu0YypSxzoKvsYwZ1VzijiOwYrE993/YFt6s9Ra+uSpTK3JGgXPncH RvLLCnx5ALxFhRk0AP9hc6L4XdXeEpAPU8O1M1uxZ0tc3dGtPVSt X-Gm-Gg: ASbGncuK06drGApAnMg2Yvka1PBKk/g7IJC7HeNBiKIwLeioB9rwOQdw6zpBtbnbevq EEF4W4GBU1OuRwDAGNebQKXgA427Imy7ZH9yLl3wDH0N3t7S+x7SwjrGHF1RJGZbApUTw0bK+eh FjXoOR7JlPTuRtcJ2DspVe59od7I4RvQAVsTqOKjhXIfo1mDYXJg5Hj385JoBfyJoPaTGNwhbN0 sgt+ZRjwWXK3Q9hqxlHZL6yj4KSdXniuCROSAnCHxFr+7XtU+7sOzNreHxOT7pUArbkaq+6lVDS 8KtT53XmalFtHJU6Bq0wreXa2kuA+O3AIAvxhcd1kg== X-Google-Smtp-Source: AGHT+IEwVv3Fx75TQ5iAihOC7ukq0rscqGxtB4HeRaI3ouywLzCu+EqsghviNNr75GgBCiVQbdX+Og== X-Received: by 2002:a05:600c:3483:b0:43c:f470:7605 with SMTP id 5b1f17b1804b1-441d44c36b1mr30636505e9.12.1746626077519; Wed, 07 May 2025 06:54:37 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 02/16] drm/vkms: Add and remove VKMS instances via configfs Date: Wed, 7 May 2025 15:54:17 +0200 Message-ID: <20250507135431.53907-3-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 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 6574328936D for ; Wed, 7 May 2025 13:54: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=1746626082; cv=none; b=i4WJjvVoZPLWhX7r+NH6YNI3bOYtWYWcZhbifoxxyb4Hi7FZynGDbI4Y2Hc0JRPlmzauqAUvbEZ6Cj6Bhu0+CBh/67mhHRLFbs7lGHr5Sy2lMYPTpAi21sBlOUQ6TKDOKFA6hNnNc1lLZt56yIvxrnPuspl6xZzezhyWEpsov9g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626082; c=relaxed/simple; bh=glrCLgnBY+H43Q++O7hbiW4bABtRSgZfeZ6U3zwr6Tw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lHOYu7o/GUQnUAmt9OwdUuNHGf7NNJ0Jx92ZRY3qEpyDrI7+e4W6u1CSns61jykGmdPxsJKeYgtXrWCcVQLM2OVfMfJuCK8VBK32hC5dEIpTOHQE5UybADkqrF8vIRjuexJ70u9BjT4INxFna8cvppNqWF4Bw2iH33UvqxXRK80= 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=ZRCWLZ6a; 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="ZRCWLZ6a" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-43d07ca6a80so28915385e9.1 for ; Wed, 07 May 2025 06:54:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626079; x=1747230879; 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=2MkRDDVrUtc0KB2is6UusZZfxeTr1FdTVUC/swDQDIw=; b=ZRCWLZ6aVeYGoKr5mkkLEkbYbqwFAn8qK8VEHoxMzRqngS8Xf5lustcBY1QETZZW95 eBzYUWgM+l426vTynU0XTVolV8rsXfy73EFW/u8LCs+6Z+iXoYioGEtj0PclR03b3B/6 yZM+7yrxqNiBqoXLzc7SCE8iL/2kjnNLQl3Oyti33ndRXCnyTxb7S65WQSXwS4UBRETr 8ADpohlDSNIJFTKrhJahW/aR+BP7Jn+TNnxgqubOCryDNAn1cHGzNdJp2wAT/h8OxCCL hrY9LtuIFtz7KdJJqMsmY22k54ykWLeJil6QpFIVycpQYgapWQ8Xf/RTOnlXkwr6GnVK uSJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626079; x=1747230879; 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=2MkRDDVrUtc0KB2is6UusZZfxeTr1FdTVUC/swDQDIw=; b=V7gpybBU2BWGJGICZZQZ9WQNFaHMH57azz/ZpkPcGMPaCod+wKZRUd04m8oOll67Mo vxTom8XUXwPT8rPZB4gDn6pzKPdiCwUizFH58yga0wl93ifZjnVUMP2yCibWhTMOknWL dCOvkBVhruFqbY6JbATnHObcwLTVyv5GPcjtHNr7ck6Wn+0y1dn82Jk9V4ZUakoo5L3S wnVhwm6dC/ke4JbHXDgqw3523+t+hX0iJwjHUb/U8/jpsj3SmviT+qpTz0dtOji8GQZV Sy7pQ1q+0LHTXLP0MdmK/lUc+SWNv17kZBvG5tJpYtzmJLr2Q2axJMJgYyFECD+iq4bj +TYw== X-Forwarded-Encrypted: i=1; AJvYcCWNvx1KBIwYxQooLPRRg/6tDlSxPLM7w/5wiLJyAyAxL3e16nqWlku/2610D4qRWyp7ShT8BsfTsV9taSs=@vger.kernel.org X-Gm-Message-State: AOJu0YyMd3q/cS/dur2me92lNa6EPFwLwxPSdJj9tyTfcrm0MxBI9JuQ rzoRwoU2m5s2W+hG7y8aE788D+El3rWpNEaROc2hsi7gcUMEMYIE X-Gm-Gg: ASbGnctjPdtLRI2pCXepuxqq/W7M4qksewuX+A4Si/9YvnddapnaParhdPIAxTSnmjE BtmoV/QxPRWCbiyACGCTdK4OpDQuY3FpNruCShiCvj+8aY5LgNHKtJn7nya1sRAxmiS53MddDVk SVpF/oecHJTvvdXLhLuZlQBx8/D6hvO19kicls5yzZqo5Jc/A5NVt8wg4Sv9Z8/zBkPjruFC9/J G0lub8aL70qtgpVpL1iDpW/FW2ZYx++YKJgmBNDZZi4Zl9Gn6pY4hwX+MujLUw0P0NTbj5ISNLX uQ4PuhWjbRsjPef7SbVL5Z3DF9YYOqHQ7G39TaaSgA== X-Google-Smtp-Source: AGHT+IEX+qrYo9ITH8mXMYtldqCBqVZL/Ke5qyt7rws1ge4wMJ5oq1GeQ0TjMBONGIsGpHvOqOSlpQ== X-Received: by 2002:a05:600c:4eca:b0:43d:563:6fef with SMTP id 5b1f17b1804b1-441d44dcd83mr24889185e9.21.1746626078427; Wed, 07 May 2025 06:54:38 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 03/16] drm/vkms: Allow to configure multiple planes via configfs Date: Wed, 7 May 2025 15:54:18 +0200 Message-ID: <20250507135431.53907-4-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9FE83290D80 for ; Wed, 7 May 2025 13:54:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626083; cv=none; b=Axst6CRJPjY2bXbGAYtyonLmiylVUkVlVJ9FjxJNU18YPdPjKpYp/xpfk4wjxLPPYLOYvVqMPFSLRScXKlgeXyOD12fcX+pyZxbGoYGXO37jCDnko54OjkPVK48nu+VHxO4ZJ12lbVyme8aLRsrWD49FpCoiMiMkPT3J7E/uhEs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626083; c=relaxed/simple; bh=dqfyGBkgVcKt2KJMbjQNkQOr+DyqZSfUQL2BBua9awA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SCgeGrb28Hr3les2Jja8cUtvGxnpZhNXcgzNITnoxJzGDibAmY/hvWwhuzp1EMvvheHfFqNwAac/JMQU/eB4rJ39H15fTN5oiFUeQH/NFXHLZY2nK1iQBtYmjiZCpipMgZqWrBHM1lTonEeComXvZxZrbKpvZ4lOFc5nLxO3fS8= 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=j16QeABr; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="j16QeABr" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-441d1ed827cso12690885e9.1 for ; Wed, 07 May 2025 06:54:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626080; x=1747230880; 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=revvLaJxQIsk5Gmv9SK/V5e8fpLQQcfcA31+6NgbB0U=; b=j16QeABrPUxRB8qxXd8sk+BBl9TLlJxVMTb82lVDWPeBmwTUkq2IxbrKo4uzpM5VSt QZD6KqjpHgHKsnuic+OisxgSgSt0nPgGrKJfMp9I84bLkjc2seii7+kkKKADjKYgB1aJ jm07iHR9CjAnCHGztDsq++h5Y3SpENTJuZsZTYRuZ6rk7UQ/KgNGVZXLYIkqSm4h/6UA LKkTiyVyQfYNqhzkIP0S5+gu16p5TAbkP4Xb1skaNv6ED/T8+zfBM6BM7PZoSEhEtIVd EY+OpytxjbJlqFU4lipepVfI21S/V7ki8IpY4mduijblYDlJyJKvE4GD69BVZZxD3QvJ UEyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626080; x=1747230880; 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=revvLaJxQIsk5Gmv9SK/V5e8fpLQQcfcA31+6NgbB0U=; b=JPUONfEB3gSIc/me6CXXfp7X+yMhXj2JEsd65IZ8o6FcAV5ZyAzS4wkMGoW1JMHzVn e7PXI+5MMTbBFflLv2PvaYZbV2x06D2CLtvUID5C12wonEPNE7ba7mjpUVtMaSy8/aag L7uWMalI2T8Yrh3EJTSV487tih+/Mu4p23v0qbMGfY/CQYt4cIjzfp09uKZrQU4YnUri OvKO2ixmycVzmi7LIJMKN4ksDPkGER8z1HI80v5kV0mJpcJKgRw2HEApuzbETWyOu3Sr LhPu08MvxGqIcx1TcKCH0D7R/kFYfT23WfObuvOmNArB9PERH71xP5L8HP4kldOTaR8s uqvQ== X-Forwarded-Encrypted: i=1; AJvYcCVIUq1gAohqu4o7tDJ+mee5NaG+jbHieXOYNfsN5okvWglfqV3YMWCChVRg6MPBo6nXLc8tmqueojUgH28=@vger.kernel.org X-Gm-Message-State: AOJu0YwJ+i9WfaeaLRRbhTXGUOKN7YuGcWgG0o8eZi1InHv5yWULZzvW K9r63lEYCs1sXCrZrQMNSQb2BtWqHBK0/EJO+yA4zHs/RX/jIu4M X-Gm-Gg: ASbGncsOHiziU9mrLSsYrUhcYOBkQDKJlioQRG0uTi9rrnsQSOkUSVgJfTJOcwk5v4K OcaI10F7ZKA2zDauDYyS0N5wDO7eYxalwfC7OsPpCaGEjLoV1ko17B6+7VziJhUvN20VmJIu3Or 0N395KDz0XIDkhi5TKoSnR0kA/+KBFCG7pIrNbPSbtroydXtPdnWQ+HiGJ0wHv4ALrFke/+H1Ua N/oltCC9nWfnpj1KBw7p/bu4tWCxtsPNnZtJYgcjxsTIYiQsXI54t2JIg99ba7Yq7QT7ym+zutx ac8tZdnKHd217TQI5lD7jgEtKEqaPHinGpcD1XgVZ2fQjJ70688f X-Google-Smtp-Source: AGHT+IFM2cUAeZfIFBOSxl3VH6utrOqI2LAEVzXdvefWHLgUAnUSzvYO0BzOjfZP721jAF09vl6/OQ== X-Received: by 2002:a05:600c:3845:b0:43c:fa52:7d2d with SMTP id 5b1f17b1804b1-441d44ddba7mr29173265e9.20.1746626079620; Wed, 07 May 2025 06:54:39 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 04/16] drm/vkms: Allow to configure the plane type via configfs Date: Wed, 7 May 2025 15:54:19 +0200 Message-ID: <20250507135431.53907-5-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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 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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6303D290D93 for ; Wed, 7 May 2025 13:54:42 +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=1746626084; cv=none; b=hYA1xMYgcJvmio3vthsterkFeu3Pt8bcqT2/X4lBcpyBvkUWeS07wOHKZ8wy1cdxLx9XDrsbGNf0XY04Ci0IohhkHi/V1rpc7sYS8HbhG0GP7Gd5YbftEtPo7SAkBj6Uq69lO2pQ53lG0ZAaE++Dzy0ZV+KZ2WjQCVDIrCH3NP0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626084; c=relaxed/simple; bh=9gwUJ3Bx23AfGUE8y7+UdN9N90xvwVJeCvLsw52W0bk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=iC5uA0PDr3GFuD47VwJfIB9JHvP2U2ghhJ+LOHMrmk0j0nqEQNgTtzX/JlL1DFM0ZVAo7qXCbmivq0fj46ZTujG1+zCY4Jg2VpxdTtnjUEsyaiWGGxFsHrIRXNmlSdjGHBTfXg+LmsVFfgfNUFRkZ2exyPzMdkkCTVlhiR0z4KE= 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=YnChswVB; 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="YnChswVB" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-43ea40a6e98so59173045e9.1 for ; Wed, 07 May 2025 06:54:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626080; x=1747230880; 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=befvdevFeXc25ATqM3Piha0M+YRSypaSrPTIWix3LrA=; b=YnChswVB5ImgNHpBvDI4b2cPQykBujar5SkobXPjTixHmhs2MH7RyspJX2LxvAFcRp TurEiBMBRyOmDbj3Dl9/LzfmKH9DVHaTA/rlCXtVXYC+Q+WrU8vfjS5F33T7WjZOCTsP L1m3wdTDiKFG8dBwy+Nbv1Ktj+fvvnTAf5wdSNElDGknc7Ihj7SBu8sURP7IoEW/wTPr bQoAiky26sPI7pfymma7rkIQZAgjYQkMSmR0VDk/Y9RYEox7vbzGnqWg/ULg6uHQqLrX hThao4+Einh+FtJjx/ZGD2bYfN0eRg/kY6xXnIaK7Ej+fp/nbxa27Ke1ANCUnw9pUlSX esng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626080; x=1747230880; 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=befvdevFeXc25ATqM3Piha0M+YRSypaSrPTIWix3LrA=; b=VE1MoMD9VQmanA1hUnN1IV6eP4zi6eVcROD/mXZRboo0FFai5HRwMjtFXYbZfFbAsH U8AHMp4vwFDaRWrBMyfOtkL7TmXu1IW6L2sVzVcEQ0NrFhoSF8xsWe4HPWFOO3b5Px3V XdCKQu2R12zlNz1wvFIHtL3AAfzoKqhMgHDmH4S6OgzvScpQm+S6rinxJq6fEPAn+2hB kpta4wz6I1q3ikMVj+P1sDJViVdLZ2r7RYOL2g0oNmmflR1Ax8Rw9wJTn1FZaXeQRQbX DpUVcKo3OAlH+4t3ahVWuX4Zs96V7cawAaeBsO4zPnPjnQOYVOaCTQfjm1tzNAYk4tlS x6Vw== X-Forwarded-Encrypted: i=1; AJvYcCV1lNo2cqYJJBUtnbbg3qVZJlQ1CuigfoZAMfEXbyMiKCGOF6ujcZTb89D1lpIQsi+FaWCS8uBjrqkObk8=@vger.kernel.org X-Gm-Message-State: AOJu0Yx2/6dx4tOa9ck2Q7Oq7StfUFU6B6Xt59hrMhbSMPBuzL/J+lRK Gkz+5Tf0j2oFtutVj9+Rkvt2+m0wY5c6CKyHO54t+Eg1x112P/cv X-Gm-Gg: ASbGnctzOl0xctIFww1A2pqMjdwUtJqLYxtSssWh0AygRMsAtpKLCV1b/+q0tGgSynk KpkifHnfeW2Tg//cOYRP36eAnpgF13XIKTVAaz1Qa1zu5D3xgnyXyQDuu3aNuR6r+Ty+I7TpLpl tHU1L0uP4CRviLN2M7YnvuYeAUFWwzaUsWNFJ6VFoUwbAbC5gcDSDKu9ckbzlLZtuk/Hvf4j+Om jwMzGO3Z9XnLrOk4BGr2UHeGlP5K1WA/nVpDbrV7RgkZEn4QTB1KBU5stoD03Nq/A/cVLt8wkEp nGtduOl9EUkMc4DuPMg8tvQau+o3fqVYp7QIS2wrrw== X-Google-Smtp-Source: AGHT+IF0QkzntyMYLHNhT1rlotJ3+1XcNWnNPYQahrQz8tjBzlda7oH8L5x4VP+uyzZfhzSskB7Q9w== X-Received: by 2002:a05:600c:4eca:b0:441:a715:664a with SMTP id 5b1f17b1804b1-441d44dd0c6mr22329055e9.20.1746626080448; Wed, 07 May 2025 06:54:40 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 05/16] drm/vkms: Allow to configure multiple CRTCs via configfs Date: Wed, 7 May 2025 15:54:20 +0200 Message-ID: <20250507135431.53907-6-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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. 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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 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 662DC290DA7 for ; Wed, 7 May 2025 13:54:43 +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=1746626085; cv=none; b=mmMGmj3PWqHe9Tpr95XdM/TPj4ZRSCPErURvGZtuG55RDVzcyBjrKyCrYphvuxar2zsdvJBVq0qcZKUIR8/3nc6VKf1MsnZo/QSEqcHopLRHLumHzfC2NHCIvUuzOzd6GGpV6Fp9zXB2+elmSUUmd5QLJDjX8eWu4IAjltQBfvw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626085; c=relaxed/simple; bh=J2bONp6XxRVDkBM39GFGPezE6fwTOnMDHx5wVcfalGo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=exXSWfVHnBWYstxoaRY3w8HIMIJSjiKD17N1FirLKm1rt89La4ZRgHhdX2YaTeiAi/vlweWGMrleqVONqyGARDc3XKkromS3ygg7wVx1kq0A9Dqg2/v4+EIPJQcRQagNQy0Ow9WHd9yRTOSUiN2wcLJgvFKHj4EvjeHwMzdYRVs= 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=DR//+psw; 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="DR//+psw" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-43cf628cb14so7693605e9.1 for ; Wed, 07 May 2025 06:54:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626082; x=1747230882; 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=TZVbUU6uiGO6s2LXLXBEvhGBzCUPUBEIPxhrrxcfbfE=; b=DR//+pswk6rugjwPxlTTIZgBKYqoLzHbfH9QHYxjbMs5wWNQZHnMTWIDTkB0P/a2Wa 51hF4wU+zQSADKoFlfzyLTVmEa99WOTbyU84fpnpdKqYl5taN2KDxlhN9PxdCPolh6fA RwC08V0wYHQuDamCUITOJtj+/1OSTWpVqu/fZBLUXxw4RRltfaLmv9aretVMxWO8NFO5 kv/uQIzSuvSjoSCycClkZOtKZh4eNYvNQpFqTD+FK4sc760bSc+SL66+fRLXb6R2FiTj QnfcI/9qxv3ZUsj75oLbKI2naynUsOTxsDp/Wrq/qm7tV4jk1TMK+zXuE9JdSTdUDxFn p8LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626082; x=1747230882; 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=TZVbUU6uiGO6s2LXLXBEvhGBzCUPUBEIPxhrrxcfbfE=; b=azAjlIUPrG+J960GYPixoPh7GWpZw3gkxEkEmWsjlTGeyIWG/S0/QD5xuJ7Cljn0h8 ESYK5BZxwXqGXVQIbEAn4a1wds8avSjj9nX6gCOJQjw4SNG3+dJCJJEBzlETB/7Xl2kb ObfanbYocajcgYdTCoeebpxSLZVgVyi3gSZPfkVzBnPZ1Q4+Vg4JXw/7ns7mgqFva5WA UUvcVY/86plzhiPgAcJIxMtCEWRzhrAwscQwSHrQ/amF3+o1/kJuB69eJe6M0vyhsVOz eddfZ2uy+WMQHXjjVg53u/py1C4WCh3bJzm/hYa2K5ljCx7TgM4XhLBXNF/TQw7fxO+q kkHA== X-Forwarded-Encrypted: i=1; AJvYcCWrSt34vDeRGrZxNyaSJP7IPk4ACE6Kf0+diTL6ZioW/Enr3Dj7OQEQymXjtO/Hx+jap5GHKSuw3jVx1ks=@vger.kernel.org X-Gm-Message-State: AOJu0Yz3sDPN70BKo9QgTsUBlSw1er0cfUDJVeMWLb2vAYid63HsPt0f yWtYBQhtuRp27t1CxdCGyEmnvftyDrIAyq/H2oO654uZXL2DkD+5 X-Gm-Gg: ASbGncs3GGOQLnFoAVWiI6YwdLjHj0LN5wX7Fiidae7bTU/dOT1zMU6zr1N6iobzTDB dHb9cDMkYvxTDFPBVPHHU0R/sM2ZQQ4XFm2bbV3NMDUtWZBJZ0K0zUjsP3kB2go6eP0NrT9Eory EitRi9VLp27loPMdutaCXOWMC0f7vtrYBtE3rQ1iChGQ3iUcEld3XSVU3Ms6Y0n60PIOZdJPa3+ mY3eoggFwR1IIojXi5R8gzpQkTWgUUUelcI/vh5pUtczBof7N3WWqof9zDO9x1WPuJ1suOwCeJs YjU9LUQkxR85PQ2YN5BP8P38y4aKn8sjdJF53fpsUbsK08DnqWPu X-Google-Smtp-Source: AGHT+IE/HFFpPTOpfEpzIl30PLpsQqyo0q3tUVthULF3nTYwPJolDFr0WO8qqWwNpwyOwDFQWo0bJQ== X-Received: by 2002:a05:600c:3f0b:b0:439:4b23:9e8e with SMTP id 5b1f17b1804b1-441d446ea6amr36686905e9.3.1746626081537; Wed, 07 May 2025 06:54:41 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 06/16] drm/vkms: Allow to configure CRTC writeback support via configfs Date: Wed, 7 May 2025 15:54:21 +0200 Message-ID: <20250507135431.53907-7-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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 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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E55B229114E for ; Wed, 7 May 2025 13:54:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626086; cv=none; b=fiStZhAgOvcBFdMlmaMZ2pviw1OTOKCEgjirTcbPrpYBQc2EwyEIpgn90CX6HVRBxvWmc0pvCVLecce9XSbi88ltgmiY747cOA7UFv/NXP7q/oU79TToDzq7doZMQExokblnJfU5UF7B5TLNXcvZ3yaz+7giuSNr4AHkPAeelE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626086; c=relaxed/simple; bh=hAGubNDj1gOlblEMHz8Wzny9A9txOnH2teTzYA0yIM8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=fWV3ForfPid+fq1MZNpict8qTKX41yKuFqTBgaanVWXUiV+WODMj7nBHvua3yvrqbKwjv2HVAdxOF0/tjUOsj2MLdOIQPUQK9g8PpIHwWS+uRDa58pcCPwLwgyDsMMEi+c/G/ACsybKwZbOmLrKHGMUx+d6etm8zJg4ucJr2jiU= 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=Y6KVQ2rY; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Y6KVQ2rY" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-39c1efc4577so3615798f8f.0 for ; Wed, 07 May 2025 06:54:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626083; x=1747230883; 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=QUF0gW5TISqhpqMIsQd0HHfVnPAth32nyY5ETve72ow=; b=Y6KVQ2rY0JGHf4AakmblnOkYcEG2MG91yxckewG6xYHC2u8c7WWGkia6RyTS7ElTLA sj1UapoWA66bMfrH9R2NRXSCLnMl7beYjtIVmiev/PpYp65P6LR1/FLGMQA5zYq3ZVMP QIjUye69ZpWHuTdnR6L7Uj7INBYhjP9M4N9My7uMLn1u3ktxyvmEaNSCIvOWjaXosWDc /xvWw+qzvE7l7EvKur2P6HZqPeB4yb6RjXa6novkWhAnYJTbE2+XFF0pNKEVn8r7H8rk NAWLytcHmxApHEeeKjavqHVpjXbS3PQu1wrmjqZRRsoyWZ7OX4zEGmS4q2dN8dL0BN2U mWZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626083; x=1747230883; 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=QUF0gW5TISqhpqMIsQd0HHfVnPAth32nyY5ETve72ow=; b=qJvIxETKKzf2LoOcoyZ1X6Jcumm6IEzTMjJc8kjI8+XJF9QdGKF+7vH0dRSezLee5V BZKWdl9OnxWxQf6PFjr+dfw7ed8jigcAYe0LL+fhviAkcMKZq1/8JRODn+YRcgHmz2Pd UnITsxxNzEsAa0AqWoTqWLoJvJJ9gSzfzCfP8GRym5tcgON5PNZG3e/veEU6pQcIAn18 j8yYdRnKta3GUIaacu6ynjIRNIw3CnC0IiaYZrvNGx3tPb7lOMj/iYcNqkW+yb38zqeQ OHOTcxFq4sjH1PAmF7BnMkJDK7Uk1iL6oPAdGIRQqbm8R0ltTqHOBZGX8p8/FCOvAAtU /h7w== X-Forwarded-Encrypted: i=1; AJvYcCV4YLpg3ElieDj79F3+iDOnJisZt9swSQamE+0L1AHWO+negWc0k77eGL6ubjJLB15gHZyDJBjAbQ56aYo=@vger.kernel.org X-Gm-Message-State: AOJu0YwYBviQ+vLTZdc3Zzhi8jOSKD/7dWCl/fB6FpFiB4O65IDyDfnX 1Dkr4/J3oqC3S/DEC4eyFEOAs4ylJKGlErURMshK1/6mwlxn0MUS X-Gm-Gg: ASbGncueRo1oulECC+C63LlIaQNJWi9QirigdtPnwyldClEj8XzsEGbnUq1mzrwoPpw wDkXa2tMNpdsH5dGcU5l3xctvhP6ZlH6c4XJnKrwcBH03ZFKj0Ah8x+iJoyDVmAe0aGGY8lKZQo EBk2KIafIcxgvQ7CfuOnJu7pI+tcmANPI2TXlK/G81paO1Ee/ZKdweeO+63XuPtRVJVVlrWMs3T Vk6OedACV1/u3PEH82RbqQvbC1tMFxCVUiuCxjU+PP8Fm6IhnL7SVmIjs5CaodSAzpK/T7Pe/jo dGlcDqmIP97tYf7srlECckdzPyFoImx+dEfInY/jSQ== X-Google-Smtp-Source: AGHT+IErie+ggvRQeaQ+1n7p9+VSNmynrdNGiIjkXiczR1lc20MESvq6mYvfQ+EAengMM8UOWdLkXg== X-Received: by 2002:a05:6000:4308:b0:3a0:8c45:d30e with SMTP id ffacd0b85a97d-3a0b4a29b29mr3051022f8f.35.1746626083047; Wed, 07 May 2025 06:54:43 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 07/16] drm/vkms: Allow to attach planes and CRTCs via configfs Date: Wed, 7 May 2025 15:54:22 +0200 Message-ID: <20250507135431.53907-8-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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. 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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 05BA6289819 for ; Wed, 7 May 2025 13:54:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626088; cv=none; b=Q99p7VtfRiPuQ3w5TunidZezW/tbfqeXyV3rFhsKANbeNx8hqTlXKrbXoik1ZCGcvdeco4cXPVGqceHGfMHA0SkxJIZBVnzO9ur/8T5TAJa8jv9nNYO9UXqmnZFc3zcyGSp5RcECgeT8mflP2TtleSoz9dPVo70OG1hLw0QNf1k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626088; c=relaxed/simple; bh=gHTRudx0oIyMANlGReIqmUJ6xeR71GN7y2rEMrIES8w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=RMfppkX4GMn2fS3d0ElVGQJ4Hg3NrGny8t2kPke3e1bK5gk/xznKdrb+FE8CFcprCteJV7TywI6fJB//hlL0BvMJd38tvzP8z9FyCydvDd4xXkUGvlV4uZcgeR0WXc8E9ZkZlRflQu/Jn6GP4M0xIgMC4JZMFXe4QmmTLcdNglI= 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=A4ZTrihi; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="A4ZTrihi" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-43cfecdd8b2so46346505e9.2 for ; Wed, 07 May 2025 06:54:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626084; x=1747230884; 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=szIFBV8YPPxNmpLCZTyiXEFnFZhMw8GcFkarwfqTbxI=; b=A4ZTrihiEWbhxpgvZL8QKMTIdzPLLTyAXRMvyNv+PoJemaDesOZ6aoQn/WqOLlvX6s 9tXmsNHfHELJgP9enwZfJmLQSYxxRe7QlMfk0POK51r4qsELOjOkOrBI8XtHIMVRHhh9 0nBxh77jU9aIUeXw4hno8HaWYgQzvxiLWTd5/Pl7c1jpTaG2w57uDzQ7yW+diPjvHV2O nQeBpWtf2XG2lBckTEr5Cuay8YpKXH8GfbfedXfUNT+q4SfzAUrcs/R8aPoVZgLSm5jn eRg5oZwWabDvBTxNxefSS9cNpjx0q/VCoOGvLD+oRTrxI9rTFtujtvfT++flldzTtS7J BwcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626084; x=1747230884; 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=szIFBV8YPPxNmpLCZTyiXEFnFZhMw8GcFkarwfqTbxI=; b=DV+iObERuJs4+PQ8cmR0zP3AT025si9bdvuLpDm9z4QoNe5MkT8hGVBk6QcQ5iKfRv wFH4+b2OempOwIeDWf0PKEVq1mDGR/nkF1ad6LinrMzk2p4uTG9QqHz5n59MwVzejwY3 28eWtuiTUBKeY+mUQpCc3Yv3QT9bbfW3SLx8MG7vz56L2ulQW4rvyeapsND//kS1gLz+ zXvc8Tbh2TN61VhN25RTUU4X0XOHYrSNrO328/XUVHchfGRSzqrjCVvb9aROZI8HV2uv x6+i54NkGwSc+81YmpgMgaINPaFW8ETuRduxSQD/Nny4orFymLakBvEw6mX4C//JKDSy PieQ== X-Forwarded-Encrypted: i=1; AJvYcCXG7x/7eDf7u6t6p9qOKuHiDn6LVl9VFE1GGw00yJxIwAqMNM3PeqCqgXm7bzVZz+OJoA9Pe5GKhx4gunY=@vger.kernel.org X-Gm-Message-State: AOJu0YwvqPQFUK+rD+LKEAFzf9E3PmPuUMvXIJ0b/cvFGOdqKqJqtUBv U0Ced3UPqPPTry3gXwsaERmhLw4Ns9mXTSqYwOo3lfbWsA2rSrMY X-Gm-Gg: ASbGnctKXnJNzDajBEUUSSBkRJ3fxbzPBmBeee0P4KJdW6JOSfwex/gHX2K2Ok1Gxts JOi0sSfduVqkx8SBr0mkHK2zlP0hGXrcPzl740LNRsGVYY81i98vddprzXazC2l6gIBe5vXttJC NqUSJz38OS1tIzmozv+QkYYjkzxjKi2ietaFtlS6M1wU7c5ug4UXp0B80603Ei6fR6jeJt67IZC zAsg2sZU0HFRJVhdxZtzHIkvN0fCTTjFjjJP2/RnbgQflaifHoaTw4/euh00oYR1JM7jy5qkJK5 MJ4A6t+77ixYG8+DNXDbfN2LSIZ/nFR5kgbtCpyQIA== X-Google-Smtp-Source: AGHT+IH0VKnNabCRFspNm5ngDD4GOKEeZjWbA3IUZ+uiBLyha1JXLGWaq7yTWyB8q20kVAk9xNIfzQ== X-Received: by 2002:a05:600c:5295:b0:441:b076:fcdf with SMTP id 5b1f17b1804b1-441d44b5e6emr29760855e9.8.1746626084138; Wed, 07 May 2025 06:54:44 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 08/16] drm/vkms: Allow to configure multiple encoders via configfs Date: Wed, 7 May 2025 15:54:23 +0200 Message-ID: <20250507135431.53907-9-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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. 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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B42429188B for ; Wed, 7 May 2025 13:54:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626089; cv=none; b=ZYDuqutYTibEELWPxxU6DpS+a3E0Z7rVy0ioikaJBccXzg/5Y1+cGSKsWgsKNMtjXvlVmxHxDc14eY6yLDlVoEbBzeK/UBV2oNPJk7qZqTeqnCRYJq/tfcvv8necTPB16XH6GlrxFdtGW6TFiVsm9LcYtROMT1nLZ9g3md/ZXu4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626089; c=relaxed/simple; bh=QQTQWICRTwCdXwQjBuZDg28yfx+0BiKvpXr3GPcYM/Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pEUAXYsMCSVSfFS08r4z26/sanMrjoJ63wCTiWgezic6EC5O0JTqW/3fD1iPqXVsyPJmoMtlDpcJqUD3bPPSo4MsVkwn7DSDrvzbQJSa/r/6+3UD04xgp9TUsY20nWizAtpy4y6M6zIAFHw6xqS099yvjW//vIK3RcCxAQOOVkk= 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=Ypl2K/8b; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ypl2K/8b" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-43d04ea9d9aso32872625e9.3 for ; Wed, 07 May 2025 06:54:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626086; x=1747230886; 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=Hf29a068uSV+gOxXOAqPS64BgHiJ9rQElLGH+oW5Azk=; b=Ypl2K/8b7PDFPzhs3fvLtFE1LLbAQ8fwq6YCrsKYdtqvje6MVffQ4vHNcPpLhrTyS/ kIIlVCWZE5jPsqI+kLHvtHl4fIrOmqgMEnGQlvJSom4pI/JSVg0l6X1DmMePTwcX6f62 QeJdDzYmlUxL4eJ136qls88DNQ4mbx+ncrpCz328UX0/bfDqDxHhuKGuPs4P1ZD3HAuP fKAjOmz7J75V/65t87Bk8CgFC1lPCE8p7gi0Md9vmdTzfXrEjS1qOm7BNvW3hDC7XWRe PRLT+UqNNOB/0R5nwooT6PNE3OzZOfURM1+uU+PheDmPVpA9lAmfkNoZElh6c9D/x5G4 fhnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626086; x=1747230886; 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=Hf29a068uSV+gOxXOAqPS64BgHiJ9rQElLGH+oW5Azk=; b=suTUhA2ubn4lS3ydpEJEZPct03RGGKyNPCqhXFnYc5Lzgu+eTmZqCL34HcHcIZCQ3p jnBAMT7NXbJeMf1RsGPmq9FAXYMMHrw/6sttQnicmE9vHz/v5QdFma82afxY5VqwSycz +WPlSPEo39aB6fQKCFo54dDTRkNZftb53ViqeYUQGtmelG4IPhpmuLxNDbH5liNWwcaz JFIaCZjbcByLKoSt49QNFn1IvsF+LQe9Gc/8xxDOmWXOLu8QWpCIPeIMfVNPh8+HeoAj asG3AetpRayvS57SsONQhYNRhHxtDlUxdyivn4tvW1O8p6R9TnaTHSPdgedn6YymrAfy 3rcw== X-Forwarded-Encrypted: i=1; AJvYcCXo4GYI1PEFFfb3cVt+AnLYpq61DiY6yiGuPyfCowEpuXFzYg3zwxeeCkhEnE4Krn+twdnVfgkxHOFSPaw=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1NwuWjQG0wVZZAiH4UN+2ztyrpvNlXK2QOMlYDBusejr7uZuJ uDiw3AZIv14gVmiH8tTYawOBLNlehF3yABIP5D/dfj6axJlkFxiM X-Gm-Gg: ASbGncvT6u4DE/CKjvRUFwOPTiySiP/pE7oc/1u7hfb2KCP9gZCWF1CCj7RCJ6iUI1/ Fzm+RSoSXDrwlw7bjEoYFlixTO+OhHdwpxxHxnmRf51JQULiKm43vy05fC96Bz9Xfj52vpF8cDU TU5byHIKcI9NIw/FdznC6tNnObo0vlS7YhJgOo3t1MPHa7sO5tQvBZJCHWyGzNFU22f/RwjTEqD Uijr8QMNaGTn2ZmJs5+gNzsPZxN3R76f+4PdXB/hTpwsr4bRvpXcQbzOgFdVd1brYJ8hYTHoCcH XP6NQQjoOkQoqdpkAipiuXnt9GDJiBGOGiav7uvW/w== X-Google-Smtp-Source: AGHT+IG3McCwf4+c/FvGUTkfhJOwvL0zCzL2qFhyOb7erSoPR0UGcnOTeNf80Nd1APHPk40TSnUX5Q== X-Received: by 2002:a05:600c:4eca:b0:43c:e2dd:98f3 with SMTP id 5b1f17b1804b1-441d44dd21cmr21102965e9.21.1746626085635; Wed, 07 May 2025 06:54:45 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 09/16] drm/vkms: Allow to attach encoders and CRTCs via configfs Date: Wed, 7 May 2025 15:54:24 +0200 Message-ID: <20250507135431.53907-10-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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. 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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 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 25D1F289825 for ; Wed, 7 May 2025 13:54:48 +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=1746626091; cv=none; b=idoEm+tXU2Ieg8Bp3g7fIvprTJBz+O4e0BLgb2laAVi5+Rf3VcMFBycxNdgLK0RBHYNmSn5wKMsYzY4kJxUM2oPlH0IjHkxWY+FnT4HyHh5l7S83CJmOmxsd/fL2OZJHYFC5QH0aC0c+ggPImIqOuu6ImlGkpBjS57z2/EX1TeE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626091; c=relaxed/simple; bh=7lM3QmoZUuZ5ewVujk3bgBmjYspphoHUhqx1IzXpuXY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=j/ROIZ5E85EXisdmPUCRYvH1ljw8GTamPQVgQEmwtXijffjYgWgVQaadMgBzaAviuop5Uvi8bTZX7ewk6+ckDKKk5NcA2iPvwJCWKoVjxU5y0rc1E9fNn8c1d5v/5oA/gl9Flv+fWgnbclmov/bIIpJbvSgOMSVRqVhiVJVX8OA= 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=e6gfUrMA; 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="e6gfUrMA" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-43d2d952eb1so40035745e9.1 for ; Wed, 07 May 2025 06:54:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626087; x=1747230887; 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=X1HnhUZAybJPAQkyvVttO/Ryt+bqlvccIOuWEXiEsjA=; b=e6gfUrMA3YF+2n8XMCAapv3AOrX6jSPhQ5PGopOyspMJPqjoMszkwhXfxHmk63vQfa MTPLvvO8FkdYYlbw2N5czZorBXBSBRLuTVvpdC1ek7KxgoMhyceMJzXK3VTOlvBHbkTX XVC9vPGxOeVrXAK4gJwA/MNj9iT16POkSgfhS5csog/HkhFFAq1HcVBxiH6An1vzJPFx qw1n4DT9vPBeHOg8YYAgU1qm73fVZeA++Fn9nxLEFGyg1W+hB/iC3AeaowULrQkC6ZuQ UU/3vjG+JTFuysb5Au73Me31fXWCNtvDaxeYfhzsNa1PA8S1q+wwnPzbpLNeB7zdg+3C n5cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626087; x=1747230887; 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=X1HnhUZAybJPAQkyvVttO/Ryt+bqlvccIOuWEXiEsjA=; b=OPOjnM1dzPIuI9sG7XWE+cK0AkxAgDJG17UysOEsrAwvxjoCEwTWpGXaGaGr/cdfNA CqeGNjxWhfk4BtxMCkF1/c/UpGW9gA9XVxPdRDy4YsAx9MWmfO/rPOoII5ETABq5GD0y KnbR8OwplAIlnHBtEzP8zea2oRxNQLqdnjGfBoGvQLv44h2a3AQKA8Pv5SN2FUnNscNT Zkk3vtrZEfP72HJvBsvml+ger5QXIacRR4K7EarSZZ35wgHG3Xdbe/Pm4Bred+VPWQAN VKlaFJRVTTeM/nIXIoSSrJ30c/cGhZU8oPVtP7e20wpB5jpAracYHWW9mtX/zGJFciQh zA2g== X-Forwarded-Encrypted: i=1; AJvYcCXI4YjZcBjXq5DbwoWdozxEH3n0HZZRVSr5ZU8F/9qPNzrFBLoRnQuS01AgRpgOivGeEuBNxM7CTRTOG5Q=@vger.kernel.org X-Gm-Message-State: AOJu0YxpfRTjK7WtYhdRmkRKl0Pf0Nx4Wx+qJacgkzgh/9j4E3fqPpLQ 6YQW4cHVlrMj0QR93jgNL/AYDObUZ98zTmg2Io9WzcUchv75TgvC X-Gm-Gg: ASbGnctu/WA858mikdYMbxpW7cu4TDu541XKlZnE3tlxfUvO1xrOjP4XhzV59N8D3s1 eOuHOCiYqzJiUwTD7xr0EWibbH8lcPD6iPXTMnA36m65wvElXhgRWCUqJhxEJ1ntQwfAU9fDiNp wxd6gFKspSYEwoQhBTh0LxAJYePHUGzNEA6tNFNQ/Qo/epvHd7igw1CzhWzv0RnIWBUL57v1hDd kgS87lCKbElxTobeozR1vf/0x6h1G7jCbnJH2gs4KzRR7WBet9jR7xOCinVsh3DzNukO0qgEQtA FEsoQtk/Ze8mHxmEw+IfFAyfwFyPKnyfw4cO6qlUnRhigJ7VCaZy X-Google-Smtp-Source: AGHT+IEMo7mCdJC9O1HWBsIpmLiYAYtIuisIXhb76yHVW3vTbyfdJIaD/rrQNRTa3itJJqwvV8nMog== X-Received: by 2002:a05:600c:a47:b0:43c:e2dd:98ea with SMTP id 5b1f17b1804b1-441d44dc067mr26555685e9.22.1746626087155; Wed, 07 May 2025 06:54:47 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 10/16] drm/vkms: Allow to configure multiple connectors via configfs Date: Wed, 7 May 2025 15:54:25 +0200 Message-ID: <20250507135431.53907-11-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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. 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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 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 1E25B2918F1 for ; Wed, 7 May 2025 13:54:50 +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=1746626093; cv=none; b=UJRfKcgK74DSRqU9YAQziN0KDWDqLBxh4R1ta6WtnaRwV9oX4cJjxx1wfjCFdaU0BmipzMxXccjgzuFRzz31dZHzcIJq0LLRN59jdoNQ3vvhuO63cGhun0AhWUgYbNY+6TbkaX7X7lVpd/iEVIkgKNhJrn2/jPMW/H35ijsDWfI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626093; c=relaxed/simple; bh=C85asPB7AVLKECfLgA35sIT/buGH4OxmZkGQVpwtlq0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=KnED4RexBksDU1ABt5qTsoVMnj9fy34ZMx2nlJw3Q6R1D/3fPT3Zqrfaf64wsqblYcvwwopOrL2u8ZtzC4DUBESTzJaCrBducZlfoHqGCv9oREN+kSi70GuhOoswm4z0kMMgRFXzxjTgxQMed7pA98ExhzS1NIsbX60PFsN4Q+A= 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=UzrkouD2; 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="UzrkouD2" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-43cf3192f3bso67141345e9.1 for ; Wed, 07 May 2025 06:54:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626089; x=1747230889; 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=B3uzv8jS+uSjYAUFvNNOH03DRX+MgvgGsMjkekl49eM=; b=UzrkouD2KRO2I07FiMJEwThz3EMSnQqYWhuMg/TilahUxOzNciimCvQWw26CKxnB9v T7NnRBiqSU0hUjYLniL4jOBO7uzcXuZZ9OgOwmrggUrGWepBB69fSgdXRSwQwQ2yB1+8 JGF2XfmB609e1ByKRDgdKZ69UGkxNOe5v3spGaft3ytn9eQj2ISd8xI2DwpEL6ieFfm4 7D11T0oC1ml6/1ffeBV5FOP5sdlRyiGVZoc2zghyrfmlnWMxPpvXDGWPkGWOiDAHYxM4 dJvMPZCDvE/HS8u2/FE9Mvce++4SfZ+iKYg4xqRKb1OKQaoHCbx/kQfPu5vF0bIw48Hl l0LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626089; x=1747230889; 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=B3uzv8jS+uSjYAUFvNNOH03DRX+MgvgGsMjkekl49eM=; b=krBTx25arRPKG5dnJ/LBAPHH+7gDz7jvhP3sWQy7HJmEToc/hgEnINs4q8JZRMQaYn 0gEsBlLET8Dw0HG0oRiSUVj13bsQGCeSxqTWLOo/Sc+yLNi5ugJJn51RK/jPxsirmXPQ tbhAJeXBuMs6koxjWsK6tt+8w6Nk0gLXnJo3TWEAGD6ru/4DUqpP09nTRzTuAtULN472 wuq6HLpPNRUK003bRZcswC3N3QeZC1SkuSGIcW4bPHFtFlk5CvIW0dplYCFl2Uf8nfMl cxcHrYtCRbgl8WNlMb7F4tXkSDqUwFoSucuClfbROqUlunu6Sib4dZAfCUoK+9QtLE5y Irqg== X-Forwarded-Encrypted: i=1; AJvYcCWLJY0Vgb63Uw1cCK1DfgTOaMIqMhr60ADTyCY/ubJbcou0VIbdv30XNk5VkVBjOzuxoobWiq6SZuWtJ/g=@vger.kernel.org X-Gm-Message-State: AOJu0YyzTGhZDv09BR56C4Z3kV057vknl6lyQWhPsZvzPH1vf29w3xjn QNCtBBTdytZe8EJgY5k3Z5xVl8Bq0XBZb0+hOdOyb0Nklq84+zRR X-Gm-Gg: ASbGncsvIPjqJrp7HL6+BkPoly0ewOnem6aXuaZ9r5HqB3sOiiUXElEv2cC4d69gqNn YkzCe0oOBt6WGqEanJHzJV2ikq8XKB6sgy0aYD0YVxnHfyohDsy2JpKUOcebVuPqMn4h/KpLNDV uPSw6n6bSpy3dGKhTypUPc1zPfas1w9QkDXH01TrWhl9DQJXWsisZXsmCZ189+3dIr7O6eU6tis Z6lXafK5yZ+PqCRgtv1i2T1LtDF1p+5tzeKAQIAvNlYSGE5aMo6ChLo87qiN1ERQoxSkWOuC0iL 0kLEIs6SHLlL/Wi3oOFdWm1nfl7ncq8xL9u7zUbzVQ== X-Google-Smtp-Source: AGHT+IFhyGvbpgkCU5AP3HdDVlcdPRh5RZxhB17iCeWUo+nHhayzPhUu6soRosDlT9+Jqt85AM07wg== X-Received: by 2002:a05:600c:1e1d:b0:441:d2d8:bd8b with SMTP id 5b1f17b1804b1-441d44c2821mr28333185e9.8.1746626089109; Wed, 07 May 2025 06:54:49 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 11/16] drm/vkms: Allow to attach connectors and encoders via configfs Date: Wed, 7 May 2025 15:54:26 +0200 Message-ID: <20250507135431.53907-12-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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. 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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 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 982C2289827 for ; Wed, 7 May 2025 13:54:51 +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=1746626093; cv=none; b=BBAIo0DMffnkS1MV+IFzy3tINXqP4fzaXXaqbxl5OFX2uw0V09uXHhWtlyyN4ewcqJ0YzLbTivRnQuBo6jMBE1nbnbUUbPr6a1zGNyWDj17dbKqhHa2ksGVgrdQxJPam6QdBCqW0EASEfowfHNJbxM4kDVjfLFYLob2T5FGB+uo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626093; c=relaxed/simple; bh=pqUkG5pPZAQuWFiXDSONHcLU3/phVQ5nFrwCiq55Qxk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=rKFaYFwwoBltoVj5NBRMw2zBK8niiXjDYw9gYYXufYMsTVMstUPWM31POuqWUcPz2vaCN9LZ7gU0826pWClPUO30vLwzyAJH/K7fAhsXHewbfZBS9Oa6F2fF+iyotWhfq8WwLMaVSpDr01SioxPGXdnTAZ4QAk2szj3axJJGZCc= 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=DUZySloI; 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="DUZySloI" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-43d0782d787so44426935e9.0 for ; Wed, 07 May 2025 06:54:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626090; x=1747230890; 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=+YuRwz8f2hm9m7I6mJzRn6e33kisXWPP7uKIXupdFzE=; b=DUZySloILVhyGHjCJdwWWZbrtPVdMKTcAqg4pHymqgCY43hPR3TRTiO6kVW8tM5oXu gt3nTAOdox8evJQ8KJbtXXZ+BZZy1d+Z/JFRSQxkPUCEhVjx1ZSzKnclcvUgz0x/tmM9 z4TWi5kqGA4anZcPk+hdcV7eAC9blxQpb79ApcESHRg0YbZsK7wXxDV+7Uyse00eU6em HKCaDQudBi7Q/gYUzw1WJzDpyA23zM3nzILQAJ0V3ARAE2LJH+dmv1padSbAc6x8YRub IK1bjEtx2oabrqJczoZYQ5QwQ77kh7XT30sfzeFKjAr3MbPupYho1oLcZNP2v/1rt8GE EK+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626090; x=1747230890; 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=+YuRwz8f2hm9m7I6mJzRn6e33kisXWPP7uKIXupdFzE=; b=Ida4yvBuaKlG6a/r+JS/CKKMlrm3DtyWhF9lhkZROyrcebyOMQ/3C0aabqQyFUSwLb +dlvJs9HLFO/tgp//cznQHTpBWkwklMpP+iQ21Tm8R80uOutx/8QlKqI/yu8+nyD6xu5 Rk6LikENENUQWGy9BQEM6gUHAcqdaV4m8suk955zsDXRmTMoOJjYvpiqZcKOWsd0U4qu 0tQ85Txq0VzOzZLmcFFqmI4CI2aWXU/OsuqmXbHnfjgyfnH7etqQP19aA1FnDi7/YtCM FsTLogygmtVZ0xXywCBqXXwUi7/1mR+AC/l3jNsRPr2+qIG9zL6Fiz3dv5BMn5ftEOoI wq7Q== X-Forwarded-Encrypted: i=1; AJvYcCVKSUp90eyfXbnRBM7MSFXqnCrhZico/dvoa3XEkpxpc/m7yJcM45LDPDKZdcg4X0cUR6WgZn7QcesfB80=@vger.kernel.org X-Gm-Message-State: AOJu0YxhuNYaZf+7n3p8iPiz3SxJSbCzgEOvOA/xmPZiDhH8l4lzNTG3 OZknbgG+3gj2+pwZrM4jxMHs6o7r/TLYXhiwFf/HpT/OUhT/OiH5 X-Gm-Gg: ASbGnculACvlsOzu/SY1aH9MBlGQGxf0Dg5lmiGZ/hxdlYOLsQwFDNzkAQ9xW/7Q9pk pX8uc81+jVvmSx881gTQkpCynq9ilbBNPHB7PFySUnsPzSxLe13UPA0C5On2BhzON/LyPEU5ozV oVZhkuHa5qSDiYVMl6AvQgysyiurovfhLC7/4G5A2o/MKVXXrxkl4GwHRQTfo1lE7RgoMqpxvMX btmTJ5kKfl4LUacGmQArLmRWCAT4sAbzD59As3HmqxpBvJHhyGps2H85YFAHkEDnFWUdmwppYf8 w8cvCbaHGib0MvwEWN6ROp2sc6mf8vw89BYdYOYXDQ== X-Google-Smtp-Source: AGHT+IGgEkenNlvKaapknt+N0+kCv1udjBqtfUNTUtiVhvLQ4hCJxf/W2wwohiE2nA/36QexVoD1Jg== X-Received: by 2002:a05:600c:4454:b0:441:b19c:96fe with SMTP id 5b1f17b1804b1-441d44c3353mr31394405e9.10.1746626089945; Wed, 07 May 2025 06:54:49 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 12/16] drm/vkms: Allow to configure the default device creation Date: Wed, 7 May 2025 15:54:27 +0200 Message-ID: <20250507135431.53907-13-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 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 358E5292091 for ; Wed, 7 May 2025 13:54:52 +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=1746626095; cv=none; b=jKiV+Ba81hDBy3Ft5k6n7wr8GtIxEpt71gr7dTMjHbLryux+Yn9PqVQ7HcokStsmXBP7cR7l7EQuXuGtkrmyK2sllLS5kTmfJIHIF5UbMT263aV3HtZuiB4YfDcJb8QzkERyv/zAn0rt6EjK5Gg430lHG9OxbhhAK8HZ4s0VUuQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626095; c=relaxed/simple; bh=stU4SlJE3RLyCC7kwW+mbu8c88TRmxZxd8UjPZ5iwT0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=im7vC7LhhrgpaDFqKGUtloe0eqcyK++hobBmzdoVcZV3I2ytBbdUG84xkLHWF5gHYm54/KHF9fiu/OE2sxDFd+R96hAHj7cIXsLhU374nwx9ercdc0hvlRFFSBlRCGKrVFKUY2gq85RdKzTAbgvZ62OWXPvawEb6JYlt3FKROkg= 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=jjowPfjw; 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="jjowPfjw" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-43d07ca6a80so28917095e9.1 for ; Wed, 07 May 2025 06:54:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626091; x=1747230891; 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=LWqR37aI5twwZSWILXuoPG0kdPMC1+eZgCLJxtlievw=; b=jjowPfjwK0EGU7HtOUsC0NItoEz//FHbbfbJeZweGZlK1IWwzDF7ScDk2XbNjhrQnW jJXmiWeOrFGXjErLqh4u6i0/k2x73Pl2WGcwxuaGMbwYVFpWJPEhlvhk6YLOpajlTz7G HdQN02VGn58nI0oTlOvi0mpJxhc4ujemnefZLE6BfSACYokwGLxByddzJLxwYL1u5LLr 0AIYFb974mJzzTtICnxkZUsW0MD65Rgq6G26svC9UPMQdFMB2/1O5IOQ6jc7sL8pnbMF gnB6n3tUD3aOIshQ5Yo4JLiLbVJUa8PpcZS2M4y1WuN6k2kC9ROsWuACAQiPU48kG8hn eQrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626091; x=1747230891; 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=LWqR37aI5twwZSWILXuoPG0kdPMC1+eZgCLJxtlievw=; b=rmTup8DxUKHMO++cy01AmNcpiSSHv6AVNhbnRWgljmC82p3fuyqNs4GuOTz2mFSUO8 QO3rv1xE/x9C4mdpQhmXFlRJrhciQPLODXc4y0R8VUlKzpIn56xFGLhxEwWijt2cS9up 1PSF9j5zoSmI6RlgXixR6y/LHWvojoboSfBdwXhe7VoGwxJt+1mMYQq6QSFLA2mGasz/ 1R8P/diom4eCx1fL40Pg5kLYyGjAu1sBXJeIfmkh9W8upHmmH9dBrolTWf0mEqT+krIo ub7qGCPUbHbFx8Re1yTRR13OYGiqdD/mDJomRY01EA94sZnVnaVJfbztlzbjPmHdDdkS DRfA== X-Forwarded-Encrypted: i=1; AJvYcCVzu1dyga0eOz0BcDbHXrdbPlz50Z4gxrTvqWXq3WO/Ph/qLJmacpi0Aaq2X0YXYmXUOylcQf7w2RpAafg=@vger.kernel.org X-Gm-Message-State: AOJu0YxV4Uk1uTh4Ctfto6Sh2xgqx6zvCSiKSGlSUVkzzh6pJZL7bIMd X4/SsipE3iQ6ZBU7NqwnpPRPWR03yaSa8lYKIil8QfI55fF+l/eM X-Gm-Gg: ASbGncsWLBZJq/SvvpAamhHM+NDrAKRKSH9J+mS1OStPNv9srbCnYsGKGSGa6OjMOr7 DpaxU+eZbqDvKQVyXdARBOHz3Yy3DpAYJ+bak7dU+otu+Svb2E0U8zrcAc9NduUfLYVB/p5K4nh jB1CWO/SXTqZrGoh/whTYKhprzyE3GMAzXopyGGo3Q3gpgCdr9J2dHsWSAF3QpFrQ3R8JzSBrXy bD0XJt4bdyzHPO4R9S41UEA6f/IIOyA+ppjgCZfos9Kkq04qOqXlr3nMBTMP6TkhBZwDDQtANcr SiaP2Q3a6XY2KGgI1Z6BVX8wBoq6lWY57NQKIFG9zQqu3T6uQXkc X-Google-Smtp-Source: AGHT+IFyVtHmGEduXkwjzUmI++R00Dm3LiRIVnkrJLxWB8zjNqD0zZuy+Z6OQjmVFKKegfPZ2AaplQ== X-Received: by 2002:a05:600c:4454:b0:440:54ef:dfdc with SMTP id 5b1f17b1804b1-441d44c27d0mr25577365e9.8.1746626090964; Wed, 07 May 2025 06:54:50 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54: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 v5 13/16] drm/vkms: Remove completed task from the TODO list Date: Wed, 7 May 2025 15:54:28 +0200 Message-ID: <20250507135431.53907-14-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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 Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F30FC29209C for ; Wed, 7 May 2025 13:54:53 +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=1746626095; cv=none; b=YIzja+i5DuzqXUcmZUb1UPp1ddsEBhM8dYBhAd9/IedA/tqkh0PtOVV00sakUiLSq5fPxVIzuolhfE2+/Io9PH/7O2ZYGdt3cGqJdGiRiHNZii0yEV5qj2I/ae6Hyp/1yX9bz2iA8HTMQYth1skhS5upFw7XPOhS7QJo1E6VKyI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626095; c=relaxed/simple; bh=b2/RL4icLuE0e/p0RrOM3IUHzaPxTnxQXDuCCI+r1zA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FOH8gfyT/vBPwUTAuIUs8vZMxeyeqFP2/Uo6zKKjFMzuk17ThqHn0CRpBX4hG0fQsEkRI9qn9iKG+aT2KV3M05//uuoMiw1cmtT2O34Y9ynTKP+MTrTkt852BC7mkE4mX1vSwQ4enfQZCHm5dgL3Qbx6tpNI+EH7G5vlg5n8VqI= 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=PWsMsJMa; 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="PWsMsJMa" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-43cfa7e7f54so7295025e9.1 for ; Wed, 07 May 2025 06:54:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626092; x=1747230892; 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=7xrHu3hpS4UuzMjlqKc3OEphPbKbzYJqXFWO9xgTq7I=; b=PWsMsJMazh68vw/QE/eWg7I+Hvq9SBXAp4ofdBGf0HySVTvd0UjlvSNgg/I3f/Xtnv cRkWTJmEnGLee0drCh3WD8A1hRcwjXg954FUpe8ghA6YdGRg2I6Jp/pVciwraQbITC8t 0qc/O/hbyfKv6xuwwVTlkPx7vg+ZerLJPk4vWS3AGr50IPVpzcNfEQ30ggha1Sw/rCrn /PxXUsCpc6Ngp3Cyamv2UJcE0YtcnksSBVmzGhO+yzoCOQME3F/ZK2mTHx9xQ2HXHrxW ScjlLGvMY9Nb0eMtEuP/HJOZcmVINyB48HlstDFFtwndHKNpG4yPrDQxhcRwohiTIpzV OZ6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626092; x=1747230892; 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=7xrHu3hpS4UuzMjlqKc3OEphPbKbzYJqXFWO9xgTq7I=; b=kTeOixOOL9CSoeZSpMfY6WNfRHvcGjdS4fvWimdsfccCsEgqmzFoLLCHYPSdgdKwT7 gtpo8T3iV3ff8gMJ7E80RPpvjVz6kVfFBxi+R3uYwhu+75fr8ffiLQfwnur99+hV8Ckp tUm+ziW1pQf9/IZOK/ctEGwnhDoUiSpB0LG6xxgUCgnSRO+HvGyPtwD64g2REEnpxSX9 AQbDLSS2OntBEjqJDEWXs8TTHFDGwrXt+rAPTvtJS3oCZBIVgUsbnXEeX2dxKx7hi36X YD0YSyOr7DsRrYfZq6kU11DVYdIlN9RZwwM/NcBddX5OezAkG5hsqHBe0aMCUVwhqZTE 9Zcw== X-Forwarded-Encrypted: i=1; AJvYcCXflFsx2NArJDm2Q9wrWcTD7q/QfVNUReL6hUUfHaiKAVldCX2tP6tysyLFJLJaja0voG8sVJKdl8QTuLk=@vger.kernel.org X-Gm-Message-State: AOJu0Yx+qOQHLRhickZ/rM7wUnB1tW8H1o8D/hEvRuLFwrrOY6v9oiYD s8wZIlYZP8N+WzZPaSQ9V3IOPOLuSh2FSFh58p6WhJ//JXYOPqmJ X-Gm-Gg: ASbGncuhmWuF4WNMUobUTcaUtWab+vvUVWgTsOVxMC9BgFEo4MT3zqCno7D/i7I15hY Z6p35c2mQ04XoTPU2vzCk6Of4nLjyKjnnkp4Z+xx7EzM2z+EUQTnFMpHvMmjgjAMmPhir0OYAh3 nYoI4i+zb+8xXpCz7IprfVmWR4nNBYiLYVKZy/kL9NLIG7TMPab1qU0e8Hp3ljkNq2hLjmfJanB cCVgD7cIzWzHnGgaBh+CsTDImm1AjpU512AIv5U8O8kB75dOaYBPLtOmCyyVr4yA0YYRvJGpqYL o3mn47CRiyP0o0oaQxjlnhDRlvvyI4yu0VeemfXDbw== X-Google-Smtp-Source: AGHT+IHvaaPDLegx/YYsCReSQEQL0sraRn5ZCzEidmLJnwbZc+IHhvSSWvwVeWCyM383lzv1Bk0sKA== X-Received: by 2002:a05:600c:64c8:b0:43d:b33:679c with SMTP id 5b1f17b1804b1-441d44a9cb1mr37201965e9.14.1746626091950; Wed, 07 May 2025 06:54:51 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54:51 -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 v5 14/16] drm/vkms: Allow to configure connector status Date: Wed, 7 May 2025 15:54:29 +0200 Message-ID: <20250507135431.53907-15-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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. Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D5EB2920B9 for ; Wed, 7 May 2025 13:54:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626097; cv=none; b=nKPl2pSQFmj8pjTEJYdGfpphY/p4X8OPrBfmsOmQ9kvj0s7FjceVFbet3D1BlHinbymnUbnTfSQXOXbOXRPSCaEKDaxTKbxLJN8sZXCOimoMgpCSLm09+kdb34vLjRdwLORozMJKNuit1gZ/Tqa5Soh44+yoz8ujVkculjr7ecs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626097; c=relaxed/simple; bh=MSBogAmC93iuq+s2NndTMsxfeTyPfdqsnwm3RGXnAVw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Gvq3MPWD5cdSkDplkFn97GzG5tzIDCCaALoxmozlHNBq9VmwITbKLVdUgPOIqGSJGfo+Ez5EEccG241pRRghW0W7ZMdF2tqbDw4KLFsO4Qa+khbGHyE5pilPct5ZWVdwCUr0j29U8ImnCqU2HhXWAtfRWMecDyrrRmIZXeRaXbo= 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=ngcK+oby; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ngcK+oby" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-43d07ca6a80so28917325e9.1 for ; Wed, 07 May 2025 06:54:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626093; x=1747230893; 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=fzdvmCLce4oUcBREEUqYsUXlRBTvwlUXQiKFXpxsJBU=; b=ngcK+oby6gq+LLUdKFoHgJFZLC6Q4MVulEQQeqBowm2WxLo44O6/Vmeun0a/VK16ii eyQhuZxkF4A9wXWhqtEUVcGc+YD1x3VT0Ntk+CfHMQWKt4Ivc98FbbDdFBCmZZ1ZnNDi Gr9PleuWpo5YFxQycot8wgMd60RFvU8z77zhD/5VIfzfCwoWRkrjhM6kLxUSU+KM/KYo ITUVxCCmyszEBvrL1c2avSJMw7D4XiK4WsSoA7lO/nxP9/ZsKM5ONS/8AgtLDuLALico D5bo1Ate8bRxtlPYctMYQhiTSweERhwU7BVFHhqNgMGDL0aeLi76ZsqLJX202s3mRCsA COeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626093; x=1747230893; 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=fzdvmCLce4oUcBREEUqYsUXlRBTvwlUXQiKFXpxsJBU=; b=Q4j1NfFJNUP+o1UiPm8MIs7IR0zAHiEJYLYjdSw9FXxU3/LenjSwmByVxMYGBAi3yG LYO49639y7bzp9E5aXcfh/Do4/QL9GPX10PoQENwZuYyqC2VWC2f3uVSIHVwHoITonUO hPaGeUuBFUwZCsnc6GQXqsKfFIKOhRZkcYtexeyOX1wka3CA+ww0zK2NKlRgrIHcPkYQ c9I35sKjStoQRvuOjSGXZPGUdj3r4PZhScEgWE60n4tWkqfAqpcMrYD1Cx8her104omJ yXa/DPb8K0tLQVkyQ0HpF1k+rkxwlKcsZuix+OIkspx/TFChN+RMDlGXjbq/kuVHVnJZ /bTA== X-Forwarded-Encrypted: i=1; AJvYcCVrBlyc6FFFhOvj3V9bDE4ZfRt0arXPeB6YspCSkjF+ti2RF6ImKCfnw9UOy8ihb2alPSh3+BOUUbqI6nY=@vger.kernel.org X-Gm-Message-State: AOJu0Yx3P1rWm6qrATRxF7r9MIWC770Kwsn8oflieA5FPi2iDDTCF48S 2muug3HlKx1nHAAxwb5sOhvcEmwisYOiC416/KtlfBciExKcq3v+ X-Gm-Gg: ASbGncv/FhJBhquMALHjHlgJP2cpGqCS6OvcFQISlEGwFgZWj/T8GhCeQbXCzxgvCqC 9CZnb9c55Y4esVKoBacp3TF90R71/4oj1xliRKV2H+RDrBE3g+beUGDCpvdSUujWjygyKKujCUJ NUhb/C0DAizfwYeL8+l0uMvWGUtiF50D9no+UXQ2krS4bcROzDerf4mvldJVMrJOkmGlFWIo3hi j8NvjzqsTPgZJ+ZStcKGk0kM6GeEcr+yeYK7JTKGP2Hx7MXw6Uhi639PHuuP8wPV536NnbUDFEK OwCW1jLyzLiKfmK3lNCzWc5QlkI4wqFkrg9WDkJHpVDvTR3SbWQV X-Google-Smtp-Source: AGHT+IGG3bL+HhaYPGibrPLd/2a7+yGl8/1xq0TZv315cjbB4Waj3XNS0Wp4HEItbsdlFXjWXRoA/g== X-Received: by 2002:a05:600c:1d08:b0:43d:abd:ad0e with SMTP id 5b1f17b1804b1-441d44c7e3cmr26903405e9.18.1746626093462; Wed, 07 May 2025 06:54:53 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54:52 -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 v5 15/16] drm/vkms: Allow to update the connector status Date: Wed, 7 May 2025 15:54:30 +0200 Message-ID: <20250507135431.53907-16-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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. Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Tested-by: Mark Yacoub --- 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.49.0 From nobody Mon Dec 15 21:29:53 2025 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 4DA9121A45D for ; Wed, 7 May 2025 13:54:56 +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=1746626098; cv=none; b=BxJspx2ppoJ8FVUb2V9rm3RKVT/EaOHaE3NgVC2UBbAlE0l9AJdTY3bsYpPaA0vu2HdrbIRCnucsGlFTnVjlkEP4AHw7ChWa9MhOG5N3SQAt3hKEwpdqBqQO0oe0oyh3NL8IJOlJH/vZ3WvEmLM/h+uLo9aNOjsIF8UeHlRgB3o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746626098; c=relaxed/simple; bh=mget9A7HVaZW5gwOaONn0lHraNo+Pe3tfA8h7YGoa4o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=hFlpbAFBEq+rMTyn6r+CMEb8S3GCuFWFKv3MBuMFkiIc3apy3tsnEd/yT2mvCbgka/Jo9xfHORIm/ykacORZplWvpt/qPR2v35DHjpDxEK7noMrjFE/zgvhN+pi1fd11DOMrOM3H1I3wO/VmWKvEx53bRsRupDNmgW/Y6GvbVKY= 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=V9DM2M5i; 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="V9DM2M5i" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-43ce71582e9so47554655e9.1 for ; Wed, 07 May 2025 06:54:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746626095; x=1747230895; 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=CWH4UBR5sUqGo9LtpqRAJPm/Evlyrb/fSWQLAWS3kVY=; b=V9DM2M5i9NZeZvh22flibgTWvxZ/f0oDnKRQusO0/f7TyINwVFqaoX42yGnUusIv2j jaPHizN6lHxzoIjW60RtU6AV2DmE7hkp1MRHWXfeYHyFGKvtE4UUhlUg6UHjFas5jzkj T4T4YY+x5AsG8kuvvSt3q2/3U6diz+7sko6l5xrbs9eBDHCBUpkmcKf6iM7HTzOX9k6N foISoND0CAymBxjv9OjvHSS+pEKtuJdACGblo5nVTk5dENkR/apRCoIzWvRPdCOQ/nTT xiEET3MoArTswT35NNLfImN39BPjAjU7abMla3RggxidzoYtfE7fyz4SMFYQJEv0rU7V Qg4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746626095; x=1747230895; 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=CWH4UBR5sUqGo9LtpqRAJPm/Evlyrb/fSWQLAWS3kVY=; b=ugttFejICiliyRcoDdsqBX8KMFLW1AzSwtlV9l1bRjv1UGRIvCwxtnZ1RRvoBCjB2U dsHKiNmZevM3I+NwwxEMukX9FwxQzCKdBj4CmQz8cZ0HrpGrcuEFvY2X6LhVwNb/tNDF EVJI4d5OFzeIN/dPuCBsS/2pqCZ/TbHuQHVhNmSBUx3R0oD1dNYsXTpRRHlmbbK+ce5e 9fDSSIodn76LxHJeUO5iVpCpW31f/mYlpzhCjokCL3RtZ9qPr9hMLSUxv/WYAgnw4zEe o/KG3BL4pNgBOL1xG1GHsfp2rqIn/VpY4nzj0ugEvt5Ji6k/APypQj2X5XxJGR5TfNng Zc1A== X-Forwarded-Encrypted: i=1; AJvYcCUUjhiT3lPVpgJGV9B8t5OVy//3MHJn+/jc9lUOo+do686AOqEG7H00RgS7gOwyiIUM6DqVK3m6+QNC9vE=@vger.kernel.org X-Gm-Message-State: AOJu0YyYx1SDVlMTuMarHocexPZXZJstfM/kklLfI7wZKBXFZrSJLHSt L10PFEU0nwINCiZLJNLXU3BDe50DZPBiyqYU0ZcMTseNNq05csG6 X-Gm-Gg: ASbGncvIf9aXnRi7EpMekKczh9bc+EHBaAVMuqRaN2tc485cCqeeiZkcDNjIDpxSeuy HzqZJgec4Eadc8zrbScRNovgIFFM60/U0kv/fdepkxNmNZXtCRs/I2SloS6PRSLx43SzUete26W FWFqOXYU5chqhYjq+ug3DgjjtkDw2luEgD69Px4HZJezDPCvQ1wZaFRDfr2/ELHMe0dWwK7eSCx To6PO4tiiJRIucGUxDQNARdpCqu40KFBnvgqbgvWQmQjqm1lidjRkq/z1osbU97DBUGbMEW1KvC C9zKECZH1qWVtdDrKXSbgIRb19r7qH2WgbnurBZ4+A== X-Google-Smtp-Source: AGHT+IF80fmLVPbtDN3yjIpualYTNgWYYcwvkaJ7VTuW/EM6ksm+G1Qlmrwr48Na58FQ8fjTwc/qvg== X-Received: by 2002:a05:600c:5307:b0:43d:585f:ebf5 with SMTP id 5b1f17b1804b1-441d44bc56emr27403975e9.1.1746626094564; Wed, 07 May 2025 06:54:54 -0700 (PDT) Received: from fedora.. ([94.73.35.165]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-442cd32f1eesm1894295e9.9.2025.05.07.06.54.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 06:54:53 -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 v5 16/16] drm/vkms: Allow to configure connector status via configfs Date: Wed, 7 May 2025 15:54:31 +0200 Message-ID: <20250507135431.53907-17-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507135431.53907-1-jose.exposito89@gmail.com> References: <20250507135431.53907-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. Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Tested-by: Mark Yacoub --- 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.49.0