From nobody Sun Dec 14 06:18:53 2025 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 D289C19DF8D for ; Thu, 16 Oct 2025 17:56:44 +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=1760637406; cv=none; b=eOWObOr7u4RNQEjPSYxWvxSQp2N9Dd7AciwmStS7pUesfsOLc11kRjq9DuRkzUaq1Rr8XAfhkaIw3RVCa/+7amb2W/QnzwlrZtFHJAxrfL1WE/u591D1FL6P3kFyLsYpsCKgHeOCb5CYXCOhLaNbPiK1cuaGCu6CwPLouc7IhX8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637406; c=relaxed/simple; bh=1ufYf8QmUfgcOhG5iILREkFndj30nopWTyHYdZGPzYc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=uCJdaP0bJG7JZ/OzdDu8n3Bph+VuYUsmyew5D/vXRXu4bqKrofAtbuZLEl8zRzrW3guzTQAfSfZM3VqfRp5K2GYNG9zkPtbnPXdhkyA45cVyMH4bpceJtVMnoz+hZk8FgMuc1cXPULAfeTNvuBhMmTUVmEUOPj3YuisxkMdAxWY= 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=YP2bfQwa; 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="YP2bfQwa" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-426ff4f3ad4so484882f8f.0 for ; Thu, 16 Oct 2025 10:56:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637403; x=1761242203; 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=3kmKem70jvZ9LoR1TdTHaGoDSxtiVxdO7P0NAM1Dmj4=; b=YP2bfQwa1eD82KGOluzjmgBVCsEK/qbMUVbOsc9kLA7QBXgvLkZegXu1bi6ahLxItn m/ysTPOj0KeJeRt+yPr76LQ/09tct6bfkaQIPV701HaWxvEbu5EESJ6Yi8fZcvu32hYF 3pfgbgBq+4GRQ/ShcYSxsusXPJqUjQ9NQjO4nwNqVxUb5b7uSxk4J2hDfYKOB/XC6hM4 UpwH2ECQf4lVIQ084sr6EvwFFAjIlKdcv+kAG2127e1/n3Flx86L0zD2vtNaMS0UEUaQ +8Y+8E9fLH+/CVyf1wCnbLvJWBFdZJaHs8A7NV5+mmpWZWQqM7ZiYAZ0/6EzByyCXjJ6 /gXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637403; x=1761242203; 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=3kmKem70jvZ9LoR1TdTHaGoDSxtiVxdO7P0NAM1Dmj4=; b=nYDvrQ8b/oa9KpGY+QR4zuzYevEiw/+Ga/Aq52jQ3IUHqWmd6LT8mwminHDboJeVQD iUbKLRXa7+LKMJsamPlzvS8kOifrzC0//MhrTrUIRFlIzlw2UG48Q90jliulGhIRlIRt B81/DrUPJ1CKGJmwITAgfURLmeMNPKXVphMEc64OMUSk8B2cSH4N764X17COPCM8jhIX fdA+B/gNyxKgdm5hBJdHqATEKEwXelxeAV6vByHa0BCkBEtLYiYK8snhneO3+AqsLa9+ SeU42xvegpI4TabVt5rXkYNpEtFryNvKpFLBCY1cwGMMzwOQg1ZTtaEqPrT9Jp/+p7WF FggQ== X-Forwarded-Encrypted: i=1; AJvYcCX4uDDUGZ1MMejjsjJlC/u1XsKxfaXoZTD+P+WwcOdalvNGf4nQMdZ8qQXRpeh8Ex9S71v0TlvymJgKiTU=@vger.kernel.org X-Gm-Message-State: AOJu0YwF4HvGCnrVcE5DsNeU12eKrIerY0ppr2aMyaeLE0k5DOghFYXQ Ey6lbof7ASG0P2/kqFwJOjoXe/SdQIBMhKl7trQ7I9E8ZaT1Ro5QApqQ X-Gm-Gg: ASbGnctyVxQ3rNuuyJbHpprepjHsHjaP67S6n78vfvy9mJgkKYqsFNce4k8oNbp2Xij O+9oenHyySvcLC3dBZfybBBJsWTQl977lwHhJU3JDw/VWnSzpfFaSDCFOj/0wu0+d7nU+bdWr8u P9aiQyPfkQoVijvZ9ADWo96Fu7UhH66qM8SnIKq/eo9fu7uigoZBlR72TmShf1AgUty8QJ0chWu Vc/27UHvVyNhrq8tKrkBdccs0YG9tQ3HD3lOE0SKVPGpzTxfbxALRavzvTOU1ApapvRoH56Xb6Y Xvx5RYEe45T7P3OHxEipSxRnk2DNW5Sfr9fv4CVaY1b04xWGN7BxodYnKZ7WoEqIrISPvNIJl6a YJXW/K5Izli5MVjrh8aJApGaxS4WlTh64jrNd6xY105xUqLI7mIwKYOCydRQc3/IJBr2SLcZZ2p Q= X-Google-Smtp-Source: AGHT+IGbJz7x6kWyeAzr1cqOyNqUZQkkfzh9jBeeJgGBUoiQ7xa+MKsRfzCNAV42+zCg/ujXdDEIZA== X-Received: by 2002:a05:6000:22c5:b0:3f2:b077:94bc with SMTP id ffacd0b85a97d-42704d7e9c4mr686747f8f.4.1760637402823; Thu, 16 Oct 2025 10:56:42 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:42 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Mark Yacoub , Harry Wentland , Luca Ceresoli Subject: [PATCH v7 01/16] drm/vkms: Expose device creation and destruction Date: Thu, 16 Oct 2025 19:56:03 +0200 Message-ID: <20251016175618.10051-2-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable In preparation for configfs support, expose vkms_create() and vkms_destroy(). Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli 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 e8472d9b6e3b..78af37c7bd83 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -146,7 +146,7 @@ static int vkms_modeset_init(struct vkms_device *vkmsde= v) return vkms_output_init(vkmsdev); } =20 -static int vkms_create(struct vkms_config *config) +int vkms_create(struct vkms_config *config) { int ret; struct faux_device *fdev; @@ -229,7 +229,7 @@ static int __init vkms_init(void) return 0; } =20 -static void vkms_destroy(struct vkms_config *config) +void vkms_destroy(struct vkms_config *config) { struct faux_device *fdev; =20 diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_dr= v.h index fb9711e1c6fb..db260df1d4f6 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.h +++ b/drivers/gpu/drm/vkms/vkms_drv.h @@ -256,6 +256,26 @@ struct vkms_device { #define to_vkms_plane_state(target)\ container_of(target, struct vkms_plane_state, base.base) =20 +/** + * vkms_create() - Create a device from a configuration + * @config: Config used to configure the new device + * + * A pointer to the created vkms_device is stored in @config + * + * Returns: + * 0 on success or an error. + */ +int vkms_create(struct vkms_config *config); + +/** + * vkms_destroy() - Destroy a device + * @config: Config from which the device was created + * + * The device is completely removed, but the @config is not freed. It can = be + * reused or destroyed with vkms_config_destroy(). + */ +void vkms_destroy(struct vkms_config *config); + /** * vkms_crtc_init() - Initialize a CRTC for VKMS * @dev: DRM device associated with the VKMS buffer --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 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 312CD221FD0 for ; Thu, 16 Oct 2025 17:56:46 +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=1760637408; cv=none; b=eCRaxIV4pnCXvH9KMKlWwd4ppG0O+NIPiYypXiDtzvGnRuUgM7FyCNvzIA+1K8/dTyRvRcB9dL6E46CirHY3bucTgmD41J7U8TXLrLOpGZh4U2ed/l1tpC/DkYl+DhsfX4LNsee57+NmzpJOMX/u5rsGtYQ1YDR580WMYagF0jo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637408; c=relaxed/simple; bh=/KrH4Ah18U4AfQ63aZ1XwopQVYXVo8+xTvxAT3paEf0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SQP1xEJNX0ooBBurckhS8oy6eXltnTAZTiD1bs1qO2gNaGXX31zQOiHfJBYNeXJGEgwllnPEdgFQIeOSa37iJxB7BDsfUhqMTu2hSWsZHVPqcK16iz2ebeeYUlZNP86S7qzpiDYfjLOZcPeOONvtOQxdLNEDjOOA2txDZMaCxcI= 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=DMNhPru/; 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="DMNhPru/" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-42557c5cedcso640121f8f.0 for ; Thu, 16 Oct 2025 10:56:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637404; x=1761242204; 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=KKP1Ta3BfHb/8wlxAanz9De+XRrWGVKj4Da9wjd+w5A=; b=DMNhPru/VEwuFO1gFyjekRLtpTmFnweG95iD9D14pv4Je3nVpveWYzxO7h9udIexHT xuRhu7WRmhFAKXP+W33jrmsdFv8MutpoPEl37qCiF4GXApfV56uctiavzRhJSwamL5Rd Cci1yDrV3xVgu/wSPiR8biMDUirT3NFx1N2CX6nRftATMuIFyprk5GRokiVvzalvMk74 p5ceg7yVexguQH6aPGo1r0LxGSMxD4qxG1hX2FHGWUS2OU1Z6dTLJQWh3loRsZbRc2Tl Kew8W3JTA29uLgDPTid63+XgsEoEkbZWyoVFxx8bGzr1H6KYjTBwqoLJq3Ag51Q895Z5 SgGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637404; x=1761242204; 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=KKP1Ta3BfHb/8wlxAanz9De+XRrWGVKj4Da9wjd+w5A=; b=XCHOTWIcZBWuzGLNC5CB43JYY48mXIIKOL4zobQSf+cCthwYYU4UOWCfCfWa1Ar3Og d8ShyOe+/j1DnGlnx1zILg+e574B0QTKVs7J1oOu4OOHARjvDaIMedxgJXiYCD6U3X/I /Ui0krpUQsRmc3tiAc1mHh/FLnHaH7UoPcHznFcMLkWfhGrPJJDOBRoOc0kCaIWS9zWR op2EJB8hTajqwJ3wR+e15zdmO7EDWvHGbuIMEO5pxruZHqfNjmDO7cBTqUm0DMEg+CS+ oxHxH6KplnrePbCa1W6bg5ZJ4NKoMbFbTFHveJWcWJb75iKHfhMFKeNpKakBi/rjm20a vCZw== X-Forwarded-Encrypted: i=1; AJvYcCUlk6qPnx9NwVI3I6b+oUe+K+yHolIsQczmjCemrL2l0d+9lGFFy7wlFvs+JGZrMIk/5HwptWY4Xf5FsGU=@vger.kernel.org X-Gm-Message-State: AOJu0YxerHtGExU9Zg2yvaR8g5XqxI4rhJqMeqJay3zBoUe0g6Vy0uNl GB/bI81EWbyhHej/0SDTAnOkxJOJAh7DKdtSjl7TMjAvhblFu0XW7gEx X-Gm-Gg: ASbGncs9SMeK3ZPmxEJvr06D29zFQJFT8hPurwiBRVWKPp/8ydjdjSDWeE2apUfboJC fQK0FwE7xg0UH2GXeQlw07rTK1ouCnLJLuCCD2+G5RhRZNusF+5ONfSTnrPrs4vOfeOA5IdLIzY biyF22Z0EfqZFb1HlMkZZX6GZACgojrGZEEcolSqwApksGHUaP++A0M7cK+kb/FS5WQfQNo6CGI PXSSxx5V6diBIIHfqD4C9cU3hkomhQiSPqMSVsUUNEPWX2VbTrzlt6KayzimE3B99vqXIjOkWb6 SFZA7H1GdGDjDddNRYyuE4M1lD6P18Qj0nmWsMqKfSeqqdWr90M/+0zeN25sfJRPtbLDmg5b0EC UjfQuyeMjZVrWS5EsLGbU5BOJzCuSBR/Qf4SMo38DbVNsLBY4pEPI/IIA3to9/4AsM9pkRKR4sA 8s3cNEzwynqg== X-Google-Smtp-Source: AGHT+IFblAy5GAIp1r8QzuJtiDYDa0ypR0JAOuaVZe/d+x+4Bl8CWH2kZcRnkZPVR8FiiPrGRmKQEw== X-Received: by 2002:a5d:5f82:0:b0:3ec:db87:e8fa with SMTP id ffacd0b85a97d-42704d768b6mr761730f8f.26.1760637404162; Thu, 16 Oct 2025 10:56:44 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:43 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , Harry Wentland , Luca Ceresoli , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v7 02/16] drm/vkms: Add and remove VKMS instances via configfs Date: Thu, 16 Oct 2025 19:56:04 +0200 Message-ID: <20251016175618.10051-3-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Louis Chauvet Allow to create, enable, disable and destroy VKMS instances using configfs. For the moment, it is not possible to add pipeline items, so trying to enable the device will fail printing an informative error to the log. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 32 +++++ drivers/gpu/drm/vkms/Kconfig | 1 + drivers/gpu/drm/vkms/Makefile | 3 +- drivers/gpu/drm/vkms/vkms_configfs.c | 172 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_configfs.h | 8 ++ drivers/gpu/drm/vkms/vkms_drv.c | 7 ++ 6 files changed, 222 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.c create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.h diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 8a8b1002931f..73521b9ff0c3 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -51,6 +51,38 @@ To disable the driver, use :: =20 sudo modprobe -r vkms =20 +Configuring With Configfs +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D + +It is possible to create and configure multiple VKMS instances via configf= s. + +Start by mounting configfs and loading VKMS:: + + sudo mount -t configfs none /config + sudo modprobe vkms + +Once VKMS is loaded, ``/config/vkms`` is created automatically. Each direc= tory +under ``/config/vkms`` represents a VKMS instance, create a new one:: + + sudo mkdir /config/vkms/my-vkms + +By default, the instance is disabled:: + + cat /config/vkms/my-vkms/enabled + 0 + +Once you are done configuring the VKMS instance, enable it:: + + echo "1" | sudo tee /config/vkms/my-vkms/enabled + +Finally, you can remove the VKMS instance disabling it:: + + echo "0" | sudo tee /config/vkms/my-vkms/enabled + +And removing the top level directory:: + + sudo rmdir /config/vkms/my-vkms + Testing With IGT =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 diff --git a/drivers/gpu/drm/vkms/Kconfig b/drivers/gpu/drm/vkms/Kconfig index 3c02f928ffe6..3977bbb99f7d 100644 --- a/drivers/gpu/drm/vkms/Kconfig +++ b/drivers/gpu/drm/vkms/Kconfig @@ -7,6 +7,7 @@ config DRM_VKMS select DRM_KMS_HELPER select DRM_GEM_SHMEM_HELPER select CRC32 + select CONFIGFS_FS default n help Virtual Kernel Mode-Setting (VKMS) is used for testing or for diff --git a/drivers/gpu/drm/vkms/Makefile b/drivers/gpu/drm/vkms/Makefile index d657865e573f..939991fc8233 100644 --- a/drivers/gpu/drm/vkms/Makefile +++ b/drivers/gpu/drm/vkms/Makefile @@ -8,7 +8,8 @@ vkms-y :=3D \ vkms_composer.o \ vkms_writeback.o \ vkms_connector.o \ - vkms_config.o + vkms_config.o \ + vkms_configfs.o =20 obj-$(CONFIG_DRM_VKMS) +=3D vkms.o obj-$(CONFIG_DRM_VKMS_KUNIT_TEST) +=3D tests/ diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c new file mode 100644 index 000000000000..ee186952971b --- /dev/null +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -0,0 +1,172 @@ +// SPDX-License-Identifier: GPL-2.0+ +#include +#include +#include +#include + +#include "vkms_drv.h" +#include "vkms_config.h" +#include "vkms_configfs.h" + +/* To avoid registering configfs more than once or unregistering on error = */ +static bool is_configfs_registered; + +/** + * struct vkms_configfs_device - Configfs representation of a VKMS device + * + * @group: Top level configuration group that represents a VKMS device. + * Initialized when a new directory is created under "/config/vkms/" + * @lock: Lock used to project concurrent access to the configuration attr= ibutes + * @config: Protected by @lock. Configuration of the VKMS device + * @enabled: Protected by @lock. The device is created or destroyed when t= his + * option changes + */ +struct vkms_configfs_device { + struct config_group group; + + struct mutex lock; + struct vkms_config *config; + bool enabled; +}; + +#define device_item_to_vkms_configfs_device(item) \ + container_of(to_config_group((item)), struct vkms_configfs_device, \ + group) + +static ssize_t device_enabled_show(struct config_item *item, char *page) +{ + struct vkms_configfs_device *dev; + bool enabled; + + dev =3D device_item_to_vkms_configfs_device(item); + + scoped_guard(mutex, &dev->lock) + enabled =3D dev->enabled; + + return sprintf(page, "%d\n", enabled); +} + +static ssize_t device_enabled_store(struct config_item *item, const char *= page, + size_t count) +{ + struct vkms_configfs_device *dev; + bool enabled; + int ret =3D 0; + + dev =3D device_item_to_vkms_configfs_device(item); + + if (kstrtobool(page, &enabled)) + return -EINVAL; + + scoped_guard(mutex, &dev->lock) { + if (!dev->enabled && enabled) { + if (!vkms_config_is_valid(dev->config)) + return -EINVAL; + + ret =3D vkms_create(dev->config); + if (ret) + return ret; + } else if (dev->enabled && !enabled) { + vkms_destroy(dev->config); + } + + dev->enabled =3D enabled; + } + + return (ssize_t)count; +} + +CONFIGFS_ATTR(device_, enabled); + +static struct configfs_attribute *device_item_attrs[] =3D { + &device_attr_enabled, + NULL, +}; + +static void device_release(struct config_item *item) +{ + struct vkms_configfs_device *dev; + + dev =3D device_item_to_vkms_configfs_device(item); + + if (dev->enabled) + vkms_destroy(dev->config); + + mutex_destroy(&dev->lock); + vkms_config_destroy(dev->config); + kfree(dev); +} + +static struct configfs_item_operations device_item_operations =3D { + .release =3D &device_release, +}; + +static const struct config_item_type device_item_type =3D { + .ct_attrs =3D device_item_attrs, + .ct_item_ops =3D &device_item_operations, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_group *make_device_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + + if (strcmp(name, DEFAULT_DEVICE_NAME) =3D=3D 0) + return ERR_PTR(-EINVAL); + + dev =3D kzalloc(sizeof(*dev), GFP_KERNEL); + if (!dev) + return ERR_PTR(-ENOMEM); + + dev->config =3D vkms_config_create(name); + if (IS_ERR(dev->config)) { + kfree(dev); + return ERR_CAST(dev->config); + } + + config_group_init_type_name(&dev->group, name, &device_item_type); + mutex_init(&dev->lock); + + return &dev->group; +} + +static struct configfs_group_operations device_group_ops =3D { + .make_group =3D &make_device_group, +}; + +static const struct config_item_type device_group_type =3D { + .ct_group_ops =3D &device_group_ops, + .ct_owner =3D THIS_MODULE, +}; + +static struct configfs_subsystem vkms_subsys =3D { + .su_group =3D { + .cg_item =3D { + .ci_name =3D "vkms", + .ci_type =3D &device_group_type, + }, + }, + .su_mutex =3D __MUTEX_INITIALIZER(vkms_subsys.su_mutex), +}; + +int vkms_configfs_register(void) +{ + int ret; + + if (is_configfs_registered) + return 0; + + config_group_init(&vkms_subsys.su_group); + ret =3D configfs_register_subsystem(&vkms_subsys); + + is_configfs_registered =3D ret =3D=3D 0; + + return ret; +} + +void vkms_configfs_unregister(void) +{ + if (is_configfs_registered) + configfs_unregister_subsystem(&vkms_subsys); +} diff --git a/drivers/gpu/drm/vkms/vkms_configfs.h b/drivers/gpu/drm/vkms/vk= ms_configfs.h new file mode 100644 index 000000000000..e9020b0043db --- /dev/null +++ b/drivers/gpu/drm/vkms/vkms_configfs.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +#ifndef _VKMS_CONFIGFS_H_ +#define _VKMS_CONFIGFS_H_ + +int vkms_configfs_register(void); +void vkms_configfs_unregister(void); + +#endif /* _VKMS_CONFIGFS_H_ */ diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_dr= v.c index 78af37c7bd83..c1f23e6a4b07 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -28,6 +28,7 @@ #include =20 #include "vkms_config.h" +#include "vkms_configfs.h" #include "vkms_drv.h" =20 #define DRIVER_NAME "vkms" @@ -214,6 +215,10 @@ static int __init vkms_init(void) int ret; struct vkms_config *config; =20 + ret =3D vkms_configfs_register(); + if (ret) + return ret; + config =3D vkms_config_default_create(enable_cursor, enable_writeback, en= able_overlay); if (IS_ERR(config)) return PTR_ERR(config); @@ -250,6 +255,8 @@ void vkms_destroy(struct vkms_config *config) =20 static void __exit vkms_exit(void) { + vkms_configfs_unregister(); + if (!default_config) return; =20 --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9166122424E for ; Thu, 16 Oct 2025 17:56:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637409; cv=none; b=cABWQ2bVbEB1+5p1Sj5jhp42X5XtFtxOwF36k9fkwFFobZnENMxAYeQdTC3oGsP0y3pz8AwQRaRt3bGN6b5guq97/JILaiL7DNd8euQkTd2WEhU6jSzfgGAbf+EGWw1PCa2fbbL2ebOhRs9WNHksFNqrOg5UT7mJDYJE6f5XSl4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637409; c=relaxed/simple; bh=5yKZuBoi7Bm9NZw3eA5YJHSvJngrwe7IYTYpbPBYYWo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=RHy2C9CT49RbX/3LxvseljKDbPv3wK1K9WhLMscwu1G6+j41tHY4VdEW+IikZ31Nlv5Cw7FLekcL+kclesB8WBuvedw1Xk7uXCMIoeoL6l4k7CF+/abkcxW9dL223QJva3d8bcpTr6f6ErHqon2O/ZiX8dz4FJMMLK8FsjJ1K1w= 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=DtBdAuNQ; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DtBdAuNQ" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-471131d6121so7986025e9.1 for ; Thu, 16 Oct 2025 10:56:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637406; x=1761242206; 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=iLtrTTPFfD+8IrWwSmDlmKNovc5NDcW2sakE1jdQk8A=; b=DtBdAuNQfHbzc5j4BuZHNZnIgBggsEpf9IFJ22RnHgG/sinXaGfHkOvubRG2rgFvs4 k24+X8+5lzkKUIS2zIRU5woSRnX+8TPePsV7a/Erja6S0zQiwae8TTjXx9slowFuMiYX 4lDyg4sXuDA0+mk9kgt3viUy9QQf+u5K869FJKJz5JAjRJaw4KIbf8ej5NF2Wg+9EXfc 49okTU7pJAn9NMcj/1Ebzm9zqlzsdndMTJ7Tg87ZvbTmMbWW40/1+H85tqPn3vT+JqzJ GkrQ8KWPKXFLJZdoKbsMb0H37XneU4FRpqr8Uto7AartXI5vbdvana8ehH7NMYo+wKzU j6Rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637406; x=1761242206; 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=iLtrTTPFfD+8IrWwSmDlmKNovc5NDcW2sakE1jdQk8A=; b=TR78qNXpvcpNchRACJOcDOdkZUzV9ZLq7+3qNYdeb1z9BROhnYCftr9L1471JDALAN 6+zyTWoSCi2+BgFHoKZ7PrIdL0Q2GOSpYi1Eb9yajU3kasfOF0qZ4qj7TuMB4+QFRRED q9i/WMNYbejy8RcrtxqizVzreGFZmdPH7ICbmW+LQ6tbaxG29pRGB807E3mRQBuwH3nW oJGLNwK8WKRInpY+jLDD9kbT8tQA1olWd/xvT+mTRk8r+3H74ngLb/OCKNB9Q9kMUgv+ jadIWXGqvBNxpUuYcw4lOEWhoPn8M+xIjRKMp4/1/INl7dE/JUC47xmteMqly2u8VQiI EenQ== X-Forwarded-Encrypted: i=1; AJvYcCVyqhxajLLQdKujEbZztozSS1E5bVAObxk11XgwL9+Lppv6VtL2coMeWSvg/9Os4CNlaZ64HuPHs1rSgQs=@vger.kernel.org X-Gm-Message-State: AOJu0YwrwgZD6E3dtCdF0EcwnSUQv/Ip28Alvnm3RDNkJUaKitwYiWuU 1BOoCUQ+xegkHXPXbYBAuItRFhNtTPBiEwBBJfERUzuhHAePtgC4DzW8 X-Gm-Gg: ASbGncuBg3unmi8ncBhjs7vH/I22+wRPAZF49+AQJjuryhM7K4DbS94y3XkpekHwyc0 Kkbk9arx9KhGpCozwv9X0JEX1JR6rimVfQ59A4xEEhEccLK2dehjXCLGHCu/JuNt9l3uFCmuf3B bOckUHPtT7K7FB++cwZT07+ZISaKU/bjkefdHBnEf3PveAY02MGB9CqsfGXlv8B35qEc6f1deZt A/PCGQcEOJyAz2MHL3xQMnwuEOprbEzC8qNL0cC77a6ktnNqEskmTIH6VkhgqLLGXaYwizQBZVG KlyhMj5LrZSyy398PQp3uE2F2+oBfruUHywMjRX/HE8zrOfnOfq5/J0mi4zkmS75DGNzJ+MlIip 0t2aoC1BcqkrKpOae9s7slpfEOmeug2oaiGZzsS8nMBuK+JtvPUkIgDIX5svYg1vwm0rfDw8tH4 RCrgmr5NAYvg== X-Google-Smtp-Source: AGHT+IGtwT28xaTfBbSA0ncBa8fMQXZ02eYudn1PjoUHPrsoK1OdwE/M5iIpxKcnyWXvcIqcJ5fHSA== X-Received: by 2002:a05:600c:548a:b0:471:ff3:7514 with SMTP id 5b1f17b1804b1-47117877736mr6435215e9.12.1760637405530; Thu, 16 Oct 2025 10:56:45 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:44 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , Harry Wentland , Luca Ceresoli , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v7 03/16] drm/vkms: Allow to configure multiple planes via configfs Date: Thu, 16 Oct 2025 19:56:05 +0200 Message-ID: <20251016175618.10051-4-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Louis Chauvet Create a default subgroup at /config/vkms/planes to allow to create as many planes as required. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 16 ++++- drivers/gpu/drm/vkms/vkms_configfs.c | 88 ++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 73521b9ff0c3..c0c892e4e27c 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -71,6 +71,19 @@ By default, the instance is disabled:: cat /config/vkms/my-vkms/enabled 0 =20 +And directories are created for each configurable item of the display pipe= line:: + + tree /config/vkms/my-vkms + =E2=94=9C=E2=94=80=E2=94=80 enabled + =E2=94=94=E2=94=80=E2=94=80 planes + +To add items to the display pipeline, create one or more directories under= the +available paths. + +Start by creating one or more planes:: + + sudo mkdir /config/vkms/my-vkms/planes/plane0 + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -79,8 +92,9 @@ Finally, you can remove the VKMS instance disabling it:: =20 echo "0" | sudo tee /config/vkms/my-vkms/enabled =20 -And removing the top level directory:: +And removing the top level directory and its subdirectories:: =20 + sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index ee186952971b..a7c705e00e4c 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -16,6 +16,7 @@ static bool is_configfs_registered; * * @group: Top level configuration group that represents a VKMS device. * Initialized when a new directory is created under "/config/vkms/" + * @planes_group: Default subgroup of @group at "/config/vkms/planes" * @lock: Lock used to project concurrent access to the configuration attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -23,16 +24,99 @@ static bool is_configfs_registered; */ struct vkms_configfs_device { struct config_group group; + struct config_group planes_group; =20 struct mutex lock; struct vkms_config *config; bool enabled; }; =20 +/** + * struct vkms_configfs_plane - Configfs representation of a plane + * + * @group: Top level configuration group that represents a plane. + * Initialized when a new directory is created under "/config/vkms/planes" + * @dev: The vkms_configfs_device this plane belongs to + * @config: Configuration of the VKMS plane + */ +struct vkms_configfs_plane { + struct config_group group; + struct vkms_configfs_device *dev; + struct vkms_config_plane *config; +}; + #define device_item_to_vkms_configfs_device(item) \ container_of(to_config_group((item)), struct vkms_configfs_device, \ group) =20 +#define child_group_to_vkms_configfs_device(group) \ + device_item_to_vkms_configfs_device((&(group)->cg_item)->ci_parent) + +#define plane_item_to_vkms_configfs_plane(item) \ + container_of(to_config_group((item)), struct vkms_configfs_plane, group) + +static void plane_release(struct config_item *item) +{ + struct vkms_configfs_plane *plane; + struct mutex *lock; + + plane =3D plane_item_to_vkms_configfs_plane(item); + lock =3D &plane->dev->lock; + + scoped_guard(mutex, lock) { + vkms_config_destroy_plane(plane->config); + kfree(plane); + } +} + +static struct configfs_item_operations plane_item_operations =3D { + .release =3D &plane_release, +}; + +static const struct config_item_type plane_item_type =3D { + .ct_item_ops =3D &plane_item_operations, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_group *make_plane_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_plane *plane; + + dev =3D child_group_to_vkms_configfs_device(group); + + scoped_guard(mutex, &dev->lock) { + if (dev->enabled) + return ERR_PTR(-EBUSY); + + plane =3D kzalloc(sizeof(*plane), GFP_KERNEL); + if (!plane) + return ERR_PTR(-ENOMEM); + + plane->dev =3D dev; + + plane->config =3D vkms_config_create_plane(dev->config); + if (IS_ERR(plane->config)) { + kfree(plane); + return ERR_CAST(plane->config); + } + + config_group_init_type_name(&plane->group, name, &plane_item_type); + } + + return &plane->group; +} + +static struct configfs_group_operations planes_group_operations =3D { + .make_group =3D &make_plane_group, +}; + +static const struct config_item_type plane_group_type =3D { + .ct_group_ops =3D &planes_group_operations, + .ct_owner =3D THIS_MODULE, +}; + static ssize_t device_enabled_show(struct config_item *item, char *page) { struct vkms_configfs_device *dev; @@ -128,6 +212,10 @@ static struct config_group *make_device_group(struct c= onfig_group *group, config_group_init_type_name(&dev->group, name, &device_item_type); mutex_init(&dev->lock); =20 + config_group_init_type_name(&dev->planes_group, "planes", + &plane_group_type); + configfs_add_default_group(&dev->planes_group, &dev->group); + return &dev->group; } =20 --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A53412264B9 for ; Thu, 16 Oct 2025 17:56:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637410; cv=none; b=EXWIyx4wJ5oT6A9/WLI64yEGz9iQoOy/WWa6DtZJ7EqKRNdqMNY9Lh0auWNShtmFgwCaI92k1mCoTeQD0vYjXAIL83lP9agSs90v6zN6xM8UALz48PtPP8xOaNC7Jw8vM4rL/+wBrsJ7SqYOvr++kEw1cgT4ouVLhusIgRU+VNk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637410; c=relaxed/simple; bh=tZb8+vJV45HIMONXYRpcUEhUUE6PySnKCieyjsCUCls=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kt4aSdDmv4QQ+qyMQpHUVbtZlMFNjbQcbhCuJ8Wn94J4iZrF6GAtmelHkZsRw7Ncf63HUIMkQCS2d1uCNBuA/T5kZZnx+s/txj9wn6/nqEwZEAOKBoGa6r0WgBSZnSqOothBdt/EN5vbbvUiBzxQTPUoIsnI+lvwSVTpUHLmg14= 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=DJRJcG0A; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DJRJcG0A" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-47103b6058fso7694365e9.1 for ; Thu, 16 Oct 2025 10:56:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637407; x=1761242207; 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=Cs5dM47sF/Y4bgsvhg9twiO9ZwX955LLlWI9saGGMjg=; b=DJRJcG0A4iP0DNkMftEwJDxj6T4qsYbW3PV0VRFr4NodIx9KXOZvPlSOxYweUk0Byw OCMI21GlOWA3zWYDZ9T0Eia1YttLmAPuWATmrQTz7iKWnVBCcyODpmPK/52F1pXfTAyk O0tXpDbObnEcZrI/NCij38VWlERL6BO/lD2N4FDCjvch4P43c1yGJIYNxdNxwLKHOosA 9LrlZauVDZ7QIH4nuwgjYGWnz762RkBnPY5KEAlKG8hZXWBY1xIOr3dqNNsC3AuLFPaz 8wgm0dhNN5bFkpZwB+rPTL9FHHD1KyTSKIJOdwwVIR+rQ7qvW6XyF8mlK6CRHPeIIzrT s7Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637407; x=1761242207; 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=Cs5dM47sF/Y4bgsvhg9twiO9ZwX955LLlWI9saGGMjg=; b=I55hzq9NrN+iYDYxcXLcqN0RrLrwgUS7ZOBjNXG9Xv/t+EPjdT+xGEuVqZyPHRl8kq AE8CvYiYqKhTtmIT1H0WOVu5M6ei8sDpdWFnij/RCNM4GDvx2jw5tlnR1F1TFPkjXIz2 2cDX0OT8YJ+uDaPxsMwR+jcAOsoQY+hsMmfQYQFr9SXA7kOMLCmi9O07xEkI5WU7/v9e qC4IXfTjgXLB1/aRo8O+9JMUmLj2sdU8OTSbxl6F9pVuVJ/XZ8eiikQaCuoLoavU/G4w xf/F4IGhMEpyqlT8omNNkUNxjf29rvG3BD77kK78Lc3yBwSsO1RL3PpQ4Q0GLPZ7D5Qf XKiA== X-Forwarded-Encrypted: i=1; AJvYcCVUnGjHQasHqDGmGCIaAIesFSNu43doorEAByDcKKqhIb7vbRcLoCAgA3r8tbJX+8MLsc+SUhEn1STwN9Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yz2GyIXHi7ku4LSaXwlWB4ctcJgsOn7Us4uTBAgANCEsS8LjeMb iAmG68u3wvG3garzIkH5n9B6id1mOprGWWVcetg412qAFUeG3+HdhOnO X-Gm-Gg: ASbGnctJq3YsdNfiuPKaI7LKWxYqLFCYVuWF/ZNtnSO/7YKnOi5sz70DdeFylArNmIx iHUqOK3PxShnIjp6RH8FK99rPneAN7gDKKBIxdRL+nTsvlACZeSSWl4i0pV5LZgw1a8degFZNKZ FJnIA6yKIkQKRZIJhJ5xd0NSWOmu7OUUWlXfch0c9Icmzpa/4GAN0y/SVsrFtTbhLVJSnxue2H6 JVmS2DBoq+oZBP4TzKp+vUfqaRivqWpSBuIwQqIHN+TN1hY78HSiRDwOaRi8dL1MyQb0IJN/jM8 0aDqgDinJ7CDoZNYrJpksKHsGuYL+QHl+QUS4Ks4VM63W6mSe870ZKu9xMmkxBOf14rdIj4/ulD kyPMOyhFwqhuo35Ec/oywtf3FcDdCCgOk3lVBiFS8I2adejkVp/BBv1+2Yl3+g5yw0YT/gfBSB2 XXY4cy6Vbbpg== X-Google-Smtp-Source: AGHT+IEj/8hmflX2zRse95tmGyeuygqLOq3b34S1Vq2F8xYfl/ZVNLq203bC8jvMr2KsaoiTtGRtvg== X-Received: by 2002:a05:600c:548c:b0:45d:5c71:769d with SMTP id 5b1f17b1804b1-4711726289cmr10623405e9.8.1760637406877; Thu, 16 Oct 2025 10:56:46 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:46 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , Harry Wentland , Luca Ceresoli , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v7 04/16] drm/vkms: Allow to configure the plane type via configfs Date: Thu, 16 Oct 2025 19:56:06 +0200 Message-ID: <20251016175618.10051-5-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Louis Chauvet When a plane is created, add a `type` file to allow to set the type: - 0 overlay - 1 primary - 2 cursor Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 5 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 46 ++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index c0c892e4e27c..dd880ce6811c 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -84,6 +84,11 @@ Start by creating one or more planes:: =20 sudo mkdir /config/vkms/my-vkms/planes/plane0 =20 +Planes have 1 configurable attribute: + +- type: Plane type: 0 overlay, 1 primary, 2 cursor (same values as those + exposed by the "type" property of a plane) + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index a7c705e00e4c..398755127759 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -55,6 +55,51 @@ struct vkms_configfs_plane { #define plane_item_to_vkms_configfs_plane(item) \ container_of(to_config_group((item)), struct vkms_configfs_plane, group) =20 +static ssize_t plane_type_show(struct config_item *item, char *page) +{ + struct vkms_configfs_plane *plane; + enum drm_plane_type type; + + plane =3D plane_item_to_vkms_configfs_plane(item); + + scoped_guard(mutex, &plane->dev->lock) + type =3D vkms_config_plane_get_type(plane->config); + + return sprintf(page, "%u", type); +} + +static ssize_t plane_type_store(struct config_item *item, const char *page, + size_t count) +{ + struct vkms_configfs_plane *plane; + enum drm_plane_type type; + + plane =3D plane_item_to_vkms_configfs_plane(item); + + if (kstrtouint(page, 10, &type)) + return -EINVAL; + + if (type !=3D DRM_PLANE_TYPE_OVERLAY && type !=3D DRM_PLANE_TYPE_PRIMARY = && + type !=3D DRM_PLANE_TYPE_CURSOR) + return -EINVAL; + + scoped_guard(mutex, &plane->dev->lock) { + if (plane->dev->enabled) + return -EBUSY; + + vkms_config_plane_set_type(plane->config, type); + } + + return (ssize_t)count; +} + +CONFIGFS_ATTR(plane_, type); + +static struct configfs_attribute *plane_item_attrs[] =3D { + &plane_attr_type, + NULL, +}; + static void plane_release(struct config_item *item) { struct vkms_configfs_plane *plane; @@ -74,6 +119,7 @@ static struct configfs_item_operations plane_item_operat= ions =3D { }; =20 static const struct config_item_type plane_item_type =3D { + .ct_attrs =3D plane_item_attrs, .ct_item_ops =3D &plane_item_operations, .ct_owner =3D THIS_MODULE, }; --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 18F3E23184A for ; Thu, 16 Oct 2025 17:56:49 +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=1760637412; cv=none; b=Z4D347OMkYSIAtQ4tmY16S27EjHfJgvuhlcHJ2XZnsbISCeauvjZpwhJ3J6VHpYHSAZDQnJQRdE8vQ23dQUpiJitPpknd9HSPvr2eiAm0xfrB5TcBHO8ZX1ykjI2PbYLVQHhADD3L7bGBZYdncALOoUrtMnf1jvJBGvKFuRlHWc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637412; c=relaxed/simple; bh=J1Nzzoca4/yyZZCTsha/JR1pQ1mNUiLyRWjyrF7sQF8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=aHX3V+uRFlV63EskP9f6IxFxVrnFZoleIK2zxxAASQRp5eBnqVJeYCUQ8zkJx60JUvEyZV07F5DTCRvW7MJOrNerpUZKtdaIeZ1bmRYNvxql+eg5BmgLHoHavuss91Nu8MJB2yV+v+op8k3oYlFse8nsb0S7/92rjWiA4bOXs+M= 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=ePwwUShp; 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="ePwwUShp" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-4060b4b1200so930576f8f.3 for ; Thu, 16 Oct 2025 10:56:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637408; x=1761242208; 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=gre0hLy87h83qf778dekTlWQHTtBdhwlJ9xEAc8W+IY=; b=ePwwUShplA1LgeZRZzmO3gewV82chMvdrucpRDufLBknYnMPdHBbBNxwURO/eaHS+P ARx6nuUU0b1cse74pKP30+FzADtsE0gGQ0UzReumapQB/g6QUE8hJt+/WtTlp7xBylx8 nkQcq58n4S/LRtrp9GhYhhfJdDugg3RwydnpIUXES0QRb/q0oMnV0fiOugkEOfozhQXT rEtCU7ylwHi80VGB/XBIEgWW4n03Rg8dRLcj92OvgfUJVzRe4JJcv+4cdSheUYXevhng PhFYMUEoTOvdf/mzGLJ1q8eFKSlN941LVpdVCA7yPj+UJSBjG5Y13LUdLP3R81OMovlh 6wFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637408; x=1761242208; 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=gre0hLy87h83qf778dekTlWQHTtBdhwlJ9xEAc8W+IY=; b=Pr//mVWNtFsy1Sl4OUPtPPc19wBz0ZXxfAryvxbXO5c+AwMR49sbjs8w94u+F4Gb1P E8uqlTH5RWrOFE7ceFjRV409M8LROezzGFA/KgEi5cw+lA7x0fwAggiI7LnbWdcfznbl 5x2cDFG5Iaq7W+utoFd0Lpqx4QqC3JcwC7QQzwOMC6iMMs/ZGBBNP4wWZ7yHlW++sOZD uXS+S3PYrn2AGvEOrDyrXTEXpkpfTkX1d9gIZ2t3XfWp3c3OSrUfYi5CqsgxXqWGxPk5 R6EH2PZJF9vl8Gg2shIPJmSM9Vny6qd5Eb+R21EUGcH6bIcwUzevwQdhGsCzoi8CFL0X SujQ== X-Forwarded-Encrypted: i=1; AJvYcCXxyacZOiM4hQalw8gZVjcwkZPF91AEkiRRg4C087Bb6YbXtXODIflofS2jfr1UFOh1vyaJ6wYWYjclWvY=@vger.kernel.org X-Gm-Message-State: AOJu0Yx51a/Jdoee/vRCJTG49/sBb/tzjuDpj/mGgPVjByKPREs+s8vH r8x17aYdwXhdSKvJ7BlU3sFgUBFmHIdOSd4y8mAZJ8lOoMF0CAwH5nsT X-Gm-Gg: ASbGncuJ36vOQVrUEfzta9aF+SJ03CWD0Cv0hCba+lis1Rwb4lFf9umFNLyK3ZdN/7e u2z+7tVSNYYfmyc279voYGtN5gh8AHnG85OBRAbvF45JrJrdV3zgC6jETOj+yPK/ax0Jp5gsf5/ vXQB3vh+CZ6mGfcui21BjFFiUY/+sCaeEV5VTpr2avPmJohKfZvadKJ1pADydPQOE9lu9HG3Cqb BOOn9Tx4kPde69swlQpgsTIwRKxyG9Wr+th8i97XNstZlZY0cCtTYzB/3jQT+ml4BmL+n8qcx+Q m8ErzOWCrrQ9266czwJhtz4t0BFOOhtVXqBS/wGWFQTTiB1rZny/0PSS5Y94ZzOu3LKD1um8Zxz xUp5ys5k+4nEQUMmR5UlsqgdRNo1c+UXZ4+ha02I/B452emzS8P33Z4L136JuAP93B63iPwqXFk o= X-Google-Smtp-Source: AGHT+IEMrIcCCPx1egEJk/xcCf7qUPRTvLrGolE5Y+y/fcEGOEgUDziNz/gt1rNFE8EOQYTWRi0o5A== X-Received: by 2002:a5d:5d13:0:b0:427:45f:ee1a with SMTP id ffacd0b85a97d-42704d7b5ddmr804030f8f.25.1760637408141; Thu, 16 Oct 2025 10:56:48 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:47 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , Harry Wentland , Luca Ceresoli , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v7 05/16] drm/vkms: Allow to configure multiple CRTCs via configfs Date: Thu, 16 Oct 2025 19:56:07 +0200 Message-ID: <20251016175618.10051-6-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Louis Chauvet Create a default subgroup at /config/vkms/crtcs to allow to create as many CRTCs as required. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 85 ++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index dd880ce6811c..7396447b5e58 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -74,6 +74,7 @@ By default, the instance is disabled:: And directories are created for each configurable item of the display pipe= line:: =20 tree /config/vkms/my-vkms + =E2=94=9C=E2=94=80=E2=94=80 crtcs =E2=94=9C=E2=94=80=E2=94=80 enabled =E2=94=94=E2=94=80=E2=94=80 planes =20 @@ -89,6 +90,10 @@ Planes have 1 configurable attribute: - type: Plane type: 0 overlay, 1 primary, 2 cursor (same values as those exposed by the "type" property of a plane) =20 +Continue by creating one or more CRTCs:: + + sudo mkdir /config/vkms/my-vkms/crtcs/crtc0 + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -100,6 +105,7 @@ Finally, you can remove the VKMS instance disabling it:: And removing the top level directory and its subdirectories:: =20 sudo rmdir /config/vkms/my-vkms/planes/* + sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 398755127759..62a82366791d 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -17,6 +17,7 @@ static bool is_configfs_registered; * @group: Top level configuration group that represents a VKMS device. * Initialized when a new directory is created under "/config/vkms/" * @planes_group: Default subgroup of @group at "/config/vkms/planes" + * @crtcs_group: Default subgroup of @group at "/config/vkms/crtcs" * @lock: Lock used to project concurrent access to the configuration attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -25,6 +26,7 @@ static bool is_configfs_registered; struct vkms_configfs_device { struct config_group group; struct config_group planes_group; + struct config_group crtcs_group; =20 struct mutex lock; struct vkms_config *config; @@ -45,6 +47,20 @@ struct vkms_configfs_plane { struct vkms_config_plane *config; }; =20 +/** + * struct vkms_configfs_crtc - Configfs representation of a CRTC + * + * @group: Top level configuration group that represents a CRTC. + * Initialized when a new directory is created under "/config/vkms/crtcs" + * @dev: The vkms_configfs_device this CRTC belongs to + * @config: Configuration of the VKMS CRTC + */ +struct vkms_configfs_crtc { + struct config_group group; + struct vkms_configfs_device *dev; + struct vkms_config_crtc *config; +}; + #define device_item_to_vkms_configfs_device(item) \ container_of(to_config_group((item)), struct vkms_configfs_device, \ group) @@ -55,6 +71,71 @@ struct vkms_configfs_plane { #define plane_item_to_vkms_configfs_plane(item) \ container_of(to_config_group((item)), struct vkms_configfs_plane, group) =20 +#define crtc_item_to_vkms_configfs_crtc(item) \ + container_of(to_config_group((item)), struct vkms_configfs_crtc, group) + +static void crtc_release(struct config_item *item) +{ + struct vkms_configfs_crtc *crtc; + struct mutex *lock; + + crtc =3D crtc_item_to_vkms_configfs_crtc(item); + lock =3D &crtc->dev->lock; + + scoped_guard(mutex, lock) { + vkms_config_destroy_crtc(crtc->dev->config, crtc->config); + kfree(crtc); + } +} + +static struct configfs_item_operations crtc_item_operations =3D { + .release =3D &crtc_release, +}; + +static const struct config_item_type crtc_item_type =3D { + .ct_item_ops =3D &crtc_item_operations, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_group *make_crtc_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_crtc *crtc; + + dev =3D child_group_to_vkms_configfs_device(group); + + scoped_guard(mutex, &dev->lock) { + if (dev->enabled) + return ERR_PTR(-EBUSY); + + crtc =3D kzalloc(sizeof(*crtc), GFP_KERNEL); + if (!crtc) + return ERR_PTR(-ENOMEM); + + crtc->dev =3D dev; + + crtc->config =3D vkms_config_create_crtc(dev->config); + if (IS_ERR(crtc->config)) { + kfree(crtc); + return ERR_CAST(crtc->config); + } + + config_group_init_type_name(&crtc->group, name, &crtc_item_type); + } + + return &crtc->group; +} + +static struct configfs_group_operations crtcs_group_operations =3D { + .make_group =3D &make_crtc_group, +}; + +static const struct config_item_type crtc_group_type =3D { + .ct_group_ops =3D &crtcs_group_operations, + .ct_owner =3D THIS_MODULE, +}; + static ssize_t plane_type_show(struct config_item *item, char *page) { struct vkms_configfs_plane *plane; @@ -262,6 +343,10 @@ static struct config_group *make_device_group(struct c= onfig_group *group, &plane_group_type); configfs_add_default_group(&dev->planes_group, &dev->group); =20 + config_group_init_type_name(&dev->crtcs_group, "crtcs", + &crtc_group_type); + configfs_add_default_group(&dev->crtcs_group, &dev->group); + return &dev->group; } =20 --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 153A8235057 for ; Thu, 16 Oct 2025 17:56:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637413; cv=none; b=YSZ0rI4qZgPb7n/5Z/wz4Fe42b9HW3BwTGU1pyCKKhGmBfLJKXElL/vsevRYFcKQM6IxomabqQz7tPSrgMe4/LIxg6HFUxhQ+qWIiGgcQI5kPh+XgC4o0cWaQ80QDqP33gsXUTt1253txfVVQormzU9/dSk91RcDU+a91L1gxjM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637413; c=relaxed/simple; bh=SY2foPLIcYHR71hn99e9tqmbB4iH/zgC4NTb6fg7Cxs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=k5OrQ4AzS9t0awXWoHYz7TKgN+GNQIGRGYcr4UpppeRGF7RlJ1uZoGhC5kJuPRToXjoO2sWG0vnaHVbqDpU3hA74NvSnw/Kl2XjTCs+y01JN+hHH6jPY2bspvMehLNqa6F9/m1VnbVeR3x7GGo7eLOUz7WOuxtpqFGcoXpPlHNA= 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=CozlZmTu; 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="CozlZmTu" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-46b303f755aso11291285e9.1 for ; Thu, 16 Oct 2025 10:56:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637409; x=1761242209; 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=xtjodahfnBWK2idIHCN4z64kayvb9QbUktg8KpiV9BY=; b=CozlZmTuHPbp4gw418USOocHptGBYIp/qyYZlpNaWNFKvw/eHTFOkGZyGl8IO8QHsC 0EN6aHVe1plBxunMyV5omz7KzpiXxhDnXFQqCxRIP+0Gw02+/rAM9AUnfr6NEqeJTilD ydJR+kzvU1RcAcQpERIn0VJ22SgKa+dNpqpfT78EU4gyK2UyOvFm3UPVaWuitKksf/+g QEJZLL5jHPJmonuuKpK9O0MwvbNq5+7xdq1wIoLCx6ghbw7Jd/+Axn1P2W1nqTSDSGX2 T9dfOxBLersKD5RAAf9P6g6yv7FiNbOhPn5UXnAx7PiENBuqfA2EtsKScMhybSFUEfN4 WPOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637409; x=1761242209; 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=xtjodahfnBWK2idIHCN4z64kayvb9QbUktg8KpiV9BY=; b=eOlfQBdN8BU7jPsnJA0IUbWfKLPYrS3zLlwK0qWNiKf02EUG5etKqiSOuo9Wq9T/hl 3xIxYc+aKNkk7AkL9YJTDSU9w3viBJ1vCQKhY6zAxA0034bJwXQovHPAd5UNKgzVl0Eb RacO5l/wboA3VPKIXkuNb2G9Ol77gPvJRs7CU2iKyLciDoGQ5oNZEVwOINB1RnvNvl3I t/ZSdcCUBjyDWwgxVKvPERcMGPzakf+ZvqI010c3NJI1hLOVb5l9A0bCUtbYfEihhoz6 SbBfp0REqdf4lYLIxuH8RwaWex4JGwJLbmlqQHBuf96QXb9AOUuPm1IlOxN7t6SfJ4dk oGHw== X-Forwarded-Encrypted: i=1; AJvYcCXVLSiTKJK6fz+UIgwXvXsvs/FNwyprQLZmrpT0H9JWj+EzNeqLvhHekU+OfB7Ouu82grvrM3hqOEaOKIo=@vger.kernel.org X-Gm-Message-State: AOJu0YxOnaM423xVlNXgyOojzPcFPyC8yBMLLpi0Pb7Gv8eaezr9ovib K+f/hxxaOVaiLHdG2WIDlHGatqJm4POgJpJ0C959lKiGJC08rPMbbQBN X-Gm-Gg: ASbGncu8mh1pkwm91MhwPydGv66CarJgKWioo4RSyI7LNuGFNoJs1fDgRAKASefPEtL lDZgpiZBm8lmajxOuiucoi79uDAm9yXONoZNucYbX/W2CYHv6x8sznDcBqY/aAtm7IfpCOG2EEm BaXqShPRGOtW0c36X89wzLxp8kbaTOb+YG9f5mYnJJW7yehj2KhT3/nq2sEnjGSKv57XVUNkFQb 8DxVfRT5XVYCXP5PrkUkup+/a7ekChJNURcTXgYQxK/agy5f9zqktF2DCKueQf+w/beakAvJW4f F0hkGwO1rb/1DWFC1sCxOXDW0XWBaxMUyhHE+THWC8qrsvqSDn0d8xYZxjLWsiGSU5x+Ntef+zT BpZI3IRyIpfUpYr9xkqhStPT+5r9IroSraPua3ucu4b93Ki/bpC9g8A28/ksL+TajTumxDdRyoC Am2OWZWLdlww== X-Google-Smtp-Source: AGHT+IFxXmdNOlcVtdvS4hUg321uETDeeRq45sSYgBzQdlmRPckXfQEInsx2sGlszYksJDQMbCl6vQ== X-Received: by 2002:a05:600c:3b0a:b0:46e:4499:ba30 with SMTP id 5b1f17b1804b1-47117917a33mr7518345e9.30.1760637409294; Thu, 16 Oct 2025 10:56:49 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:48 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , Harry Wentland , Luca Ceresoli , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v7 06/16] drm/vkms: Allow to configure CRTC writeback support via configfs Date: Thu, 16 Oct 2025 19:56:08 +0200 Message-ID: <20251016175618.10051-7-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Louis Chauvet When a CRTC is created, add a `writeback` file to allow to enable or disable writeback connector support Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 4 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 42 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 7396447b5e58..9f76918bb1d1 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -94,6 +94,10 @@ Continue by creating one or more CRTCs:: =20 sudo mkdir /config/vkms/my-vkms/crtcs/crtc0 =20 +CRTCs have 1 configurable attribute: + +- writeback: Enable or disable writeback connector support by writing 1 or= 0 + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 62a82366791d..e9f445043268 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -74,6 +74,47 @@ struct vkms_configfs_crtc { #define crtc_item_to_vkms_configfs_crtc(item) \ container_of(to_config_group((item)), struct vkms_configfs_crtc, group) =20 +static ssize_t crtc_writeback_show(struct config_item *item, char *page) +{ + struct vkms_configfs_crtc *crtc; + bool writeback; + + crtc =3D crtc_item_to_vkms_configfs_crtc(item); + + scoped_guard(mutex, &crtc->dev->lock) + writeback =3D vkms_config_crtc_get_writeback(crtc->config); + + return sprintf(page, "%d\n", writeback); +} + +static ssize_t crtc_writeback_store(struct config_item *item, const char *= page, + size_t count) +{ + struct vkms_configfs_crtc *crtc; + bool writeback; + + crtc =3D crtc_item_to_vkms_configfs_crtc(item); + + if (kstrtobool(page, &writeback)) + return -EINVAL; + + scoped_guard(mutex, &crtc->dev->lock) { + if (crtc->dev->enabled) + return -EBUSY; + + vkms_config_crtc_set_writeback(crtc->config, writeback); + } + + return (ssize_t)count; +} + +CONFIGFS_ATTR(crtc_, writeback); + +static struct configfs_attribute *crtc_item_attrs[] =3D { + &crtc_attr_writeback, + NULL, +}; + static void crtc_release(struct config_item *item) { struct vkms_configfs_crtc *crtc; @@ -93,6 +134,7 @@ static struct configfs_item_operations crtc_item_operati= ons =3D { }; =20 static const struct config_item_type crtc_item_type =3D { + .ct_attrs =3D crtc_item_attrs, .ct_item_ops =3D &crtc_item_operations, .ct_owner =3D THIS_MODULE, }; --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6F10D23EAB5 for ; Thu, 16 Oct 2025 17:56:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637414; cv=none; b=Ioo0azv7cGsEPyS/XQadifaKYngo1YpjrxHmpqcOShWMsnmNeC4308X6XDIzIwg0IiinMeMM10tE8lQFr+UFGR0c/a0BSrTRrHRwOGGC1zAdU1bFUPLBmxJkPuFg7hQg1hZU6fUZFEMzyQOreKnNACjfDkKKiuGcuiHZENx56BU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637414; c=relaxed/simple; bh=akNoVbp6l96BADli98DtbjqTcrKIsVMIoX9VpPaDVsw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tWBfsJTpO9DtclMXwm9VyPGkKhY3Qh1Jn5dVbsg5+ZZrtXT6o+7yh7tL0Hpt8XbogF8LPxT+WS2wewaExqAfs5hyXf9uSAfndTZ79FbpWwDZ5KBrf71tNbT7XPfHZdF44FbBJthvxTfMFjbJTIj4UChZ6bgq4it3CHxyfxpKOmU= 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=OKiLTLAf; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OKiLTLAf" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-47117e75258so1319235e9.2 for ; Thu, 16 Oct 2025 10:56:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637410; x=1761242210; 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=/Iw4dctPK4SDmV/YtpTKXRG3Xw3gr179LpM994cXNRU=; b=OKiLTLAfMDSe1nWxYTxPZCOkx60owNOBJbSAkpdFg8p2TB2OW82KaGGEgKqOcA6t4t R9qs9LihhnvLdaHfBKJXU8ymfScKCTnJYIsd0QJy+s3l16Uem1EFn2/6gZ4eUXB7j6Pz 2uYb/dkiyi2aFEMkOLXl7OiYISUS8HSTeavSXSc4djaKt8mI7ojpi3Pu8NCLIJsXZ2yU 4i8h7sdK1IH0xx525jsKMqgROsDcj1jjdkzxTE4ph1UCLdL1nQY0jQt2dL1pDzS5vndK O4vk7aC08d5lvkL8Hry182GYeBa6byfZ+WqjUVk0YZu13dJ1YA1oMymGYiJvDQpFJYdT nWiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637410; x=1761242210; 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=/Iw4dctPK4SDmV/YtpTKXRG3Xw3gr179LpM994cXNRU=; b=i2Ndw3hrMqEpY4y7zfHktqsQ1RiYJfQ3Rh4orJ/22sw8fYqs1lze+GqmNSj498Nw8h eztIQfDs5V5Hexrzh1p9F6xoLEim3Yh7UEZ8u2qA0zcYbVcfU5ffQ7S/7e9Tb0lfortJ OTuEkcjOjyB8YA5oU5meEAn4bWWHUcAGvGsfjvpx0dMvoVyoaFA1art4EWBBqUMvPh4H 8rx/7z2q7rYG2J0ddWl713lXT/HhDB+QCULCZppiFhAq+Qfzx7OX76fwUj5FCdMJRlej 4d0aa60I8S2IrjobiM2mZsBfxldeFKz9/X8gcTWQBENOj9rtl6qf1q9A17s33BnDBd2o +41A== X-Forwarded-Encrypted: i=1; AJvYcCXX7fbbubUGgrzBxfCvV2UQS+7ouhFe4+udEnzBEGt/I5/x/jtbP0P4qw50w/bNUkFASNgsrkL1R1K0UuE=@vger.kernel.org X-Gm-Message-State: AOJu0YxcW7GZUHZgEkKoL6OgU+T/vTizS390yOAeJDIlubmRlA7nxXgZ nnxr8lRnxt9Q2hg+zDRtuve6mq8u1fep3nTyiApW+B+pF0Ud3Wy4avf7 X-Gm-Gg: ASbGnctEDGXT56Uid4wn3PPvmj2Gh9pqok7p1gMsGhwadk4isZ9bGybUBu6sZ6I1Umq uIb7fgcehQx0eNHvbwHcnbkuRpICcSgmtTh+ZxE5E6OBH7dONW/PYv1/dwRrxdcYEHs14UvHO0e ppp6Cn/Ecl/2b89SjpBJ7cy7ULIURjWsvcfA/0Dj6DrZcmj9PW0rPpadp49qhr0nnWnqFtsJ/eC C8iri6uRw3nzhpkFOTBoDZRWkABKGKZJnB3npp4CiRdO9bZ1dXUTtF8oAH6hKp38hBwjSbjmN3X LY8Xk0eyM/TrrgfMazUOnYx+7D4C4ZdBKFbmAjl1WISe7fcXz8KB0aMGlVtBz/AAi662iz2hvtx HbuPGm9aOfYiRxJlwZCCh/pPc3c+fqxpRtVTgKBuNlk4cnWn5sJaMchl5n36UVS5fC/EJK/VSSx vUdmdzDt4Y3Q== X-Google-Smtp-Source: AGHT+IFbOz3W2+G2OoxdcsQZgc8xrH4wObe7H+Oo9COB4yc/aLa7cjWM7GvW3Eu2iI/PG6oUer5LMw== X-Received: by 2002:a05:600c:5287:b0:471:1337:7220 with SMTP id 5b1f17b1804b1-47117874810mr6737745e9.3.1760637410421; Thu, 16 Oct 2025 10:56:50 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:50 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , Harry Wentland , Luca Ceresoli , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v7 07/16] drm/vkms: Allow to attach planes and CRTCs via configfs Date: Thu, 16 Oct 2025 19:56:09 +0200 Message-ID: <20251016175618.10051-8-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Louis Chauvet Create a default subgroup at /config/vkms/planes/plane/possible_crtcs that will contain symbolic links to the possible CRTCs for the plane. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 9 +++++ drivers/gpu/drm/vkms/vkms_configfs.c | 58 ++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 9f76918bb1d1..c79fca3d3a11 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -98,6 +98,14 @@ CRTCs have 1 configurable attribute: =20 - writeback: Enable or disable writeback connector support by writing 1 or= 0 =20 +To finish the configuration, link the different pipeline items:: + + sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs + +Since at least one primary plane is required, make sure to set the right t= ype:: + + echo "1" | sudo tee /config/vkms/my-vkms/planes/plane0/type + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -108,6 +116,7 @@ Finally, you can remove the VKMS instance disabling it:: =20 And removing the top level directory and its subdirectories:: =20 + sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index e9f445043268..2cf97c2b6203 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -38,11 +38,13 @@ struct vkms_configfs_device { * * @group: Top level configuration group that represents a plane. * Initialized when a new directory is created under "/config/vkms/planes" + * @possible_crtcs_group: Default subgroup of @group at "plane/possible_cr= tcs" * @dev: The vkms_configfs_device this plane belongs to * @config: Configuration of the VKMS plane */ struct vkms_configfs_plane { struct config_group group; + struct config_group possible_crtcs_group; struct vkms_configfs_device *dev; struct vkms_config_plane *config; }; @@ -71,6 +73,10 @@ struct vkms_configfs_crtc { #define plane_item_to_vkms_configfs_plane(item) \ container_of(to_config_group((item)), struct vkms_configfs_plane, group) =20 +#define plane_possible_crtcs_item_to_vkms_configfs_plane(item) \ + container_of(to_config_group((item)), struct vkms_configfs_plane, \ + possible_crtcs_group) + #define crtc_item_to_vkms_configfs_crtc(item) \ container_of(to_config_group((item)), struct vkms_configfs_crtc, group) =20 @@ -178,6 +184,52 @@ static const struct config_item_type crtc_group_type = =3D { .ct_owner =3D THIS_MODULE, }; =20 +static int plane_possible_crtcs_allow_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_plane *plane; + struct vkms_configfs_crtc *crtc; + int ret; + + if (target->ci_type !=3D &crtc_item_type) + return -EINVAL; + + plane =3D plane_possible_crtcs_item_to_vkms_configfs_plane(src); + crtc =3D crtc_item_to_vkms_configfs_crtc(target); + + scoped_guard(mutex, &plane->dev->lock) { + if (plane->dev->enabled) + return -EBUSY; + + ret =3D vkms_config_plane_attach_crtc(plane->config, crtc->config); + } + + return ret; +} + +static void plane_possible_crtcs_drop_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_plane *plane; + struct vkms_configfs_crtc *crtc; + + plane =3D plane_possible_crtcs_item_to_vkms_configfs_plane(src); + crtc =3D crtc_item_to_vkms_configfs_crtc(target); + + scoped_guard(mutex, &plane->dev->lock) + vkms_config_plane_detach_crtc(plane->config, crtc->config); +} + +static struct configfs_item_operations plane_possible_crtcs_item_operation= s =3D { + .allow_link =3D plane_possible_crtcs_allow_link, + .drop_link =3D plane_possible_crtcs_drop_link, +}; + +static const struct config_item_type plane_possible_crtcs_group_type =3D { + .ct_item_ops =3D &plane_possible_crtcs_item_operations, + .ct_owner =3D THIS_MODULE, +}; + static ssize_t plane_type_show(struct config_item *item, char *page) { struct vkms_configfs_plane *plane; @@ -272,6 +324,12 @@ static struct config_group *make_plane_group(struct co= nfig_group *group, } =20 config_group_init_type_name(&plane->group, name, &plane_item_type); + + config_group_init_type_name(&plane->possible_crtcs_group, + "possible_crtcs", + &plane_possible_crtcs_group_type); + configfs_add_default_group(&plane->possible_crtcs_group, + &plane->group); } =20 return &plane->group; --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 494A930507B for ; Thu, 16 Oct 2025 17:56:53 +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=1760637415; cv=none; b=i0NRdHu18COGdkwUjYgmNlSd3+8G2UDWxS3gAofkJQUgLZB4yqTztx18SDgtt6FNh9AD2V63maPOY69qm8MLp2gJmUCWepewpCu08gNKkKftPapazffs8FRNmf6wCpFAjezImYusE6p6D9qcQkoFPD8cWp90/EZ4n8wKdgrzNtU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637415; c=relaxed/simple; bh=1BD/vMhc5C4/KXDPH3UtYDcqVdBuQ7g4AdOmewpNI0Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=fXSxTMQUoElKNDnVgYzhuKIdSjuCIfcAi7pcucy4LTjv4Vv7e3L7PuGYkfq8GwWZa57mxoIpL1X+rQ4jrZUZoUe4UNMQYcxwFDi5Dt8rEfHzz6LiwgF6VIVarF993JFQvLBBy6MjZ9/o6X/+q10ysCA/WAMcRODyKnBd9WCiuDE= 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=T081cgN0; 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="T081cgN0" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-471131d6121so7986765e9.1 for ; Thu, 16 Oct 2025 10:56:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637412; x=1761242212; 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=bGUtCgFFoXd45FbRxgjbsSLBSJAtFLMTFGzAm8+mRmI=; b=T081cgN0DXeMjN1xqQkeX9JeW+TJyiu/IJz7tKW60kJrfuGOtP9OF8huB/Z/dhJFw1 iW1yB7CE/fewK3fPCXeY3FekT8DQfOeFbxbVmH6mM/YOcyNjtPmH7Ftkjzr72O9VduFq /WXiD8cqw7SXAPFQYIccsrNNHg0XXHsZ2oQdbYnwsolKYg5mQXf9t3v7SHGRh6FG17Kb 0l5omw+nLUj03hEx12sTc+eZL13yCLXjQCjTaFTkxPYk4Gaiyj0bnkD1bX76TcedyyZS 9L8TM65UVoEkibT+Bs+teGpE2Ny8vSIAvqudLqVdEe7VDjeCSpBpLlyI5cnEcYUk7IJ2 Iv6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637412; x=1761242212; 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=bGUtCgFFoXd45FbRxgjbsSLBSJAtFLMTFGzAm8+mRmI=; b=KrQAKwajB8/3k+j+q75b6RnJMFySySiL4oeDneD2UTe5OHof60Z+vU9jL/BozEiBkZ iqup3fc0IMGA3oTr19V7lDoUkMS7XvSSsbL9GDhtrf4UtpCK6XHTgCZgXXbua5XanGIg mfVw6QEoOr1av4FWXzCB7AhjsYvPQy5r4s/79Y5fT2xwFvuvTyjEE+akp9QyzTd41HdE mVmlNRHfJ92pxi2mbUZbya2J+D8I3Q+sGPaXDTl3+yC+i6YDGU+mvOEBVBdGqOEsJMAL 6yeX9ye0/f4fn0w83nxe55AWn1X8UD1SONBm8qNmVSU7eCcoq1hOclwXc0O87G1WVbZQ AJPA== X-Forwarded-Encrypted: i=1; AJvYcCVv1caDed/lim0+8sJuAVb1nsuDU4R0BQLkdWxcgrw7insA5ShhrnJ9maYcCXLjjn2FpvGVkQBqCBtoTc4=@vger.kernel.org X-Gm-Message-State: AOJu0Yzs2AFl+jenB4QabWdUYTh7wW58t/PfV/lCnyzoLxmgSs3kfFB6 JPP5VUCWavQopkfPdKdvMmeDA8u4NID61S0M0UpsgQI+DdKrpDZG+JOH X-Gm-Gg: ASbGnctYMTvChJDArEVDPSJHN1mn1FT208Jtp3doKt/EbtntjuGDlJMfj4IA0fR8ZFd dwcFJWhj3jF+rQeRfjU70IoBm8Zr68NVK9djuwHeMxsZn+6nIhoLIZfNHYnlP6IcB+XH5dCKWpK La8wcZ3XhIOHo7bFEKxbxDiEcbZYc5BxYVF52EeGrWxGopQn9Bkv4hs42HJlLM5Av9jm8yfaR0H juA43XIQcxAYavk5vet8ioDY5G0m6uWiXpU3tm0Fl+X9xcY8RZK4GP2Uov9RovxvFJVDrtl6ih+ Cx0woYIl2eSEMi5l5xks81/ld1ZZrIjs/85Sdh1rujlZZ2d9Js08DmoFvneuPKOHGYkm+5M2WC+ s9QgX/LvaXhdhZmB66RUdYQA50cesMILeswWwo0OjBSZij115+8UPZAPo7f5My72UM24AA5HryQ U= X-Google-Smtp-Source: AGHT+IFEhkEP2rWhFXfs1BfUbqPK66UYyDsccgDeF2I7iSGE0nEET1+OiE6yftP/lfqlaezeKSA7GA== X-Received: by 2002:a05:600c:450a:b0:46e:442c:f5e1 with SMTP id 5b1f17b1804b1-4711791cb1fmr6649095e9.35.1760637411559; Thu, 16 Oct 2025 10:56:51 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:51 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , Harry Wentland , Luca Ceresoli , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v7 08/16] drm/vkms: Allow to configure multiple encoders via configfs Date: Thu, 16 Oct 2025 19:56:10 +0200 Message-ID: <20251016175618.10051-9-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Louis Chauvet Create a default subgroup at /config/vkms/encoders to allow to create as many encoders as required. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 87 ++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index c79fca3d3a11..622fbfa12a84 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -76,6 +76,7 @@ And directories are created for each configurable item of= the display pipeline:: tree /config/vkms/my-vkms =E2=94=9C=E2=94=80=E2=94=80 crtcs =E2=94=9C=E2=94=80=E2=94=80 enabled + =E2=94=9C=E2=94=80=E2=94=80 encoders =E2=94=94=E2=94=80=E2=94=80 planes =20 To add items to the display pipeline, create one or more directories under= the @@ -98,6 +99,10 @@ CRTCs have 1 configurable attribute: =20 - writeback: Enable or disable writeback connector support by writing 1 or= 0 =20 +Next, create one or more encoders:: + + sudo mkdir /config/vkms/my-vkms/encoders/encoder0 + To finish the configuration, link the different pipeline items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs @@ -119,6 +124,7 @@ And removing the top level directory and its subdirecto= ries:: sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* + sudo rmdir /config/vkms/my-vkms/encoders/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 2cf97c2b6203..0df86e63570a 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -18,6 +18,7 @@ static bool is_configfs_registered; * Initialized when a new directory is created under "/config/vkms/" * @planes_group: Default subgroup of @group at "/config/vkms/planes" * @crtcs_group: Default subgroup of @group at "/config/vkms/crtcs" + * @encoders_group: Default subgroup of @group at "/config/vkms/encoders" * @lock: Lock used to project concurrent access to the configuration attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -27,6 +28,7 @@ struct vkms_configfs_device { struct config_group group; struct config_group planes_group; struct config_group crtcs_group; + struct config_group encoders_group; =20 struct mutex lock; struct vkms_config *config; @@ -63,6 +65,20 @@ struct vkms_configfs_crtc { struct vkms_config_crtc *config; }; =20 +/** + * struct vkms_configfs_encoder - Configfs representation of a encoder + * + * @group: Top level configuration group that represents a encoder. + * Initialized when a new directory is created under "/config/vkms/encoder= s" + * @dev: The vkms_configfs_device this encoder belongs to + * @config: Configuration of the VKMS encoder + */ +struct vkms_configfs_encoder { + struct config_group group; + struct vkms_configfs_device *dev; + struct vkms_config_encoder *config; +}; + #define device_item_to_vkms_configfs_device(item) \ container_of(to_config_group((item)), struct vkms_configfs_device, \ group) @@ -80,6 +96,10 @@ struct vkms_configfs_crtc { #define crtc_item_to_vkms_configfs_crtc(item) \ container_of(to_config_group((item)), struct vkms_configfs_crtc, group) =20 +#define encoder_item_to_vkms_configfs_encoder(item) \ + container_of(to_config_group((item)), struct vkms_configfs_encoder, \ + group) + static ssize_t crtc_writeback_show(struct config_item *item, char *page) { struct vkms_configfs_crtc *crtc; @@ -344,6 +364,69 @@ static const struct config_item_type plane_group_type = =3D { .ct_owner =3D THIS_MODULE, }; =20 +static void encoder_release(struct config_item *item) +{ + struct vkms_configfs_encoder *encoder; + struct mutex *lock; + + encoder =3D encoder_item_to_vkms_configfs_encoder(item); + lock =3D &encoder->dev->lock; + + scoped_guard(mutex, lock) { + vkms_config_destroy_encoder(encoder->dev->config, encoder->config); + kfree(encoder); + } +} + +static struct configfs_item_operations encoder_item_operations =3D { + .release =3D &encoder_release, +}; + +static const struct config_item_type encoder_item_type =3D { + .ct_item_ops =3D &encoder_item_operations, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_group *make_encoder_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_encoder *encoder; + + dev =3D child_group_to_vkms_configfs_device(group); + + scoped_guard(mutex, &dev->lock) { + if (dev->enabled) + return ERR_PTR(-EBUSY); + + encoder =3D kzalloc(sizeof(*encoder), GFP_KERNEL); + if (!encoder) + return ERR_PTR(-ENOMEM); + + encoder->dev =3D dev; + + encoder->config =3D vkms_config_create_encoder(dev->config); + if (IS_ERR(encoder->config)) { + kfree(encoder); + return ERR_CAST(encoder->config); + } + + config_group_init_type_name(&encoder->group, name, + &encoder_item_type); + } + + return &encoder->group; +} + +static struct configfs_group_operations encoders_group_operations =3D { + .make_group =3D &make_encoder_group, +}; + +static const struct config_item_type encoder_group_type =3D { + .ct_group_ops =3D &encoders_group_operations, + .ct_owner =3D THIS_MODULE, +}; + static ssize_t device_enabled_show(struct config_item *item, char *page) { struct vkms_configfs_device *dev; @@ -447,6 +530,10 @@ static struct config_group *make_device_group(struct c= onfig_group *group, &crtc_group_type); configfs_add_default_group(&dev->crtcs_group, &dev->group); =20 + config_group_init_type_name(&dev->encoders_group, "encoders", + &encoder_group_type); + configfs_add_default_group(&dev->encoders_group, &dev->group); + return &dev->group; } =20 --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 99846328B48 for ; Thu, 16 Oct 2025 17:56:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637416; cv=none; b=cCvf1iz2eorK6zjauglEjglqi4tsPRI7VPlgTbhPrdc22a298PcO0MP/cHT4xsgyjwOjSrcoGRmacCXYizfWW9cBZf0eUash0X4oumEjIItke9SNrCaQJtmAZx7aRmktMBM8rOohX34Os8vaylfTm4eQFWhqQg75gZFWMBVbRtQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637416; c=relaxed/simple; bh=6B/oEpusfBLPtnIDyQcbq+bRFZMCW8fd3DcHN6jIeto=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=O1SZ3ubgu51vuH5AuMJahyDhSeqpK14fK1FWhr872b8n2gmEH2KrEJWBu4T37liOXjjNkPOLJ3WtVUNbkqboroQQZ39iEhtuFCkbDz2C36+aGOPSQjmp3w/G2xa0cZrs4VzmI0kPb8DInrV/MfmLLtXgKPxRb7yWwRiyO2EVpZ0= 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=XzpZSHzC; arc=none smtp.client-ip=209.85.128.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XzpZSHzC" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-47117e75258so1319655e9.2 for ; Thu, 16 Oct 2025 10:56:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637413; x=1761242213; 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=z+76MRDg5x75qLvTgM55RSRxFBkfbhy3lMLwDXf3nB0=; b=XzpZSHzC2rNn/bVjc9QRn1LoA6031CDTvxvhYXj2I90yH5tkdBn7TJoFGWqRFkQk9x AWwshzE3nrh7dhJbrTwUaeEo7hz7BiAp6fMvLWoBqW20stgYjZQCWv2o8HcYrRa9mfLh +c8O6qo88hCu/AJjLC7cXdSbk4jeXHM57zxRwCiHS4NTrm79qoqHVh8Kf5njPsDcuD+X VYXQpS6fMvyPg5zLRRdtLeab+I0qauMB7vLkqs7zOD3AvhjebrvCKq3h7hRr3VVJGuK5 rnm3XK3tzxle3Q3+l2Sh3u22H2zWpkw0IgKfzsl6J1yUIXU89RcuKaHR2KRwQTHIZ1H3 U3ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637413; x=1761242213; 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=z+76MRDg5x75qLvTgM55RSRxFBkfbhy3lMLwDXf3nB0=; b=h5JU/Ng3fBeSq5F5CX9Z/v8ynviPzg5evvSgUHn5L7oEsDzvdWNQkJ+QnVNAx+Ymi8 jQHt1YA8+DOTkij8wS3SenNITiuxtxtr/kLEFDKuXKM2qd9OsXmXTii/HyMWWl2cJAQ+ W0qhITcp0LrneL23mlIp8XEitDIlFKsaa+u4QvBGsklwtvHxQFtTCkMeXtGeTUMThKrL Tr8rXKXTQc1YT/D05bls2qnZKpm9tSoei7GnOFp1pCOpx6T6e4PoLN0N5Fmuqa6M5n/J rSApnL2wjoSF+A0G+C3eiuBfBJaNDkJpom5a5Vq4lBWq/Ubz0J2FuMFb8FkcLJfd/qcM aHLQ== X-Forwarded-Encrypted: i=1; AJvYcCXS3nd1QMzYqfxhHMnIb1Mv9GpRrAoNAORzRj6eU9ASvKBj5wsIS3wmBQUjxWY0E6dkOi41jGH8+amxWXE=@vger.kernel.org X-Gm-Message-State: AOJu0Yxkdvnoe9crNTYhp3wLP5xr5D2iP4DCrlapSnJroPHQU/Ns+NR7 2Q6mAnX0HyyDJ2l5o3Ae/xdd/lhOiQAVR+Na2gpZySRDy4DVLfbDVwkW X-Gm-Gg: ASbGnct/mh3bIkEYd5Re41E3bDQafEoGbZK+0FVlojFFHT5rn7fixZ/ep8oZaa5u1rv zumQHvf1WIXxc7um5cmSA387+YaQziPNyaIhNMgNjTCAViWOTMQBjMDRthTWGDqmfYTX7ccBHR5 Y/JWAyjuKJU4a9lTL0P65mQuAZVeq9uveLVXMzfH9pYZecKapU69qJ/JKYbXQwIWyfmzD67JIrq L4GIqsJotktzeY0klHf11JrGiH21ZXX+i7TbeAEGWzmZGxpaVmVxUGZVU/DgwLEYHktmAdEXtRw kbX388lj2nK0wJiFQLQnZFV9HFR1H/MArjwTrUm7ICJsoO6/nNEsUKod4BHsvJydqHCbEjrWuJX MRFxzbKAVjlPVT8mANXMuY9cpbaHwc9VSEz0M02ebxLfoHdl7IyzJa8CeeOEh6iz78VC+9SS08q 4= X-Google-Smtp-Source: AGHT+IEF6nd3NHJ6Hz3jHyY6wSRTMjjKhpeimqR36CbQEX1fUeaE1iql6yjy3XpMlOobsyfjzfShmw== X-Received: by 2002:a05:600c:b8d:b0:46f:b42e:e39a with SMTP id 5b1f17b1804b1-4711792c24emr6649585e9.39.1760637412794; Thu, 16 Oct 2025 10:56:52 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:52 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , Harry Wentland , Luca Ceresoli , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v7 09/16] drm/vkms: Allow to attach encoders and CRTCs via configfs Date: Thu, 16 Oct 2025 19:56:11 +0200 Message-ID: <20251016175618.10051-10-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Louis Chauvet Create a default subgroup at /config/vkms/encoders/encoder/possible_crtcs that will contain symbolic links to the possible CRTCs for the encoder. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 2 + drivers/gpu/drm/vkms/vkms_configfs.c | 58 ++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 622fbfa12a84..585effe90550 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -106,6 +106,7 @@ Next, create one or more encoders:: To finish the configuration, link the different pipeline items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs + sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/encoder= s/encoder0/possible_crtcs =20 Since at least one primary plane is required, make sure to set the right t= ype:: =20 @@ -122,6 +123,7 @@ Finally, you can remove the VKMS instance disabling it:: And removing the top level directory and its subdirectories:: =20 sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* + sudo rm /config/vkms/my-vkms/encoders/*/possible_crtcs/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms/encoders/* diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 0df86e63570a..7de601e39d2b 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -70,11 +70,13 @@ struct vkms_configfs_crtc { * * @group: Top level configuration group that represents a encoder. * Initialized when a new directory is created under "/config/vkms/encoder= s" + * @possible_crtcs_group: Default subgroup of @group at "encoder/possible_= crtcs" * @dev: The vkms_configfs_device this encoder belongs to * @config: Configuration of the VKMS encoder */ struct vkms_configfs_encoder { struct config_group group; + struct config_group possible_crtcs_group; struct vkms_configfs_device *dev; struct vkms_config_encoder *config; }; @@ -100,6 +102,10 @@ struct vkms_configfs_encoder { container_of(to_config_group((item)), struct vkms_configfs_encoder, \ group) =20 +#define encoder_possible_crtcs_item_to_vkms_configfs_encoder(item) \ + container_of(to_config_group((item)), struct vkms_configfs_encoder, \ + possible_crtcs_group) + static ssize_t crtc_writeback_show(struct config_item *item, char *page) { struct vkms_configfs_crtc *crtc; @@ -364,6 +370,52 @@ static const struct config_item_type plane_group_type = =3D { .ct_owner =3D THIS_MODULE, }; =20 +static int encoder_possible_crtcs_allow_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_encoder *encoder; + struct vkms_configfs_crtc *crtc; + int ret; + + if (target->ci_type !=3D &crtc_item_type) + return -EINVAL; + + encoder =3D encoder_possible_crtcs_item_to_vkms_configfs_encoder(src); + crtc =3D crtc_item_to_vkms_configfs_crtc(target); + + scoped_guard(mutex, &encoder->dev->lock) { + if (encoder->dev->enabled) + return -EBUSY; + + ret =3D vkms_config_encoder_attach_crtc(encoder->config, crtc->config); + } + + return ret; +} + +static void encoder_possible_crtcs_drop_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_encoder *encoder; + struct vkms_configfs_crtc *crtc; + + encoder =3D encoder_possible_crtcs_item_to_vkms_configfs_encoder(src); + crtc =3D crtc_item_to_vkms_configfs_crtc(target); + + scoped_guard(mutex, &encoder->dev->lock) + vkms_config_encoder_detach_crtc(encoder->config, crtc->config); +} + +static struct configfs_item_operations encoder_possible_crtcs_item_operati= ons =3D { + .allow_link =3D encoder_possible_crtcs_allow_link, + .drop_link =3D encoder_possible_crtcs_drop_link, +}; + +static const struct config_item_type encoder_possible_crtcs_group_type =3D= { + .ct_item_ops =3D &encoder_possible_crtcs_item_operations, + .ct_owner =3D THIS_MODULE, +}; + static void encoder_release(struct config_item *item) { struct vkms_configfs_encoder *encoder; @@ -413,6 +465,12 @@ static struct config_group *make_encoder_group(struct = config_group *group, =20 config_group_init_type_name(&encoder->group, name, &encoder_item_type); + + config_group_init_type_name(&encoder->possible_crtcs_group, + "possible_crtcs", + &encoder_possible_crtcs_group_type); + configfs_add_default_group(&encoder->possible_crtcs_group, + &encoder->group); } =20 return &encoder->group; --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B237D328B60 for ; Thu, 16 Oct 2025 17:56:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637417; cv=none; b=ZYVqRBFyQOl+KYf3TTLu3lMXMgupb1xteqfLWGQfTT929tzuDPS3wZLu4vKgFuU3ixQSiKdWdA5sm0tBxtkEYaB3xWNVH+iy8tm/C8FxDKAmlq8BLDLZWznJEeRGty7PG9hakIDb3OUdBmk+S31DHbbyBnjJnsR0JREp7Zhbfgk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637417; c=relaxed/simple; bh=4K2rH9dFi7oBXNOY+XU4+3vqT8BndGPPU5Gf2ZPk29I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=nUW74yKuFDEr4bgUYWhxQdDIHyAr1CEsSqb0xfdGx/Mjf7LNQwsqy6MFN6pcJegw5V2/DpboqQbwKfhntIEFmE9uzBvQ6g9/clIuwsazOzvo3tiXxt5cr4Cwj3ccvxe2cDUmPYN5dmKx7fluXarFPsq/tIifOH4ssdMxMGylq08= 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=EOxjV+OY; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EOxjV+OY" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-3ece0e4c5faso971639f8f.1 for ; Thu, 16 Oct 2025 10:56:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637414; x=1761242214; 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=shMWPvpLGjrKhi5mqB9amNwRWIAGapj+R8HHzVpz0Ms=; b=EOxjV+OY5rLAXUVRH/mApfVFYVmHi9sJoA/J7PQ9yOuajEkoDVd72esxKB6RCz8bBL 5oitx01u74nvcDTkjhysgu68p4Wp91JdnvH9UQqlOfNTjO9cTPLnt4HgeecI96fXFzrs teKgjcgIIPGmI61CE48g8XrJUpzosSRhNBjlcipDVCqPDd60n7vfcs88ArQKY+hc8QrD d4Zlo+3vnXNtZUn2bhnZ6vDa4awSvgmk1HPESmv7dDqUZHtk93XjuIzSfsEEDamnZ0Iv Wydkcu/Ip2TRppyK+B4sQQRA0Zz+W7/RRucwPUPectalog95QIwDGmYMgpz5KY/gG7ms D+dQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637414; x=1761242214; 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=shMWPvpLGjrKhi5mqB9amNwRWIAGapj+R8HHzVpz0Ms=; b=sUUp21sXjXgIVvlVFKazV3wxC65pF3hBA8v9e/6cB2lfelvDTL9F/xVTf8dr1+QOKi dq+NB0siivVVS8yhJ3O00WXUfgpoVMsTCDRy+CfdpU22AcVySkPLAfOH/hKOTLph1icK qjHuWwFTdjGMgezR/XcBvhd8n+PlpB/bXBs1L163F3UoOINif3/0br8Vjo5F6K5f4MjJ SuUK6CYG5zEx7BJZpxFR6CRV2ZKEXyAjjGlmPuLTSH5KP8B3tlfwysv4zF/BeDlzdZv4 8zhUOZwcHVCAEDhSeLfhl1R9aALLa8fNkOGTUHrZje3V6dUm6k0RazEWnV1l4aLZrst/ GSWA== X-Forwarded-Encrypted: i=1; AJvYcCWV5VPhDqaxgzTgGrBD8YtMhOBND9qEqO1f3t518CHjBdH0WXg8X8x5tmadoInsZ5t9fdRuTvTZLRiul4o=@vger.kernel.org X-Gm-Message-State: AOJu0YxeCjw5h5TG1hQ8xCqLgHvsbS9JY6uitILnBDvfORvtmat0fbFq pXJfoGbZonrm/qug3oyFVN7ZYLXIwKvZFDmhlramedxGd+Vta+0TgE+A X-Gm-Gg: ASbGncuHm7yL7S1aZqF7sA6Q7T7TfqW7B0MjNW4f6JRlB/PUaY0pJJees2a3cePOHea IOL5B05V+0bywFTc4w7stEmQopmC5XvDlqYiJFPFLABGftNIKE+adpmA5Dm3VsSMt/gMJGHNxW9 YIIorrhjKnIqmDdmIpahHeSgye3v5Nl1hZVL2/VoK1UwefZDzkxCGpC5NTwcN++aPjbsMK1223G v5wEf/3BVyT/B4DnOmjb0zdMy/N62r8J5bTRVz2ud25n2VOKLXdLU8P6I9D3n/fFmuFP+2Gyh58 Es1eH4Cqu8AuTtQiYtab7YjE+bVAqBDewXrnWSOEQ0AffELAsTqOP4ApBwhkbm28Jbcg2YmBxh3 vcecPeoaC/gmKoKQrwiDKvdY1sxf8shWS+zrMFv2YhMc/UNlRL2/L98ZcOJdPKXTAH3NpYrEeGO TCT/E9wTQnhw== X-Google-Smtp-Source: AGHT+IFBqpMFmNajovNOjH5ujqR7J+H08sNbKwm0IQ3czO2wNshvulU7VoFpV0v2RuhzWQjvaWTbEw== X-Received: by 2002:a05:6000:200c:b0:3ee:1578:3181 with SMTP id ffacd0b85a97d-42704db2b7amr741938f8f.49.1760637413931; Thu, 16 Oct 2025 10:56:53 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:53 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , Harry Wentland , Luca Ceresoli , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v7 10/16] drm/vkms: Allow to configure multiple connectors via configfs Date: Thu, 16 Oct 2025 19:56:12 +0200 Message-ID: <20251016175618.10051-11-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Louis Chauvet Create a default subgroup at /config/vkms/connectors to allow to create as many connectors as required. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 87 ++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 585effe90550..b799102d54ac 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -74,6 +74,7 @@ By default, the instance is disabled:: And directories are created for each configurable item of the display pipe= line:: =20 tree /config/vkms/my-vkms + =E2=94=9C=E2=94=80=E2=94=80 connectors =E2=94=9C=E2=94=80=E2=94=80 crtcs =E2=94=9C=E2=94=80=E2=94=80 enabled =E2=94=9C=E2=94=80=E2=94=80 encoders @@ -103,6 +104,10 @@ Next, create one or more encoders:: =20 sudo mkdir /config/vkms/my-vkms/encoders/encoder0 =20 +Last but not least, create one or more connectors:: + + sudo mkdir /config/vkms/my-vkms/connectors/connector0 + To finish the configuration, link the different pipeline items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs @@ -127,6 +132,7 @@ And removing the top level directory and its subdirecto= ries:: sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms/encoders/* + sudo rmdir /config/vkms/my-vkms/connectors/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 7de601e39d2b..692e1b708012 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -19,6 +19,7 @@ static bool is_configfs_registered; * @planes_group: Default subgroup of @group at "/config/vkms/planes" * @crtcs_group: Default subgroup of @group at "/config/vkms/crtcs" * @encoders_group: Default subgroup of @group at "/config/vkms/encoders" + * @connectors_group: Default subgroup of @group at "/config/vkms/connecto= rs" * @lock: Lock used to project concurrent access to the configuration attr= ibutes * @config: Protected by @lock. Configuration of the VKMS device * @enabled: Protected by @lock. The device is created or destroyed when t= his @@ -29,6 +30,7 @@ struct vkms_configfs_device { struct config_group planes_group; struct config_group crtcs_group; struct config_group encoders_group; + struct config_group connectors_group; =20 struct mutex lock; struct vkms_config *config; @@ -81,6 +83,20 @@ struct vkms_configfs_encoder { struct vkms_config_encoder *config; }; =20 +/** + * struct vkms_configfs_connector - Configfs representation of a connector + * + * @group: Top level configuration group that represents a connector. + * Initialized when a new directory is created under "/config/vkms/connect= ors" + * @dev: The vkms_configfs_device this connector belongs to + * @config: Configuration of the VKMS connector + */ +struct vkms_configfs_connector { + struct config_group group; + struct vkms_configfs_device *dev; + struct vkms_config_connector *config; +}; + #define device_item_to_vkms_configfs_device(item) \ container_of(to_config_group((item)), struct vkms_configfs_device, \ group) @@ -106,6 +122,10 @@ struct vkms_configfs_encoder { container_of(to_config_group((item)), struct vkms_configfs_encoder, \ possible_crtcs_group) =20 +#define connector_item_to_vkms_configfs_connector(item) \ + container_of(to_config_group((item)), struct vkms_configfs_connector, \ + group) + static ssize_t crtc_writeback_show(struct config_item *item, char *page) { struct vkms_configfs_crtc *crtc; @@ -485,6 +505,69 @@ static const struct config_item_type encoder_group_typ= e =3D { .ct_owner =3D THIS_MODULE, }; =20 +static void connector_release(struct config_item *item) +{ + struct vkms_configfs_connector *connector; + struct mutex *lock; + + connector =3D connector_item_to_vkms_configfs_connector(item); + lock =3D &connector->dev->lock; + + scoped_guard(mutex, lock) { + vkms_config_destroy_connector(connector->config); + kfree(connector); + } +} + +static struct configfs_item_operations connector_item_operations =3D { + .release =3D &connector_release, +}; + +static const struct config_item_type connector_item_type =3D { + .ct_item_ops =3D &connector_item_operations, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_group *make_connector_group(struct config_group *grou= p, + const char *name) +{ + struct vkms_configfs_device *dev; + struct vkms_configfs_connector *connector; + + dev =3D child_group_to_vkms_configfs_device(group); + + scoped_guard(mutex, &dev->lock) { + if (dev->enabled) + return ERR_PTR(-EBUSY); + + connector =3D kzalloc(sizeof(*connector), GFP_KERNEL); + if (!connector) + return ERR_PTR(-ENOMEM); + + connector->dev =3D dev; + + connector->config =3D vkms_config_create_connector(dev->config); + if (IS_ERR(connector->config)) { + kfree(connector); + return ERR_CAST(connector->config); + } + + config_group_init_type_name(&connector->group, name, + &connector_item_type); + } + + return &connector->group; +} + +static struct configfs_group_operations connectors_group_operations =3D { + .make_group =3D &make_connector_group, +}; + +static const struct config_item_type connector_group_type =3D { + .ct_group_ops =3D &connectors_group_operations, + .ct_owner =3D THIS_MODULE, +}; + static ssize_t device_enabled_show(struct config_item *item, char *page) { struct vkms_configfs_device *dev; @@ -592,6 +675,10 @@ static struct config_group *make_device_group(struct c= onfig_group *group, &encoder_group_type); configfs_add_default_group(&dev->encoders_group, &dev->group); =20 + config_group_init_type_name(&dev->connectors_group, "connectors", + &connector_group_type); + configfs_add_default_group(&dev->connectors_group, &dev->group); + return &dev->group; } =20 --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D33ED328B76 for ; Thu, 16 Oct 2025 17:56:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637418; cv=none; b=JxxZsIe3d7AX/+6Dy9yczoH+Dd6wuNioVtLIwSd+aSLSY7rt+mip3T+oNa/Xvuv3W9phvZ4OoUyFkVIbFIaCu21Ew38LTWNwwNvFOqZC3KwV39MRhAuh8RyZl2zGQUdW3TOHa3K1/BtUkqCa2qAdJzCIQbX9Frf3gN0EySQf82M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637418; c=relaxed/simple; bh=Ptp2s6Px7TOCDb5vl2x+uUDYrRb12pqoYSwxZnX3e9g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lceHBxqwvTRtrZTAlMMLF3MIhCAJFDnbJdlqNBLEMKkP4wbO3lEODgRLtCkXuP4Des4MBCXkRLoA3eHnyfFvzoz/dUkLwexpyW5Jk1BmFClLbMqYDp4J5f9/UZAC8d+A+JetRNdSKgHN25pZvB+h2tcjMKkPAcHeb3pHrQNL/7I= 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=WHMuK4e2; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WHMuK4e2" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-471131d6121so7987245e9.1 for ; Thu, 16 Oct 2025 10:56:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637415; x=1761242215; 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=C7w7rSx8/aFkCH550GdudR6K0Utw/IdDPjF/QW3Etas=; b=WHMuK4e2YXi+gl6kywXpK7Kq33FcQ/xT13v86+51H6cFhQ+N2Wa6Trq9bC9ur7EBjo nLbmTMj0VFGKoJJH5W0n4yi+31UM8zJLJFsu3AH+FuWyMi6zuGnEPaNNaX5505hp7zN5 uPk/gW3rr2G9knz1hEeqncwNjSWsjGM0qbu6qQ9SjbSQQqBxuJ8VcbbTGr6cA4hc+vfZ YUyj4JxY2GkPIAFyQr6N0VZd77wSBpw9jBrzoC8SM0Vz4XpHS9/upl8aueBwZ8XBg7YC qkqfqCidNOSX9iYQstN0lz5qZUnwAGM5c8DCJSoo518mTiZiDu5w4cAtc5iOBKARmXRx egEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637415; x=1761242215; 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=C7w7rSx8/aFkCH550GdudR6K0Utw/IdDPjF/QW3Etas=; b=GLxG2lyb8WBdpPjVcytI3CZJDVWV5ne6BSocexNZYx/q9+XoLskTwZ8lSNmjWRLaZo H0HkTVamQK9Sqb0iXvEpae7GJX065zt/T6eRMZOOmCmh9kIUf5a6rT4gZxNje6gijnrt +/0MoiygqCPwtoyYG2joakkPsJiBYwS5rDKKigS84Q0hy+wfagro/YnyeeOLscv0FwmW zs0cn8qTSg6J+ErFDsPN+9mSwPbK+9QcUhLvXtuusIuV2que+ssmB/zYLOw2aNTPBEeQ XQxj1U4cNbpUMalcBdRHXyjmid7xG/oPL8MHFcCqR3cdGPF4uHbp3bn9H8MHw7JGQvfi kF5g== X-Forwarded-Encrypted: i=1; AJvYcCUtu+DinswLBbplyT5mW75jUc5zEtqT41d1GipQA86cVbYPpPjBa1QWv3WmrgweTY8knL1KlUVVJl5Xv6w=@vger.kernel.org X-Gm-Message-State: AOJu0YwfUiMHjKghWgBCIWv1hWmv46rdKZzPkP+vwnrTYZoCK/0kvpo8 eKfP40TJ6BjWWS1+F8V5dyZvpoBE9kz3onnu7yYm+Ry5tONdJs3nmtE7 X-Gm-Gg: ASbGnctZVfIVEqLZitpa/Y5z9EeVN3m0Gmxxfgr1ssqp9pGdUXh0Q2FDp2R69eWEIEb c0J2JFHxIx4V3bTfDBrMcoXHjeWbzcsddjTWw0TBja5Wb9xEzsDvDFChO9YsbNl7svCbLHWqBdm hRhb1Eg/Qlta7AAkvX0Mgs4gW44djGjlKtDwpt1cZWLJeLMCNrHkXNj4nJSLyg/JQ53LucDQbSv oQ6q6cwefga+UoIn5wobq5tYaHAak5pYzHMNCTGlnQnr/8osaGnoYAz/0snGPlahkPMeUJQKlAC wWx3wm7xau2p4bTgB6z9NUiIPESOQuVjs7pemOdV/mOlarwdndISqq4Qc9XdeHZhWj6s4o35ltE AWIy3kGDtDP5+7OyfcHXndILhOsMUxRgrz208U9IUFdkwvCKTNl56SQOqOE5lHc11RfGIAY9R7H /bbS9p2qcPQA== X-Google-Smtp-Source: AGHT+IECLJH3tyU8psXcO7Z3x88TzFB53y1mnPVi5423SNjlU5NpQAE5ErgxGxlx1kXh5/HNZN89YA== X-Received: by 2002:a05:600c:474b:b0:46e:4e6d:79f4 with SMTP id 5b1f17b1804b1-47117877525mr8220675e9.15.1760637415128; Thu, 16 Oct 2025 10:56:55 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:54 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Mark Yacoub , Harry Wentland , Luca Ceresoli , =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v7 11/16] drm/vkms: Allow to attach connectors and encoders via configfs Date: Thu, 16 Oct 2025 19:56:13 +0200 Message-ID: <20251016175618.10051-12-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Louis Chauvet Create a default subgroup at /config/vkms/connectors/connector/possible_encoders that will contain symbolic links to the possible encoders for the connector. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli Signed-off-by: Louis Chauvet Co-developed-by: Jos=C3=A9 Exp=C3=B3sito Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 2 + drivers/gpu/drm/vkms/vkms_configfs.c | 62 ++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index b799102d54ac..31a3880ad83c 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -112,6 +112,7 @@ To finish the configuration, link the different pipelin= e items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/encoder= s/encoder0/possible_crtcs + sudo ln -s /config/vkms/my-vkms/encoders/encoder0 /config/vkms/my-vkms/c= onnectors/connector0/possible_encoders =20 Since at least one primary plane is required, make sure to set the right t= ype:: =20 @@ -129,6 +130,7 @@ And removing the top level directory and its subdirecto= ries:: =20 sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* sudo rm /config/vkms/my-vkms/encoders/*/possible_crtcs/* + sudo rm /config/vkms/my-vkms/connectors/*/possible_encoders/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms/encoders/* diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 692e1b708012..8e90acbebd6a 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -88,11 +88,14 @@ struct vkms_configfs_encoder { * * @group: Top level configuration group that represents a connector. * Initialized when a new directory is created under "/config/vkms/connect= ors" + * @possible_encoders_group: Default subgroup of @group at + * "connector/possible_encoders" * @dev: The vkms_configfs_device this connector belongs to * @config: Configuration of the VKMS connector */ struct vkms_configfs_connector { struct config_group group; + struct config_group possible_encoders_group; struct vkms_configfs_device *dev; struct vkms_config_connector *config; }; @@ -126,6 +129,10 @@ struct vkms_configfs_connector { container_of(to_config_group((item)), struct vkms_configfs_connector, \ group) =20 +#define connector_possible_encoders_item_to_vkms_configfs_connector(item) \ + container_of(to_config_group((item)), struct vkms_configfs_connector, \ + possible_encoders_group) + static ssize_t crtc_writeback_show(struct config_item *item, char *page) { struct vkms_configfs_crtc *crtc; @@ -528,6 +535,55 @@ static const struct config_item_type connector_item_ty= pe =3D { .ct_owner =3D THIS_MODULE, }; =20 +static int connector_possible_encoders_allow_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_connector *connector; + struct vkms_configfs_encoder *encoder; + int ret; + + if (target->ci_type !=3D &encoder_item_type) + return -EINVAL; + + connector =3D connector_possible_encoders_item_to_vkms_configfs_connector= (src); + encoder =3D encoder_item_to_vkms_configfs_encoder(target); + + scoped_guard(mutex, &connector->dev->lock) { + if (connector->dev->enabled) + return -EBUSY; + + ret =3D vkms_config_connector_attach_encoder(connector->config, + encoder->config); + } + + return ret; +} + +static void connector_possible_encoders_drop_link(struct config_item *src, + struct config_item *target) +{ + struct vkms_configfs_connector *connector; + struct vkms_configfs_encoder *encoder; + + connector =3D connector_possible_encoders_item_to_vkms_configfs_connector= (src); + encoder =3D encoder_item_to_vkms_configfs_encoder(target); + + scoped_guard(mutex, &connector->dev->lock) { + vkms_config_connector_detach_encoder(connector->config, + encoder->config); + } +} + +static struct configfs_item_operations connector_possible_encoders_item_op= erations =3D { + .allow_link =3D connector_possible_encoders_allow_link, + .drop_link =3D connector_possible_encoders_drop_link, +}; + +static const struct config_item_type connector_possible_encoders_group_typ= e =3D { + .ct_item_ops =3D &connector_possible_encoders_item_operations, + .ct_owner =3D THIS_MODULE, +}; + static struct config_group *make_connector_group(struct config_group *grou= p, const char *name) { @@ -554,6 +610,12 @@ static struct config_group *make_connector_group(struc= t config_group *group, =20 config_group_init_type_name(&connector->group, name, &connector_item_type); + + config_group_init_type_name(&connector->possible_encoders_group, + "possible_encoders", + &connector_possible_encoders_group_type); + configfs_add_default_group(&connector->possible_encoders_group, + &connector->group); } =20 return &connector->group; --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 38B01329C59 for ; Thu, 16 Oct 2025 17:56:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637420; cv=none; b=QyRATXoi3huYFhV2C1AZt1GYYpn25C4uAFDU7o5etnG7xboVKMIOmTODs1YgPnYc0brnC4BbSHkpAco/vL6IaC5+h5bC8afEXGAFqFH8E4faNJiGuZHES9QwVT0tba9C7HxTFOKOX4PkOvPqXbA+QT27VLpM3cpGKtzHlPOHfD8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637420; c=relaxed/simple; bh=KGbJjkAhO4ZtbIcLNNS+V46g0SvaYr39Omc5oPOXd1M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=G4VUUYsDS/7iphcXlnEHjTAGE39J4dgBHNUdwNM1Wg5tGT49G0tkj5dg/l8MwRnr0Q84r0RiOLtUo6jZqEL4JFfn7CaesYwV2iR6EtijyGjGXm8aEWAYlPg0RBMmweOQ8AigrMla/Gpag+2x4gtKL0SQuTXV1KF425XfXO+ZQl0= 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=Il8D6OHO; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Il8D6OHO" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-426edfffc66so716197f8f.1 for ; Thu, 16 Oct 2025 10:56:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637416; x=1761242216; 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=dDIBd/5GJWbfmYIhSedRYcdjoF/UyHPs/JoC64uZgbg=; b=Il8D6OHOqGnT4tMCoEVJJvS2N96gKu1xoNH3bLqfHVJRipg1FZg2R+v7P7pPFVgm01 2kpZQCiYtKZtmjO+WlNGtxOaH+iRrSKx+mxRyAtwtsRg23hoznmq6Jpb+26ZXEPSKDbS w0qNjPOp9ruvwniwXQe29JBWq+YUCQUkV1MrkdRml4lvgJZJGGaVjExLhuU6ie9VhQBA ZpuPRe3wMQVL6aIIbhnRE2f7/G8WJSkGWIEdAIRs9OnuEia2QrtqXPePXC93Q6accxvF F334WwujdMdt7O/1NlC8rZazxASaLCOETc0qFIoN7S4Uv0UwQoviu0RucRTHQQEuX4N6 72iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637416; x=1761242216; 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=dDIBd/5GJWbfmYIhSedRYcdjoF/UyHPs/JoC64uZgbg=; b=QlAbKpZlha1THl3MfpzIT68o0r14Rz9WX+xEMMUdV5cCTcH/ytSs7qwVw1N/H+7V1k m9mF9Z6JtWzpIa0fQKWVJL8Dnkl8hDwlOj2VlhljGO132FdSa3xq23cdZ43KTUsFTzXE MTp110DiTgxuWNhOt/re+u/jlgxXWEgwAZ4NPWFJLZDf0gyekVGHEs8QwJCHHpcPWD76 cBJUBVBYU5eD3K2Igc+g4Q3zHP9P5C5p3F7fDDVhUz2mykx6gQyhQPjx8iACopfkCxi7 huMMzsRhQISA8E1pHcqrB3Zl5b4/MlfjR2jfuVULaduG4u4/b8koqJln96GNYTCrfZjg jk/A== X-Forwarded-Encrypted: i=1; AJvYcCUHuHo42glitVyTz7ba7MfjgCCr4XLntiyYqazcXDlvRIzLC80G1GSiBg8toj+NTCDtP1QJirUJzV1DnFw=@vger.kernel.org X-Gm-Message-State: AOJu0YzMFVRalp/r+XlAN3869u7MDd95Av9Ae0ziUA7Jx3C2QF8m78ff +9tqn+30rNoFf3/mltJ20y6PtlZ5BNigJ5sX1NbutxCxKHx9e5xZRkZe X-Gm-Gg: ASbGnctQpWlzBRnO9vE+aGAqFk8Q35iDlx0WRw6ghYV3N4TbzNy+yg9dhZipFpLRO40 jN/kIJQ1SC6XglKsxm+kT+pkjsbc81dVso51aXY1hD2i0qrh0noxOx1mcKeZR/zjX/ZiKNFENZ4 A9TSHdc7X6jPHVrsttpR9SZ9uaJdD0OZ4W7bAE5yJ+sjj1fzhPOJ7UgZHjizCC5W4u7gLg9RUZU qEgMsbs7hDXHfsFd4/YjBZhKcVlVa+j4UC/cpWcHkJ/6ZvnkU1jU/fqk38Qxw4vKAreL/smcbx8 sFjuWap+ZTk9G9HWPhy6+7WDwDJB64djetYKwJSfezOq0og9I0qP6cwJY3YMAna81xca7dTQy87 DAIJj+JysZQhxtOibWpaiT8ue+VKza/jqkLHesvwgcqASTT7vT0rxZlCl3OuqP0J+x8O8iJlRoE 8= X-Google-Smtp-Source: AGHT+IGcsJNQXUWM38WX59x6HV9qVAN223pS8C2g1oQg+KVg67lXv4toau5LU5uGbjwtrz4LccKf2w== X-Received: by 2002:a5d:5f95:0:b0:3f4:5bda:2710 with SMTP id ffacd0b85a97d-426fb6a7461mr3088172f8f.9.1760637416228; Thu, 16 Oct 2025 10:56:56 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:55 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Mark Yacoub , Harry Wentland , Luca Ceresoli Subject: [PATCH v7 12/16] drm/vkms: Allow to configure the default device creation Date: Thu, 16 Oct 2025 19:56:14 +0200 Message-ID: <20251016175618.10051-13-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add a new module param to allow to create or not the default VKMS instance. Useful when combined with configfs to avoid having additional VKMS instances. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli 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 c1f23e6a4b07..6d299903fab2 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -50,6 +50,10 @@ static bool enable_overlay; module_param_named(enable_overlay, enable_overlay, bool, 0444); MODULE_PARM_DESC(enable_overlay, "Enable/Disable overlay support"); =20 +static bool create_default_dev =3D true; +module_param_named(create_default_dev, create_default_dev, bool, 0444); +MODULE_PARM_DESC(create_default_dev, "Create or not the default VKMS devic= e"); + DEFINE_DRM_GEM_FOPS(vkms_driver_fops); =20 static void vkms_atomic_commit_tail(struct drm_atomic_state *old_state) @@ -219,6 +223,9 @@ static int __init vkms_init(void) if (ret) return ret; =20 + if (!create_default_dev) + return 0; + config =3D vkms_config_default_create(enable_cursor, enable_writeback, en= able_overlay); if (IS_ERR(config)) return PTR_ERR(config); --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 41F1232AADA for ; Thu, 16 Oct 2025 17:56:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637421; cv=none; b=qfIV9G/lj5G+YLOmHic9J0z7Z78WeGvCXkcaTk3sOdDAjBfqyQ4irf2gzY0eIDGZ2EZcbctbPKyCcHCmR8qJY75iLva1/zT0ZOfwD+8kTUGfdoB4R/SvZxdy3hpLbRjBUuCmNOQajv+9APeKTJO8wKdepoIPAhwLX84DQTNA40U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637421; c=relaxed/simple; bh=DucwR7lmblXtGrecWIP/cobvknXDh7rKPktRZoHlgCE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pRKIh4Yx1Cd5yNagQWxcpbPwOxOWtUdyM3xCu2uC1fxMS4sINHb+TAQ5w7Z5eoVIEMO0H/n0YUDXZyjw/NQ/z5q+mMzE3X9zOz5MDfyMEWhYHBqEepF1aWakU+KBfcv4Npe1N/gYdn7p84yd2AmFxpCBNRT5Q1d7e35JRgRPmkM= 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=mfUVWd2i; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mfUVWd2i" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-47117e75258so1321195e9.2 for ; Thu, 16 Oct 2025 10:56:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637417; x=1761242217; 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=G1SpBeUqpFn3lQrpk1/03vxKE+csOcXH6zxgB4nY+oo=; b=mfUVWd2iNjJQ0uxwwwoLrW0XxPOVmS/ZykD4+MKD47cdA8vquzfjW+pvJGZcyGa4R4 s8vrY005NwnjP6EztSnN32V32/Ol59Jy5LOUFlABQwHnBiyoh50Cs9RKBCcvg+nofMqx mEWyKOaWYf8S/b3uzP6h0WIe7CYFnJQvwpYSA4k1IuS2COhZEITqFFAjAIXYMX0F0+Ss kOjuaF2NvZxQ4POz4Cd8/XIOwEs1nJY/ROwobX84I4mEccNJhb2ITAmWS11D6h5B5UO/ pe4TujaF3o+fHENWvR8DHJd6Aos41cEk3NIvWxXQnFakO3Dpb7jK7eus5agthyQlk/AW x0kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637417; x=1761242217; 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=G1SpBeUqpFn3lQrpk1/03vxKE+csOcXH6zxgB4nY+oo=; b=LT+vjnlmNQJUcr5DVNjKHV4JJ84yuJZbwbZtRpxCGqyBRXExqLDUB+wuaAc3nYBxMi /I6+Wg/uUOgAafcXBQC7koUy6cWsz+fzPbc78B5RhABd1VxWf2aQNcdEdZY0NMqw8F4b kZUMdkq+JbadEEhphzhrTrhCsnCGh+gP3jFr9idhcLVvwURly1ltF8rM6CT+eWFSvvMZ GtAMIjbGa8zxbX3ZzPimWCml3k/zzC1NMq9nqxdUayCnOy6lVWsEry53CVMhWsGOFYBJ AWPhEhJAA5VdIT/e2rr9JcgzoTNV1Mimvsqaw8QtoAMY3RvdyDN5hwmfA8csr1bJxtcd 5QRw== X-Forwarded-Encrypted: i=1; AJvYcCWdXY6lh2C27VBgkDba8injieI1QhOrcJYm+eKKENto0LQXI/CqXMC/TO+ans1oCAShuq2l79D2bqbKcS4=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/77L/u8jnHbulvpwHo0fYHTeBxAIlT0uMq3WOClrBzAUwAkMX eLIvf7VzoTtJTm02skzdlXm6X2KCPRNGPM/wcqS/waj6FPiurnPIawu3 X-Gm-Gg: ASbGnctZuztJkl78i1n9jtapYB1wPk+asLy++As2Oe2nrTPZ38vr8cB1v932W2v5TCd VsO8EdZ38Gv39vT/3W928i/4ZP8xi/zEeQuc+Vvd0TAEz6kf7HaNcKwJtXb+JDDGvDh2EB6qVYD A5cYcED5C60pOyOQdd9J0dk+Bbn/6RgNXFW64Y55dWVOt7VJdv7iUp2qR1KzpAOP9Jr2fR1rGQe wbVBzTnvz5wk7WAp4GG9XCQS4syWeb0X2EDzZT+fSQOCpKrRNN2k2U59y4J8ZyFyfArlwCYs2t0 LCnlTyJ7/z+vO6QYCiNpzUga6I3D+VA22XkYfeFY1KPLbAgsSdr24EMoesy81/PvmvN2lacDEDN aEg7X69KEwDrr8iTnQa7PVxGtAWk2qXW+hMiAvZdCtyG6gexLSB1QnlaGcZREvuyjl1/Ur+qkMP A= X-Google-Smtp-Source: AGHT+IH8NCXDHXN/QY9FgnYZ+eb63qPdeppxf26DoLioBmlgRGZ+ohwvaUIyXkL2ywEOCG9q5RVZcg== X-Received: by 2002:a05:600c:4e8e:b0:471:a98:99a6 with SMTP id 5b1f17b1804b1-4711789b11emr6597505e9.11.1760637417449; Thu, 16 Oct 2025 10:56:57 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:57 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Mark Yacoub , Harry Wentland , Luca Ceresoli Subject: [PATCH v7 13/16] drm/vkms: Remove completed task from the TODO list Date: Thu, 16 Oct 2025 19:56:15 +0200 Message-ID: <20251016175618.10051-14-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Remove the configfs related TODO items from the "Runtime Configuration" section. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli 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 31a3880ad83c..364b574a8cae 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -233,21 +233,14 @@ Runtime Configuration --------------------- =20 We want to be able to reconfigure vkms instance without having to reload t= he -module. Use/Test-cases: +module through configfs. Use/Test-cases: =20 - Hotplug/hotremove connectors on the fly (to be able to test DP MST handl= ing of compositors). =20 -- Configure planes/crtcs/connectors (we'd need some code to have more than= 1 of - them first). - - Change output configuration: Plug/unplug screens, change EDID, allow cha= nging the refresh rate. =20 -The currently proposed solution is to expose vkms configuration through -configfs. All existing module options should be supported through configfs -too. - Writeback support ----------------- =20 --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 81FAE32B996 for ; Thu, 16 Oct 2025 17:57:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637422; cv=none; b=FYu/LnZnFMjOb7LVqMjLHgdQesnCGReykC6noxmmd5qkIKqWVJ7B1Njwg3MAnFikltB9MjFmpvvWoOR6uaxkj2/KVME0GnhjTERIp5jNhZ4HXEjZpcXI8HuDxPWmbTyZhE8H2gvdcFwDnJZsl1W4k8zLvpN05sXFaFKpwir9/8g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637422; c=relaxed/simple; bh=aNI34D7IzdDMv1hfmc7OAhIqs1d7kOK6kNBLx43tTc8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Dvv9z4Oqx1VpY2YWh0TtMmZXcDGSOacerFwZvxckcQt9zIrRCFLhaJHCXqYAnj0Oe4DSP9Ob5mKnU8nRhsAV3306l35XYoVLOA51vUupj7EH0IUivvTmxmw8/2IKBl6XGsnjRPRkyKhMPb5e98y9KQjzxKhSaL/yKcq4ZJ5D4IU= 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=k4QN78xt; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="k4QN78xt" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3ee64bc6b90so715551f8f.0 for ; Thu, 16 Oct 2025 10:57:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637419; x=1761242219; 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=ClISOZHaKXG20S3XQ48lNEKMp2kHMPI3fsgz+dyjsPU=; b=k4QN78xtl9yF6SxtFaQW372A0ZvId7PVjy4dY0zeqaSZW3nJnQMKPOFaZ0NK/Im5Nj GWpa9E5smQq830yuIUfOPs/XxDBAD0hsXmIYaPDSx7C7LlOJTedmqJj6SDHOPFhqon4x 8jlvfjgPCK2QQbYnA+mTILLVlJ+DYyoc8P5QOezweoK10wMxz2EBoPq0LKsStcGsEXOa VUppBaoknc5aMD3BtG2/fmVjEEUvwqeRiB/urnX5hUSBjhytXnso5a/fviy/4pmaNk3T ovvpquAXq9wtYQIYjQu5vLVh2hbN05KTWjLXJzZDpAMpaltXaLRSuREinrmpumyEyj0e jGgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637419; x=1761242219; 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=ClISOZHaKXG20S3XQ48lNEKMp2kHMPI3fsgz+dyjsPU=; b=k2FIuCw/AEPIoYFb+XmbLYuavLS+e4etarEIcL5FfQnc2ZCEaK+Uz3p55PYDDqKaT8 ZzjMzMZWdiDgT91YKoIXQgRtoahci7EnZoCvVC1pFaO7XpirYqRwHbJQEZw1LVmheZgJ HOAYJo1HcOFRpz3bQyvjzJJQbRjNmzdWVLE6s+s1fIVmtDY+ck+xNXYuaWQa1VI+j1hH THKW2QMvHBe5lsBVWbAL3s2V0W71jBh/wR2NajySbKr14VuNotf1xl6aVirko+QP36tc 6OJ1zKFCQnKuzHRAO8BiNKjW1qnNLAipuS1w2cVOs+AVZsCzpeRvAZGuz/AesFJ8VcTv scAw== X-Forwarded-Encrypted: i=1; AJvYcCUExm+IURj8iSfkzcTTDfz/mKttH1+jdr7zValzsZww68MXjTsgw9Xgb1KcrJHcvsuPbdiD8uoAFxcR5Lc=@vger.kernel.org X-Gm-Message-State: AOJu0Yxb/kwpz6c1y9sZmzs+Wh/BkC6/l26EWKom4+dS/nxbsGHUGsA+ C3QBwmPPKK/d6rqWZa6bH8MktKVhmxOegW+xwWdqzYssKAZSLFDD9g1O X-Gm-Gg: ASbGnctrVLfDLVeQlVorP7DmM4FjY1jRTghAlLDwheDz1gj7XyUC9LGW/Zq04SYU7tP COUgWWXEDGWrAc6+F/opKtGDvhW12zeBYZWa5LiHqlamSWgBThOvKcAZtqkZH2EdDmWxU4kSJk6 cTC1Svw6Obkexi4ebsbC+78eMFHhoCdq19cRRBr7A27erHH1+so2oFsxb0de6ogKpNkCuDi0dVF gjwd5zxfEP+/pqditaqs7mQKp+XuiihZk08/pc8RreyHr2QL/80fsWoh9eWhXdqx/WowzGLn+QY ygawCrSyI/UhFIaZVEaIcGvvhsnUVaJrdtbiY6XXVlvOmEwKHItduomFLc8hHuQy45jYReVKwS+ LQS4S2dDLkHuIn1u6qUKr0o8vfGO2ePVm1rTJCxsC8AdAVH0J0chQF71NgE0/J/r7iIcCt19P2I MEM66Aj4fc+w== X-Google-Smtp-Source: AGHT+IFen0kzNqyzefDYwpOk5DC9D2JhqSgSxdWoj1UT+cqm+5u8q+EaJUCE0KOXFwJqtoXtLkEsyw== X-Received: by 2002:a05:6000:22c6:b0:426:d734:1378 with SMTP id ffacd0b85a97d-42704d7eb18mr712377f8f.4.1760637418603; Thu, 16 Oct 2025 10:56:58 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:58 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Mark Yacoub , Harry Wentland , Luca Ceresoli Subject: [PATCH v7 14/16] drm/vkms: Allow to configure connector status Date: Thu, 16 Oct 2025 19:56:16 +0200 Message-ID: <20251016175618.10051-15-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Allow to store the connector status in vkms_config_connector and add a getter and a setter functions as well a KUnit test. This change only adds the configuration, the connector status is not used yet. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli 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 b0d78a81d2df..d75a6252e4d2 100644 --- a/drivers/gpu/drm/vkms/tests/vkms_config_test.c +++ b/drivers/gpu/drm/vkms/tests/vkms_config_test.c @@ -957,6 +957,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, @@ -978,6 +1001,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..4c8d668e7ef8 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_connector_set_status() - Set the status of the connector + * @connector_cfg: Connector to set the status to + * @status: New connector status + */ +static inline void +vkms_config_connector_set_status(struct vkms_config_connector *connector_c= fg, + enum drm_connector_status status) +{ + connector_cfg->status =3D status; +} + #endif /* _VKMS_CONFIG_H_ */ --=20 2.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A5E78328B48 for ; Thu, 16 Oct 2025 17:57:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637423; cv=none; b=CMN9aR4Edvd9BaIg9EFq3pJsQMwBUTtLP4sFHPx7G59JlFXpcWt6FPoaC3rgZGgRL1vBBO4z0+0sdpkFfkwFx97VCJi+rWNx5RqYN+JY6+KwWEFYV/9FqhjN7PTjvm35USMjpzUyCcwB6Tj5QgcFCPa2EsxG6U14yLiuw4DDVMg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637423; c=relaxed/simple; bh=ONvd2tAkw5VGV2s5p+03PoGz3Ss16BKDxJJJA8FMbf8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=CLARjbZTEpcd+WYLcI7gD80+aUCulylKRvdsJXRa/ltrHZeXmJQVXncho+HwOZUqPYbblYLFettFC8t3sHZnjUuZXiBVGJFIgDEJzP/6FyGSttIBSERAuNRvZgEHWnzeF91fmV+ZkJdQQGSzik3gnZexKOIrW0jluCdkSFKGfXI= 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=jIeQBPhQ; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jIeQBPhQ" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-42701b29a7eso465042f8f.0 for ; Thu, 16 Oct 2025 10:57:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637420; x=1761242220; 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=YOeIZT+0nowAboOM15YWTpcZn2OOxWAKh4lx00a3ZV8=; b=jIeQBPhQiA2qjnBZy7t3ZeCdGJi7RNYnYNXl2ebEaWK4yMrMzDoXpF+fCjIqn2U/qz 379YR/h6+YpDtWWYFsQ8A1z8XBtj1e9Q44biHzsA9L9sRJTHrp1DjdHKoPHAeLaVEDve ixDwJVaiEOfecJhZCdCDby1DEe8ZzvOqHtoNuybyRG7II885HYnH7CwYTV2jJn8T2PJw oPYSX8JKlBTPnZZNSnYLfEzfHUrl+W1lhrNZMts4djNtEv2N9h7/jwiPUdobyyDDb7sa TjcwFVaLekWDm1aX+DSPEpm6P3RfiPb5irucRk9CbKISjyNYNFkyyYE9+Kl/xO0KsK42 SBQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637420; x=1761242220; 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=YOeIZT+0nowAboOM15YWTpcZn2OOxWAKh4lx00a3ZV8=; b=wsGUzYTmtelZe0beKQSB3l6daBpWmGsH2cX0nO/U5DmCJ3dSMUruCOQfAFUPxlcfwW P/SxMdGLvdlEc+HiMz0YVZw7JBQcnQNwSsy1XyHDwlaP510+UZHomeWNLbkHfXZVpLVY iT2yBpQ+7lmV8clFulXjsQxC9te9vuql6RU4w0lpTyjfVqewyMLf43jyZ/3WkqEy99g2 UDragbpwqGSNXM42mKI+cDBrZEmLCiUE8xBpazj21x3p6FivqEm6vCMk9feV6PBvSqSI fw1SNwhfzU5kXQNdYTWd5Hm/iwIjFoMLVL31pTyjmy1t8Mh18EjA4x4E8j/9JjDn/VFp nq8g== X-Forwarded-Encrypted: i=1; AJvYcCWaXICO73zRRGk0A4Y4maT8ASKEla9b3TQVAu7NywquneFlIWucxQX9iF1T7pIbkJBH/9wljthDo04EwJg=@vger.kernel.org X-Gm-Message-State: AOJu0YxPaGAzwIoOQWVEgWe8teG2XuuztdymNd6AiM4Iu8VogIPUu3Cn xKy9MecQDEcktm2/VZgcVQlpbI/yk/qok9c9QWLSmsXCIWi6zMZGlHNG X-Gm-Gg: ASbGncvEEjhfYzRIhHOU2ViUQDxd4kUFNOxIEgDbp8RRAIZqj7V8TvA3+Un9hcEXKbG 2YkuQXTowKdHw08Iri+hQGI84cDpUF0AkgrABfo6f3ZPQaKND8QCKVDKe18FgjRg5eKiGnuCIh9 0AjU/1/O1fBRagEZevHHDyaePw/jx3+2ZR2pdN3JQpg2FXk8QSlraYJlh1S6Ulzf0jYYFJFKocU 1OspmU74lv7ZwqHLvkp1ZzWi8vpZQUTqzl1cYU+TbdjDvtnAo8J+c2P2v5zCGLCK4qxXJINnZYO 9wSQlNCkH0U3m4VoAbG4NOemOW+4e/iKEV4JlnKxJV0X6m44Dks0Vp7cIhxLKWoN8SnnGv5j7KE MPDAsPCYMGdHY78RhzwuLQgIMyqS9AMSsoCaEJz6OJbo4RAy6ia9o45B+ULoHVgXQuRv+7T0VV1 c= X-Google-Smtp-Source: AGHT+IHe1OLOXOadpXnjRw98pZ3luRk/lvOuNRj9YhMuqiInrVYkMFOqFCyNrXu08kVK/1fJT5i00w== X-Received: by 2002:a05:6000:144e:b0:426:fb63:c01f with SMTP id ffacd0b85a97d-42704bf71ecmr887370f8f.29.1760637419784; Thu, 16 Oct 2025 10:56:59 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.56.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:56:59 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Mark Yacoub , Harry Wentland , Luca Ceresoli Subject: [PATCH v7 15/16] drm/vkms: Allow to update the connector status Date: Thu, 16 Oct 2025 19:56:17 +0200 Message-ID: <20251016175618.10051-16-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Implement the drm_connector_funcs.detect() callback to update the connector status by returning the status stored in the configuration. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli 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.51.0 From nobody Sun Dec 14 06:18:53 2025 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CD87532B994 for ; Thu, 16 Oct 2025 17:57:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637425; cv=none; b=jWRcT/z0iyDqKg/eVjDXeNJzYP+qAHaBhSOuH60OSU5TpAvry2hWQAR8mWtGByUFafAME5FtXBpXDSESsUXf3iEpORAcEI5uowmfnGLuz8GaXkofPBFKHWOi5syzt1IeCh5n9RVa2s54ZGwOnNW30oTtuUrtsdlkjrdaJ50Zs34= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760637425; c=relaxed/simple; bh=9e1TIPN8/Y9PfCOEwmK8PGcA4SPQ18uPd9sxQu2V7PM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NnkoZYnV3UU40QXqGMCCkGsTN2D/o+tUjEthFdhsN2kiiDOCDjhaOKiP46gWU16u8D4+J61BQ/2iH+fQbsBFQ00emqIwJUKNwJFDXNDhOjBlncM8289L/R6JoXwFkY3mU2titSZyaDo7Wx/3R6kDHORD9WzkgSeHFgYcXnzfN14= 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=kzmNhNuu; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kzmNhNuu" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-47112a73785so7507885e9.3 for ; Thu, 16 Oct 2025 10:57:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760637421; x=1761242221; 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=7GWwM20gq7xOoxyKkWmC1LXSVhNHxFS/9ynoMAJqd3o=; b=kzmNhNuujSq6FZwBXJjOxMW5E+g4AMR6pKUn0Bdl5d1bu0TwsAiz8pAB/s5VKXAI4x zyammSisff7H+nDuTZarVJTOYRE3uEzdZRs8nAX0i0MHCKGDvHiyggyu7E43rzWVbnsS IHAdEG2SsZ9OD7uufGA3TP2H1aRd+ouB5uJlXdB+YLD/y1aRli63xTY6chWrJj7YP4yx c7eLwm2QbqzbnhDAjD+N3WEnT5IuOXD5BonFUv+ZAtDyf9EwpH51NII5cuvf43AAv0dU 4C09MAfTuRfMWBksGmHVmbHJFuB5WwEXYeNbwtQNOlLSwIBFjgys0/TMA99mUF4c//4J muSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760637421; x=1761242221; 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=7GWwM20gq7xOoxyKkWmC1LXSVhNHxFS/9ynoMAJqd3o=; b=w/a16pq3NkwN0sIezfdojAmPPGFUsG5/z1M3xj8ovNJC/Z0gtzKyuS3eI9bBTLnL4t 0/oD9HF0ZwNptUHGCjdY3IfvAirBPKHA3GWf9dTCSbeozb6DQ7XDKE/VzoI6w8IVLIFO dtv1+NlDhvrgk5wX4rEg7jz9oG479F+Rw5v4hz94/mZRjH2Jke5QrfzlmYrbX0JmvqsV t1Fbdx1JcxSQpMCsWUS8fekqEJ0l5zWPrXK1zuyjdix1JoD3OV54zyXC7zCPbTaYd0Eu 4bsk+8+I1C4ElhCc5Yu8/C38egotv5bQl3ryuRNMaSUQvdRsDkZ7wzapgsuKbdLHvOjT UJEw== X-Forwarded-Encrypted: i=1; AJvYcCU88NnzcEgtduM1zb+8F/H25945dj2QvOVG47vd/VneOH3ahwNNnnc8+sWS0Ok0QVH4cn82dWkgARXSPa0=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4shujEHbyyNewE/CsWq3X0409E8wtgCERtQiTg7lQkICwTuX8 bGBLkHdf9bH0EMhgtBU6Q6yS1XFtN+oeKkbJWdJsKFaPigqU+lfpSIPG X-Gm-Gg: ASbGnct4TULeCqCnHRiO95p67nBP0Sutqm8/CMbm/SIrQqYbwUfdX6HbrESv8O9e0vK HFmOqPbrQALW1mL1ZT079HXraxe7khthBYHvSBI4Oddk2iqn90APgPvuGiEUyJhH80IywHiHfDo eAKwcKBsXHmKccQn6HLD4qd6B6aKxYzZc4ZDK7vAz7gYp2zBYZtXC6ZbclBbqe+R6b+BHoVZG76 MOqbJW06Gkw45m/H4a1hPGSlfQ8cPljch/ysf2rOya/03Nrqwt7gXQ0yNlf6eTkfNaN43Yvhobv 9FobCJlbEe+hosmjos66RDEF08pTOFAwv5Wm6obs6f8H+ZC5HLKIaWl7nGtzpXaWqK31E/hbT55 cG3kS9p+hydEkeFx2eWemJTSntXwsM0vYpd5KcdQzyUDO5UWjXvhTFJHFVuJpEYAMStB7beDBHz e2AHuduJ2JPQ== X-Google-Smtp-Source: AGHT+IH53BhaYro8jyKEDI34s3L9q4RglYQK6QZS8yLxmdbAtqWCu455uCzIhrqElW+V6d1h6xnYuQ== X-Received: by 2002:a05:600c:3492:b0:46e:33b2:c8da with SMTP id 5b1f17b1804b1-4711791cadfmr9916985e9.32.1760637420904; Thu, 16 Oct 2025 10:57:00 -0700 (PDT) Received: from fedora ([94.73.33.104]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-426ce5cfe74sm35344023f8f.35.2025.10.16.10.57.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Oct 2025 10:57:00 -0700 (PDT) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, sebastian.wick@redhat.com, xaver.hugl@kde.org, victoria@system76.com, a.hindborg@kernel.org, leitao@debian.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= , Mark Yacoub , Harry Wentland , Luca Ceresoli Subject: [PATCH v7 16/16] drm/vkms: Allow to configure connector status via configfs Date: Thu, 16 Oct 2025 19:56:18 +0200 Message-ID: <20251016175618.10051-17-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251016175618.10051-1-jose.exposito89@gmail.com> References: <20251016175618.10051-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When a connector is created, add a `status` file to allow to update the connector status to: - 1 connector_status_connected - 2 connector_status_disconnected - 3 connector_status_unknown If the device is enabled, updating the status hot-plug or unplugs the connector. Tested-by: Mark Yacoub Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland Reviewed-by: Luca Ceresoli 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 364b574a8cae..3574e01b928d 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -108,6 +108,11 @@ Last but not least, create one or more connectors:: =20 sudo mkdir /config/vkms/my-vkms/connectors/connector0 =20 +Connectors have 1 configurable attribute: + +- status: Connection status: 1 connected, 2 disconnected, 3 unknown (same = values + as those exposed by the "status" property of a connector) + To finish the configuration, link the different pipeline items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 8e90acbebd6a..07ab794e1052 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -7,6 +7,7 @@ #include "vkms_drv.h" #include "vkms_config.h" #include "vkms_configfs.h" +#include "vkms_connector.h" =20 /* To avoid registering configfs more than once or unregistering on error = */ static bool is_configfs_registered; @@ -512,6 +513,52 @@ static const struct config_item_type encoder_group_typ= e =3D { .ct_owner =3D THIS_MODULE, }; =20 +static ssize_t connector_status_show(struct config_item *item, char *page) +{ + struct vkms_configfs_connector *connector; + enum drm_connector_status status; + + connector =3D connector_item_to_vkms_configfs_connector(item); + + scoped_guard(mutex, &connector->dev->lock) + status =3D vkms_config_connector_get_status(connector->config); + + return sprintf(page, "%u", status); +} + +static ssize_t connector_status_store(struct config_item *item, + const char *page, size_t count) +{ + struct vkms_configfs_connector *connector; + enum drm_connector_status status; + + connector =3D connector_item_to_vkms_configfs_connector(item); + + if (kstrtouint(page, 10, &status)) + return -EINVAL; + + if (status !=3D connector_status_connected && + status !=3D connector_status_disconnected && + status !=3D connector_status_unknown) + return -EINVAL; + + scoped_guard(mutex, &connector->dev->lock) { + vkms_config_connector_set_status(connector->config, status); + + if (connector->dev->enabled) + vkms_trigger_connector_hotplug(connector->dev->config->dev); + } + + return (ssize_t)count; +} + +CONFIGFS_ATTR(connector_, status); + +static struct configfs_attribute *connector_item_attrs[] =3D { + &connector_attr_status, + NULL, +}; + static void connector_release(struct config_item *item) { struct vkms_configfs_connector *connector; @@ -531,6 +578,7 @@ static struct configfs_item_operations connector_item_o= perations =3D { }; =20 static const struct config_item_type connector_item_type =3D { + .ct_attrs =3D connector_item_attrs, .ct_item_ops =3D &connector_item_operations, .ct_owner =3D THIS_MODULE, }; diff --git a/drivers/gpu/drm/vkms/vkms_connector.c b/drivers/gpu/drm/vkms/v= kms_connector.c index 89fa8d9d739b..b0a6b212d3f4 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -87,3 +87,10 @@ struct vkms_connector *vkms_connector_init(struct vkms_d= evice *vkmsdev) =20 return connector; } + +void vkms_trigger_connector_hotplug(struct vkms_device *vkmsdev) +{ + struct drm_device *dev =3D &vkmsdev->drm; + + drm_kms_helper_hotplug_event(dev); +} diff --git a/drivers/gpu/drm/vkms/vkms_connector.h b/drivers/gpu/drm/vkms/v= kms_connector.h index 90f835f70b3b..ed312f4eff3a 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 +/** + * vkms_trigger_connector_hotplug() - Update the device's connectors status + * @vkmsdev: VKMS device to update + */ +void vkms_trigger_connector_hotplug(struct vkms_device *vkmsdev); + #endif /* _VKMS_CONNECTOR_H_ */ --=20 2.51.0