From nobody Sun Dec 14 06:22:02 2025 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E7B74257849 for ; Mon, 1 Sep 2025 12:25:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729557; cv=none; b=iIM0jGXjBz5C7dggDmWCBCCYcjiO4+EORzyofXINe6qyX/t1bVirKQTKm0yf5P6iBD/Zn/470ZkZUIWexyIx1IjHxpqU3JbNHTsbfm51RuDLR7lQ25aPkeNiG92M1ViuBNO9toW8iCf45QJW0WZ2dX3DV1rPAff59fUxfdo5CV0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729557; c=relaxed/simple; bh=dxjIcW0hkmozpCxrs/k8CRpZXK4tF7OqQs5SqNceblU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=gjPuTYuvuMiymOa6h9gFbSDMGPMGC5UK2GWe1pbi34EWxhkpElQflTChedVOOnhIXsayYTe4kDDlHMVEyHDjGpilQwglxcoi3kklUngu6NCjVEMKP3gAJnt1+OWibSLhBbfivaxtncSe348U6fzvp5VOFHj/21SjnbmV0bRIFZA= 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=Bu1XcGXt; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Bu1XcGXt" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-45b8e28b3c5so4757265e9.1 for ; Mon, 01 Sep 2025 05:25:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729554; x=1757334354; 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=iQmk72oHt5ION4ymwRgroNBMLcTWP/UF15XiNzL0gQU=; b=Bu1XcGXtAA/k/718edyxWRy1k/VD7J0Ov+bq+xJPwqptKee9m+MhJABu4fvdmRSRhs cUsvwHrzGAenRdn1IVW3dIfoEPLjrzSZlucJx07iJOLOC9vVxLrhgV/rN+ofl0pFXCAd Lo9t1Ub2QQCEI384mK1VSDFy97+fDvxq2BFiQVwFu7P1pFu2SM51onS4zTE5kS7kdZwQ gLzJrduBU1f6k2F8ow/Kh5D+ltpWPPJyS3HWb1Zti8D1eCn+eOHiFSeQGMwyVS1Qjlwm jOXJOtmBNeRSureHX7/WFhbuCPGcS8rhZZe/Y6WPrVRrl8oGcvoieXxzZd7LBJpxBVFl N+kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729554; x=1757334354; 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=iQmk72oHt5ION4ymwRgroNBMLcTWP/UF15XiNzL0gQU=; b=wHqsvJuyq9GQRPzEG3tvHYAy0eSKwQuEqQiXit/CEITw7P0vBYXNEVsgeZzrKwrXNM 1yL08ydlB9gTl6N9SzNPpN8ib82Jil2J5mU6vdjb30bBK9W71rpoSykVhHqabBEopSQ8 qIyAPSCj89rDnCMQckFuiv4NwA9Q6YRvFY8y223XAf3JiuzcSbDr3/d2R8RnUzF7rfdQ DsGeHlr6832xFOvc4vMP/8tBydQw3/XiejVw1vnt4GWfEWEyhEmjKPQe6626SkIafLUL 10Bdruy3t/5BMM2PZMENF0UCajGwp49m6qLaHaT1NUz/uoQmjB/UA8polN2tm1EHPazb JJyg== X-Forwarded-Encrypted: i=1; AJvYcCXwBOmurm2opJimRPpL1RuDxB4hFmI+CNtuXVJ3EzN0BX7R+y9t5rCjIZDwca51pUX/hk/IoSBYNAh+Fd0=@vger.kernel.org X-Gm-Message-State: AOJu0Ywv7METhXAgWZuygjY39rouKUIURD14pKzCZ6KyMRw3BPPN0Mbi ny1TVGClXKyixbQ4r4XnQB+3PN+lT1OzbrbHJb3/at9H5J8x1FN0hbHl X-Gm-Gg: ASbGncs/+JqP1oUazdbzeIyDSFj188rWYrXWVP4pIpKvEEf5K5jYfzc8XV9qf3DmqtD AscWE7sSsarpMrBM9NOUUkiLvdXQI29St6GZ8tPnv5gm3txE2s7WKQK8Sg5XmFqOKoJj/+r/3/1 znvYWYVtgaJ8P96oZ0EGHX37nHSoEYo5OA/BfgiIpD8pi/A4AyKPjEXAKz6ueTgyMNSzCtuHMDN vsLO4z/9+kVxaBqabi4Fr+XozeDiqleoRjGPuQ5C18UMQeVBtl/OYGUc5agjzU43AU/ZrcF6Lzn jjmXQF3IR2eZ5wweSAyY+RG7kR13HuhteBivN2xUdeFddp/5JdlZaHHWLIhpPvH5r9XI9o+ZIht pcihW22aiRGIqG4tn9MQFRRXlW8dJHEDJoBEJlgw= X-Google-Smtp-Source: AGHT+IFEiQV6jVjHGLuh7HirhS/szOCkjsWzzdfQvVe86dY/G1MwA8SAqZnmENKihKawgY3W9gXhhQ== X-Received: by 2002:a5d:64ee:0:b0:3c9:c344:1652 with SMTP id ffacd0b85a97d-3d1af84ae2amr7349821f8f.6.1756729554177; Mon, 01 Sep 2025 05:25:54 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.25.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:25: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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Mark Yacoub Subject: [PATCH v6 01/16] drm/vkms: Expose device creation and destruction Date: Mon, 1 Sep 2025 14:25:26 +0200 Message-ID: <20250901122541.9983-2-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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(). Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 e8472d9b6e3b..78af37c7bd83 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 faux_device *fdev; @@ -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 faux_device *fdev; =20 diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_dr= v.h index 8013c31efe3b..959ab48fbb47 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.h +++ b/drivers/gpu/drm/vkms/vkms_drv.h @@ -258,6 +258,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.51.0 From nobody Sun Dec 14 06:22:02 2025 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.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 8FB55275B06 for ; Mon, 1 Sep 2025 12:25:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729559; cv=none; b=eicLj25eFtXwVXNvPHlysCUhz99dgy6HSE49a3HDvM37vNthl43tPVfvToaNMBaCVzbIE3t6dFdazTeILd9k7dDxb7AGfleM4vFmj4Jdoz71AMUWopgvRiMmJA/4L4NgWb8ECU8NeD/FM2SPqMzroYp54dVWPeJ5t/0ezhkqEn4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729559; c=relaxed/simple; bh=wux92M74JueNoRuqmQzbWUdNMliPKJ4X1MVVZafpMS4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pABo5/kkpn2BYd3JUPHA6JqDIUSQtj0a6qhe631zEgN0hzNLblKZm39kUf91IEiGBkrrjpEE5ef4SMEfvGVsFUY0SxYVZb8w2KulfFDQ3DINJ1/1qLAhES1spWChUXgPmgcwZ0HAjDAMLJgVOyEHpVvXO53Mh0ET+nmC7q1pZFo= 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=jvarCv5S; arc=none smtp.client-ip=209.85.221.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="jvarCv5S" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-3d1bf79d7acso1235362f8f.0 for ; Mon, 01 Sep 2025 05:25:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729556; x=1757334356; 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=WjVPBUPwOKGL6YGdiWZkpNL6A/aCE0ct1/x7Rycnv+I=; b=jvarCv5S7p4yqq6KM5f2NNEeV7XNN9L6yardfzBd6s8bXh+lld+N3SH1CTjc0XA1Ne upt80sRb/GPZt8DCpkaUjTrRt05ErNVPB6HfBcNqHAuYriDSSCiwPGVkc8q1cAEYJaVI mgkmTr9rXdD2jVYLWO7ZBddOORsSkaG0sLhkoqCQDpYDtbpOTvoij80/WS6lALs5/dZD 2qE7sRhFe/gmEYoJob4/8e/nGlDC1sp731lR9FKHCa9z6NYxGNQngcTN5XF+XLDuPhJu yd3KlzCjENt2zP5JK0FG87Ia5rsGfl1v+RuQGywq6955mLxFjt1bFcijJ4Z9UUAcj5VX OZdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729556; x=1757334356; 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=WjVPBUPwOKGL6YGdiWZkpNL6A/aCE0ct1/x7Rycnv+I=; b=Jme48n3Qsl8maRDviqvIdZRZbKWPQWBvLZoMmW4AyMDmvrVO2AzorVsaMsgB7xDsYq RCDfM2GsTJwViRnLaFEUEK4/y21OTJmzWKqMHMgVgoqT2q2ZPbXIqfZWmF9MCR8wMgzz qDFk14uXqLksuDJIJytAzYPj/vAYtrGq8EyHu6w2fZpdsiwHRGSMbNayAK7FolDAdiDn ldANvZklo1NbQlDdd7IDlyUcd3M39rmStXW0MQme/pXtlZsH7A7twqaXZNnkRZXVXx1h 7ZMiq0zoUzIpStZ3twV8XedCACdi2DFSPktpQ3iOO0eG+BzLhXOzgSX8TPXkL3LVTfO4 BgMQ== X-Forwarded-Encrypted: i=1; AJvYcCUjPVBTT6cf18FAs/5uFv35Lu9oL22jcLeKnc88yR6AmoXaSy0v2keP1TlkSPVwIRk9pIYA/aKE+wA49yY=@vger.kernel.org X-Gm-Message-State: AOJu0Yww5maT409wib7/vqy/mr+LnZ5KLpcgJV8EyHrRf2iYtsle/l15 gnqah2p1Feh9vgRqanXgJpYFnCuT/+tj0xYwkMz1QzbgG5cMRp0gh8c4 X-Gm-Gg: ASbGncvFR91EwzDZqr/37pa3EvuZNh46MQITYF41ACCc0Nm/ksPERbKokGT/uVCT2jy Lm8c0BYUJm5sfXG+NlgKb8qlp1A1mmtOS8Cn8gV7oqU2/Yw+oCf8ZNV84tFDSqG1YjwK9pnwmLx fpFp1NFGpyjnWvNdGbyLjvAXmpj01tsafnjwcwZKUVJo7c9rUBQABt4V2o+vMxFrjHqyAcrtNct Ru8sVQzTEMcWHYBy9BnVAmwULCc3GNW+VgxYXCcHx/ZLNYh5R8nRorv6l2g2zXFbJM0gptVF0PL 21kCFJdCpB/vrLP0CuQoAGzypa5M5CgMBXoAVPlvYD33r9V5PlkV6a9+SMZ8t2ykNLH+kcc7KuO gfevlY+TjLjUZ1bkNvw== X-Google-Smtp-Source: AGHT+IEUvRSZ0lOOSD/k4ytOsND9NTv0MfZ3fZ275SotM7VoNXHOU+gT25I3F0y7K+NXVrge/sRQ+g== X-Received: by 2002:a05:6000:2410:b0:3d8:e1de:7e4f with SMTP id ffacd0b85a97d-3d8e1edc849mr479954f8f.21.1756729555617; Mon, 01 Sep 2025 05:25:55 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.25.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:25:54 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v6 02/16] drm/vkms: Add and remove VKMS instances via configfs Date: Mon, 1 Sep 2025 14:25:27 +0200 Message-ID: <20250901122541.9983-3-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub 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 Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 8a8b1002931f..73521b9ff0c3 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 78af37c7bd83..c1f23e6a4b07 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.51.0 From nobody Sun Dec 14 06:22:02 2025 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CD40831DD9A for ; Mon, 1 Sep 2025 12:25:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729560; cv=none; b=JeriBar9LsKio2q5khmDvE2/t1dTHxcgagpu0bgGGIlopc1CWp3hOpIaJUuMNHZzQ9OYhiLgPbYnIQTnCXllcUKagT7Medu/YXXgYQwZVrwtBziTeOv7EbcCuNV61TafMjWOJ106iNPjp1ejD2NL8YsC6pwIBkJz+cz5WH+nTIo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729560; c=relaxed/simple; bh=CD/qBdhKGiVF4m6YjtdHR/qx2YHcGOL9PE1MTy/qwGw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=DRmCTiiNQi9/aG7ETecTFoGAvEbDCBZYiyGIzKRAAZ2L3YZ6VUcZsR3X4hqxK6rKbn9gVSTJCFFPVvd+/g69jf/Noz2LfdwBuutJws+jvsKdHRVkVJt01LAzRzs1PZmqLqFBai1Zvu+d7Rnc0fxRKC04RTeHcKBxwytynpJMEEc= 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=g9UggVtP; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="g9UggVtP" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-45b87a13242so14553275e9.0 for ; Mon, 01 Sep 2025 05:25:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729557; x=1757334357; 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=s6J822DCG0Tagx+YMQrYzj9nyMAeQiPi53HWBRRFDX8=; b=g9UggVtPhDiG8dml7iPKJVxrfti54taMuMo0EcwCxYaBddcou5RzoGUBwzK87cEWjR ecgVW+LKLKd+s23HfSX0tp961p2dZLQBGuh8ujaVr8MmMZXj5Xt7eEwt9k8SzjGTWUL2 vzPbj/Mbqo0FncBLr7sMx+VK061Ne6+Rn+RMzHCzOB9Qqgjn2+gcCatcHEzEc8W27s9+ jiZSz+IUK8YU/bpKKBuv4fpjlmpOL937H5a7FQ32YvLijJiPmg31DWRKvY9I5oXDNy8v o27QJMdBfKD/hPQo9m61UHY/YFuomWITgWCt0MkD9NGLm1w1iHGlPJaywIRcqgjKuxk3 0p1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729557; x=1757334357; 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=s6J822DCG0Tagx+YMQrYzj9nyMAeQiPi53HWBRRFDX8=; b=IhukUmbNapPxsCz7FVdoLvBMkcP5tDMJuZPU6IGnnhgiTnMU3VWz9qceVQwFU9JPx0 ftBXnDk2OVm8KErDMiLrcnE6cgKHGdVrtxQ3PKfxVnZJACFuSL+HLvqMXOqTVVTunKDm QpoTTlj276G2Wz4Tjb8YZHJzUwxYmLOT3g5X0oBnAf1ucEkevlC4o6Dga8sL7O1gj4BR xIYO/TbdVL7NBUOrtFnwZhl93ixNKRp/q0Q7fldM8ucKdkLaTOuRXLkxSnqFGr5MOgtx e+NZdT1L0dJieHc+Td+gIXTtDQ6MLpvLdKK/atowtkEACujfvdGqFHv1tK74ZaffGVsJ yggw== X-Forwarded-Encrypted: i=1; AJvYcCXcqApuW4GBFa03RwUPj/X1hyMOb8qhVgZ0ANCnIlkkWxmQQQQqUfpBuyTNLlhcs5u1Tr9JBU5hWCltkBw=@vger.kernel.org X-Gm-Message-State: AOJu0YwBXEyEst3QuYwEJf6NPsQ1oNfPlTM+FVWnNW4t6jGfN56PAukZ BMQKUvAVDxrV/BVqfXrPvHGM4KfhfQiXF681+Dr6D9cjzKCL6ekb+sY1 X-Gm-Gg: ASbGncuAGrp515mClff/1YvkMRydPdnlfko2HUW3qh6mTjW9A89cHdsppuhX0TiSDBQ t+PA4QGr/BX9f0Rm0HluC7imxlMdl4i5ZSW03JkC3Xz5AAkw/JcBlSJfw/yVVHAcKw3i6dYP56w 1P08izz92wktGaxSLFb2bkoHyPiY5Ft+/Jk/nbHwL3xu9rZjffiWJoRhXY5Zb3WpPAhsfuXENu3 ti9WmXOE1wTmFTGycOPOgGRykfV8xzyf+/C4/Vssr5Hw4URa8gYFnQ4o9rg9Lki0JcF9fCrwZUZ jb9ePJRXEd6JWT4J6ScFjIUyH033M4ZYvSALH2eDBDy3qmgYxO4wDeWjXN2gKcz366SYR5N2poQ U6ScQI4K6PrsGxF2ts53TWWuYu1BX X-Google-Smtp-Source: AGHT+IFrYs0xdumtDpy/wbHYYgQBN8SFLjE3tN0WJJPP30ut3Q3K4yClWwur8tCR8k25h5oQDUgrRg== X-Received: by 2002:a05:600c:a41:b0:45b:627a:60cf with SMTP id 5b1f17b1804b1-45b8559b8edmr77708035e9.24.1756729557000; Mon, 01 Sep 2025 05:25:57 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.25.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:25:56 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v6 03/16] drm/vkms: Allow to configure multiple planes via configfs Date: Mon, 1 Sep 2025 14:25:28 +0200 Message-ID: <20250901122541.9983-4-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub 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 Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 73521b9ff0c3..c0c892e4e27c 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.51.0 From nobody Sun Dec 14 06:22:02 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 4B82B322DA9 for ; Mon, 1 Sep 2025 12:26:00 +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=1756729562; cv=none; b=ENUqn7wWmHgM7S6Qc+m8R5GDwY9eSKXPlfKFTRp1CUC2XX03vVqlOj9tBLgn80pdxIQTnWFgzi12Ze/oIHcpP5p+0LbuODSOg4afCI+eHOA0BzHLRPi1VWaOLQeg9sHklhKzSO1t8qI7JT6TRIzpbkFoYBx4VW0gsdSQ5R2wDAA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729562; c=relaxed/simple; bh=Ys+5qi9VOUrGAW0zWU3HKDZTgVChzkJJh8Nl6xLKydY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=o+g5c3O+V2ThHMCb0dISupmDLWEZZS9hGN9eiPlsiC7fu2I7jgStEK/jRqZGfCR3oPFZNEZvxt6MeKkGrcMlEQ4Cvmatzd/HUVz5UhVX8zbHlXH3AJyAJ8X6aLd4jH57k3lLqA+o5ymQ6V/bzGTKrhr+4EaOxw/AMKDNWhpRKlU= 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=A1dQ9gGC; 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="A1dQ9gGC" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-45b7da4101fso10917665e9.3 for ; Mon, 01 Sep 2025 05:26:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729559; x=1757334359; 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=8pgFBa2DZZvz331tX1/wrGaAvtDbVvMgoXHb3q0CB7c=; b=A1dQ9gGCjb5mnyk5KnD9fr91EUZxThukDzxreZeu6SBgxQeogBL/6bCIa8SaPOfgsX gy2m2G/LqINp4tFFvQ6kEjY2yqTZllAF/S6f5GeQuFQGfrb6ofOGB/Fx0hqCAchgu+tS UlnTcY51Pl5GY/UGVJm0E1fIrkDyU5c8HeV1KmGDko8OkIgW69RXw/iCUSBZ5n9kI1D5 wxkNRt3llHH/09GCBVM2n8zlCXlLRqkAB/qoZmEvIsqzS6EQyVK1X1GZDSB9YdF7Uv8h wLYCkdLutWCxlWteUdTUYdYQrLgLEGyX2iP3gSHceD/1knsKXiZxt5r/pLq7XuhooT/r VWog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729559; x=1757334359; 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=8pgFBa2DZZvz331tX1/wrGaAvtDbVvMgoXHb3q0CB7c=; b=gEMIsU82Ju4dIdwKVnxzSQO9aU2+R+nu+nPzS7Y3Yb0NZBYgerFaSFu7yPHX3Q+e2T MHqzIKofilXZCCyoXk/e8FhcgKiTLB8mCoq1lf6wwuF+q0uthMHLyAXwycIwlNbGltnd nqDfsYt9NnNKqBn8IDX0wU3xC5iM/0+fNTAtBfiloeftMNRjNiYRDPlrom74CbDRXxVp J8hwI2b677G9jLWewRzTsae6g012zUQzMqcrwtMO45/kbzKfHpYbWYHQC+jTQAYctb85 FH5yeOAxwrwIwgCbggXPtH3yJMsMppHFPFW2zNDcnsWwQsOSYCiysbsQ/KcgZ13rrIP3 tZhg== X-Forwarded-Encrypted: i=1; AJvYcCVLwE4gcWe/QmmrfCt4vGVzny6Bw/qt3ZjUyVdoKUIbqaxhK2xq7NeT0LnUlOK8PyTHlQ88k8zN4iiBl1Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yxv0LP30qUpHkX3/u3ZglvhaU4z9FDDtY/yFlTO9jGnnFWjP2et eKgS13dax0HFxYPSp0lcsC1D9FFnpPM6MSmiLJ+Q7NFSDcLVkbKeRUWL X-Gm-Gg: ASbGnctvb8G/EBfG7izxSUiYDE7xTELniHvJI17fVzvaXYAYSvWpOXYSKdczIFpSP1q M1unp10oFiK0fJrvARAVv4iF8jHdu0szTZHg7d3O+DQi4b6KOC0DwW+diTM5fmfGBMJqPd7h8Gh DIVv31DIO89kyjCs48xL0l2ou86SP5vIIg9/iCpntL2lwAylxgePV4IAKnf7Fxyci3AaZ0hal8c DFHg3rKOTRlizTNlJok5X45D8fUGhYQKeXVJoyfXFvRGqtqmgszTzaHoc50zIKw3lg1TUL8KDHc nUxcxVjn4q3w+nZS3NF91DqRhWzUR3c6c1fTF9pYeJZsGRJlKgJRKiMa//t7Uoc706ndQNj0GMq q6jrQszFHxlhZTgv9fA== X-Google-Smtp-Source: AGHT+IFIQW8wGdqAahWA03USmO7rm9GTiSdBBhXJU4ifoMtia9kc/qorfnpam+G2efQI0Rxva99X7g== X-Received: by 2002:a05:600c:3b28:b0:456:201a:99f with SMTP id 5b1f17b1804b1-45b8730d443mr57225815e9.18.1756729558342; Mon, 01 Sep 2025 05:25:58 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.25.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:25:57 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v6 04/16] drm/vkms: Allow to configure the plane type via configfs Date: Mon, 1 Sep 2025 14:25:29 +0200 Message-ID: <20250901122541.9983-5-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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 Tested-by: Mark Yacoub 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 Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 c0c892e4e27c..dd880ce6811c 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.51.0 From nobody Sun Dec 14 06:22:02 2025 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BF3F2326D5B for ; Mon, 1 Sep 2025 12:26:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729563; cv=none; b=TBs9Nhrq5+O/PASPxasv7+iPImEWpi16+9A+arRhdyt5uNBi+AKAdoHHaaWLWCUnyIpG8qLdBTVFcJEGzeNaa135vKQS7c/7Mow8A/BZtkpXwyPRCnNJ1XUocbT7tRM4V+8IgAnbEf/w7f8kWLk8PhOr01KPJd6Wf2Ho1bl9JOI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729563; c=relaxed/simple; bh=N7jfKW0HejF8V/f2I/ck26ZqZpC29vYRSlYZ0Zq3I3s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=fvCqf/MRv8EhvMNXSBLVjXo0RFfbgAU8Ry9h6vAlR36TLxihwlx2u2kQpGajceRReufotTqTDetqQzoU8Jbi4yvvRqWZUy8TX2XiKg3CQThdGNfYb58UCXsbEGok7VFh+doibe8DXOztIch8O0nKWwlTJeevJnLCpNVsLw5NCAQ= 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=EAKxGbdR; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EAKxGbdR" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-3d0dd9c9229so2200954f8f.1 for ; Mon, 01 Sep 2025 05:26:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729560; x=1757334360; 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=9Kd+8v+lNqUBf/GT3Tpl70jL5RnUvrkjCq/aFbg8lmY=; b=EAKxGbdReRRJCLVasMHz1ZWngkVWLMVZLSoTD9oOSpCTMqkSMloCJmh+Hui6abCin3 dnEt/NeTV0RpFOd9aP6Z9f/nI4HYTBOoTaZSpLEJbtWqOI+g0l6yMfqukSsjRMETSBJu DkyFoF7jpyq3XUw+IXW//JvHXVQKjYlm0dlfxA6BxNEbjK/LwavDfk4PTuDYtxKbMUIv 2fAgwEcMtpEweAvU/Q+gMYDgrGkLoCA3hpprCeSmrCxsH6ifc5RdJbWelPNyzYB2WT7x Juk3ozMOcjHB/vd5zfKq+u31DOtxLD2AXA9IPqpTVB3mSpsLH+Z1VpYJ2SQH0NAuOuAq JpSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729560; x=1757334360; 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=9Kd+8v+lNqUBf/GT3Tpl70jL5RnUvrkjCq/aFbg8lmY=; b=gOS/ykre/M/UasQ+PO9Z+29YvX2YMn9sytOnnoXdnguWT6h/ihvmj0678fEZRZSLMo NCPi5AE9KX2SbIBjEH0OQBR+j+39CjMT/JL8dz9XD5qpX6Gz2YsFW4eloc/gDOgMwdU/ hNF7nGhvXEsKev8NJ5acKF/ujXwLab2/PxVF2xIMKOiz4+kvLnsiJn1ggW5hi6gKe/jD ZM8P8Vca9n6t9adV9VrAUO4AcLS0djhIoJV2FRpg9bIyGaKI5z3SR2/6Yz4qDDsqM2IZ OU6DhSiiZmCKyaWlRklAnPocmLvAMJj6me36FWQl2xGTEP18soQUlN2wS8f4HMXvk++Z SgyA== X-Forwarded-Encrypted: i=1; AJvYcCWMQA+9MWvWSbCoHDMQYDpRyPWWtRhTvWGdhNMfcK9Vox+DTV6xUzR08Vpy5jeWNhzJ1dxqivHrQsC03rg=@vger.kernel.org X-Gm-Message-State: AOJu0YwVpTnpmB2Yhbb4a9AEVy9m6mgQzN6XftSYLVuR7mfWNyDBMtDe gFo2iN7Ju9gW4LzdHUKi+emzCcSL9/pQJ1GkIAnPgWuq/cSZhs4CVZw0 X-Gm-Gg: ASbGncuyYyx8/2v53MfufG211zL6CnqxqI3pxwYMPr5djRc4Cjp3mQ0qUOyEH+I9T2d H+uCzR5cEkQsMkm35pmGy88Ux7DHDaLgHaL6Pwa3Gbv05Eof46Qgtr+LHoNnKGGWvu0UBS0g1Sv 7rGaCP8umc3+dUNk+IA6bQ0YairYNrQ0M7hRfNI78UdStAt3K7TyPAeSg44VgdF2SRzTSgmq9Xn 07yLdTq9MDegUmft8sao56kJf8K1QdPpaRQr+NRevpDmX41ZxnGlxCKHGnGnQPgc+eXoPTqMAbG g8Fr7WojKLcV7tQjVZ4jFrYkg6+ngEVQ8AQouVwAKeFVRC2wQWtyezVdYV/EjBDuFkaVaM2uM2q oip8txCcRbAvWwLrKvw== X-Google-Smtp-Source: AGHT+IGuuEBOjNbXGYS5rZ0vDEw96Ox0pQNqekC/kGf/n5YBjqljMAsIMyYDoKNWBmt/er9Fy0jYKA== X-Received: by 2002:a05:6000:420e:b0:3ca:3b3f:ec8e with SMTP id ffacd0b85a97d-3d1dfc072bamr8174078f8f.39.1756729559914; Mon, 01 Sep 2025 05:25:59 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.25.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:25:59 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v6 05/16] drm/vkms: Allow to configure multiple CRTCs via configfs Date: Mon, 1 Sep 2025 14:25:30 +0200 Message-ID: <20250901122541.9983-6-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub 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 Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 dd880ce6811c..7396447b5e58 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.51.0 From nobody Sun Dec 14 06:22:02 2025 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3E36A327793 for ; Mon, 1 Sep 2025 12:26:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729565; cv=none; b=r0Ja6ah+c1O9uBRHYFiLRdX4Z7VGEZuGjPgmMTxeSMf2sUi++wrJ3CMQA2i54Y8098CKA5WdZjcPBHE9VoOjFBgndGL8s4zB7H4FPiWlHrk3b3oJl/pmcPg92ayb6cFVDXRWzc4JIOv/Le+X1jHKrDkOREyy8tbm3o+qPo+ZQFE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729565; c=relaxed/simple; bh=hsHIFMTVRSRDHWUv8g6T8LuLhM3imqVkRiHXF1j90Hs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SuXzAGAjIsxrc9DJ17AMeByL2FeYfHdG32Bc/3UWQsR8lznfrMeYyfh6qe8z0QP5HSkj9pzZYSKmpMKpHln6yQHHpDaqIr/M2Bqt47H4GmXgyV+HSI6l3RAAxXmXxmRVYDTrXfq8LGPwDbdS6/m5xLkME6yrLDTiGLe1dhxjiHc= 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=k+Gfril/; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="k+Gfril/" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-3d1bf79d758so1754502f8f.1 for ; Mon, 01 Sep 2025 05:26:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729561; x=1757334361; 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=PhgkvBTCE0C0PpkJQl0fVQ7vOytz85QGtS9e86SU8oY=; b=k+Gfril/cZy4J92f5OJYt6M57MbSTQ2THCcwBvQBMSQYuS7k9U/te8as6sMGSC6M8g HkobC1ng9JxYavaawfdwdXAPjtNX4D6QrC7C8VnF3wFaD1LsxS2BN6V6yVVczbow6EC+ glktJmh/dN+TPo0VPTOjx3F75GeSizLbXE3t/rdhAH2JvGxcEuqWyuNesQQGkJpl+JAI 4cTtYvZ1Afi9uT45S0ArCJF979QXAchyrR5XxiSiMMCFju9bCXNmKmKKjIh6tG3c25Xs 88AKZVwB6DidelXc55MBZ0E3VoyZvd3kksP2LPTlgPAb2G2baOvw7RHrXTg0T4bz/pE/ HmcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729561; x=1757334361; 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=PhgkvBTCE0C0PpkJQl0fVQ7vOytz85QGtS9e86SU8oY=; b=tKMIDE3h5XEytbJj28f9gWeg3gOgLcQNSjwR68N8N9S+iJzhhfEw7mitauyFi8quMK lRajmP7uiWsjvx+ECBxsJR2KIzT2iAh/h0dLOLZGPxeOoDrNKiOQgZYRY7iarmGtsQLR aL8kOEPaRz2zuVhMVtFZmDPH9XjqAw+XtVUbusPQdFQHgH23vCVyd0yoYMXg7nkUv/YC FWf3bM7ZuIsZZloQ3jQ74uij54/7TZykhzAF7lM4wO25edFQTmxIH1s6cyCwJQtgcxuF r4CMvWcuWL4aRsiYM6e2aILfe8oNORAXbpa3Tk+DD3LSchvspGxHcqY9DiEyh9UhrlvB 1wPQ== X-Forwarded-Encrypted: i=1; AJvYcCUkLNVnuiL7p0+J5hk3iI1K9tBQiq/nfuAINxXPJQKVIAl9TUbKLo8nfGNWDncmSlUccR5B4s36pTclupg=@vger.kernel.org X-Gm-Message-State: AOJu0YzvdZ2W/0E7UdeSRtGL1P8TWKsIQcYym/tpUuvILuFzkk95kjL9 vllW5h53fJHenXd9Xr0EAOuSKIVT8R2gxMMjWxheHz/c1xq8vJmBJIs+ X-Gm-Gg: ASbGncvamKtqQiRhY2VzmH9o7yu8Qx4e/2NcMYMQe7mGRjbCee3tPQy3wHgU6QMnIau b8yt7lBMW2BM+PMAJMfktJ/nrJCxTP3RCWGN9MseJWes41b8l2xJpZbBbNvYBokh6hmMMTwWazL f2mPkJhkZ5v6xpXkaqBUNmJFo7r8zuXKBj6NMKs/9xgB2DatX6nSBL564MDN10W2pLqPxXMhfHM diIrK2GXmsvbSAv6tK4nZmZDbbQs3zb4eoQ/VTWEJjEQ6+/HdcoHk0+Ep3C/awsFGgqENJyI2hI s0aP+/SofZ59WljBBkcMn02l/6UMMMGjTNWi2xgDjsmbOdykNiorZCvG/TKgFsymDzEWRj1vkyv HxxTcIvPMVPpI0FoT3fGuSxNR0hmt X-Google-Smtp-Source: AGHT+IFyxCd/v1nUFUVSnKjpf2X7+zw+bdrPnqE3ZWLFkWIx3xO0PpowOJcQy9w6v5eXOmfgB96NYg== X-Received: by 2002:a05:6000:2889:b0:3d1:61f0:d256 with SMTP id ffacd0b85a97d-3d1e01d549cmr6713622f8f.42.1756729561295; Mon, 01 Sep 2025 05:26:01 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.26.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:26:00 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v6 06/16] drm/vkms: Allow to configure CRTC writeback support via configfs Date: Mon, 1 Sep 2025 14:25:31 +0200 Message-ID: <20250901122541.9983-7-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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 Tested-by: Mark Yacoub 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 Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 7396447b5e58..9f76918bb1d1 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.51.0 From nobody Sun Dec 14 06:22:02 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 905A532BF37 for ; Mon, 1 Sep 2025 12:26:04 +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=1756729566; cv=none; b=O2TBn2AwBzJ1G/FhCDgtCVHPrYR53rByCTtbpwc5DlIcmcFFbX2EWyVWU+los/oTf4cdDMrJ6Z4+uajkCctMd+S5+CNtbsTDHYDUoAwoTs869SEdUSKSt84fNOhubU0cF9pcx4AmqDvqa4IaR1rx4kU/8snehLrNRfvVUwVe2/E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729566; c=relaxed/simple; bh=lpbBUhTCpDDk06PPeWfR8sE0UIN8opcNWrTbfE+/pMc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OLmuMsB9MKhywqneEZzLE8Dszd/nrNLkXDMOT/A879mJ9wfDwNki8gkzsQpgMCEnX/oYl4RP/aIt/3Rosm2bS2doOJzpJD+6khBZP8x31yLq8J1JDbV03CGDnfEl6l3PuLD4vQ/Kb/bbym6x8xqAeIxQs/fLOGFs8WEtlT46OCk= 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=IRIFKQS7; 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="IRIFKQS7" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-45b8b7ac427so6072085e9.2 for ; Mon, 01 Sep 2025 05:26:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729563; x=1757334363; 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=S92TFORdFpPvYJUBMVUr5Ti+IlOYwkoe/RCwplITijU=; b=IRIFKQS7n8CrQJK0LMzKCafCgyi0yyA+6UBLkZHFMgkEQK1qYwK8r4F/c8ecrTmYok 5Nac5F4xpJFaBnfgqThyOJS3IruujH6O9r1dG2R0JZwzPVnBxWeZvrLTROAbp5qNC4c8 gKaN4mTONyh/07p53afMV79aAhhgpL2LuAzlriiy7Un6g37mA1i9btsImVZXylOS/z52 ztWEPIJr7gzZra0z0bM+KKNJhLgZ4DfwwbOkKiWWjcveTMOoM7MXa3pRz83OtcfzZoO2 xr8QhXsFSEnYbxNSNPfIDTZeCUav/Ha/FOQhkq8QXNt+SYDd55KpNbHr/OZLYQ2Iv5lT o7mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729563; x=1757334363; 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=S92TFORdFpPvYJUBMVUr5Ti+IlOYwkoe/RCwplITijU=; b=BMci8MWfv8fcgj721dhLemxg4s9YSk1xjD5c7JKyJ1GuiNhe6xrFgAekArhj0vzGwy JampmfAP7dk3yFHnec2KYY8aHo1YcH2sHaPZ1MrFvV7aHak0nABo9LLy4AZx2c4hrWBW pnBGM3Wr24DJBxNyRakFN0vPdZSD8U3GsKq3bhbz3vUoWu5bOo/0zLVWy6PVEDCGdLBp jJrjOkcaIz2s2KxPfjWGaxm9p/KEml3T1Qnwg2IK6CENxQhl948Q4YA9GZPs4Ho9vjdT VBdSfdCHW7p9FzM7U11MP74XHmAbkj3KxXVcOtSLQ7KAch2qf5BE/086lANj9fr/EGW0 xBMg== X-Forwarded-Encrypted: i=1; AJvYcCVCAXL49tfYBOzd4EZyUBA2g8xC1k+SYURzZOGU6H/7DIaDdjPQvHyT2vJqPJyqd3p0eqJwQAvA+fstNBk=@vger.kernel.org X-Gm-Message-State: AOJu0YwY7BjJ03xHRrwbmSTGS/2ADUA9xIayIkAEDKSbxUrglm/4MILQ epMu8j9JhHbr40pPQ43g7/UdNfX8e/vjKiRCqza75mqbjlIWm26Fh3n3 X-Gm-Gg: ASbGnctyIZpDBeSlOHg34GTlfGbnuxfyKkG4Gi+4rfE9hKmKHafRR0CtnSfDqjwzw21 3QgsCj8d1RZtYMXTqF6/ZFnxLBRk+K4uO05jvFi/QP2VEu/SlpBxYKLieDvNsuNSUhSNhB0J/A4 72wHmgYyIr7nxtWcdUvTWcriKq0CJY8yuDIA7L1TDRceD+reqRNZUPSN7U4c0yPLcQi/laK+NqC +N6wGstyj7UMJaqFaGGhgCZyNh1oXmG89fB8u6/x6deQi3Oz/w/t75vt3g0Ija5OJNd9mEIHPU1 JrF0UTy/ymMuai5mBcKeb8O9gLOaDAPw9y0u/zijMNAOsFB1bkqlY1W4iJPOSosBfpndwTnuhnE nsVUshZzMRcPMYgaKUQ== X-Google-Smtp-Source: AGHT+IF8n8jun5wPEd0Tp7welazHHZJACkUZPP6YFYKmHpTRnTGqX90j4tqRwzGL6bHiiTUh4a335g== X-Received: by 2002:a05:600c:35c2:b0:459:e466:1bec with SMTP id 5b1f17b1804b1-45b928b8bbdmr3288095e9.2.1756729562704; Mon, 01 Sep 2025 05:26:02 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.26.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:26:02 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v6 07/16] drm/vkms: Allow to attach planes and CRTCs via configfs Date: Mon, 1 Sep 2025 14:25:32 +0200 Message-ID: <20250901122541.9983-8-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub 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 Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 9f76918bb1d1..c79fca3d3a11 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.51.0 From nobody Sun Dec 14 06:22:02 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 D2F983314AC for ; Mon, 1 Sep 2025 12:26:05 +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=1756729567; cv=none; b=SvX9iUlxi3bkFlPiavMvyiFvQYCBfbOcKuS+UhIw0NCCTy17fBVZC4meleQbtZ9gl8ELLRH41TLtzfMhgIRc6JOVzrckaQcYX8IdjUdIiyb2PRjJ3Cyy3FTxz50RSgkJZsPV/crydkVi1++3LQIgh0ZSfs9yQDOTNZ1fbUEEmGQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729567; c=relaxed/simple; bh=jGsDChNXv0/9j479UC2z0QgXhpmuNpLFQDf9xY4pnp0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=M4Kxrws6dCfVAqC4CI3+q7BWkwXQ6pv0Auh9RGoMe+OAPJKAAfRdSfJYxGRf8g0vid11KEF9v5FCSg+jws9HrDhoK5APU0gqjTA+MxawjCP59zUvWM9IsB/B4OGMOKWfbm2Spp2zDxVVsrniHJ6Mm/hLpwIFpnetX45gKXkwbiw= 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=WEe1Unwy; 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="WEe1Unwy" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-3ce47d1f1f8so2881406f8f.2 for ; Mon, 01 Sep 2025 05:26:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729564; x=1757334364; 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=+JgtE5NuuXHXwQbDBEsNd3TAksX6P3TmTjBg+zdfY+I=; b=WEe1UnwyJfoCrZLbE1hNEE+9f6dW9y5xwqRd9BP2f0iYH8f698dg74bZ0RFgPfQY3w SgrtkqIrSTO00JvhB+rrcz3UyUm82AGFhA3jv3an/or5CQMABaxj4kr8NJcRPfLWhhoz VUsw8ZCMdaMvVNAMhAQ0gJXVSFrvTkX9WXa5wbt5zz8L3+hVTKjlcmC9SrwPwZ4aCEHi i5fHGh6je7LXAg71iIkHCZ245WpaZrMdhN1WneNR4IpMzO1MStlC0ROyvDdMtsQpHy65 MMoaeBcBZPI1V+FzSDVaNr1Qe7Ies7xSC4FoIsK6zVUof+wjqGclBhK5kJGRTNcqqJLF aeDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729564; x=1757334364; 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=+JgtE5NuuXHXwQbDBEsNd3TAksX6P3TmTjBg+zdfY+I=; b=U+21q8Y2ljTI4mXUe2ljOwh1rTmygtmqht/eLA1nsJK9SCpzvUyr4vTncl8arei7S9 7QLQP2Pt5I93ddn1nH/LGWlHKuBXM0vy/7Z5EwqAPlPEpEWj97G7iYIWB++bK+lVDsqG 6gOd4ejNY7LcpbSF4xnGs+VNEVxlLm5KxmvBsO/bN/ZkzB/C5psJQIf5p+gWX1f9pG/8 5WLbDOo/QHrloBNRpT3FQGGjZzfzkYXNOFBV7kWvlODBNsVzHFZS2Q16eTBCfi4mKNfE gmfwvGjyRmn9FJJ8lsnFDRakpIjKe0nNjpWrxXLy9ZO2Qya9V9f8wfgjMj91O/FbXkam NQTw== X-Forwarded-Encrypted: i=1; AJvYcCVLocQ2sU6JRVOq17j1OJ4X723nQZdBMP4HJgg1KH/iBOKjFOjylSQvxTeDlTSkPoFkaR7r/UBq7ecYjVk=@vger.kernel.org X-Gm-Message-State: AOJu0YyjCAxgdJF0nC/u13V+y6VROxKwfvoq8xuKJPKWM6/ZmM0Wd6G1 PO/rsJSP5HiSXv4GXLetBXPnzn2LKRQMMTJXeehUneVQIkXj3APU8inQ X-Gm-Gg: ASbGncvqnOX6dJaL8FizKOfFFV3yo9XOHDCKCxMT88XQBJAzxSzCCTq3pd5igof+xOO 5so4Zi4pcItBOoxHfIIoK7ylPQ5hf54tDMNk3J76fet3FYNptG9dU4mBRRONc7mR9af4uxpLgk6 bpTQ6czdb6+sMbJTM2kHhVe5dk6IAC9pLCxcneqNu3VzAr/hJJqMQF97p2xFsoJUiNeMVlG1XCs k3eNRBmyd+gfaARgDvXy7MMPs+wPPZ+3AGnW5EWGzAXa47kddW9T9espyQhqHkcpn9W3PxKz+vs uX4nBFa2J2hwckOiJt8rrnMEvO80fTc/Y9/xLKEda/ZCidJ0zswB7oE9DXZvzmSICnJIk6WGBON ePWllj320QaE6q+45eor0TKec/a4EWnpPQZgrb3g= X-Google-Smtp-Source: AGHT+IFUS9N82v4LejUCnaAT3ShRWZlyXqFT/fzgSHXZJE0Z1sfiw8nQGQijs8Remh450z6mWmsI/g== X-Received: by 2002:adf:f10c:0:b0:3d2:45f0:45bd with SMTP id ffacd0b85a97d-3d245f04afbmr4208349f8f.23.1756729563972; Mon, 01 Sep 2025 05:26:03 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.26.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:26:03 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v6 08/16] drm/vkms: Allow to configure multiple encoders via configfs Date: Mon, 1 Sep 2025 14:25:33 +0200 Message-ID: <20250901122541.9983-9-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub 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 Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 c79fca3d3a11..622fbfa12a84 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.51.0 From nobody Sun Dec 14 06:22:02 2025 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2063B32C30C for ; Mon, 1 Sep 2025 12:26:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729569; cv=none; b=hfVCJuN1HZZRuGME2gOkz8j1Ha9Q22LsM9Vis06rW/ivJf3eomyW9Tuj+7XvrnaaNxwkm0ns5ax/3dxij2bezy0MjQ4NKwmf2oFpKfvWJL/LNcQ5VAJNWH+HcTeQgjmf4zbKi9d2vOKQRAmhGOmiyyr0yOlJQXJ0O20zfixSyZQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729569; c=relaxed/simple; bh=zMW6F7otXIqwAlRi4AAlq5UaUnv7suG2zVgsIwghw7Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=G91VEEjkoQ+KBO2fl5U3Oz3m1aDVCtCdHpYDSMobKHndOcl1DuRPhz0cTjcDp4AFv3h447QhXgTuODHytoBuvbIbLFR6SVnH7pnldt71mIKs+wrhfpUH8CTB/by9DCzSHfO6MFIpCPmw3rPLr/KvmFBd+4XGTEosDwSAk1PfeaA= 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=Cra7R28Y; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Cra7R28Y" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-45b86157e18so9948545e9.0 for ; Mon, 01 Sep 2025 05:26:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729565; x=1757334365; 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=p5emT1txqOTQl8l8EdMKxfHnYSU0tdBtClIdWbUlfFA=; b=Cra7R28YPw5dUU7wYcuakvS0RWeVaHWYMV9UnZAK3+ynpVeFOnIUQgyMUEqvgYepzu iO5oUMpGLU8T524PNgxUWfAID/JGGyy0B3UY9SyrdUkVTwexmVuwFDYsY/PUHVDLrjAD CtMYESeqX2+o8y19GErH4dWuy2LDq4sQArwg+v984bLTzJHOI+JtwMmw96RsfQMRhSrX +aBixYPGmiMlg96So3JM19cVBnk7OF08BsgaPghMYykpeTi8yuFm0WmwrK3gHj/wL0eH I2kWGzuCwrwxn9ONzsbn771pq6/xXoRvtP9kpQR72mcDTjEonQHFgadtGAHoOUNzD7GL zyQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729565; x=1757334365; 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=p5emT1txqOTQl8l8EdMKxfHnYSU0tdBtClIdWbUlfFA=; b=d7Xv3Kb36GWgmpEfRluTQx/bsTdGWmi/JXUFgCRCDqNomnGo6ukxEQer9FzIsT7pmS ymatd3HN2OojyuLaoKX99vVdmm8SBMjWwqInkH1XrQVE2zfe5CdbsyWT5NyyW5jYJdsU K7d1jvRGiwjJcxkQvu1jFrIyFWCrmeuiy0HnLbsXc1AvRJdcJEmMzmYCcX0E6DCgKYDq wp3ckeULvDFZ7E0TEVejmcxwIfifLY+iliImHzAzhSlaqLWIqqs5XXh9lH350daHhGpx rBRsWY5zUugE6rPcdYN8jkW1KNJH6qdOZ76lHXNZ6H6lV3R/Pnkyup4vVSEmNn2NtFPi ADAQ== X-Forwarded-Encrypted: i=1; AJvYcCVaqSARpHpTUkHszgAbWBIqNKJOBqj93/CnQOWOzCZ4x1eVqqW8Cyx4kIzXRc5QcH+xjiqiMWYvkbuRq7w=@vger.kernel.org X-Gm-Message-State: AOJu0Yx4oo/2LTtNUykx+ErjqAAPcuWrXeeaWGEWBiMsP7x2fHZNODXE LBac+n+cmfvjglLZLAPygEufZj3y4CYV9+v3D0YGQBRuew6sIsXT41+N X-Gm-Gg: ASbGnctYHmKhD8baNhm0H7+7VCJzZZqLCrxxyHx9BVJPPf3i+7vj6S7qRRgAznNHX5C JrrYN75FhjC2ywI/tMDA54bPRwydurdNGZBmCp5x+FaVoAlXMjsDTm+VOgRNKNi6UwB/MABvCIS Bqx9Ho3DQkmYBq27WM7POORAqRVQPfmlA4ToO2MMdtRsiOsJe8E8rYfMOFPMxuMBYMmn/x+HThl P9yRhfg6QE+6dPyGVmDlFKGadyEW7YajYcidThPFfUBuDvM5ehkvveLvS0TMOrjC5vibbcbuZf1 vaWKYdFceazhzknI5p0LOTpb84JyY3Bh9jJAJM39CQYjjY9X8/9zD/HA8aWnGXghIOqs8UGK0K7 GG2N3uKJcgNqNlwHH1/q0fCgociX5 X-Google-Smtp-Source: AGHT+IH9OUHSYnmDvfNvwQVhN2EaEpCAmFC2+CVmXG8+ZkONOcCBzxF4EINwhVpS1L3JpXR2CwAlgg== X-Received: by 2002:a05:600c:4452:b0:455:f187:6203 with SMTP id 5b1f17b1804b1-45b855983cfmr53456195e9.27.1756729565277; Mon, 01 Sep 2025 05:26:05 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.26.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:26:04 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v6 09/16] drm/vkms: Allow to attach encoders and CRTCs via configfs Date: Mon, 1 Sep 2025 14:25:34 +0200 Message-ID: <20250901122541.9983-10-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub 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 Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 622fbfa12a84..585effe90550 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.51.0 From nobody Sun Dec 14 06:22:02 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 05287327793 for ; Mon, 1 Sep 2025 12:26:08 +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=1756729571; cv=none; b=PTRJ+33Rx4e0KgTQLLxivFW+MffGKSUNZHu2hgTddHXqwbvUuTRRdQvODhxSRJFXFlU7kz2zXEtQwETqBCKsFJ6ug6mkDvUqgVbCu3EpkJtU8chVIeEVBUb7O+kBLL03Zs/WXB8v+5Sbof9IHa/AWlXklbUrQX2h2VjMUslXn9o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729571; c=relaxed/simple; bh=XFSBXaaD6OaoZco136/dUGDK+RiVWSWCvGFUfvxzcnI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=av1wMCSmi7BHI6NMXW0j1QVNgYNyi3iSP0Cu+BLk6XEku3exKZnrETdnDc3qdH9HGvsH+AVpNWqQDGeHXdevRFDeaFLSTZoLP6vHhqHnS4bdL7SC9cqdI2dNwwfCr3HpCc52I+A1c+lqkt3KzvtHmmoW21PhiTC92Tw58lfM3VA= 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=QoVtFxxO; 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="QoVtFxxO" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-45b84367affso19200625e9.3 for ; Mon, 01 Sep 2025 05:26:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729567; x=1757334367; 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=+EdjA0vhrNddd+9i5gDB5y7gnZlz2SruMLXGVcghljI=; b=QoVtFxxOUPmiNykZx+yoXRZv7Q2trNODMVYqmKieAzCpH3CQa7bWu+MEGLva9SbZCi +Ie9cD3cNCdK2A3/oIYOUa8gIIj2pvu3WlQEYcs85tOX6bJy8yIZHvX7VSUY8RzLsatV Jv/NaH0n8as71HznCVNsGB2DrVZx8NzXBy5s0exFmQPgPZTgyAtKMC0kV1UnhlB6Pabh rM2PDi+YiHq9V1FXgUVCaYrk4bCY3ttJi8vQw8s6CQ3kbo+GzWPVBarQ7ZGVbhPM1r8p FSf1scpMasqih4Te7awz4yBDJV+zofxbb3SNE9w53sB8L6JMvX3FRGHvOlFHueyie9VJ RNRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729567; x=1757334367; 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=+EdjA0vhrNddd+9i5gDB5y7gnZlz2SruMLXGVcghljI=; b=MEadAYgt2Yv/qSunRjF1NTrJ0CdJmei0RvGHbbiJIzoKUR+QXcCBeuJzmPqUGxjKdY jKIAHq7XwZGIiBSJx60a9AVH+znQIwOS/cQa3gSoAlgaLqDj+PBqIk+cAb2WMOtPUIsc e2UH8Bn/tq02CxHNnZx2jU4GLdTjR1n328SCvA3jWXpCRCnWyuzkz4zitk4LLJP8447V QxiypEDvp7dRSpXYFFQ/ToD/0lEdBfZMe51c/+3BbiqrIlD/gp4H9to9ASo1Ymqm46do CQNgZFsZ4zDzHIPZLikZtQL3CGtyPr0LeireaNQUTpW55NLVHOh/Wq3V7Wh4vJm4Rl86 ZKEA== X-Forwarded-Encrypted: i=1; AJvYcCX4NCdfJ14JbLeIE1hve/CRmqfNPYkZ0kUxGiJvd4t8TyrNmyJZdwxEdLFFJOfzNiI7OI3sY0mot8OW1a4=@vger.kernel.org X-Gm-Message-State: AOJu0Yy4b3IhiH4+HnS90Cj9/GfllFV4u+6rQ6UrGmsiYBsbUx0jZf3I y+VYIQuvHLJ6YRJsOGW4MVa7PaQClGI6OcqAY/f9y6JdbUE7wUJ2uaCj8IKDzQ2PSa8= X-Gm-Gg: ASbGncuJbUNza+/1q66Tbu2mZpG4XobVfYt6sLZqfb7cUgPFw4Otnbwjb/0vGbIS+v/ Ro4CJVWf/gaHUQkNa1Ptrzj2B2p8X3Qz4+YpkIgG0QwF3G+C2/dEz3vUjBUp6NJmxt4W7tZ1Po4 cVyowv+ZOmVeTiFRkPiVU7Mv+g0t747RpWiBurhl6uSrcD1A/2i4tJkjHNid3WNaoIDeCGQFi1o XGKzWp4W01/MpIo4kDEJsvySgzYoxpXcE64+8h40J69Kc3kZECBUSMscARiBThh1+5bc9Z8YmpC j/WlSaUK1lB9RtqfHFVvnQl/UTLbcf2SkfnMJLdnngfU6hEjF6lLgq0skBQzmTICQKu+xE9DbAv p9wEnPVPJ7VSm/ZBE3A== X-Google-Smtp-Source: AGHT+IHOAqp/LTkHn6qqCuhKN9S0f6/aF1NMMUjbDRqd5pkFBV9AV+5lbxu0lm/Ili6PnKTocBLI3w== X-Received: by 2002:a05:600c:3115:b0:45b:81b4:1917 with SMTP id 5b1f17b1804b1-45b8555c359mr65565965e9.10.1756729566932; Mon, 01 Sep 2025 05:26:06 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.26.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:26:05 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v6 10/16] drm/vkms: Allow to configure multiple connectors via configfs Date: Mon, 1 Sep 2025 14:25:35 +0200 Message-ID: <20250901122541.9983-11-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub 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 Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 585effe90550..b799102d54ac 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.51.0 From nobody Sun Dec 14 06:22:02 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 53BD4334739 for ; Mon, 1 Sep 2025 12:26:10 +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=1756729572; cv=none; b=DtAQTpVLwHEnNI0F8L6TZJs5pg3HmHk9lVahOB8SqHI/0SZpSdrT+9/Y3WOOeJkXT7h9KyHLDhhCEiYG9KhICLMQduhX9yHvJ7yoBGnrfQA6yVS5i2JflOTvexRQS+MVDdOpGa80zcEAx1JMXksX+DYUKvRm9czdhKlGDHnxMgE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729572; c=relaxed/simple; bh=L3CvRJBuK1LdZ9J63Lfc5mQwo4dFXabMVCmqzMhviO8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=o4UYYTiO15p15gNtNE5LC5684yFEeEMk+QqYUlEqOnmfHsvZNajGWQOZiM9w2kX/cNIU1vzcTCPpzpmXREhZb434P8fQFkfxiB4XEGSaTXpcqwh2bf8kCnnkXSfMEqhpqKG04Z6DunitrAhnf/CCE7CGY+E/NiDVMI3jhv0Wal4= 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=HtQDZP+H; 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="HtQDZP+H" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-45b82a21eeeso24936045e9.2 for ; Mon, 01 Sep 2025 05:26:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729569; x=1757334369; 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=whOVHJAOahoMLucD4mGkfc/iuTQbzIwEjfulDz04PLY=; b=HtQDZP+HA7ClnyGgPt+lL4saSGO7ubtcT3V0DAVEtiJqGbQ8skta2BbFHLIYh8fMmc sR/HcZ6LlXBAS1lBq6ejrnCbCy4+CkaBy80P+fwNh7YAxgKNIqAJ0CuuFbEqYyUS9rTp gvcrP3R8ItpCv4sBgx5oq6TjwlvnvN3BsGyc20qNnoM4yszDJqbKUU9CacyOMitpO99H OluQPjRJBMc7/9VH4lBjXFK+D7Xw3zQ3MaHKWHouOS+xhEk3073uCXMlElvHV3TQWrXc i9L3ny6EBQmwB9byU5mtlDbiSN8atv2hlr3DMU68omCDyFZxpdtdEiZ4pm/DroybU75d Coig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729569; x=1757334369; 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=whOVHJAOahoMLucD4mGkfc/iuTQbzIwEjfulDz04PLY=; b=JkaE1C42VF8Ylz5WYR0xvYIj3IEh9Q/E71IsyIt9Esv7e1PK18me9iYi3rq5xbJVg+ tn1Tc1KpJ/+UV2gx3Vm8E/Z9XBLcV54Za2rYcHDC/mLZ65/T3cb98NSU4XqUDraBX744 3ZsbXn55QoZG37zbYVaZLr75uycxEQQ25NTmW6zHFOnv5iG1rumGZDEq7vNV/CAmU4nF 0yhJcsCXbsntrP85x5H3kZp5R4n0aZqR+CRaAfQkO5ZMSbCr3iP04POgdh4iBAcq0OFl H/FJyjq68QfvxOwHKmfE9wBuRyop1zsnJzXmvQKYpiAXQhzwILgyIKTit+yXtkJjdHH3 EfWA== X-Forwarded-Encrypted: i=1; AJvYcCXTVtJLO2lpyQLh5AbBbknhDMX7IM//IjGFnrc8tzoFjqY1mL3qVyRA/kgkNc2txAU5y9Uk4Q+PapTbljk=@vger.kernel.org X-Gm-Message-State: AOJu0Yyg6zahFqw8YaAap3v8wtReN4xd21VnUYP4+pw6iVUlg/9r+nhC 1GeUs0wF+kD1C1WmK+GPE8pomy9O8qESH3qsOay2DoJz478w86rDOh3t X-Gm-Gg: ASbGncsM6ZkviRYfcEHpFdUkz5RubrvNueGXzcOkUHrdSUEwcx6iJT+i5Fzkv6YfM7+ rIpq41aLA0QCKOS9Lfo9FAyCq9TnC8UBoMewetjl3U0TQVjppwNP6F06OMsCSuGS+92EqAPmy3E tfgr4rrB6Nb/nx1LOGLi3y7R0oN9pmQM02LcbteSnLIuhEO672gC2tss0YVbiv/HHtjD7mXaNkZ p1049cdM/WcqC7X1ggStvHV8+IrXV1mtnY1H51DJ/9HDsaYLNtQW3kPScL2YVIoBjVHMzEoRLAO EXYl6eBLmijKV8yt1itSVTRnNrHsSuChxqP36c/KudG//YUa2s4sDF+3PPnAjZLtx/GaK76WP2L IX2aiS+yzpJm4A4WG18bS2N6woEnA X-Google-Smtp-Source: AGHT+IFEqVYalH4LP7GApA+3RHzluMAgFEDYygQcy3rt/FHlPm0MC8iYalSmAfccw0g2lQYKSvVGPg== X-Received: by 2002:a05:600c:1e87:b0:45b:47e1:ef68 with SMTP id 5b1f17b1804b1-45b855bec6emr60723135e9.35.1756729568494; Mon, 01 Sep 2025 05:26:08 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.26.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:26:07 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v6 11/16] drm/vkms: Allow to attach connectors and encoders via configfs Date: Mon, 1 Sep 2025 14:25:36 +0200 Message-ID: <20250901122541.9983-12-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub 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 Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 b799102d54ac..31a3880ad83c 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.51.0 From nobody Sun Dec 14 06:22:02 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 A439C3375B2 for ; Mon, 1 Sep 2025 12:26:11 +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=1756729573; cv=none; b=VObAgQikBuMEKM1Rgb1KESuvxbmD1fs/z1kaZu6mSlqkgKGlL3+77VMuuVA6sKYkh+dvEG74lhfNfNB1aUle/T96v9ZOuQPE6p7zCma8ErUpTAiAos8YTklCsF1rTAQm++CmUDT8M2iBknDZwsavM50Hfq/rh7nIJ5MZJTcdljQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729573; c=relaxed/simple; bh=cmo0VEU3VTFHjXBJpOpH/OF9AaZhAVSnOOOuATirS3g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BkXf2FuD9z1m2NgLIW71uXpppRzQ4NIFzaQ666wW76TYg3F5L2EZFGafy6ffL1FlPH/zaPKK+o+PQUCCxzhNDRF7oo3AzAiHLeOFCzplLR8WAja/27dk31PbN/l8OUNvGVIRXCE6eCZjhxjQYlb/+SWHVvZUDT8WA5qnax+8l9A= 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=SxLFaK+S; 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="SxLFaK+S" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-45b8b1a104cso10537535e9.2 for ; Mon, 01 Sep 2025 05:26:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729570; x=1757334370; 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=5O+yZ0tVj4VVG9ie2bCzxaZKaxc2ngyJg4tXjB6Ebrs=; b=SxLFaK+S86v9gV4Jjz6oe7FCxrjG62zCg/AKQcVfa7mjhuDAy0F1NahOCxbzS+f6dS Y7kxRKDqVzM+3+VGTE36kb7oU9gvh9Jt/Hp9OElMVZrFIejgzliCvg37LG7d9rfRXjku WZ82MCvVkJE4KemB5mX6v/jq+9bBMA5eaHJqwinsTd/hxR+nDukxzFXrzDaJ2BDecZU7 I9oi+sqjXPZMcvLFQ8pAgeOgymw7SWWyiUhNxzBn3dbPbUo5qfbDo0DIoSWa6b5b9aI5 pA5fe0rOUNXelKY+o+kiDaZREEZNACyKJnOywcg3IrfluLAyN3QVGy3y6YJcH3DbS40D m3EQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729570; x=1757334370; 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=5O+yZ0tVj4VVG9ie2bCzxaZKaxc2ngyJg4tXjB6Ebrs=; b=gc5TKfKQiZf32pfAPBaA9VtkUBY/S0W3K4iGlDmsAWlRWJtaUhZ3EdrEEygIfZwlJ1 MFWxPdS4m4NOgJERx8OF7Bt8yJkTFc0aeRFSSBLvIOR/jBvtLugpKfV1UMLlVcQwV+Bf WZqnduw1DCyXmGDHJWPw73HMj4XCE1Z7sQhWQq3NFjNAsY94SEG2EJz7rysyVZDHCBmy fqYR545NYYToAyyotnyZ5GVwq6dUr3VOAkVKIHgHTMP/Gqa+URIl9uzOQKYUmXhjjKy1 YHj/mggf8lXsxDgJGuQjB+rv4sOdICIa25pvawIamTMjoHAnf83cOgFm3YdWwpE08Men I6sQ== X-Forwarded-Encrypted: i=1; AJvYcCVp1r0Z5SHQcY4+6OHNip41G+JuO73nHSr/RpMOBrafo8BIU8nIGiBXnm13dUqHFxMKHRR7502SNtQRI+o=@vger.kernel.org X-Gm-Message-State: AOJu0YxRD75Po8GZg/9BHsXXUaCzXkt6nGHlY264MMEoW33WiTrKh6EY 78jRSJjVH7n4VllhE4KMMIoh0EIaa9uYOPqI3+MkzovsZG9xiV8JHeAe X-Gm-Gg: ASbGncsU4tameycR1BlWTv/aPLd2PSW6GKhiKC9L0YU3gNiSn8oJXXBTayETrG2WEJB lnoXy2usqugiOuokdj71GEOIcP28fzmx4yLsu37oEtcusrjf0FDIb7Mt+Fj+Bt6MszI1neD/7EV 74mEYw2rvqlhg3f7vqD/xm6kv64yzvmYuCbDmahmaD5M3EJJiFNGQWAPu98uKC1dL/gxANL1TJ0 fbVN0oK8oiQnLdL7w8BbFeWmjKMXhaCLgaoJkc7BtSEUqES+byezxBA7a6TQt3nHc3JSixRnwsa 2rP1EARFSMPWyt5s+JO9B/5VBK/9QfU6H5KhpUc88ecPYwMoZLpBlraCKjMQxgu7XWwOlqsrOSx q7fjMgeezmxesnoAkwES7N7l8Oe8QwtGG0nGVkDs= X-Google-Smtp-Source: AGHT+IEez3DPgxAss23izjD/lj9HKWSCt851WzEhPT8lwiYI89K4kHJbwaUo6MmcCHOXKG1VR8RWdw== X-Received: by 2002:a05:6000:4205:b0:3d9:415c:b146 with SMTP id ffacd0b85a97d-3d9415cb164mr37173f8f.15.1756729569839; Mon, 01 Sep 2025 05:26:09 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.26.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:26:09 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Mark Yacoub Subject: [PATCH v6 12/16] drm/vkms: Allow to configure the default device creation Date: Mon, 1 Sep 2025 14:25:37 +0200 Message-ID: <20250901122541.9983-13-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 c1f23e6a4b07..6d299903fab2 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.51.0 From nobody Sun Dec 14 06:22:02 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 0994C3376AE for ; Mon, 1 Sep 2025 12:26:12 +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=1756729575; cv=none; b=igtSPGNOCE0THucv7boOOLFW4oYjZ8gMzTKgZR8dfRlNQrdCrFZLxEfG2MSXilFyOhZWWhqmXq7TQxlP/oxOXXYvnNeU9oIU319Ivh2x4GlWCIfWIidnidJAbB7ISZfe6RJwx+4uITEOLeB+KjehhjXgUbMGCMPVGMqQLzR+uaA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729575; c=relaxed/simple; bh=JGP5rkJhi7rwbgiBgeBDI87RnZKwD9MYWHswkx7G6iI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PBgDkttFVghF/8Cq60tobJ72jrGfor1d8OUShvthiDI3sjV/pn3KklOMRnwuMD0QY20f8HWZJ9i+Rqg8cIHvUeM4SlWE37G8lE4FDCEExBMCD/OCIei4KhHkc7LbfbeJNf+zY/mFBLFmerPdFsy65KDb1wZzQ1a7eTiAW5wXLho= 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=gYVMklMI; 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="gYVMklMI" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-45b77f59bd8so24527215e9.0 for ; Mon, 01 Sep 2025 05:26:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729571; x=1757334371; 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=3dM96E55Q2d+IuiT1HFvvKMogR+YhmA24qq/y8oh26w=; b=gYVMklMIO8RKC+ezpRTEqQ9p8il9qmgOMU7lj13zLjgz6EXpnNT1kYitunawflK/oS DL6p5ZXlpIdXIr52seXaFcXaBwveDwfbzzTOHPXh/vEE4JbxU2ZkdbGq5Jw2lsHLwoOa u6eifbwle3+e++AaFFUZye0vUIymrSwnT1d9zLmq73dQBrsx2dP/TU1JURmmTMpl9sO0 0JWLDltYdmUrb7ZskPpUZgKFPmXRNPalXqWAdMaXBF+lrDELrwohrsaFBAhCk2fRVulq GEy5A5sLGb2MJKVjw+iSJ25MOwcLLhGiO3DbWzfWPW4gJ6cSHYMIaNKc3K6a7PQ09wQd zxzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729571; x=1757334371; 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=3dM96E55Q2d+IuiT1HFvvKMogR+YhmA24qq/y8oh26w=; b=af/KErUAKn5KECEjNsDBdI48fROvCq3Cybtkrbi8ppSMnfxezwWkOKCGwhNjFBVcqP OvZvrkVJyz9mBBJc3QaFhr6GyB6FKubF0Tq/3DGCzDLvP5zRRrWWB8ELqYNvTk5DE8Om hkdt9udGvBmCyLfnRSZFZMElJ3l0TJ7ddAIhuqh+OASi7/3CBwe3ILqwcgxExVFMSCWJ PGClCGwKp7aFWCEaghyNXde9SLbmdegampz/wljP6+ffvjivb5Z55Z+L70ScfEWCV+V1 uob+UYECOjNfQUTMWK0a+y+qXPEta7rJERIjq4zilQxl+1AxtySGV1fFlOu2DgFQRhlg IlvQ== X-Forwarded-Encrypted: i=1; AJvYcCUcMkE+w3xJAmft/UniSjUQZWdUgeWZBZZSjGufk+XDbr95SfGF75riFA7fH1uQ18SGgWy7CI7yz0QBckA=@vger.kernel.org X-Gm-Message-State: AOJu0YzaOY6SPElSYSFTtJcMBXRCfPNmn+VduNMJ5n7PcOYlgV01JRVM obDRRbLP6Mc/y2+QJ9v/MkQ0yiBc4MzF8sCIb+BIsHbf1HWT8g57suSA X-Gm-Gg: ASbGncuJaoMMVn8uaZsXyqsvPBPQZiCMR2FLSgaGIIf/0rFTjEQzmDtMDOBC68wh/MC 78ti3gom6xjB4mW2IVsInVpIy+sn3kLVE8oGHTV2Z2mDUZQWuKAmMLzevGBfN2UTbYYPIT8V3gR ta0bFy6NeQ/RA3cLRPsVIlXnUPvojjqouTJ8Pos+wbY3mJijLMgyP0l9cw4veFnvg76Sptptq+D 9ks8j9lzzZpqLJit5v2blH2AUU2ufot3l/NIbNxob9u6776i8x8B3+ER5mNwlxjYliHe+RLLua4 NhXgVA5BzcTdRAXdRpmBjnMCZnfxjNlBfbZTXyMY9O+So/KvCiQO0WrFQ5Cr46PVIDiyQO/bu4v LudqFsrkgmsy/kfjq1w== X-Google-Smtp-Source: AGHT+IERl739fULguTB8wwYqhn80dq/ta43RUTSs6JPhZjlt4LfeVOI7iahJopxrHeUJTf3jhOn4PA== X-Received: by 2002:a05:600c:1f96:b0:45b:7510:4042 with SMTP id 5b1f17b1804b1-45b84c65642mr76911685e9.17.1756729571065; Mon, 01 Sep 2025 05:26:11 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.26.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:26:10 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Mark Yacoub Subject: [PATCH v6 13/16] drm/vkms: Remove completed task from the TODO list Date: Mon, 1 Sep 2025 14:25:38 +0200 Message-ID: <20250901122541.9983-14-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 31a3880ad83c..364b574a8cae 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -233,21 +233,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.51.0 From nobody Sun Dec 14 06:22:02 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 295AC3376BD for ; Mon, 1 Sep 2025 12:26:14 +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=1756729576; cv=none; b=OmZ1ePnC4OLH5qSfrq5HHLuYXl1rDv4s5T8MkeFJp24sXaT7RVXnygKNDrnABbIZ0Fc9Z8FTx+VECPozV7LeY9oH+EiwPC5rtNJPDd8CG6bwqKd35sZy7dA/cpaQWhr4aQrAtF5X5/S+3PSvCfNr8g/SvB+drQMdxq7utrk3PAw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729576; c=relaxed/simple; bh=5IILu3zWsdfUgG1YIPueRJpkjMyMCjWvR5rHrVXYamQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=EInzuFa0TObfmjakLqkJFgPG1oWu6TaWbFMrVKb+0utfYgbcbXvpDnib3PyrQX3wHeJvDjxnGy4V4ZOpKqBtNkcoZM8Ctsa7SNRjBMqE3O8HaHhnJRQVs52yVdHyHwPMuEzmu2gpynPIJ3lGNVEMXb1fe3mZ6wzZ9iHCzaqMmlQ= 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=BWemGQQz; 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="BWemGQQz" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-45b8b1a104cso10538105e9.2 for ; Mon, 01 Sep 2025 05:26:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729573; x=1757334373; 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=V5U/A7BZZhrW2dMx+uUsEDtN1NwfjrfXXCZhIh6W26o=; b=BWemGQQzV6rg9zDS9jHBiiPG81YeLFrbHMJFXhwuXTuFnaXq62tC0I37HhZ3+PlchE xwsbAJ6eAwMFdAv+47j45q9+rNOKaxa6WGNaRRlzd7MriNUoPO5okHoZt0Pwz5jbwTil nvYCwVvPPWPV6Kykv7t04cnyRpJ/qlX4O+5tGZxeorPbCCmKqhgaJ94fRed4FOamHF/P sJH6acevOQdbFnazNJ5dtf9FNArm3M5OKbFq5kRvFyLaV4spIuw1QVOn087gGDuqjL7K 9xpAb+3hNiJsl2IzmaGOxIJDB32ecd2tryIrQHwrUY00ktkesB0zl8yqu96eATDg6ZE6 yQTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729573; x=1757334373; 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=V5U/A7BZZhrW2dMx+uUsEDtN1NwfjrfXXCZhIh6W26o=; b=ABIsopE449DeEXYbTxBdCp6UTmOFjlhh9ZFyHG/uluhnFWRgGxrIDC63+NnlbANj93 DUzE2R8uypbyYYZyH4vHEvan5btm9fjxJb++3c3sF+HBCJkWVjYL8+qWAn1wDRhqwnaq MbaMzNQM59veaY2oDftfSqJmSfV6aYymvt7MZsEkU1YHZZPK59et+N3Y6mmjkG1sSlxh bIafiOTd6+fmo+I/0XrA7yz/+t8IAH/UNrPdv7TfFM0K30JDWnT9NKWsY9WspDD1TIkN +brV9g838htVx/zyIcR2SvjZL/OpCusFIHRzETMtdhYCeoO4dCecL6rjZbmcSWD5QZtB HObA== X-Forwarded-Encrypted: i=1; AJvYcCWBuZVbNlIh/DW3x1mP2AtwgakIBPURR5q4Tf/lSldUbyLecNlLL6hNfk/alidcgcEeLYP8Ekv9doug8Xs=@vger.kernel.org X-Gm-Message-State: AOJu0YxFpAa4AIFJuOLDUCsakI1sANr+SCQDwuSL7FtYKRW9ppujgpae 1oznM/+2VcynJM/xdLCpjDy1eIDrJ5Dugvf7ULuNecxcXSPHkdfGRffP X-Gm-Gg: ASbGnctUWu4GvCn8W9caed4/rt1EP/K6j1oL6YfrEI5hEUAsyGM9d3KV9YUh//Vx+I2 JgNmj34/Px/Ilj3bkSN5xE4ZRK31p6vE5orRH6hSmh5tWjMvukczXPiES5QdjLwwqgKHZzRQSr6 tNsgAfeL6WwLUnowOmo0kKXdlgQfVGbYNwwvWP0p4Kemsfq0e1rVkKrsh+ud9Dp1xY+BE8W7e6s yhqT4ms7fBAL9Un01KMgfGV0sKf7AIUxfm2Vufcgv+fTnJdAStYDBKu80m+pvUdyo0k+Zl+mnlH JwZTE+7GkPDKx8ufhSeNQvAyVedcpfh/bRbfnbsA0kgm8th9HBiHQSgRY3nT6ESJfZB59gHvNF8 YSQ+qG7XcVL2rYIupzQ== X-Google-Smtp-Source: AGHT+IEcxSN6nj/+KGvmNX0gPoXphoDeantwG+/jUC0mrK5opKNCsUQjh1nTYxcaTAdOxCvFaO2PiA== X-Received: by 2002:a05:600c:1d1c:b0:45b:8b3e:9f63 with SMTP id 5b1f17b1804b1-45b8b3ea13fmr37800695e9.18.1756729572505; Mon, 01 Sep 2025 05:26:12 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.26.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:26:11 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Mark Yacoub Subject: [PATCH v6 14/16] drm/vkms: Allow to configure connector status Date: Mon, 1 Sep 2025 14:25:39 +0200 Message-ID: <20250901122541.9983-15-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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.51.0 From nobody Sun Dec 14 06:22:02 2025 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7C8C833A03F for ; Mon, 1 Sep 2025 12:26:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729579; cv=none; b=ZNB8u4lDPj8Q07MRC+yRxWxnTmEEByooQ11Iip9Yz+hxMzcC2NUH/Tkx1Ym8NRbJAR59xc/XOkqTbwA5MHNMlquVEcQFI4W0Fo2o1NcpGXNsVslKJJBUU+inAN7tUtSVbqEk7aL56noPq0LdU+Kbd1EMh1meRDj4fuwwJfnEm1M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729579; c=relaxed/simple; bh=BeHJI+BW2HtFHEgog4vZOgsELSDN5o8UjTy51Us74+I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qsBoHP68KsXTa4r3K/I9jg5iqATZZaarJLj5FGYTJXibHgsHtmuQjeXVPPC6dK2xA0R1o1n4v3YweM5baCnQP2iWyDcoGT/GRyLxrWlcULDm99YHDXbprCFaxhWTxOOmKMjyhsWu7oBjDyoY2xI+ZP1/7kL1b8hiiasAe+gCKHI= 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=iLnwY8dW; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iLnwY8dW" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-3d3f46e231fso921068f8f.3 for ; Mon, 01 Sep 2025 05:26:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729574; x=1757334374; 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=RcY27BYD5SEbH9egkOiTtO1uLUZ1+Eh26ylvssFUQyw=; b=iLnwY8dWBxdUriGB+z9BaRokbtSOOChHt6MFWm4awCxidmVn4Tk1lTPhLOMY+ZXJhr PWJmt5anpLp4ll5WN+3xBy3plbvB+cZvJh9XYBcodtU8s+u0SylkDOaARIuhN4bk30Z8 asvYCe/omKjkuAO120CKGMlldDubJr7MmXDmYZ/XhMFGCGhP5K1Jeu/afTkMJjw/q9/4 r71VzhY3uBKJa+Yvnk1a3+3f9GY7xkx2pdcheW8Rwqbl6nJzDfj8lkEULNE17uKvaB3D KTsBlMZIp9LHhNFyovbt75ZkmZDvT6YfADIGRMomSUYV3YIOzQJ8a9UAuKpJi1tSVzJx oKcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729574; x=1757334374; 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=RcY27BYD5SEbH9egkOiTtO1uLUZ1+Eh26ylvssFUQyw=; b=kjZVGIRpII1nfdP/W7y2K6WzjrY3XW4Tj4AFOTxRU7oneIAKJUQ/k27rDIqhlvt8Yo jtQcZUViH0i30dwAAYPVh16sv2klj+Ou5OmUgUo89Gizk9I16PiPA2ErBgf6qJjkpm/E IkQgTgWwOi+Ojd4kY47mZZxl+iEhpwsibBZM1l1MsDTxrARQDnyUBvrz5gr6rHgPdtFV /uLiX5K3QQ42kJi7aXjR6s63N4KI6/1Gzb9CyI1PJqW4b6/DjEc5QH5v5aP8THCEtZ8W KQdhmUR1oVexwWyz8zc/VCD+lLVCK5kELkgPGTQF7iV0lT9JMIlNqh8IBaTwZ84TRL+S X3uA== X-Forwarded-Encrypted: i=1; AJvYcCWXFwN1WsZL9VStR9RN6n73eG9GD9qpjPDv9eGxzWck9JTwJ7DXjrVsxO17OpKD/vVBeVnspPugFeVg0Ug=@vger.kernel.org X-Gm-Message-State: AOJu0YxcTYjaDW/IpR72E6DMqrb862DxAfkERKrSD7WkjeTlFeyrXxma Z/XGvIaj3J54Rj1VOxZx+REYTSSBHPuLhRsVlhS+s438SYlbwGONwDzb X-Gm-Gg: ASbGncugZZXTtb+5ELIsYW3vlXYHi5jgPqV1OLnTNJSgJfENurqWhMb0KOwEjkS7KvT Kn2mSsNMuykzRPt54exh7QFbSo6y9dIw77rwxqyuFv9pFarYUnC7P7R147v6kh29TUwM4z4EYrc o6xPbCdlKC6/2nvz84Cux3B8vqBuk2w3W7AqsH0fvGFKK1meiFWYUlP4V6TK9ZJTxgodupyAXMR DJbW/lIO5U10C8k6OKEQzzYnB/ghOwNbrMmF+qZaOr3qTWZR6JuW9Ak4IIeSkHSxGsKIREsoWEe fuqXM+5/uMQBofAxKjfCqzjRqE45KGjURdajXkRzX0FyQH8WRgqkAdwLs9oJQrMjM9q6sMymY3s vvpwOUsXn6RHk8/6rgtHm5WA5UM4h X-Google-Smtp-Source: AGHT+IFWulHN5lakrvfB1yKPVtAR0ebBNhrheh2w9WyUFz7tvjAD0QDG5YOMbXfP9MF4shPuaprcoQ== X-Received: by 2002:a05:6000:400d:b0:3d6:1610:1b6a with SMTP id ffacd0b85a97d-3d616101e3dmr2729303f8f.22.1756729573969; Mon, 01 Sep 2025 05:26:13 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.26.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:26:13 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Mark Yacoub Subject: [PATCH v6 15/16] drm/vkms: Allow to update the connector status Date: Mon, 1 Sep 2025 14:25:40 +0200 Message-ID: <20250901122541.9983-16-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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.51.0 From nobody Sun Dec 14 06:22:02 2025 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8828F33CE82 for ; Mon, 1 Sep 2025 12:26:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729579; cv=none; b=OUGu1RvvHg24VtuSxQwiqHIiVVe0VQVYLgEmvJWfFQzNIbg78y23R9qlg1gYpEePdwTYcXVWeLxC9uXXerKtSknP5YhUFmu+7gwVE7vk7YjjB3CNk9w+1uil8cY2b3y3zQbygH1VVyBGL3Qv8kvyw/Iqfmd0/q6ukD/lmpZYLt8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756729579; c=relaxed/simple; bh=PA3nO4SDlcJg1noaBgSUXupGno9tFbj2hd30HZ0Iy84=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=k/h5XD48jf+6DxqTTeE551UoiJZCKNOL+TX1KURL/DfzaXsJGEmFe5iT7iOZCQhaYBsJ6oh/3DFFGlzQ1tDR07p9PYEEwIav6cG588pMOhpeqQH1dorLUammavPr6Nl/AL48l8aIEN8tvIDwgvBeoaMAL3oNEnbPxyt+Arrpxlc= 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=Joz+1PML; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Joz+1PML" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-45b4d89217aso25672135e9.2 for ; Mon, 01 Sep 2025 05:26:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756729576; x=1757334376; 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=KXpqkTrNBx08nghW1HrOC6W4PRw4l0CpXqaM8e/MDOo=; b=Joz+1PMLoYzM4oPHJ9FAdyTCFQtThKqBo2sz1kByKRqeFl1P38Lhnl6UU9H7hNT0r3 WP1tMaQv6gpmE0hw0Q/83yFmf9Y8/5RegADVCUoZMfyWMDpwlnkHX1Zu145/bWy1ry0W loN26YYeznZM/OwJzZPbMBtyrJn/LOKW6YpmrHmiqPYluQ/mcLfAWASNfzO2mf0S9sC1 DakjkI5bBlidPAoi/n7T3UsFZe0mks4kBi6ddc0ZiUPnR/DtJo7I5/Z/8TIf0LbGfKhG MYjK66abU1aEM6vpGwOTXk7zIUc2UTBMHqAX1dRl4k9Lf9xfxoH09tHEVfJjokT8Hq/l WmjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756729576; x=1757334376; 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=KXpqkTrNBx08nghW1HrOC6W4PRw4l0CpXqaM8e/MDOo=; b=SI51oBPyTTDOgKDcs4IhkdQoJluEtazPkzV1lkiJwKH7QFkavGuxoooQWQLY630Lq3 uWqMKDRvc4MCFJD3ia1O3tLfJKKbiFEHATG+dk9qEOVaGM4lEknxfzLAyCScMRXUkVs4 UFZ9NEQ28JpADCO2O8WvucASo/C7nyxkW5e+PlTqGDIN/MR6m7Xgml7rOjIBRwWx492F 0z5DJ5tbNdMw3tFJ8PAH9Cbb2Es+hEAjHaJRCqpctT9gAuIvrza8n9nDJjrGPqZdzoMS iRacE4UFmlTeRDwksO287AY8jMEfZIyGr+gCtI0lQacGerBwP8qyc8VKcfFqoC6PCiwN llMQ== X-Forwarded-Encrypted: i=1; AJvYcCXRk8LcIlcXQIjyXaGMbyqI40EfAV33Ov1/5DyZNagErakTUjqA/6ZhAicd6iaJXd4HdV62JHumhChX9tg=@vger.kernel.org X-Gm-Message-State: AOJu0Ywf/6FivX7+p88h9OJMg9/Aqcln6FKflOhgVXQuYuRYniHgFuBz s1WfxtPVzzTVSequI+LGrpZUWRwWD48Pcob06q5eK2BNsNJJNWDzkbrZ X-Gm-Gg: ASbGncudGO/HlR0k17YLkj2L7UHsLWjSIS0QYZJv8AjdAbv9pOFI5fwLCPiyBqKkYUA kB7meWLRobxBHuytBaYlueTq/A5EWw6ZQWa2nWF0H5PmnVVZuyosUpFumQVuOhfQgAJMdXzolSI VLbhgPOukCdUOtnTtG0H/quIee46CWd9JAqyhzPain6raUqNhWdVHxSIDAemiVMsBm/QerazcWL VLpiiwQO1cK9ojb26HARnhYMWyz1Us2WDsZXawT1nd29vtHl4TMmiNRFEcN4XEu09amvXxn8fRY cFq1RhLnWyBXFOtfYz7sIGfRwCqPNpIy8WrEhzMl8Y52F9QMCifR74eY/dpZvzOShaN2gUo8g59 3cLFUI1XGleFdKI6RPzM/4mOHP7m0rKjgOkTwXVw= X-Google-Smtp-Source: AGHT+IE2HSu7KIwEmoxMq08mYeKHKtIF4UHvpucYUvO+CqTQKiYTLe6Jd3B2jaPQ+EeAvqZvZUA7Bw== X-Received: by 2002:a05:600c:45c9:b0:458:bbed:a81a with SMTP id 5b1f17b1804b1-45b877be05bmr69423465e9.10.1756729575670; Mon, 01 Sep 2025 05:26:15 -0700 (PDT) Received: from fedora ([94.73.32.0]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45b74950639sm207297055e9.17.2025.09.01.05.26.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 01 Sep 2025 05:26:14 -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, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Mark Yacoub Subject: [PATCH v6 16/16] drm/vkms: Allow to configure connector status via configfs Date: Mon, 1 Sep 2025 14:25:41 +0200 Message-ID: <20250901122541.9983-17-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250901122541.9983-1-jose.exposito89@gmail.com> References: <20250901122541.9983-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. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli --- 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 364b574a8cae..3574e01b928d 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.51.0