From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BDE4319D898 for ; Tue, 25 Feb 2025 17:59:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506386; cv=none; b=oXKQ/HpV6T6f5Xt7WiL/d9RFyfQ+oRSEX8cNXzonyK1uyCSygEmQX9kyFfvjaZVFnStrETlA2m6wjG1pNB7FYQiARa094YZp5P4Z2aRBeANCSmyoL1kw/CjIsYynEpEfj6tDUXSm1oCv/aR4uDIKRRiFrQIxaa3n1LySKsO/cB0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506386; c=relaxed/simple; bh=x8q2LQoaUnOBaiP5jsGvS/C96mTK7nmUfaD9bWRUJsg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=vEopilnk5mRmvXaOxP1gsaN1kbgbmDK/wk0d0nzcDwPoCxmmDawVXJooOjTCGGWjGrvtT9yAvkzAPDNSUGgCPi4v2S84f6GjM1ZBUAaLgKtSR2xWjT1Cw+YKBR3dAHC+QwgDM4ET5p/QlUWQNTuGSyBAWF95uG+Yd+Icj5ec7Oc= 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=WefaRd7P; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WefaRd7P" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-439846bc7eeso37847605e9.3 for ; Tue, 25 Feb 2025 09:59:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506382; x=1741111182; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zDEi+IB29m5kaXCQs1Xh/NAR1EeJ74QIHesF2OX+9WQ=; b=WefaRd7PVvn2lGzK2n9XrXjYSJE8s64MYkUe2XtfNRm8zfd+wEMDnqogIH5eotzy28 9A9uzblydUlOOqGdC2OQR3B6r4Dq9l3znxHnAsiVSyRgpu/lKzuUpFuK8rWq2RajsfBI ZpxNMGXiugR99R3UWMfRr9hn4gDmG+pHOChGlX5ua0hGEKCtZy0287N16UWdW4Re9UO+ AyxDRGjz95i38nyI3Fxsj2YXVUvABvVRDtPipY7IL2D3r0K9ukuhjOnzeFW3kcA3XWBQ Vo6lPMeVEfJhsicGYhxJKQzpwBuRQjFkRe53ocyFrBzqy2+sTENf2j41dI8I7mbNRkTz on3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506382; x=1741111182; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zDEi+IB29m5kaXCQs1Xh/NAR1EeJ74QIHesF2OX+9WQ=; b=OIkcwvAiG3A3F2KW5/SWo/vqyrI1pgnkf/1vCPpMZchZivuxt20i/I27kp8yoawKUp y4SFLqzZB1LC+qlDSXvaEDEiI/sQ+XTGprBF/oEcggCXFVXKUcCcKmzzfOJG9UEGgZYO JtB8coys5LtVDuaYEkDWDux61krXx/wQgLqXQytAhR1H/M2u9cafr5mYEqzF+YnBmHY4 mVwbOqovuxR6w6n7Ca0e2IHYVwJWU40SW50FfHqN8L5P7q05Y3bcYj6pgkirkLMhSgMD QBelnLcvSRRMN5f4JhjhnInA4KjxIQH/6NMztI6i2yQw+WokqKvla6m+a7tUUk1+epCe 0g5A== X-Forwarded-Encrypted: i=1; AJvYcCVdQyHeXjaL2Ou4tlknScLiSUzhwMjT3uLEAyEH5LSR7F69IiYogsZ14jyWIntMcQFzDWDfhFIO7szbZvA=@vger.kernel.org X-Gm-Message-State: AOJu0Yxecfi2vbtFUJfhgl/mhSzWMofyWXU1c99P0kcmgg65xAS5cGxy 4uFCGoNJhMzu8u70rByvwZ5X4xHVuKIIaWdPmcKwg+u6eYadYBDh X-Gm-Gg: ASbGncueH7ZLgce0Rr+Ekie+WQCidotTYscwZ7Tts+kUXZZHK4EKf7h5jxT6+R2cdMX 6k1uzyFWVDv47T0UeuJ0BhrIiIZFvO9TIAeY9N9WvceYDFLShHqJsGeWGpZWNNuqnBJh+DtWBzI jWiGQyexZcmDmWbCuPf2W2AmdAagfyx0iOQMyXSet5BqV+mulmkQXSYC3x3cvOIEapPMH1jxJL6 zsa4bZVHmWkH1K8oUwpGgEd6quHUKYLK22EJtq4kfphZwI13jFu6LiKhET+oVai4uv0T/0x/9he stGK3ckktgMI/vGG1pDppmEbGS/l X-Google-Smtp-Source: AGHT+IGLk9bjzumLU58MNpaygHhKj7RjQYegcaCcfgsinAKj5M6r6P6pmCzsRocIk9CriKFeU9tX1A== X-Received: by 2002:a05:600c:4f0d:b0:439:98ca:e3a4 with SMTP id 5b1f17b1804b1-43ab90169d5mr4187105e9.19.1740506381786; Tue, 25 Feb 2025 09:59:41 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:40 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 01/16] drm/vkms: Expose device creation and destruction Date: Tue, 25 Feb 2025 18:59:21 +0100 Message-ID: <20250225175936.7223-2-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable In preparation for configfs support, expose vkms_create() and vkms_destroy(). Reviewed-by: Louis Chauvet Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- drivers/gpu/drm/vkms/vkms_drv.c | 4 ++-- drivers/gpu/drm/vkms/vkms_drv.h | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_dr= v.c index a24d1655f7b8..23817c7b997e 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -146,7 +146,7 @@ static int vkms_modeset_init(struct vkms_device *vkmsde= v) return vkms_output_init(vkmsdev); } =20 -static int vkms_create(struct vkms_config *config) +int vkms_create(struct vkms_config *config) { int ret; struct platform_device *pdev; @@ -229,7 +229,7 @@ static int __init vkms_init(void) return 0; } =20 -static void vkms_destroy(struct vkms_config *config) +void vkms_destroy(struct vkms_config *config) { struct platform_device *pdev; =20 diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_dr= v.h index a74a7fc3a056..2ad8e3da3b7b 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.h +++ b/drivers/gpu/drm/vkms/vkms_drv.h @@ -223,6 +223,26 @@ struct vkms_device { #define to_vkms_plane_state(target)\ container_of(target, struct vkms_plane_state, base.base) =20 +/** + * vkms_create() - Create a device from a configuration + * @config: Config used to configure the new device + * + * A pointer to the created vkms_device is stored in @config + * + * Returns: + * 0 on success or an error. + */ +int vkms_create(struct vkms_config *config); + +/** + * vkms_destroy() - Destroy a device + * @config: Config from which the device was created + * + * The device is completely removed, but the @config is not freed. It can = be + * reused or destroyed with vkms_config_destroy(). + */ +void vkms_destroy(struct vkms_config *config); + /** * vkms_crtc_init() - Initialize a CRTC for VKMS * @dev: DRM device associated with the VKMS buffer --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 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 BC0E219D892 for ; Tue, 25 Feb 2025 17:59:44 +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=1740506386; cv=none; b=F4Fzv9eQeXrcnJ+yvEIiHqSMw5ZHlI+T1MOZqJRsueGMP8xCmrm7WSAAvnN+88JMWCuPU4hEhpVdbyVCrozBB7MW89B5b3C38mi2wuutDokfgRbHlom6ehhBQReC9zul32DRyIU5/4hv1fFXuj6Z8NrXH9L3vNndU9nmNu8cov8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506386; c=relaxed/simple; bh=8EDThebWThe1S8U1MYjtnfDUocCJGT116mhpuWBszAM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=XbdFnklsIkKCWXiB+sev8BfXiOdYC9MfyrUT9QlnZscDDiGsrEhYgUQ7dZ9EFT/NOtYjHOZpxHh3NpWb4qTcQu52P2frVy7wtPrnNk5v8dKTz+zAInTYN4xttWOqO0xhJNuhHlknFgdfE1fQytGUYDUOKF1zC1IBEXyiIIN4kXw= 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=JUGYnstr; 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="JUGYnstr" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-38a25d4b9d4so3422679f8f.0 for ; Tue, 25 Feb 2025 09:59:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506383; x=1741111183; 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=HwUFYj9lX6AbtJacLuV777Jdbit64p1AUoia1eEq0TE=; b=JUGYnstrcPeHbSoLSbIgDvoORSlCfTV82ZP+tQfkdsortuEsfaqSmq89HzSuauCbof XNYvejsAPUfTvwhlA/ZJiKoBpfx4rvPCItDKr+32HIfyKpoYRUpYcgsnF1S1fcfOBR53 D++2B/0ZvLw88yjGhIubJgass6FidrPJUWXkVOZz3kUokwpWmdfpCxHZKE878sWzBgdi mKawdqjrLNjlottaUk2n+n75Mtk5lxgPJUY0b2UkyzLAWhGQ9fQMLPg4YWqQ2iZSzjkV YluzZ85NPQ/dB9NS6HE7AsbJDOljci6n2oaie7OV9dZAzTVu2rmpdoo/6dPFKdtpqk/8 R3yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506383; x=1741111183; 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=HwUFYj9lX6AbtJacLuV777Jdbit64p1AUoia1eEq0TE=; b=DY+IYn4xFmtzHcObMxgt4/XeaQKP/Q/dXYk7LAtx6O9IhTFd93mdWvKASdD2yqjwto tMcN/vnChktqHPa4BvLNW+DCzN6KT0GD9EMASBPnMlUjkq9a+iYfOz6YqCfY6ZrHgr46 JgfpkUin4+BwDOsVUZfa9F8oSnu3vZCFqzcdDuEZ4tx0SnulzemBX8bjfTHV5fJAfO6C KARWwzNvLrumQxTsAS9npd8lIE2sruz2BlpLyricHegSKOV6F1B15MbZd0dX67YzNubt lE69ZTM2O+/yIyJ29bEkGlxGld2prxBI8Cdwau64tMXDBGhT/VkfwNgVg109DCLRBQay ldqQ== X-Forwarded-Encrypted: i=1; AJvYcCXW8C9207kTAADsnxL7Wm7hjbeG6a+sgoPcKPH4dC5EepAIwiSam9zVu7sozpROi48/yxh3JbMKOyZgZiA=@vger.kernel.org X-Gm-Message-State: AOJu0Yzy2Y2Qqg2VPqCeWsThGvyJEIzuC1YXrIpHKMh1S9XXUh/1A1rp pXi9jtYULrCxSANGohMv9v/cO+waxSGIzMHMqpkK5G7iRgTDEMW0 X-Gm-Gg: ASbGncs4xIkswuCGV2ax30cSg+jb+8+MAnmd5di4k4Ga90l0W3o642QM4u49+2dsFsT mik/LTVQFkK9JcwiSexKcaTouUd/sht/TaPAIMz0IO4hZoJZsq3FMOnX6iiMmTN7uBrF0xqz/81 2GMf01EDzjmJA4ZBsrw3ie8atnL5sbG8Yi+Icm2VvflJzmBCr3NqtpLWdSTwaXy04ISidPTeNgq SeuAIQ7nBKmEuQZQhiAYUdno4BFZDlSmAYNmhiEUDiPGy12PiYHsmBUpNNQD/bR1K7lEThqzoaY +ZKuxdSFEf9j/ywCCSDiqm07Tznw X-Google-Smtp-Source: AGHT+IGmB9ohZkLJUkHLZZRAc91PWdg4gVD+hN0GNDoxwSFhf/3qEImdOZeZRijhFSChhV9ImkzeQg== X-Received: by 2002:adf:e912:0:b0:38f:24f9:8bac with SMTP id ffacd0b85a97d-390cc60c1f9mr3314768f8f.23.1740506382914; Tue, 25 Feb 2025 09:59:42 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:42 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 02/16] drm/vkms: Add and remove VKMS instances via configfs Date: Tue, 25 Feb 2025 18:59:22 +0100 Message-ID: <20250225175936.7223-3-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Allow to create, enable, disable and destroy VKMS instances using configfs. For the moment, it is not possible to add pipeline items, so trying to enable the device will fail printing an informative error to the log. Reviewed-by: Louis Chauvet Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 32 +++++ drivers/gpu/drm/vkms/Kconfig | 1 + drivers/gpu/drm/vkms/Makefile | 3 +- drivers/gpu/drm/vkms/vkms_configfs.c | 169 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_configfs.h | 8 ++ drivers/gpu/drm/vkms/vkms_drv.c | 7 ++ 6 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.c create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.h diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index ba04ac7c2167..423bdf86b5b1 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -51,6 +51,38 @@ To disable the driver, use :: =20 sudo modprobe -r vkms =20 +Configuring With Configfs +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D + +It is possible to create and configure multiple VKMS instances via configf= s. + +Start by mounting configfs and loading VKMS:: + + sudo mount -t configfs none /config + sudo modprobe vkms + +Once VKMS is loaded, ``/config/vkms`` is created automatically. Each direc= tory +under ``/config/vkms`` represents a VKMS instance, create a new one:: + + sudo mkdir /config/vkms/my-vkms + +By default, the instance is disabled:: + + cat /config/vkms/my-vkms/enabled + 0 + +Once you are done configuring the VKMS instance, enable it:: + + echo "1" | sudo tee /config/vkms/my-vkms/enabled + +Finally, you can remove the VKMS instance disabling it:: + + echo "0" | sudo tee /config/vkms/my-vkms/enabled + +And removing the top level directory:: + + sudo rmdir /config/vkms/my-vkms + Testing With IGT =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 diff --git a/drivers/gpu/drm/vkms/Kconfig b/drivers/gpu/drm/vkms/Kconfig index 3c02f928ffe6..3977bbb99f7d 100644 --- a/drivers/gpu/drm/vkms/Kconfig +++ b/drivers/gpu/drm/vkms/Kconfig @@ -7,6 +7,7 @@ config DRM_VKMS select DRM_KMS_HELPER select DRM_GEM_SHMEM_HELPER select CRC32 + select CONFIGFS_FS default n help Virtual Kernel Mode-Setting (VKMS) is used for testing or for diff --git a/drivers/gpu/drm/vkms/Makefile b/drivers/gpu/drm/vkms/Makefile index d657865e573f..939991fc8233 100644 --- a/drivers/gpu/drm/vkms/Makefile +++ b/drivers/gpu/drm/vkms/Makefile @@ -8,7 +8,8 @@ vkms-y :=3D \ vkms_composer.o \ vkms_writeback.o \ vkms_connector.o \ - vkms_config.o + vkms_config.o \ + vkms_configfs.o =20 obj-$(CONFIG_DRM_VKMS) +=3D vkms.o obj-$(CONFIG_DRM_VKMS_KUNIT_TEST) +=3D tests/ diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c new file mode 100644 index 000000000000..92512d52ddae --- /dev/null +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -0,0 +1,169 @@ +// 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; + + dev =3D device_item_to_vkms_configfs_device(item); + + guard(mutex)(&dev->lock); + return sprintf(page, "%d\n", dev->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; + + guard(mutex)(&dev->lock); + + if (!dev->enabled && enabled) { + if (!vkms_config_is_valid(dev->config)) + return -EINVAL; + + ret =3D vkms_create(dev->config); + if (ret) + return ret; + } else if (dev->enabled && !enabled) { + vkms_destroy(dev->config); + } + + dev->enabled =3D enabled; + + return (ssize_t)count; +} + +CONFIGFS_ATTR(device_, enabled); + +static struct configfs_attribute *device_item_attrs[] =3D { + &device_attr_enabled, + NULL, +}; + +static void device_release(struct config_item *item) +{ + struct vkms_configfs_device *dev; + + dev =3D device_item_to_vkms_configfs_device(item); + + if (dev->enabled) + vkms_destroy(dev->config); + + mutex_destroy(&dev->lock); + vkms_config_destroy(dev->config); + kfree(dev); +} + +static struct configfs_item_operations device_item_operations =3D { + .release =3D &device_release, +}; + +static const struct config_item_type device_item_type =3D { + .ct_attrs =3D device_item_attrs, + .ct_item_ops =3D &device_item_operations, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_group *make_device_group(struct config_group *group, + const char *name) +{ + struct vkms_configfs_device *dev; + + if (strcmp(name, DEFAULT_DEVICE_NAME) =3D=3D 0) + return ERR_PTR(-EINVAL); + + dev =3D kzalloc(sizeof(*dev), GFP_KERNEL); + if (!dev) + return ERR_PTR(-ENOMEM); + + dev->config =3D vkms_config_create(name); + if (IS_ERR(dev->config)) { + kfree(dev); + return ERR_CAST(dev->config); + } + + config_group_init_type_name(&dev->group, name, &device_item_type); + mutex_init(&dev->lock); + + return &dev->group; +} + +static struct configfs_group_operations device_group_ops =3D { + .make_group =3D &make_device_group, +}; + +static const struct config_item_type device_group_type =3D { + .ct_group_ops =3D &device_group_ops, + .ct_owner =3D THIS_MODULE, +}; + +static struct configfs_subsystem vkms_subsys =3D { + .su_group =3D { + .cg_item =3D { + .ci_name =3D "vkms", + .ci_type =3D &device_group_type, + }, + }, + .su_mutex =3D __MUTEX_INITIALIZER(vkms_subsys.su_mutex), +}; + +int vkms_configfs_register(void) +{ + int ret; + + if (is_configfs_registered) + return 0; + + config_group_init(&vkms_subsys.su_group); + ret =3D configfs_register_subsystem(&vkms_subsys); + + is_configfs_registered =3D ret =3D=3D 0; + + return ret; +} + +void vkms_configfs_unregister(void) +{ + if (is_configfs_registered) + configfs_unregister_subsystem(&vkms_subsys); +} diff --git a/drivers/gpu/drm/vkms/vkms_configfs.h b/drivers/gpu/drm/vkms/vk= ms_configfs.h new file mode 100644 index 000000000000..e9020b0043db --- /dev/null +++ b/drivers/gpu/drm/vkms/vkms_configfs.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +#ifndef _VKMS_CONFIGFS_H_ +#define _VKMS_CONFIGFS_H_ + +int vkms_configfs_register(void); +void vkms_configfs_unregister(void); + +#endif /* _VKMS_CONFIGFS_H_ */ diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_dr= v.c index 23817c7b997e..5bcfbcb6c0c5 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -28,6 +28,7 @@ #include =20 #include "vkms_config.h" +#include "vkms_configfs.h" #include "vkms_drv.h" =20 #define DRIVER_NAME "vkms" @@ -214,6 +215,10 @@ static int __init vkms_init(void) int ret; struct vkms_config *config; =20 + ret =3D vkms_configfs_register(); + if (ret) + return ret; + config =3D vkms_config_default_create(enable_cursor, enable_writeback, en= able_overlay); if (IS_ERR(config)) return PTR_ERR(config); @@ -250,6 +255,8 @@ void vkms_destroy(struct vkms_config *config) =20 static void __exit vkms_exit(void) { + vkms_configfs_unregister(); + if (!default_config) return; =20 --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73EB919D88B for ; Tue, 25 Feb 2025 17:59:46 +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=1740506388; cv=none; b=cFlNFJ+ohMlcxDL35njyW3yWbZBRvQwanhqS1pfRo3Tkz9INSzjSZKh/ePSdxr+G0QcXgYb9RyYi40xFDh2tdJoVZm+wSgmuUAg6c1luEOvdwQaFEWZtPkYf3KxtQ0AvUDdrG59OIXXncLJcqYVtSrT752YMVHrUqVeihmDruk0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506388; c=relaxed/simple; bh=ctqaUOq1M6An9ej38Z0g62G3F301i5GYhVLvHQCzSdE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ohsgVXn6eX+vRMhIeZVfWDfzpmIg1jYSM+xw6iPTiwXO4jQLzgBpfzJFrc7rI3HlhJ0hqG2nGynHkYIsK4e2Bq9ocUZZZUcw+3mG9SItQgUjm+A1Enkr+lElDMwmb10HU7CU9Lha96EShix+HCX4zhRDOh7/xpGPiSCCHVzSg7s= 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=OjIIeNJU; 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="OjIIeNJU" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-439950a45daso37460655e9.2 for ; Tue, 25 Feb 2025 09:59:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506385; x=1741111185; 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=g4KkuzN3YdsW2noIqZOCpqoqa4GrMlri4rj4Q/z0qqo=; b=OjIIeNJUC27Lh4z+U1D6h6W3rYUI6Tv7vyXiz/Y9Yezgw9g6RIubmsrXa4yTv3nPbz F62SDntcUkQsQ2BHOtR8kfj9C9hYREppQmnt8kgMNfZ+Ip45VZXmTm+WoN3kExH21yqS HZbUTDaGcsu9zZxCvfrTcBI/AFd/y6pOFL60YxmXR3LHdRdDkkV4iHsT9XywJ8DCdicr 37oVRfwBXt4UDhGMPIm8VfH5GZDt6LWr6QAWxlEX6WYPY64GM1ChyEWNLclBPPsK4/59 KBc3jPkYotoxmC6XU+EdDQdYfxYjwTgRgHHq4SyieQVWOiG25cgRJeREICNPL4TTP6rq 1Shg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506385; x=1741111185; 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=g4KkuzN3YdsW2noIqZOCpqoqa4GrMlri4rj4Q/z0qqo=; b=CEeBjkarScLFMuaEA+kafcGKJ0wW0nWtYhm4kb5YMRvinN7q+ScBpk5qBJG+RKZoY0 wO35MaxRlrsmgiNr/9GvILyXNydnM2B4edQUcVq9xdwvdvugNbjGuazducVsBh8Gzu+I ZI380FXaeASNmy3Lfc0DflvURqIo4Euv/HwE4VDSS2xMT2DHUfVRvvwQOO+HUoDoUicd AaAH80tkxMef53V1T0ce/FD4s1USbIEPbwFcMWSEIwqhRy+QLQiLEMqEDObEtUX96AjY qlx4CihHv1VF5xnRz6rO5gluhW2GQ/nRvFJ1mmDOnWo49ErNBNGALsCm2bsS8GQDyGim Z9vA== X-Forwarded-Encrypted: i=1; AJvYcCUJbOjqxhNl51uUspR6ck8h0vByAaufoEzkvkNlDC3XRoftjR2QC/puZGBh3d+ASNeRxS2DXvGzxI0doI0=@vger.kernel.org X-Gm-Message-State: AOJu0YzGrXAvVRFjYTdO8Zfu0tVDrdDLz6fQ5GpHXr0Oj2WGxR9qJ3M6 obxScgfA6Ti0qigMX2gdImi9putHa0b9aYgiVN2hFwtbc8alfR1L X-Gm-Gg: ASbGncumVDvnGWNtnnEuCUFmxGESXzgf4KabbW7YB3yzFFRTv6G8BIEUjcfYz6IJ5eg qmc1j1x7VnnLUIJOr+OYK/R6E8z8AaATQw3kLCy6BR/aQIrsbW8KJfwfghrfgMzcodpfudPbyAZ j7ztmXgXKA50nQiT9yE65zXXuY2SG9PYVJOP6Ap82w2PiZ7l0BBtQ0cSuO7svrYesMeQQ/nLkbS N8qR1n4FyYWfq8zFIUOqOJSBs596KpfoqZVGfW1h0jH/EhbVtseOF6qJYxeD7quykUxNzht8pKI QQoo70FKdx6xQvdtO5Eognu3plNq X-Google-Smtp-Source: AGHT+IHo42lY7FnvR0p1Ete6FL/ExPhlesqNSGcsVd2G9FTBSK+yI0MIu82ukvvcb1oHod4TNQdN6A== X-Received: by 2002:a05:600c:198e:b0:439:9e53:49d8 with SMTP id 5b1f17b1804b1-43ab0f979cdmr45977615e9.30.1740506384463; Tue, 25 Feb 2025 09:59:44 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:43 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 03/16] drm/vkms: Allow to configure multiple planes via configfs Date: Tue, 25 Feb 2025 18:59:23 +0100 Message-ID: <20250225175936.7223-4-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/planes to allow to create as many planes as required. Reviewed-by: Louis Chauvet Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 16 ++++- drivers/gpu/drm/vkms/vkms_configfs.c | 87 ++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 423bdf86b5b1..bf23d0da33fe 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -71,6 +71,19 @@ By default, the instance is disabled:: cat /config/vkms/my-vkms/enabled 0 =20 +And directories are created for each configurable item of the display pipe= line:: + + tree /config/vkms/my-vkms + =E2=94=9C=E2=94=80=E2=94=80 enabled + =E2=94=94=E2=94=80=E2=94=80 planes + +To add items to the display pipeline, create one or more directories under= the +available paths. + +Start by creating one or more planes:: + + sudo mkdir /config/vkms/my-vkms/planes/plane0 + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -79,8 +92,9 @@ Finally, you can remove the VKMS instance disabling it:: =20 echo "0" | sudo tee /config/vkms/my-vkms/enabled =20 -And removing the top level directory:: +And removing the top level directory and its subdirectories:: =20 + sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 92512d52ddae..4f9d3341e6c0 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,98 @@ 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; + + 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); + + 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; @@ -125,6 +208,10 @@ static struct config_group *make_device_group(struct c= onfig_group *group, config_group_init_type_name(&dev->group, name, &device_item_type); mutex_init(&dev->lock); =20 + config_group_init_type_name(&dev->planes_group, "planes", + &plane_group_type); + configfs_add_default_group(&dev->planes_group, &dev->group); + return &dev->group; } =20 --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E70F1A238F for ; Tue, 25 Feb 2025 17:59: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=1740506389; cv=none; b=LswJ3ew0XwCnyEr0Y4924WVtx6WNwvOrO+JdzrMsm5UMCKex9kW/OYxxMQA+y7r4Pd6Xo5xY1NKVZX7hr+t3j9jd2/Zg+PDBLGeOZbnEo8G75Wr0NfuPA8r269oJY7iD6EkxuPpZYS1j1gQA49jOCu7LFx4jYu6gA35IqhKxs2A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506389; c=relaxed/simple; bh=YUvB7QHhz2oAtXRcICQ+cY/hQ3SsmPEYVPupSKFGUTw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=uh+Qxzl0YFN90uzW1mTESmFlhedjtM904NibdfOO8TWh+95qI101ROlpaTjV71+bkv2bOhhMEkRHKXfwvzsOexeVkIiZ304EtIKjxaOc87I/T7K+Q3kgs3iCTuJ5AqrFABtdbPATJ1AWFKeq7CJMl3K6UAcYFmpWbRwNbuQ9pvw= 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=FjH1lkaf; 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="FjH1lkaf" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-43994ef3872so36644825e9.2 for ; Tue, 25 Feb 2025 09:59:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506386; x=1741111186; 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=JmwMWV6oF+Vmhdp0fICh2mmxVSO2Me4ydPSVWJnw9l0=; b=FjH1lkaf4BTlIXF0TAD4rhIHTvyymwkKmRuoVJKkWZR3Fdrn9FkZ9Uv5Fo3RBSh1ii UfSLmXzpWp+S46XlR5v1bbqmi8nDHLku6CVsG5nQ1/+SPQr2vBscQeHdlPVKWG5STG9N s5mKjdXXdwPj/UxYKc3RqCyKXaBLewCCKtsc6ZqIPiGcOanpSoURsr1SFamH284Bfawf G5kWSH5Z0uoGnOryd0OkFXgdBjEzaTdvVJD1l13sWqj9tEdB9mKKr313Vksi8GSwpASm w9AoIwGimXy6txwtUAcuqmHOUHCYpS8GumFewHp+TI+4kN3IeJzIqSkq0+hKgfZ+c3Eb b1+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506386; x=1741111186; 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=JmwMWV6oF+Vmhdp0fICh2mmxVSO2Me4ydPSVWJnw9l0=; b=m6STHIEA3qTgiy9jAv2bM1q9+zVjkKJc9odZkltj9KoyNytQk0874AkJxuY8zholzr zXyH5zatw5vwdqxI/CsyTw9We3kwnf2Ib5DwbME3lAUI4IDRT9lpnuhFnzf567LyOuz7 0pXVxuW/0syH3KTEDk2TUM6AXBnYLpm6kS4us3b7XgDffpKTiC67sW9+Tq9kKuYHYL9I Pzv63CM01iz//M1AWlIWITaBqaPOLaQHUpOuFxUfBE0TMGwyL1GMheT7n0XtjSCE0MGT 98xV+nb5Fur4Yfjf/xcie8TQ4vaQIIN/46qUhT+DrAUxk5rUAehRtuGxm2ZTTqq55JR2 u8FQ== X-Forwarded-Encrypted: i=1; AJvYcCU5zXh3GFsNG5iSl6eo51liZtGxnaFVKqrGC38F4emp4rdVHTgKkB4TAJNE1aWNsklw9YVw+x1xX2vEPr8=@vger.kernel.org X-Gm-Message-State: AOJu0YzC5l84MJ3HAi0B2c0YS75xmWagi4LdCu6Qk7S7GVLUuB3Qyewb oSBpcAz/i07xF8x1ZP3faUbadVoaHK3uL9YqVYjfaOaUgw5mpOU+ X-Gm-Gg: ASbGnctHKMoBiGaUnBMcrU5XLUrFu1/wo1QTLatURCPITqx7NYxdE0aWznZgohNWmRf 794icILOejTrZ7YjTxX1yMMxDZ8tQabXLnfVmhvaEtBQTphCgQ/K+NaQEhBeDVduRQ7EZ7Q5BEf r6mwfTbpVTPBqNAa5vlwoGe2PF334ZTWh3a1ZlEZVo2vWxTENAIkrPdVskKxNr7yaa9V0R6v9/1 RH51UuwYk2+a8DXDn68ZAYLAtwPB2xzYey8ZdXdzCSRHgiFcoP9jXVzo+tFjIaswGBaK25QU+Dv U62A0q7Hk0ALp+fKcfpF/ZDpJuoJ X-Google-Smtp-Source: AGHT+IFLjeZRYlh7NEmH/CmtWS5phKKBkIkl2C2e27eaJkg9xOLmwwxXIek45/j4yp0tP6BluN2ZOQ== X-Received: by 2002:a05:600c:5012:b0:439:98b0:f8ce with SMTP id 5b1f17b1804b1-43ab60f0c1bmr25519295e9.7.1740506386063; Tue, 25 Feb 2025 09:59:46 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:44 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 04/16] drm/vkms: Allow to configure the plane type via configfs Date: Tue, 25 Feb 2025 18:59:24 +0100 Message-ID: <20250225175936.7223-5-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When a plane is created, add a `type` file to allow to set the type: - 0 overlay - 1 primary - 2 cursor Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 5 ++++ drivers/gpu/drm/vkms/vkms_configfs.c | 43 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index bf23d0da33fe..a87e0925bebb 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -84,6 +84,11 @@ Start by creating one or more planes:: =20 sudo mkdir /config/vkms/my-vkms/planes/plane0 =20 +Planes have 1 configurable attribute: + +- type: Plane type: 0 overlay, 1 primary, 2 cursor (same values as those + exposed by the "type" property of a plane) + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 4f9d3341e6c0..c2e1eef75906 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -55,6 +55,48 @@ 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; + + plane =3D plane_item_to_vkms_configfs_plane(item); + + guard(mutex)(&plane->dev->lock); + return sprintf(page, "%u", vkms_config_plane_get_type(plane->config)); +} + +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; + + 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; @@ -73,6 +115,7 @@ static struct configfs_item_operations plane_item_operat= ions =3D { }; =20 static const struct config_item_type plane_item_type =3D { + .ct_attrs =3D plane_item_attrs, .ct_item_ops =3D &plane_item_operations, .ct_owner =3D THIS_MODULE, }; --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 255721A315D for ; Tue, 25 Feb 2025 17:59:48 +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=1740506391; cv=none; b=hHqnh0t3ZN0Jo0wc73LnHQeCSc/f1rTdjVGzkOKBm2zteZy9+qGW3LLBlnNBIdggEzP8lrq4yHqSgMPbxlylr6sCoieHEshUoNnqZWKO6EUnBJPXVVwyOf5LthkAq8AuCh4VGQ6+sjDaluP8NlIZ56ysw9St9Uv8rZPaUOnuqG0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506391; c=relaxed/simple; bh=CXStM0MpaoYF2y5eKz61lbiPghGgrcct2Nt3+5mBiEk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=CTYb7GrH1H58GU37XZQU/loVVuBstl3gsy/oIowF/KmmwG2uD6tbPDR9lhRPb0xbuz3j8Vhb0VHI3liq+ZHV3/Qr8cjuPyJ4Mx65NqIXNrQqPRW1ZyxZtnI9Gsrpu5fL58F1gjzTdOCM9OUqQRRWrp3ECksgpXkzKflJJRMUJHs= 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=XfY50dhx; 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="XfY50dhx" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-438a3216fc2so56574775e9.1 for ; Tue, 25 Feb 2025 09:59:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506387; x=1741111187; 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=nC1+hzLjpAD0CpG9te0z8ab5IM3YNOmmBls2ySCSckA=; b=XfY50dhxAj+EHebRvnO9VFsdUGY4DbswQQ1rOS5qXG2hoE35NcYObp0fDdHtl81mom nknViV17rmvIe2RpFo8SsIXgwmwGfSE44Sm5XWrU0dEOFHv+FaULR5LjL46MAmyTDAbj 1PoO0ddqUTApZXCstyHcYIqv0lOkq522DjG6/YlBxZHIlL/Tssc5gN88qQRcaNqOOvtv 7w+zn6fIC64fSO9LveQIYMNs8BZq9i1kco/snMu0P5WHRDlUa3Dk5CCAChjQUVMadesk YDAHGNdbyH3KEX17vbsKUDIQVBi1P1Xnt6Ln9QIP0lHhmQqVOlbd3ojnb00uWDlCLXLp FdcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506387; x=1741111187; 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=nC1+hzLjpAD0CpG9te0z8ab5IM3YNOmmBls2ySCSckA=; b=i0KwwkzAtcUEYgmon7zI4HCFRlvnShv/kHWVqfuYKXb9WfmYu3//GCyJwsTd0KmJJv RvLSahYLcUMnc8qheXbQab4p6t6a/TIzzZmEVJUfJ8eKjTKR+bKaozrQG40EjMaJRMYO tG5w0m5d8doBRQyElVkJ9HWu9gWeRM5MDcO0PnStFoenIoidP8FyPdVfEVXvYguevNCV fmZl8jJKlZfII/XWQHHtDNOu5huTolMjWic9WzfEeL9hdjSOnRc9FMWn5oGh5GK7yCr7 MqYo1sycpH3pzm355B9S24BaePD/b1hgz5vcjqEHvRH/uF+0G+9/wLFQjIh9FJn8ZFU+ WdkA== X-Forwarded-Encrypted: i=1; AJvYcCVz66Z/k8oujhC60v3nGsr8vlUKNPUInQ6ENDEHgE9KC38O6tjSGwQgMpo45pdKQrIRJ5KKQ8UWiXKPiBk=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+8UqPZ/V1mZuTplTD0/idsMKvJfQ3rM9scxAsVAoN/+cGcURQ YV+eri7d6hx9LcsvTNgkJCmk5vA3ClEv665P40TzL3OxrYv+JJXD X-Gm-Gg: ASbGncv6rwO184zYgrVD9mmCaHnftDcfFcbWm0LsIx9ZnZYTp3K7XqDub50amQncOUT TEUar+kjUkd571E07XkVvwj1hfZ/B2Sqt1Lk5R0H8cNgqkt3wr4dYG7wntPauPIMP6JGL8fiitn Rc9hNqDZDtpdorNAYf1THcNtcV/XKx/k5cLHGtdpMZioCy2ZMono50aYnhXs4cASJ757XFYOdWv yz2+d0dufQN0gOH8BiOx7s7CVygdkVtEdohhJke/nWyT/0UZxbAs+vMcvuwZPdQ8leZQv7no5g9 3IbI9J0cH7zxIZ+kBHHOrmUpwV0S X-Google-Smtp-Source: AGHT+IGyYnb11gZgclvRVsL9ItAF6/JENZwu39j6igcuRB0HwP1x3A2vZbkH/rqQYAL9dpUt1LRpVg== X-Received: by 2002:a05:600c:450d:b0:439:9a43:dd62 with SMTP id 5b1f17b1804b1-439aebb2d6fmr119679735e9.24.1740506386934; Tue, 25 Feb 2025 09:59:46 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:46 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 05/16] drm/vkms: Allow to configure multiple CRTCs via configfs Date: Tue, 25 Feb 2025 18:59:25 +0100 Message-ID: <20250225175936.7223-6-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/crtcs to allow to create as many CRTCs as required. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 84 ++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index a87e0925bebb..e0699603ef53 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -74,6 +74,7 @@ By default, the instance is disabled:: And directories are created for each configurable item of the display pipe= line:: =20 tree /config/vkms/my-vkms + =E2=94=9C=E2=94=80=E2=94=80 crtcs =E2=94=9C=E2=94=80=E2=94=80 enabled =E2=94=94=E2=94=80=E2=94=80 planes =20 @@ -89,6 +90,10 @@ Planes have 1 configurable attribute: - type: Plane type: 0 overlay, 1 primary, 2 cursor (same values as those exposed by the "type" property of a plane) =20 +Continue by creating one or more CRTCs:: + + sudo mkdir /config/vkms/my-vkms/crtcs/crtc0 + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -100,6 +105,7 @@ Finally, you can remove the VKMS instance disabling it:: And removing the top level directory and its subdirectories:: =20 sudo rmdir /config/vkms/my-vkms/planes/* + sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index c2e1eef75906..1483f47244e6 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,70 @@ 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; + + 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); + + 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; @@ -255,6 +335,10 @@ static struct config_group *make_device_group(struct c= onfig_group *group, &plane_group_type); configfs_add_default_group(&dev->planes_group, &dev->group); =20 + config_group_init_type_name(&dev->crtcs_group, "crtcs", + &crtc_group_type); + configfs_add_default_group(&dev->crtcs_group, &dev->group); + return &dev->group; } =20 --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BD78819FA93 for ; Tue, 25 Feb 2025 17:59:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506391; cv=none; b=FpoR9kErRQ7+e4IFoA+qWOqh2TpJsZCTvh/BFEVurYhs+B2tN67QdH+M+QTKLXnJZO/rzs/ldGhOV9tPLegxd0BUogyT0+bhiY92pXXuBKPnkKlxjR5szscAxjprKVyyAUrNkm1m257f4SGf0YcBby5MAroZMvsgVXkhgl3OXY0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506391; c=relaxed/simple; bh=zBegzXjEYCFd/3MpfD5QFh3xM2l5NRR4TrERad1Xozk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FKHx5ahhgpThvFfs76bYhl6vqRk9h6ByYTEoADWvdSZ5ii4dZ+EEUZyvagJyqKhQwFRhfHJcr9d7HeqOqnbs2i5Ha3Jh1PPAFJNjF2JF6mBmSYjGAy74Gw3sYzxJLBUvVPPmXYbA602m6LtWs535dxdJZvJynCWrHC8VB+S7yQY= 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=XLkbjP7W; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XLkbjP7W" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-43994ef3872so36645305e9.2 for ; Tue, 25 Feb 2025 09:59:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506388; x=1741111188; 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=+1Ilm0hsqaAWJ6FLSDKxA/oNa1o2785HX4v9RhTC7S0=; b=XLkbjP7WRCxrQExKkWpD++wNUKHMHvvxOkwbO8zhaXxU6WqOIeEdXhl0sUPPVTyOeI fnmnLw49eQKVKRaPOkWEjIn/Rf246ZopueiMa5NX9CxLWiUn8ueT09g3iiTP34vD4vdl 3P/KxbLYzXjDoI32uYcKGquaD9QJGWfxoEC+9knG5J5vYE+vZnUsKxC3KEsdTNo0wRtz ll44epYuFqRugZPeZZ8zeeYzjIMJXgbdqXJLrf7p6alLajeBGaEIVYoWj6T1v9rpaDLD YZ83phnawF+LkIheyL0PzJICt+omb09rvfkvWK7ahFDzgepCcHkg8q/E1CLR4znrkUWp jZ8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506388; x=1741111188; 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=+1Ilm0hsqaAWJ6FLSDKxA/oNa1o2785HX4v9RhTC7S0=; b=vjjMIdPARGZ8qEWHv6u9oOvJzVJvIVH4q0tJAlX+Ar2EUdzVcJoG1SAOdUwff1VwTR gjq1c/wR5mR8Cm6lgj4tEMk1UkG7gbqq2glTyDmVr+ekig+hx4xqPb0WU1jDAdU8Yqrt tUu64c6p10iAUigbCQcM7ijJpKMXUHXzuE8toLIqGnFYpBFIXBiovlW3n+qVlrPf4ruL 8qNJMIxsCP/d7DU1EJd5vVX2vq2AjtXXvUQ78fFf/bFnuUNZxlue2Ns1yk/UbJS0wiy2 PQLcDkU9uiEOJngd5svPl6o4p0YaUK9Vh+Dv5svfPfwUL/HKUAtU1ZCPyWlM6QTELMlS 5Yaw== X-Forwarded-Encrypted: i=1; AJvYcCVMsgmx7+skRtsNB/6BLH/I69aH/UFHAI4vuTGqohocmCty+N20fN7VHJnh0Ld7QrUDlIjDAeK9s6jI8dQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yyg0FPcdvDWO6v8/MxqAoSvckfSAycIw6lwdb0/d92b58vw/0Jb YJ2vJxr/9rzBTGzARVtUgWMJTpX0UTu8/70Ze+eAroaMqurFrPGW X-Gm-Gg: ASbGnctHxjfZqLPuTjdnZEL4MF5HYf3YyZYiMGfQ/iByhRXxC/2EAvQ5AngWRUgz3yG YgtzTKsjqr5x0M016PE3mo2HTz2LjCwucojIYrSvxNu6owpx0zLubM/9GjpATCib/Rc+HCiRXTE aXeAwY2Laar30fCvktpdNMjxabvDIuzBFCUeG5Lal51SDTPKdd5r+7imgeWdj3ZMMKmO0HBJFZq 3Tjv3jmmyLLhEpNinDjelNqzd1g6PEM1Z6oKD5EEqOMsJdyIBU3xa86df3gp5RD+k9YxKzPMCYJ RWmFbH65GWopYrFdhJNMqzN4tu9m X-Google-Smtp-Source: AGHT+IG/Jg6sQzfteNDw1Z0ZLJPWyZtj1UzkuvnZQYZgwvyGWiXUaguZlAArqY4qPHtreL4LKbBH/Q== X-Received: by 2002:a05:600c:1989:b0:439:a6db:1824 with SMTP id 5b1f17b1804b1-43ab0f4271cmr48566515e9.16.1740506387928; Tue, 25 Feb 2025 09:59:47 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:47 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 06/16] drm/vkms: Allow to configure CRTC writeback support via configfs Date: Tue, 25 Feb 2025 18:59:26 +0100 Message-ID: <20250225175936.7223-7-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When a CRTC is created, add a `writeback` file to allow to enable or disable writeback connector support Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 4 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 40 ++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index e0699603ef53..abe7a0f5a4ab 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -94,6 +94,10 @@ Continue by creating one or more CRTCs:: =20 sudo mkdir /config/vkms/my-vkms/crtcs/crtc0 =20 +CRTCs have 1 configurable attribute: + +- writeback: Enable or disable writeback connector support by writing 1 or= 0 + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 1483f47244e6..233a3d4ad75c 100644 --- a/drivers/gpu/drm/vkms/vkms_configfs.c +++ b/drivers/gpu/drm/vkms/vkms_configfs.c @@ -74,6 +74,45 @@ 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; + + crtc =3D crtc_item_to_vkms_configfs_crtc(item); + + guard(mutex)(&crtc->dev->lock); + return sprintf(page, "%d\n", + vkms_config_crtc_get_writeback(crtc->config)); +} + +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; + + 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; @@ -92,6 +131,7 @@ static struct configfs_item_operations crtc_item_operati= ons =3D { }; =20 static const struct config_item_type crtc_item_type =3D { + .ct_attrs =3D crtc_item_attrs, .ct_item_ops =3D &crtc_item_operations, .ct_owner =3D THIS_MODULE, }; --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E298A1A01BF for ; Tue, 25 Feb 2025 17:59:50 +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=1740506393; cv=none; b=jyljcdAX6GRlmRjXmBg84NfUjJ8B9DiJnrJy5KkoswRYTO1c9KetMioBQcJs5VLuVcdNeTyzwcpe8ubtZ2drWzVrxjZVvOSiXir6ZstvmRRUgTAuKMIKk/noIsiV+HXn3PzKptaXwpqIvGJtDXVZbg4Na8eYGWCgsIvJFXqYDQs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506393; c=relaxed/simple; bh=pt799dBa5K0FYqdOUVImd8ZBje4L2TgoHsYfI0sL7B8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=HDXd/R+taJs6gnZ8x2z+M70tV9SU7MtYkNmdbvBQsVcX9kyEqXYnYSe6cjdpBWpu0l3Jc0NzW/pDBBAovV+NwounzAgiSbDq8ia4SMh3MXvb7ImM03uwfepFh4GXjfTfOm1wXGp6gZuRjkPb0CYt+SjZ+9uz86IzR1Zk6H9i/70= 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=f/48DLp5; 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="f/48DLp5" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-4394345e4d5so39570855e9.0 for ; Tue, 25 Feb 2025 09:59:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506389; x=1741111189; 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=jQ3qzmV/GwODyLkEBydltNTBiPP7GsnM7FoOeuRwhyU=; b=f/48DLp5G2ruDZ9k8eTRmlR6axtL7JqIuPey59XOdGCRGB96BWVQBztRCGoRGxMO/K tSWpV2fQNHtHqWNmW4Gmx1sktwRpLVOeMFyrgqnkbQ85clrhR8MB1GUd8r836Jzkmzat 2PDY2+xEZ/Xj3j27/KLMRLziqj3sfnRYaz9rjGlyR94XwYMnrxrBaaNAZZzJv7sH8jTd BWbNK8LAyqur9AEBt0uyCXAKXJm96kZMW5xrtjwbFqepmRNdYTbk+yV6I4Z4Un3cMC8b MaAyNFga6+JoyHLFEdhBnHG0qoHYSdMg9XDPD+6jzt9m36uT5nhc9DQjG0YE/T3Qfu2X 04vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506389; x=1741111189; 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=jQ3qzmV/GwODyLkEBydltNTBiPP7GsnM7FoOeuRwhyU=; b=Tiu/3Q5TR9w2+9aPBn90wWVFX86d2HtiXLZR9NZ4fu1L9fIfyGjQP7GV7Q9oXOYf95 DMWZ6wyJIEdwQyxZKGY/LMLsXMyMqp/zyOj85VCdpx4TDbxC0lRmmnk/nVAeWo5YXmYn IGOhsviWAP9xtGGC8MbLVzbRohNqbrXY2HKdooHL+qjs/XgUvFw7b8WIUrQqOWysxE6D sX/jcUkeH6NmpLYynHg3amRZRet25lwtwStZKmnnLjJjANejhXSGxernPEutPa8QhC9S tKAqz7UxvyR6IbG9rj2zblHeEG6a20elANRyMgGs9vOCOgEBLJHy/AMZgSEX4x6DlEm4 lBnA== X-Forwarded-Encrypted: i=1; AJvYcCVAIRnIzY8Ed0unHIAK4wf/UQNHULq+Hd7bjKxDQzO8PYJDy62gC7Uvex7t0XFYaEiDUZSncudu+zb9Sco=@vger.kernel.org X-Gm-Message-State: AOJu0YzfvcaTmNCBIivi65n2fn7K9Vwn4KAb6bMn+OSKVn3Iz6XQ0iWt /kLE3GINFqiu1Vaf6NX7feLwIo8jloTdgpOt3SlyYTTZ++rtxdNx X-Gm-Gg: ASbGncvTeGOV6yqB+8565z9gJS+b4bpWe78KF+vTIWXCtfAzlNeMY+NPtq2xa3H4+l3 nNbj6o5Dhe4+Rgzleaj+wiVgJQ/vsG25ZuCk0/JyLLD19E/gIqIObAiI2nZRukMsKYs2oHLNZtu Cq1vqKvwe7yCMLRaMmZwnLVVAEY1rk5zOmE/9tEjbsOKQsuGH/xWYWUwPEh7TmOyUvIb5C8m1I5 TyEsGxxvqkMiPvAz3BldY6PvLB6C1PA3kZ46dmPJRSe0AgIl3V1LJZUcPIm3YrZZZ4734Em9jCD 1gFVcraM5I+GGAYGpwkjhRO2958n X-Google-Smtp-Source: AGHT+IEy+IL/4SACMuAp4ri5486dK+aWSMx2NkyH5sRE4U8G0AbrFzsBBuGGPkYXj/bg5UH5g8T4Iw== X-Received: by 2002:a05:6000:154a:b0:38d:e3da:8b50 with SMTP id ffacd0b85a97d-38f7082821bmr17517108f8f.39.1740506389035; Tue, 25 Feb 2025 09:59:49 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:48 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 07/16] drm/vkms: Allow to attach planes and CRTCs via configfs Date: Tue, 25 Feb 2025 18:59:27 +0100 Message-ID: <20250225175936.7223-8-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/planes/plane/possible_crtcs that will contain symbolic links to the possible CRTCs for the plane. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 9 +++++ drivers/gpu/drm/vkms/vkms_configfs.c | 54 ++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index abe7a0f5a4ab..13b96837a266 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -98,6 +98,14 @@ CRTCs have 1 configurable attribute: =20 - writeback: Enable or disable writeback connector support by writing 1 or= 0 =20 +To finish the configuration, link the different pipeline items:: + + sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs + +Since at least one primary plane is required, make sure to set the right t= ype:: + + echo "1" | sudo tee /config/vkms/my-vkms/planes/plane0/type + Once you are done configuring the VKMS instance, enable it:: =20 echo "1" | sudo tee /config/vkms/my-vkms/enabled @@ -108,6 +116,7 @@ Finally, you can remove the VKMS instance disabling it:: =20 And removing the top level directory and its subdirectories:: =20 + sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 233a3d4ad75c..09d1f2224d01 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 @@ -175,6 +181,49 @@ 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; + + 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); + + guard(mutex)(&plane->dev->lock); + + if (plane->dev->enabled) + return -EBUSY; + + return vkms_config_plane_attach_crtc(plane->config, crtc->config); +} + +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); + + 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; @@ -267,6 +316,11 @@ static struct config_group *make_plane_group(struct co= nfig_group *group, =20 config_group_init_type_name(&plane->group, name, &plane_item_type); =20 + 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); + return &plane->group; } =20 --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E00FE1D8DE0 for ; Tue, 25 Feb 2025 17:59:51 +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=1740506393; cv=none; b=TkQpP2rEqZfvq0zFuHJy0S5w4LCPh0g/Ug5PLepPv5pH5xX9E0/6mnS6YIiQETjXUjaRoKLSq9oprPtLmd3ZFNHppwNRqH2ECrMtKtAiPP8bkMRddjgOavcDJwqNyzsB1YaHyU48+QvqumCQmtJUUfFcmfatYy0xQJVHsZ5V1Rk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506393; c=relaxed/simple; bh=SbQ88RpZIHr9N4mLaj/9ZsQHpWb1Dk4T71SJQ1uaEcQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QVCdI0Cxml37HJK9ZYaJjvVG2urUvKtFDxpCFZTUj1pJereD2wpQ6MDXGp/nRXrZ0IJ3PN1hc25Nzm9Y1eU4nuAcG9OCout2AOhAAlympyFv5mHPbBw0F1T8h4Q324wIKW66gbjWpso4SG7Uwm+Cvc3FcsuygsE4HldtNErN65w= 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=AI9Bhxiz; 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="AI9Bhxiz" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-439350f1a0bso459265e9.0 for ; Tue, 25 Feb 2025 09:59:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506390; x=1741111190; 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=uTsFuw25JN5p3fGYw8niDWV82fMArp6L/Ntua1mS02k=; b=AI9BhxizfAAMmCsow+sifKdCWdfZ3Wk5ratGK40qlCsjef5iLsJzjov0/RXZXEns5E C1b/YhN/s/iCZcnQz5YQoDvT2r3I8RHklTxdMBcsTBFqWF7vB+yK4cvdTEj10XbriTOo 6LGxnLdadMet+3iKN7rdV5ippjM6NahtnTEfedhUmipeI278LSmmIPXi4k3tqYAMxO18 bucc8QrF8CXA4U6ok0UBeioRp9ulgaEyMl1NZvM1DkBke7IfwORtUxh2GPZmxlGNcSBf 6YTnjv58hZvE8S2VRbkWMgDotZL64yNXFKZOjYouSLrVNWMkG12YmO2yMGoMiy5kYeRj N1Wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506390; x=1741111190; 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=uTsFuw25JN5p3fGYw8niDWV82fMArp6L/Ntua1mS02k=; b=Xf8Z2VWqODCvs49ah+ZiclxJbixIhGqyOwPCekQXfkT2+z1B1Hdy4snwYXPDJCY6qj BlsOHS/UcCQsEUd8CCZNxF6KK5BtmeTKTJcIsyMlftm15D6WeSlx9Gj74W2hMnQIMDal s9PegFcPapeCHpjsjydMqpTrWDAFeyizQm9UB5VgZJzvAlU3klypMfZMrvuq39SqTznM 74xzj9ch4OIzZXb59jDALB+QCztL/SqnxW6tguehD+J8LA6F23Bzk2wf3/3z6WXRRU7o GfJgt7MV3BU7S7/LUVvpaFdJ5BuIL1+qAY95N7mI3dglTb0Fg5SfF+bam1WK4LmDn1XJ MezQ== X-Forwarded-Encrypted: i=1; AJvYcCVIrt06zYm5QgSyu9PrgWNbisJp4pU+CCOfUuJSvxgAs4Qdy6Rz6OT79OB/MqMM3fc8R3b7z3UYpm+BN6w=@vger.kernel.org X-Gm-Message-State: AOJu0YxiEZUqPSCHbdS4vSGZrFHzSWYszq9XK55ZJTSfns0oKFXRIEPb t8gVlFYm3vzq6CDLadtrnbOypeggo+P0sEQRG9jrieS8KogdStwW X-Gm-Gg: ASbGnct0+e+hpbcJUT6IXhzplSy03hDmgwpD2W2AyPf13TbCl1KEZfNK4sM3QmYNK4j T+KiQmrWqS+owqbI8B2ru0MNU1+iM5pfTJXE7/ICoym8ArtSQ8O75LcW13sA0Vq3ZPe+idzr5w8 ic4xOpBCL7TLZZehqOv8XCQWJihl3nSiBHC8qie18HiNa6AKki4a64qAE5HJaPyTt0e1sEyqj31 fPSYZnSf0K8psKeAJxT05ihPrUmu0pVumMSKLKlVfG70+vzOMCD6m4C+j/fPBsga8q2H+Z9/CoG X28/z/2n8fjrLD2Kb/ZOuf2llm51 X-Google-Smtp-Source: AGHT+IEOazIMO3dYrk+eRsHezFG2wuGzjSRuNjHFFDNYiidmpZhlQQKcv5oVveo+glrBODNV5JWyUg== X-Received: by 2002:a05:600c:46ca:b0:439:4b23:9e8e with SMTP id 5b1f17b1804b1-439ae2d1f3fmr145310205e9.3.1740506389953; Tue, 25 Feb 2025 09:59:49 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:49 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 08/16] drm/vkms: Allow to configure multiple encoders via configfs Date: Tue, 25 Feb 2025 18:59:28 +0100 Message-ID: <20250225175936.7223-9-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/encoders to allow to create as many encoders as required. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 85 ++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 13b96837a266..e24767448775 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -76,6 +76,7 @@ And directories are created for each configurable item of= the display pipeline:: tree /config/vkms/my-vkms =E2=94=9C=E2=94=80=E2=94=80 crtcs =E2=94=9C=E2=94=80=E2=94=80 enabled + =E2=94=9C=E2=94=80=E2=94=80 encoders =E2=94=94=E2=94=80=E2=94=80 planes =20 To add items to the display pipeline, create one or more directories under= the @@ -98,6 +99,10 @@ CRTCs have 1 configurable attribute: =20 - writeback: Enable or disable writeback connector support by writing 1 or= 0 =20 +Next, create one or more encoders:: + + sudo mkdir /config/vkms/my-vkms/encoders/encoder0 + To finish the configuration, link the different pipeline items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs @@ -119,6 +124,7 @@ And removing the top level directory and its subdirecto= ries:: sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* + sudo rmdir /config/vkms/my-vkms/encoders/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 09d1f2224d01..cf865728abc2 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; @@ -333,6 +353,67 @@ 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; + + 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); + + 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; @@ -433,6 +514,10 @@ static struct config_group *make_device_group(struct c= onfig_group *group, &crtc_group_type); configfs_add_default_group(&dev->crtcs_group, &dev->group); =20 + config_group_init_type_name(&dev->encoders_group, "encoders", + &encoder_group_type); + configfs_add_default_group(&dev->encoders_group, &dev->group); + return &dev->group; } =20 --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 02AC6207DE0 for ; Tue, 25 Feb 2025 17:59:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506396; cv=none; b=IINqqDcZkDsyraxm9IsATHQDsv1eIvO2JbZi8MLJb+7+lDI/gAD/d4N2xaKcm7pQApjwZD+3r0Gglq6w5zFfJe/txTfRN38XAsZ16GiklTokbDA4WJrxXFD3jswKfNFwngsS56uEpTgdaZYKIr0P/6nc5iwojAzobjBNWLq0lws= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506396; c=relaxed/simple; bh=IxXEAtaGp3S8bSB/nGS/X5TdcH91rxq4SWWZGWuEYP4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=t4Onl8sKsfljQPeO+aGsgb51O0ibdgi07TjRyXElHSaM7YX45KPshQwmn+kR7tNyklLEuPBvCZg3ur5+JIBshPImI98AQvrBL3fvmCvWZkCnm4mHqrC0nfXnawZVN+0nreRqXyDih6LKFVWXSiE6d5U+4F87pYMrXycXMuLGPHc= 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=PWY6ms8q; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PWY6ms8q" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4399d14334aso52020675e9.0 for ; Tue, 25 Feb 2025 09:59:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506391; x=1741111191; 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=9ERnhTJ83jS9HrIxUIwFbH0bG0W+iXLYtduz4GOdzo4=; b=PWY6ms8qJqbr7rZ8GKSnhzGV5YZ/CUZowblPWliFu7W0qloyBqpeSakJZfDst/+J+H nfJvEqFMbi9Ul3iVXY2XKp87UiFMFbXhVbv5tleLKErTpTTME7PpM0qbacZ4Z05kNN6H TJpFYVc5OniKqerODZZk1HcnBcUIwBMSpm+DmaxXMXoGa0dXI5SamlSBCFHon6v7A0Z9 DFxDiuXst2J65yI1vGxxGeJkrQHDgJ4gQPy9R90QWxIQvF89StuSTr9lYu71qfD21A8m M7GujiFyS7G7J8VH11NwcyvQ5GfOS3E9Npsi4rmSgUy+jJMPwLvGw9syFmZj9WdOThNf Dx+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506391; x=1741111191; 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=9ERnhTJ83jS9HrIxUIwFbH0bG0W+iXLYtduz4GOdzo4=; b=oBpScQQmDwxms5ASVuWKM9YkstMg+V0kVPIplzBE46ix8ZZp8mIF6sggBQlsZqw/qg njNxrictr9UDK0ELevTFR4lzGHEjEjUAvDpcN0eJllQh4uTpVKuifar8VM/o8P7lMSCj Plvf3hjfE0jQS2YzDMYx7Eww0kY3uxb6Gd4aogQuolqIzhU8fAmSQMOWy0aXcWEYyG6u 3iIyM91+/BV0kWEgvHt1CJ+7INBuOJRRca/LKMwJbvwiSiqUqLbHHhdm3zWYG4JObWiP gxqcvw6ahORRqFJZr+VTwLMUm0KNeUmyeIFZO2AY6nixiIfiOg26tJFytYFbwvx1sKNY YBSg== X-Forwarded-Encrypted: i=1; AJvYcCWu9iMeZCYpu7m/mAf2CL4qL7HaB+dA1y64EU4X01UMoak3TcfAIQlTylN6E6M4H/G8wOGYxHrKJx0XtL8=@vger.kernel.org X-Gm-Message-State: AOJu0YyyVVYFVMxwN6oYMeqx2H7dWE2pxkLFF31ASeSM6Hi51wXmtQL1 R3KKGulomRGlVZ2l1G0WQj4X4LUcfRjyjQUI9f4B83Hq6VwFzMEI X-Gm-Gg: ASbGncsNkJhd485Co/UcpvFxEr3sySNYdC6ocqXgzGRKGBsAjSU0iUBeAhbU0YsvF25 B/oGfAFLGTf2FEQbqWrLTS5nP6T3KtMRm1hOVBsuc97KJFXvDvflcRalEu+KF38NiiBtCVvZOGI zmVVb8JvSGwzixAqTZGizTnX4RbMFElVfo+Fqy3epFquB6uxsF5vcmrTe4VyWya/jZwPPbSPAmR D5A9g++8V3pC92dYjBj76sl3dy3oZLEMRFSQ+/49dIjYZDTRRNjgKzBe9G4mAQHUq3N/L8X8+Ym 1PZomTvRMR1EOZ3Gq0QYB0d16e8M X-Google-Smtp-Source: AGHT+IHCWQpZfQj2ZmqqchJwQSTf4iypFQkgwB0Olxc8jlH2dpN0x4GiKPXIgyo4G4hwCub03XS22A== X-Received: by 2002:a05:600c:4f86:b0:439:967b:46fc with SMTP id 5b1f17b1804b1-43ab8fd73f2mr4044375e9.8.1740506391126; Tue, 25 Feb 2025 09:59:51 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:50 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 09/16] drm/vkms: Allow to attach encoders and CRTCs via configfs Date: Tue, 25 Feb 2025 18:59:29 +0100 Message-ID: <20250225175936.7223-10-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/encoders/encoder/possible_crtcs that will contain symbolic links to the possible CRTCs for the encoder. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 2 + drivers/gpu/drm/vkms/vkms_configfs.c | 55 ++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index e24767448775..650dbfa76f59 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -106,6 +106,7 @@ Next, create one or more encoders:: To finish the configuration, link the different pipeline items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs + sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/encoder= s/encoder0/possible_crtcs =20 Since at least one primary plane is required, make sure to set the right t= ype:: =20 @@ -122,6 +123,7 @@ Finally, you can remove the VKMS instance disabling it:: And removing the top level directory and its subdirectories:: =20 sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* + sudo rm /config/vkms/my-vkms/encoders/*/possible_crtcs/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms/encoders/* diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index cf865728abc2..64aa10cd3156 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; @@ -353,6 +359,49 @@ 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; + + 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); + + guard(mutex)(&encoder->dev->lock); + + if (encoder->dev->enabled) + return -EBUSY; + + return vkms_config_encoder_attach_crtc(encoder->config, crtc->config); +} + +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); + + 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; @@ -402,6 +451,12 @@ static struct config_group *make_encoder_group(struct = config_group *group, =20 config_group_init_type_name(&encoder->group, name, &encoder_item_type); =20 + 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); + return &encoder->group; } =20 --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A33520B1E2 for ; Tue, 25 Feb 2025 17:59:53 +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=1740506397; cv=none; b=NCZ2H5UVX+zJWnyl5MuqNqCc8hqjruwj7aJY34lmcozScFC7exSqyjd4iN/IgkaXHYbXopfBVYJRpukotjDl5PqYu5r9MOQI5ExCVwNFW4rcnFnvGJKB1WrNHpprkLljRtAOG/1AQ1N38xBTU71S8KZwhHKhrClIWYp8SKwDIp0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506397; c=relaxed/simple; bh=zCp71uFAdalem5CHS8hBoSJC8yM/83uObY+zMk03qZY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PHWMBtUgqIbo1zMaNvfcRWNr14xDBEG6kpj8ZGK5T+8VBnPzdJWQggMsykV4k2AgrPDTGeT8ZJKBANImNbD9conFH2Y/MrS1JSgH9vas/06mxIejWIbXD0z4dcTsZGv5uHOjsXI1WfQrfnBPDfBrUKh9PiyMTTBuRe0Li9NlSUU= 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=FDEKAWZy; 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="FDEKAWZy" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-4398e839cd4so453495e9.0 for ; Tue, 25 Feb 2025 09:59:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506392; x=1741111192; 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=0WseHHM1e/WuDgTg/fwsfkleyEd/vJ3pyq4Ce8rsGHo=; b=FDEKAWZyqgYDZobe4KS284aBDzDgvXjZ5AB+48qf5Morn/99SAGKgvSJHS4qO2rZSb aQ1DqlcVjjWs7DAXr3C/5N7NsBb6WTgLrECyeOy3y4AUm0h1r/MV2haibSBIzeb7BAhb 5pxa3W+ASXkXuN6Z/4s3PfnkmJIUopgPHlZSEGqJ8cWwXKxWnyPO+X3cRCFVZlvAR6/X PgHTFd3FRd1HISYvIvHKO/1Cn7N6sm+gnHUUl47t+8bfTdOMR6QG8LVYVYJIHrwPKY/y VSc5l4obiA/ylMyaI/PU2Mmhk1kJ78jneMuqq0vo7XyxDodPvLYSnrZoa27KTeIObkcY ajLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506392; x=1741111192; 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=0WseHHM1e/WuDgTg/fwsfkleyEd/vJ3pyq4Ce8rsGHo=; b=Y9jxzgo8z4eLNulJKsosPRalOPID0Bpb1mAUzf5h3BsuDrX/9ISK9k5PTlCIWUB5jR Gu2RRF5rfGn5oymPQi/n6XxZ7fGW5jUzRzS/3Aq+HlCGTliLyoPvjW1pNoZdhkYevzLD bA8BuDzByD1G9LZNmxrw2ZsEYQWnqvVVK0yhWS/qOxtUHiVe1gqReVqIVxJ4HIzPJLAj Pm/tLXh7sRZ65zUIyNfnlWu76b8+9nBnlo0C8yNJDGkPIy4B3euskmhCMRuf8pzyAxgG em1vG9XlY6CzFLMCDFrZthnxQcNRFrE7zijZEMLfHNq3YJjbMMX4avBdCfrFlPeOxI/H IQgw== X-Forwarded-Encrypted: i=1; AJvYcCXyzTmuVboTKVIiwArg7ZaAtaOD+x6xkDgCoxgFt9Ln2PLnmMzH0uQlWm5XpnKgEcpkft/+gFNizabX+gw=@vger.kernel.org X-Gm-Message-State: AOJu0YwEHDD1ut8KJv7RIOXz2Jr0M5npBvncmq7D/NRDWRrXf2mFfOb2 AJ/yVOqDFlaVWlKqaWmXJ3jjLj/8rJhQ8h2yRz6bKHFdgLx4N+Eg X-Gm-Gg: ASbGncvUsDQZvJIBbWvi50KT7R6o108qwoEq5z85dtsgQ3VNjY76TfVhPGiD9NCnrfR 91SueTW2PiPIgMYUJJDsG7uUM8Qx0rj3ip8ke3+zjwX25JpvAzPYb43uOx0xNrllsRgWND2jvCS MoMMsiEMDxcwfc3Kzo4uTaY6lVHLj6P2p4W9SIJHs6Rd3Sxt90lZbOh/wcIUtXuUsxpoSmwNrcN 6h3HCG5zCWI4UEqZILCv+aApDjBedjI60aLNMjHkEWHoNzwTz3kJJFySlMpEw4/4oLdbWfhHrrb jx/dAAa8DUC1/dR+usqBPPqICb9Q X-Google-Smtp-Source: AGHT+IFMAiFjDJbbuzZZaSIag4FnPbXCSWUSYHSMiX/Uiybv87JNBZ27yyUVQxEKr+V2yQ7kikWXmw== X-Received: by 2002:a05:600c:88a:b0:439:91c7:895a with SMTP id 5b1f17b1804b1-439a30af6edmr185928635e9.7.1740506392239; Tue, 25 Feb 2025 09:59:52 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:51 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 10/16] drm/vkms: Allow to configure multiple connectors via configfs Date: Tue, 25 Feb 2025 18:59:30 +0100 Message-ID: <20250225175936.7223-11-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/connectors to allow to create as many connectors as required. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 6 ++ drivers/gpu/drm/vkms/vkms_configfs.c | 86 ++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 650dbfa76f59..744e2355db23 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -74,6 +74,7 @@ By default, the instance is disabled:: And directories are created for each configurable item of the display pipe= line:: =20 tree /config/vkms/my-vkms + =E2=94=9C=E2=94=80=E2=94=80 connectors =E2=94=9C=E2=94=80=E2=94=80 crtcs =E2=94=9C=E2=94=80=E2=94=80 enabled =E2=94=9C=E2=94=80=E2=94=80 encoders @@ -103,6 +104,10 @@ Next, create one or more encoders:: =20 sudo mkdir /config/vkms/my-vkms/encoders/encoder0 =20 +Last but not least, create one or more connectors:: + + sudo mkdir /config/vkms/my-vkms/connectors/connector0 + To finish the configuration, link the different pipeline items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs @@ -127,6 +132,7 @@ And removing the top level directory and its subdirecto= ries:: sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms/encoders/* + sudo rmdir /config/vkms/my-vkms/connectors/* sudo rmdir /config/vkms/my-vkms =20 Testing With IGT diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index 64aa10cd3156..bcbf91fbcd44 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; @@ -469,6 +489,68 @@ 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; + + 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); + + 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; @@ -573,6 +655,10 @@ static struct config_group *make_device_group(struct c= onfig_group *group, &encoder_group_type); configfs_add_default_group(&dev->encoders_group, &dev->group); =20 + config_group_init_type_name(&dev->connectors_group, "connectors", + &connector_group_type); + configfs_add_default_group(&dev->connectors_group, &dev->group); + return &dev->group; } =20 --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 247EB19FA93 for ; Tue, 25 Feb 2025 17:59:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506398; cv=none; b=Kb7gG0Myldp47/d+C3brMRPIxXWu7oW1ub03H+Qsit1E7QU77VS/HOvfhiiQ0RewVf0Eh9bMKYBZsfZnT4foYm0n2cxqirxcsNZn7jSZnI6Og3394sE/W8J7gPlJMywmWPI2+I5MJA1eQvXXQJRvB0kUUkXeNgwukoE+8MqdtSQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506398; c=relaxed/simple; bh=mzLIWMk7O20DcPe67ZEoV9B5XSC7ARjIIHpYInnHe/E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=EeFPaiVobbYUruDHFlJFAAsjLv5gjtaOy0L+thnHLlmaKKZQUhPpzatPAXrjjJfLW2I+RZ72fT1+Z4FIbqbwFNn2g1oXkS4C6VZfDCPLYHVd5j1xlxQwsJiMX4XJqdZ60JbuzPDJ2SOPTW0Ir3FwaAsppayah5yshKf9d224Prw= 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=lQpai2FC; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lQpai2FC" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-439ac3216dcso35284675e9.1 for ; Tue, 25 Feb 2025 09:59:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506393; x=1741111193; 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=aWiThvun9v9oBFVV2WdtDnI+lemWxWkbnKGuQol7/Nk=; b=lQpai2FCSQVEEAKp0/nielHySbUdvIN2lbI+2gU7SE2IzqH3eWju74Z1Y2aEOavRvt QVSV6W1btx+XiIPnJrpl4TV/d1yIdqQJNCveZdlzX98ehYxsPKtoaBSsaK4X0t2s6KJB LZUKlidAHnpNBWMDOBI2sMjTfsHJPeqs/mcK9eXno0D/o7J/aFcjem1dddAOzWa4/gor FZRBVMkg3LCN7kcA3PpQbvabBhj5T+1TN/V9O4WX3Y0mitATiffro9ORAnWKf4/Awn5q Y3mqz63n09E5U7pnrcR47u3flAsIvjQ4dLFk5duEBBetnLnimLERBPT6Hc/L1NlGQ2Nl +Rzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506393; x=1741111193; 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=aWiThvun9v9oBFVV2WdtDnI+lemWxWkbnKGuQol7/Nk=; b=d7gWAwbsQzUwHG3nkQ6ByzpGpFrii/EBLWce4nk+OwavLKkk4L75oezG5peEVZeU08 0VSvolLOESw6fUuLQEiMOdWpKpJepLiGPwHKkoxLkVp8Amk8JXGSMFH3wrT7xgV9yL0Y tE09EHuvGhnwCfOY7WgrebW0DUW6iiQMm1q2oOpArxjhheXkjfMYoGOHlvWILGp9/Noy OsO/85rc5s9wNCJ7CJBJ43pLE3riv9mGwGoavRSIP9lUzLL2pd+QWZ1p033M6bbq5Bnu L0bkoovJSjKXdcGI0nd3lFLHakkX3yhldLQkD+wPV5qI4r2vMi+CiXMHeiMmF0wWaB5a aq8g== X-Forwarded-Encrypted: i=1; AJvYcCVxdOjgWgisElj6z4f8Ru/+5KVBX8SwZ+QPtjhPQu7DTplLp74SutyMgMXKus735zNiRvzdI5tVGUcIoQc=@vger.kernel.org X-Gm-Message-State: AOJu0YyRmZcvnOXTQinWWBHrVxZ/YxDFtvY0OcIF0AZdeI9UMqYyl0dl cBmUe5tHtiB5MxpaktihQs4bn8pWdV0u0ZjNhHAXBrsQbGSiMKlN X-Gm-Gg: ASbGncsAKGJ2K/dFU97eDjahfwPqgw7yepNJVS3FRrLPZazV3lEXHyGQ8LXzYmtkIkM Asbbei82gOVvVCrtANBuWQclJKh8nsJ9O1Olf81pZrT3aPl0jluQ9vqRFCubZUMSIWFtZpVI5FD ktOGpt4XzJf+R7RRaYT2EzVMqp3WaoW44GVmdaaCHBy2wlN+IKYiLLFWK485MyheFrFXA4Psb+G Gmmr4YwKNAmIA48AWDkpHu+S69RGNGfKlCw9wAPBUmSfnSq3xTDoCcKtFzuG6R7dsz9CmhuZu9r vMQCn64niQiRYOF3GI4u8DsbMI0l X-Google-Smtp-Source: AGHT+IG/QEmeDgGP8pEbID7bpFqeuH4nVI6f0hc07wTpQeF5+mhgQ8WHTlsm2+zkpyEBsYCIYCDp0w== X-Received: by 2002:a05:600c:19ce:b0:439:94ef:3766 with SMTP id 5b1f17b1804b1-439aebc3138mr147139015e9.19.1740506393230; Tue, 25 Feb 2025 09:59:53 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:52 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 11/16] drm/vkms: Allow to attach connectors and encoders via configfs Date: Tue, 25 Feb 2025 18:59:31 +0100 Message-ID: <20250225175936.7223-12-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Create a default subgroup at /config/vkms/connectors/connector/possible_encoders that will contain symbolic links to the possible encoders for the connector. Co-developed-by: Louis Chauvet Signed-off-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 2 + drivers/gpu/drm/vkms/vkms_configfs.c | 58 ++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 744e2355db23..74126d2e32e4 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -112,6 +112,7 @@ To finish the configuration, link the different pipelin= e items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/encoder= s/encoder0/possible_crtcs + sudo ln -s /config/vkms/my-vkms/encoders/encoder0 /config/vkms/my-vkms/c= onnectors/connector0/possible_encoders =20 Since at least one primary plane is required, make sure to set the right t= ype:: =20 @@ -129,6 +130,7 @@ And removing the top level directory and its subdirecto= ries:: =20 sudo rm /config/vkms/my-vkms/planes/*/possible_crtcs/* sudo rm /config/vkms/my-vkms/encoders/*/possible_crtcs/* + sudo rm /config/vkms/my-vkms/connectors/*/possible_encoders/* sudo rmdir /config/vkms/my-vkms/planes/* sudo rmdir /config/vkms/my-vkms/crtcs/* sudo rmdir /config/vkms/my-vkms/encoders/* diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index bcbf91fbcd44..d4d36d2c8f3d 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; @@ -511,6 +518,51 @@ 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; + + 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); + + guard(mutex)(&connector->dev->lock); + + if (connector->dev->enabled) + return -EBUSY; + + return vkms_config_connector_attach_encoder(connector->config, + encoder->config); +} + +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); + + 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) { @@ -539,6 +591,12 @@ static struct config_group *make_connector_group(struc= t config_group *group, config_group_init_type_name(&connector->group, name, &connector_item_type); =20 + 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); + return &connector->group; } =20 --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4B0701A08AB for ; Tue, 25 Feb 2025 17:59:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506398; cv=none; b=mYjOfkS2Sk/STxhuR+NJ2Nn6mglHj3w+d4vLeEWT5PPB11SIo7VnI/1vbehWUiGCQyxfg1dHwl622c68kylsNxRbUFS0k3KEhfX11pvmntCYIS2jtE89gTcL+KyByJpTAH+Dij+fXWTeC6MYHP6KaHDnwDMRsSSCOBtIsvA7o1M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506398; c=relaxed/simple; bh=ruD0UQijRSTbAbiYbiy92bcwQmGm+acqNJsn/Xwt7PA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=d74dKhOSGki3XNxKVqPOPuXNfMbVEON4dJlBwvzN/q5bdEzOmoQrWvEoebpkhX8ymYSXzrWwP3oEhsgO2U1X7M/EQTLA3Lh/fcuilEsOPlzrEVO1Em6M7JggEJseE1B1C1HEBMgGiA4PFEMbh12D8L4bOQtn1qW9Y/NH/5bNq2I= 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=Oq3Uctdd; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Oq3Uctdd" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-38f2f783e4dso5070201f8f.3 for ; Tue, 25 Feb 2025 09:59:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506394; x=1741111194; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zIdjBnojDe9JlRJkQtXkq6PiLeEhZjPQxZt/O+Cfesg=; b=Oq3UctddCVKuMCtJNRw9Ot00/VsJAwsQoNxNC/qZ7ZSDgRkVY0p6ZJE1i2W/7LFIW6 9fgVFO3AKOSfoUatOjMimfd1+7vzWz/DTmlHjsm5PTu5bDQYewfPEpc+W2YRi2Anae2N N1bjtHAPope6Fyj0xHtPEbvy+65VUa569CJmHZHz8WvGxnqsaUgBt11OAKU8aWizsJqt uDigvuxX8zke1tI29/B0R1F7gMzw6KajhQ5esVI6KE0bN1JDEZpVhOqJrOr4cKZeFpjH qo8zrLUy6Pq+XcfTl2PyJEti8bJ0sZGRrsK9ftVnmEMSutD2s4nR/zocswZuYlqWkps8 z03A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506394; x=1741111194; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zIdjBnojDe9JlRJkQtXkq6PiLeEhZjPQxZt/O+Cfesg=; b=NRrgG0iO9XH18B1vE/EOarTX5LMSbGNQo96Fzz13Dda/VexXshG/AgBXdtZUYcXWmC 4ujowM1+fXxoHH9Dz5TxZl8KvCKS9c1UjpByIXTuF1cT1Ud9bJG+n8A1npvef71CMKGt g+W6xaQWNk4lGvowTTciNOZQ656B/9Uv09z1rriU5D9T677UEsb49wlxoS900lVr09jl LAlwf3iUh3gf5ZaC2CJUqmlwurmG9/gSPpvgE0uttQM+x4smz8soI5Ht9B/j0GnYPtnM yv51sbNXu1sy40hu78Ibn3jL5G/fgoGxWz4vAvMtrSwU4e8ianwW9/sTEZ2Hq0ZXSbid QOMg== X-Forwarded-Encrypted: i=1; AJvYcCVdcff4SRzaMGvtWNojsck6fOqGbXLQqicMvRm/DizT62qH0YbhG43bC0UG9rT+3s/qs7k/xKLrQZIKE7Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yws+vjrFC0jNKy1WVpiiYlh3BPAxsK9Qlti6tagCrBAQ/HFFGqd 60yCPPsGlzgBK9V3tu0gVRWkMyQdP1APNFUBOgJnkDZN5WlpGPM/ X-Gm-Gg: ASbGncvHJO2E8zmzTdext1d8INKemiZAVJbrOch4Hw09dW2Q79MYMbFFtKl0LQEiGyu vFsaBQi21atK7bxPVAAaKuuaa717wPY+GXE6O9rRYoNkh5fAMG3FshyOyOhQVgnWm98wWQf+3JJ s1GFV0fOt2zNLGy+/2rSFWhiidSaetBcbE2rhkPDWNQuXNV3QX1s4OoCgRVkOQEjt/0eX1dRXaE /ws0FKyEFa451rh2aFekGrNSou588wb6/h3QbgBvyXZ/UxM8+CQAI4q3o0OWHzxN2SgXIvAtlcq SPcSq6wyZx74hBJDFyMaxad53siX X-Google-Smtp-Source: AGHT+IEDK6mCAOgu8hG/ZIDX6sti+i4PgULEycQ5M/TU5713F8zbTbDTErKhL+ginH4PGoNCQwXC+A== X-Received: by 2002:a5d:68cc:0:b0:38f:330a:acbc with SMTP id ffacd0b85a97d-390d4fb02b6mr136963f8f.54.1740506394420; Tue, 25 Feb 2025 09:59:54 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:53 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 12/16] drm/vkms: Allow to configure the default device creation Date: Tue, 25 Feb 2025 18:59:32 +0100 Message-ID: <20250225175936.7223-13-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add a new module param to allow to create or not the default VKMS instance. Useful when combined with configfs to avoid having additional VKMS instances. Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- drivers/gpu/drm/vkms/vkms_drv.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_dr= v.c index 5bcfbcb6c0c5..b4ed19c97576 100644 --- a/drivers/gpu/drm/vkms/vkms_drv.c +++ b/drivers/gpu/drm/vkms/vkms_drv.c @@ -50,6 +50,10 @@ static bool enable_overlay; module_param_named(enable_overlay, enable_overlay, bool, 0444); MODULE_PARM_DESC(enable_overlay, "Enable/Disable overlay support"); =20 +static bool create_default_dev =3D true; +module_param_named(create_default_dev, create_default_dev, bool, 0444); +MODULE_PARM_DESC(create_default_dev, "Create or not the default VKMS devic= e"); + DEFINE_DRM_GEM_FOPS(vkms_driver_fops); =20 static void vkms_atomic_commit_tail(struct drm_atomic_state *old_state) @@ -219,6 +223,9 @@ static int __init vkms_init(void) if (ret) return ret; =20 + if (!create_default_dev) + return 0; + config =3D vkms_config_default_create(enable_cursor, enable_writeback, en= able_overlay); if (IS_ERR(config)) return PTR_ERR(config); --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 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 4BC5B1A0B0E for ; Tue, 25 Feb 2025 17:59: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=1740506399; cv=none; b=XTpsNfLCGDhxLXUQVPb7Ay5LYV8BtJYLSQiqRWnHJGLi1S/JaiwqKTsQ32BTtJT1SpluwuDGqJ7NJqHrSnZe4ENbcXoVhrH1mPfJePugjmgncND6PILNtU1Xaw4QdfjdBK2S3H5hB9QEsMktMP3SxLYLPjFyn84FTFIB7XhvHkY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506399; c=relaxed/simple; bh=Vi+uu/h5Zd8rK2aatFelcFPD2hYQTWMEmZWHarVSvJU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kohlSTd4T7+n00ZOW3PkSB0sQ9VUPV321lSeYwpByfzQSPr+ebSDdkxSRE+pQkQry3a8twNR3ucnSEDEq+5ab3TchNDnvh1pq2HdXeXtFFCdMKWb7QDm0xGE5R2Ornri73ZKkkALDFVEU5koJBQ+xPiDxZnQB5/PKHyBarXxjAg= 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=aC4Gvb4u; 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="aC4Gvb4u" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-38f24fc466aso4380622f8f.2 for ; Tue, 25 Feb 2025 09:59:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506395; x=1741111195; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=g2I+AKiUaGilJvwS/f5X1LlsvDutZk3cs9KHKo4vYS0=; b=aC4Gvb4u8nH8jm2nMgXFGRwKhKjBOwvGiBzQEZdYGYqCnVb3YlMExELOZ4VqzP3mBi CYGG1PPP4NcS3CbcvG9+yXIBxJgW0u2E9vIZAEWlnFdgCGqkf7To85XvArffFZwIsc8g p9nI0YvjhtHv9c0YmytOWVaLGhqJ8vBfvsgSx14c/CbdomsCRZ+nSMdeFspmz1LFCA47 B7p5FbOwmB51w31lH60+3d+yI938x2joC1q+tVOUQnCMmO3zW7plpTPkkR3hAHLGfIMj 7mV21bfev/iwP/CksENS/ukhys33fCBXC/XHvFVEGPp0zHncZ0War58qQKkTx90pTOdX L5Kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506395; x=1741111195; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g2I+AKiUaGilJvwS/f5X1LlsvDutZk3cs9KHKo4vYS0=; b=YuSuEq2nHzyImfnn7ZSt2/sK1gJtCZEAsFp3KBwe1uz5LQV+MUO7nqD0KgUaUiRwqR akcAhaROkd4iul/o+IFmZd75Bw2QqB21TxC9I5CYSwB0QhBTCONMClUxVHBz5HdQw+2p vfCWwenfeyH1NwlLAem8XISJ3K5j5Epz7qjYy8btrEhZGbvMiVRUTw8vKHxODwnX3KJs ZLNLTJBVBssPw3QJ2namQYBLk8g9nU4adC4xY5b9gqQNDfD8j0Wr5AfHp87FhXNn5qkZ sBO2XVss9ehlBbm0BKj3MEdcsRjp06GvyPBsZncl/mV9cr6qdk0lS9hAwrIR+5Jp1Ut1 Iddg== X-Forwarded-Encrypted: i=1; AJvYcCWJOZW83AC+Tlwbvn8R5HcZ0LvzWLqtBkuf4gRdCm5O6P9p1n0MM1UDbaY39/PsooPEEO5JcswuXxVLRDw=@vger.kernel.org X-Gm-Message-State: AOJu0YwskNDG5ECx4FmPG6qALglGBwdfsX6T2Xyp0g+Na6Mxy/Bd2N2o a290SvzZb5Uu1WLjv8M9aONMnuECvbxsa/R6F/0RGLGVE5kWLwAM X-Gm-Gg: ASbGnct/Q1L0Dqy3CBydyMyIWUOijP0l3XR3L38cOnI020sBRgRsWvo0U1xtuVlAZqE dFn7CTZOf5fr0LGEBGEPZ/pP5dVzeyW5LPwFtHVDOrnA573rqmYHp+LjqYlgxgiWWgvHogKa6zz 5yjuxX2Sb8TpFX79VZi62DJRynqphLIrtRh/Plv6QlAgUusO26Asg/1lRapmChtW07wPraJR6uv QEHKkvNnyH8HnUy+3Nd2ZTN6UFhhn6NHNpTlePVz/2DT6tJZnWYRpBFu/ZZiFb6mCBJzPshZHnG jUFC+w6orGzf//ecuJMXDbW/xsFj X-Google-Smtp-Source: AGHT+IFXeUWeTF6dXkp/wlfC8bPpRknIuSG+G1DBxyLoGn/dLvboeFM7RCjs+ZLYjnsXSSYydGev3g== X-Received: by 2002:a5d:6dae:0:b0:38f:2481:a6a3 with SMTP id ffacd0b85a97d-38f7079a3a9mr16896866f8f.18.1740506395455; Tue, 25 Feb 2025 09:59:55 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:55 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 13/16] drm/vkms: Remove completed task from the TODO list Date: Tue, 25 Feb 2025 18:59:33 +0100 Message-ID: <20250225175936.7223-14-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Remove the configfs related TODO items from the "Runtime Configuration" section. Reviewed-by: Louis Chauvet Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index 74126d2e32e4..c551241fe873 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -222,21 +222,14 @@ Runtime Configuration --------------------- =20 We want to be able to reconfigure vkms instance without having to reload t= he -module. Use/Test-cases: +module through configfs. Use/Test-cases: =20 - Hotplug/hotremove connectors on the fly (to be able to test DP MST handl= ing of compositors). =20 -- Configure planes/crtcs/connectors (we'd need some code to have more than= 1 of - them first). - - Change output configuration: Plug/unplug screens, change EDID, allow cha= nging the refresh rate. =20 -The currently proposed solution is to expose vkms configuration through -configfs. All existing module options should be supported through configfs -too. - Writeback support ----------------- =20 --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6907C20E703 for ; Tue, 25 Feb 2025 17:59:58 +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=1740506400; cv=none; b=DxKLotW+ZjossTSITrXb53eviDBelDMC2EUDgvTDoCFnPdwfcZV0npRR/hv0XOtgeW9UXxCD4Znw8+v9NKwPTBS1ENtpcOjvM7JL02FY/khcanLPSIqfuypMQyQWwlZCy97d1BLtQgp68fx+EjM5ARmaFaJqHX6M3IyAbwMjmAU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506400; c=relaxed/simple; bh=/ItqekCx0ii3dBLNjzbyU9huWDpEytIDpvuIVGMSb7A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tSNt3lERebFs7ksH+HihB1LB3dcsEmW0voFrzRhi8u3JWw6lOlOtsTC4EBPn8ealjuxJBAZGFegwFnNG5X2xH3qy0HrcwwQhGqhj7SDFbEI6/HU0N59wlK99dLEBYgoavbh+rUZrsl73qOi/b2WqaQFPJWQu0S5sLkfb8pVUwcA= 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=RjL5aOiR; 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="RjL5aOiR" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-43aac0390e8so15362785e9.2 for ; Tue, 25 Feb 2025 09:59:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506397; x=1741111197; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sDAURXwAx1KsBXr4riUk4MzDkYMXGUuztgEFx9hlcRg=; b=RjL5aOiRAn0RR0C6Zsz9tuLRwbaRrCoJZD73xQpAjw1Xfv+UNpPgMLhtSQXaHxCvat OIDgkmAca3O4RYFh/adIjNXrLgX41XAIvDzZH0rt24g3Uc+e0R/swhA7jRH0AjFwz7go V2HxtXgB1y/u9XCLJeZeOkXO8fNA/DtvyWlFyUgEt72MCIOdjHpm1otDajirWi8mMykP HiKHw8NPK4Tq4o0IAJNUTO1T/7XliFgsLsYh2QlTMUATO7MQImfBu/R24qErO71vu+Py ecoHdbuaQjqxE5drw/yXVIYKJ9eO4ybc1x+Bvex9XVtmEKF5YeJwL3XMrAT5e/25ApKJ CYZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506397; x=1741111197; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sDAURXwAx1KsBXr4riUk4MzDkYMXGUuztgEFx9hlcRg=; b=gv3i1ErcNkVfWrxLLSJZ88PIauuLQrcGLTmJ4x9KitpocQwn3r799I9jXV/vGUe/OE bPDo9+UZVV0ANP/FJ/dZppRnsXf59vnGqj5iwJv98VdaqrEOgfr3HK3akvalUfv5ePPZ YafmlMT4aPS8+bGpfVDFCKgcjDzs9Uqgq5cmWDAZ6GhDQJtvFdDUhqI+bLm8OsF1SG/l ZPBau85Rcjn2cP1QkOEvUb+7VKTKE81FM+X1m1heF62H4Nu2ccrpZa8Oon6lSEajwz0k FN7dQdKuLLJMKXaZM24SXcnBIIabtDSzqkUUqTWM5BXnwn/d4OTvU2TSnky5/ophzCKW 2YWw== X-Forwarded-Encrypted: i=1; AJvYcCXSM19j9ltNgUx7T5O3hDVOaKLgUgo2p1yodWRI+DjEfwzsoaOOpDNbu9MN7iy9Wxgn9Q9S3M3kWJIP5Vo=@vger.kernel.org X-Gm-Message-State: AOJu0YxTnzTtI8x2Q1vLLmIXpjKnDejZr9mmv9l/qnPIc82V8UZtQT6v h8pEGj8DVhQFkWPf8Rv0PzCTvaKIHtXKVic/M0hmnieDTG7y0FIc X-Gm-Gg: ASbGncuxEHcvAohWsTnaNrD3+9VtUxrvvNSyp46sc5PudipRSEqUf6R3FLSlDTl99Bo iz5LnFxFlNsQneZ656k2Gxjg6B0y6TckDjcSydp7Im7qdsaifXI8mZMY86c0egCEiPVjLntUuxg A33kQJhYdfWCoxQvFvCD4kCjGsbPQ7/x5xY3Lwav5dM2k/toYXC7mJrv34XgENBai8FsOObZAfn flOu9w7cdKbj9ykk/5mOaBYPtBtoSCY68P5+R8/LCA8FeWDfwPm3Q4Q/G4abXt+MRICjDu+ocPf +HukTGnBgyY7Zim8y7pVlgd+/LFk X-Google-Smtp-Source: AGHT+IHoNrE7lElorE2nBrogemoz9GreX5xiOI4tcL2igHg9mmoHPhzuv6lZfljM8vKeq46S3NNwkA== X-Received: by 2002:a05:600c:3582:b0:434:f131:1e64 with SMTP id 5b1f17b1804b1-439ae1e960dmr143520395e9.9.1740506396488; Tue, 25 Feb 2025 09:59:56 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:55 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 14/16] drm/vkms: Allow to configure connector status Date: Tue, 25 Feb 2025 18:59:34 +0100 Message-ID: <20250225175936.7223-15-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Allow to store the connector status in vkms_config_connector and add a getter and a setter functions as well a KUnit test. This change only adds the configuration, the connector status is not used yet. Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- drivers/gpu/drm/vkms/tests/vkms_config_test.c | 24 +++++++++++++++++ drivers/gpu/drm/vkms/vkms_config.c | 8 ++++-- drivers/gpu/drm/vkms/vkms_config.h | 26 +++++++++++++++++++ 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/vkms/tests/vkms_config_test.c b/drivers/gpu/dr= m/vkms/tests/vkms_config_test.c index ff4566cf9925..3574a829a6ed 100644 --- a/drivers/gpu/drm/vkms/tests/vkms_config_test.c +++ b/drivers/gpu/drm/vkms/tests/vkms_config_test.c @@ -916,6 +916,29 @@ static void vkms_config_test_connector_get_possible_en= coders(struct kunit *test) vkms_config_destroy(config); } =20 +static void vkms_config_test_connector_status(struct kunit *test) +{ + struct vkms_config *config; + struct vkms_config_connector *connector_cfg; + enum drm_connector_status status; + + config =3D vkms_config_create("test"); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, config); + + connector_cfg =3D vkms_config_create_connector(config); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, connector_cfg); + + status =3D vkms_config_connector_get_status(connector_cfg); + KUNIT_EXPECT_EQ(test, status, connector_status_connected); + + vkms_config_connector_set_status(connector_cfg, + connector_status_disconnected); + status =3D vkms_config_connector_get_status(connector_cfg); + KUNIT_EXPECT_EQ(test, status, connector_status_disconnected); + + vkms_config_destroy(config); +} + static struct kunit_case vkms_config_test_cases[] =3D { KUNIT_CASE(vkms_config_test_empty_config), KUNIT_CASE_PARAM(vkms_config_test_default_config, @@ -937,6 +960,7 @@ static struct kunit_case vkms_config_test_cases[] =3D { KUNIT_CASE(vkms_config_test_plane_get_possible_crtcs), KUNIT_CASE(vkms_config_test_encoder_get_possible_crtcs), KUNIT_CASE(vkms_config_test_connector_get_possible_encoders), + KUNIT_CASE(vkms_config_test_connector_status), {} }; =20 diff --git a/drivers/gpu/drm/vkms/vkms_config.c b/drivers/gpu/drm/vkms/vkms= _config.c index a1df5659b0fb..f8394a063ecf 100644 --- a/drivers/gpu/drm/vkms/vkms_config.c +++ b/drivers/gpu/drm/vkms/vkms_config.c @@ -361,8 +361,11 @@ static int vkms_config_show(struct seq_file *m, void *= data) vkms_config_for_each_encoder(vkmsdev->config, encoder_cfg) seq_puts(m, "encoder\n"); =20 - vkms_config_for_each_connector(vkmsdev->config, connector_cfg) - seq_puts(m, "connector\n"); + vkms_config_for_each_connector(vkmsdev->config, connector_cfg) { + seq_puts(m, "connector:\n"); + seq_printf(m, "\tstatus=3D%d\n", + vkms_config_connector_get_status(connector_cfg)); + } =20 return 0; } @@ -588,6 +591,7 @@ struct vkms_config_connector *vkms_config_create_connec= tor(struct vkms_config *c return ERR_PTR(-ENOMEM); =20 connector_cfg->config =3D config; + connector_cfg->status =3D connector_status_connected; xa_init_flags(&connector_cfg->possible_encoders, XA_FLAGS_ALLOC); =20 list_add_tail(&connector_cfg->link, &config->connectors); diff --git a/drivers/gpu/drm/vkms/vkms_config.h b/drivers/gpu/drm/vkms/vkms= _config.h index 0118e3f99706..e202b5a84ddd 100644 --- a/drivers/gpu/drm/vkms/vkms_config.h +++ b/drivers/gpu/drm/vkms/vkms_config.h @@ -7,6 +7,8 @@ #include #include =20 +#include + #include "vkms_drv.h" =20 /** @@ -99,6 +101,7 @@ struct vkms_config_encoder { * * @link: Link to the others connector in vkms_config * @config: The vkms_config this connector belongs to + * @status: Status (connected, disconnected...) of the connector * @possible_encoders: Array of encoders that can be used with this connec= tor * @connector: Internal usage. This pointer should never be considered as = valid. * It can be used to store a temporary reference to a VKMS con= nector @@ -109,6 +112,7 @@ struct vkms_config_connector { struct list_head link; struct vkms_config *config; =20 + enum drm_connector_status status; struct xarray possible_encoders; =20 /* Internal usage */ @@ -434,4 +438,26 @@ int __must_check vkms_config_connector_attach_encoder(= struct vkms_config_connect void vkms_config_connector_detach_encoder(struct vkms_config_connector *co= nnector_cfg, struct vkms_config_encoder *encoder_cfg); =20 +/** + * vkms_config_connector_get_status() - Return the status of the connector + * @connector_cfg: Connector to get the status from + */ +static inline enum drm_connector_status +vkms_config_connector_get_status(struct vkms_config_connector *connector_c= fg) +{ + return connector_cfg->status; +} + +/** + * vkms_config_crtc_set_writeback() - If a writeback connector will be cre= ated + * @crtc_cfg: Target CRTC + * @writeback: Enable or disable the writeback connector + */ +static inline void +vkms_config_connector_set_status(struct vkms_config_connector *connector_c= fg, + enum drm_connector_status status) +{ + connector_cfg->status =3D status; +} + #endif /* _VKMS_CONFIG_H_ */ --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 92B3520F090 for ; Tue, 25 Feb 2025 17:59:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506401; cv=none; b=AjCT9ADKYY8EPo3XumEhC+Sy0V+OoGaL3mQaSZD4BfmxM8B+t5HSBlodpmQIJuZKUB0vYvFC6etCN6z0C35xEeK3jWwCwOYaSIt0GNfVgcuG49zumRciVD8MlAUfmTTpJRLCqg8bVfsgV2UuW9Tgz95sLoONEwX2o5tQMHmSLes= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506401; c=relaxed/simple; bh=bvUa+h9JmV2ml66J/SlTMakEh4TAaYTL3p6zG9eX1wc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=AAeM2Vxmj2LolSajg2CvEN7W3qmtBz/9OSFWDi65/iib+H/uKk2YVxf47XU4qqQEjaq/83XWz6vN+2qthrq93jVCD8fh/IguwSQUZLxPvzTfOo3p8IgKbhjEDmYVhPTeV1hy6tSXQtRMMbn28r6vGR/JzSgKLo3h8PNSRfPVKPg= 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=EKp54dS1; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EKp54dS1" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-38f406e9f80so5446311f8f.2 for ; Tue, 25 Feb 2025 09:59:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506398; x=1741111198; 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=NfdjeoHNn9vAEGMDN9L94Mho5GfMjQgvCgSJKDEGohI=; b=EKp54dS1jIpTTAT/gUV0+ToyqHWk57ARi5XenL7tXwqe0iAzoAdwvhCfH9IcceZlZz bl72ZP+JFYyXd1fQlZ+850IljFQYm13tQ507QHeDhE3iw6HdRH4RljWJJw9/osIrCk/3 Nz93TBcwvT4YsLLN5AfwXr/X23HfY9fFICHj2TWU82B5nE/a006SMA7tkKqG3wJRFwHN ltq80qpbrmGrx5L+usBNEL/frApFJ69+XN7H+WPwBWGRgGk686kGet3UyTZQ7NPivG6j FVHJ+ZoqsYxmqLwrcLOmeJRxJ5LfoSNFXMSR5r9eNhCrS3+ADYpxvwzZ0m6u9IBSlZ0x kEyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506398; x=1741111198; 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=NfdjeoHNn9vAEGMDN9L94Mho5GfMjQgvCgSJKDEGohI=; b=LMbJz4i+kE1TG3Ji097TTrLMxaCVHamrFxcrOkBWyrFWirmkhJBMhry8FXkM6m5RBR j95/GyMS+gzpsQrtyROA5hWTJ1HyenOPVekVWWmX4bs8vXTux+0klkFsIRCoeJXf2NyJ ECvARJQxwvvwuwgYwmM8MA8+kvwITt3LZW5CR+BLRidII5iB4B2GDaQtouwmCazhhkEt BSLzzp361R4p/WxsdmxTsUBnxZ8eTGaVnXA0Wx1ahsFxAKRkPF6tVVJEmmmKM4lpY9pP WgzOylIQde6rX11yuiRFYiwwzunwTJbYleFFPvJjyYc/3qzku29xYuILYqusmm/EzZzV kLcg== X-Forwarded-Encrypted: i=1; AJvYcCUtEtbAN/pGxonyEK/f9yelilYpz+yu3xeComhmTco3rPM3R4nZaw6H2nfWZIg1ORVbERqZc3elUYkGMVY=@vger.kernel.org X-Gm-Message-State: AOJu0Yy0W/T6JnI0LSkrCqPaYcuomP7P3NIpucWDWe/g/FUqZOvv1j+i Cjuq/K+eIqEYRMHk8b8Z9du0US44+g18Zn2vNBGCilBiXmWFHwY+ X-Gm-Gg: ASbGncsl9LlD38RE+s/UpM3zzn6BgbLI6+jdxst8n2bGXmZc+Zir2P+ZEBbS7rg+1XE q1a+rH+2C4gxjY5iCa4LpALlU6CZ3HJ3EHi50xFi5lN1JTuhPffwgLlFj/xRauiadkV8vsMjkG5 dY3/QOnNi/00hoZ9OABzjngRKNtrVoE5l2p/2cMJvcS+nLtmfTm11ct1Iiy8/QrdF+Y1a5EWtSE 4mI6woi08BWwJzVIYk5emvn9EUbLDTud/gKaWuIDANyyNsML0jvH5mSxolJOEv6HBVTQPSE2V0H fP1jNb86f7OBCuxWSY+3WiIJn2ym X-Google-Smtp-Source: AGHT+IFmy3TLi8XjtwOwVQRKla+t9XcozrFfuQ2APFo1NcW327AwNtnvk589f2rdg/oiUJGtDZCmlg== X-Received: by 2002:a5d:6483:0:b0:38f:465d:fdf5 with SMTP id ffacd0b85a97d-390d4f4310emr170501f8f.26.1740506397599; Tue, 25 Feb 2025 09:59:57 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:57 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 15/16] drm/vkms: Allow to update the connector status Date: Tue, 25 Feb 2025 18:59:35 +0100 Message-ID: <20250225175936.7223-16-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Implement the drm_connector_funcs.detect() callback to update the connector status by returning the status stored in the configuration. Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- drivers/gpu/drm/vkms/vkms_connector.c | 19 ++++++++++++++++++- drivers/gpu/drm/vkms/vkms_connector.h | 12 +++++++++++- drivers/gpu/drm/vkms/vkms_output.c | 2 +- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/vkms/vkms_connector.c b/drivers/gpu/drm/vkms/v= kms_connector.c index 48b10cba322a..b03a00b5803a 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -5,9 +5,23 @@ #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 vkms_connector *vkms_connector; + enum drm_connector_status status; + + vkms_connector =3D drm_connector_to_vkms_connector(connector); + status =3D vkms_config_connector_get_status(vkms_connector->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, @@ -40,7 +54,8 @@ static const struct drm_connector_helper_funcs vkms_conn_= helper_funcs =3D { .best_encoder =3D vkms_conn_best_encoder, }; =20 -struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev) +struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev, + struct vkms_config_connector *connector_cfg) { struct drm_device *dev =3D &vkmsdev->drm; struct vkms_connector *connector; @@ -50,6 +65,8 @@ struct vkms_connector *vkms_connector_init(struct vkms_de= vice *vkmsdev) if (!connector) return ERR_PTR(-ENOMEM); =20 + connector->connector_cfg =3D connector_cfg; + ret =3D drmm_connector_init(dev, &connector->base, &vkms_connector_funcs, DRM_MODE_CONNECTOR_VIRTUAL, NULL); if (ret) diff --git a/drivers/gpu/drm/vkms/vkms_connector.h b/drivers/gpu/drm/vkms/v= kms_connector.h index c9149c1b7af0..5ab8a6d65182 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.h +++ b/drivers/gpu/drm/vkms/vkms_connector.h @@ -5,22 +5,32 @@ =20 #include "vkms_drv.h" =20 +struct vkms_config_connector; + +#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 * * @drm: Base DRM connector + * @connector_cfg: Connector configuration */ struct vkms_connector { struct drm_connector base; + + struct vkms_config_connector *connector_cfg; }; =20 /** * vkms_connector_init() - Initialize a connector * @vkmsdev: VKMS device containing the connector + * @connector_cfg: Configuration for the connector * * Returns: * The connector or an error on failure. */ -struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev); +struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev, + struct vkms_config_connector *connector_cfg); =20 #endif /* _VKMS_CONNECTOR_H_ */ diff --git a/drivers/gpu/drm/vkms/vkms_output.c b/drivers/gpu/drm/vkms/vkms= _output.c index 8d7ca0cdd79f..3af95983026e 100644 --- a/drivers/gpu/drm/vkms/vkms_output.c +++ b/drivers/gpu/drm/vkms/vkms_output.c @@ -87,7 +87,7 @@ int vkms_output_init(struct vkms_device *vkmsdev) struct vkms_config_encoder *possible_encoder; unsigned long idx =3D 0; =20 - connector_cfg->connector =3D vkms_connector_init(vkmsdev); + connector_cfg->connector =3D vkms_connector_init(vkmsdev, connector_cfg); if (IS_ERR(connector_cfg->connector)) { DRM_ERROR("Failed to init connector\n"); return PTR_ERR(connector_cfg->connector); --=20 2.48.1 From nobody Sun Feb 8 14:35:27 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EFE43210F5B for ; Tue, 25 Feb 2025 18:00:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506403; cv=none; b=qtmV6Joxm+36tVnRz5QlNJGof3PYr4dmFv/CWY2kTDquKjTWvpa1irWURxibE2WM8DYzb9+dRB4HJh4UHH3/ZTNHrYhuPptheUL2Pplry2IUNwp21gIpAZhdHxnQEgJxJ0RfIRAHTfkGJFPW4gkgXMNgi9dE2SHS1NgJhUg76aI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740506403; c=relaxed/simple; bh=ap0abf7pYKvLuYyghIBsdol1SAK7DKp7h/sxPesUTKk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=phL916LHeMan3c3WaSz98muxNcMOSs5XJjgv9vrQ3dGVp3hI3gkLixmm/BLsevxgsWCFjPg0bKRIv6vdVyNu5chE/WVeZLOrCB7VItUWiNg+GPbEhsaQHWOO5Ah8wTlp3RgoqZ6tHo7+9XbdUIUffOO9EO1yFwQqFKmvP8dw8s0= 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=AvALjABw; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AvALjABw" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-4399deda38cso36717545e9.1 for ; Tue, 25 Feb 2025 10:00:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740506399; x=1741111199; 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=yGxwG+6bGnNIthEQL+F1Y0qNbK+3kLrCEEdzMCdmayU=; b=AvALjABw+isMGaS9lGQqlkoBlrxI7lA5aiHyS4B0PKLqpRWpSKa+D/7H8qAkq1FpDL xVbURyy0OdnpzBb2zfmiKLqe4Qi7OJuQsy0l9IRGPMkLiplH9yg3IT3H283NGqrKMSkI BgNb1tub4btT90rTw1EWQqRASERKa+YvivcHtnepEad0fBz6UdyGODZ9XDN0MuOyI8Di hjadgq6T6y1bFCNmkaPwYntMh9QgihP9E61lGfZZzLGhaYxJj7NazFxhA3r7Sy+0J4C+ Ad4osfygQuAnLa3rvMueC8zGkeYJ+UH1pZAiu+sI2U3ymkn8VcdLc+1Qe+RjYVSxOQ1n 6rMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740506399; x=1741111199; 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=yGxwG+6bGnNIthEQL+F1Y0qNbK+3kLrCEEdzMCdmayU=; b=qj54j1jTnlNhN8Qv3ThUP+yyrdcCZKNUmEkPouyf/Xg4tx8/ibPpbAu6IHR5/sWuUJ WIwodzE+0UAg/HF0+beUWjWsZMepUJhtLc2taHqZueiM52S5toUj6I5S7WkEfQp3VylV bj5e39eClnpbGLGB3NAoT97Dzuzo+g+Ef3kAfx6D4LG4wpURZjKQDEFxi8/gB0zEriGV Pxs30PTQcXmnFC3YIPxRpWdgWkPQRIY1Q+Pgxgzyxv3YLsCwyU+23C+6U4BmDeiVzk+7 +FZVJGiiCDGVEawVDehOS+eTJy4giqxnfB7AsrQ2AAWEJWWDYcAskYZsRrCnYHgfhx99 jjiw== X-Forwarded-Encrypted: i=1; AJvYcCW1DomXhAvaea++daTyboDCPb+DzXVeggHNnO4s0yBXPJQSHo54FLgosbzrmknCzOIcoYyf/SAnpbtHoNo=@vger.kernel.org X-Gm-Message-State: AOJu0YyRcUt/9R8Q0e/rmjJu2iKN6yxdg+OPUMt2PBk8+lfIRpPJ2ci1 ypdKQaVkoIIDXB+6Ic6WacYUH72mpVCMU3GmQ/75v/fswGHuBwco X-Gm-Gg: ASbGncvCRFim+7UiT9NaqoGtzj2ABewf6VCpDlK0vzSXWLFv0JOvEmZpT7J58W40z0e Tw94QQpXZYNhMu28TdtE/3W/31J0CseAbPCHgRyKej0apPWrNMd25wafTgc8X+KeitGTOz0rRVU 8bEOUD5i5DEekMiaNlwCwK61fKI8O2yWFkXavquLBI5v0qpHrcIN9lWUc8Ns8+qY/d0Zv69hMan nCCrwff5UwLM4oF8EawogDXs1YTuDyxBo2TTHI17JcC0jzXGONfRlFx1I5rRzMm1Ytr25hX3pgh 8boM1YCL1lD2KOBVeKAXgZ5mYDHM X-Google-Smtp-Source: AGHT+IGqBZvURkcaxlMPmAxOYXrBfupjLCf9BWOro848BGonvQQbFRhIpMLdNCyILndFVpqQPjDTTQ== X-Received: by 2002:a5d:53cf:0:b0:38d:a90c:d489 with SMTP id ffacd0b85a97d-390cc6384a1mr3115400f8f.45.1740506399191; Tue, 25 Feb 2025 09:59:59 -0800 (PST) Received: from fedora.. ([213.94.27.232]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02f3e15sm149063655e9.22.2025.02.25.09.59.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Feb 2025 09:59:58 -0800 (PST) From: =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= To: louis.chauvet@bootlin.com Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Jos=C3=A9=20Exp=C3=B3sito?= Subject: [PATCH v2 16/16] drm/vkms: Allow to configure connector status via configfs Date: Tue, 25 Feb 2025 18:59:36 +0100 Message-ID: <20250225175936.7223-17-jose.exposito89@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250225175936.7223-1-jose.exposito89@gmail.com> References: <20250225175936.7223-1-jose.exposito89@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When a connector is created, add a `status` file to allow to update the connector status to: - 1 connector_status_connected - 2 connector_status_disconnected - 3 connector_status_unknown If the device is enabled, updating the status hot-plug or unplugs the connector. Signed-off-by: Jos=C3=A9 Exp=C3=B3sito --- Documentation/gpu/vkms.rst | 5 +++ drivers/gpu/drm/vkms/vkms_configfs.c | 46 +++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_connector.c | 7 ++++ drivers/gpu/drm/vkms/vkms_connector.h | 6 ++++ 4 files changed, 64 insertions(+) diff --git a/Documentation/gpu/vkms.rst b/Documentation/gpu/vkms.rst index c551241fe873..7c54099b1dc6 100644 --- a/Documentation/gpu/vkms.rst +++ b/Documentation/gpu/vkms.rst @@ -108,6 +108,11 @@ Last but not least, create one or more connectors:: =20 sudo mkdir /config/vkms/my-vkms/connectors/connector0 =20 +Connectors have 1 configurable attribute: + +- status: Connection status: 1 connected, 2 disconnected, 3 unknown (same = values + as those exposed by the "status" property of a connector) + To finish the configuration, link the different pipeline items:: =20 sudo ln -s /config/vkms/my-vkms/crtcs/crtc0 /config/vkms/my-vkms/planes/= plane0/possible_crtcs diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c b/drivers/gpu/drm/vkms/vk= ms_configfs.c index d4d36d2c8f3d..76afb0245388 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; @@ -496,6 +497,50 @@ 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; + + connector =3D connector_item_to_vkms_configfs_connector(item); + + guard(mutex)(&connector->dev->lock); + return sprintf(page, "%u", + vkms_config_connector_get_status(connector->config)); +} + +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; + + 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; @@ -514,6 +559,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 b03a00b5803a..ed99270c590f 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.c +++ b/drivers/gpu/drm/vkms/vkms_connector.c @@ -76,3 +76,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 5ab8a6d65182..7865f54a313c 100644 --- a/drivers/gpu/drm/vkms/vkms_connector.h +++ b/drivers/gpu/drm/vkms/vkms_connector.h @@ -33,4 +33,10 @@ struct vkms_connector { struct vkms_connector *vkms_connector_init(struct vkms_device *vkmsdev, struct vkms_config_connector *connector_cfg); =20 +/** + * struct vkms_device *vkmsdev() - Update the device's connectors status + * @vkmsdev: VKMS device to update + */ +void vkms_trigger_connector_hotplug(struct vkms_device *vkmsdev); + #endif /* _VKMS_CONNECTOR_H_ */ --=20 2.48.1