From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 807043BADBE; Fri, 20 Mar 2026 16:27:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024050; cv=none; b=O8VIyGYE5XQYiLB4wN/hRsv7GIqkXtUvIVIlvxCl+P51aJ9Q5QEpU209hLJqwhP4hWS5sOkm5eZc854zfGm6I/B6cqSibazyAAtTkWtdNGNZ1tuUOB/cHTW/VjBEQuomZqkcZZLI4xocBpzuUfFG7XTzx5iDl4qxyhY0zQeG8ho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024050; c=relaxed/simple; bh=lNZetqlAlYsCQ3l8SXsI36D+xpB6Any31LXspuuaXTY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uklZ7YeyeByZPft4jkPLor8m7NJ39meUVoQesAdDMm0MFXDICSLlx4tVIAcUu/Vxrmodbyv23mzI212A+M6+HeZlOyBqKfoFDz2B54RluCXIlcxvQDhhxnGyT9V0T+RSwoa9UA3cQsfpc2Bcy6bHubPe3DlTj6G7Crhh11m6A64= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ri/l4I5G; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Ri/l4I5G" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 93F5BC2BC87; Fri, 20 Mar 2026 16:27:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024050; bh=lNZetqlAlYsCQ3l8SXsI36D+xpB6Any31LXspuuaXTY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Ri/l4I5G4LL3GavyOmxNz9RMdGVF7KmPJP+UamcEAbb9MFzJPhczb9G6vD0i0kXmh 1OcFjDxKZHEE6mUTjbGmTdo6nqeMbC+YFl6CHx8HrMAyvkbXxiaFbhRrNBHbsvpSVN mSgvaD78N0ox/V5NCMWqPeZpTp2l19Jw+RcsCuBCXanC+AorwkZNt3RNMVi53GwCr1 yftkUn/wsQ/wmsgnh7ES2o4S/Z9a/K6Mu9vHwlxIPuZxxJVEthKnE8V2yKOyFTuHzn Qb5P8Xy2eV/YZQEsHgWz/occy5+r+I71AOHJ8bIPLsSezBI5TjmShjAmcnHoRkmdZH M9QvbbU+HVOsQ== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:08 +0100 Subject: [PATCH v2 01/20] drm/colorop: Fix typos in the doc 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 Message-Id: <20260320-drm-mode-config-init-v2-1-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2296; i=mripard@kernel.org; h=from:subject:message-id; bh=lNZetqlAlYsCQ3l8SXsI36D+xpB6Any31LXspuuaXTY=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S1O+FtmvStxgxlMUbJckrn03YslMh3OF18JKTyoEB s6ftelmx1QWBmFOBlkxRZYnMmGnl7cvrnKwX/kDZg4rE8gQBi5OAZjIVgXGhg3n7gq/ij3rd/Tu urtp1w5r6zT+0a3k0zlj09aaLzdtxaVbBtM1O+NKXv9h2zRt0Yev5Yw1fO8b3IO6MwyiHQqVLfX EPk/brPs90+sC28yNVyISO3dV8/Mu0V61VfNy31d/jx8L/z8HAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D In the documentation of drm_colorop introduced by commit cfc27680ee20 ("drm/colorop: Introduce new drm_colorop mode object"), the documentation of __drm_colorop_state_reset() and __drm_colorop_reset() were mentioning CRTC when they really meant colorop, probably due to copy and paste. Fixes: cfc27680ee20 ("drm/colorop: Introduce new drm_colorop mode object") Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_colorop.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/drm_colorop.c index 566816e3c6f0c7d172534966fcfe56982e6505f3..373cd0ddb8fd4478874509ed12c= 95451c1f66203 100644 --- a/drivers/gpu/drm/drm_colorop.c +++ b/drivers/gpu/drm/drm_colorop.c @@ -503,11 +503,11 @@ void drm_colorop_atomic_destroy_state(struct drm_colo= rop *colorop, * __drm_colorop_state_reset - resets colorop state to default values * @colorop_state: atomic colorop state, must not be NULL * @colorop: colorop object, must not be NULL * * Initializes the newly allocated @colorop_state with default - * values. This is useful for drivers that subclass the CRTC state. + * values. This is useful for drivers that subclass the colorop state. */ static void __drm_colorop_state_reset(struct drm_colorop_state *colorop_st= ate, struct drm_colorop *colorop) { u64 val; @@ -526,14 +526,14 @@ static void __drm_colorop_state_reset(struct drm_colo= rop_state *colorop_state, /** * __drm_colorop_reset - reset state on colorop * @colorop: drm colorop * @colorop_state: colorop state to assign * - * Initializes the newly allocated @colorop_state and assigns it to - * the &drm_crtc->state pointer of @colorop, usually required when - * initializing the drivers or when called from the &drm_colorop_funcs.res= et - * hook. + * Initializes the newly allocated @colorop_state and assigns it to the + * &drm_colorop->state pointer of @colorop, usually required when + * initializing the drivers or when called from the + * &drm_colorop_funcs.reset hook. * * This is useful for drivers that subclass the colorop state. */ static void __drm_colorop_reset(struct drm_colorop *colorop, struct drm_colorop_state *colorop_state) --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3409D3D1717; Fri, 20 Mar 2026 16:27:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024053; cv=none; b=ZimLj8HiujnlAh2EJyw4NHOBxZlCEXvkbJDSiSe91cUzylN6qegn1T3CtlynA0DlwInaBKRxDM5lN5eESyUYcOH/y9jgv0vkR1shn5jUMqEvS+2A7g52aDXeui+x8BK3AdBBb3H1z38aemY8w1i1mYdaEHQDdSigeaElmZm/AzY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024053; c=relaxed/simple; bh=H+nAyAHG7r+c++BxBGG12xBnveAJ4BFIOThMlPVrju4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HUAZjSt6jONdNZmMDdfV1qC0OgNqhRZJW7c7b0/XHHV/Ujby6q8PLTbDhRzqABeomCz1+5rGssvYumTIcAcoqxPpdiLck5EGCmU1bYB1B+lVBaABCAWpivoczugyeuFioQAXXiKkUIuGh+bGekmSHIPIntSZaH+H57k6qRsDL2k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=n+jGhnRW; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="n+jGhnRW" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 835B8C19425; Fri, 20 Mar 2026 16:27:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024053; bh=H+nAyAHG7r+c++BxBGG12xBnveAJ4BFIOThMlPVrju4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=n+jGhnRW032yI4TUKZGdS9Ogindi4qhXgdcN8dCcLhblct54XXcPInAz7SUNUpt/c BFTtx0Hqfpo6vyb0sjnuAmTpFfoEmMninyJvtFw2++5Meyd/Lk8gyPcG0GWPoe6xOB SQwkFGOerwleCoL8tFvz2maLjl6hAlgD1qg2bjHGqo5kwC2bPjo0oSxzewHFqb1HNa elgEIMFa2Nr4sre2tKv9z9Zv2P6G095/VgDUGUBQfPYvYn5+F09fjI/0u3ESDgDd8b MR2cChEG65XL7Fd24g3Ek8o0pWYZijVzm1bELRjnnKm8Ioc+MGR8bkvMTROnvzxXky VZJwKm9XguWAQ== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:09 +0100 Subject: [PATCH v2 02/20] drm/atomic: Drop drm_private_state.obj assignment from create_state 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 Message-Id: <20260320-drm-mode-config-init-v2-2-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1530; i=mripard@kernel.org; h=from:subject:message-id; bh=H+nAyAHG7r+c++BxBGG12xBnveAJ4BFIOThMlPVrju4=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S1P+Pu433BjQ+OdChu/T5++uBT/p+Png94+XizZZa /dO2Rlu1jGVhUGYk0FWTJHliUzY6eXti6sc7Ff+gJnDygQyhIGLUwAmktXDWB87WyvqzpTTF1Wk LX7oWMcZRpSYRB9oPWSiqLJrqU0Rl/6ylk1LFy/0VDx904tRqTWwhbFh3nNHz4Ruey9n3k29Npq Zlgf2iW/fe/aKWPWEy5N2sCjsrLH9cvRp0eHk63Fx07fsD9kKAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The initial intent of the atomic_create_state helper was to simply allocate a proper drm_private_state and returning it, without any side effect. However, the __drm_atomic_helper_private_obj_create_state() introduces a side effect by setting the drm_private_obj.state to the newly allocated state. This assignment defeats the purpose, but is also redundant since the only caller, drm_atomic_private_obj_init(), will also set this pointer to the newly allocated state. Let's drop the assignment in __drm_atomic_helper_private_obj_create_state(). Fixes: e7be39ed1716 ("drm/atomic-helper: Add private_obj atomic_create_stat= e helper") Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/dr= m_atomic_state_helper.c index 76746ad4a1bbb7142c067c93dd05fbec5d2f98eb..875149494b00e1eb7481e87d7d7= 038103b72b7e3 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -729,12 +729,10 @@ EXPORT_SYMBOL(drm_atomic_helper_connector_destroy_sta= te); void __drm_atomic_helper_private_obj_create_state(struct drm_private_obj *= obj, struct drm_private_state *state) { if (state) state->obj =3D obj; - - obj->state =3D state; } EXPORT_SYMBOL(__drm_atomic_helper_private_obj_create_state); =20 /** * __drm_atomic_helper_private_obj_duplicate_state - copy atomic private s= tate --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A4E9B3D47A5; Fri, 20 Mar 2026 16:27:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024056; cv=none; b=fQQwg1U4Tazfe6PPAKrcJUKoqoxKtaStdxxYNpvLqH2xnqt6fIw01Xx8TVvO7/nKaC1rQ3+HEnJbZ69IpVS3TdoMDQBmDNogAOS7EUytGdiUM7s/UE5gua+0N18A+xSlJRB4XVHME7vhn8zM/wdQgSXgdtg0UbJNZqkzCm3R1jE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024056; c=relaxed/simple; bh=wsgH+JigiQfeFcxwGD7t3o9+hIxvZid3TubvDqbfQKQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gkrgFGpWqWUKfAikWESinz1XVH7TkrCjjj6S2OF1HCOWiSVj3BGM/NwruETtDBsSvxeOF1whTAvvx3S89ZXK2/CIYUxXvf6vgqkjqa/4lXfvEuCZ94Q0KV1Xh9ahCYUJfcFuAzyz9z1kVuhl5xpbmgly95C57zg7h0FWkQ8qT2I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MnyukRsd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MnyukRsd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BD29FC2BCB2; Fri, 20 Mar 2026 16:27:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024056; bh=wsgH+JigiQfeFcxwGD7t3o9+hIxvZid3TubvDqbfQKQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MnyukRsdGM5tALWWow4wXrFdo8tSbj4j8ni/3V46UYr2109ahtsTjO+b8xdEUcYWI B5FJMYYjNoRgcIgBsRxF8+csBoBgS+6LqeDii30a02TOaLREFHylNG/b0do5OgulRX uk/em3q56XPAJnJWUwicAA8LpnyY5y0NwTJ4AcO2XVPr4V0DKDVcERDl+tuHpGEfc3 rK0kS7xWscWDuSxaqOLPIN4F20FcZCis+xH8gNQyPqRGTFvMfi0CrnDdvcdJ1wwHSr GaxwAsRBHzUahnvinIQJekLn9N0AWZdRYeJEctKdrz8xQ24iXt3keg8QHNdSXsHSuI n8e5iAnbkY+TQ== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:10 +0100 Subject: [PATCH v2 03/20] drm/mode-config: Mention drm_mode_config_reset() culprits 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 Message-Id: <20260320-drm-mode-config-init-v2-3-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard , Laurent Pinchart X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1447; i=mripard@kernel.org; h=from:subject:message-id; bh=wsgH+JigiQfeFcxwGD7t3o9+hIxvZid3TubvDqbfQKQ=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S1Nstz3decpi2d3w+dyr5Sep10g8NjdLdNj4TvVkR dCc3sVbOqayMAhzMsiKKbI8kQk7vbx9cZWD/cofMHNYmUCGMHBxCsBE+vUYa3iSZ4dmqL/Xb0pU aF57vk5KrffSjgPs3nUaSq8YoldPLlV6o/bufc2bR9+75RnYukOmMjY8v2TSmPH1tu5y5rSOaW+ /3hGa0P4geHpjnTp3SDDXjcVf9XfxtOklnQ559/qG3ITr7+cCAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D drm_mode_config_reset() does not reset drm_private_states by design. This is especially significant for the DP MST and tunneling code that expect to be preserved across a suspend/resume cycle, where drm_mode_config_reset() is also used. Let's document this expectation. Link: https://lore.kernel.org/dri-devel/aOaQLx-7EpsHRwkH@ideak-desk/ Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_mode_config.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_c= onfig.c index 66f7dc37b5970c0a08f8dde008aef56376c59f37..cba527571ca66d3aa6dc652c87e= 03a19815d1d41 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -187,10 +187,14 @@ int drm_mode_getresources(struct drm_device *dev, voi= d *data, * @dev: drm device * * This functions calls all the crtc's, encoder's and connector's ->reset * callback. Drivers can use this in e.g. their driver load or resume code= to * reset hardware and software state. + * + * Note that @drm_private_obj structures are expected to be stable across + * suspend/resume cycles, and @drm_mode_config_reset() does not affect the= se + * structures. */ void drm_mode_config_reset(struct drm_device *dev) { struct drm_crtc *crtc; struct drm_colorop *colorop; --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 81EF43D5663; Fri, 20 Mar 2026 16:27:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024059; cv=none; b=YK1T91zKxohL6L/TzMAcXapdJHe6TDTSVhYvtki2b1dfO/go2u4YExOGafhBIS7aY6K1awqCxT/tQ0kgO6YSfASZevs1BsagWdA492/3QqZV3AvvSTyF7uqLpABV7gTJAnZYbefFr+4mSQ6kcLFcOZPfi3okDv0VgmUYF1oiQbo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024059; c=relaxed/simple; bh=n4LHo+A3sGmgVx5XTgxskitpmhWZc2WFNui06B/31zE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z0qncID0U9rJ9ZRJcaDo1y2yZdqIPVplv5QuCk27HzL6A5rzLwpckxz+HnPVhxSaIaPaCW3cnOVvLJaEpi46RjCF6EsHH1zQ+7wDjXa/QCkGeIezTVUJUSaw9xSH0NFK+vYrmAm0uZGpnoxLqpGAAeD+FKTfbvC6Z5HdgSwUzN8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GGrjLJnd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GGrjLJnd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 878CAC4CEF7; Fri, 20 Mar 2026 16:27:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024059; bh=n4LHo+A3sGmgVx5XTgxskitpmhWZc2WFNui06B/31zE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=GGrjLJndjxsZX/x+aJ0oaVTO4nTdlgT9wZZTHsVp2XLsJsx3RoxNOZChyF7RMbD0b 1HtspmxvV3b4e50CJg1v4sZgvMy8xjKT0RfjTReFiBVJNSw2RuJIGR0zW3qCo/hSdX QyY3ipfNcOhbTeVPCVWD8MhVsEfGF83iVUjpnu/qaoSkrC85n1zr3GTltrDO257OKg 34JfRXhLPDaxCnARYXKYAPZh13DI99sT0U1GV2WYOTtkh8urYnQd/WSmbCL+TM6Pyn yV1gQD8z4QiZoPwMLSUEqGxoaDCD4vT3sJcMhKN/HPIY6wnghSI3txCIiAIdC9bNdn iF5pfcEj3aW6w== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:11 +0100 Subject: [PATCH v2 04/20] drm/colorop: Rename __drm_colorop_state_reset() 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 Message-Id: <20260320-drm-mode-config-init-v2-4-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2298; i=mripard@kernel.org; h=from:subject:message-id; bh=n4LHo+A3sGmgVx5XTgxskitpmhWZc2WFNui06B/31zE=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S1M/7ZpcevxNoYiS0MM966LT+t91K/3scX8juG1Ha 5PMAv5HHVNZGIQ5GWTFFFmeyISdXt6+uMrBfuUPmDmsTCBDGLg4BWAiK58y1rs3FmS827toya6i 7AddXRI+djbMbSK+zNf4MrfnSj5ie/1ehoO1TXslr4p7UHnphYW3GRv+2wcdjth22e/bz4JuGdt P1tO65c/4V1jcWH+1efO1SfvdZO+mnGUp7Qj+P+O8RUhnjxQA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D __drm_colorop_state_reset() is used to initialize a newly allocated drm_colorop_state, and is being typically called by drm_colorop_reset(). Since we want to consolidate DRM objects state allocation around the atomic_create_state callback that will only allocate and initialize a new drm_colorop_state instance, we will need to call __drm_colorop_state_reset() from both the reset and atomic_create paths. To avoid any confusion, we can thus rename __drm_colorop_state_reset() to __drm_colorop_state_init(). Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_colorop.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/drm_colorop.c index 373cd0ddb8fd4478874509ed12c95451c1f66203..6a26b83b260e8d8e83c703ecde4= 90a7a8740ebfb 100644 --- a/drivers/gpu/drm/drm_colorop.c +++ b/drivers/gpu/drm/drm_colorop.c @@ -498,19 +498,19 @@ void drm_colorop_atomic_destroy_state(struct drm_colo= rop *colorop, __drm_atomic_helper_colorop_destroy_state(state); kfree(state); } =20 /** - * __drm_colorop_state_reset - resets colorop state to default values + * __drm_colorop_state_init - Initializes colorop state to default values * @colorop_state: atomic colorop state, must not be NULL * @colorop: colorop object, must not be NULL * * Initializes the newly allocated @colorop_state with default * values. This is useful for drivers that subclass the colorop state. */ -static void __drm_colorop_state_reset(struct drm_colorop_state *colorop_st= ate, - struct drm_colorop *colorop) +static void __drm_colorop_state_init(struct drm_colorop_state *colorop_sta= te, + struct drm_colorop *colorop) { u64 val; =20 colorop_state->colorop =3D colorop; colorop_state->bypass =3D true; @@ -537,11 +537,11 @@ static void __drm_colorop_state_reset(struct drm_colo= rop_state *colorop_state, */ static void __drm_colorop_reset(struct drm_colorop *colorop, struct drm_colorop_state *colorop_state) { if (colorop_state) - __drm_colorop_state_reset(colorop_state, colorop); + __drm_colorop_state_init(colorop_state, colorop); =20 colorop->state =3D colorop_state; } =20 void drm_colorop_reset(struct drm_colorop *colorop) --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC6503D6686; Fri, 20 Mar 2026 16:27:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024061; cv=none; b=pMjH12lRK6jtc88bdlf3DDTN58nyUPuJCac3Q/bbk5md+lfd0UzE0Gk47sMbyKWRtmtxYPiflO5HxKc8TCIeR5B8aTsJuBccB/JDEtrwGGTMzV6I5Co4OXtHkA6jAALPy6K4u7xHzd0MQO4oNDjZtP9yVYoGsRECmL5vWnuFL+4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024061; c=relaxed/simple; bh=tV0OUH5Z4hrHQzJZ84b17uMDTCIadEHDfju/TQw420U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tY5hIWxfq7apvDfVM93L1YRtIKIV48PK0RpRJMi++2eeCSJmvCtXvtJ69+B8xl13xIAmt8m+td3DWLtlCgTX04woi0nA7DgKJ9Ms0yoKlQ5+VSw5DPsTIY9m+1cJeGKJb/PeGrAhXYeHegpOZROYax7gCBDh3nVsWMaP8FGmXP0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JULZHsrK; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JULZHsrK" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3F16AC2BCAF; Fri, 20 Mar 2026 16:27:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024061; bh=tV0OUH5Z4hrHQzJZ84b17uMDTCIadEHDfju/TQw420U=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=JULZHsrKhybK2x7+zLx74QYzs0VdouhPCYRj/NTVKOvNFPS/WeHgIMDY4uf/nue1P 476XWT0ShIB0WaH8C7+aFvSaDcSSOc4peEasYOHF3OkpnIxdbRNFhk/3mkGdolT7Bh wvuwuA50T+J2tHMERVvM9xcUXMip01xPI70ZFiH0QxJjtm/5LS5j1SfiyIs0Gxry0S u8Jy5bjqosKy/M4nR8ZTJNblNYYHcGOjglBQlY4+8EVOgc5NGOcwzRArJ8NbcpG+Q2 eJd1DNfbe/jsv1pO86rgtvrHXW68U5yy7Wb57baffF8PVMm8IqFqPmeIbYmzlk8P/0 hQYRVrEP3fllw== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:12 +0100 Subject: [PATCH v2 05/20] drm/colorop: Create drm_atomic_helper_colorop_create_state() 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 Message-Id: <20260320-drm-mode-config-init-v2-5-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3503; i=mripard@kernel.org; h=from:subject:message-id; bh=tV0OUH5Z4hrHQzJZ84b17uMDTCIadEHDfju/TQw420U=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S1NnLnmVcOl2Ug/XzdV53+Jy3NbJqynzqv0Uq7iZ7 N1dt7agYyoLgzAng6yYIssTmbDTy9sXVznYr/wBM4eVCWQIAxenAEwkRoyx3qdQ7VXHnyoxCW3m a5J27fa/FsySi2m0WfbrCJPwNHMvhp1yvanzinRyvKSfFcyzXTKNsc6uyvjfI6fZz9nsTn85xdm zn2m/X8HuvREtSt6GnzNspjtnZ+y6t+bTsixDpdlfgtijDwEA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D Commit 47b5ac7daa46 ("drm/atomic: Add new atomic_create_state callback to drm_private_obj") introduced a new pattern for allocating drm object states. Instead of relying on the reset() callback, it created a new atomic_create_state hook. This is helpful because reset is a bit overloaded: it's used to create the initial software state, reset it, but also reset the hardware. It can also be used either at probe time, to create the initial state and possibly reset the hardware to an expected default, but also during suspend/resume. Both these cases come with different expectations too: during the initialization, we want to initialize all states, but during suspend/resume, drm_private_states for example are expected to be kept around. And reset() isn't fallible, which makes it harder to handle initialization errors properly. It's also only relevant for some drivers, since all the helpers for reset only create a new state, and don't touch the hardware at all. It was thus decided to create a new hook that would allocate and initialize a pristine state without any side effect: atomic_create_state to untangle a bit some of it, and to separate the initialization with the actual reset one might need during a suspend/resume. Let's continue the transition to the new pattern with drm_colorop. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_colorop.c | 23 +++++++++++++++++++++++ include/drm/drm_colorop.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/drm_colorop.c index 6a26b83b260e8d8e83c703ecde490a7a8740ebfb..7bfaf2617ec315f42d80ac72a5e= aaef868e65657 100644 --- a/drivers/gpu/drm/drm_colorop.c +++ b/drivers/gpu/drm/drm_colorop.c @@ -521,10 +521,33 @@ static void __drm_colorop_state_init(struct drm_color= op_state *colorop_state, &val); colorop_state->curve_1d_type =3D val; } } =20 +/** + * drm_atomic_helper_colorop_create_state - Allocates and initializes colo= rop atomic state + * @colorop: drm colorop + * + * Initializes a pristine @drm_colorop_state. + * + * RETURNS: + * Pointer to new colorop state, or ERR_PTR on failure. + */ +struct drm_colorop_state * +drm_atomic_helper_colorop_create_state(struct drm_colorop *colorop) +{ + struct drm_colorop_state *state; + + state =3D kzalloc_obj(*state); + if (!state) + return ERR_PTR(-ENOMEM); + + __drm_colorop_state_init(state, colorop); + + return state; +} + /** * __drm_colorop_reset - reset state on colorop * @colorop: drm colorop * @colorop_state: colorop state to assign * diff --git a/include/drm/drm_colorop.h b/include/drm/drm_colorop.h index bd082854ca74cac90b42020b09206a8516687666..874ed693329c0ecf94567c09474= 4fe86fd08e382 100644 --- a/include/drm/drm_colorop.h +++ b/include/drm/drm_colorop.h @@ -423,10 +423,12 @@ int drm_plane_colorop_3dlut_init(struct drm_device *d= ev, struct drm_colorop *col struct drm_plane *plane, const struct drm_colorop_funcs *funcs, uint32_t lut_size, enum drm_colorop_lut3d_interpolation_type interpolation, uint32_t flags); =20 +struct drm_colorop_state * +drm_atomic_helper_colorop_create_state(struct drm_colorop *colorop); struct drm_colorop_state * drm_atomic_helper_colorop_duplicate_state(struct drm_colorop *colorop); =20 void drm_colorop_atomic_destroy_state(struct drm_colorop *colorop, struct drm_colorop_state *state); --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D75473D6CCC; Fri, 20 Mar 2026 16:27:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024064; cv=none; b=gn8rwTt+qSA8Zge9mru7WJypXleWXQ/3c02Dohzs26Yv4vGD1G2Vv0QBOcAP301iX3IASAFX1Du3R8RwfhIshoJLzB9+QDBTvJO047M99dC/aPwtDFK0i7TEpemLbCXoVPKUlPgisEyIE1RsX6YPhygk+I0jFJ1EVQajpeKfICc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024064; c=relaxed/simple; bh=wmAxCcdTkxlbN84+RtEwdgkpAvIMXguvvyonVXL/Njc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Bp+boWknGFH2I8QHMA0a6iN0B+qES3yHQL91c5H2UvSymUGHbOVKCwxjY24EVloj+tKrsk5woR0hye/S6lVSl35JvHvdLpK4WWknT8IHrDFUJjOMxS+VJlyqid/TOMCk2xZUaK0/bfGZ3W2JRWZR0yef3zTUbPU+60AmbdcOk8w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jR0Mh/pu; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jR0Mh/pu" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 06D8DC4CEF7; Fri, 20 Mar 2026 16:27:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024064; bh=wmAxCcdTkxlbN84+RtEwdgkpAvIMXguvvyonVXL/Njc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jR0Mh/puC65e/v0ntb6R6WiiwEWxRTUgn1ArGBfT0h4ySeEdYZf3+5e3/J+8QB0GP XmEpgypJtNUiVu5DS8cobgjVr+Z1bgW9QWuV6zF5BUK544gs/p3l9vqyMe6y1EB5JJ F2i4D2n1P33Qypgg/IKHmXAXkCpiz4U1M+wYIhK0zDoDubMixrZODL74rBRjNaNBKW T40/hkUbNY4nWO2GaOpOjglXoiYstPq18b/WTXA/ysZI5hg7rrEr8sKcw/PBeh5xuH aSW+4BmrNWo1v/LSbrZSxY+FWCMSD7Jgq2iMmEvsJ2nBGyLjsYRVlmi1KI1gEVFzpg SHsr/GMuVEiMw== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:13 +0100 Subject: [PATCH v2 06/20] drm/atomic-state-helper: Fix __drm_atomic_helper_plane_reset() doc typo 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 Message-Id: <20260320-drm-mode-config-init-v2-6-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard , Laurent Pinchart X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1367; i=mripard@kernel.org; h=from:subject:message-id; bh=wmAxCcdTkxlbN84+RtEwdgkpAvIMXguvvyonVXL/Njc=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S9M8LjcfcYg2ZBQtCeP6+YvzafG2VTXMer6yS+Ju+ Aafe3S1YyoLgzAng6yYIssTmbDTy9sXVznYr/wBM4eVCWQIAxenAExEU4SxvjrgLcPO2wKXQ77H 7nze/VfN1WaVXKa96LtLmlFl/B2Bs1z3iU617brt0KydUHFT3UyXsYb7d+YfzujYE1rFJm9F387 TuVvSupMpblGccsMiz0WT09VUV7p3WjZvXvs8YxvzQ++7bgA= X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D A typo has slipped through in the __drm_atomic_helper_plane_reset() documentation, probably due to copy and paste. It will not assign drm_crtc state pointer, but rather the drm_plane's. Reviewed-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/dr= m_atomic_state_helper.c index 875149494b00e1eb7481e87d7d7038103b72b7e3..e1f3d05ad3470154a6be0142397= 9a4deb8617441 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -303,11 +303,11 @@ EXPORT_SYMBOL(__drm_atomic_helper_plane_state_reset); * __drm_atomic_helper_plane_reset - reset state on plane * @plane: drm plane * @plane_state: plane state to assign * * Initializes the newly allocated @plane_state and assigns it to - * the &drm_crtc->state pointer of @plane, usually required when + * the &drm_plane->state pointer of @plane, usually required when * initializing the drivers or when called from the &drm_plane_funcs.reset * hook. * * This is useful for drivers that subclass the plane state. */ --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B0FD33D16FF; Fri, 20 Mar 2026 16:27:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024067; cv=none; b=nqm/AmJPPz0E8Gs0ALIxonnWgcOuIR04o9P2CdlXbV6YetQP/aXLNJ8yFQPYJve4QojGRqLWXX08QA8aYACAFvOfZlXk1+9xsnMGhm64mEaOAqT3VwJU8fVaNjSQriN+KwiE5nUGz/iF5Is1C0ujVV/yspvzPmaZovP1C1d93Bs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024067; c=relaxed/simple; bh=i7TSkNwA5i7hM5OyE8zhFD/zvFWDZzBFXs6vPOsGtYU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XUDyBh5rk4PPXEMMnT1XQzR30hWaDibytQJ9ZSM6xGEhVoajpVGKKMB19GdtzgBwlSB+CPi7MSNBafZQ2NeKQb9tSpBy8s32Gqj4WwjuAzNayoytsEf38nlcyp2rKt+OhBYUX7j79Z1a2pXgPxL9qdF1hC66EHEyKVf7nSHg6OU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PFFMqAPn; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="PFFMqAPn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 167D0C2BC87; Fri, 20 Mar 2026 16:27:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024067; bh=i7TSkNwA5i7hM5OyE8zhFD/zvFWDZzBFXs6vPOsGtYU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=PFFMqAPn66V78VY8gVBPfH3iAT8OXivT/nLHl/NmdhZT9oo5vey1KILVEfd2ItMdg nbYWYbrqB1xip4NiLHQOiNiJMW9UGZQE002HdNdbU2AvQACBibrhD76c002O4fuoNl SVLCBQdtQkR6LhnAAnRtI7D68dUHWqhu4rsaB5nnXnGbNSDbAMkbPZl1X2LXoTGHfZ VWwJQDOlhHz3Cc7id9OsbluyGvhYe8b55yc1eMwcdlVglLE0HdRvmvQv0CmEctedYJ LfV7+t59KGVpY1RcfOGbW8cqCvZOkUTRkDiTph74MSSy4KFdWhRxP3cbOEC+HvvArQ NDWwbn7gFTD4w== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:14 +0100 Subject: [PATCH v2 07/20] drm/atomic-state-helper: Rename __drm_atomic_helper_plane_state_reset() 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 Message-Id: <20260320-drm-mode-config-init-v2-7-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard , Laurent Pinchart X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4770; i=mripard@kernel.org; h=from:subject:message-id; bh=i7TSkNwA5i7hM5OyE8zhFD/zvFWDZzBFXs6vPOsGtYU=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S9N0nZJn5nf7Oxi4bzm6U61Krta3I/hbP4fI1i9ru nmebLzWMZWFQZiTQVZMkeWJTNjp5e2LqxzsV/6AmcPKBDKEgYtTACbyq5Kx4cau03FThIUbD/05 7nvw650NnxK5Q4Ke8Ex8tI59T8QP9u9G1VGlWjOap51+tjXSJGflPsY6y4+Jia7ZLfHWChkHGAt mtRgtLK24abQhxUWzvPPljamrHUyWd0X8ars6RXPdJe4ZX44CAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D __drm_atomic_helper_plane_state_reset() is used to initialize a newly allocated drm_plane_state, and is being typically called by the drm_plane_funcs.reset implementation. Since we want to consolidate DRM objects state allocation around the atomic_create_state callback that will only allocate and initialize a new drm_plane_state instance, we will need to call __drm_atomic_helper_plane_state_reset() from both the reset and atomic_create hooks. To avoid any confusion, we can thus rename __drm_atomic_helper_plane_state_reset() to __drm_atomic_helper_plane_state_init(). Suggested-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 10 +++++----- drivers/gpu/drm/i915/display/intel_plane.c | 2 +- include/drm/drm_atomic_state_helper.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/dr= m_atomic_state_helper.c index e1f3d05ad3470154a6be01423979a4deb8617441..2548d6da13675f63304dc92423c= 5d225de0447a8 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -235,19 +235,19 @@ void drm_atomic_helper_crtc_destroy_state(struct drm_= crtc *crtc, kfree(state); } EXPORT_SYMBOL(drm_atomic_helper_crtc_destroy_state); =20 /** - * __drm_atomic_helper_plane_state_reset - resets plane state to default v= alues + * __drm_atomic_helper_plane_state_init - Init plane state to default valu= es * @plane_state: atomic plane state, must not be NULL * @plane: plane object, must not be NULL * * Initializes the newly allocated @plane_state with default * values. This is useful for drivers that subclass the CRTC state. */ -void __drm_atomic_helper_plane_state_reset(struct drm_plane_state *plane_s= tate, - struct drm_plane *plane) +void __drm_atomic_helper_plane_state_init(struct drm_plane_state *plane_st= ate, + struct drm_plane *plane) { u64 val; =20 plane_state->plane =3D plane; plane_state->rotation =3D DRM_MODE_ROTATE_0; @@ -295,11 +295,11 @@ void __drm_atomic_helper_plane_state_reset(struct drm= _plane_state *plane_state, plane->hotspot_y_property, &val)) plane_state->hotspot_y =3D val; } } -EXPORT_SYMBOL(__drm_atomic_helper_plane_state_reset); +EXPORT_SYMBOL(__drm_atomic_helper_plane_state_init); =20 /** * __drm_atomic_helper_plane_reset - reset state on plane * @plane: drm plane * @plane_state: plane state to assign @@ -313,11 +313,11 @@ EXPORT_SYMBOL(__drm_atomic_helper_plane_state_reset); */ void __drm_atomic_helper_plane_reset(struct drm_plane *plane, struct drm_plane_state *plane_state) { if (plane_state) - __drm_atomic_helper_plane_state_reset(plane_state, plane); + __drm_atomic_helper_plane_state_init(plane_state, plane); =20 plane->state =3D plane_state; } EXPORT_SYMBOL(__drm_atomic_helper_plane_reset); =20 diff --git a/drivers/gpu/drm/i915/display/intel_plane.c b/drivers/gpu/drm/i= 915/display/intel_plane.c index e06a0618b4c6cd3b4d13752f604006b525118193..705367fef836663e50fe9bbfb1f= cc83abf1fb249 100644 --- a/drivers/gpu/drm/i915/display/intel_plane.c +++ b/drivers/gpu/drm/i915/display/intel_plane.c @@ -65,11 +65,11 @@ static void intel_plane_state_reset(struct intel_plane_state *plane_state, struct intel_plane *plane) { memset(plane_state, 0, sizeof(*plane_state)); =20 - __drm_atomic_helper_plane_state_reset(&plane_state->uapi, &plane->base); + __drm_atomic_helper_plane_state_init(&plane_state->uapi, &plane->base); =20 plane_state->scaler_id =3D -1; } =20 struct intel_plane *intel_plane_alloc(void) diff --git a/include/drm/drm_atomic_state_helper.h b/include/drm/drm_atomic= _state_helper.h index 900672c6ea90ba9cb87e38a7c84225972aee43c5..44e8850aae7fd6390f4b58188a9= c677b8389702f 100644 --- a/include/drm/drm_atomic_state_helper.h +++ b/include/drm/drm_atomic_state_helper.h @@ -51,11 +51,11 @@ struct drm_crtc_state * drm_atomic_helper_crtc_duplicate_state(struct drm_crtc *crtc); void __drm_atomic_helper_crtc_destroy_state(struct drm_crtc_state *state); void drm_atomic_helper_crtc_destroy_state(struct drm_crtc *crtc, struct drm_crtc_state *state); =20 -void __drm_atomic_helper_plane_state_reset(struct drm_plane_state *state, +void __drm_atomic_helper_plane_state_init(struct drm_plane_state *state, struct drm_plane *plane); void __drm_atomic_helper_plane_reset(struct drm_plane *plane, struct drm_plane_state *state); void drm_atomic_helper_plane_reset(struct drm_plane *plane); void __drm_atomic_helper_plane_duplicate_state(struct drm_plane *plane, --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 750523D75B9; Fri, 20 Mar 2026 16:27:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024070; cv=none; b=V1Ihn5gzbXMfks8xBmmzpQ0Pm4xZWV2k9Nz9ii5CSRHO6kTLM/HDWaalNB/Tc+k1mPpl+6C3GfUYkJ32Lo9puGrdu/R5m8YC+aqOBuwLahXj99t3mGWTOWO/jqWWfMfFOQrU+TFBVcUyTXb0D1BPOlP3WFw6yfh6cIIOlYrHT40= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024070; c=relaxed/simple; bh=PqsB2RkCa3QvLCcQsrbNql5Tpc2ViDnOBzVDeVnK5+A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l5Q7JBKv6JYvCJpWUjQwEgZZZlylHaguvXlzDiS3M4nwNIRwfp8kcgAOJ//eNPdT+OcgvobDo//6QrgMqz83+3SbzTM0y/oKjScW32+vULKsQfbolycIXmlu8gneyGuEDM8b2+HemxwLIwyb0b/UDqV/pfQs08/zYvwhbUykHdg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=V8N5xB8f; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="V8N5xB8f" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CCC7BC4CEF7; Fri, 20 Mar 2026 16:27:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024070; bh=PqsB2RkCa3QvLCcQsrbNql5Tpc2ViDnOBzVDeVnK5+A=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=V8N5xB8fWgzIV/wvvGWMu5wiPk47S0tclDbbQD3QZre9gW1tVU9DrbdTEuHibE+xN 0ahEA5cRSH+k+S/dEUVw06niuEJK3isbeHMpQMpCVFATybGOflEJaTP68QH2p2f9jb 4mZlKaoX6xYsYi/qmK9w2420DzaM/q5aOpiPeB9sX6M+sskK26khZ7L3+4bgLjbFMb 1kJi37NAQjE17hblh9rmDiIQ5V/ByIpm+eiByZR2DJwFuDr3jKaWTRLqdtK4MSJfPq bcKpdNr6ggNKNT5JlfxdEhxXoe7HK3uYY3aYJd9Dw1e70mouu3WpZIJUaJCgMIc7ar bzvwHP5RtG5tg== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:15 +0100 Subject: [PATCH v2 08/20] drm/plane: Add new atomic_create_state callback 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 Message-Id: <20260320-drm-mode-config-init-v2-8-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7550; i=mripard@kernel.org; h=from:subject:message-id; bh=PqsB2RkCa3QvLCcQsrbNql5Tpc2ViDnOBzVDeVnK5+A=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S9Nf2fekS4S8cdA35pGoFkx7EFB7VUrR4/p21WWJK aUqNm0dU1kYhDkZZMUUWZ7IhJ1e3r64ysF+5Q+YOaxMIEMYuDgFYCI98xnrM95/3rorqjpU5c/l nyqy7Mv0M6JZRBbJrlKWTVZgu8Umz8y0NMXdZsGja6odgkGfvscw1sqvMnk6leld+W2eU0wLC39 WpxycdjDc1rVf7pjM3bWzX/8Wjf+4hu/AueI/c2+VN++Y8xUA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D Commit 47b5ac7daa46 ("drm/atomic: Add new atomic_create_state callback to drm_private_obj") introduced a new pattern for allocating drm object states. Instead of relying on the reset() callback, it created a new atomic_create_state hook. This is helpful because reset is a bit overloaded: it's used to create the initial software state, reset it, but also reset the hardware. It can also be used either at probe time, to create the initial state and possibly reset the hardware to an expected default, but also during suspend/resume. Both these cases come with different expectations too: during the initialization, we want to initialize all states, but during suspend/resume, drm_private_states for example are expected to be kept around. And reset() isn't fallible, which makes it harder to handle initialization errors properly. And this is only really relevant for some drivers, since all the helpers for reset only create a new state, and don't touch the hardware at all. It was thus decided to create a new hook that would allocate and initialize a pristine state without any side effect: atomic_create_state to untangle a bit some of it, and to separate the initialization with the actual reset one might need during a suspend/resume. Let's continue the transition to the new pattern with planes. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 44 +++++++++++++++++++++++++++= ++++ drivers/gpu/drm/drm_mode_config.c | 21 ++++++++++++++- include/drm/drm_atomic_state_helper.h | 4 +++ include/drm/drm_plane.h | 13 +++++++++ 4 files changed, 81 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/dr= m_atomic_state_helper.c index 2548d6da13675f63304dc92423c5d225de0447a8..f4ce9d3573cbecf216904db5433= 5e0cf84a01c39 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -319,10 +319,29 @@ void __drm_atomic_helper_plane_reset(struct drm_plane= *plane, =20 plane->state =3D plane_state; } EXPORT_SYMBOL(__drm_atomic_helper_plane_reset); =20 +/** + * __drm_atomic_helper_plane_create_state - initializes plane state + * @plane: plane object + * @state: new state to initialize + * + * Initializes the newly allocated @state, usually required when + * initializing the drivers. + * + * @state is assumed to be zeroed. + * + * This is useful for drivers that subclass @drm_plane_state. + */ +void __drm_atomic_helper_plane_create_state(struct drm_plane *plane, + struct drm_plane_state *state) +{ + __drm_atomic_helper_plane_state_init(state, plane); +} +EXPORT_SYMBOL(__drm_atomic_helper_plane_create_state); + /** * drm_atomic_helper_plane_reset - default &drm_plane_funcs.reset hook for= planes * @plane: drm plane * * Resets the atomic state for @plane by freeing the state pointer (which = might @@ -338,10 +357,35 @@ void drm_atomic_helper_plane_reset(struct drm_plane *= plane) if (plane->state) __drm_atomic_helper_plane_reset(plane, plane->state); } EXPORT_SYMBOL(drm_atomic_helper_plane_reset); =20 +/** + * drm_atomic_helper_plane_create_state - default &drm_plane_funcs.atomic_= create_state hook for planes + * @plane: plane object + * + * Initializes a pristine @drm_plane_state. + * + * This is useful for drivers that don't subclass @drm_plane_state. + * + * RETURNS: + * Pointer to new plane state, or ERR_PTR on failure. + */ +struct drm_plane_state *drm_atomic_helper_plane_create_state(struct drm_pl= ane *plane) +{ + struct drm_plane_state *state; + + state =3D kzalloc_obj(*state); + if (!state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_plane_create_state(plane, state); + + return state; +} +EXPORT_SYMBOL(drm_atomic_helper_plane_create_state); + /** * __drm_atomic_helper_plane_duplicate_state - copy atomic plane state * @plane: plane object * @state: atomic plane state * diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_c= onfig.c index cba527571ca66d3aa6dc652c87e03a19815d1d41..09b8292195ba5eb5d96735aee55= 06407bd32ade3 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -180,10 +180,26 @@ int drm_mode_getresources(struct drm_device *dev, voi= d *data, drm_connector_list_iter_end(&conn_iter); =20 return ret; } =20 +static int drm_mode_config_plane_create_state(struct drm_plane *plane) +{ + struct drm_plane_state *plane_state; + + if (!plane->funcs->atomic_create_state) + return 0; + + plane_state =3D plane->funcs->atomic_create_state(plane); + if (IS_ERR(plane_state)) + return PTR_ERR(plane_state); + + plane->state =3D plane_state; + + return 0; +} + /** * drm_mode_config_reset - call ->reset callbacks * @dev: drm device * * This functions calls all the crtc's, encoder's and connector's ->reset @@ -204,13 +220,16 @@ void drm_mode_config_reset(struct drm_device *dev) struct drm_connector_list_iter conn_iter; =20 drm_for_each_colorop(colorop, dev) drm_colorop_reset(colorop); =20 - drm_for_each_plane(plane, dev) + drm_for_each_plane(plane, dev) { if (plane->funcs->reset) plane->funcs->reset(plane); + else if (plane->funcs->atomic_create_state) + drm_mode_config_plane_create_state(plane); + } =20 drm_for_each_crtc(crtc, dev) if (crtc->funcs->reset) crtc->funcs->reset(crtc); =20 diff --git a/include/drm/drm_atomic_state_helper.h b/include/drm/drm_atomic= _state_helper.h index 44e8850aae7fd6390f4b58188a9c677b8389702f..6a3a2feb3dff1f2fbdf2a6e63d8= d7317c7d6ead6 100644 --- a/include/drm/drm_atomic_state_helper.h +++ b/include/drm/drm_atomic_state_helper.h @@ -53,10 +53,14 @@ void __drm_atomic_helper_crtc_destroy_state(struct drm_= crtc_state *state); void drm_atomic_helper_crtc_destroy_state(struct drm_crtc *crtc, struct drm_crtc_state *state); =20 void __drm_atomic_helper_plane_state_init(struct drm_plane_state *state, struct drm_plane *plane); +void __drm_atomic_helper_plane_create_state(struct drm_plane *plane, + struct drm_plane_state *state); +struct drm_plane_state * +drm_atomic_helper_plane_create_state(struct drm_plane *plane); void __drm_atomic_helper_plane_reset(struct drm_plane *plane, struct drm_plane_state *state); void drm_atomic_helper_plane_reset(struct drm_plane *plane); void __drm_atomic_helper_plane_duplicate_state(struct drm_plane *plane, struct drm_plane_state *state); diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h index 703ef4d1bbbcf084c43aa5e127d28691878061c4..4d4d511b681d50c17fbc593cce9= f706d63e04a52 100644 --- a/include/drm/drm_plane.h +++ b/include/drm/drm_plane.h @@ -386,10 +386,23 @@ struct drm_plane_funcs { * 0 on success or a negative error code on failure. */ int (*set_property)(struct drm_plane *plane, struct drm_property *property, uint64_t val); =20 + /** + * @atomic_create_state: + * + * Allocates a pristine, initialized, state for the plane object + * and returns it. + * + * RETURNS: + * + * A new, pristine, plane state instance or an error pointer + * on failure. + */ + struct drm_plane_state *(*atomic_create_state)(struct drm_plane *plane); + /** * @atomic_duplicate_state: * * Duplicate the current atomic state for this plane and return it. * The core and helpers guarantee that any atomic state duplicated with --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8848C3D2FF5; Fri, 20 Mar 2026 16:27:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024073; cv=none; b=PkOMj/MrUSbZFqBdMGwqNdW0pA4xYL5MBeLzmsbZ46vRgHBgdW6dxtPbRXFCM0axrCW2Z5mw2Mn6Ulb1amZClh2cOG0J4Cfc4xcQRsz/99AHqLrbl9nFHr+gXmc84xPDfdBjOJsytxbwReKLIFJjXIA5gS4R+a9eQOX1EOLJcQ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024073; c=relaxed/simple; bh=OYt8JWbC+U6q/3y2//UayFFXZtrcd5X4C504StwyqRQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GTX1rxFdhDtTc0RuALhnPoY07JjkvTwSOs1Mwrnfdl9g55kxzWG8wBB1T22mhwllHxCX3gmOnOBcGCYlemhOliaBPlZca3oIC9IJyEWylkUnStHPjEnOPgG6k62KlXqaDY8mw2v7bsxsC/YNLQvSYQ+KLhVmWGCIkOqMRpPjcRs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DwIbUBtv; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DwIbUBtv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 973E5C2BCB0; Fri, 20 Mar 2026 16:27:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024073; bh=OYt8JWbC+U6q/3y2//UayFFXZtrcd5X4C504StwyqRQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=DwIbUBtvumaLwZ1WZdcLDF7TptZ16+RxASwEbQzNQpnjPpfEltfnvFBUdcHDwhmRU Zmsqq3OG5Q2SFpa3movm/BWdLKo2EggXovikorC9vOk96UaWu92ojVxbTXeHOYdOzG wAHoHz24J9WyRCo6+uBt/LVXtTBxUM8zTD7m9r5j4q4SEMG7pY1nEiF9WMyrBvIMqN Xdk9nVHiXsIuwvrBGlzMWUVNRZ0cMPzUb/GUrk4vrKNe/l2/UMj+9NI10iSLWyD2Wg MgXDhMm2abVNz/uFjMyyKaklV7Kol+SV6Uarkf4NvQCzj/55IUxTkUlrIAFzM4worI /p7hbIdVexT+A== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:16 +0100 Subject: [PATCH v2 09/20] drm/atomic-state-helper: Rename __drm_atomic_helper_crtc_state_reset() 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 Message-Id: <20260320-drm-mode-config-init-v2-9-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard , Laurent Pinchart X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4492; i=mripard@kernel.org; h=from:subject:message-id; bh=OYt8JWbC+U6q/3y2//UayFFXZtrcd5X4C504StwyqRQ=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S9MDOHvnzzj21Ncr7+PaI8x37rqcnKR0roKvNzVr+ pUg4ekXO6ayMAhzMsiKKbI8kQk7vbx9cZWD/cofMHNYmUCGMHBxCsBE7mkyVrNNmca1aWdeg/3B fx8rz0zmYdmfz/NsptErdZ4Lju8ufBMx45T5xLM52mKeo+3DkpJtzIwNrdYf8pi8z7nfWaS1qu3 J1IsP1s/Y1vVnYbfiybV/ru//59KSWGyaaBH1aUlr8IFuvqAFAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D __drm_atomic_helper_crtc_state_reset() is used to initialize a newly allocated drm_crtc_state, and is being typically called by the drm_crtc_funcs.reset implementation. Since we want to consolidate DRM objects state allocation around the atomic_create_state callback that will only allocate and initialize a new drm_crtc_state instance, we will need to call __drm_atomic_helper_crtc_state_reset() from both the reset and atomic_create hooks. To avoid any confusion, we can thus rename __drm_atomic_helper_crtc_state_reset() to __drm_atomic_helper_crtc_state_init(). Suggested-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 10 +++++----- drivers/gpu/drm/i915/display/intel_crtc.c | 2 +- include/drm/drm_atomic_state_helper.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/dr= m_atomic_state_helper.c index f4ce9d3573cbecf216904db54335e0cf84a01c39..b87cc3cd5b0021699ac57a33739= d172a5706e2e1 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -61,25 +61,25 @@ * For other drivers the building blocks are split out, see the documentat= ion * for these functions. */ =20 /** - * __drm_atomic_helper_crtc_state_reset - reset the CRTC state + * __drm_atomic_helper_crtc_state_init - Initializes the CRTC state * @crtc_state: atomic CRTC state, must not be NULL * @crtc: CRTC object, must not be NULL * * Initializes the newly allocated @crtc_state with default * values. This is useful for drivers that subclass the CRTC state. */ void -__drm_atomic_helper_crtc_state_reset(struct drm_crtc_state *crtc_state, - struct drm_crtc *crtc) +__drm_atomic_helper_crtc_state_init(struct drm_crtc_state *crtc_state, + struct drm_crtc *crtc) { crtc_state->crtc =3D crtc; crtc_state->background_color =3D DRM_ARGB64_PREP(0xffff, 0, 0, 0); } -EXPORT_SYMBOL(__drm_atomic_helper_crtc_state_reset); +EXPORT_SYMBOL(__drm_atomic_helper_crtc_state_init); =20 /** * __drm_atomic_helper_crtc_reset - reset state on CRTC * @crtc: drm CRTC * @crtc_state: CRTC state to assign @@ -94,11 +94,11 @@ EXPORT_SYMBOL(__drm_atomic_helper_crtc_state_reset); void __drm_atomic_helper_crtc_reset(struct drm_crtc *crtc, struct drm_crtc_state *crtc_state) { if (crtc_state) - __drm_atomic_helper_crtc_state_reset(crtc_state, crtc); + __drm_atomic_helper_crtc_state_init(crtc_state, crtc); =20 if (drm_dev_has_vblank(crtc->dev)) drm_crtc_vblank_reset(crtc); =20 crtc->state =3D crtc_state; diff --git a/drivers/gpu/drm/i915/display/intel_crtc.c b/drivers/gpu/drm/i9= 15/display/intel_crtc.c index 53378d2dcbec867e7973cb3b874802f2ada01d41..b57a59a5f7786f1029d576b0f3d= 564e77b7060e4 100644 --- a/drivers/gpu/drm/i915/display/intel_crtc.c +++ b/drivers/gpu/drm/i915/display/intel_crtc.c @@ -179,11 +179,11 @@ struct intel_crtc_state *intel_crtc_state_alloc(struc= t intel_crtc *crtc) void intel_crtc_state_reset(struct intel_crtc_state *crtc_state, struct intel_crtc *crtc) { memset(crtc_state, 0, sizeof(*crtc_state)); =20 - __drm_atomic_helper_crtc_state_reset(&crtc_state->uapi, &crtc->base); + __drm_atomic_helper_crtc_state_init(&crtc_state->uapi, &crtc->base); =20 crtc_state->cpu_transcoder =3D INVALID_TRANSCODER; crtc_state->master_transcoder =3D INVALID_TRANSCODER; crtc_state->hsw_workaround_pipe =3D INVALID_PIPE; crtc_state->scaler_state.scaler_id =3D -1; diff --git a/include/drm/drm_atomic_state_helper.h b/include/drm/drm_atomic= _state_helper.h index 6a3a2feb3dff1f2fbdf2a6e63d8d7317c7d6ead6..161cd1f6b8266e882eb1fd128b4= 03cba350be3d2 100644 --- a/include/drm/drm_atomic_state_helper.h +++ b/include/drm/drm_atomic_state_helper.h @@ -38,11 +38,11 @@ struct drm_connector_state; struct drm_private_obj; struct drm_private_state; struct drm_modeset_acquire_ctx; struct drm_device; =20 -void __drm_atomic_helper_crtc_state_reset(struct drm_crtc_state *state, +void __drm_atomic_helper_crtc_state_init(struct drm_crtc_state *state, struct drm_crtc *crtc); void __drm_atomic_helper_crtc_reset(struct drm_crtc *crtc, struct drm_crtc_state *state); void drm_atomic_helper_crtc_reset(struct drm_crtc *crtc); void __drm_atomic_helper_crtc_duplicate_state(struct drm_crtc *crtc, --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 194BD3D2FFB; Fri, 20 Mar 2026 16:27:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024076; cv=none; b=O92ql7u91+CWxYKdKRjYa7XSLATLRMN+leWzZGAzj9Q4qaoeFEBESGqb7Y39QPLwjHQHO4Tjg0qhSElsEi8kA4lat4ghd8G+0HHC38xa5vwA6aTkupNfU+TcVE+Q1XCUsnJzwF2rSLg4t9OLJbmtlBLKG8PvIZOCJkZGLjCDkqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024076; c=relaxed/simple; bh=2qp5t9aQpBZuM8v67WkQspT3zadSO6zInBF97GrhnHA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CTvE9Ued4pdmxR3olRy9fgXqW39cRDNWkXL5Qd/haYz6+ryT22WMA9gthD26RbrqZ/xW8EoiRNBBdR5yu/Mqcz/s8y73pgntY8l2uErrw32B/VQU6pwbN1ghNW9EgT6fpbcgBpgmax1bUbvEJ9uS9w6omlZyAcwigXF0NUN1cTA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=brxfVxXL; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="brxfVxXL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5A29FC2BCB1; Fri, 20 Mar 2026 16:27:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024075; bh=2qp5t9aQpBZuM8v67WkQspT3zadSO6zInBF97GrhnHA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=brxfVxXLIfbsPD617Y6Kcp/LyC93yk1DvpzIrrjwDbEdMgfWWQC+qGiWKCxqEByY8 ahiI6iHSZyZpikkYYpNTBANCEijsMAc8+idRwjOAAADHzPGq2uYNimcFkT9ntZoyaV s2mr7rATAFkvkOX+4p3x66VZEouY0dur5hcEENHc4o4T+OmONahlFxkbY9CX0RVHG6 g99nJVRu4sFJ1Sr7A0973voohK9sjGbYy5w9rmzbbpGqYlW55gBZegdOTye4a6RHmD FD26RKgPQcG0nBHaj0jk3FFLD/VDxIdg48fJsBkUoOlx+fhBi5RmfO+jsJ3HflqSar AL7vrsFYtMoQQ== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:17 +0100 Subject: [PATCH v2 10/20] drm/crtc: Add new atomic_create_state callback 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 Message-Id: <20260320-drm-mode-config-init-v2-10-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7525; i=mripard@kernel.org; h=from:subject:message-id; bh=2qp5t9aQpBZuM8v67WkQspT3zadSO6zInBF97GrhnHA=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7SzNYr2k9evvg0vWssJke3lpFzZllE1mnaipxclZt5 Zu0TyO6YyoLgzAng6yYIssTmbDTy9sXVznYr/wBM4eVCWQIAxenAEzklQtjrcT9z90SWwVD+56y 3CmVefrZ+cek1azn2IzEXnwprdV6cu+BaG7Wqnm9AmveiK9b+Ct2FWPD5D2Nla+ePvx7ZEaVytT dYZ+cF62WVmJO3aFvLaaRIvuDQ1H87NVnXgzPZ/OV1K/4nWsCAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D Commit 47b5ac7daa46 ("drm/atomic: Add new atomic_create_state callback to drm_private_obj") introduced a new pattern for allocating drm object states. Instead of relying on the reset() callback, it created a new atomic_create_state hook. This is helpful because reset is a bit overloaded: it's used to create the initial software tate, reset it, but also reset the hardware. It can also be used either at probe time, to create the initial state and possibly reset the hardware to an expected default, but also during suspend/resume. Both these cases come with different expectations too: during the initialization, we want to initialize all states, but during suspend/resume, drm_private_states for example are expected to be kept around. And reset() isn't fallible, which makes it harder to handle initialization errors properly. And this is only really relevant for some drivers, since all the helpers for reset only create a new state, and don't touch the hardware at all. It was thus decided to create a new hook that would allocate and initialize a pristine state without any side effect: atomic_create_state to untangle a bit some of it, and to separate the initialization with the actual reset one might need during a suspend/resume. Let's continue the transition to the new pattern with crtcs. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 47 +++++++++++++++++++++++++++= ++++ drivers/gpu/drm/drm_mode_config.c | 21 +++++++++++++- include/drm/drm_atomic_state_helper.h | 4 +++ include/drm/drm_crtc.h | 13 +++++++++ 4 files changed, 84 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/dr= m_atomic_state_helper.c index b87cc3cd5b0021699ac57a33739d172a5706e2e1..f1fc2edc6e6e35fbac5ef82437f= 3cb7485afc412 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -103,10 +103,32 @@ __drm_atomic_helper_crtc_reset(struct drm_crtc *crtc, =20 crtc->state =3D crtc_state; } EXPORT_SYMBOL(__drm_atomic_helper_crtc_reset); =20 +/** + * __drm_atomic_helper_crtc_create_state - initializes crtc state + * @crtc: crtc object + * @state: new state to initialize + * + * Initializes the newly allocated @state, usually required when + * initializing the drivers. + * + * @state is assumed to be zeroed. + * + * This is useful for drivers that subclass @drm_crtc_state. + */ +void __drm_atomic_helper_crtc_create_state(struct drm_crtc *crtc, + struct drm_crtc_state *state) +{ + __drm_atomic_helper_crtc_state_init(state, crtc); + + if (drm_dev_has_vblank(crtc->dev)) + drm_crtc_vblank_reset(crtc); +} +EXPORT_SYMBOL(__drm_atomic_helper_crtc_create_state); + /** * drm_atomic_helper_crtc_reset - default &drm_crtc_funcs.reset hook for C= RTCs * @crtc: drm CRTC * * Resets the atomic state for @crtc by freeing the state pointer (which m= ight @@ -122,10 +144,35 @@ void drm_atomic_helper_crtc_reset(struct drm_crtc *cr= tc) =20 __drm_atomic_helper_crtc_reset(crtc, crtc_state); } EXPORT_SYMBOL(drm_atomic_helper_crtc_reset); =20 +/** + * drm_atomic_helper_crtc_create_state - default &drm_crtc_funcs.atomic_cr= eate_state hook for crtcs + * @crtc: crtc object + * + * Initializes a pristine @drm_crtc_state. + * + * This is useful for drivers that don't subclass @drm_crtc_state. + * + * RETURNS: + * Pointer to new crtc state, or ERR_PTR on failure. + */ +struct drm_crtc_state *drm_atomic_helper_crtc_create_state(struct drm_crtc= *crtc) +{ + struct drm_crtc_state *state; + + state =3D kzalloc_obj(*state); + if (!state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_crtc_create_state(crtc, state); + + return state; +} +EXPORT_SYMBOL(drm_atomic_helper_crtc_create_state); + /** * __drm_atomic_helper_crtc_duplicate_state - copy atomic CRTC state * @crtc: CRTC object * @state: atomic CRTC state * diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_c= onfig.c index 09b8292195ba5eb5d96735aee5506407bd32ade3..f5092d03b168bb114a199b1dbca= eb770983c9749 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -196,10 +196,26 @@ static int drm_mode_config_plane_create_state(struct = drm_plane *plane) plane->state =3D plane_state; =20 return 0; } =20 +static int drm_mode_config_crtc_create_state(struct drm_crtc *crtc) +{ + struct drm_crtc_state *crtc_state; + + if (!crtc->funcs->atomic_create_state) + return 0; + + crtc_state =3D crtc->funcs->atomic_create_state(crtc); + if (IS_ERR(crtc_state)) + return PTR_ERR(crtc_state); + + crtc->state =3D crtc_state; + + return 0; +} + /** * drm_mode_config_reset - call ->reset callbacks * @dev: drm device * * This functions calls all the crtc's, encoder's and connector's ->reset @@ -227,13 +243,16 @@ void drm_mode_config_reset(struct drm_device *dev) plane->funcs->reset(plane); else if (plane->funcs->atomic_create_state) drm_mode_config_plane_create_state(plane); } =20 - drm_for_each_crtc(crtc, dev) + drm_for_each_crtc(crtc, dev) { if (crtc->funcs->reset) crtc->funcs->reset(crtc); + else if (crtc->funcs->atomic_create_state) + drm_mode_config_crtc_create_state(crtc); + } =20 drm_for_each_encoder(encoder, dev) if (encoder->funcs && encoder->funcs->reset) encoder->funcs->reset(encoder); =20 diff --git a/include/drm/drm_atomic_state_helper.h b/include/drm/drm_atomic= _state_helper.h index 161cd1f6b8266e882eb1fd128b403cba350be3d2..bc83094dfb78f0f3699ca7956a8= a666ca09b2d1a 100644 --- a/include/drm/drm_atomic_state_helper.h +++ b/include/drm/drm_atomic_state_helper.h @@ -43,10 +43,14 @@ struct drm_device; void __drm_atomic_helper_crtc_state_init(struct drm_crtc_state *state, struct drm_crtc *crtc); void __drm_atomic_helper_crtc_reset(struct drm_crtc *crtc, struct drm_crtc_state *state); void drm_atomic_helper_crtc_reset(struct drm_crtc *crtc); +void __drm_atomic_helper_crtc_create_state(struct drm_crtc *crtc, + struct drm_crtc_state *state); +struct drm_crtc_state * +drm_atomic_helper_crtc_create_state(struct drm_crtc *crtc); void __drm_atomic_helper_crtc_duplicate_state(struct drm_crtc *crtc, struct drm_crtc_state *state); struct drm_crtc_state * drm_atomic_helper_crtc_duplicate_state(struct drm_crtc *crtc); void __drm_atomic_helper_crtc_destroy_state(struct drm_crtc_state *state); diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 312fc1e745d226adec787cd5f1b7c923fe629670..9e410191683c4cb978d759e3b73= 4afdd3bb8aa76 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -636,10 +636,23 @@ struct drm_crtc_funcs { * 0 on success or a negative error code on failure. */ int (*set_property)(struct drm_crtc *crtc, struct drm_property *property, uint64_t val); =20 + /** + * @atomic_create_state: + * + * Allocates a pristine, initialized, state for the crtc object + * and returns it. + * + * RETURNS: + * + * A new, pristine, crtc state instance or an error pointer + * on failure. + */ + struct drm_crtc_state *(*atomic_create_state)(struct drm_crtc *crtc); + /** * @atomic_duplicate_state: * * Duplicate the current atomic state for this CRTC and return it. * The core and helpers guarantee that any atomic state duplicated with --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CFAC03D3304; Fri, 20 Mar 2026 16:27:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024078; cv=none; b=GhR13Nl2pIXp98b49JTPvxv+TmH9TD+2lsp8YdK2EzB1PE5tc3bCXIusXdEztBx3mocjqVvbY0wd9KA7TK6AEMyM7WCa3IVNfvrUqxZjDnpM+I+vZDxB+fxOYQFsPAD5s2ucGBj5eD04M7r1fbrA+DNy/ufCzM1m13OpnU7uHKI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024078; c=relaxed/simple; bh=kpTOHfQdM7ZtfpMEHO2SQd1Cjbd80ECX3YMjYxLWYzE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f3fa3hLf+DckZX4++dNeR3J5B9U1x8oZng2lG9pihwnSFpHY9cZcF0pf52Su5/T9rLx+lRpkDM6U0d3mZZbeg3z0j4PsrRtPtjf+nL4jk3zSJtUqcFQ6p/LwVl8ZFyenjUQl/W/GVursIa7CA9CFhB8/bfPcCk8gXu5NAqGKORk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QPPZzSNA; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QPPZzSNA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 328CEC4CEF7; Fri, 20 Mar 2026 16:27:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024078; bh=kpTOHfQdM7ZtfpMEHO2SQd1Cjbd80ECX3YMjYxLWYzE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QPPZzSNAUJL+ZetnIVF1PL02lt+uavC4e64FOITPkmxYdfET74Vc8OUVXpuPNLdmb FDLX3+gHeUVxvBXfdA8RLEiJJidky0MsGfNu6gMaxKoOZokG0N7gta3YP1GilkYD7L jRSm3vCEIIdJM5wlvxtq4Qpt3v8IiZfI4x1JeNBF3VxZxc5SV0VRQiEuhRf0aQnifW xWX4fEsSS9lSje+SpQHF42C2C0upSlI5lI10n902/P9PH7EyJNwMEUinnFQEGrkZMY fnLuKjqIiCQk721ffNwmE9NVuJeq+luT4DqekOhniXwTsWzcQr4AKIfeW4QbL3OdWH xWchzhi2bmnaA== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:18 +0100 Subject: [PATCH v2 11/20] drm/atomic-state-helper: Rename __drm_atomic_helper_connector_state_reset() 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 Message-Id: <20260320-drm-mode-config-init-v2-11-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard , Laurent Pinchart X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3941; i=mripard@kernel.org; h=from:subject:message-id; bh=kpTOHfQdM7ZtfpMEHO2SQd1Cjbd80ECX3YMjYxLWYzE=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7SzNEZFwO6W443PhfSYm5LEzZ5S8b19SNR2YyPFjk5 eUfZHWjYyoLgzAng6yYIssTmbDTy9sXVznYr/wBM4eVCWQIAxenAExEvomx3jf2Hxv/N6687sp9 n0PuSKxbfmnGNO9rHUuv/dARPj3D7u7z1DXfbq9SvK5gd+jf6lfGWxjrnUtv7UgMvLb3M/ONs8G R9b+WXb/CWr0zhN//8PMNzW8X13VfCTNK3HN9b8r0Vdz3v2T3AgA= X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D __drm_atomic_helper_connector_state_reset() is used to initialize a newly allocated drm_connector_state, and is being typically called by the drm_connector_funcs.reset implementation. Since we want to consolidate DRM objects state allocation around the atomic_create_state callback that will only allocate and initialize a new drm_connector_state instance, we will need to call __drm_atomic_helper_connector_state_reset() from both the reset and atomic_create hooks. To avoid any confusion, we can thus rename __drm_atomic_helper_connector_state_reset() to __drm_atomic_helper_connector_state_init(). Suggested-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 10 +++++----- include/drm/drm_atomic_state_helper.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/dr= m_atomic_state_helper.c index f1fc2edc6e6e35fbac5ef82437f3cb7485afc412..8ed8cb8a9048e8fd89fa22d2098= 5c84af1672135 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -515,24 +515,24 @@ void drm_atomic_helper_plane_destroy_state(struct drm= _plane *plane, kfree(state); } EXPORT_SYMBOL(drm_atomic_helper_plane_destroy_state); =20 /** - * __drm_atomic_helper_connector_state_reset - reset the connector state + * __drm_atomic_helper_connector_state_init - Initializes the connector st= ate * @conn_state: atomic connector state, must not be NULL * @connector: connectotr object, must not be NULL * * Initializes the newly allocated @conn_state with default * values. This is useful for drivers that subclass the connector state. */ void -__drm_atomic_helper_connector_state_reset(struct drm_connector_state *conn= _state, - struct drm_connector *connector) +__drm_atomic_helper_connector_state_init(struct drm_connector_state *conn_= state, + struct drm_connector *connector) { conn_state->connector =3D connector; } -EXPORT_SYMBOL(__drm_atomic_helper_connector_state_reset); +EXPORT_SYMBOL(__drm_atomic_helper_connector_state_init); =20 /** * __drm_atomic_helper_connector_reset - reset state on connector * @connector: drm connector * @conn_state: connector state to assign @@ -547,11 +547,11 @@ EXPORT_SYMBOL(__drm_atomic_helper_connector_state_res= et); void __drm_atomic_helper_connector_reset(struct drm_connector *connector, struct drm_connector_state *conn_state) { if (conn_state) - __drm_atomic_helper_connector_state_reset(conn_state, connector); + __drm_atomic_helper_connector_state_init(conn_state, connector); =20 connector->state =3D conn_state; } EXPORT_SYMBOL(__drm_atomic_helper_connector_reset); =20 diff --git a/include/drm/drm_atomic_state_helper.h b/include/drm/drm_atomic= _state_helper.h index bc83094dfb78f0f3699ca7956a8a666ca09b2d1a..259a39a0f41ddb2b7d6c1fe7c1a= 2b0b51774254c 100644 --- a/include/drm/drm_atomic_state_helper.h +++ b/include/drm/drm_atomic_state_helper.h @@ -72,11 +72,11 @@ struct drm_plane_state * drm_atomic_helper_plane_duplicate_state(struct drm_plane *plane); void __drm_atomic_helper_plane_destroy_state(struct drm_plane_state *state= ); void drm_atomic_helper_plane_destroy_state(struct drm_plane *plane, struct drm_plane_state *state); =20 -void __drm_atomic_helper_connector_state_reset(struct drm_connector_state = *conn_state, +void __drm_atomic_helper_connector_state_init(struct drm_connector_state *= conn_state, struct drm_connector *connector); void __drm_atomic_helper_connector_reset(struct drm_connector *connector, struct drm_connector_state *conn_state); void drm_atomic_helper_connector_reset(struct drm_connector *connector); void drm_atomic_helper_connector_tv_reset(struct drm_connector *connector); --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D621E3D333E; Fri, 20 Mar 2026 16:28:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024081; cv=none; b=jXLwj3rPA5FCoPhkC4f1bOiqTjsG4oMJdPo5Al1vzWh2o2pIcjZh3pa3QsKdRaxRywyX/Hv/51O6gylw19HbPYkyrxQG4z/4SiNjAT9lq3VTfZT2Q7IGbxX+XCd0Yw53KTiiYZ6/dBZzb94nUqV7v6MEmWlZRXOJmczZjBrmDpk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024081; c=relaxed/simple; bh=ZSytMP4sR458YvgRRedQ0/nRW0jY56S7tb1kWHXaG0s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=THiFtQrEeGNkN7CdWGwXJfb2YLC0Vjn/O8VYXxNCVxzQ2vwCNrawDEA8QUv/V115wxY7RuLewjW5ELP4uKof9mYZWFNk9rAXpCj8+dQ8XNoAXg+i/bxdzavMtBeCpz+s+IjOsS68pSbUfh3BubqOsQ7jpdjWGITg1Zwujud1iqU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pbvCnD9w; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pbvCnD9w" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EC357C2BC87; Fri, 20 Mar 2026 16:28:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024081; bh=ZSytMP4sR458YvgRRedQ0/nRW0jY56S7tb1kWHXaG0s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=pbvCnD9wcKv5MKijRCXDPpMJWfMr3KBcSIu62FATcLvPNT9GzL0A4Q195XGFSNIE8 lav5Baijqi/iFhliCbr4K3f9WXJnzejPLDcds+Z4SfYzd8Cu+jzYUVjaFCp1W1ZGJs axMvzfLOEI6yVCpkCO4sZpa1CowgH8pdGrqe3cuepe9KphYDNdCB6+TRc/ejL3pfFS qCOZBtgJtTrMIHpW3WPFhUCrDxKh30UEE0vIi78M7OS1NR3HIvltvGcNhghQl3n6GM BpYoJnaWgz10m34BI9zki2D0pX0kU1NwkxfGdWWCCh4zsWQFiZ4DtkAdEVp4rS3gsE kfvdLDY0Ph87A== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:19 +0100 Subject: [PATCH v2 12/20] drm/hdmi: Rename __drm_atomic_helper_connector_hdmi_reset() 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 Message-Id: <20260320-drm-mode-config-init-v2-12-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard , Laurent Pinchart X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7694; i=mripard@kernel.org; h=from:subject:message-id; bh=ZSytMP4sR458YvgRRedQ0/nRW0jY56S7tb1kWHXaG0s=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7SzPEBKLPPTPeurZGK3JCgN0WpjXrQx9M2iXF+7lcf 9E2qdt3OqayMAhzMsiKKbI8kQk7vbx9cZWD/cofMHNYmUCGMHBxCsBE1kgz1hkumNRwosFFR3il ZPfSqDOfd5fEzynYHzEjc79s3vcNmV4Tkr5+zzyz8gHP/Q6uqP2TKxkbVlsd5QxcHfZ2lfL8uD+ yVzZcV1TbeS9HwaVR+ofWvS/rJ/exRhq0fPALbZcp4JWZVXcKAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D __drm_atomic_helper_connector_hdmi_reset() is typically used to initialize a newly allocated drm_connector_state when the connector is using the HDMI helpers, and is being called by the drm_connector_funcs.reset implementation. Since we want to consolidate DRM objects state allocation around the atomic_create_state callback that will only allocate and initialize a new drm_connector_state instance, we will need to call __drm_atomic_helper_connector_hdmi_reset() from both the reset and atomic_create hooks. To avoid any confusion, we can thus rename __drm_atomic_helper_connector_hdmi_reset() to __drm_atomic_helper_connector_hdmi_state_init(). Suggested-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/display/drm_bridge_connector.c | 4 ++-- drivers/gpu/drm/display/drm_hdmi_state_helper.c | 14 ++++++++------ drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 2 +- drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c | 2 +- drivers/gpu/drm/vc4/vc4_hdmi.c | 2 +- include/drm/display/drm_hdmi_state_helper.h | 4 ++-- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/d= rm/display/drm_bridge_connector.c index f686aa5c0ed9b84dbe5e0957df22d08aff2f1945..929f06b290626d2091418a6377a= 5230e3c264b60 100644 --- a/drivers/gpu/drm/display/drm_bridge_connector.c +++ b/drivers/gpu/drm/display/drm_bridge_connector.c @@ -270,12 +270,12 @@ static void drm_bridge_connector_reset(struct drm_con= nector *connector) struct drm_bridge_connector *bridge_connector =3D to_drm_bridge_connector(connector); =20 drm_atomic_helper_connector_reset(connector); if (bridge_connector->bridge_hdmi) - __drm_atomic_helper_connector_hdmi_reset(connector, - connector->state); + __drm_atomic_helper_connector_hdmi_state_init(connector, + connector->state); } =20 static const struct drm_connector_funcs drm_bridge_connector_funcs =3D { .reset =3D drm_bridge_connector_reset, .detect =3D drm_bridge_connector_detect, diff --git a/drivers/gpu/drm/display/drm_hdmi_state_helper.c b/drivers/gpu/= drm/display/drm_hdmi_state_helper.c index a1d16762ac7a9ebdc48f081c5d2f5e200d406099..cdd6df37c04a4b2073004ea08a3= f5283a56692df 100644 --- a/drivers/gpu/drm/display/drm_hdmi_state_helper.c +++ b/drivers/gpu/drm/display/drm_hdmi_state_helper.c @@ -304,29 +304,31 @@ * --kunitconfig=3Ddrivers/gpu/drm/tests \ * drm_atomic_helper_connector_hdmi_* */ =20 /** - * __drm_atomic_helper_connector_hdmi_reset() - Initializes all HDMI @drm_= connector_state resources + * __drm_atomic_helper_connector_hdmi_state_init() - Initializes all HDMI = @drm_connector_state resources * @connector: DRM connector * @new_conn_state: connector state to reset * * Initializes all HDMI resources from a @drm_connector_state without * actually allocating it. This is useful for HDMI drivers, in - * combination with __drm_atomic_helper_connector_reset() or - * drm_atomic_helper_connector_reset(). + * combination with __drm_atomic_helper_connector_reset(), + * drm_atomic_helper_connector_reset(), + * __drm_atomic_helper_connector_create_state() or + * drm_atomic_helper_connector_create_state() . */ -void __drm_atomic_helper_connector_hdmi_reset(struct drm_connector *connec= tor, - struct drm_connector_state *new_conn_state) +void __drm_atomic_helper_connector_hdmi_state_init(struct drm_connector *c= onnector, + struct drm_connector_state *new_conn_state) { unsigned int max_bpc =3D connector->max_bpc; =20 new_conn_state->max_bpc =3D max_bpc; new_conn_state->max_requested_bpc =3D max_bpc; new_conn_state->hdmi.broadcast_rgb =3D DRM_HDMI_BROADCAST_RGB_AUTO; } -EXPORT_SYMBOL(__drm_atomic_helper_connector_hdmi_reset); +EXPORT_SYMBOL(__drm_atomic_helper_connector_hdmi_state_init); =20 static const struct drm_display_mode * connector_state_get_mode(const struct drm_connector_state *conn_state) { struct drm_atomic_state *state; diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c b/drivers/gpu/drm/sun4i= /sun4i_hdmi_enc.c index a50f260c73e41493528e545591aaad0e3f138be2..0ebebb04e68fab5b7938a604f85= ad9b756fe33f6 100644 --- a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c +++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c @@ -283,11 +283,11 @@ sun4i_hdmi_connector_detect(struct drm_connector *con= nector, bool force) } =20 static void sun4i_hdmi_connector_reset(struct drm_connector *connector) { drm_atomic_helper_connector_reset(connector); - __drm_atomic_helper_connector_hdmi_reset(connector, connector->state); + __drm_atomic_helper_connector_hdmi_state_init(connector, connector->state= ); } =20 static const struct drm_connector_funcs sun4i_hdmi_connector_funcs =3D { .detect =3D sun4i_hdmi_connector_detect, .fill_modes =3D drm_helper_probe_single_connector_modes, diff --git a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c b/drivers/g= pu/drm/tests/drm_hdmi_state_helper_test.c index 4bdcea3c7435146aebb1716f38d7302ddb7c6296..aaa73b75f3ce5010147f48afc36= 5d074bb2ec7a7 100644 --- a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c +++ b/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c @@ -166,11 +166,11 @@ static const struct drm_connector_helper_funcs dummy_= connector_helper_funcs =3D { }; =20 static void dummy_hdmi_connector_reset(struct drm_connector *connector) { drm_atomic_helper_connector_reset(connector); - __drm_atomic_helper_connector_hdmi_reset(connector, connector->state); + __drm_atomic_helper_connector_hdmi_state_init(connector, connector->state= ); } =20 static const struct drm_connector_funcs dummy_connector_funcs =3D { .atomic_destroy_state =3D drm_atomic_helper_connector_destroy_state, .atomic_duplicate_state =3D drm_atomic_helper_connector_duplicate_state, diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index 9898e5451a07a1dca809fb6db3fec59d07485b95..f59d0877a5f48bed6b421775da7= ddd008d68f9d9 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -506,11 +506,11 @@ static int vc4_hdmi_connector_atomic_check(struct drm= _connector *connector, } =20 static void vc4_hdmi_connector_reset(struct drm_connector *connector) { drm_atomic_helper_connector_reset(connector); - __drm_atomic_helper_connector_hdmi_reset(connector, connector->state); + __drm_atomic_helper_connector_hdmi_state_init(connector, connector->state= ); drm_atomic_helper_connector_tv_margins_reset(connector); } =20 static const struct drm_connector_funcs vc4_hdmi_connector_funcs =3D { .force =3D drm_atomic_helper_connector_hdmi_force, diff --git a/include/drm/display/drm_hdmi_state_helper.h b/include/drm/disp= lay/drm_hdmi_state_helper.h index 2349c0d0f00fb468167023d4db2055c70e603bcd..f7600aabdd5f066772a9a82a1fa= 8a00be7a48396 100644 --- a/include/drm/display/drm_hdmi_state_helper.h +++ b/include/drm/display/drm_hdmi_state_helper.h @@ -9,12 +9,12 @@ struct drm_connector_state; struct drm_display_mode; struct hdmi_audio_infoframe; =20 enum drm_connector_status; =20 -void __drm_atomic_helper_connector_hdmi_reset(struct drm_connector *connec= tor, - struct drm_connector_state *new_conn_state); +void __drm_atomic_helper_connector_hdmi_state_init(struct drm_connector *c= onnector, + struct drm_connector_state *new_conn_state); =20 int drm_atomic_helper_connector_hdmi_check(struct drm_connector *connector, struct drm_atomic_state *state); =20 int drm_atomic_helper_connector_hdmi_update_audio_infoframe(struct drm_con= nector *connector, --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AE5093D8116; Fri, 20 Mar 2026 16:28:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024084; cv=none; b=Z96r0HD3GhSmOT8VExt16LekCP/w5Dw9IzK7xLVCG54nKyUg38h2pLflu4R5Z7OoLr6m522rHLB0YMTEzQ+coPO1wAF4gWLQHJcbYr+jdYbBYpaHRfjsnyrbpqmK/vxstjOmTaU3bCT9LcvF4YNHsYT/wKfsFuI74KzLBFf10WI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024084; c=relaxed/simple; bh=/prMPgtxbxwKDnFBz1MDqeN5/Do3sH3oc7KVgPrpIzI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=q9rU3oEWg7VR40w0Iwxm1N899kBrI0s6FuhjNZWdhYbLWGdhZhX5dGJn09XjA4yh2C0DY1sx6TJHDepPUZwotXnMz6rZh4F72FGNLK68qcY4mtN0H2TBzwEeeq8Xm4o8HXlRjoSZ7+4Dmu5mpritKEDURSC6XFGI0cU0X4LXvig= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sBN427Sf; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sBN427Sf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B5B4FC4CEF7; Fri, 20 Mar 2026 16:28:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024084; bh=/prMPgtxbxwKDnFBz1MDqeN5/Do3sH3oc7KVgPrpIzI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=sBN427SfpWezemyIM1apotxIQAvf0HvkMAlByBkuBZwIZHsqboETLUiDifnyFdBQD 5WIMtn9MXojRYgOR/aj+DpyUk0LuMEjwslGQRxHK8k5pjE3lOsWSL0zzxd/pu0ciMo qDi3+RZNHDTH1sCC6ueb0DgT/ywDOEuy63LQHBFQSTaIZtMQW0ZCWyBkgBrzroaTIU 9ffsl2rTimcNTXdtb0JM9+pKH9bIi1viQP11UuT7N5dROHdEchVhXX2xFY6nYjRdgy 8mZdSqXfRjudidyxDJ8bGK2VMrZVp9x/l5hK79SWt59ke2mNNxE9aT0RMeDJZVjZ8K Y7tr6UBW7EI4g== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:20 +0100 Subject: [PATCH v2 13/20] drm/connector: Add new atomic_create_state callback 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 Message-Id: <20260320-drm-mode-config-init-v2-13-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8108; i=mripard@kernel.org; h=from:subject:message-id; bh=/prMPgtxbxwKDnFBz1MDqeN5/Do3sH3oc7KVgPrpIzI=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7SzNZuz1CUrSPt3huvTR1eksbs/HB6ZwbPCetedOw+ qlOQdzLjqksDMKcDLJiiixPZMJOL29fXOVgv/IHzBxWJpAhDFycAjARgRWM1Sy8MuFPHjp1iWxd avL045OeBNXUojIWpR1BTMeszzq2zMsTP8levFXDd/m0b0ceFbyexlgftpHdkZvx2dJ/l6c+Mjp 46GF4+GtD/h6WE/2/1jXMNJI3mTgv6oe3QWdThOTCu3LLWWMA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D Commit 47b5ac7daa46 ("drm/atomic: Add new atomic_create_state callback to drm_private_obj") introduced a new pattern for allocating drm object states. Instead of relying on the reset() callback, it created a new atomic_create_state hook. This is helpful because reset is a bit overloaded: it's used to create the initial software tate, reset it, but also reset the hardware. It can also be used either at probe time, to create the initial state and possibly reset the hardware to an expected default, but also during suspend/resume. Both these cases come with different expectations too: during the initialization, we want to initialize all states, but during suspend/resume, drm_private_states for example are expected to be kept around. And reset() isn't fallible, which makes it harder to handle initialization errors properly. And this is only really relevant for some drivers, since all the helpers for reset only create a new state, and don't touch the hardware at all. It was thus decided to create a new hook that would allocate and initialize a pristine state without any side effect: atomic_create_state to untangle a bit some of it, and to separate the initialization with the actual reset one might need during a suspend/resume. Let's continue the transition to the new pattern with connectors. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 45 +++++++++++++++++++++++++++= ++++ drivers/gpu/drm/drm_mode_config.c | 21 ++++++++++++++- include/drm/drm_atomic_state_helper.h | 4 +++ include/drm/drm_connector.h | 13 +++++++++ 4 files changed, 82 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/dr= m_atomic_state_helper.c index 8ed8cb8a9048e8fd89fa22d20985c84af1672135..c7eb3ce8c282a0d1099bdb84065= 3baa9f2005db5 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -553,10 +553,29 @@ __drm_atomic_helper_connector_reset(struct drm_connec= tor *connector, =20 connector->state =3D conn_state; } EXPORT_SYMBOL(__drm_atomic_helper_connector_reset); =20 +/** + * __drm_atomic_helper_connector_create_state - initializes connector state + * @connector: connector object + * @state: new state to initialize + * + * Initializes the newly allocated @state, usually required when + * initializing the drivers. + * + * @state is assumed to be zeroed. + * + * This is useful for drivers that subclass @drm_connector_state. + */ +void __drm_atomic_helper_connector_create_state(struct drm_connector *conn= ector, + struct drm_connector_state *state) +{ + __drm_atomic_helper_connector_state_init(state, connector); +} +EXPORT_SYMBOL(__drm_atomic_helper_connector_create_state); + /** * drm_atomic_helper_connector_reset - default &drm_connector_funcs.reset = hook for connectors * @connector: drm connector * * Resets the atomic state for @connector by freeing the state pointer (wh= ich @@ -573,10 +592,36 @@ void drm_atomic_helper_connector_reset(struct drm_con= nector *connector) kfree(connector->state); __drm_atomic_helper_connector_reset(connector, conn_state); } EXPORT_SYMBOL(drm_atomic_helper_connector_reset); =20 +/** + * drm_atomic_helper_connector_create_state - default &drm_connector_funcs= .atomic_create_state hook for connectors + * @connector: connector object + * + * Initializes a pristine @drm_connector_state. + * + * This is useful for drivers that don't subclass @drm_connector_state. + * + * RETURNS: + * Pointer to new connector state, or ERR_PTR on failure. + */ +struct drm_connector_state * +drm_atomic_helper_connector_create_state(struct drm_connector *connector) +{ + struct drm_connector_state *state; + + state =3D kzalloc_obj(*state); + if (!state) + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_connector_create_state(connector, state); + + return state; +} +EXPORT_SYMBOL(drm_atomic_helper_connector_create_state); + /** * drm_atomic_helper_connector_tv_margins_reset - Resets TV connector prop= erties * @connector: DRM connector * * Resets the TV-related properties attached to a connector. diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_c= onfig.c index f5092d03b168bb114a199b1dbcaeb770983c9749..124cef8f0c6eb15c9fde4cf7cee= 2936cbf2b902f 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -212,10 +212,26 @@ static int drm_mode_config_crtc_create_state(struct d= rm_crtc *crtc) crtc->state =3D crtc_state; =20 return 0; } =20 +static int drm_mode_config_connector_create_state(struct drm_connector *co= nnector) +{ + struct drm_connector_state *conn_state; + + if (!connector->funcs->atomic_create_state) + return 0; + + conn_state =3D connector->funcs->atomic_create_state(connector); + if (IS_ERR(conn_state)) + return PTR_ERR(conn_state); + + connector->state =3D conn_state; + + return 0; +} + /** * drm_mode_config_reset - call ->reset callbacks * @dev: drm device * * This functions calls all the crtc's, encoder's and connector's ->reset @@ -255,13 +271,16 @@ void drm_mode_config_reset(struct drm_device *dev) drm_for_each_encoder(encoder, dev) if (encoder->funcs && encoder->funcs->reset) encoder->funcs->reset(encoder); =20 drm_connector_list_iter_begin(dev, &conn_iter); - drm_for_each_connector_iter(connector, &conn_iter) + drm_for_each_connector_iter(connector, &conn_iter) { if (connector->funcs->reset) connector->funcs->reset(connector); + else if (connector->funcs->atomic_create_state) + drm_mode_config_connector_create_state(connector); + } drm_connector_list_iter_end(&conn_iter); } EXPORT_SYMBOL(drm_mode_config_reset); =20 /* diff --git a/include/drm/drm_atomic_state_helper.h b/include/drm/drm_atomic= _state_helper.h index 259a39a0f41ddb2b7d6c1fe7c1a2b0b51774254c..96a058ba698203c023e54c2b3d9= 08c13cfa2d23b 100644 --- a/include/drm/drm_atomic_state_helper.h +++ b/include/drm/drm_atomic_state_helper.h @@ -76,11 +76,15 @@ void drm_atomic_helper_plane_destroy_state(struct drm_p= lane *plane, =20 void __drm_atomic_helper_connector_state_init(struct drm_connector_state *= conn_state, struct drm_connector *connector); void __drm_atomic_helper_connector_reset(struct drm_connector *connector, struct drm_connector_state *conn_state); +void __drm_atomic_helper_connector_create_state(struct drm_connector *conn= ector, + struct drm_connector_state *state); void drm_atomic_helper_connector_reset(struct drm_connector *connector); +struct drm_connector_state * +drm_atomic_helper_connector_create_state(struct drm_connector *connector); void drm_atomic_helper_connector_tv_reset(struct drm_connector *connector); int drm_atomic_helper_connector_tv_check(struct drm_connector *connector, struct drm_atomic_state *state); void drm_atomic_helper_connector_tv_margins_reset(struct drm_connector *co= nnector); void diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index c18be8c19de0ab1e02e7d7b1fcd9f2ab5ef1dd15..6d73068de157144770931c64ce3= f91e6f15ef0e4 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1509,10 +1509,23 @@ struct drm_connector_funcs { * when a connector is being hot-unplugged for drivers that support * connector hotplugging (e.g. DisplayPort MST). */ void (*destroy)(struct drm_connector *connector); =20 + /** + * @atomic_create_state: + * + * Allocates a pristine, initialized, state for the connector object + * and returns it. + * + * RETURNS: + * + * A new, pristine, connector state instance or an error pointer + * on failure. + */ + struct drm_connector_state *(*atomic_create_state)(struct drm_connector *= connector); + /** * @atomic_duplicate_state: * * Duplicate the current atomic state for this connector and return it. * The core and helpers guarantee that any atomic state duplicated with --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 84B2D3D3CE1; Fri, 20 Mar 2026 16:28:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024087; cv=none; b=KFCTVG4cFnFbw8IvUD3fVjeKdLu8ADoYnuBxncQH1iv+a81S9Vg5V+aMQBDycsgmQxNW6zx/1DPFcKTzLeSTyxm+3vaYUwz2tAKmULe0oE3wa5E5GvCjnlepFdO4X6x3xiD9yJ7eYswD6zN6NwdVpRC5NKJ+SSu8VXuLzxKZmo0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024087; c=relaxed/simple; bh=zRPirJS/vOba8ESgETPuotxPCDJZ9PKy3rB6R6QbbfE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EL9vJOyJGhDxid6/NlzY4j8mR8P0Ih+b1obPpygNehWdO9mdPa0+ssbDCmkZV2dRjMapzHQ35Qv5OulRVJO/qbFE17k/dvlllZXiZ+evX0YetsSRs7Jy6EgOvDGcWCAGisk0qQUYU5niSsr9fuqEiVbvIN+hOTDtKagysqMIc/k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dxubnuRg; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dxubnuRg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7CA3CC4CEF7; Fri, 20 Mar 2026 16:28:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024087; bh=zRPirJS/vOba8ESgETPuotxPCDJZ9PKy3rB6R6QbbfE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=dxubnuRgFvNE0RmAIeVmg88LHFpHEOgNkuSZWrP85FuFPUKTL6GsLVLQKieVe1db+ +h/il0eE4s+ePeo97mTgrYjva4yTXxdiIYfg3r7OZfzR9j8nw0e92JwGKQQTsJEs3s c0TwIcP2tcDTAPT+RQ8zTqNB4++1pG5GTm0ReNDQ88AHN7rNQrZR3rClwQHAxhZU6S ZbGmI7uHhfKLZeyB00lkYz/3GraXWaU4COwRrpgdxvHLHR4ZdC3t/lQtrt38GqwV8K XP5PwEuEesV9diFAeHjQo1GMdOX2FDT/vrzDWP0uq6tlVuU0kzCFIbsvNTIZJBOrNo YTVfK3IEZDd4A== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:21 +0100 Subject: [PATCH v2 14/20] drm/mode-config: Create drm_mode_config_create_state() 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 Message-Id: <20260320-drm-mode-config-init-v2-14-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6090; i=mripard@kernel.org; h=from:subject:message-id; bh=zRPirJS/vOba8ESgETPuotxPCDJZ9PKy3rB6R6QbbfE=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7SzPvffkdJNCh1mbephJbHlf0bl2cvwqP1xflUypFw dMvRVzvmMrCIMzJICumyPJEJuz08vbFVQ72K3/AzGFlAhnCwMUpABPpZWBsmLCD94J2SZRUce3P R25hJvt0Tro3bBf4GSCu+Fpw6ZRXjcvePIyrOXj5RPKWd95CJ+7kM9bnz8w7dMskJlQgo2ZLZ7u eBUva/Tl+22wZA9gu+x2dz8HksdSaacmG4y4PA2quXsi0igUA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D drm_mode_config_reset() can be used to create the initial state, but also to return to the initial state, when doing a suspend/resume cycle for example. It also affects both the software and the hardware, and drivers can choose to reset the hardware as well. Most will just create an empty state and the synchronisation between hardware and software states will effectively be done when the first commit is done. That dual role can be harmful, since some objects do need to be initialized but also need to be preserved across a suspend/resume cycle. drm_private_obj are such objects for example. Thus, let's create another helper for drivers to call to initialize their state when the driver is loaded, so we can make drm_mode_config_reset() only about handling suspend/resume and similar. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 12 +++++- drivers/gpu/drm/drm_mode_config.c | 87 +++++++++++++++++++++++++++++++++++= ++++ include/drm/drm_mode_config.h | 1 + 3 files changed, 98 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 253a00f450b0fb1b7eb6ea42b3235fbf9ee78376..5aa3f9f0620bd155dd53023e6c7= 6e3883ffaadef 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -59,12 +59,20 @@ * when preparing the update and kept alive as long as they are active * in the device. * * Their respective lifetimes are: * - * - at reset time, the object reset implementation will allocate a new - * default state and will store it in the object state pointer. + * - at driver initialization time, the driver will allocate an initial, + * pristine, state and will store it using + * drm_mode_config_create_state(). Historically, this was one of + * drm_mode_config_reset() job, so one might still encounter it in a + * driver. + * + * - at reset time, for example during suspend/resume, + * drm_mode_config_reset() will reset the software and hardware state + * to a known default and will store it in the object's state pointer. + * Not all objects are affected by drm_mode_config_reset() though. * * - whenever a new update is needed: * * + A new &struct drm_atomic_state is allocated using * drm_atomic_state_alloc(). diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_c= onfig.c index 124cef8f0c6eb15c9fde4cf7cee2936cbf2b902f..61c3ba5d3901ea2bb05bbd1db06= 44187820a44dd 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -21,10 +21,11 @@ */ =20 #include #include =20 +#include #include #include #include #include #include @@ -281,10 +282,96 @@ void drm_mode_config_reset(struct drm_device *dev) } drm_connector_list_iter_end(&conn_iter); } EXPORT_SYMBOL(drm_mode_config_reset); =20 +/** + * drm_mode_config_create_state - Allocates the initial state + * @dev: drm device + * + * This functions creates the initial state for all the objects. Drivers + * can use this in e.g. probe to initialize their software state. + * + * It has two main differences with drm_mode_config_reset(): the reset() + * hooks aren't called and thus the hardware will be left untouched, but + * also the @drm_private_obj structures will be initialized as opposed + * to drm_mode_config_reset() that skips them. + * + * Returns: 0 on success, negative error value on failure. + */ +int drm_mode_config_create_state(struct drm_device *dev) +{ + struct drm_crtc *crtc; + struct drm_colorop *colorop; + struct drm_plane *plane; + struct drm_connector *connector; + struct drm_connector_list_iter conn_iter; + struct drm_private_obj *privobj; + int ret; + + drm_for_each_privobj(privobj, dev) { + struct drm_private_state *privobj_state; + + if (privobj->state) + continue; + + if (!privobj->funcs->atomic_create_state) + continue; + + privobj_state =3D privobj->funcs->atomic_create_state(privobj); + if (IS_ERR(privobj_state)) + return PTR_ERR(privobj_state); + + privobj->state =3D privobj_state; + } + + drm_for_each_colorop(colorop, dev) { + struct drm_colorop_state *colorop_state; + + if (colorop->state) + continue; + + colorop_state =3D drm_atomic_helper_colorop_create_state(colorop); + if (IS_ERR(colorop_state)) + return PTR_ERR(colorop_state); + + colorop->state =3D colorop_state; + } + + drm_for_each_plane(plane, dev) { + if (plane->state) + continue; + + ret =3D drm_mode_config_plane_create_state(plane); + if (ret) + return ret; + } + + drm_for_each_crtc(crtc, dev) { + if (crtc->state) + continue; + + ret =3D drm_mode_config_crtc_create_state(crtc); + if (ret) + return ret; + } + + drm_connector_list_iter_begin(dev, &conn_iter); + drm_for_each_connector_iter(connector, &conn_iter) { + if (connector->state) + continue; + + ret =3D drm_mode_config_connector_create_state(connector); + if (ret) + return ret; + } + drm_connector_list_iter_end(&conn_iter); + + return 0; +} +EXPORT_SYMBOL(drm_mode_config_create_state); + /* * Global properties */ static const struct drm_prop_enum_list drm_plane_type_enum_list[] =3D { { DRM_PLANE_TYPE_OVERLAY, "Overlay" }, diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h index 687c0ee163d25dfa7cf563e77209dd33e349800b..22c7e767a2e98f99fff9311eb59= 0f62bd4c9c8a9 100644 --- a/include/drm/drm_mode_config.h +++ b/include/drm/drm_mode_config.h @@ -1005,9 +1005,10 @@ int __must_check drmm_mode_config_init(struct drm_de= vice *dev); static inline int drm_mode_config_init(struct drm_device *dev) { return drmm_mode_config_init(dev); } =20 +int drm_mode_config_create_state(struct drm_device *dev); void drm_mode_config_reset(struct drm_device *dev); void drm_mode_config_cleanup(struct drm_device *dev); =20 #endif --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 09A603D88E2; Fri, 20 Mar 2026 16:28:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024090; cv=none; b=UJUta9RL6qGSkyAQS2OSUfBCvrlNW/LlHL4VNwuISqJ24RFqCCM4FcbiXPO03vv3UAjJp6trePRm+nS9xcYfTGDBZw9Z3KZi0k0+9chP0pNrks9+5JukXlbgY/YyoQ/EaphOVPR+or0oEsMp6QdfEUmwUfFzle9aZeIGZFaI/6s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024090; c=relaxed/simple; bh=ZCmJ88Jg/R0ZaGWt4Lbnf1PZ95HMiD+1w0SbJAg/htU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=reZVVkalAoTFXPzBGf7LGrVIbR4DchuZCKMVSqmECsZoa+3CRWVe9grumsVEj37vC6/dQZ/Ej+1t+mmvOLrq1f0sCDNwmNbV8jOuho1SXfe1j06tJ0xqxsCh6ngEOe2JNcwlzqj7v/03+1q1cQMmvtAe1UwxYUC3tLGfkP870Qw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AEu2trzB; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="AEu2trzB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 62B22C19425; Fri, 20 Mar 2026 16:28:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024089; bh=ZCmJ88Jg/R0ZaGWt4Lbnf1PZ95HMiD+1w0SbJAg/htU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=AEu2trzBAfFOayFDVBex14Mc8zD+myHx+T4ECnRRrYG2srDpJsR3HgxD0ay5aiYau QtKqmA38LUerV5Ljvh790yFln9K2gtX6qvklHS9uShPojQl3XVVp0fj4FHyEvTwgIC JAZqPfScgaVElYSgyF0zniZ6oLUqlPi/g+ulSnaPxRNRQdzxgpk+JlqEk3vxqmMWKa Il7n133119QKa31CztyQhVRSNzrDtLvfFcJs3nBfIniWlCczGwq6T/I1Co0KbCwGc8 bcUimQt3sDceJaVyKCLHvnI77PHgAqw9hgxIvSQDrC92UCoG6FbP0e8h2QeDwvsARp S6tAPtS0XrGmg== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:22 +0100 Subject: [PATCH v2 15/20] drm/drv: Call drm_mode_config_create_state() by default 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 Message-Id: <20260320-drm-mode-config-init-v2-15-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1218; i=mripard@kernel.org; h=from:subject:message-id; bh=ZCmJ88Jg/R0ZaGWt4Lbnf1PZ95HMiD+1w0SbJAg/htU=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S7O0lcoEDoa4f72ltD6opGbHReGMScbTkmPWtCcI7 W1uOz69YyoLgzAng6yYIssTmbDTy9sXVznYr/wBM4eVCWQIAxenAEwkw5WxPn43y5KuGsfzoef2 BE3JYV513+Xrln0XPbNE1QXkan1E9tbLsanmbze+YFaqVhe689Jkxvq0I9cUH2rP/i96mlmjZ4X ZZ+0Xm1dKHq/T4yt69W1GqLTws+cberlM2N4djtNNDOda/QEA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D Almost all drivers, and our documented skeleton, call drm_mode_config_reset() prior to calling drm_dev_register() to initialize its DRM object states. Now that we have drm_mode_config_create_state() to create that initial state if it doesn't exist, we can call it directly in drm_dev_register(). That way, we know that the initial atomic state will always be allocated without any boilerplate. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_drv.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 2915118436ce8a6640cfb0c59936031990727ed1..820106d56ab399a39cac56d9866= 2b5ddbcae8ded 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -1097,10 +1097,14 @@ int drm_dev_register(struct drm_device *dev, unsign= ed long flags) =20 if (drm_core_check_feature(dev, DRIVER_MODESET)) { ret =3D drm_modeset_register_all(dev); if (ret) goto err_unload; + + ret =3D drm_mode_config_create_state(dev); + if (ret) + goto err_unload; } drm_panic_register(dev); drm_client_sysrq_register(dev); =20 DRM_INFO("Initialized %s %d.%d.%d for %s on minor %d\n", --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BC63D3D4106; Fri, 20 Mar 2026 16:28:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024092; cv=none; b=K+cSDxipr85ez3Y4gsLhfbh06BQwrMSb5Ze+9SAw4NWvOuoUYBOpte5Yptr4P9k1tqJ3nAKlnNg3yJiiEFs0yzWezs6N0sBwlprFQVv3M9K9+3keKu7G/xkXgBgRPqSRt31/55TnfvgjZEEKgkU3zFmsYZXpvUsEmmD2797oc7Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024092; c=relaxed/simple; bh=wxvIbslsFOe+8OR1tP24GsCg3PyWA7sUK7uSel4Swqg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jSHWZe4UGpGLgVBOoxonrJv2HMMa5y7N4F+6o9RrwcGFewyiWhVUvx7bLRqrwFfDtqjJ/MHGo/iKaquevmW+nMOK3H/4l6yc3mDDnaB0mb0l+yQzoZZRCLhE6OjV+G3dqQxHasu1ZZmlefvKYXQtWiw+NgofX54ckHdADTlKUvM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KM/M8DbM; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KM/M8DbM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2050CC4CEF7; Fri, 20 Mar 2026 16:28:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024092; bh=wxvIbslsFOe+8OR1tP24GsCg3PyWA7sUK7uSel4Swqg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=KM/M8DbMI4cQ51n4PrNKbVDyepwp+XaKiCX9TL8p3egLC7ajUeVHSRCHBv1xZYxZ4 IbyvpfmTRNYivbC9qTEMn2ReWq360mbwcoZ03g0Hktfl89CWBfjmxyGzkCuqZWEkFI XSQAd0rZeeJy8masn23VpfsooUbxy6raFOIA53Zr1xnqfc+GeunlSQCqXGgdsf+TIC oI61Kj29xVzn90u/8R3OvE9xjVFn+4ziqUDXQX5nxfL/wuyrmHgVSnO8q5lU7Tib2g 59de87igWktKY/xlNasqJ6UTmZVJjvq5voBnndn/G8KQv8+9jnjZ0pUBBgNFv6J5BM 0AwUUvi9yZOTQ== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:23 +0100 Subject: [PATCH v2 16/20] drm/atomic: Drop private obj state allocation 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 Message-Id: <20260320-drm-mode-config-init-v2-16-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard , Laurent Pinchart X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1451; i=mripard@kernel.org; h=from:subject:message-id; bh=wxvIbslsFOe+8OR1tP24GsCg3PyWA7sUK7uSel4Swqg=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S7OCbn+8dc39U0vJg8nZdpOvO65nua8bUaB9Xsdgx an1HDofO6ayMAhzMsiKKbI8kQk7vbx9cZWD/cofMHNYmUCGMHBxCsBEJu9lrE/7u5hT4pqPR+CX DSvU3YPkVm/5zxB2IY49sG8ai108mxnvQ4sngRl7pq59dVhh0dv4j4x1VrNOKB+e4/Rn2UV7jp4 i24dPW7TF5fcKCOTOXRVc4yN5pdPkZXkJ53R+1tZ7YlOcVvcAAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D Now that drm_dev_register() calls drm_mode_config_create_state() for every modeset driver, the private obj states will be initialized at driver registration automatically if they haven't already. Thus, the explicit initial allocation we have in drm_atomic_private_obj_init() is now redundant, and we can remove it. Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 5aa3f9f0620bd155dd53023e6c76e3883ffaadef..3bd52602fe307a1b82a3b68d82b= 458e1da8a4f6d 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -995,25 +995,18 @@ static void drm_atomic_plane_print_state(struct drm_p= rinter *p, */ int drm_atomic_private_obj_init(struct drm_device *dev, struct drm_private_obj *obj, const struct drm_private_state_funcs *funcs) { - struct drm_private_state *state; memset(obj, 0, sizeof(*obj)); =20 drm_modeset_lock_init(&obj->lock); =20 obj->dev =3D dev; obj->funcs =3D funcs; list_add_tail(&obj->head, &dev->mode_config.privobj_list); =20 - state =3D obj->funcs->atomic_create_state(obj); - if (IS_ERR(state)) - return PTR_ERR(state); - - obj->state =3D state; - return 0; } EXPORT_SYMBOL(drm_atomic_private_obj_init); =20 /** --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87C1D3D4106; Fri, 20 Mar 2026 16:28:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024095; cv=none; b=Iv6xbbxpAZ/F820XCgpRx2NpVzpdjMiSaXaLVZJT+ENn1bvTmB0HBRJNR+Df22/+mqWBYWv/TsWccpc3j+BWx5LrDAWB40RO9Ahn+yuDIVnzkOHfN9835mfFEzyd0Ot5kUJ4CXYBs/GvWE7UnyCgJuDkJHfJkMzagyogRCm290M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024095; c=relaxed/simple; bh=jrOhK6ywzWa7h0Q8vD7bhuiyhE6TZdHxkM63E2sT2zs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ezyNCnALOzEVfTIvykuj1MiQb9ZiKGxIsuQl/xYgkoM0bmCgvTOyJHRT62x1Km3ZJ+3hAlqRpCG9fFKBlJLZ5zITuVwGo80EV8H+yODy3kQ7XO2J07Xk4UCmKidIoUjNk3H8GO+EvWhEFYOKMR7kFX2IA3mSpfnkeANpRdL7flU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Vno/VdoO; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Vno/VdoO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DE695C2BC87; Fri, 20 Mar 2026 16:28:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024095; bh=jrOhK6ywzWa7h0Q8vD7bhuiyhE6TZdHxkM63E2sT2zs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Vno/VdoO68EmlRZ+dVSxEkhau93ukVFgRb1T7DhihSfMQMCWHY3c8QVOXOSUpsqdg 8GDI2OEiIqi21P2F9SauDfpL5c5z0UQ9ED6JNSHaPAFgDEK6deMwE9VjbnzoPzJB5p Sq1Pokx6aeStRFRCElmDuHLioEdfhDb8OJ9mvZKashx4vXR6jPydlAcTjXbI8+P4gF zhgxlcOyxvQILHPLAQq2RmlhMBh/RKKxLNp/rEZfVp7e64C2v6xWHUSpQV/dJaMZr9 N8RtO0UEejCP2zdsQ6iKCI+QTUNPV8PKCtRWG4zXeHbOgbXQWZFstvjcaj/b+qG0nk sfvy2BkILTAlg== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:24 +0100 Subject: [PATCH v2 17/20] drm/drv: Drop drm_mode_config_reset() from our skeleton 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 Message-Id: <20260320-drm-mode-config-init-v2-17-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=918; i=mripard@kernel.org; h=from:subject:message-id; bh=jrOhK6ywzWa7h0Q8vD7bhuiyhE6TZdHxkM63E2sT2zs=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S7Nf1Fg1PZu0LOj1M8dJ+7kUKp6ozDzwz965RfB0a 3PwzRsqHVNZGIQ5GWTFFFmeyISdXt6+uMrBfuUPmDmsTCBDGLg4BWAiGq6M9bU+sfkHUn66RRVe 1TMMZjlzf3VFe6BmnuByviqrkHsr58tHPHK6/cqPy2eerG9l4I46xoYVO5d+nxu51GhFzb3+C7z 8m7bcXF3zg+9B0bZZJmtebRf8v0nvbcWSnqqUq1Kn559InToLAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D Now that we have drm_mode_config_create_state() to create the initial state called as part of drm_dev_register(), we can stop recommending calling drm_mode_config_reset() to perform that initialization in our skeleton. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_drv.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 820106d56ab399a39cac56d98662b5ddbcae8ded..83752725f7c63364880225ec108= 3f19bd00ddcef 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -339,12 +339,10 @@ void drm_minor_release(struct drm_minor *minor) * * // Further setup, display pipeline etc * * platform_set_drvdata(pdev, drm); * - * drm_mode_config_reset(drm); - * * ret =3D drm_dev_register(drm); * if (ret) * return ret; * * drm_fbdev_{...}_setup(drm, 32); --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A217E3D9043; Fri, 20 Mar 2026 16:28:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024098; cv=none; b=e7pntfHD2lloZB3asqKUTSz09gq2UQxLw8ffVa7+GYhQV0V5KPgP6rG6EgXw2IfDfa5LSn0DERxNOUv6hbk3hZfx6Br6InGHcgNGadi0FsizvcwYqcuOjTl3X+RrRcRfrjwfjx4bFS0uNqJBoa6/ebvyAT6xbFbqQ6C24wmYT2k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024098; c=relaxed/simple; bh=tuuR1AzJjOp1SuGTOCMRWi7kE/ZiZUxh7g3mvF/HamY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SgLSdA/6X16f/ifuH520gE8SoYLEVMduW4ESxxAkhfBdgoVovBKutsjCes7RO3jw+iQlHgahi/3ZcVacbotKikeH5J7kW0txruy++KVhKRSxm/GYwdCCOFCqT1/M+kNi1LO6nCd2/kcL+FxzPaoN4zaijyKB0TcAH8Mw1RybCjY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MCLKLO+5; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MCLKLO+5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B91BBC19425; Fri, 20 Mar 2026 16:28:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024098; bh=tuuR1AzJjOp1SuGTOCMRWi7kE/ZiZUxh7g3mvF/HamY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MCLKLO+5JRMtthUUxX+LLOSibil4YOX8Gv7lpNaLq4DgDaEygrusLceagJSD54nkN g6zsCsJEZdP/5yddh/ZbI3dNeP45RlsEVSpX/+8JLECVHgjpL9L7vlW8g0dAUec1Tw 0jTF+FdKIBqbiS5be/IPiI+W8cYSf5b5hvnZ4zy8cWl5/xuo/k7GrHi3mmGD3C5RL3 9s/LXz5EnE3zarZ13/HdB9SaJ7Bt5hgZZEoLFtAFAbzrgsrd+s29boJr27A1OrhMGU kNF9b56G5d/1rtEtWWdpmdMHBYLTHdDqq0+xdhfau6SyAdLdP11EZxmO73VXZl80Qm vYcZ8kX/sQXPw== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:25 +0100 Subject: [PATCH v2 18/20] drm/tidss: Drop call to drm_mode_config_reset at probe time 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 Message-Id: <20260320-drm-mode-config-init-v2-18-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1491; i=mripard@kernel.org; h=from:subject:message-id; bh=tuuR1AzJjOp1SuGTOCMRWi7kE/ZiZUxh7g3mvF/HamY=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S7P/m860DJO9uoVtv7vhf7e+J62aT59vOy+Z+ONZ+ Qarv3+2dkxlYRDmZJAVU2R5IhN2enn74ioH+5U/YOawMoEMYeDiFICJ9Jgw1le7sQVl7Hsr9V5M aW1aWaHKuc3p21emz+nZ+2zbfFP9moiyBQnLF/ql6B79t8fTbYZtL2MNlwHruW/fUk/eiJDrLvj GkXdWRawpVuqDwDHmSEHTVXb/Gl5s82ibYK5otK21ZHnFri4A X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D Now that we have drm_mode_config_create_state() to create the initial state called as part of drm_dev_register(), we don't need to call drm_mode_config_reset() during the driver probe. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/tidss/tidss_drv.c | 2 -- drivers/gpu/drm/tidss/tidss_kms.c | 2 -- 2 files changed, 4 deletions(-) diff --git a/drivers/gpu/drm/tidss/tidss_drv.c b/drivers/gpu/drm/tidss/tids= s_drv.c index 1c8cc18bc53c3ea3c50368b9f55ab02a0a02fc77..ddd9f428c2a96557ee02040320c= be5f6f0fd6052 100644 --- a/drivers/gpu/drm/tidss/tidss_drv.c +++ b/drivers/gpu/drm/tidss/tidss_drv.c @@ -169,12 +169,10 @@ static int tidss_probe(struct platform_device *pdev) goto err_runtime_suspend; } =20 drm_kms_helper_poll_init(ddev); =20 - drm_mode_config_reset(ddev); - ret =3D drm_dev_register(ddev, 0); if (ret) { dev_err(dev, "failed to register DRM device\n"); goto err_irq_uninstall; } diff --git a/drivers/gpu/drm/tidss/tidss_kms.c b/drivers/gpu/drm/tidss/tids= s_kms.c index 8bb93194e5ac686050c47f986b8cb6063eae22d3..b4779c09a1bfa5be7010bcd7d4f= 1379362996d2e 100644 --- a/drivers/gpu/drm/tidss/tidss_kms.c +++ b/drivers/gpu/drm/tidss/tidss_kms.c @@ -285,11 +285,9 @@ int tidss_modeset_init(struct tidss_device *tidss) =20 ret =3D drm_vblank_init(ddev, tidss->num_crtcs); if (ret) return ret; =20 - drm_mode_config_reset(ddev); - dev_dbg(tidss->dev, "%s done\n", __func__); =20 return 0; } --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2E2E93D9DBE; Fri, 20 Mar 2026 16:28:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024101; cv=none; b=Bty032aJT8JKmLKVvqwLvdvPoxj0ThjbfDO/+KLM8VOsb4XO0kk3/NGqQfV0jSsjIbt0yjUKKjvQmP4kjuLpQNulOpPdjjA//74EgLbjWDDiZA58UxAXI0vRKiRedAzzkBHF66R0IOft6+Mfz9d5DsAuRKDwj3xMO6oO34ZzVdg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024101; c=relaxed/simple; bh=pmYtpOxkhTjqRgGaAdFbUe+w3uLXCN7Sf0CtbEDxy8k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lUQKDVW53y7IdCItS8g6YZ/2ZzvKOGExHCU7TLBHrnR81VYa/gNwaBtmiWeG3oHmz6OQq8RTvadm2RgSXv3xfLdwfow0I/LXz1F2HpnOWdNSJtH/dfZn9djdgT9DziYwKMd0HSvzNhld6D0a7JS3TzRZ3DrtyT1xMAM+U6QsDm8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XXskUXJp; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XXskUXJp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 83FD7C2BCAF; Fri, 20 Mar 2026 16:28:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024101; bh=pmYtpOxkhTjqRgGaAdFbUe+w3uLXCN7Sf0CtbEDxy8k=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=XXskUXJpKATeGmtvitsgPaTOhTUu5xmAeLwf4Rv2975NoU4vV23dp2mdYGXScbmg4 dPtANbDCjddD/YNGwgzLMWhMi44Ty1P87hJfryUIO1qODAn1eHmURB8ARD0Ns3HKw8 hyrmeXuU5QjbC6hT3c7/q2ReDUd8h1MXU+VQX11/xiXIIHs6DuLk1Zznx1Lu/xL7my gcDafOtz+OuvBxlkK1PQY+8w5uXP57lLbkqiCqJG2g7sSPQmi+yc63TS0VU0/wYRh9 mxXcRMZVlNup+GovhLVEUapSR2A1eEnJcgJxmKAWF59YTtgFNFHcO1OOZ0+U+RLTiA 35USEatx6KnCA== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:26 +0100 Subject: [PATCH v2 19/20] drm/tidss: Convert to atomic_create_state 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 Message-Id: <20260320-drm-mode-config-init-v2-19-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard , Laurent Pinchart X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3205; i=mripard@kernel.org; h=from:subject:message-id; bh=pmYtpOxkhTjqRgGaAdFbUe+w3uLXCN7Sf0CtbEDxy8k=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S3MOJ1UVPcx5/V/NscVk9ew/F+9cjj96jOPPZQlhj 5PX97du65jKwiDMySArpsjyRCbs9PL2xVUO9it/wMxhZQIZwsDFKQATCT3LWGd8TpE5ds5KybS3 BZ83Ligt7trfsMhq138za5PYvrUSDq91u1nMyrbw3/SM28edkjb9IGPDY7VWBl6REM2Nq9isSwr 84me5aAltmcgye8OFH2bpL6c/vyNh1zpFQ1RbnEfx7jSPIzcA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D Our driver uses reset to create the various object states, but only calls the helper that allocate a new state. They are thus strictly equivalent to the new atomic_create_state helpers, so let's switch to these. Reviewed-by: Tomi Valkeinen Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/tidss/tidss_crtc.c | 17 +++++++---------- drivers/gpu/drm/tidss/tidss_plane.c | 2 +- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/tidss/tidss_crtc.c b/drivers/gpu/drm/tidss/tid= ss_crtc.c index a31c21c5f855ac8a94089dd3908e2510193b7d67..66e3d161c60bc14b2982cff4cdd= 43030d4086798 100644 --- a/drivers/gpu/drm/tidss/tidss_crtc.c +++ b/drivers/gpu/drm/tidss/tidss_crtc.c @@ -355,24 +355,21 @@ static void tidss_crtc_destroy_state(struct drm_crtc = *crtc, =20 __drm_atomic_helper_crtc_destroy_state(&tstate->base); kfree(tstate); } =20 -static void tidss_crtc_reset(struct drm_crtc *crtc) +static struct drm_crtc_state *tidss_crtc_create_state(struct drm_crtc *crt= c) { struct tidss_crtc_state *tstate; =20 - if (crtc->state) - tidss_crtc_destroy_state(crtc, crtc->state); - tstate =3D kzalloc_obj(*tstate); - if (!tstate) { - crtc->state =3D NULL; - return; - } + if (!tstate) + return ERR_PTR(-ENOMEM); =20 - __drm_atomic_helper_crtc_reset(crtc, &tstate->base); + __drm_atomic_helper_crtc_create_state(crtc, &tstate->base); + + return &tstate->base; } =20 static struct drm_crtc_state *tidss_crtc_duplicate_state(struct drm_crtc *= crtc) { struct tidss_crtc_state *state, *current_state; @@ -403,14 +400,14 @@ static void tidss_crtc_destroy(struct drm_crtc *crtc) drm_crtc_cleanup(crtc); kfree(tcrtc); } =20 static const struct drm_crtc_funcs tidss_crtc_funcs =3D { - .reset =3D tidss_crtc_reset, .destroy =3D tidss_crtc_destroy, .set_config =3D drm_atomic_helper_set_config, .page_flip =3D drm_atomic_helper_page_flip, + .atomic_create_state =3D tidss_crtc_create_state, .atomic_duplicate_state =3D tidss_crtc_duplicate_state, .atomic_destroy_state =3D tidss_crtc_destroy_state, .enable_vblank =3D tidss_crtc_enable_vblank, .disable_vblank =3D tidss_crtc_disable_vblank, }; diff --git a/drivers/gpu/drm/tidss/tidss_plane.c b/drivers/gpu/drm/tidss/ti= dss_plane.c index aaa02c851c595aa3781ec2e6741af1999092aa40..518498d4576528a0ec59fd03cf2= 7a87b1b3f1e6e 100644 --- a/drivers/gpu/drm/tidss/tidss_plane.c +++ b/drivers/gpu/drm/tidss/tidss_plane.c @@ -176,12 +176,12 @@ static const struct drm_plane_helper_funcs tidss_prim= ary_plane_helper_funcs =3D { }; =20 static const struct drm_plane_funcs tidss_plane_funcs =3D { .update_plane =3D drm_atomic_helper_update_plane, .disable_plane =3D drm_atomic_helper_disable_plane, - .reset =3D drm_atomic_helper_plane_reset, .destroy =3D drm_plane_destroy, + .atomic_create_state =3D drm_atomic_helper_plane_create_state, .atomic_duplicate_state =3D drm_atomic_helper_plane_duplicate_state, .atomic_destroy_state =3D drm_atomic_helper_plane_destroy_state, }; =20 struct tidss_plane *tidss_plane_create(struct tidss_device *tidss, --=20 2.53.0 From nobody Mon Apr 6 09:11:30 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7A24A3D3319; Fri, 20 Mar 2026 16:28:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024104; cv=none; b=DcmzSRuO1jqXON2sHzhdbbPSdyLdAaUarizJmKRStiHg2TxUDZ3Cbi0ERUIXgeEQotgnlYqaGy1VhFmJ1Dg75c7KI07CYuzSeCE8hnMxGz4gW6E+jUZkP5zNgkwEsZn9Peu27SoOkpGC+lFttvPgIPbxjb3egH5q0flJOOg1n4w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774024104; c=relaxed/simple; bh=b66Tl5kZoqYvPt0EneArcC4td5ZO+VTiTMrGRP4Ocis=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dNDokNiq0WmXRSV300oJ/0prjZ4MjI3mJkQKLr+a3P82FZ8XFZ/UX8xX6eTgA+jaU9V4O1T3LZnACEi0RCzXcQ3h/2GmkXVT9hwKBETHJy3YGjguuucMCWySjOk/GnyhZ+tEvQd4pCwODT7MIibnLonBcPqx51K2ld4jlwQCvX0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BJXf5Zeu; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BJXf5Zeu" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4F311C4CEF7; Fri, 20 Mar 2026 16:28:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774024103; bh=b66Tl5kZoqYvPt0EneArcC4td5ZO+VTiTMrGRP4Ocis=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=BJXf5ZeuYCDIhrvsHxH1x2cWRy5dggsOMwsdh/Y2nmJ4+p2VWxuuAWYNEFkUqEZEX c5zU/D5fcvlgkNcQhMcg+J4+kHBYh6zYnImaDb3QL6XrPmIqa5aYk7pJv5SuqthjfE XP3v1PzxM4PxnrBzRVk6VnzOvBbWMFPa4EgjcT64CDMpS2tHGfeu85H0taloLObfeJ p2/a7p1UULFu83tJjCpwTUhuIbS14XwM3xH0IKEhFkrBuGz2Fba1eQWkLTjspcQaxq 8ewdQnrfExXM7dmP8nAeMzqLUuwC5rnu8/IQqQzzhBQMvNImN+Xbqgnt8vRgw/FmWS jGNtIzpcnK7wA== From: Maxime Ripard Date: Fri, 20 Mar 2026 17:27:27 +0100 Subject: [PATCH v2 20/20] drm/bridge_connector: Convert to atomic_create_state 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 Message-Id: <20260320-drm-mode-config-init-v2-20-c63f1134e76c@kernel.org> References: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> In-Reply-To: <20260320-drm-mode-config-init-v2-0-c63f1134e76c@kernel.org> To: Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Shuah Khan , Dmitry Baryshkov , Jyri Sarha , Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Simon Ser , Harry Wentland , Melissa Wen , Sebastian Wick , Alex Hung , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone , intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard , Laurent Pinchart X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2228; i=mripard@kernel.org; h=from:subject:message-id; bh=b66Tl5kZoqYvPt0EneArcC4td5ZO+VTiTMrGRP4Ocis=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJl7S3M2nqx88cjFOTf5hobf8dcX952r1ee4+OuTn1bWU vl131597JjKwiDMySArpsjyRCbs9PL2xVUO9it/wMxhZQIZwsDFKQATOTedsWHmilddlx2LQsS0 J3AGCM+fufLdwqwN0ip+73KN75ZNP/IspnKnWaWfW8bG6PKa1FcbbRnrC3MCpxmZOyjqL2H1WSq R0VPNLtgu+H3R06dF0u5ffrlxnVjNKzDp9U+/pxovJHkWTVoMAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The connector created by drm_bridge_connector only initializes a pristine state in reset, which is equivalent to that atomic_create_state would expect. Let's convert to it. Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/display/drm_bridge_connector.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/d= rm/display/drm_bridge_connector.c index 929f06b290626d2091418a6377a5230e3c264b60..b640e7d5a065d165a901bd73fc8= 36afaab967dac 100644 --- a/drivers/gpu/drm/display/drm_bridge_connector.c +++ b/drivers/gpu/drm/display/drm_bridge_connector.c @@ -263,26 +263,33 @@ static void drm_bridge_connector_debugfs_init(struct = drm_connector *connector, if (bridge->funcs->debugfs_init) bridge->funcs->debugfs_init(bridge, root); } } =20 -static void drm_bridge_connector_reset(struct drm_connector *connector) +static struct drm_connector_state * +drm_bridge_connector_create_state(struct drm_connector *connector) { struct drm_bridge_connector *bridge_connector =3D to_drm_bridge_connector(connector); + struct drm_connector_state *conn_state; + + conn_state =3D drm_atomic_helper_connector_create_state(connector); + if (IS_ERR(conn_state)) + return conn_state; =20 - drm_atomic_helper_connector_reset(connector); if (bridge_connector->bridge_hdmi) __drm_atomic_helper_connector_hdmi_state_init(connector, - connector->state); + conn_state); + + return conn_state; } =20 static const struct drm_connector_funcs drm_bridge_connector_funcs =3D { - .reset =3D drm_bridge_connector_reset, .detect =3D drm_bridge_connector_detect, .force =3D drm_bridge_connector_force, .fill_modes =3D drm_helper_probe_single_connector_modes, + .atomic_create_state =3D drm_bridge_connector_create_state, .atomic_duplicate_state =3D drm_atomic_helper_connector_duplicate_state, .atomic_destroy_state =3D drm_atomic_helper_connector_destroy_state, .debugfs_init =3D drm_bridge_connector_debugfs_init, .oob_hotplug_event =3D drm_bridge_connector_oob_hotplug_event, }; --=20 2.53.0