From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.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 5175023BD12 for ; Fri, 7 Mar 2025 16:34:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365243; cv=none; b=QJilf0eqkrbRRZYx9o9LxTyQx+DbxCHBuzbon8NAOv7Fxgz/ddQbtQXjwVeT5CXaUDIHNUwGDn57IFoRixgXPFq7zajnBuoHWG5iNix0xYZ0HhfVyHDVGhzG2E+jx1GnESXcTAiPSoidw5lRQeepnjbOrS4KRwW+IMDyB3l2dYA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365243; c=relaxed/simple; bh=x8q2LQoaUnOBaiP5jsGvS/C96mTK7nmUfaD9bWRUJsg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=iKIjs+X+V0gW6t9CxPzRpK+KFWNC2LQtXp8ShmpfgpHNN7DrKIflzInpdXKBL0aMILAGMdw0WwsDsiW/UIP5pbT2sJczcCFCzHWnTCDdi0oqi/2tkD/BuWMqAU2DF1NdHNo4u2yNM0RLhuC0nYH42O0nIblEeRqFDoYx9Eizpko= 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=HdE193l+; arc=none smtp.client-ip=209.85.221.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="HdE193l+" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-38f2f391864so1179451f8f.3 for ; Fri, 07 Mar 2025 08:34:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365239; x=1741970039; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zDEi+IB29m5kaXCQs1Xh/NAR1EeJ74QIHesF2OX+9WQ=; b=HdE193l+n5jlwS/HTyoU7BuGoMEZkKrlyjLl3HVEW8QJD2ZmCuqfG99fmM+l4rOwRB wyS9bNsZp61w89r9S/U3H5z8WpTRrcdbo3TfBcic1nnc7LnT1EdLS/0yLCusoxyZsbCO tdRExjvgyjwGRXP9GXwzZCNGR9ognNWPID0SqMhbkLAM5zKaILfzk46qKd0ieZiXwc1r 3IwKRh6BDfJr+2xkBPwyHDKgClfiy3SieH58eFmnqafh/TF03OCunJnQUeYdBn40ccoI /D8/O5CMG08jmrwP1XcBOBOWVvfgtvCxbQmw6y7OOoewESrqshzg2ZBFkGOfMy6L3PUR FeAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365239; x=1741970039; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zDEi+IB29m5kaXCQs1Xh/NAR1EeJ74QIHesF2OX+9WQ=; b=YwpF6ydCPhOFH5lsrxr4pzNkleqs1N/E45Kg+QeIG/PLcSCBo9BubRUVL7ySFbM2Mo x37CfTng3OxI3xK6UqXVOMm4l/70m9T5ksevF7VViZGWRvoWMv56L98dpNTln6nGXljb 1H4w7pfaa1sGYTNQ9bLNqCXkNHO/DmVobpVYp/vlHPbBtDJ9Oa+OFg0rgvtOF10EKJYJ GLrHNLz+eS5wMwEETisKPZOuPhvF4sqrLulTx2duUkBrbiSnsFVdqfry2tG4N3JM1iVG vBohCTSB7oQm0/JDJ0PMCIOk5kldOY1quBhpmPdSb+HEAjfapHLFk081ikuE9ZcQNueD GIQw== X-Forwarded-Encrypted: i=1; AJvYcCVUrgziGqygxuSd0Y/hhSxJqEPqrVY4qlG/MlpsesiHPZ/onyBlLbXpbR3m/4uM+FH+kx903epvKBzamf0=@vger.kernel.org X-Gm-Message-State: AOJu0Yy0kOQck3Nt5CgMWjIMwb/r1VI8oJ88DswoVf0U2fyeNLM/2RkA ZFb6D5YeQQA+xN4IZHYyWeCjor1H/RbnYe7iMXnxCjatQ+xKbNcu X-Gm-Gg: ASbGncscrE+vIi4G0VQ33jFf8cMokJPiwC8p5JsNokcmBjdXnoPZmOYkKK08D5ClyUI +61+a3dUcbW6set6XpHlZ2KeHdhgD1wBsmN7EM8BgD44qSShH+U+PEomAmxHfLWuZdB4IiAl4Uk bOAU6tmODlPHy0U6TWEpJeVV8pBny0WmxwvHCpht8uL9MsNOV+G59megy0OWGH06ZMSdvEEe034 Rwyqa4NtpjHzSULiO0r2OvHAqfkc3a0FI7jB7A6ge6imYsiUT2roAY5uc7HeUE2NwRDiMhpmW9v +yif8BYR1fjgAHuDYFSm3gqRGs7AnR93HACXvF0SO/YmR6g= X-Google-Smtp-Source: AGHT+IHvEOquRlRDE6sNgZzthTbLfd1K6H7yZoCbaCvUV5F730ddnKBLTzQkXWvjxk1UN7ARIK+LDA== X-Received: by 2002:a5d:5987:0:b0:391:78a:33de with SMTP id ffacd0b85a97d-39132d1ca75mr2576203f8f.12.1741365239196; Fri, 07 Mar 2025 08:33:59 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.33.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:33:58 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 01/16] drm/vkms: Expose device creation and destruction Date: Fri, 7 Mar 2025 17:33:38 +0100 Message-ID: <20250307163353.5896-2-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable In preparation for configfs support, expose vkms_create() and vkms_destroy(). Reviewed-by: Louis Chauvet Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- drivers/gpu/drm/vkms/vkms_drv.c | 4 ++-- drivers/gpu/drm/vkms/vkms_drv.h | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_dr= v.c index a24d1655f7b8..23817c7b997e 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -146,7 +146,7 @@ static int vkms_modeset_init(struct vkms_device *vkmsde= v) return vkms_output_init(vkmsdev); } =20 -static int vkms_create(struct vkms_config *config) +int vkms_create(struct vkms_config *config) { int ret; struct platform_device *pdev; @@ -229,7 +229,7 @@ static int __init vkms_init(void) return 0; } =20 -static void vkms_destroy(struct vkms_config *config) +void vkms_destroy(struct vkms_config *config) { struct platform_device *pdev; =20 diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_dr= v.h index a74a7fc3a056..2ad8e3da3b7b 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.h +++ b/drivers/gpu/drm/vkms/vkms_drv.h @@ -223,6 +223,26 @@ struct vkms_device { #define to_vkms_plane_state(target)\ container_of(target, struct vkms_plane_state, base.base) =20 +/** + * vkms_create() - Create a device from a configuration + * @config: Config used to configure the new device + * + * A pointer to the created vkms_device is stored in @config + * + * Returns: + * 0 on success or an error. + */ +int vkms_create(struct vkms_config *config); + +/** + * vkms_destroy() - Destroy a device + * @config: Config from which the device was created + * + * The device is completely removed, but the @config is not freed. It can = be + * reused or destroyed with vkms_config_destroy(). + */ +void vkms_destroy(struct vkms_config *config); + /** * vkms_crtc_init() - Initialize a CRTC for VKMS * @dev: DRM device associated with the VKMS buffer --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.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 DC66723CEF9 for ; Fri, 7 Mar 2025 16:34:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365244; cv=none; b=KUvBx7VyHWOYxdPuqJYesbefk/BbiYM4EUmE4WFhT+80VwEw7jmvM9S5TWtii9kCa5dTvlTERE3T/4iR7D8NfXIeXyd7K+6TlFReAA23O0VoMm5wsmQao2oDNWKf637kSstx1yCt7FswVDHYtOhz9PBumTdIC178KcdLbE+dQ9c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365244; c=relaxed/simple; bh=UKfStJgBfY7Lv0PW30uJF9waC9ZrSy8EL0S7fgmmY5M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SvfuGi3eRQO05FeSKUdLe6HQIsFggV1wfXjp7aGFjzoXXCmGLdoM/WmXkN+IQf+cmi1thyLoagGAbcMy9UVE2EV7Vp3kSdlpvGHLCB1pAVMkAcZzmY8rmPiw7baWD+2sAS8no7faPZ8h6IPq6wzhEiMNRSsjKG1K0BX1lVKdNMo= 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=Q5hBehDD; arc=none smtp.client-ip=209.85.221.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="Q5hBehDD" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-3910e101d0fso1169079f8f.2 for ; Fri, 07 Mar 2025 08:34:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365241; x=1741970041; 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=OehO6Qhr6WGHbOewVFsNr8BMqlTR3xPb+7+1msX4IOo=; b=Q5hBehDDm3v7JL46kEzeSSaB5jxb1MNvJZhUxsdrzudZGgOAiJEk9bCyDzF2HAkiPO 82Ivd6u3tKzoIds2OmPZuQnCL/GXytbrAJBULk9y7nburJLUfr2rpgfOmTWBSAZvyHL0 M9NgCvIXZ2wAkP+U4ciHN2V3moXkr/Y41iDyVO94kSePtsnlu6d+SPJWg2vIZAYn3NKb B419geqwaS5KoivgBlnBO+0jpK67KH5S6g5hoAnztOPZzJCFej8MShqxdXgeXdpvPKgk O+GYFJ8sGE9HpGoYfFfQ/wXyKK0L6IuotCjGjtiURMD+pYB+NP6kQzs5H/RVZXf0Qke2 PVYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365241; x=1741970041; 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=OehO6Qhr6WGHbOewVFsNr8BMqlTR3xPb+7+1msX4IOo=; b=F6ljmrFJJAowvqGNucfqZN/6uBHYYb/5e6ekWmYVCOPcy81/sqhrQCFbtn+HV/gz8r 4gYiKMmsTrdi5GWG/BBP0lhFbJ03uunHZlAP5Y+XYCJooP2fQ2L28d0+7LKC1Qv6Od/U 0eJIMmcF3C5RKEOwIuwEc2MLq18klDmKZIpooH2tZkzzLEGItVFMBsNEg+YuQoS2RdCk wyZBII2aesjMpl0EmUDJ9GvXqGsnfvkbGFwQgsqQ07l34hOpg15Z47yHEVUMTEH098UE Tq0Jr7KdC/8C+dUE/7e2QtJSxP7kT6r2OkUEBtn88lgTPSeptYlpqw+60rc18g/wfHsR N9/A== X-Forwarded-Encrypted: i=1; AJvYcCVYtrOsczyZdJSa0hWckaYg7NLOve/Ud88JwUDNYFSRm8GL6Te32t8/EbgYv1gB3/gTSs9Ogl3+QSq+y4o=@vger.kernel.org X-Gm-Message-State: AOJu0Yxu8Upz3/g96vDJMXLMCtl6yJKq8E4CVxZTLN3pqbKe9m6UIvDk jCORb0EDbxyMpXOFx9RY6JX7lFlxdb+qqWnPj1oDv8WUIspwEtfo X-Gm-Gg: ASbGncvNg6QQT2PagcyNZaDjFulUP5dWod4i5bttSoGwNsNNTLyLH2+kk56xAhTTH/U tAyII0DLVjfQ/xcs/4/jd9pk1ntJYjW7xbBK0atj5A4+wI8xWMXyV6HxH05kM0oQ6jouX/zSto7 5y7DeErwLoV5HYdfSo0cV3t+y3beQ/+hW3HY2679RGgv87fvDRbHka6jfhCh9aGHKBaiBkBJ/rg e/D9VzTCx5hy966O3Yr/vpJrl9fN4l3K2iBB6GsxTTqVU1sir1P1kgn88OgaIZIcjgNE0bQCqbP 3KQ0I6JxmUsh7cAWlOF3dwh99RY0e2d+048l9wCl4CycvB8= X-Google-Smtp-Source: AGHT+IHsYe0vbQupMHSrJP5IQwdIqh/U3A41zvaZCt9hGpwRD8kj241TXz1aUDolhkgB/jb73AxAIQ== X-Received: by 2002:a05:6000:402b:b0:38d:e401:fd61 with SMTP id ffacd0b85a97d-39132db746amr2524803f8f.49.1741365240541; Fri, 07 Mar 2025 08:34:00 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.33.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:33:59 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 02/16] drm/vkms: Add and remove VKMS instances via configfs Date: Fri, 7 Mar 2025 17:33:39 +0100 Message-ID: <20250307163353.5896-3-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Allow to create, enable, disable and destroy VKMS instances using configfs. For the moment, it is not possible to add pipeline items, so trying to enable the device will fail printing an informative error to the log. Reviewed-by: Louis Chauvet Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 32 +++++ drivers/gpu/drm/vkms/Kconfig | 1 + drivers/gpu/drm/vkms/Makefile | 3 +- drivers/gpu/drm/vkms/vkms_configfs.c | 172 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_configfs.h | 8 ++ drivers/gpu/drm/vkms/vkms_drv.c | 7 ++ 6 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.c create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.h diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index ba04ac7c2167..423bdf86b5b1 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -51,6 +51,38 @@ To disable the driver, use :: =20 sudo modprobe -r vkms =20 +Configuring With Configfs +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D + +It is possible to create and configure multiple VKMS instances via configf= s. + +Start by mounting configfs and loading VKMS:: + + sudo mount -t configfs none /config + sudo modprobe vkms + +Once VKMS is loaded, ``/config/vkms`` is created automatically. Each direc= tory +under ``/config/vkms`` represents a VKMS instance, create a new one:: + + sudo mkdir /config/vkms/my-vkms + +By default, the instance is disabled:: + + cat /config/vkms/my-vkms/enabled + 0 + +Once you are done configuring the VKMS instance, enable it:: + + echo "1" | sudo tee /config/vkms/my-vkms/enabled + +Finally, you can remove the VKMS instance disabling it:: + + echo "0" | sudo tee /config/vkms/my-vkms/enabled + +And removing the top level directory:: + + sudo rmdir /config/vkms/my-vkms + Testing With IGT =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 diff --git a/drivers/gpu/drm/vkms/Kconfig b/drivers/gpu/drm/vkms/Kconfig index 3c02f928ffe6..3977bbb99f7d 100644 --- a/drivers/gpu/drm/vkms/Kconfig +++ b/drivers/gpu/drm/vkms/Kconfig @@ -7,6 +7,7 @@ config DRM_VKMS select DRM_KMS_HELPER select DRM_GEM_SHMEM_HELPER select CRC32 + select CONFIGFS_FS default n help Virtual Kernel Mode-Setting (VKMS) is used for testing or for diff --git a/drivers/gpu/drm/vkms/Makefile b/drivers/gpu/drm/vkms/Makefile index d657865e573f..939991fc8233 100644 --- a/drivers/gpu/drm/vkms/Makefile +++ b/drivers/gpu/drm/vkms/Makefile @@ -8,7 +8,8 @@ vkms-y :=3D \ vkms_composer.o \ vkms_writeback.o \ vkms_connector.o \ - vkms_config.o + vkms_config.o \ + vkms_configfs.o =20 obj-$(CONFIG_DRM_VKMS) +=3D vkms.o obj-$(CONFIG_DRM_VKMS_KUNIT_TEST) +=3D tests/ diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c new file mode 100644 index 000000000000..ee186952971b --- /dev/null +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -0,0 +1,172 @@ +// SPDX-License-Identifier: GPL-2.0+ +#include +#include +#include +#include + +#include "vkms_drv.h" +#include "vkms_config.h" +#include "vkms_configfs.h" + +/* To avoid registering configfs more than once or unregistering on error = */ +static bool is_configfs_registered; + +/** + * struct vkms_configfs_device - Configfs representation of a VKMS device + * + * @group: Top level configuration group that represents a VKMS device. + * Initialized when a new directory is created under "/config/vkms/" + * @lock: Lock used to project concurrent access to the configuration attr= ibutes + * @config: Protected by @lock. Configuration of the VKMS device + * @enabled: Protected by @lock. The device is created or destroyed when t= his + * option changes + */ +struct vkms_configfs_device { + struct config_group group; + + struct mutex lock; + struct vkms_config *config; + bool enabled; +}; + +#define device_item_to_vkms_configfs_device(item) \ + container_of(to_config_group((item)), struct vkms_configfs_device, \ + group) + +static ssize_t device_enabled_show(struct config_item *item, char *page) +{ + struct vkms_configfs_device *dev; + bool enabled; + + dev =3D device_item_to_vkms_configfs_device(item); + + scoped_guard(mutex, &dev->lock) + enabled =3D dev->enabled; + + return sprintf(page, "%d\n", enabled); +} + +static ssize_t device_enabled_store(struct config_item *item, const char *= page, + size_t count) +{ + struct vkms_configfs_device *dev; + bool enabled; + int ret =3D 0; + + dev =3D device_item_to_vkms_configfs_device(item); + + if (kstrtobool(page, &enabled)) + return -EINVAL; + + scoped_guard(mutex, &dev->lock) { + if (!dev->enabled && enabled) { + if (!vkms_config_is_valid(dev->config)) + return -EINVAL; + + ret =3D vkms_create(dev->config); + if (ret) + return ret; + } else if (dev->enabled && !enabled) { + vkms_destroy(dev->config); + } + + dev->enabled =3D enabled; + } + + return (ssize_t)count; +} + +CONFIGFS_ATTR(device_, enabled); + +static struct configfs_attribute *device_item_attrs[] =3D { + &device_attr_enabled, + NULL, +}; + +static void device_release(struct config_item *item) +{ + struct vkms_configfs_device *dev; + + dev =3D device_item_to_vkms_configfs_device(item); + + if (dev->enabled) + vkms_destroy(dev->config); + + mutex_destroy(&dev->lock); + vkms_config_destroy(dev->config); + kfree(dev); +} + +static struct configfs_item_operations device_item_operations =3D { + .release =3D &device_release, +}; + +static const struct config_item_type device_item_type =3D { + .ct_attrs =3D device_item_attrs, + .ct_item_ops =3D &device_item_operations, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_group *make_device_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + + if (strcmp(name, DEFAULT_DEVICE_NAME) =3D=3D 0) + return ERR_PTR(-EINVAL); + + dev =3D kzalloc(sizeof(*dev), GFP_KERNEL); + if (!dev) + return ERR_PTR(-ENOMEM); + + dev->config =3D vkms_config_create(name); + if (IS_ERR(dev->config)) { + kfree(dev); + return ERR_CAST(dev->config); + } + + config_group_init_type_name(&dev->group, name, &device_item_type); + mutex_init(&dev->lock); + + return &dev->group; +} + +static struct configfs_group_operations device_group_ops =3D { + .make_group =3D &make_device_group, +}; + +static const struct config_item_type device_group_type =3D { + .ct_group_ops =3D &device_group_ops, + .ct_owner =3D THIS_MODULE, +}; + +static struct configfs_subsystem vkms_subsys =3D { + .su_group =3D { + .cg_item =3D { + .ci_name =3D "vkms", + .ci_type =3D &device_group_type, + }, + }, + .su_mutex =3D __MUTEX_INITIALIZER(vkms_subsys.su_mutex), +}; + +int vkms_configfs_register(void) +{ + int ret; + + if (is_configfs_registered) + return 0; + + config_group_init(&vkms_subsys.su_group); + ret =3D configfs_register_subsystem(&vkms_subsys); + + is_configfs_registered =3D ret =3D=3D 0; + + return ret; +} + +void vkms_configfs_unregister(void) +{ + if (is_configfs_registered) + configfs_unregister_subsystem(&vkms_subsys); +} diff --git a/drivers/gpu/drm/vkms/vkms_configfs.h b/drivers/gpu/drm/vkms/vk= ms_configfs.h new file mode 100644 index 000000000000..e9020b0043db --- /dev/null +++ b/drivers/gpu/drm/vkms/vkms_configfs.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +#ifndef _VKMS_CONFIGFS_H_ +#define _VKMS_CONFIGFS_H_ + +int vkms_configfs_register(void); +void vkms_configfs_unregister(void); + +#endif /* _VKMS_CONFIGFS_H_ */ diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_dr= v.c index 23817c7b997e..5bcfbcb6c0c5 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -28,6 +28,7 @@ #include =20 #include "vkms_config.h" +#include "vkms_configfs.h" #include "vkms_drv.h" =20 #define DRIVER_NAME "vkms" @@ -214,6 +215,10 @@ static int __init vkms_init(void) int ret; struct vkms_config *config; =20 + ret =3D vkms_configfs_register(); + if (ret) + return ret; + config =3D vkms_config_default_create(enable_cursor, enable_writeback, en= able_overlay); if (IS_ERR(config)) return PTR_ERR(config); @@ -250,6 +255,8 @@ void vkms_destroy(struct vkms_config *config) =20 static void __exit vkms_exit(void) { + vkms_configfs_unregister(); + if (!default_config) return; =20 --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C435F23E22B for ; Fri, 7 Mar 2025 16:34:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365245; cv=none; b=u4v6dwVeiUCLKuSyDjrccRrIFcsl9qmZn17YL8kzkfpBFVxebLAeecUHtzGeDdUD0K0/F2siWvvghweRBXyNDzZt4wcZbKvQ41igr04TpHen6gflISgkicTBOjgIJblN8G1+4V7kwN19XtgoEerF/NWca8GtCY7gzFhJorrwhSg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365245; c=relaxed/simple; bh=plwNemilP6KuLq1qbr2CIkiTrDCudwoTizzJD/aTFIQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VzyAK9jukAEqoggh0l9NMwuFwN8Tje5hUGR+xVTep9nMEmfoXVkTkg1soI0hgO2v+NWdYiVlMUmbopVnFRnN5yaMqeduOo8/oHW90FxyTYCZnc4cWsjAjBFpyULPNuUgxqucDNDxWrxX66JVV48MawLQVTcqY+XyEOhjbAvqhc0= 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=H46CP+4X; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="H46CP+4X" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-39129fc51f8so1807207f8f.0 for ; Fri, 07 Mar 2025 08:34:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365242; x=1741970042; 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=gYVCtKALM7tRTxTIBs5CBqjqnZ0ufRMiomzRADReB1Y=; b=H46CP+4XiU3jdY5bEXz7r68FGnSn6mRdXIIaYiUmj//H3fRrW36yVY7blrjx9bLiQc ofCmOsqve7XBErKN2PM0kSgZTb4t6ej5CBcS8VK0qbDQVHb4O18RJUaiSmfDCHklJn5T x0V4LHsBdqLR3JCRfkGGB2Xpj1p6gebvCVsiJ47MJDHTfE+NDCnlCThkrAUytEfFiMbw VpIbSxaPTgq1115Bff9aanXeFSCzYEHpCflgqutKxD0awJOXz747kUDDfEWnZx3mTSbq GApTC9AO/fqESgShMCzTysYTJvy/jcIMypMnjrwLWyDq0MsU4r41xECUtKIHMgI3Nxsq HMKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365242; x=1741970042; 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=gYVCtKALM7tRTxTIBs5CBqjqnZ0ufRMiomzRADReB1Y=; b=dvWEVnoBvbowCJ9dTUQo9VS6b9vnXpAo+gKblwRfiFHX39Nr5bv6OC17lhk6kfD9k+ P8Rn5ONkJgvbv+QeBmA4AkWNLtnXXIgZ5Dqk+fKf14qW3Xf8FJ24n0rJTG+eCzdSoOon 2Ms9HIhqNs3eotsGxwE0AaQMDZPyIyyD4SRHaPyHWsG5jTR58rzySkruE6Aq+zlBA81o tO6x4CIL544QygUTIc7Sb2FxMXJp58KiQxIiUvgCKNrEpTgqizSFbFPtOCgNn6+gIAP8 L9UeQKYz1EGhjjxlFhQGJ/S/fojViN2aGzH+QdNaSZFrqH2Jyr1U0W2iWciYvKmO1st5 Qrog== X-Forwarded-Encrypted: i=1; AJvYcCW3yyYsOrVwH5KNvY0a8g4RpHYYZS7TP0XedK5w7PNWLqJoXeGStgTZPn+03nA6N6hzAQR1+roQEibr9iI=@vger.kernel.org X-Gm-Message-State: AOJu0YzFxXPRjFyWPLNHVbMiP+HtGu7dqn/xYW0Kp5eZecdCZhhOPxjX fdVFWp+tnBjUF1uvq3U8PXFYsn/VoPen8PkSzp8bHW99eA5EPtM2 X-Gm-Gg: ASbGncsWnPgJpl0Z6SceZnv740WnszfTKfV/g1JHbQe20WdAt+e8ZzZcWKDLHJMRrtB /taSUGUD3XnSIvIdM1ukWAxQoy/p8uqKAvt4W9MmNk7vV3Zqm8oVATh2rTNoOoZ9IXXBbhoH5nC udtrE1D3BgeJ6NkdmNRitDNQcZ/nJGCLsv4zmXlcUsWuqYIAxsIgdvng8BsqfQD7TfeypG+RpHs 4s0kwc2u+I3TB+Un4ITkWTWbW/HqlSS9sqzzIcMtKAdbAnWpCoMYXFal/PhNKAX4F1Y18kgISIT 7Ip2EItl3/Y68nrQiCQCHtLMM8gb+LyAyYB1tYiVTE20YIs= X-Google-Smtp-Source: AGHT+IHUuKO6qRQ3oA5vpJ7m+Un5BJ2C/6O9k5CT+//v2AYCHfRgiVqmxqLuZIOxa0Icg/nj8Yx3UQ== X-Received: by 2002:a05:6000:1867:b0:390:f9f9:3e9c with SMTP id ffacd0b85a97d-39132d7a804mr2826550f8f.25.1741365241768; Fri, 07 Mar 2025 08:34:01 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:01 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 03/16] drm/vkms: Allow to configure multiple planes via configfs Date: Fri, 7 Mar 2025 17:33:40 +0100 Message-ID: <20250307163353.5896-4-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/planes to allow to create as many planes as required. Reviewed-by: Louis Chauvet Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 16 ++++- drivers/gpu/drm/vkms/vkms_configfs.c | 88 ++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 423bdf86b5b1..bf23d0da33fe 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -71,6 +71,19 @@ By default, the instance is disabled:: cat /config/vkms/my-vkms/enabled 0 =20 +And directories are created for each configurable item of the display pipe= line:: + + tree /config/vkms/my-vkms + =E2=94=9C=E2=94=80=E2=94=80 enabled + =E2=94=94=E2=94=80=E2=94=80 planes + +To add items to the display pipeline, create one or more directories under= the +available paths. + +Start by creating one or more planes:: + + sudo mkdir /config/vkms/my-vkms/planes/plane0 + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -79,8 +92,9 @@ Finally, you can remove the VKMS instance disabling it:: =20 echo "0" | sudo tee /config/vkms/my-vkms/enabled =20 -And removing the top level directory:: +And removing the top level directory and its subdirectories:: =20 + sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index ee186952971b..a7c705e00e4c 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -16,6 +16,7 @@ static bool is_configfs_registered; * * @group: Top level configuration group that represents a VKMS device. * Initialized when a new directory is created under "/config/vkms/" + * @planes_group: Default subgroup of @group at "/config/vkms/planes" * @lock: Lock used to project concurrent access to the configuration attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -23,16 +24,99 @@ static bool is_configfs_registered; */ struct vkms_configfs_device { struct config_group group; + struct config_group planes_group; =20 struct mutex lock; struct vkms_config *config; bool enabled; }; =20 +/** + * struct vkms_configfs_plane - Configfs representation of a plane + * + * @group: Top level configuration group that represents a plane. + * Initialized when a new directory is created under "/config/vkms/planes" + * @dev: The vkms_configfs_device this plane belongs to + * @config: Configuration of the VKMS plane + */ +struct vkms_configfs_plane { + struct config_group group; + struct vkms_configfs_device *dev; + struct vkms_config_plane *config; +}; + #define device_item_to_vkms_configfs_device(item) \ container_of(to_config_group((item)), struct vkms_configfs_device, \ group) =20 +#define child_group_to_vkms_configfs_device(group) \ + device_item_to_vkms_configfs_device((&(group)->cg_item)->ci_parent) + +#define plane_item_to_vkms_configfs_plane(item) \ + container_of(to_config_group((item)), struct vkms_configfs_plane, group) + +static void plane_release(struct config_item *item) +{ + struct vkms_configfs_plane *plane; + struct mutex *lock; + + plane =3D plane_item_to_vkms_configfs_plane(item); + lock =3D &plane->dev->lock; + + scoped_guard(mutex, lock) { + vkms_config_destroy_plane(plane->config); + kfree(plane); + } +} + +static struct configfs_item_operations plane_item_operations =3D { + .release =3D &plane_release, +}; + +static const struct config_item_type plane_item_type =3D { + .ct_item_ops =3D &plane_item_operations, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_group *make_plane_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_plane *plane; + + dev =3D child_group_to_vkms_configfs_device(group); + + scoped_guard(mutex, &dev->lock) { + if (dev->enabled) + return ERR_PTR(-EBUSY); + + plane =3D kzalloc(sizeof(*plane), GFP_KERNEL); + if (!plane) + return ERR_PTR(-ENOMEM); + + plane->dev =3D dev; + + plane->config =3D vkms_config_create_plane(dev->config); + if (IS_ERR(plane->config)) { + kfree(plane); + return ERR_CAST(plane->config); + } + + config_group_init_type_name(&plane->group, name, &plane_item_type); + } + + return &plane->group; +} + +static struct configfs_group_operations planes_group_operations =3D { + .make_group =3D &make_plane_group, +}; + +static const struct config_item_type plane_group_type =3D { + .ct_group_ops =3D &planes_group_operations, + .ct_owner =3D THIS_MODULE, +}; + static ssize_t device_enabled_show(struct config_item *item, char *page) { struct vkms_configfs_device *dev; @@ -128,6 +212,10 @@ static struct config_group *make_device_group(struct c= onfig_group *group, config_group_init_type_name(&dev->group, name, &device_item_type); mutex_init(&dev->lock); =20 + config_group_init_type_name(&dev->planes_group, "planes", + &plane_group_type); + configfs_add_default_group(&dev->planes_group, &dev->group); + return &dev->group; } =20 --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D1F1823ED74 for ; Fri, 7 Mar 2025 16:34:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365248; cv=none; b=jnUjYN7inwtEMMUKXM0s8XnP1xyYsQsYc0Bi6OyMUbJtII/7XSnhgxoc5WgEcWOn9vs2WM+v8xKMLHPWD3e4MdVOPkPwFfospnuqRUu+MgJ/8dJfw7XruU9U+elLhdqSstgfjac9cxqWpuVcBb199L7u36trF/SjIyw/UO+1W80= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365248; c=relaxed/simple; bh=DlHzaQ6+kTsVPKWf0eXgOzJnInQyREV1NJneAk827rQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tmMA/GgBIPbkVHmnoy+2sezsJEQtlY1P3yQztUeJdVoARtbcN+PTLr6QRed8fENWjnbaMRa4D7zt6bn6CAA7uSyicVVYIz8w6lduzjic8OdvcCsudrIV+8WVhAZkvvUwXerjusLAH+nw6Uh1hSwg7Mez9SWJv1e6hVGXrW+kjBo= 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=Qo8Cz2sA; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Qo8Cz2sA" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-390cf7458f5so2050993f8f.2 for ; Fri, 07 Mar 2025 08:34:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365245; x=1741970045; 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=6MV2OWA6Mh9vxWtK9J9PJqfJQiomHto+OaIeMpCvYMU=; b=Qo8Cz2sAF9UDi5WehnqBHTyj5HOpR/QmSyY45bqFOk6kIy+dG79ztmxkXqsuzeUf8J 33tZKeIORqwP2dLEWn5KT7AiOoyoJRYZVNsAhtWJ51cfdwQhz5pRsAZg9gU18upS3QU0 d/3AwOczpeQaiSbaWwA2ULdrdQlFuLvUhZqq7OBu4pgrpmDAnYocb40jDkAh1Vuw1+Rz 2axTC+h5meWnD8cvaRwstu1t9FbrJifoAk1L1mdSBF4oWmSSUOuyLlUV3DLp6rBoBbdF YcfpnbNPt3D1utgem0q7Lx32Pdcjf3mwBfva1bZc2McZDxStjp1FFB4Bdm80pNp1WlVE Lg1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365245; x=1741970045; 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=6MV2OWA6Mh9vxWtK9J9PJqfJQiomHto+OaIeMpCvYMU=; b=LpjfBYUaThatXSsL6TkR4iCuXUgZtt0Z78TNdZHh5x+xQigWYjH74O+9gAzrbK3zWL 55g446AjNzpq3INbw9djNh5+YWhOBN7dkE/YJsSpM1x55QVfFrZp7ttSHZ1bGEcNq8W6 5gg8emuwekHbxkFvAJk9RvOvdd5Es19nZBN9O4eSSb5XcLKjsiTMSKtt0VRxKTTpqmc+ 6Yx6NyrZ0tqK9069BJpaolXSDPs2VsXQhchVqkAKYO4zcDURtDRRX3Ju+59G5tA/vj+p olSmzWQ7vNS+wBBj7lAqlqCb42bXAvA2y+K+Hz7GPmJdngexlx9YvQNuBxdw9MhTDS7j jHKw== X-Forwarded-Encrypted: i=1; AJvYcCWZqqY3JoGuinDEK0KHVr2N4XrBus81PbWyJIZgaz+AMbAAl+erVQLhu03zsO/2LfNU7xvJe3MlfdLcaoI=@vger.kernel.org X-Gm-Message-State: AOJu0YyCouIGRpnWAbrcbA1HyAGMMd4/p5E4LXv6CIBN9JgT/SsJLlTc iz9jWmO8G19UWN2TiOqVScjMfQu80j2zJwAnfQS53CwqIh/7dxIt X-Gm-Gg: ASbGncuk66E0OamyzURcXoxfd1L+jyvyOLeMhVmjnogt95dHVf+lj9jPWtWJ0LBaKtN 1+P1LnTlafFvgtIUCZEYsdhVDcT71Sq8T4LrSfx6j+WZSJDvo1F6nFPI6xnOtbUIQvjcouVcP+H d1u4s4V9LtirS4Rurzza4VZGYjwq76Jg/2vC+6MgYc8vrjiX5uV+vbChbC9iopBXzbJMbAaZxz2 F5duFaORoUim94AEgy4mnj++YzIfxdZryeH/4GDI+816dUrrBJA37at2TA7NC50/QKdfclxhzGR Egrjh70XG53orEJ+jnyoW6EYCo/Qh8m64wdOT4gk/+LINK0= X-Google-Smtp-Source: AGHT+IHy6prLRyeDeLBBqQYAih4z7dhF8ZsgqaozMxKPj1Kdi9OZe1sSmPCaA48+hp2UIfpfozoC+w== X-Received: by 2002:a5d:47cd:0:b0:391:952:c730 with SMTP id ffacd0b85a97d-39132d09078mr4081895f8f.11.1741365243576; Fri, 07 Mar 2025 08:34:03 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:02 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 04/16] drm/vkms: Allow to configure the plane type via configfs Date: Fri, 7 Mar 2025 17:33:41 +0100 Message-ID: <20250307163353.5896-5-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When a plane is created, add a `type` file to allow to set the type: - 0 overlay - 1 primary - 2 cursor Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 5 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 46 ++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index bf23d0da33fe..a87e0925bebb 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -84,6 +84,11 @@ Start by creating one or more planes:: =20 sudo mkdir /config/vkms/my-vkms/planes/plane0 =20 +Planes have 1 configurable attribute: + +- type: Plane type: 0 overlay, 1 primary, 2 cursor (same values as those + exposed by the "type" property of a plane) + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index a7c705e00e4c..398755127759 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -55,6 +55,51 @@ struct vkms_configfs_plane { #define plane_item_to_vkms_configfs_plane(item) \ container_of(to_config_group((item)), struct vkms_configfs_plane, group) =20 +static ssize_t plane_type_show(struct config_item *item, char *page) +{ + struct vkms_configfs_plane *plane; + enum drm_plane_type type; + + plane =3D plane_item_to_vkms_configfs_plane(item); + + scoped_guard(mutex, &plane->dev->lock) + type =3D vkms_config_plane_get_type(plane->config); + + return sprintf(page, "%u", type); +} + +static ssize_t plane_type_store(struct config_item *item, const char *page, + size_t count) +{ + struct vkms_configfs_plane *plane; + enum drm_plane_type type; + + plane =3D plane_item_to_vkms_configfs_plane(item); + + if (kstrtouint(page, 10, &type)) + return -EINVAL; + + if (type !=3D DRM_PLANE_TYPE_OVERLAY && type !=3D DRM_PLANE_TYPE_PRIMARY = && + type !=3D DRM_PLANE_TYPE_CURSOR) + return -EINVAL; + + scoped_guard(mutex, &plane->dev->lock) { + if (plane->dev->enabled) + return -EBUSY; + + vkms_config_plane_set_type(plane->config, type); + } + + return (ssize_t)count; +} + +CONFIGFS_ATTR(plane_, type); + +static struct configfs_attribute *plane_item_attrs[] =3D { + &plane_attr_type, + NULL, +}; + static void plane_release(struct config_item *item) { struct vkms_configfs_plane *plane; @@ -74,6 +119,7 @@ static struct configfs_item_operations plane_item_operat= ions =3D { }; =20 static const struct config_item_type plane_item_type =3D { + .ct_attrs =3D plane_item_attrs, .ct_item_ops =3D &plane_item_operations, .ct_owner =3D THIS_MODULE, }; --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 593DD23ED6C for ; Fri, 7 Mar 2025 16:34:06 +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=1741365248; cv=none; b=dKJG7nE07iH5QpdI7qjSNhCGnyoDDMtiP+0B59nMXxo2rUJy1vUNm1QffONMvmvzyS3NBvhUvlBK2RXuNTk9pIXSjWL0mvjZVLbN14AGt1gVC9zEpGf8v+OY5DxRLcuEpmTBqnvOhSlfdjAH0SvHpGE6s7a7BCJyNZLsPIbcIO0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365248; c=relaxed/simple; bh=4ovzOrfYbRN+L8oGVVrRZuVtOudfe9yudJObZVaz6OE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=sV9nj98DDCgBUNLc+mY2p5jUZDPoUpUvP3EoCE5e0SCE35px6N0qhILEV7tx3TaobDyppHbi1QWiLNPX5hvBcLY2jYiY8f0XPNJ4ftE777gxO9U8o0oVKZKKxyinhpYF++rN8y0P8/0vZ3ykRnScPR4FAdVqvjiaxr2HSwrbWoo= 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=lKOuOEjI; 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="lKOuOEjI" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-43bcad638efso12561675e9.2 for ; Fri, 07 Mar 2025 08:34:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365245; x=1741970045; 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=rQlMQlCFKnmKdpNz3j/9En9DKgH57otLDgNbJI7oEnA=; b=lKOuOEjIQxzC9oJbO2yr05l7MpEfz2ajTa2TUAYvCtYKBbNhcYs2JCzbLyaJ3Zy7WI cqhpXX2cgWPsmU2EvNzmg2jN7cVRImasPuFr225q423bCOUOBrNtkVYxTItPooMTLSvU isG/7TUIDHET/tC599Fyj/tgwemc5GBUhImzERnF4R8ht4Bc+XshQN5qWmwxCYrrht/t oIqdausaCj6Y7GIgGQsWQjTYGVwkpZpsFvVNDKiBWUVTXeoeGY5mRYrVE9uine/qoYAK Pzwp4zy4EoHs7KAZfJ09J2Q3oaGzcRT3SZzGB0CgJzBSpGhjBOBHnp6kLhw2POzxExan PoJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365245; x=1741970045; 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=rQlMQlCFKnmKdpNz3j/9En9DKgH57otLDgNbJI7oEnA=; b=vltK1GHVPYCxV0uTJ+iizY+fBi9Cy1gI3nOqvkamxm+c8EvXNkQsYa2YJJFQK56A+O lLJNMY+NEYeKlpRgfVGWPuI3dgdZ8su3jhaPgx/mNil2b8SsNcytCUArSqLpsTzr0Au0 YwwBX+79lMbzfeUmBoy8j9z/b5mvkygTCDmVNxcPaVyKbWvN4kTFdJKgDI7Ei8yzcWUT O23DjkrPY9KptZFBJTEUWe/7zLyum4Ewgf6JEyIqgufKU8JGw8S3v3nlWK+5S/BeyvOd L7ZucbCBkQ7IULFZrWg4oOTCuabZgiV0yq3KaYYI0yRHUowh9FgXMvgddf8xHYboMUzT ksLg== X-Forwarded-Encrypted: i=1; AJvYcCVH2t/3HlvfIe2qTafBsGBx41bXrBTD1ap19YviAtY+m01zYwQPAtZzeWSRl9RWt8OjsxU/n7cBzxTS88o=@vger.kernel.org X-Gm-Message-State: AOJu0YybSVPC7XSWQPx75sGOKhq5iOVd29gLI7RXBZQh3d96m44SEsbn 4y5o2ZXLJW+l8uXc+xxD5pCSAa3+U9PWBv5yDmDgqym//Kql773q X-Gm-Gg: ASbGncsea/si+mS7NOSPd/krMsGyElr6IPNZ+Ow6K+W0QcAJxuSd460kDb4YBu/3tDi Fon+a4ShjNkDHt6OESAsh8f1uHr8bNYViDvXPkFK+KofpugtcsNfMwZ/Jx9Et6LsZiXesP4Q+gR 8E2ZK62APEotpWR/fo8gHRI+RUl8HQHKMKVc8z1qyC2705KoR3yb2E19m6m6vyB1eUsdWMSe/1j o0mD+/sfkpT0McSwp8XyhrwFofy9qdnEK9W7+jaf10wIVSVvtzf46Dkq9QxHGOQ6KlPm39iesEW mGpbczxzygqpn+ic4F59sYXOsH564LBXVT4HmELAphFcunM= X-Google-Smtp-Source: AGHT+IEghPLDlJPmvq/wiT5I8JEW5bsFoBksc9aRUiGeNRF/3NTsA37xXdz7/FA2hteWHdFBtnqzKA== X-Received: by 2002:a5d:648f:0:b0:390:fe13:e0ba with SMTP id ffacd0b85a97d-39132d70bc4mr2691197f8f.27.1741365244533; Fri, 07 Mar 2025 08:34:04 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:04 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 05/16] drm/vkms: Allow to configure multiple CRTCs via configfs Date: Fri, 7 Mar 2025 17:33:42 +0100 Message-ID: <20250307163353.5896-6-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/crtcs to allow to create as many CRTCs as required. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 85 ++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index a87e0925bebb..e0699603ef53 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -74,6 +74,7 @@ By default, the instance is disabled:: And directories are created for each configurable item of the display pipe= line:: =20 tree /config/vkms/my-vkms + =E2=94=9C=E2=94=80=E2=94=80 crtcs =E2=94=9C=E2=94=80=E2=94=80 enabled =E2=94=94=E2=94=80=E2=94=80 planes =20 @@ -89,6 +90,10 @@ Planes have 1 configurable attribute: - type: Plane type: 0 overlay, 1 primary, 2 cursor (same values as those exposed by the "type" property of a plane) =20 +Continue by creating one or more CRTCs:: + + sudo mkdir /config/vkms/my-vkms/crtcs/crtc0 + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -100,6 +105,7 @@ Finally, you can remove the VKMS instance disabling it:: And removing the top level directory and its subdirectories:: =20 sudo rmdir /config/vkms/my-vkms/planes/* + sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 398755127759..62a82366791d 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -17,6 +17,7 @@ static bool is_configfs_registered; * @group: Top level configuration group that represents a VKMS device. * Initialized when a new directory is created under "/config/vkms/" * @planes_group: Default subgroup of @group at "/config/vkms/planes" + * @crtcs_group: Default subgroup of @group at "/config/vkms/crtcs" * @lock: Lock used to project concurrent access to the configuration attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -25,6 +26,7 @@ static bool is_configfs_registered; struct vkms_configfs_device { struct config_group group; struct config_group planes_group; + struct config_group crtcs_group; =20 struct mutex lock; struct vkms_config *config; @@ -45,6 +47,20 @@ struct vkms_configfs_plane { struct vkms_config_plane *config; }; =20 +/** + * struct vkms_configfs_crtc - Configfs representation of a CRTC + * + * @group: Top level configuration group that represents a CRTC. + * Initialized when a new directory is created under "/config/vkms/crtcs" + * @dev: The vkms_configfs_device this CRTC belongs to + * @config: Configuration of the VKMS CRTC + */ +struct vkms_configfs_crtc { + struct config_group group; + struct vkms_configfs_device *dev; + struct vkms_config_crtc *config; +}; + #define device_item_to_vkms_configfs_device(item) \ container_of(to_config_group((item)), struct vkms_configfs_device, \ group) @@ -55,6 +71,71 @@ struct vkms_configfs_plane { #define plane_item_to_vkms_configfs_plane(item) \ container_of(to_config_group((item)), struct vkms_configfs_plane, group) =20 +#define crtc_item_to_vkms_configfs_crtc(item) \ + container_of(to_config_group((item)), struct vkms_configfs_crtc, group) + +static void crtc_release(struct config_item *item) +{ + struct vkms_configfs_crtc *crtc; + struct mutex *lock; + + crtc =3D crtc_item_to_vkms_configfs_crtc(item); + lock =3D &crtc->dev->lock; + + scoped_guard(mutex, lock) { + vkms_config_destroy_crtc(crtc->dev->config, crtc->config); + kfree(crtc); + } +} + +static struct configfs_item_operations crtc_item_operations =3D { + .release =3D &crtc_release, +}; + +static const struct config_item_type crtc_item_type =3D { + .ct_item_ops =3D &crtc_item_operations, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_group *make_crtc_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_crtc *crtc; + + dev =3D child_group_to_vkms_configfs_device(group); + + scoped_guard(mutex, &dev->lock) { + if (dev->enabled) + return ERR_PTR(-EBUSY); + + crtc =3D kzalloc(sizeof(*crtc), GFP_KERNEL); + if (!crtc) + return ERR_PTR(-ENOMEM); + + crtc->dev =3D dev; + + crtc->config =3D vkms_config_create_crtc(dev->config); + if (IS_ERR(crtc->config)) { + kfree(crtc); + return ERR_CAST(crtc->config); + } + + config_group_init_type_name(&crtc->group, name, &crtc_item_type); + } + + return &crtc->group; +} + +static struct configfs_group_operations crtcs_group_operations =3D { + .make_group =3D &make_crtc_group, +}; + +static const struct config_item_type crtc_group_type =3D { + .ct_group_ops =3D &crtcs_group_operations, + .ct_owner =3D THIS_MODULE, +}; + static ssize_t plane_type_show(struct config_item *item, char *page) { struct vkms_configfs_plane *plane; @@ -262,6 +343,10 @@ static struct config_group *make_device_group(struct c= onfig_group *group, &plane_group_type); configfs_add_default_group(&dev->planes_group, &dev->group); =20 + config_group_init_type_name(&dev->crtcs_group, "crtcs", + &crtc_group_type); + configfs_add_default_group(&dev->crtcs_group, &dev->group); + return &dev->group; } =20 --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 84AE423F292 for ; Fri, 7 Mar 2025 16:34: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=1741365250; cv=none; b=e8bosPugcSJ5n5oFshOVyqHXuidzploeCaRpsR4+hRxMWaf3wXbI4w/HesFJ2k1VviyQMMHecYYIzsq2eDftkTOpq9jhP1314o0UAZcpf+DGM8K62kzAB3OY4d+XqmyMwA1f7tJ3lSFN7IFUMh97kmcsb8D2Gnk0x+P6IP5Gk0g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365250; c=relaxed/simple; bh=MLVeS3S2M/4dawND6bcTBsnDTo8J1PX6I06dfPfpdg0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=mG6uHZYAR5Q2rlfA34MZE6yivQlpwrk+rfxqZBN51wYjwdNU0EzPpjc7QH25icie/E+j8U8C69b/PBDoDxrtPRADWya1z5GgOpe1tOw8L58BwjanTrZPj9y01xqEBwBUktjJier8qzUkTame68Oh0FEgfxzM6C6FnxzOhbdiD90= 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=ac7OwQEZ; 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="ac7OwQEZ" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-43bbc8b7c65so24196475e9.0 for ; Fri, 07 Mar 2025 08:34:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365247; x=1741970047; 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=adxvT7ii/BhGf5+g/wbSaeJv9L6Vrv0AMOExKXchHM4=; b=ac7OwQEZJt+6H7/us/HeBeAbOqkh1Cyhbc9sYyNtNUmzeCCFOenJOtduN/Mhax0qSe R5A4X1+VGI7CGeyJozq36I0tUcuVqlvF43jpZD55KbEYxiPYsnHoDdDIBuBfcms8vutF ZG+Ajw6pyRpK2Hc/FZx5KpboBdZDKSBoGVfjO5+1w3jEGFcyAhZelqkjyD8pkpRwGCJO 7/90vS4Nb3+PnNBlTxFnXcCCZVNMRtH78h0ufOTSIAZmfzQqMfVNcenc2a33Pj8QnEZT SBUniN4ImPFhEILZAEis8r8Pl1A5tWpUJNpoKoas9xy7HxKYdqRLez5EObl9dCM6MqF1 QBAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365247; x=1741970047; 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=adxvT7ii/BhGf5+g/wbSaeJv9L6Vrv0AMOExKXchHM4=; b=hde2wRobSqA2RMJKrCUBmsH9JXngVo9EFkvqGXj5JBUMOWdOHYQq4cng5hzzsqhShX 6mgM+AwJj+v95d1F1XmHYFvf2C04CsX8FiwwKsGr4wQxEDvcWM3NThE6Ma8tJTkvoyTU vWq1nt+007SPU0XX4bAaHriZNvLcEIA+o6ENCs3NKzLpjQv+uO6ICzX3zJRFOBAmn2iu Aut5YRPmuUVMFF9Oi9lOOtP3zETeqfpzBqaP3QjPW24i15g27JKgJI7/n9O9YX6cVO3G wKG/20ZEK6kVG8FBtLDMhhuBGHYqcgZGqShzkCOLADfH1E0Zd+e8RWniLEzeyQrbTmaZ hCgw== X-Forwarded-Encrypted: i=1; AJvYcCUpfnNDjMjOe7NRQPxXBH+PvxuVTUATSMNtfRIZZsO8FzcUnt4eOwIBr0CfJa4D4jX4BuWIKtOOVGs4dgU=@vger.kernel.org X-Gm-Message-State: AOJu0YyonvRiDiHEKsJCM78QDOVb2UqPWEGcvz7LvhmjypqJBbOTcaL/ 7I40wOaqaj+aA5bFWynrCD1lqKtNlp1jicGKAbWpZwQwQVIw4XsI X-Gm-Gg: ASbGncuC+9xkwL0a1pWjMP3lrNE+sJ6YaYCdaejlBJmKXAkye6ZWg1VE6mD2dvx2K36 NwUYWlVnhGlkCTEzB6OPQoLOcL37bTI/4qyN6WCcpJ/ytrbP+s19/GnJ2Torgu072SlQYSCMNZ7 9DOYPZ9ka6sRa8y7Dx9tmp4X1fPG8QtKwDDe1wDu+ldxe/Te2/9eeOrh+7OB0KGhnr4MKAHQWBH yWJxBbNEkTTPIykV6E+zlTrIaxxOSzkD6PNAbWjOJeuCKJh8fKChdbQfOz74h9h+QJlcrXgE0ew Cr/rIM9lNL0J5SyOeQgaRakzSSx0ldOKMl+wT/fLndRRjVs= X-Google-Smtp-Source: AGHT+IG5OJlDQkUEWLTKW9FjBSL7uf+mEOU/9qxTIBuGznGo8NW21a6bnmcM0Z6BWJ1f1cOvwRXYgA== X-Received: by 2002:a05:600c:4e91:b0:43b:d116:6483 with SMTP id 5b1f17b1804b1-43c6021f13cmr34597475e9.27.1741365246562; Fri, 07 Mar 2025 08:34:06 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:05 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 06/16] drm/vkms: Allow to configure CRTC writeback support via configfs Date: Fri, 7 Mar 2025 17:33:43 +0100 Message-ID: <20250307163353.5896-7-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When a CRTC is created, add a `writeback` file to allow to enable or disable writeback connector support Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 4 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 42 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index e0699603ef53..abe7a0f5a4ab 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -94,6 +94,10 @@ Continue by creating one or more CRTCs:: =20 sudo mkdir /config/vkms/my-vkms/crtcs/crtc0 =20 +CRTCs have 1 configurable attribute: + +- writeback: Enable or disable writeback connector support by writing 1 or= 0 + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 62a82366791d..e9f445043268 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -74,6 +74,47 @@ struct vkms_configfs_crtc { #define crtc_item_to_vkms_configfs_crtc(item) \ container_of(to_config_group((item)), struct vkms_configfs_crtc, group) =20 +static ssize_t crtc_writeback_show(struct config_item *item, char *page) +{ + struct vkms_configfs_crtc *crtc; + bool writeback; + + crtc =3D crtc_item_to_vkms_configfs_crtc(item); + + scoped_guard(mutex, &crtc->dev->lock) + writeback =3D vkms_config_crtc_get_writeback(crtc->config); + + return sprintf(page, "%d\n", writeback); +} + +static ssize_t crtc_writeback_store(struct config_item *item, const char *= page, + size_t count) +{ + struct vkms_configfs_crtc *crtc; + bool writeback; + + crtc =3D crtc_item_to_vkms_configfs_crtc(item); + + if (kstrtobool(page, &writeback)) + return -EINVAL; + + scoped_guard(mutex, &crtc->dev->lock) { + if (crtc->dev->enabled) + return -EBUSY; + + vkms_config_crtc_set_writeback(crtc->config, writeback); + } + + return (ssize_t)count; +} + +CONFIGFS_ATTR(crtc_, writeback); + +static struct configfs_attribute *crtc_item_attrs[] =3D { + &crtc_attr_writeback, + NULL, +}; + static void crtc_release(struct config_item *item) { struct vkms_configfs_crtc *crtc; @@ -93,6 +134,7 @@ static struct configfs_item_operations crtc_item_operati= ons =3D { }; =20 static const struct config_item_type crtc_item_type =3D { + .ct_attrs =3D crtc_item_attrs, .ct_item_ops =3D &crtc_item_operations, .ct_owner =3D THIS_MODULE, }; --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9753C2405EC for ; Fri, 7 Mar 2025 16:34:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365253; cv=none; b=D6mIE/hfEkEB5iEDW+AeDq8HXUzin5pwk3ddsq6/RXLy3VBLQkkOBvrA6igxaOhQ9GVtcY6KaxjFwbsaOWUPrfNvUFNkPQFPyI8yF/8JrFhpJiBRw6LNMIAUJ10pDut7TiueMunn5t8WPXZFyJ8vZTB91JQPSE2o+Aju8M7YF8k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365253; c=relaxed/simple; bh=JVgTnIcYPlhqvVuMt+rGxEebARTXyB9Nrkey64pA5gM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oWvB8NDenYL1f2YCmTOJcIxK9ihXcQ2L6+IQrvsGtZxiHRUDjkyXkcZk2gvi3macMGAP+MDKe58Ysmhi1rkDan5sbyH5sKjNFwErSbqj1v9oue1R60KQA+Vf0irQcb4eTF5Ktp25YSRS/BRslLnT4WhVwKKVSRSMC2XeI5Xsjxo= 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=gG17TsXa; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gG17TsXa" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4394a0c65fcso24148045e9.1 for ; Fri, 07 Mar 2025 08:34:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365249; x=1741970049; 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=VdvTo+glOxdqzKi9x0MlR4nPEnMDWOMdVsZOru5+zTg=; b=gG17TsXaz92iW5gLT+qxVBOLwW8YsN0kzYLPHB/fbfvCpd2k4K59saOfN3y/+Sn1nu /7Joww6+AEs0Lpxx9S13NizjjewmuJYdA0zp9MxVKnD4BKchISIgxXYgZU+ilHUtH7jL KgmDqcPUIdAoPGKbb5v61gYXF3ZYDdDkzH8wd4oct2yr/JJ5xPAdnfKyV9B60Qx5UXuS lAfC9IGZ3Xwac3ErdlQuzkWwlUnOBgmV13TiQHLXPrDTeifdfV9H2v+ctZht2AQvJSqu PK0vAPijElqCwji2P6hEVAXhBIVLwBpLatUlKxpEfyY8PPFHMRhUOfveZQJqblHZdihZ aZqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365249; x=1741970049; 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=VdvTo+glOxdqzKi9x0MlR4nPEnMDWOMdVsZOru5+zTg=; b=UZTfVUSikVGgsIkazPWJNc3G241C7HP2a40gVqkqpeZcdbKYUojHnNN9Qu4CwUa4f4 SzjTOxZz3SkVKQQ3d+p42FEmkJW+RrXO6ynBvmhqaaYc1c8e/kw3Z7E9Vo106zrj0gw0 dtX0NS+B7hjD52b6GNf6lWwidbmbtOrrO9Ow2+etoYp9PkU9VCiGbimVbtoQ1mkiP1Su N6hFKh089pUKiqkXrKTYIMegTF5I27yf5cE3mjAy1vxXuaBcA2GTOyd2ibnK208Ko42f HpSpklhYd74gJkC74gY6rwz+S9YonbgoQqb6rmBMJSJB8LTfRmE56Dvtm3diWDDOWnLm H77g== X-Forwarded-Encrypted: i=1; AJvYcCVqDkaGzhluPFHpfgfsUiymX+tXACkW3LC+3RvCDSllJsUIw7O8wAk6Nz2gTyRKSVARPfORa7nO2XE06VU=@vger.kernel.org X-Gm-Message-State: AOJu0YyjUq+ZyJ+sWtUf8F5S8v95Ulsewq7Eqm6OQPsKgwPyPY5Ybpzg 3LXyDS245KzfdymrdDngvIaCMuoln4hNVYyHItsABuhEoqFQ8Yv1E7OiFrQE X-Gm-Gg: ASbGncuU2igrOmAKX9WNZJW0ijr5VcU8euFuzVayCrC//8hAA397J4OhmqFX10Gv5WQ YmNsUf2vvn/U7+mp+gafUbI+AB/rpRM/VPLxRObB7XDfRyBSHv7Qn3fv+dPY+7XpgZVxQ4kyAH3 MSdpkjZv4XMAiweBEG6UjdyN0HMUuggEyP+lAWZzVajrQ7gGb8uahkB0cwBMx/NvEeYrz2IE512 HYIlUByTYOZzf+klBhrSJgQqnytWKyGyXjD/YYtOyuq9zjnM4d6cXpi+rdAKfwncOp2RAoS1SY3 kPqm0MGZMNIqbC0q/AIzXDlmcZXY0U+xQrLHwoqC0qzRCb4= X-Google-Smtp-Source: AGHT+IFPRccxnoFktNFSGhc7+pjS3ePButwIioS5C1b+Nw+vSpBYT06wzWLbIJFKik54mEQ9Ap2++w== X-Received: by 2002:a05:600c:8581:b0:43c:e409:b8a7 with SMTP id 5b1f17b1804b1-43ce409bb17mr4439105e9.9.1741365248662; Fri, 07 Mar 2025 08:34:08 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:07 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 07/16] drm/vkms: Allow to attach planes and CRTCs via configfs Date: Fri, 7 Mar 2025 17:33:44 +0100 Message-ID: <20250307163353.5896-8-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/planes/plane/possible_crtcs that will contain symbolic links to the possible CRTCs for the plane. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 9 +++++ drivers/gpu/drm/vkms/vkms_configfs.c | 58 ++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index abe7a0f5a4ab..13b96837a266 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -98,6 +98,14 @@ CRTCs have 1 configurable attribute: =20 - writeback: Enable or disable writeback connector support by writing 1 or= 0 =20 +To finish the configuration, link the different pipeline items:: + + sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs + +Since at least one primary plane is required, make sure to set the right t= ype:: + + echo "1" | sudo tee /config/vkms/my-vkms/planes/plane0/type + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -108,6 +116,7 @@ Finally, you can remove the VKMS instance disabling it:: =20 And removing the top level directory and its subdirectories:: =20 + sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index e9f445043268..2cf97c2b6203 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -38,11 +38,13 @@ struct vkms_configfs_device { * * @group: Top level configuration group that represents a plane. * Initialized when a new directory is created under "/config/vkms/planes" + * @possible_crtcs_group: Default subgroup of @group at "plane/possible_cr= tcs" * @dev: The vkms_configfs_device this plane belongs to * @config: Configuration of the VKMS plane */ struct vkms_configfs_plane { struct config_group group; + struct config_group possible_crtcs_group; struct vkms_configfs_device *dev; struct vkms_config_plane *config; }; @@ -71,6 +73,10 @@ struct vkms_configfs_crtc { #define plane_item_to_vkms_configfs_plane(item) \ container_of(to_config_group((item)), struct vkms_configfs_plane, group) =20 +#define plane_possible_crtcs_item_to_vkms_configfs_plane(item) \ + container_of(to_config_group((item)), struct vkms_configfs_plane, \ + possible_crtcs_group) + #define crtc_item_to_vkms_configfs_crtc(item) \ container_of(to_config_group((item)), struct vkms_configfs_crtc, group) =20 @@ -178,6 +184,52 @@ static const struct config_item_type crtc_group_type = =3D { .ct_owner =3D THIS_MODULE, }; =20 +static int plane_possible_crtcs_allow_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_plane *plane; + struct vkms_configfs_crtc *crtc; + int ret; + + if (target->ci_type !=3D &crtc_item_type) + return -EINVAL; + + plane =3D plane_possible_crtcs_item_to_vkms_configfs_plane(src); + crtc =3D crtc_item_to_vkms_configfs_crtc(target); + + scoped_guard(mutex, &plane->dev->lock) { + if (plane->dev->enabled) + return -EBUSY; + + ret =3D vkms_config_plane_attach_crtc(plane->config, crtc->config); + } + + return ret; +} + +static void plane_possible_crtcs_drop_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_plane *plane; + struct vkms_configfs_crtc *crtc; + + plane =3D plane_possible_crtcs_item_to_vkms_configfs_plane(src); + crtc =3D crtc_item_to_vkms_configfs_crtc(target); + + scoped_guard(mutex, &plane->dev->lock) + vkms_config_plane_detach_crtc(plane->config, crtc->config); +} + +static struct configfs_item_operations plane_possible_crtcs_item_operation= s =3D { + .allow_link =3D plane_possible_crtcs_allow_link, + .drop_link =3D plane_possible_crtcs_drop_link, +}; + +static const struct config_item_type plane_possible_crtcs_group_type =3D { + .ct_item_ops =3D &plane_possible_crtcs_item_operations, + .ct_owner =3D THIS_MODULE, +}; + static ssize_t plane_type_show(struct config_item *item, char *page) { struct vkms_configfs_plane *plane; @@ -272,6 +324,12 @@ static struct config_group *make_plane_group(struct co= nfig_group *group, } =20 config_group_init_type_name(&plane->group, name, &plane_item_type); + + config_group_init_type_name(&plane->possible_crtcs_group, + "possible_crtcs", + &plane_possible_crtcs_group_type); + configfs_add_default_group(&plane->possible_crtcs_group, + &plane->group); } =20 return &plane->group; --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2C74240611 for ; Fri, 7 Mar 2025 16:34:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365253; cv=none; b=bPSG12+sRfWsKr72Z/vOYlhqijUKxe66qagSudJbfYeEq4kigjkBFvJ68RVNp1fFIIVTiQKSmXukktRlYRsaJceive+pTUGSRJadVhpRhPylNowNlvm80UBSpxnn9y39X9gP39EG1E0umfx11/cqKVck/JCJhRA8GjNT5rQg9so= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365253; c=relaxed/simple; bh=yiuFHxMBg5iIkLll8tlleCLfSuKQMthO0tHG6AiBgjA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=aThyQSy8JxPAikkRcMwekYqYcR+1hwHWn371M+1ptAcvN4OWnYtIIeu6gE3UZT5zTf8Hcq9FEaFG11hL8lQGMYe5X/QCN5QrKMQCvvUAoFWtv9ImY8Z3OWo76QOhXRtbdBf31DjkH8wkncThln78sDCi322ntmktTe8G7bL887w= 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=EmOW17qK; arc=none smtp.client-ip=209.85.221.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EmOW17qK" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-3911748893aso1494680f8f.3 for ; Fri, 07 Mar 2025 08:34:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365250; x=1741970050; 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=3oQHAhb9mjt4fInrJwzIGdl9Ptg528EudUlnjp2MNA8=; b=EmOW17qK6epmywL0bb/NHCd60xfZ9WWnINMyTP6rIliDTWameBBbQ1ICF5z6FwrBax Wa9XA5vr9zpSGMOdCz8mNcLwE7FnLm9Zp1o9L8cgL485rtlXIcPGBiP6Ix9RFgLyQ3WR IqZC9MWpLcG+6L6hNS7+4BGDsaBe+yaJJTRu/YzdIynx94C8djriR0/+slLvslmb0i47 0tL/0WRJq3eMrzwp3PgIIXrXNIYJGPN53VRakdxJc31AZH43W55QeRqt50HqFKfzUxEa ZQHbWUOoS0KNghcoWvOeUmFXupWqkF+MTniaS826h0gEtpJFPRnxNx9UzFMpCZg+AhW7 nO3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365250; x=1741970050; 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=3oQHAhb9mjt4fInrJwzIGdl9Ptg528EudUlnjp2MNA8=; b=XLCl5IZZtPa0evjG6yB5Yb61FpJIROXTBGByB3zMNj++gOoSdokYMKOf3EA35zD4kI AZuHBYw/Dt+LU3SAwKuLdsKhtpkUkAffQLX483oEpqzykfcslgKamsrWoBtu/nxX2sKS qiakkKPYmCz20cBNvnpXHh9omaXrdMvvRFWcKd/pDZeaVytx+icOStiGGhytF3VObkix OIsnBgUJfNKowCDDBYPOJluBjspbfkHPBZvAnlUB+Bfv1ZWH8tdBM0RnHiEs/VUg4VfK m3976bXmr5xAFwsAH7aqTvKhtW9QPY30E9351YPYFu7uJMd1UGN+ETZuXWyR2gZAr8M+ M+8Q== X-Forwarded-Encrypted: i=1; AJvYcCW0io9/YNXoua3oZVz+oE3jdsv1ViTg5HVy3QMKLZO4YdwB8sHfI/1hFZn8pADoYQ2FAleBHh7cSwE6v5s=@vger.kernel.org X-Gm-Message-State: AOJu0YyJRtR7NlYhVxY7QdK4Df4N7nzdnaH2qVzDBRbllAxCTJDnVH2T aBucdvTdpxj+nMe6AQ2NF1+ObEtF5kfpFXsus2NmxbPP2WURaSbE X-Gm-Gg: ASbGncto+jSDnREyjFqZZykbFnHkXNCf1SOS2BryjyUMoRjJ52bT8ZXWkjUXpfsap8I NHk8d6TgKxCMQF/gUpUV4XWk0YTMXBLLu/HfrIwjYMss0uRKLh8dZcyLD8PaW76FCQYglUekMRp cOayc6BQ1DcH5fju93cMjuscKuPiSF02orEVYIOm8zQioX66U1t03J+f/CZO4nDAUypqxpuoL9E yIdlrN+WSy+3hsjxfRfmuhCJjRbeoAop0vzEe5onYgUDtQn68uVza1d8N/Om6X7tL12zk5FBM4M 0xsmDXChUSP9tIupIa/mkMfgAqdteSbZReJBXmmX2CqdRwA= X-Google-Smtp-Source: AGHT+IFsrm3QntpbyPuP4HXlK5m2E23x9fnNTDWBthJFYTPmQuedXlywOAqGxiFsqYouDrx4t6NaqA== X-Received: by 2002:a5d:6d04:0:b0:391:10c5:d1c6 with SMTP id ffacd0b85a97d-39132d77194mr2387021f8f.2.1741365249931; Fri, 07 Mar 2025 08:34:09 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:09 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 08/16] drm/vkms: Allow to configure multiple encoders via configfs Date: Fri, 7 Mar 2025 17:33:45 +0100 Message-ID: <20250307163353.5896-9-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/encoders to allow to create as many encoders as required. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 87 ++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 13b96837a266..e24767448775 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -76,6 +76,7 @@ And directories are created for each configurable item of= the display pipeline:: tree /config/vkms/my-vkms =E2=94=9C=E2=94=80=E2=94=80 crtcs =E2=94=9C=E2=94=80=E2=94=80 enabled + =E2=94=9C=E2=94=80=E2=94=80 encoders =E2=94=94=E2=94=80=E2=94=80 planes =20 To add items to the display pipeline, create one or more directories under= the @@ -98,6 +99,10 @@ CRTCs have 1 configurable attribute: =20 - writeback: Enable or disable writeback connector support by writing 1 or= 0 =20 +Next, create one or more encoders:: + + sudo mkdir /config/vkms/my-vkms/encoders/encoder0 + To finish the configuration, link the different pipeline items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs @@ -119,6 +124,7 @@ And removing the top level directory and its subdirecto= ries:: sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* + sudo rmdir /config/vkms/my-vkms/encoders/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 2cf97c2b6203..0df86e63570a 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -18,6 +18,7 @@ static bool is_configfs_registered; * Initialized when a new directory is created under "/config/vkms/" * @planes_group: Default subgroup of @group at "/config/vkms/planes" * @crtcs_group: Default subgroup of @group at "/config/vkms/crtcs" + * @encoders_group: Default subgroup of @group at "/config/vkms/encoders" * @lock: Lock used to project concurrent access to the configuration attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -27,6 +28,7 @@ struct vkms_configfs_device { struct config_group group; struct config_group planes_group; struct config_group crtcs_group; + struct config_group encoders_group; =20 struct mutex lock; struct vkms_config *config; @@ -63,6 +65,20 @@ struct vkms_configfs_crtc { struct vkms_config_crtc *config; }; =20 +/** + * struct vkms_configfs_encoder - Configfs representation of a encoder + * + * @group: Top level configuration group that represents a encoder. + * Initialized when a new directory is created under "/config/vkms/encoder= s" + * @dev: The vkms_configfs_device this encoder belongs to + * @config: Configuration of the VKMS encoder + */ +struct vkms_configfs_encoder { + struct config_group group; + struct vkms_configfs_device *dev; + struct vkms_config_encoder *config; +}; + #define device_item_to_vkms_configfs_device(item) \ container_of(to_config_group((item)), struct vkms_configfs_device, \ group) @@ -80,6 +96,10 @@ struct vkms_configfs_crtc { #define crtc_item_to_vkms_configfs_crtc(item) \ container_of(to_config_group((item)), struct vkms_configfs_crtc, group) =20 +#define encoder_item_to_vkms_configfs_encoder(item) \ + container_of(to_config_group((item)), struct vkms_configfs_encoder, \ + group) + static ssize_t crtc_writeback_show(struct config_item *item, char *page) { struct vkms_configfs_crtc *crtc; @@ -344,6 +364,69 @@ static const struct config_item_type plane_group_type = =3D { .ct_owner =3D THIS_MODULE, }; =20 +static void encoder_release(struct config_item *item) +{ + struct vkms_configfs_encoder *encoder; + struct mutex *lock; + + encoder =3D encoder_item_to_vkms_configfs_encoder(item); + lock =3D &encoder->dev->lock; + + scoped_guard(mutex, lock) { + vkms_config_destroy_encoder(encoder->dev->config, encoder->config); + kfree(encoder); + } +} + +static struct configfs_item_operations encoder_item_operations =3D { + .release =3D &encoder_release, +}; + +static const struct config_item_type encoder_item_type =3D { + .ct_item_ops =3D &encoder_item_operations, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_group *make_encoder_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_encoder *encoder; + + dev =3D child_group_to_vkms_configfs_device(group); + + scoped_guard(mutex, &dev->lock) { + if (dev->enabled) + return ERR_PTR(-EBUSY); + + encoder =3D kzalloc(sizeof(*encoder), GFP_KERNEL); + if (!encoder) + return ERR_PTR(-ENOMEM); + + encoder->dev =3D dev; + + encoder->config =3D vkms_config_create_encoder(dev->config); + if (IS_ERR(encoder->config)) { + kfree(encoder); + return ERR_CAST(encoder->config); + } + + config_group_init_type_name(&encoder->group, name, + &encoder_item_type); + } + + return &encoder->group; +} + +static struct configfs_group_operations encoders_group_operations =3D { + .make_group =3D &make_encoder_group, +}; + +static const struct config_item_type encoder_group_type =3D { + .ct_group_ops =3D &encoders_group_operations, + .ct_owner =3D THIS_MODULE, +}; + static ssize_t device_enabled_show(struct config_item *item, char *page) { struct vkms_configfs_device *dev; @@ -447,6 +530,10 @@ static struct config_group *make_device_group(struct c= onfig_group *group, &crtc_group_type); configfs_add_default_group(&dev->crtcs_group, &dev->group); =20 + config_group_init_type_name(&dev->encoders_group, "encoders", + &encoder_group_type); + configfs_add_default_group(&dev->encoders_group, &dev->group); + return &dev->group; } =20 --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0669924110F for ; Fri, 7 Mar 2025 16:34:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365254; cv=none; b=pG6VSGim/xKN8dSOpl6+j4IUoWpfLapX/RKb1LynXzPPPFa0hJQ1s5JbKGm8k+hjk3FgkZj/2fgAT8nwnC8ndi2DmWDhjmF9UZxPnLANo4Ustnm9oZZN7qOYfwuLNpo70UXuKblIZUrQxE2uKuOPM0VZuEsZ1bfNubCKJJ+n5cA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365254; c=relaxed/simple; bh=DB1jr0Y87rUNdGVZ8SE29fHPbDBw5C0jbdfwYkvJfi4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Ev5/umKuOFHqnexwPqapd59VyJywAjRIFau+9nRW5UWhC5szARTSCNZcJSjrU7bN4FjGuGNNC+o5W6mvyz33vhj0/4mbFfZm2+0F5XE725+7v22dB4z0O3e3lbvfM2n4pyE4nojxqr2AWuhn4/6UX2ptmuu0MrKFhQfjRhEfSn0= 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=BQdzUPF8; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BQdzUPF8" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-43bc63876f1so17640995e9.3 for ; Fri, 07 Mar 2025 08:34:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365251; x=1741970051; 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=++hf8G4nEk9Bpzh89kQV5A47zc/b6vQ6MPdCQxsR9cg=; b=BQdzUPF8sWRGwS+POraZObz1ubkE+PIPKyAyLmtH2fMH7H7I2S7UQ92+BJ39YmBhKw ZmRiEgGNu3BIBuqlkS5/NJ44z1wc1BRGjYFatnFQGKCgK35UtAFolJFAVQFBijuQbY0i mWvXItSEIfmMCpE54YE9kXkE5/GY76HTTHOiA/xVkgkreYVNpAW05hi1CBvOJhrI9FhX yBuqgW+ufHR/cGde+jSE3sOY8HnJXVpVf3LIuyEI9MLVw5lybM3QNJfEnTZ1YOpiW/xB qbg1sMofAMZ/2VuPQOpHlfzmGNm5oJavlToju9/j8brQR7tDTwJiY6zEXs45AoaukTkv E8BQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365251; x=1741970051; 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=++hf8G4nEk9Bpzh89kQV5A47zc/b6vQ6MPdCQxsR9cg=; b=OspDTwrbAZ7WJoozwUILcLiAp/OkXvYWeRJnnsqAtXH0VZ7bCjP9nfBFdBl7fNEoYw sxH+1jjNGsxMvD2h/Cy/SjwmMQKD/64QnqxY7ftFu9t68GqJqpUeSJGrPiXr46vu/LdJ XyZNyc7H85mWSXk6Ugkn5XQ+j927sL5Ioy3u4i4VMsm8MB0V1wkU4CK0ggumyr26QCJi pyRlAYFKHjUz2cXRkSHQghgOBTJbVF641iDzcIsr0D306obgyXjziBIPmlVyN07OnKRb knj6PD2guF16yS/jBKD/iImV707BJtsFuS+uti1T6K3kAhUfByI7T6JdJYofWf8Wc8Db /cIA== X-Forwarded-Encrypted: i=1; AJvYcCVCYFwAh7fXPdMfamYlo0peg8OP/sK1wrv/5/1x2X7Y9InQ6LYDTOKQ2up8SN0FGet1QMY0gFDb1sLycSY=@vger.kernel.org X-Gm-Message-State: AOJu0YzNl+KJEAxOa1Gg1nwG279GVmxFgTtZ7oDwjWwO7iFq//trItTT zuH2w1/e3pjRKGLuVhXskZclwknuMAr+7wQl8lHprqs54Ysk8OW4 X-Gm-Gg: ASbGncun3EMpxe1htBW3PtVhUYDmadgUfTlWHEpWf74uhyCrNWAclBQFprHPAUPA/Ai U4Xypx8lwPUuQUVUcclSHjXQ3fI5SOxaK6JsaT81wS3JCZYBK/QvJ6rM9mgBX6JvP0x8/lGBFNd pvetplDcfLJfi372ICbMCGwAy8Zp7NMtvCfQ2PyuHjcDnm8y4poWvuaMOqdRiXWmnMqoz0Egpwb n0eWRL1a9Qe9ATiVdTfBbGZU04y4SgvyiqpLT/srsBGv4OYsfXGMq0jsrd7PeRXjYtxMoSV4ImH Drbm7tmFphhk/k4VOipfAGLyIYOYpIEX6u529PFw12gPOE8= X-Google-Smtp-Source: AGHT+IFRCRTbXpFBWuMUYNVgD4erCo26cMvSvBPI4MZCLSewSYGptXR8L/t9TuQLLLKD6G3ia6vuQg== X-Received: by 2002:a05:600c:3b0e:b0:43b:d04a:3506 with SMTP id 5b1f17b1804b1-43c686f703emr25579665e9.25.1741365251122; Fri, 07 Mar 2025 08:34:11 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:10 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 09/16] drm/vkms: Allow to attach encoders and CRTCs via configfs Date: Fri, 7 Mar 2025 17:33:46 +0100 Message-ID: <20250307163353.5896-10-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/encoders/encoder/possible_crtcs that will contain symbolic links to the possible CRTCs for the encoder. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 2 + drivers/gpu/drm/vkms/vkms_configfs.c | 58 ++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index e24767448775..650dbfa76f59 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -106,6 +106,7 @@ Next, create one or more encoders:: To finish the configuration, link the different pipeline items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs + sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/encoder= s/encoder0/possible_crtcs =20 Since at least one primary plane is required, make sure to set the right t= ype:: =20 @@ -122,6 +123,7 @@ Finally, you can remove the VKMS instance disabling it:: And removing the top level directory and its subdirectories:: =20 sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* + sudo rm /config/vkms/my-vkms/encoders/*/possible_crtcs/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms/encoders/* diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 0df86e63570a..7de601e39d2b 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -70,11 +70,13 @@ struct vkms_configfs_crtc { * * @group: Top level configuration group that represents a encoder. * Initialized when a new directory is created under "/config/vkms/encoder= s" + * @possible_crtcs_group: Default subgroup of @group at "encoder/possible_= crtcs" * @dev: The vkms_configfs_device this encoder belongs to * @config: Configuration of the VKMS encoder */ struct vkms_configfs_encoder { struct config_group group; + struct config_group possible_crtcs_group; struct vkms_configfs_device *dev; struct vkms_config_encoder *config; }; @@ -100,6 +102,10 @@ struct vkms_configfs_encoder { container_of(to_config_group((item)), struct vkms_configfs_encoder, \ group) =20 +#define encoder_possible_crtcs_item_to_vkms_configfs_encoder(item) \ + container_of(to_config_group((item)), struct vkms_configfs_encoder, \ + possible_crtcs_group) + static ssize_t crtc_writeback_show(struct config_item *item, char *page) { struct vkms_configfs_crtc *crtc; @@ -364,6 +370,52 @@ static const struct config_item_type plane_group_type = =3D { .ct_owner =3D THIS_MODULE, }; =20 +static int encoder_possible_crtcs_allow_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_encoder *encoder; + struct vkms_configfs_crtc *crtc; + int ret; + + if (target->ci_type !=3D &crtc_item_type) + return -EINVAL; + + encoder =3D encoder_possible_crtcs_item_to_vkms_configfs_encoder(src); + crtc =3D crtc_item_to_vkms_configfs_crtc(target); + + scoped_guard(mutex, &encoder->dev->lock) { + if (encoder->dev->enabled) + return -EBUSY; + + ret =3D vkms_config_encoder_attach_crtc(encoder->config, crtc->config); + } + + return ret; +} + +static void encoder_possible_crtcs_drop_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_encoder *encoder; + struct vkms_configfs_crtc *crtc; + + encoder =3D encoder_possible_crtcs_item_to_vkms_configfs_encoder(src); + crtc =3D crtc_item_to_vkms_configfs_crtc(target); + + scoped_guard(mutex, &encoder->dev->lock) + vkms_config_encoder_detach_crtc(encoder->config, crtc->config); +} + +static struct configfs_item_operations encoder_possible_crtcs_item_operati= ons =3D { + .allow_link =3D encoder_possible_crtcs_allow_link, + .drop_link =3D encoder_possible_crtcs_drop_link, +}; + +static const struct config_item_type encoder_possible_crtcs_group_type =3D= { + .ct_item_ops =3D &encoder_possible_crtcs_item_operations, + .ct_owner =3D THIS_MODULE, +}; + static void encoder_release(struct config_item *item) { struct vkms_configfs_encoder *encoder; @@ -413,6 +465,12 @@ static struct config_group *make_encoder_group(struct = config_group *group, =20 config_group_init_type_name(&encoder->group, name, &encoder_item_type); + + config_group_init_type_name(&encoder->possible_crtcs_group, + "possible_crtcs", + &encoder_possible_crtcs_group_type); + configfs_add_default_group(&encoder->possible_crtcs_group, + &encoder->group); } =20 return &encoder->group; --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.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 AA09C24166F for ; Fri, 7 Mar 2025 16:34:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365256; cv=none; b=pjeYn7+F2Lfp4q6OguMsVMn4lncPfpz+gmMMFP0kIOh09E29S5TPkc6/A10qTdq2zsw/cqvEkp7kI5lJc0lMimV3FxJWzmht7tNTvnTdbBI8VuJbyq1ngGqoGSSLP8JwQrk1Mj4Clxshzfrs0vnVYKygdAHpBO19U11LdHG7V7M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365256; c=relaxed/simple; bh=caAdIgUrFdoGShqcfq2/jSWtE9eD++2gWRNE62pSbGo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=M4xaZPOVA0smG0Q2I4WOZnjtme5PlvDUbHPLlXb5kiyXuh5re68ZXEK2XkmnGpbBspGvBa5UzoV40xYAS8QoZID0d3bgRV36dykG0k+whht2paWdJSLCcpahSO4XG9VKcFCJ8qxH9/cX7DwpweXUugrmp4bzkYHw+e6bblZQ8K0= 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=VhSEDFeM; arc=none smtp.client-ip=209.85.221.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="VhSEDFeM" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-3912baafc58so1394645f8f.1 for ; Fri, 07 Mar 2025 08:34:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365253; x=1741970053; 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=cPglBRQzm3PeNfTp1IXfadGrcc/1PZ/sWQxkyGuh1Hg=; b=VhSEDFeMy980f090w2U6UvIoKtL4NupVvkdLi+kxykMxk4nuEuCvStNb6crYzh3uCY nFccYd46atjmTiMP97FSRxPELBw03XGdeDt0jKLLqunhNq2x3Y7jJTy6Vc5UKKVuLksh A9zTSOY+9tUml5J8p+DDPmw74vctzR8kWES5R09VP6wUt1l8WnR/4ZPNzECGnL9yR8ZO 9id5JceSuDbkEmVcw0l8KFwsHBD6xTzcg7Cw1MB/M81Wz45uD+XNWpo7T+w0yOvGor+4 uIB4b8LEQ5vUhJULThaGkcoB8gvuwA9pVBFQfxL6q/b53dldklGJy80wal9AU/GkFDY0 B+lQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365253; x=1741970053; 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=cPglBRQzm3PeNfTp1IXfadGrcc/1PZ/sWQxkyGuh1Hg=; b=BDHbcZYE+XmkoXuXotbbYUK3l6DmBM5emWqOoH1bWHowsNAffTP75qRs5iQTKIm47L xlcQT/XMvijUnQKzO/tYSBKlrH8pt5dy/9hY0NYntq/xNOnZuMMOfDqzj9vBQ+qax1kq bZPcc5jzgfwO89syI2HzJUyDq0eeMVPkz3TsIxNDEBMpsXwzYVIpZ2QAl9Rh/kXpx6vd 7Ii51CR4wz2HFhUCkzjsYHz6ym6Yb9WFREDgnAW2fKTcOCkYVUqtOCOypUU2u++Oy0ZM xanwDw/vv3jB3YJwegqvWKCydqcBZlIqybOC6cEK3QVUEgTvUSItJ3ftxOt38sMpj/bE Wl6Q== X-Forwarded-Encrypted: i=1; AJvYcCU1MTbOEl7JS4TctmoJyQ8QISCY0/4UDj3V4GJaHQti2T7OjrLrwZBK+O0GQtOyoz/z7lF4230qVWhkJhQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyqXuddhrJW54qKqV1rhisVP6pZHOTWuaRwCA7ElFHBxz3i022g 4ytrz3k9zaFdDBZnsAVSuouEaGeTtWziEXmt9L6rDLgnj9NaQ3MA X-Gm-Gg: ASbGncvT49+/RaHNp5ugx85QWkI1WzizOhxjzApizn0XoIHYQEyYeUH1WPw/5WjTzBH CY71fooJLPE29jZpCK/XdOKVlxTWshTpgfzXCVI047l2ca8TZdm8PclZwUOpria4kx9yh4ujV8y 2pU7UAMycB0eRMcN7nnvkC9XIIsxVn77t6+NRwJXkxhvmhl+A6dJx+3JOuFsQ+3IfiyLdjC0Quz gdjAqSL5oIYh1aGG031dFshMbmbOvpdgoaacufW1hyZIXpESSPVMHdoG2ISOnXM6cF0G8OYI5fS ER5kvEWOt62MSwVqx47js9AoshEO6G+s9VjX37HPhqeofUE= X-Google-Smtp-Source: AGHT+IF63rOdhDcyNIxc0Af2rMIu3XHsDnVUzLpB/8CyhXcU6KC2Y/tzuWU0AngWy0NaISRGyKp2tQ== X-Received: by 2002:a5d:5f4e:0:b0:391:fcc:9ee8 with SMTP id ffacd0b85a97d-39132d6bc06mr2454738f8f.23.1741365252797; Fri, 07 Mar 2025 08:34:12 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:11 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 10/16] drm/vkms: Allow to configure multiple connectors via configfs Date: Fri, 7 Mar 2025 17:33:47 +0100 Message-ID: <20250307163353.5896-11-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/connectors to allow to create as many connectors as required. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 87 ++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 650dbfa76f59..744e2355db23 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -74,6 +74,7 @@ By default, the instance is disabled:: And directories are created for each configurable item of the display pipe= line:: =20 tree /config/vkms/my-vkms + =E2=94=9C=E2=94=80=E2=94=80 connectors =E2=94=9C=E2=94=80=E2=94=80 crtcs =E2=94=9C=E2=94=80=E2=94=80 enabled =E2=94=9C=E2=94=80=E2=94=80 encoders @@ -103,6 +104,10 @@ Next, create one or more encoders:: =20 sudo mkdir /config/vkms/my-vkms/encoders/encoder0 =20 +Last but not least, create one or more connectors:: + + sudo mkdir /config/vkms/my-vkms/connectors/connector0 + To finish the configuration, link the different pipeline items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs @@ -127,6 +132,7 @@ And removing the top level directory and its subdirecto= ries:: sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms/encoders/* + sudo rmdir /config/vkms/my-vkms/connectors/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 7de601e39d2b..692e1b708012 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -19,6 +19,7 @@ static bool is_configfs_registered; * @planes_group: Default subgroup of @group at "/config/vkms/planes" * @crtcs_group: Default subgroup of @group at "/config/vkms/crtcs" * @encoders_group: Default subgroup of @group at "/config/vkms/encoders" + * @connectors_group: Default subgroup of @group at "/config/vkms/connecto= rs" * @lock: Lock used to project concurrent access to the configuration attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -29,6 +30,7 @@ struct vkms_configfs_device { struct config_group planes_group; struct config_group crtcs_group; struct config_group encoders_group; + struct config_group connectors_group; =20 struct mutex lock; struct vkms_config *config; @@ -81,6 +83,20 @@ struct vkms_configfs_encoder { struct vkms_config_encoder *config; }; =20 +/** + * struct vkms_configfs_connector - Configfs representation of a connector + * + * @group: Top level configuration group that represents a connector. + * Initialized when a new directory is created under "/config/vkms/connect= ors" + * @dev: The vkms_configfs_device this connector belongs to + * @config: Configuration of the VKMS connector + */ +struct vkms_configfs_connector { + struct config_group group; + struct vkms_configfs_device *dev; + struct vkms_config_connector *config; +}; + #define device_item_to_vkms_configfs_device(item) \ container_of(to_config_group((item)), struct vkms_configfs_device, \ group) @@ -106,6 +122,10 @@ struct vkms_configfs_encoder { container_of(to_config_group((item)), struct vkms_configfs_encoder, \ possible_crtcs_group) =20 +#define connector_item_to_vkms_configfs_connector(item) \ + container_of(to_config_group((item)), struct vkms_configfs_connector, \ + group) + static ssize_t crtc_writeback_show(struct config_item *item, char *page) { struct vkms_configfs_crtc *crtc; @@ -485,6 +505,69 @@ static const struct config_item_type encoder_group_typ= e =3D { .ct_owner =3D THIS_MODULE, }; =20 +static void connector_release(struct config_item *item) +{ + struct vkms_configfs_connector *connector; + struct mutex *lock; + + connector =3D connector_item_to_vkms_configfs_connector(item); + lock =3D &connector->dev->lock; + + scoped_guard(mutex, lock) { + vkms_config_destroy_connector(connector->config); + kfree(connector); + } +} + +static struct configfs_item_operations connector_item_operations =3D { + .release =3D &connector_release, +}; + +static const struct config_item_type connector_item_type =3D { + .ct_item_ops =3D &connector_item_operations, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_group *make_connector_group(struct config_group *grou= p, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_connector *connector; + + dev =3D child_group_to_vkms_configfs_device(group); + + scoped_guard(mutex, &dev->lock) { + if (dev->enabled) + return ERR_PTR(-EBUSY); + + connector =3D kzalloc(sizeof(*connector), GFP_KERNEL); + if (!connector) + return ERR_PTR(-ENOMEM); + + connector->dev =3D dev; + + connector->config =3D vkms_config_create_connector(dev->config); + if (IS_ERR(connector->config)) { + kfree(connector); + return ERR_CAST(connector->config); + } + + config_group_init_type_name(&connector->group, name, + &connector_item_type); + } + + return &connector->group; +} + +static struct configfs_group_operations connectors_group_operations =3D { + .make_group =3D &make_connector_group, +}; + +static const struct config_item_type connector_group_type =3D { + .ct_group_ops =3D &connectors_group_operations, + .ct_owner =3D THIS_MODULE, +}; + static ssize_t device_enabled_show(struct config_item *item, char *page) { struct vkms_configfs_device *dev; @@ -592,6 +675,10 @@ static struct config_group *make_device_group(struct c= onfig_group *group, &encoder_group_type); configfs_add_default_group(&dev->encoders_group, &dev->group); =20 + config_group_init_type_name(&dev->connectors_group, "connectors", + &connector_group_type); + configfs_add_default_group(&dev->connectors_group, &dev->group); + return &dev->group; } =20 --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 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 29CDF23E23D for ; Fri, 7 Mar 2025 16:34:15 +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=1741365258; cv=none; b=N/2iBkCgGcTaNlJyuT1Ib+a4ic7CYixjMyzqySAfDnoIY0tAEX5KvJhpQpuYsK7zWIHDficqUBDPRvlAjCC/DsPzVbV4X/jUc/i+4sbRYJ51a6lsyjIG9PGbrIZ4OjrgwpGRURmZjVWPQrXPbrdMgcVbZG7eCrQ1LAiIzTaCfys= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365258; c=relaxed/simple; bh=tA+WmKfmch3Ua9PWXbOHsgfkOu092C1qCFygk8hIly4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JnPRAxkaPZiba4YvFN4PVj8a211fMJA7sC/Jjj457iIxwZrSYW6m5Rj/5BZGSBx0BoNM6rXfDUWRU1pKmgBk2ZvloVRid/r7LtIualealCTYidpBg+byRzgE/ttTSLEaHG5C7DALfVXXhnS1LNwoNyeBP0GrYd+znZe/JOeRfRc= 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=OAsY0ll+; 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="OAsY0ll+" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-39127512371so1268478f8f.0 for ; Fri, 07 Mar 2025 08:34:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365254; x=1741970054; 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=pkjoxigyIPAGM4bWibC29uQWmfsXcpbtj5sqbZDQnLA=; b=OAsY0ll+HYCKkNdPNTM7BPX40IeGabD1KugHtTrGNSUgVPdwvqj4Qt5ED1281WSs8P C/wUOqAXV/UM+M85b1bYVYBbXHCxDPc8djlZM2qUW8AsUHpg+/c9KY9m6rvTBPJpufsr 2rAN/4InNZWa2E6b6ogNcC+A9j+9AUVtbsEFvx1RNS9RFvRWQoeZg6O1kAJ/TU0X9hFp iEEbVFK/P5OND46zAeNziIYrFhjcv/S55j1B1NHanN4Qu9O5VzFQ6oxxe8u/X3XXcGqB I5eUwGoJd4e02VUgHc3t40T4dd4lok43vss+VM/CwOpg1OgIztzR/rlevMP129fnGrR0 qICw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365254; x=1741970054; 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=pkjoxigyIPAGM4bWibC29uQWmfsXcpbtj5sqbZDQnLA=; b=acp3zbPNDYLZ71pT1tIx1uumxvLo8n2+BaeO8nQ0u4FLHvrKR9a44AnBH1IqWMVzEN Iy0dM9NaxotQCrfUcuX9wseNJEdLYacDakOSXrN4bGgGNNlgM9rRN27O4EWO3bWEWmUM 0LGXZ+9yo8OvoaqUZK4HL2UvWcMqDCdrZ/DPGHaInBEwcmFid6bJW/NEnfEciA6wyj/h 8oS2I/QXST3jmKgMoE3FDAYwbh4ZlFv6z4bys5PrHkzm4YYOYO1mhMvRYRRQfgK1+AQP IqHYKO07Ich+vyl3siAlMv9mwi4dw40LuA1nK1llHkoXu1lmAfPdjhGjYIL0FU9p8BGO vBWg== X-Forwarded-Encrypted: i=1; AJvYcCXJWvxtCWxNm6fU/LE4zPidlP4DMgFMDbsj7M+4jabFv/BmYoaQEYpBCbVbALqPIVmz5jQzdTltFBmPdK4=@vger.kernel.org X-Gm-Message-State: AOJu0Ywm0BEZ9/tudCfFcPG/O1REuD9Xa+czRDIsO/+2XhDhnhDiSSr7 gZYnADJvsEoczlJYKG1sblTN5iz0fs/h1ba8PeF7FVv8V5sgOEHWFEH14b+F X-Gm-Gg: ASbGncsz5MSrbGmOC11DafhhDuKZxWQG42w9LsFGdhf6xb0LO7dDNyUOJNX67Lo8t3k 6JAw9mPxwqIQQ3dEzp6T5B/TuFcZssECGUIfapez4ztqZ3+ZdNeH9Q9kDFojzZFBR9VmOp0Hkan OclvnGQvzl1xsC+gVV5iFVRRv36NjrFq9RMSAvZ6dMbm2zyuTNZiqvkM8ktmW+9WjVl4gXCMFsr ijWo+ISB0hP/BuEPcrjHvuXbuv//wGHSafG4m2lefwIru0TSajHv2yhOacksQGray9POEl4jCST 6KVOWizgOtNQgxhZmfWpUtXNX9nKEWUgN583TIrmvSod4NE= X-Google-Smtp-Source: AGHT+IESNA23In2kHjqdFJ6dx0smo1M6kzDdgbcUv2LBI727vsHZMdwd4dUthvuCgUPRlt36reWHvA== X-Received: by 2002:a05:6000:4185:b0:391:306f:57d1 with SMTP id ffacd0b85a97d-39132dd6d3cmr2539139f8f.35.1741365254331; Fri, 07 Mar 2025 08:34:14 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:13 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 11/16] drm/vkms: Allow to attach connectors and encoders via configfs Date: Fri, 7 Mar 2025 17:33:48 +0100 Message-ID: <20250307163353.5896-12-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/connectors/connector/possible_encoders that will contain symbolic links to the possible encoders for the connector. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 2 + drivers/gpu/drm/vkms/vkms_configfs.c | 62 ++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 744e2355db23..74126d2e32e4 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -112,6 +112,7 @@ To finish the configuration, link the different pipelin= e items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/encoder= s/encoder0/possible_crtcs + sudo ln -s /config/vkms/my-vkms/encoders/encoder0 /config/vkms/my-vkms/c= onnectors/connector0/possible_encoders =20 Since at least one primary plane is required, make sure to set the right t= ype:: =20 @@ -129,6 +130,7 @@ And removing the top level directory and its subdirecto= ries:: =20 sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* sudo rm /config/vkms/my-vkms/encoders/*/possible_crtcs/* + sudo rm /config/vkms/my-vkms/connectors/*/possible_encoders/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms/encoders/* diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 692e1b708012..8e90acbebd6a 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -88,11 +88,14 @@ struct vkms_configfs_encoder { * * @group: Top level configuration group that represents a connector. * Initialized when a new directory is created under "/config/vkms/connect= ors" + * @possible_encoders_group: Default subgroup of @group at + * "connector/possible_encoders" * @dev: The vkms_configfs_device this connector belongs to * @config: Configuration of the VKMS connector */ struct vkms_configfs_connector { struct config_group group; + struct config_group possible_encoders_group; struct vkms_configfs_device *dev; struct vkms_config_connector *config; }; @@ -126,6 +129,10 @@ struct vkms_configfs_connector { container_of(to_config_group((item)), struct vkms_configfs_connector, \ group) =20 +#define connector_possible_encoders_item_to_vkms_configfs_connector(item) \ + container_of(to_config_group((item)), struct vkms_configfs_connector, \ + possible_encoders_group) + static ssize_t crtc_writeback_show(struct config_item *item, char *page) { struct vkms_configfs_crtc *crtc; @@ -528,6 +535,55 @@ static const struct config_item_type connector_item_ty= pe =3D { .ct_owner =3D THIS_MODULE, }; =20 +static int connector_possible_encoders_allow_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_connector *connector; + struct vkms_configfs_encoder *encoder; + int ret; + + if (target->ci_type !=3D &encoder_item_type) + return -EINVAL; + + connector =3D connector_possible_encoders_item_to_vkms_configfs_connector= (src); + encoder =3D encoder_item_to_vkms_configfs_encoder(target); + + scoped_guard(mutex, &connector->dev->lock) { + if (connector->dev->enabled) + return -EBUSY; + + ret =3D vkms_config_connector_attach_encoder(connector->config, + encoder->config); + } + + return ret; +} + +static void connector_possible_encoders_drop_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_connector *connector; + struct vkms_configfs_encoder *encoder; + + connector =3D connector_possible_encoders_item_to_vkms_configfs_connector= (src); + encoder =3D encoder_item_to_vkms_configfs_encoder(target); + + scoped_guard(mutex, &connector->dev->lock) { + vkms_config_connector_detach_encoder(connector->config, + encoder->config); + } +} + +static struct configfs_item_operations connector_possible_encoders_item_op= erations =3D { + .allow_link =3D connector_possible_encoders_allow_link, + .drop_link =3D connector_possible_encoders_drop_link, +}; + +static const struct config_item_type connector_possible_encoders_group_typ= e =3D { + .ct_item_ops =3D &connector_possible_encoders_item_operations, + .ct_owner =3D THIS_MODULE, +}; + static struct config_group *make_connector_group(struct config_group *grou= p, const char *name) { @@ -554,6 +610,12 @@ static struct config_group *make_connector_group(struc= t config_group *group, =20 config_group_init_type_name(&connector->group, name, &connector_item_type); + + config_group_init_type_name(&connector->possible_encoders_group, + "possible_encoders", + &connector_possible_encoders_group_type); + configfs_add_default_group(&connector->possible_encoders_group, + &connector->group); } =20 return &connector->group; --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 50FF02417E4 for ; Fri, 7 Mar 2025 16:34:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365259; cv=none; b=Grnglv3QXk62HwKRK9Qo6JpxmkvWEIXu9gw7VrBz7jPICvdKlD6iUCdTjKu8hMl9UT+R9O6aGuo/zUTwPUF5fJ6tZkaX+XzQM1wtglDnsWQkIDNZZniZHSnfnYcG4oYUEIyPHEEwr6YSq+nykqoj5zkZ2ePmwFLziEjkG5QsV1Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365259; c=relaxed/simple; bh=ruD0UQijRSTbAbiYbiy92bcwQmGm+acqNJsn/Xwt7PA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=XMAUx6QS/L53N/fgwVwDpipAYiQvOQHM2i9V4h+bujbIMyD93yOx2W/In++6dx0KP8/Zy2wWc3xQhcCpeTToJ1me5CTFzCng7UH/n+mVwhyNLIwoYx6yGepEPHM1dhkZAYhy5usyTgYEDW8WkgqR250VyZ2TmVO4Fm2QeaZxHo8= 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=Wvt+SEYc; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Wvt+SEYc" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-3913958ebf2so285075f8f.3 for ; Fri, 07 Mar 2025 08:34:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365255; x=1741970055; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zIdjBnojDe9JlRJkQtXkq6PiLeEhZjPQxZt/O+Cfesg=; b=Wvt+SEYcHqY6Bcv2NbEbwlqsyJrcjOMnLsX05Tw0X2gcL946+m7Z/67ATL1rYiS+6N 0aNe3jLVmf53DCoD3x/GM82SwGIzCgpHVXx57NCRrAAcFtiVHsE4A3YOmATm+kbvnu+9 HlxVPNMJWWtLuIZs7o8JIXbO8FODE8CpCobpquc7iiT6lo3TJSNUnf8Y6zw1xsXjI1dB AKp4JnuN93elWIhI5KyxizOr/8XPS59rPNMfGzfpFvlFDlH4Eu6/UHmqDs0YxLI+/X26 OeptLSTt798Tf30FrcFJghCP/nvw6S9kkYqE/rpQ40/o8zV6F6+7xlW1EGfPgswFNnyP jC2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365255; x=1741970055; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zIdjBnojDe9JlRJkQtXkq6PiLeEhZjPQxZt/O+Cfesg=; b=qvyEkEEC7MnAH+8uqS7pHGOXNhRkToO5IXgpKuPsI0jlWieP3UrAIBaZ0vM8gJW/nB APIOT+i27UGNWJp9NUF2+MwKrwqcbU6gL+fgELMhrcX+wd+6TQnoq0fiol6/pSc9NE99 rIuglaQnUT83KNYJTXhZB25GzBzQ95z82fyhMurXYLKFspqU8UQZR9MmMAKLCCJ+Potq zMkwhCjqubsnQPCwzwnYcXsmP8QsPwLC7mVrvrj3h/dvRX98MldmqODTctwO7VZvBn5D +PGCT0iqV7pA9ontk63L2l7Un6KH2lXdLp4SQn3HHMqyGGBMFYAWeYYtz/mcNKjRtley 8/hw== X-Forwarded-Encrypted: i=1; AJvYcCUbFw0R1Iv886dALZpZIpjvMoZnl3w45gDmZ1vSDQxc477uu+7pf1xfavRrvKaDWbTeMf7iGN4T1Xxn67E=@vger.kernel.org X-Gm-Message-State: AOJu0YzNGONf6V/qlovqG9J5SCNhHh6BYL5Dk0ht7rR6OIT8Y4rO9wfv wDowGbdqc5/BvHArqZyA5SUXd8su+GpJ33ObdlAUrqhqWcHpP8Qr X-Gm-Gg: ASbGncuxsE9EhAPtnM/Cr3rKkJ/lpTGmH4nstr1hax6T+TLBii3AckBF6Iq6Bulz9Nj JSWRVktRmkklrb+tZ5gONSxnVI4/jG+iI4TnGKstu6wLDhO9xByKd/4gFg3XoUFYt1A/4uTv7IC P66MN/G7LUGGCe7mhdwUJ497WURjLIZ3w7NTNc8IgvjJUM/Dgnm55Hq3naFDZ9oTM1aXjYcPnE8 h4wjKBPtJkeDsOyYEFSXtapce4iPYzrpenr1IgeGeZ21eEVP4nMpWF3KAQv0/KUdjqj920wICvu gknCCjzOQZELRe6p+51u5WOSzDSq1xFFbB+HdTmg0iH8/2Y= X-Google-Smtp-Source: AGHT+IEwPvhouBA6vZMQodw9FQoUs0STHqGK32YOVJMT04SsOqUtTVNTysfRc3/xVYG7647HWWzuxg== X-Received: by 2002:a05:6000:1846:b0:390:f6be:af1d with SMTP id ffacd0b85a97d-39132d98ae2mr2659989f8f.41.1741365255560; Fri, 07 Mar 2025 08:34:15 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:14 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 12/16] drm/vkms: Allow to configure the default device creation Date: Fri, 7 Mar 2025 17:33:49 +0100 Message-ID: <20250307163353.5896-13-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add a new module param to allow to create or not the default VKMS instance. Useful when combined with configfs to avoid having additional VKMS instances. Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- drivers/gpu/drm/vkms/vkms_drv.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_dr= v.c index 5bcfbcb6c0c5..b4ed19c97576 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -50,6 +50,10 @@ static bool enable_overlay; module_param_named(enable_overlay, enable_overlay, bool, 0444); MODULE_PARM_DESC(enable_overlay, "Enable/Disable overlay support"); =20 +static bool create_default_dev =3D true; +module_param_named(create_default_dev, create_default_dev, bool, 0444); +MODULE_PARM_DESC(create_default_dev, "Create or not the default VKMS devic= e"); + DEFINE_DRM_GEM_FOPS(vkms_driver_fops); =20 static void vkms_atomic_commit_tail(struct drm_atomic_state *old_state) @@ -219,6 +223,9 @@ static int __init vkms_init(void) if (ret) return ret; =20 + if (!create_default_dev) + return 0; + config =3D vkms_config_default_create(enable_cursor, enable_writeback, en= able_overlay); if (IS_ERR(config)) return PTR_ERR(config); --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B65B2241CAF for ; Fri, 7 Mar 2025 16:34:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365260; cv=none; b=axHIVFyaHtc1hOGpW8gYvS+moVrMYm+PqA9FetOzHTQ7B2xeeIx0pxGnNAPEFw6Hj1tLsw93zQXBiaobvXwLrHmryqCZv4gXo8W7dt0e3FhPq0LT+7MR/SjvejayeRncuzZzddelSgTFmhVQGd4Bdi94nEwflxA7d+Ua5lL9O0k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365260; c=relaxed/simple; bh=Vi+uu/h5Zd8rK2aatFelcFPD2hYQTWMEmZWHarVSvJU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lljlPf+f/yQtFiHQP9lBxzLhHi1olnADHPCCV27vGcT97l6/je47v6DPpRcOzFgDfUJq+Xn031go17C2SbHxQhCnEFDTaRvlXhylF931GMpZprMFUKH62+hOjkCH9Zii9zKBvRHCjLyPjV2hoBHw5/9ga1+qmmrvyzaPBql+WEM= 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=PR0ar1UD; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PR0ar1UD" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43bd87f7c2eso12091345e9.3 for ; Fri, 07 Mar 2025 08:34:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365257; x=1741970057; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=g2I+AKiUaGilJvwS/f5X1LlsvDutZk3cs9KHKo4vYS0=; b=PR0ar1UDQmplYBsLMz+iMk8R2K7XnOCKR1kNZy+bp6a3+5bao3dgraraxKL8eGY2Oj OjklMHrWCYsMQboaB9PoKdMvImROlyvid/VRKgEp/XjcXs5jZQNc/Ncjuo1mZ1v9u11Z dB4KxU6UsoT/jMqshDcEfQUp/Anz1B4ae0ycwltsXK7oIWMLpsKO6j1Szjhy49b6rnwk N5r3FGK6yMLltQis0kHkN4Q9+hjZMjIGwGD91lGTm/dh4u50vm6F0hY9rOejpm/+ap2/ 2KR68qhPZLszXrPCsSNJendO5lHpg/h1f7HJl1qAgxgm+Lccl32oEJSm5q3Vg4kKZiO7 vmVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365257; x=1741970057; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g2I+AKiUaGilJvwS/f5X1LlsvDutZk3cs9KHKo4vYS0=; b=YwdQOfmLM98L34UBNUnhz8p2jUJIZX4zCfvNm2C3NzWZjoubnOxf9ZRxpIXroWZkg/ ePccyIvd87AFf9SDzmSkxYyxfRwucwgDTPgGjQC/QDmsvaCBnmdLMoXbGNFYfyII5cLz JggH4gtAhAWnxfJAP2CK4HxNWCL9gr62ptiD2VLwibg4bGaJJHr+5oryBltXQkUdC0XJ VPkz1lQWnyAwu3wzCfxS+sGbjp9SJXHceA9RkpExTMrVz20GFGLgT9rdiap1f351BV7D DIhBlokHNjxhzlt/fOW24cAyr1jLN2rMs+64vjOb3y1SSy1kmSf7bKVnWE8AUGhbVs71 EL5w== X-Forwarded-Encrypted: i=1; AJvYcCUQNNW6XfuxXn9tHFUXEDQMiHY3MbMmBWkRSXhQUVsYVUJm8Vl1Xp8DB0MMA22ybQ+dJ0vOhYYTMywHy9I=@vger.kernel.org X-Gm-Message-State: AOJu0YwrW5v0ANL3TTgkmCPu/Yu1ZdgoBw/1Up9/BFT7SRTR5IqlCUyX MT4+RHy8KGwZkwKadLA0P0DLqnwEXukEJ+cEaXNcPVGE38jIOXBg X-Gm-Gg: ASbGncu4gxllYez4mt+cAvOMpZF3IsaDgG975YnkRUQFEA3vH7GewXw86+ZI0q9t/k3 s7XcMw4O4cdPEo5V4XsIQvd5y2EbpI3lpBEdB67bq8pp81Yl5MDim3ZVhrn9fUPgmrV3Q9OmHDz vhPAEOMijrf9J0C64y1TyQ4HvT0ogDgIsdKe/HyYeTpSrRdZghvulscZlaiNHpyQpmnf7TTlRZe Zp4QflTAawMzlGuD8LrassRn+I+i2hDEF1zdSJTWgP7SqRyLYVy/iZjT9BgB9UxE6/+HpR6vaBA qeSgvXJNXzg9NtUYhWdZk2o2z9kXp8tTOmL6b5jHDCDpH4U= X-Google-Smtp-Source: AGHT+IE+/rU5pkLDM1WZfm1em60SGqLyoPo8j+dxcpf3SNDsL/ewtlrCgxTKAsjxe6CqNBfr06tkCQ== X-Received: by 2002:a05:600c:3b92:b0:43b:c7ad:55c2 with SMTP id 5b1f17b1804b1-43c5a5e9853mr27338655e9.6.1741365256861; Fri, 07 Mar 2025 08:34:16 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:16 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 13/16] drm/vkms: Remove completed task from the TODO list Date: Fri, 7 Mar 2025 17:33:50 +0100 Message-ID: <20250307163353.5896-14-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Remove the configfs related TODO items from the "Runtime Configuration" section. Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 74126d2e32e4..c551241fe873 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -222,21 +222,14 @@ Runtime Configuration --------------------- =20 We want to be able to reconfigure vkms instance without having to reload t= he -module. Use/Test-cases: +module through configfs. Use/Test-cases: =20 - Hotplug/hotremove connectors on the fly (to be able to test DP MST handl= ing of compositors). =20 -- Configure planes/crtcs/connectors (we'd need some code to have more than= 1 of - them first). - - Change output configuration: Plug/unplug screens, change EDID, allow cha= nging the refresh rate. =20 -The currently proposed solution is to expose vkms configuration through -configfs. All existing module options should be supported through configfs -too. - Writeback support ----------------- =20 --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ED98A24292C for ; Fri, 7 Mar 2025 16:34:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365261; cv=none; b=BrlUdsPMstdq3wxh8fE4w5/PnfUgYsA4UCUsAflNw+1VQjDIKmQDmtqedDUoCWNE0i7JT6ZhwjSNZ/BtQhKTRpqPRmgl4lzVVj4DP7fZTFeZEU8T5O7atwg3ts9jmzdlcbJfSZXnH0dD5dRDjPgwpAWm7xdD1O5Hdg0ux3t4o1U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365261; c=relaxed/simple; bh=/ItqekCx0ii3dBLNjzbyU9huWDpEytIDpvuIVGMSb7A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lb6uRYwK9kb/EXBehM60ubu6OqjhNUGklEPbDejJPJwawAxbmdiJuH3rgid5t6abh3Dkr94HtHobKUe17MIZfJ7WocE1347vRBo6p+F0U0wIORfvpaJ8LOfXFSCFXtDoi28og6MUxyTETCxUqpM9OZWfg4vIXLyfpUhz1HFteT0= 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=kvT8bmoP; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kvT8bmoP" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-43948f77f1aso12621275e9.0 for ; Fri, 07 Mar 2025 08:34:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365258; x=1741970058; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sDAURXwAx1KsBXr4riUk4MzDkYMXGUuztgEFx9hlcRg=; b=kvT8bmoP5rgStld8PQ4mbMpewjLB1pXN/MCHypQ/lk2DB9v/kSZgsYLWMItZwEhrrG xp7/W4Fa+B0N+t4AIvmeOqC6mpc3PQNIoYInTjNnkElyrDtgAnmlXxsSyRtGdBKqc8TL r/vNXyJcDruwoABUMsXuNgai+3wTffxfgQun/wXXPvx7q574x1QgcOs6p8wTjjbMoZzL vdsHYa5BEoMW5tFlG9XQDjwXtObLXfEU5QziBs6WK+Tn48kawBJpiDuw+qHZGxixxrC6 xIiG5c0ZZRN5wq1IGVXSRaSA3keJ/BXP2wIjEWi++TIH1uE5O7hdiNpxzDigiE7471q/ i/Mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365258; x=1741970058; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sDAURXwAx1KsBXr4riUk4MzDkYMXGUuztgEFx9hlcRg=; b=BvO3q/Sb1UVVTFuFRoeWqvN4BDFu/WOmuSCMR1GwamR/fYG8CjNXBd33bY35TnvefX 1tqax3u734WNfpf0/YXH3wjGaOpZhDNREi4HjEzbGFRwlU9UuvMbV3vAch6rgyzPFsF9 /7Olleh0MshpPIcZE6iMyDUS8fwFTeYCCl8vhWAxC5BQyWT2OD/whwID5oQobWaRLfzy slTTJQ/SYpFE+11zJduEaDPfnWc7d/uHiuylLu6BIe8PV/YuuttacQkZ/yYqfZfyolO2 TVlu9ky5QqAn5bwcaIrHTWY3VLjPgaVilRbLs+C645BNiNSKTZ93hLdncDMz9kqn/4pr qT9g== X-Forwarded-Encrypted: i=1; AJvYcCWaUSroEDHHwKn8FhAdHG7D0bLmbWEhUPDxLzPbl/kpMw89Uf3p/hkWNXxK4GPr5e4Hz7z3kQ7gCOIOsFQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxSGjGE95+uhZHThXtAhh5dAZNcl6pqO+FADi+YD+DjU4SYlZa5 agiH0n+i5z5/gIEZ3EljAMq6HOOI2qcDvncwjgdQ1jHBLTI94be7 X-Gm-Gg: ASbGncuD5jNsJRFpdAcKn9Gpv+ge5Zzpz2E97IuHd7vSn18a78lT2q8FGX8tzeOcceK iDlHyAnzJD5ngRkNmDHPq0LdJIyMxsfwF4HtVkVd9dNcKgL0wFnqvP31BBdx7hsqYNdqAi3BxTd syjInrQ8psUFQ1I2XP8KNnD0p/EJZr7ruv6H99xe1sj4iRF0ppNP5lnFlAEIBckA9qq1MAUemXj ogykVJNqYdPFxHCyGqSTmxX5tcg1sWA7U5iCo5IAIyi6ij4/HK+FMN4/ecgxaQtGRNIi9Lezvdu dlw5hRVm+Us3dJLGMzujfMzsYTpopaO/OKgYKmx0gIYrFNc= X-Google-Smtp-Source: AGHT+IEHAK/O4CJHl9ysak7QbxIiuSOZVGHkpbi9q4T78G4ZtKDKPIP1C1QDFQphOc/Ef8wVAs612Q== X-Received: by 2002:a05:6000:186d:b0:390:df75:ddc4 with SMTP id ffacd0b85a97d-39132db1113mr3150084f8f.44.1741365258109; Fri, 07 Mar 2025 08:34:18 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:17 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 14/16] drm/vkms: Allow to configure connector status Date: Fri, 7 Mar 2025 17:33:51 +0100 Message-ID: <20250307163353.5896-15-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Allow to store the connector status in vkms_config_connector and add a getter and a setter functions as well a KUnit test. This change only adds the configuration, the connector status is not used yet. Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- drivers/gpu/drm/vkms/tests/vkms_config_test.c | 24 +++++++++++++++++ drivers/gpu/drm/vkms/vkms_config.c | 8 ++++-- drivers/gpu/drm/vkms/vkms_config.h | 26 +++++++++++++++++++ 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/vkms/tests/vkms_config_test.c b/drivers/gpu/dr= m/vkms/tests/vkms_config_test.c index ff4566cf9925..3574a829a6ed 100644 --- a/drivers/gpu/drm/vkms/tests/vkms_config_test.c +++ b/drivers/gpu/drm/vkms/tests/vkms_config_test.c @@ -916,6 +916,29 @@ static void vkms_config_test_connector_get_possible_en= coders(struct kunit *test) vkms_config_destroy(config); } =20 +static void vkms_config_test_connector_status(struct kunit *test) +{ + struct vkms_config *config; + struct vkms_config_connector *connector_cfg; + enum drm_connector_status status; + + config =3D vkms_config_create("test"); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, config); + + connector_cfg =3D vkms_config_create_connector(config); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, connector_cfg); + + status =3D vkms_config_connector_get_status(connector_cfg); + KUNIT_EXPECT_EQ(test, status, connector_status_connected); + + vkms_config_connector_set_status(connector_cfg, + connector_status_disconnected); + status =3D vkms_config_connector_get_status(connector_cfg); + KUNIT_EXPECT_EQ(test, status, connector_status_disconnected); + + vkms_config_destroy(config); +} + static struct kunit_case vkms_config_test_cases[] =3D { KUNIT_CASE(vkms_config_test_empty_config), KUNIT_CASE_PARAM(vkms_config_test_default_config, @@ -937,6 +960,7 @@ static struct kunit_case vkms_config_test_cases[] =3D { KUNIT_CASE(vkms_config_test_plane_get_possible_crtcs), KUNIT_CASE(vkms_config_test_encoder_get_possible_crtcs), KUNIT_CASE(vkms_config_test_connector_get_possible_encoders), + KUNIT_CASE(vkms_config_test_connector_status), {} }; =20 diff --git a/drivers/gpu/drm/vkms/vkms_config.c b/drivers/gpu/drm/vkms/vkms= _config.c index a1df5659b0fb..f8394a063ecf 100644 --- a/drivers/gpu/drm/vkms/vkms_config.c +++ b/drivers/gpu/drm/vkms/vkms_config.c @@ -361,8 +361,11 @@ static int vkms_config_show(struct seq_file *m, void *= data) vkms_config_for_each_encoder(vkmsdev->config, encoder_cfg) seq_puts(m, "encoder\n"); =20 - vkms_config_for_each_connector(vkmsdev->config, connector_cfg) - seq_puts(m, "connector\n"); + vkms_config_for_each_connector(vkmsdev->config, connector_cfg) { + seq_puts(m, "connector:\n"); + seq_printf(m, "\tstatus=3D%d\n", + vkms_config_connector_get_status(connector_cfg)); + } =20 return 0; } @@ -588,6 +591,7 @@ struct vkms_config_connector *vkms_config_create_connec= tor(struct vkms_config *c return ERR_PTR(-ENOMEM); =20 connector_cfg->config =3D config; + connector_cfg->status =3D connector_status_connected; xa_init_flags(&connector_cfg->possible_encoders, XA_FLAGS_ALLOC); =20 list_add_tail(&connector_cfg->link, &config->connectors); diff --git a/drivers/gpu/drm/vkms/vkms_config.h b/drivers/gpu/drm/vkms/vkms= _config.h index 0118e3f99706..e202b5a84ddd 100644 --- a/drivers/gpu/drm/vkms/vkms_config.h +++ b/drivers/gpu/drm/vkms/vkms_config.h @@ -7,6 +7,8 @@ #include #include =20 +#include + #include "vkms_drv.h" =20 /** @@ -99,6 +101,7 @@ struct vkms_config_encoder { * * @link: Link to the others connector in vkms_config * @config: The vkms_config this connector belongs to + * @status: Status (connected, disconnected...) of the connector * @possible_encoders: Array of encoders that can be used with this connec= tor * @connector: Internal usage. This pointer should never be considered as = valid. * It can be used to store a temporary reference to a VKMS con= nector @@ -109,6 +112,7 @@ struct vkms_config_connector { struct list_head link; struct vkms_config *config; =20 + enum drm_connector_status status; struct xarray possible_encoders; =20 /* Internal usage */ @@ -434,4 +438,26 @@ int __must_check vkms_config_connector_attach_encoder(= struct vkms_config_connect void vkms_config_connector_detach_encoder(struct vkms_config_connector *co= nnector_cfg, struct vkms_config_encoder *encoder_cfg); =20 +/** + * vkms_config_connector_get_status() - Return the status of the connector + * @connector_cfg: Connector to get the status from + */ +static inline enum drm_connector_status +vkms_config_connector_get_status(struct vkms_config_connector *connector_c= fg) +{ + return connector_cfg->status; +} + +/** + * vkms_config_crtc_set_writeback() - If a writeback connector will be cre= ated + * @crtc_cfg: Target CRTC + * @writeback: Enable or disable the writeback connector + */ +static inline void +vkms_config_connector_set_status(struct vkms_config_connector *connector_c= fg, + enum drm_connector_status status) +{ + connector_cfg->status =3D status; +} + #endif /* _VKMS_CONFIG_H_ */ --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CA94324500F for ; Fri, 7 Mar 2025 16:34:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365263; cv=none; b=tCLWGCLxSDSoBUTG4VEFefqJ7HgvkHZ7ZSWExHtlSclGd9886m8Vb+MTU/g2BElDhxGcfGEbUvpZ70yySBUN8gbmufTqu4owQzZzeMkMEIPl0sJdT8yH7Z924Jl/6oFAGf1+i6QJQyAG1iAAR53EfSGmqTNRkkYLHbzUI+RWlrw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365263; c=relaxed/simple; bh=tHLRch/pNbAPUwCypXIU0Msmm9PT7vJclyYGUr0D7F8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=C1YFJeNSKevyBGr3gD9xLdC7Wf2Ybx0IKgxQVMJ4K5LBqhxbckGZWGSWPC77Jj5CzA5MIopaTUlS/S6CtiebGMtdAHe28rtj8+hsVjjWKv4Nmo6QEo6wdFVkRr7z4WOXs6yTWf2PqQxCyG1iukSjFGWPqvNj7jWiDBDNUcFCTrs= 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=iOB4kUry; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iOB4kUry" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43bd5644de8so24109765e9.3 for ; Fri, 07 Mar 2025 08:34:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365260; x=1741970060; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=PnVpWku238hbA4Nkq9IkwuoRE17xKzZpiURAgcmw2aY=; b=iOB4kUry9HdC6/zoDFpAyl+gUuqCgngSkxzaXtxxE6lPNs2vKWxpJWLtPxXpHBcPD1 /H3SJ4p9iIh2HhwF34WORGpO+C0bI5CJ3/Dd3ho/bL7IV2aO0U73K6+sSQFIC1lGciPx zSu65eJ+6M8l9jfu/3VNKTZ+/OEElhiBk6cbXp9taIjYCW9YU9eMtlMQu1uY4ptQQrsd rrh8tDG+VM6KA1IlwPTAljY9HrpfoQn24IxIUzSeYnGeQrQFvz4bv/hY56iIh2w1l5iJ rg9PabSgtrXx13Z2pEDlKTpmY9tIn1pPj6wxb8PF64DTpFQi61Zw3+qM87WqNby3Z1kP IAHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365260; x=1741970060; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PnVpWku238hbA4Nkq9IkwuoRE17xKzZpiURAgcmw2aY=; b=IbLPedu93IW3yNx9BOMjQ/83tLWhDlnJ0ygFgIMBGMpWmii8AuSZTMK1jfKTmpK4h7 u85p6kgt6VS45tOxpeJpa7oQZQTFC4HtIQCzR5j5tHufp2+YS3Q6Wjy+E+pJCt9TEkK+ hrj8yNT5MMpsxrLoJWNT8+EBGhTjNwlriB8UWIppsyGCDOBZSQ1GTu8G8Iaru61v/g6O xWpD7eoQmxE4zUm1NI6nB/8LA+qg9FVoxQCNdQ018phDbpJLbw8nZ6ZMchitNRvnZEPn nj0/GEq7T2Aj7kLy4mvhjryETUU4UKWwl3NF24rusdzRoXodHEAoS11EXHY6EGteoZom ajNQ== X-Forwarded-Encrypted: i=1; AJvYcCUVctNURRueVf7hq4zB4Z4cqB1oZDyjjSP0s1b0aUDR5+S7ydalNp2UIFXR1SE9CrGv6QHeUYg+05YrhKQ=@vger.kernel.org X-Gm-Message-State: AOJu0YweGMTePTrLF55ycky9JDVJrobRktk4iVCEJYJR+oKQUfCjVk7U X4TZi6RxBUsdC/CBin/pgiPYjbUPikIvSvqHRnV9WrjRrP4+f0E51pvvOQUn X-Gm-Gg: ASbGncsHMlXenpkqAHtSe9BUqXsn5+SKlMC9BlJBEve2GAdy1i4AGTtek8yEpGAOnjY DYFAFNFOuanOIlKMMZzyEGKGw+J7OuSh/4CTV2YIPCn1zGhv9fJWLY0K9omzVDuxQ/SFvtPiDeh +gH4sCNeSXpWxjxURakuq7Y9S355sOTB+kuR7/+r01pZiOAzPedUi0ipdX0hSCptba1LypSkMGq aXIMXY/TCvZPNfq1IKISo43CDbUWQU2PqAqckCOEJtYQFqye5sptuIg6Zk7JlKwH/PIfLyrovCm KrPSQMeVttCr4rhfRonYWCIPOZ4LShgOFsRKLZxV4PCM+N0= X-Google-Smtp-Source: AGHT+IF9VU28XVk26daC2mTqspzNuZbNjUdKZ9qIjQPsZn1hhFXRxmxu6k5LBVmtgB181vLER+ecvg== X-Received: by 2002:a05:600c:3b88:b0:43b:da79:582b with SMTP id 5b1f17b1804b1-43c601d67edmr41758015e9.18.1741365259880; Fri, 07 Mar 2025 08:34:19 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:18 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 15/16] drm/vkms: Allow to update the connector status Date: Fri, 7 Mar 2025 17:33:52 +0100 Message-ID: <20250307163353.5896-16-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Implement the drm_connector_funcs.detect() callback to update the connector status by returning the status stored in the configuration. Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- drivers/gpu/drm/vkms/vkms_connector.c | 28 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_connector.h | 3 +++ 2 files changed, 31 insertions(+) diff --git a/drivers/gpu/drm/vkms/vkms_connector.c b/drivers/gpu/drm/vkms/v= kms_connector.c index 48b10cba322a..89fa8d9d739b 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -5,9 +5,37 @@ #include #include =20 +#include "vkms_config.h" #include "vkms_connector.h" =20 +static enum drm_connector_status vkms_connector_detect(struct drm_connecto= r *connector, + bool force) +{ + struct drm_device *dev =3D connector->dev; + struct vkms_device *vkmsdev =3D drm_device_to_vkms_device(dev); + struct vkms_connector *vkms_connector; + enum drm_connector_status status; + struct vkms_config_connector *connector_cfg; + + vkms_connector =3D drm_connector_to_vkms_connector(connector); + + /* + * The connector configuration might not exist if its configfs directory + * was deleted. Therefore, use the configuration if present or keep the + * current status if we can not access it anymore. + */ + status =3D connector->status; + + vkms_config_for_each_connector(vkmsdev->config, connector_cfg) { + if (connector_cfg->connector =3D=3D vkms_connector) + status =3D vkms_config_connector_get_status(connector_cfg); + } + + return status; +} + static const struct drm_connector_funcs vkms_connector_funcs =3D { + .detect =3D vkms_connector_detect, .fill_modes =3D drm_helper_probe_single_connector_modes, .reset =3D drm_atomic_helper_connector_reset, .atomic_duplicate_state =3D drm_atomic_helper_connector_duplicate_state, diff --git a/drivers/gpu/drm/vkms/vkms_connector.h b/drivers/gpu/drm/vkms/v= kms_connector.h index c9149c1b7af0..90f835f70b3b 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.h +++ b/drivers/gpu/drm/vkms/vkms_connector.h @@ -5,6 +5,9 @@ =20 #include "vkms_drv.h" =20 +#define drm_connector_to_vkms_connector(target) \ + container_of(target, struct vkms_connector, base) + /** * struct vkms_connector - VKMS custom type wrapping around the DRM connec= tor * --=20 2.48.1 From nobody Sun Feb 8 04:30:38 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1E0D42459C2 for ; Fri, 7 Mar 2025 16:34:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365264; cv=none; b=a0JFIAlco22phejAmA0yzaRhHMj+89J9XNazR/e9FwPi88df+tWzx/cZTDpM38YZS9kwyVz9BXJCs/SqocMKhOeTTbRuHsl/Pd9euvOsSH+DoUzdIdhJxIwVEplPyNDyJXZvDrmuspojdCXU0MsOC3I2oFHj07QNYsuWgqtsnNQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741365264; c=relaxed/simple; bh=UaHEGZDcjpFQM+/91kkr8nzcxY1detjrCFlN+Zq5nB4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=dnQKCe7KFCGyZeOQ/w4ZXGKFVASVUPB2io7ypwDcIp8MF4n0IdyWVelgN9Ruv12FBJeCBUVql2Dyw7H6UYDvtE3zoP8LQIzeJQj2MPQaaMgbYWDqrG8zJuGLFQT01efohNSW7jWKz7lu20fvtLwOiaTkObdTuv+/rxpXgBSLXF4= 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=lQqfZTmj; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lQqfZTmj" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43bbb440520so24117415e9.2 for ; Fri, 07 Mar 2025 08:34:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741365261; x=1741970061; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xK4w0zRijqvJSQy92+j3ZDq7C+G47BlmHwixThFbhJo=; b=lQqfZTmj1emrMPM9GLLcZ+B0gd0HVLwpahXPa9DJkFPiThejWlZCYApXaIage6Z0Pv 0FqZDpjMUJ5XVNynncfxK/JQ1VpJm4NTGYRGczquErCklvCho0UpApZFG0aiTKm40JS6 PLFl0SpWTPMNxeOyTeV2TIAYX5zWQnoDgZRo9FBjpkiiWfJxom/xxEJT4GskzFtLASu8 CnSSDLzhhrHy1mcZqoc63ULs3ch5eK33ecfk0d3iSGFOYMP+267AWEH/TWl9m2f7RKci 1J095vYA1+J/BVKgBhwRaEFXgnsGbAC4jMk9CMGedXkLvIBdicPD+/gH+jGVUxl7ZLDc zKHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741365261; x=1741970061; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xK4w0zRijqvJSQy92+j3ZDq7C+G47BlmHwixThFbhJo=; b=hF1wa6pLVE46FWw4d+A4FAP/2Hf49cTuGV4h7I+U6LOr0ZfwzwMZWr0bNHGqRaA03s 3rcIC4U00Xz5vtvA4r9w6RM6/r+cEOj2AO6l9kkyS+FnlDJEAZqTUMOHaqpwETuwswue hTXISPfRmzC7I6L87MuxJbDtX11em2GGa7vNWozfBYNo2et/3MiZDcfAOs3S7dkERwfe BvXGpH1NGbimTt/Quj9Lax68IHpByfqRbAdKCq/2iPitkad1EBRG1magAlrCkk9QKpQI XvXZ6hwZr5YP3NkXnFk12TOg1lwBclsP/I4cTg6Y1pHX4EDEBfup+Pl5ObX/RIlDC8ZJ ZYiQ== X-Forwarded-Encrypted: i=1; AJvYcCVR8ItIArKrBlWlVLWT9GwyeRPnksmXAqahzWVdBLyjOjU6pKXN/YCowqYRLIQG0SgtgfKDwTsFw+B70ow=@vger.kernel.org X-Gm-Message-State: AOJu0Yw5PCV1MjiYFH7hncOW93y9nLgTRmt9N1obLeuj2JdXWTuRPySV nZiLeITr7hQjdu5hFNRI/AU9EHmAfG8AsIUyOV786RP2jNLyazYR X-Gm-Gg: ASbGnctR4msV+3D/QlbG5O1p+7pu7rySNtP7z581EFcD4iJ/vkks6JQ54sHKflxZ8iW RTv0+Hrd3tEONJJaWzYYl3naXW/q5e0JjcJGJZlNFr2LQzsijRXAhyS8Sp7r7Wd225svhi5TqNY l9qKldmENjRm3nd1l/9iE9qkkf0kLD8FWOXcK4fdnjC0YBJvYXE5awRWgGHL0L6cm1PYpsJ9zsX wDuobG5kUbcC0HoBQT7cVe7AfxScB6pUhijHAgWX/bjD0s9TRlTsr7HNMmmLx50+RRvWp+cTu3Y 871/FNRqFp/SPvNvhFhSI3M+zAYD8UtNhyGgFQhewRulphM= X-Google-Smtp-Source: AGHT+IFIs9tK6Ia3HZmasKFOBkOZ5DkA964+wt56EXCns6wInJJjqFt3Tdwt5ChZJns81z6POSdXoQ== X-Received: by 2002:a5d:588a:0:b0:391:298c:d673 with SMTP id ffacd0b85a97d-39132da2286mr4274440f8f.40.1741365261208; Fri, 07 Mar 2025 08:34:21 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c019557sm6031436f8f.50.2025.03.07.08.34.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 08:34:20 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v3 16/16] drm/vkms: Allow to configure connector status via configfs Date: Fri, 7 Mar 2025 17:33:53 +0100 Message-ID: <20250307163353.5896-17-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250307163353.5896-1-jose.exposito89@gmail.com> References: <20250307163353.5896-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When a connector is created, add a `status` file to allow to update the connector status to: - 1 connector_status_connected - 2 connector_status_disconnected - 3 connector_status_unknown If the device is enabled, updating the status hot-plug or unplugs the connector. Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 5 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 48 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_connector.c | 7 ++++ drivers/gpu/drm/vkms/vkms_connector.h | 6 ++++ 4 files changed, 66 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index c551241fe873..7c54099b1dc6 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -108,6 +108,11 @@ Last but not least, create one or more connectors:: =20 sudo mkdir /config/vkms/my-vkms/connectors/connector0 =20 +Connectors have 1 configurable attribute: + +- status: Connection status: 1 connected, 2 disconnected, 3 unknown (same = values + as those exposed by the "status" property of a connector) + To finish the configuration, link the different pipeline items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 8e90acbebd6a..07ab794e1052 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -7,6 +7,7 @@ #include "vkms_drv.h" #include "vkms_config.h" #include "vkms_configfs.h" +#include "vkms_connector.h" =20 /* To avoid registering configfs more than once or unregistering on error = */ static bool is_configfs_registered; @@ -512,6 +513,52 @@ static const struct config_item_type encoder_group_typ= e =3D { .ct_owner =3D THIS_MODULE, }; =20 +static ssize_t connector_status_show(struct config_item *item, char *page) +{ + struct vkms_configfs_connector *connector; + enum drm_connector_status status; + + connector =3D connector_item_to_vkms_configfs_connector(item); + + scoped_guard(mutex, &connector->dev->lock) + status =3D vkms_config_connector_get_status(connector->config); + + return sprintf(page, "%u", status); +} + +static ssize_t connector_status_store(struct config_item *item, + const char *page, size_t count) +{ + struct vkms_configfs_connector *connector; + enum drm_connector_status status; + + connector =3D connector_item_to_vkms_configfs_connector(item); + + if (kstrtouint(page, 10, &status)) + return -EINVAL; + + if (status !=3D connector_status_connected && + status !=3D connector_status_disconnected && + status !=3D connector_status_unknown) + return -EINVAL; + + scoped_guard(mutex, &connector->dev->lock) { + vkms_config_connector_set_status(connector->config, status); + + if (connector->dev->enabled) + vkms_trigger_connector_hotplug(connector->dev->config->dev); + } + + return (ssize_t)count; +} + +CONFIGFS_ATTR(connector_, status); + +static struct configfs_attribute *connector_item_attrs[] =3D { + &connector_attr_status, + NULL, +}; + static void connector_release(struct config_item *item) { struct vkms_configfs_connector *connector; @@ -531,6 +578,7 @@ static struct configfs_item_operations connector_item_o= perations =3D { }; =20 static const struct config_item_type connector_item_type =3D { + .ct_attrs =3D connector_item_attrs, .ct_item_ops =3D &connector_item_operations, .ct_owner =3D THIS_MODULE, }; diff --git a/drivers/gpu/drm/vkms/vkms_connector.c b/drivers/gpu/drm/vkms/v= kms_connector.c index 89fa8d9d739b..b0a6b212d3f4 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -87,3 +87,10 @@ struct vkms_connector *vkms_connector_init(struct vkms_d= evice *vkmsdev) =20 return connector; } + +void vkms_trigger_connector_hotplug(struct vkms_device *vkmsdev) +{ + struct drm_device *dev =3D &vkmsdev->drm; + + drm_kms_helper_hotplug_event(dev); +} diff --git a/drivers/gpu/drm/vkms/vkms_connector.h b/drivers/gpu/drm/vkms/v= kms_connector.h index 90f835f70b3b..35f2adf97e32 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.h +++ b/drivers/gpu/drm/vkms/vkms_connector.h @@ -26,4 +26,10 @@ struct vkms_connector { */ struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev); =20 +/** + * struct vkms_device *vkmsdev() - Update the device's connectors status + * @vkmsdev: VKMS device to update + */ +void vkms_trigger_connector_hotplug(struct vkms_device *vkmsdev); + #endif /* _VKMS_CONNECTOR_H_ */ --=20 2.48.1