From nobody Mon May 25 03:33:27 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 2BC673F6C46; Tue, 19 May 2026 09:02: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=1779181327; cv=none; b=uZcGTYLB2RXl/TNxTXEeoj2l1XXVCwx2O6grkUyUQjDo1JiiOC6uvBs6MJAKh0SlUmO/y5V4VoEMmG+suE9xAKY3mBvXi/1+IOtlqgzhaQac7kT3ZXHRoDSEAQ1Adm2BXI1WaBkL22rp2udwfdZH3MO6ca5xgyoP0sc2Efnk2Sw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181327; c=relaxed/simple; bh=0OYumzFDqexo1pjs+gvzZZRkn4Y7gOK0JvJLauSsQbg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eEIFW7MhGiR83KocGQI6DiOAQUTIro3jMy+3ZkzRsmBFT1B9eCD8zMCWWaK0I+OLmySzmsmAb/ZtTHxJfAd4LKouyqp8Q70VDkqy0OByvwidFJ3OQUL0WiVc6fet0KTZfyIFbBHdJ2+gsy2zWzradyg6ugXX0zHUc+BEPmMNMUE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=REjXKBIJ; 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="REjXKBIJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7AEB4C2BCC6; Tue, 19 May 2026 09:02:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181327; bh=0OYumzFDqexo1pjs+gvzZZRkn4Y7gOK0JvJLauSsQbg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=REjXKBIJQ+ansyM59AqnN0Qca1t7NPkogpLrXuY5UDdZDcVEzLJB4SaZPP1mhQMqz i3iQL6JA85QRaTTdfhoou9tZJl1nVm6NJYLKMug6Taw2Hgkrx1wMDpjUBDK//IMcsi fd75DUm5J0pkAvXxb6kB+iLEunPTX05aiez3pXg2LADpwZxrNM3gVAW4yHQJxPg10M G61isNgerrAaTPHsDJNBHa7rQgzflVOiBceRz3dkdmHuYxXslhLbVncnSEh6eoHqnz Fa5PCZPXluhlWRr0uUJncKgpj9s8NpTIXKB5EQiPjvYI2cg8MZnTqAbX4FayoaXkem CuITPpYHyhGVw== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:43 +0200 Subject: [PATCH v5 01/19] drm/atomic: Document atomic commit lifetime 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: <20260519-drm-mode-config-init-v5-1-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4499; i=mripard@kernel.org; h=from:subject:message-id; bh=0OYumzFDqexo1pjs+gvzZZRkn4Y7gOK0JvJLauSsQbg=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8aj9PzeYx/LLLU05Cu5aR+Xu5WYnMMv2G8lUsJf8tf /0X2rO/YyoLgzAng6yYIssTmbDTy9sXVznYr/wBM4eVCWQIAxenAEzkSARjDY9Fb4LSd7fJ3pX3 LFw2uAg0Jvb1VJfuv6m3+6zE9SPRpb4VhtnT3zs2Cks/XLSRe/JVxvq6gtuW207ucnho8pJb9rb 2oh1Ns+M4dA/l7be9whp05Ya00Kzu2NtqDDO6172oy5i+5iEA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D How drm_atomic_commit and the various entity structures are allocated and freed isn't really trivial. Document it. Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- Documentation/gpu/drm-kms.rst | 6 +++++ drivers/gpu/drm/drm_atomic.c | 58 +++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 64 insertions(+) diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-kms.rst index d22817fdf9aa..36d76e391074 100644 --- a/Documentation/gpu/drm-kms.rst +++ b/Documentation/gpu/drm-kms.rst @@ -282,10 +282,16 @@ structure, ordering of committing state changes to ha= rdware is sequenced using :c:type:`struct drm_crtc_commit `. =20 Read on in this chapter, and also in :ref:`drm_atomic_helper` for more det= ailed coverage of specific topics. =20 +Atomic State Lifetime +--------------------- + +.. kernel-doc:: drivers/gpu/drm/drm_atomic.c + :doc: state lifetime + Handling Driver Private State ----------------------------- =20 .. kernel-doc:: drivers/gpu/drm/drm_atomic.c :doc: handling driver private state diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index 170de30c28ae..d98586d89bbe 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -45,10 +45,68 @@ #include =20 #include "drm_crtc_internal.h" #include "drm_internal.h" =20 +/** + * DOC: state lifetime + * + * &struct drm_atomic_commit represents an update to video pipeline + * state. It's a transient object that holds a state update as a + * collection of pointers to individual objects' states. &struct + * drm_atomic_commit has a much shorter lifetime than the objects' + * states, since it's only allocated while preparing, checking or + * committing the update, while object states are allocated 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. + * + * - whenever a new update is needed: + * + * + A new &struct drm_atomic_commit is allocated using + * drm_atomic_commit_alloc(). + * + * + The current active state of all entities affected by the update + * is copied into this new &struct drm_atomic_commit using + * drm_atomic_get_plane_state(), drm_atomic_get_crtc_state(), + * drm_atomic_get_connector_state(), or + * drm_atomic_get_private_obj_state(). This new state can then be + * modified. + * + * At that point, &struct drm_atomic_commit stores three state + * pointers for any affected entity: the "old" and "new" states, and + * state_to_destroy. The old state is the state currently active in + * the hardware, which is either the one initialized by reset() or a + * newer one if a commit has been made. The new state is the state + * we just allocated and we might eventually commit to the hardware. + * The state_to_destroy points to the state we'll eventually have to + * free when the drm_atomic_commit will be destroyed, and points to + * the new state for now since the old state is still the active + * state. + * + * + After the state is populated, it is checked. If the check is + * successful, the update is committed. Part of the commit is a call + * to drm_atomic_helper_swap_state() which will turn the new states + * into the active states. Doing so involves updating the object's + * state pointer (&drm_crtc.state or similar) to point to the new + * state, and state_to_destroy will now point to the old states, + * that used to be active but aren't anymore. + * + * + When the commit is done, and when all references to our &struct + * drm_atomic_commit are put, __drm_atomic_commit_free() is called. + * It will, in turn, call drm_atomic_commit_clear() that will free + * all state_to_destroy (ie. old states), and finally free &struct + * drm_atomic_commit instance. + * + * + Now, we don't have any active &struct drm_atomic_commit anymore, + * and only the entity active states remain allocated. + */ + void __drm_crtc_commit_free(struct kref *kref) { struct drm_crtc_commit *commit =3D container_of(kref, struct drm_crtc_commit, ref); =20 --=20 2.54.0 From nobody Mon May 25 03:33:27 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 4B3573EFFB6; Tue, 19 May 2026 09:02: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=1779181332; cv=none; b=j4tlNnNcoIgtOk4Tvnd8VzhSFVIssVb9LVUU3w5O/lmoMtK4pArw8EfAsppUEkTRryi/xKAKVZt2qc4r8JoCRKZV11BjZkKXTyp0hmuN+oizN7K4UFS5tIL3X7nMbIVoUc2OTczYrgH+S0LU1nTkFr9P1CYYMir+NturjhAMPkI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181332; c=relaxed/simple; bh=JdNElNwTIUBx+lfJsjS2BzsCplWERmeATaICya7vgAQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jc+7JiZ/1yrQ1fKZjIa8oG2YlJ1DLbXTkn7rcnBtWcaWYt4M43d+gx1Guk3sbL2W7R0q/ariwIs0Pm8KnpZcvbJG+bl9tlBoY+h6Qs7Beq0Dns/q+s9P4nPrJ8PAuQaP2TQAZT0uqI7bIuq/qAATOu/L3BtCQpw6ll7qKcV+Ms8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nHqHXqhw; 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="nHqHXqhw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 548E4C2BCF5; Tue, 19 May 2026 09:02:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181331; bh=JdNElNwTIUBx+lfJsjS2BzsCplWERmeATaICya7vgAQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=nHqHXqhwxTVoXwQ3KvccsHYGob3u9yu9HAd3B5V1WWVxkicqKXn+SIuvo5lu7mSVm YNY4oT6L5qe+tCpWAk2HmNBirBHseHP6QaLwFLgGmdehviUrx5NyxBby0HANS8I/A3 i/K0ovoJIccHE8KCExpTpY6Eoi/3wSLCgCgBZ695OjgH+YJFE3qbsKWbWw1bkwGIYo g6Z7hJexZV/ySmnH9KDnogyM15k7WnCR2s9Eon7rfYy8shoyAE5Xbqf5hPpvLh2LK9 4HD8av79ClWqfql61vZ1/scqBQnL7zh+SCpo3nRRm0hPWvXVNLYxlc6WdbA0Agrp7O f60pg50UMsvpQ== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:44 +0200 Subject: [PATCH v5 02/19] 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: <20260519-drm-mode-config-init-v5-2-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2369; i=mripard@kernel.org; h=from:subject:message-id; bh=JdNElNwTIUBx+lfJsjS2BzsCplWERmeATaICya7vgAQ=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8ar/m3bffK/ZxEZMAS8KbWamzC5jPbeqJ1rp6tC+Lo 4JDeCZTx1QWBmFOBlkxRZYnMmGnl7cvrnKwX/kDZg4rE8gQBi5OAZjIvHrGhkePZj49uNDAI+JO lOHyo/N3V3w5XCj+YDdX/jQO0X8VP3t/uV49vXhalv5bzugvYtGB2ozVbHM/cix8ofE52tDuwPk rczkak/VN9GKPLQoXdrP6LGTzROv+p5PxE2pnOQe870vW7doIAA== 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") Reviewed-by: Thomas Zimmermann Reviewed-by: Laurent Pinchart 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 764d12060666..48d0b7ae3fc9 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.54.0 From nobody Mon May 25 03:33:27 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 532AD40584F; Tue, 19 May 2026 09:02: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=1779181335; cv=none; b=UeMhH5CQBGgRSSQ6bEGVkW0zltenEDepI2hHKuooCZSNh1GhdW0JVNut30RVdEf6YJkekWsm/lkKg90wwcMWOPOfyCrgiaI18IXYw+3bSY3s9YNhQSP+1rhk3sjx/IpCxXtKZsordNSQ6yVFUYUsZIP7a+04dx5hkpfdAGJ1I5w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181335; c=relaxed/simple; bh=8gKR8nH9fdwkklOxC1orkJLxbt3pf9ySjt3LJ0StlRk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BRpYQ79gXOzMDeAf+1jz66oqUWYhptkDT4EsAqWseOSp5GO/Ldk7HwlyxGTGW6xuV+Xi8+P0CT9VjTEzg1wq5HLbm/t7JuxvL95HgWi6XfKrVoF76dFZoNhoAGkcR3mxE07yqWdXaJNg0ZiTH4sEvOyScFOd5IFFDzEErMnam54= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RCdZ6qWg; 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="RCdZ6qWg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9D2BBC2BCF5; Tue, 19 May 2026 09:02:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181335; bh=8gKR8nH9fdwkklOxC1orkJLxbt3pf9ySjt3LJ0StlRk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=RCdZ6qWgczr9dtq+2SjsDchNxEuvhhSfHUYAWOl/VQZeUnZiuHMV//qLrp2iCS6Fx X82N74LJqGTZ6QMlK9Et4b2MSMcl+1BuxoAQyI8Ns8iujfQlJ+w6FVyrU+IQpAloG0 3o0oda4ixqW8X+PchhhqBakBq5m4CPOUR73ooMSIaxP8mfAMBDoN/gTbw3pLaqntFu 9bRcRCN8q3DXLwUlLwkBDOclaslXcODv7obK/Ij/TnduCkAM6uNOd2V68saM6OJ5DP wrcaTqB3L9/e2PRHwRNLgRH1usJWwDNmIfNRwE98f7VfCxMkROYtscsIiBJArMQsTn jhlh42DHf/8Rw== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:45 +0200 Subject: [PATCH v5 03/19] drm/atomic: Drop drm_private_obj.state 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: <20260519-drm-mode-config-init-v5-3-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1621; i=mripard@kernel.org; h=from:subject:message-id; bh=8gKR8nH9fdwkklOxC1orkJLxbt3pf9ySjt3LJ0StlRk=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8ar/i5iW5bI8RdJHYE79ik8CcL5mW7etsg/9Ps/p6Y cO1EpaojqksDMKcDLJiiixPZMJOL29fXOVgv/IHzBxWJpAhDFycAjARzSuMDfvCS7I3FVbu8j7l n5F+1MJl8cqiRx0HZgY8WOH58CDPxBmLmybc4HYRiY07zdkee1plDmPDskS/ukKVTjZ9njRB9im KTrUh9it/3EzJWGp7SuIS4+Kc+vNiNkwfnln/f7dkfs62SycA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The initial intent of the atomic_create_state hook was to simply allocate a proper drm_private_state and return it, without any side effect. However, __drm_atomic_helper_private_obj_create_state(), which most atomic_create_state implementations call, introduces a side effect by setting drm_private_obj.state to the newly allocated state. This assignment defeats the purpose, but is also redundant since drm_atomic_private_obj_init(), the only call site for the atomic_create_state hook, will also set this pointer to the newly allocated state. Drop the assignment in __drm_atomic_helper_private_obj_create_state(). Fixes: e7be39ed1716 ("drm/atomic-helper: Add private_obj atomic_create_stat= e helper") Reviewed-by: Laurent Pinchart 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 cc70508d4fdb..a82568d87e4f 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.54.0 From nobody Mon May 25 03:33:27 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 2927D40C5B6; Tue, 19 May 2026 09:02: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=1779181338; cv=none; b=pC2b8OlBVidAfuTOG3q/NAPHKoJhlmYOQ49dbyfXpPfExuz38o83+qdDSQXRiUDY76tBICDN5GZFyFCiC2Zcuob9F+6EZR5jf3CHem4iSitMP80Z560d3J7fEf4ZEN8GfNsd960vZdzaliMVJCUyiJ6cfTAS8cwR4ndMtXEjxTw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181338; c=relaxed/simple; bh=fl6z0LfliVCc5jA4Pfmq25TAh8lEdW0hYIuxPKlSz3I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OzgV9BSYi0ICd7WkAOFv5BdzhPEs+5KMATOX4VNW7LPnZ1UGgLwb6prXkMEc0Gji6e9mFX4Zrs0DukxOgnDtagwiVAX39vmJMpSMJr+2K93JBBdBVjVqvJK9/ofgeLpKW/5xc0GKHbCbGqWILR6jqbk6YxErS+94yuoe2Qeqmys= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=B/6XRxVF; 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="B/6XRxVF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7C8F1C2BCC9; Tue, 19 May 2026 09:02:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181338; bh=fl6z0LfliVCc5jA4Pfmq25TAh8lEdW0hYIuxPKlSz3I=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=B/6XRxVF+FpXQgL8BoJZOxX6PVLvnqXcsrd7aLXxExAs8GRPQ9CLlfcqbTGi1aZgw ZvZS5+LjJmcy49xtL4NJDuxDbrfdkZQCaP4NpBripws3Lo2v5CC+w8MCKumU3pA3gU HWW/YgYYSojKyLA9pgVrpfYADIGvQq0NUvmepK08wkARd5aJqMSHhbfvVNOHApvsiU vS+iA3n8Tq7QHsiPuIPwvOpqJrVEDPsnV9QatXFBid7F8dtNcHA415gx/iZC/yfu55 c01zMxgDbOd5jARw+tkOAbMkolUJc6qWDGm92ntPCZpl9McMRmQeVpzSKul5yFSV+p hd6gBghJJ2fyQ== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:46 +0200 Subject: [PATCH v5 04/19] drm/atomic: Expand atomic_create_state expectations for drm_private_obj 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: <20260519-drm-mode-config-init-v5-4-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1304; i=mripard@kernel.org; h=from:subject:message-id; bh=fl6z0LfliVCc5jA4Pfmq25TAh8lEdW0hYIuxPKlSz3I=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8ar9MTkz7x6t9ZtrV2l9XAjkUQoTSGrxtGl4vmRXMZ SZeVazeMZWFQZiTQVZMkeWJTNjp5e2LqxzsV/6AmcPKBDKEgYtTACaimMhYX53Parrq6BOfv7fX Ktq2P53w6cuX+7pq+gr5kd+/WAifelDpoKAgICGme2belts22RJLGBs2W8owecovKa9rjDyWYT7 37n2HyYtnlRe3P8y+teAOw5HMmO0PdisYf2brNO2+v3HdOjMA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The atomic_create_state callback documentation for planes, CRTCs, and connectors explicitly states the expected behaviour: the returned state must not be assigned to the object's state pointer, and hardware must not be touched. The drm_private_state_funcs.atomic_create_state documentation is missing this clarification. Add it for consistency. Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- include/drm/drm_atomic.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h index 1a80a8cdf269..88087910ab1a 100644 --- a/include/drm/drm_atomic.h +++ b/include/drm/drm_atomic.h @@ -263,11 +263,14 @@ struct drm_private_state; struct drm_private_state_funcs { /** * @atomic_create_state: * * Allocates a pristine, initialized, state for the private - * object and returns it. + * object and returns it. This callback must have no side + * effects: in particular, the returned state must not be + * assigned to the object's state pointer and it must not affect + * the hardware state. * * RETURNS: * * A new, pristine, private state instance or an error pointer * on failure. --=20 2.54.0 From nobody Mon May 25 03:33:27 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 3EB1B427A10; Tue, 19 May 2026 09:02: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=1779181341; cv=none; b=KDPek+iXIbK7YpQp0AYJWuFviNwK06XoF/8XW0iI0cFP+8wDW1fn93aAboJfu7RB2u6qZ9j1xSmzt+/jMPIuzvbg8nhITRdFC/okcAJjvNPL2V5zeQMaWuXsuEMKGagmOr+mXkXqcLv8Wi4A/q3F7SxRjzpi0I6a81Yf26VQIeU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181341; c=relaxed/simple; bh=OOzvE+PDY+lMMJPx9rpX9siTCSFetWvZ9fVlq7uKBtk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=V6JKOo1ziOLFe0GNMID6CHGpOhjWqoPLmEdQyFGaxIB7O1X7kwQJoBox1mlRlbZkMQVWbO22zgC3Oz0NZf2GSeoT+eba7tCaimSzD/IrvSjT0Fep1td80om3gJV/DmDgYvZhYl+l0X4PQRh5esBa0k12ajvjs/SUGIVnj+qbJGs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Y4cGV95U; 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="Y4cGV95U" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6442CC2BCF5; Tue, 19 May 2026 09:02:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181340; bh=OOzvE+PDY+lMMJPx9rpX9siTCSFetWvZ9fVlq7uKBtk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Y4cGV95UPDj7Y9KGJgAxd9rqvaQulKEX/+tIhrOy2Q+fcuwJ4pihVzVLN3JYmfqxQ r6BZEBLbm8vw6LspNUuEQ2Ock+xGPP8EhmGMikgOaUN6N5J2GLjXTCbI3eSY8JiV+K r7BbGSupl128A8bN5Fc32DykYtEWwohNCnIhiAAJx2pH3a/iGsu6nuumLjimtiSKSu n/xPW+u4RoDJLqT5IAjj495Ez3tN8QkRH7hp/s0Oikn/I7BC7dC9QhSZqrjBNJU0PX Z/eZE+phuV+0HQDndlrwfZItYxHXiGQaD/rxjDElnK+fDqvLrzirSX+eh4zuP6++sj tesI/alMZ21BA== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:47 +0200 Subject: [PATCH v5 05/19] drm/mode-config: Document drm_private_obj exclusion from drm_mode_config_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: <20260519-drm-mode-config-init-v5-5-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1384; i=mripard@kernel.org; h=from:subject:message-id; bh=OOzvE+PDY+lMMJPx9rpX9siTCSFetWvZ9fVlq7uKBtk=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8ar/L/PIuBqXVas85f/zTBoPfj0LMhH7POHwq4cMS7 rNVjJaKHVNZGIQ5GWTFFFmeyISdXt6+uMrBfuUPmDmsTCBDGLg4BWAia1Yw1odIhv8yY+yaUvL6 Y/G6Wpl3r1zO/WCaf3D/7Lurt2VsK1wysUi+wvPEJYfa9Y9bnQ3TfjLWVwnvKv097YfDu8Nbs/k 5pZ1TmyRSv5559Xrlx628SdNq2iYrRz6rCZNpczsRIXb7oaYGAA== 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. 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 66f7dc37b597..c33382a38191 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 these + * structures. */ void drm_mode_config_reset(struct drm_device *dev) { struct drm_crtc *crtc; struct drm_colorop *colorop; --=20 2.54.0 From nobody Mon May 25 03:33:27 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 65B263EFFD2; Tue, 19 May 2026 09:02:24 +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=1779181344; cv=none; b=BXJyIpz+ca/T2thCxx9pwK+gL+2j1/LilKSp2/QUk1LN1wGN41cHj32is55BxtVxyVAJ4JnoHUSTSHcW3Vrc57Ks+eds/5W0mZA+VIJ4unKKSxf/xnL59NV/1NuMtKj5zp8YB4FCyR6zIzxxhjnJaOL4OS9HoM4GThQGm2nUqQg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181344; c=relaxed/simple; bh=+FwSG1hlg7MTNqbAOkk9ReNx69b57yw8164zI/GpPzc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NcHFD5+VFWjQ0SYZH9hPQCsRE6cFwIOLeIVjrWLSvOtaDB+Qg5ttpEtfHpeWshk9O1YXZsaMt1C0s1ktVpP4WC/35u2rGoXv8D6aPD0ukGgdfbgI+s0L77kuhb+j+tDeqrcgRmIhhS0Ogz52kow/sJ3lqLDZfxkPGF3yBjSti40= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GJJuESuu; 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="GJJuESuu" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 68C59C2BCB3; Tue, 19 May 2026 09:02:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181344; bh=+FwSG1hlg7MTNqbAOkk9ReNx69b57yw8164zI/GpPzc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=GJJuESuuTJSD3Xy+RXwiOWIpi3eO79nEAXdWyS+c6Gd0LN0wvbuI+nayeQFi27vPl 5VEDlsje8AxDEB1stb7w3RMVZ3yX8ODw++5dyefJ+KNDil4+G3dcyp4UCmzZRfkJ3m +mjgAfEo40bv7I0wUZxlVVN6HR4Sue4bNe5+0ihgOrj69WRq6kFAHrQ+NYecWBJyXq FFgMk4gHsXCSy/S70Xvcv4m1K8LrPoznqORald8Ug/43mtkr+aRsxhtZUr9eqEei8x 3U61YjJZw9sRUhwJ1X0DgCv4awOO+Wo3nTY3wMxxXJLhoCq7NEoh1WuLq8XhAVY+mA B5h64F+VMA93Q== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:48 +0200 Subject: [PATCH v5 06/19] 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: <20260519-drm-mode-config-init-v5-6-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2371; i=mripard@kernel.org; h=from:subject:message-id; bh=+FwSG1hlg7MTNqbAOkk9ReNx69b57yw8164zI/GpPzc=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8ar9Z0xL2xTJ4iAZeOTrzXqhCw1lB6VucygsWujx+t HSNmMeijqksDMKcDLJiiixPZMJOL29fXOVgv/IHzBxWJpAhDFycAjCRpAeMDV+tXgtoPxBU5ZuV /MODZdqqkxsNGYqS72x6e8TXPEwvt/PO6yItv1NBPDf2Xf31IMw6hLFh4y990/LqttlfGaPeBmb q55zeFXb77B+OkxEhT+0qf52ZJCezo7DyKed8QwMTLeXTKpYA 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(). Reviewed-by: Thomas Zimmermann Reviewed-by: Laurent Pinchart 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 48d0b7ae3fc9..4c4d0a953e35 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.54.0 From nobody Mon May 25 03:33:27 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 51F9A4657EE; Tue, 19 May 2026 09:02:27 +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=1779181347; cv=none; b=VGKAumd688cy/QVJ65IVhOs63UKB6RcMvZHPr5CEari7VPnifd3TAa9mAfwrZFNcW4HYTh44qgPOKgmnCjLlt8Lce7eo9XHjln94aR0qeMnEbCWJ2/Pe+iffOGusyhfBUbM80oYWRjcdgMMo841puxuG8Nk7Ck5k29nYc+t3rjg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181347; c=relaxed/simple; bh=DoHehglpGEtHjd3p4fHoExXCMyZCNZ7HfU8eg8Uy0C4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mJDBDK9foHTVmhCM7HYx9gA5UjVDDK3LzRv7aqpYv/b0bXUNQShV2nCtk99lNy2JEBJbou/OinPTZ0dwZVIMvLpfQ9A1+uLreGFZO+MaMU/N/S2UxAsBDCL/eGhpN2L82t51uF+5DJIq7dMTWnWkHeMuiMCxj4cawuqnsLdRPzI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=u6ESb474; 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="u6ESb474" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6E6F2C2BCC6; Tue, 19 May 2026 09:02:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181347; bh=DoHehglpGEtHjd3p4fHoExXCMyZCNZ7HfU8eg8Uy0C4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=u6ESb474/QHRbYABxn5HFdRPtUmgCa7msPBBlh39qWmdEK/2Pd5efciPMYxiGA0kw 4WYk6pVFmnxEjvKg5ZA6McfSQ9nTZebrFUMx606HX/z2gRmJySO/0NQ+EOlShC70qe GC8B42ivbaXvbM37nND/ZzZv6x3UiyoS5vLAZTl3VE+L0/lC4Y9HgB9t7vBRNeXQCP 163qAAzd5wYWnTUyVcP8npG69Y2BG3sXWUhKQNLTJTOzsn3fJHiaWNk4KWBldpNBha pgw34TNK97gaUBg/yU/a/dNEgI4CDkcWfEdgLmfE7Xxz/VhGht5FUtNAYiTohYwYbm U7PJI9SW1HKmw== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:49 +0200 Subject: [PATCH v5 07/19] 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: <20260519-drm-mode-config-init-v5-7-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3524; i=mripard@kernel.org; h=from:subject:message-id; bh=DoHehglpGEtHjd3p4fHoExXCMyZCNZ7HfU8eg8Uy0C4=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8an+Yrye+2NThsKvBK+hbjLTcPH79zXdjDsY9NXhnO kFHXeVzx1QWBmFOBlkxRZYnMmGnl7cvrnKwX/kDZg4rE8gQBi5OAZjIe03GhqdOn1vP330ie9Tu nY7C+ao+2yfZvJFh/Ad3ndGbb73jT+xS/xe9U7sureB5XfyYI2/9DcaGH+dWtyUIbWNKEK8NWia w6u4DG4ZfQa+uuD36vz1HXNnAumq32BHRmPvaM7jiT2w5unsCAA== 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. reset() also isn't fallible, which makes it harder to handle initialization errors properly. This is only really relevant for some drivers though, 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. Continue the transition to the new pattern with drm_colorop. Reviewed-by: Thomas Zimmermann Reviewed-by: Laurent Pinchart 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 4c4d0a953e35..c0eecde8c176 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 c873199c60da..b4b9e4f558ab 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.54.0 From nobody Mon May 25 03:33:27 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 17D59466B75; Tue, 19 May 2026 09:02: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=1779181350; cv=none; b=a7c+4SoBBW+Hha28wJj1k7d2Z78kqc7AkcK15ap8hMvKrqSlHA4oa4aS2MAjHnpUp022Xmd0NeHIcNDyeYadctQOoX9IbrAwXOeI17ezl2J+zqJvxDJTJEpO7SMZo8e8gKB/uo/kcnh3xNk9A/6n7vAj4a1aVG7qnSB3m312d6w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181350; c=relaxed/simple; bh=3P/ZjAcLUex4P3oNpd5Z+isOTz0WG4WoSqpftWEhPh8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Tdvaho/4PI5vJbDva5shWiKLIiSBVhDVMnUi2zSHHBznjCayHyUQ5obGX6ScTVQQwQjxoTEV8rPdd3zlE/U7DFZWeQDO66smbQr1xYV/8UYJ/wczmGzP8DHLyoiiI9Q9kI62jbYTC3+4cUYhjCFRewc3RXJ7HwZZxdq/iOe4eM0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DBgP7oZS; 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="DBgP7oZS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 69807C2BCFB; Tue, 19 May 2026 09:02:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181350; bh=3P/ZjAcLUex4P3oNpd5Z+isOTz0WG4WoSqpftWEhPh8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=DBgP7oZSISDpHc6gfFj6jIP4uVr5A2KMcWVRMqk+pxo76VflVFG2XMm9yggrN2dhb A9mx2hV7EUVMKQnSoOKgXUXnBtnAdXcHzxTqTgtxIijQIlbxJoiSCHsSwA3KszRPr4 79uIRq11idiuaTzwP9/KzaQ+xYJ61nOjaCanX3Ukry/2hrFW9Yfs7aaseXG6cXK3/+ DxzpB7PtY/lXRJFRuG4X6rbRCya+O5w1mOdSo5r6PeXyMY4XGp53z8vAaVS39d2Dv4 XUkkXH1IgD0Tkv2uueLVaFWfNaBvgHLaU3rGO3UI1nrmDIJAJFQgkvL22IlNOBVFWL 3oCzz1YOg00fw== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:50 +0200 Subject: [PATCH v5 08/19] 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: <20260519-drm-mode-config-init-v5-8-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1365; i=mripard@kernel.org; h=from:subject:message-id; bh=3P/ZjAcLUex4P3oNpd5Z+isOTz0WG4WoSqpftWEhPh8=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8an+KPbM2z37gXh7foDJlynaj+CVOFgvWSun+kv238 EaTY1tCx1QWBmFOBlkxRZYnMmGnl7cvrnKwX/kDZg4rE8gQBi5OAZjIEzPGejdDpU2fi7/8u/hb uSRcmVuiiGfnfAmrZSaOE542bVN/8HyHudm7g5fj3O5L2MTZRO8sY2yYu/nhg5iNIvGveHfutmd gfrog+teaaykRJ4VO7PzXrKBnahB+6/i/RRFLPYzCPwY2ux8FAA== 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 Reviewed-by: Thomas Zimmermann 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 a82568d87e4f..c8ccf8be5074 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.54.0 From nobody Mon May 25 03:33:27 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 292473F0740; Tue, 19 May 2026 09:02:32 +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=1779181353; cv=none; b=LsFwT1Hfy5VStkXjc3YRTR6o7UC5OOc+I2CWphrHx9HOg8W3bYRpN9EKSGTwjn2Rl4CmGNs3O6IwcJvdu47DYSZaN3K9IBJxE3RGiBl9aLKUotw+VAPXUkfQyzx7LQi/asi3Sd7dn4k+JghiDQZjHuUd7cDJR2zqj/61uXOSbh0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181353; c=relaxed/simple; bh=4hBvEGtlh5O19lqmxUP9acB4Jq06dsATivmTySgizkk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bkA/MM6fsUgQANkmRIk+l0sU852mPrG5tne+9v56viOnIPwPHJaDT24MpRn+Y9sVQUA2ManvL5rS/8ByHlV1AAkWrEIV8tpkg3UC6M3G+w0ttPW8CrcKwGPJZAQwM4Hlr9Rr8n98Z3hibJfYwUN4OH2W0Tfk0cXn3HLx9wY3aUM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jJctsw4x; 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="jJctsw4x" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 46725C2BCB3; Tue, 19 May 2026 09:02:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181352; bh=4hBvEGtlh5O19lqmxUP9acB4Jq06dsATivmTySgizkk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jJctsw4xJyMfsWIMgGZD13jSiLdFojln2K18WNNoHMrSxFdE3u0SHO2lWTeRgU6IW CjSNbKM8v8SUjjLWmfxGy1Jy+T9icOTPfZ69vawHF2Mf/OkOSAZlvkiIS2/spVMuU8 Siu/zgqmdxcvr2T3TV2VI5mw9KbDuOOKWnoHZuCUWCq+vyI9k7Dsbrd9wd0jlLveV2 Y2lwoqId4mj76qfDOlupayiEi9+34l6+mVedWlOzHSWFAeT8iY8uoDsI4+5HBKf6xV j9uF4l49ENAjbwHjNRnYTDDtayu1qDzNC1xbVwLPXeT067x6zz2GCPtsg6uyZkM/37 7txRKQvobe7eQ== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:51 +0200 Subject: [PATCH v5 09/19] 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: <20260519-drm-mode-config-init-v5-9-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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 , Laurent Pinchart X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4781; i=mripard@kernel.org; h=from:subject:message-id; bh=4hBvEGtlh5O19lqmxUP9acB4Jq06dsATivmTySgizkk=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8an8tamPK53/mC750WWprpNA0BqvW8zLvlVZ3hQoac ubsu7WkYyoLgzAng6yYIssTmbDTy9sXVznYr/wBM4eVCWQIAxenAEzk1X7Ghre/f01wKn/eomN+ tkXn3go+wcr8FOWT4sdvyz5gW6eoMof3n4++97Nc0/CSifnPNZjTGRv231qk3Ht3d68kA6uTeHO 02RWuOTMLL67gmcj1Ma2Nxf9Y1CyLe4FLZya/KtyxQY3h2ikA 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 Reviewed-by: Thomas Zimmermann Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 12 ++++++------ drivers/gpu/drm/i915/display/intel_plane.c | 2 +- include/drm/drm_atomic_state_helper.h | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/dr= m_atomic_state_helper.c index c8ccf8be5074..ee01700d4ca7 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 - Initialize the plane state * @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. + * values. This is useful for drivers that subclass the plane 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 c181a7d063ec..11467d19399d 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; plane_state->fence_id =3D -1; } =20 diff --git a/include/drm/drm_atomic_state_helper.h b/include/drm/drm_atomic= _state_helper.h index 61a3b38ad49f..691c1ccfa4e0 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.54.0 From nobody Mon May 25 03:33:27 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 8FF0147DD4F; Tue, 19 May 2026 09:02:35 +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=1779181355; cv=none; b=hBhnU7DX/lrFdvsuIRgJRa4wWU1wRJxB0lVTfVQ/HM+vxx/OjkeJ9jWHttSYmuadhAZIze4OurXCbgcW2tMYAbe420kvGR+RjRHXryRr8tx2LGtsOxWA1eUaM0f95CaL96JAuOq80mZFZF4X2evInP5Y7zXHLkL3iu1sAzZmRTk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181355; c=relaxed/simple; bh=ws84eVBkBuBXcteGS1ly6aYWO3fPLpn5a4wl+4ygSks=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Sf/FFduTgbaSNd44l6w+ducQGOlwDm+JpsE2kBZ+n7r4TZ+y3wR2D82/nDuQSWD2GMwZaFyqbNLaRkW0hv8RTwNrY8DBMhHU6aHr8HIRQwxykBU2+X77ZlOLDMouoZkJh9mTltlqJmf6PEQfEO24yLfpu1thWGvUbcQgRA3QMho= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Wph4QD5t; 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="Wph4QD5t" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EBF14C2BCB3; Tue, 19 May 2026 09:02:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181355; bh=ws84eVBkBuBXcteGS1ly6aYWO3fPLpn5a4wl+4ygSks=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Wph4QD5tL8BwoIZuqO50IEg28Npe9e5uE3AZUuSi28Y6UuAQGJwYOLoYg8e4ovMh7 FuElnC0MEk+RFMHrvJKDUnemBKt73f6z83eIWltmPGp6lrATcnTtgfc3IQNEwPVn3T QL83O37vYVLKVR07mu7v4VEnQyaEpexsCAZwt6r60l0hjeiVIqHY28jke79AMstKUe MCqyC2lWhxE+JdKxDHJGwjXjsDqr5p+dJK5LES2YYNrn1WlunVz4F74FRo4vSA0zrq ojaIfl6RVwZZKVJ6umt7IqseFPh3nGYl6PJ/NKnhBNjTY+1ho0fQETtMRvyQ+xRWx+ j4LC2UibD4yFg== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:52 +0200 Subject: [PATCH v5 10/19] 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: <20260519-drm-mode-config-init-v5-10-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6799; i=mripard@kernel.org; h=from:subject:message-id; bh=ws84eVBkBuBXcteGS1ly6aYWO3fPLpn5a4wl+4ygSks=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8an/d1odOY1Ut/qOT4lvE9tRi365rUqXt26/W/qowv lO5wmVjx1QWBmFOBlkxRZYnMmGnl7cvrnKwX/kDZg4rE8gQBi5OAZjIIzfGhpO5dfUL9ZbvudmY yXx92frCe38mBFYfWevvtLlohVXDaoa57/5596yOebn5UujV3hfOExlreJd9dL9cNW99x90n4Sc LllZHGAi0iaQuZf6m0/LWc79GS06AGTt/V9o6pwXy8qmT7G0B 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. reset() also isn't fallible, which makes it harder to handle initialization errors properly. This is only really relevant for some drivers though, 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. Continue the transition to the new pattern with planes. Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 25 +++++++++++++++++++++++++ drivers/gpu/drm/drm_mode_config.c | 31 +++++++++++++++++++++++++++= +++- include/drm/drm_atomic_state_helper.h | 2 ++ include/drm/drm_plane.h | 16 ++++++++++++++++ 4 files changed, 73 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 ee01700d4ca7..ab171bfe6e86 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -338,10 +338,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 + * + * Allocates and initializes 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_state_init(state, plane); + + 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 c33382a38191..fa609357858f 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -180,10 +180,36 @@ 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; +} + +static int drm_mode_config_plane_reset_with_create_state(struct drm_plane = *plane) +{ + if (plane->state) { + plane->funcs->atomic_destroy_state(plane, plane->state); + plane->state =3D NULL; + } + + return drm_mode_config_plane_create_state(plane); +} + /** * 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 +230,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_reset_with_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 691c1ccfa4e0..8d1ef268fdef 100644 --- a/include/drm/drm_atomic_state_helper.h +++ b/include/drm/drm_atomic_state_helper.h @@ -53,10 +53,12 @@ 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); +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 419c88c873a6..2c5a5a70a71b 100644 --- a/include/drm/drm_plane.h +++ b/include/drm/drm_plane.h @@ -386,10 +386,26 @@ 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: + * + * Allocate a pristine, initialized, state for the plane object + * and return it. This callback must have no side effects: in + * particular, the returned state must not be assigned to the + * object's state pointer and it must not affect the hardware + * state. + * + * 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.54.0 From nobody Mon May 25 03:33:27 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 C6CEC3F6C4E; Tue, 19 May 2026 09:02:38 +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=1779181358; cv=none; b=P4FH+d8DbzdTXbmcc6n2LdcjTkUvKRHEBkDRaVLvIShw/dzIRzIOph1x7b/U7ncSabpK24Jf7blE1NdlS9GktOMANCkC6mt4f0wVOi0m8X69QeD7IuzFQuchZHT9tv99M3bmxPDINIg/Ho8jROz7xC3CasaafueYn1GSaHUej8Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181358; c=relaxed/simple; bh=uLHaGHSP9UQjQQ5jBIAoXbBwJSEBPtjOM2YeKkN0O2Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=R7hs0SPggZnIJTcS/AjcFNWMbG3nznUwjM2Pq53g/WbUJdsPBQPcjkEBt7lToBnT22RzOXNqaXUrlt1GDcS8maaIuZS81pk/mA3PgNKCiLHNDfhtscnilJiQyCJzkrSkny0v4x3wzVae82SMy2Vz87PxfncHtos3o5jlbxvYxmM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=t2LHPG3Q; 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="t2LHPG3Q" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EBFC3C2BCFC; Tue, 19 May 2026 09:02:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181358; bh=uLHaGHSP9UQjQQ5jBIAoXbBwJSEBPtjOM2YeKkN0O2Q=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=t2LHPG3Q9Nik41PwZlPpjT08Et0jB0u/UVuQMkl+kJuoZuM01Kwf21AZpXJyVFTPm TYr4ftoxHwDd0jmfEvp7McuWCq8wj29F0wnzggZK2iKyI87qlIzSYlWUzn4p2WHCtn 89//F+DU9rzvJHVmw3S2n2NS7FrPQOWjSMPrnv2rRzdAYu7EGOMjlI4s2mkIXTHPVT ho9l7MCLsOgaXTl1XYdeWxyJtZo1XReRj44f2DudMHoDh4G/2Vy0TN3+f6/iUO1qfV JUm5njh2K+CUySC/WFHwnG1zh3aEYKDgI9vZnTEqgpEsUgGxi4qAj66/fAyev539/c pvClFr+bfO7yw== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:53 +0200 Subject: [PATCH v5 11/19] 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: <20260519-drm-mode-config-init-v5-11-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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 , Laurent Pinchart X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4452; i=mripard@kernel.org; h=from:subject:message-id; bh=uLHaGHSP9UQjQQ5jBIAoXbBwJSEBPtjOM2YeKkN0O2Q=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8av963GLrUkMDWNklvC1+ni5rqJ9/b7KjT3nIiqOZL QsuX5jaMZWFQZiTQVZMkeWJTNjp5e2LqxzsV/6AmcPKBDKEgYtTACZSGM9YnzgtNbI2OO3NyeKd Thuq41+/rd2n626y6O805hwNPuVw7+Ai6a1W924/641Yl77q6s+FjA1TI1UqXqye/03pVeFq+7q Zb65dLHqmrv4soT4i2cLjv/9EZjPng7Jnmv4mu1opVnB79QEA 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 Reviewed-by: Thomas Zimmermann Reviewed-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 ab171bfe6e86..b277f92f4532 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 - Initialize 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 03de219f7a64..7486f2dc60ef 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 8d1ef268fdef..0bb72453464a 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.54.0 From nobody Mon May 25 03:33:27 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 477963F86F3; Tue, 19 May 2026 09:02:42 +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=1779181362; cv=none; b=bJtun0UNUeUCabY4aV/C/u8VSe6iA/ofV1mWG1153cbNCx9sZHBKaCQ33lhnX19x1+XW/hTe20JWVgEGjCGcgbIjgtUzL0IGIOlNmpbq/REFBAGhViwhY6dxfkfafBhDo/drvnGqYC5MJgE113F6x2I0iq8wzg32zsE+ji9msGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181362; c=relaxed/simple; bh=qPK0h/dFSo293ccLyG7pv0Iwc28UYnE7zsHTmGqDLXg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ih+owqkwjoI7lwUFtiDh7OKAOD54ilyQS/8N37RrifYsK6pkOpZ4/kstOAGVfmNIX7MRVdNsjUz99AmOXpKi0wmyUGPvEinmy6kYyfkH8HenpL2heN3JKrpGlYLvnhbYMBj7R8T8d3ooFjv9Z8cCB3NDmbILfg2gVMGV5+Olaek= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=vH1sH5Hg; 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="vH1sH5Hg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4E89BC2BCFD; Tue, 19 May 2026 09:02:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181361; bh=qPK0h/dFSo293ccLyG7pv0Iwc28UYnE7zsHTmGqDLXg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=vH1sH5HgB7u1svSjqUTpoPyMiHOJ5ixzT7z0AHsaD/KNjIyxTxy7r+iHZDt2oQtYA /GieAPzsAbxHFbdcxxyDa1zCIhi9UWepoN0giQDoyxN28dmnAl4t6imMPVfDXJS0ra phC3+uJQtu1XceESokesL0DRqpicbQW9/kATfs9v38HT5kpz4P/wYlD7iPjiakOWAf u7ThePNJSa5lt+qqN0X6C/2kkwF8VIc4AWDumkU7cLU38M/0XhTvcU+Ud8RQnCpxCi 23rKeYgS7gkfG7/fSYV2rUFLAp4dKA/K/UVqq073/yDnWRr/4MUd8dLzR9Q8F7mRy2 tFbNIM4Xo1z3w== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:54 +0200 Subject: [PATCH v5 12/19] 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: <20260519-drm-mode-config-init-v5-12-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6826; i=mripard@kernel.org; h=from:subject:message-id; bh=qPK0h/dFSo293ccLyG7pv0Iwc28UYnE7zsHTmGqDLXg=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8av+sGE5kVJW49s3LyohZ23g/8BhHTOgFxkbW3CchL /5kf9TrmMrCIMzJICumyPJEJuz08vbFVQ72K3/AzGFlAhnCwMUpABMx5GFs2HFgUpzZjRLbT0xJ 2g8W/VubGrC0Rj/XKWzal19yJe7KXp0RjzcwxyVP2+WiY/NY9soXxoYHWbcj/ZKydOq5T51wf2G 9b2VtWrBN+DnvkOKiNT98q/uFAu4lGbde0lGa1J6hcHxjEgA= 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. reset() also isn't fallible, which makes it harder to handle initialization errors properly. This is only really relevant for some drivers though, 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. Continue the transition to the new pattern with CRTCs. Reviewed-by: Dmitry Baryshkov Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 25 +++++++++++++++++++++++ drivers/gpu/drm/drm_mode_config.c | 34 +++++++++++++++++++++++++++= +++- include/drm/drm_atomic_state_helper.h | 2 ++ include/drm/drm_crtc.h | 16 +++++++++++++++ 4 files changed, 76 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 b277f92f4532..8762171c9432 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -122,10 +122,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 + * + * Allocates and initializes 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_state_init(state, crtc); + + 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 fa609357858f..2e2cd18a14b4 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -206,10 +206,39 @@ static int drm_mode_config_plane_reset_with_create_st= ate(struct drm_plane *plane } =20 return drm_mode_config_plane_create_state(plane); } =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); + + if (drm_dev_has_vblank(crtc->dev)) + drm_crtc_vblank_reset(crtc); + + crtc->state =3D crtc_state; + + return 0; +} + +static int drm_mode_config_crtc_reset_with_create_state(struct drm_crtc *c= rtc) +{ + if (crtc->state) { + crtc->funcs->atomic_destroy_state(crtc, crtc->state); + crtc->state =3D NULL; + } + + return drm_mode_config_crtc_create_state(crtc); +} + /** * drm_mode_config_reset - call ->reset callbacks * @dev: drm device * * This functions calls all the crtc's, encoder's and connector's ->reset @@ -237,13 +266,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_reset_with_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_reset_with_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 0bb72453464a..213f7e298008 100644 --- a/include/drm/drm_atomic_state_helper.h +++ b/include/drm/drm_atomic_state_helper.h @@ -43,10 +43,12 @@ 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); +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 c6dbe8b7db9e..152349f973e3 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -636,10 +636,26 @@ 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: + * + * Allocate a pristine, initialized, state for the CRTC object + * and return it. This callback must have no side effects: in + * particular, the returned state must not be assigned to the + * object's state pointer and it must not affect the hardware + * state. + * + * 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.54.0 From nobody Mon May 25 03:33:27 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 22F90480DC6; Tue, 19 May 2026 09:02: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=1779181365; cv=none; b=PwO1lbTGXm5efQ4adP4OeaVw6DlH8x6rfy0M7twbjY69IF21CRsrxZjXvmGQJWNl4qALsulvzCuNvFcK15JOMr834n0ueFZIhiy4CW8TNLUshvFq0J5hR7fNbxnn1FZElEL4IpNe4T+F9eyuHtJ4zCClDtmq2m1p23T9Rg4bYRY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181365; c=relaxed/simple; bh=qaSP70ZhrUcMPjOf7+v4uq6SslBv0gdUuCOqJYZwmRw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cnSatwxKlMLH9FSzw9f4MJVh8fMl762lR6m/cUwbP49Fr6B+JHK6DGDlmQRF9dQTfvVR78l9toWk7Vtd7jnmC1rZaKHS0I0NIiqjKO0/eiygzdIgtTY+foPS03SU5MfXMC8utfZICqlXTjezwDeQ8n2aUFKOB/PduNOf7mtiyak= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DhsPAFh1; 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="DhsPAFh1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 299EDC2BCF6; Tue, 19 May 2026 09:02:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181364; bh=qaSP70ZhrUcMPjOf7+v4uq6SslBv0gdUuCOqJYZwmRw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=DhsPAFh1HLHamNZIy+/qK6AOk3u2H5FFVxjmUrdmAw62Qf4lwLqdsDa1i+4objsVr VmRKOzadgdAzYFU/Ffe7OOVhLRSUliyaeWRuti3RLGoQwCCNYYIZDghyGNRnYnHRfz I7StC58LnoC99Zxkld/j+mbzWE4JUVB/PSGSwjCItpHTkujIHPO9N4vd3hh4npmVkX r4/kmpJ7VsQHlMkrzAiK5id5Z/2OfFjnbd/BOqRrvv88l75aW6kYwq9c7v/77hlukk vk9qlIKKVlmU5/6wZEcRbFzAyMeUM/bekeSzLDRhOKDuh84RFAdd6SjSlpZfJlqDhk FaWDMisYla4RQ== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:55 +0200 Subject: [PATCH v5 13/19] 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: <20260519-drm-mode-config-init-v5-13-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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 , Laurent Pinchart X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4078; i=mripard@kernel.org; h=from:subject:message-id; bh=qaSP70ZhrUcMPjOf7+v4uq6SslBv0gdUuCOqJYZwmRw=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8av8mCG4N23pu3v+oI4suc61e/9Fi+53cgEC51qXvp H5s9a2a3DGVhUGYk0FWTJHliUzY6eXti6sc7Ff+gJnDygQyhIGLUwAmcu0QY8NFrpS+pdP2dG/5 tbLwMd/Ch9+fKuQfrFlUJ1Yua1m8cuK1EvYpBr7PFCv4G7L3vbo3pY+x4cjkPpmTPbdNc+QnVm7 bnMg3t0xO1lpyhaPdvGWlL28dze+w3rRqrq3ZUaEQVYdvttttAA== 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 Reviewed-by: Dmitry Baryshkov Reviewed-by: Thomas Zimmermann Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 12 ++++++------ include/drm/drm_atomic_state_helper.h | 2 +- 2 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 8762171c9432..e2e5a1b8a820 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -474,24 +474,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 - Initialize the connector sta= te * @conn_state: atomic connector state, must not be NULL - * @connector: connectotr object, must not be NULL + * @connector: connector 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 @@ -506,11 +506,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 213f7e298008..9634a70e0401 100644 --- a/include/drm/drm_atomic_state_helper.h +++ b/include/drm/drm_atomic_state_helper.h @@ -68,11 +68,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.54.0 From nobody Mon May 25 03:33:27 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 D8AE0480DFE; Tue, 19 May 2026 09:02: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=1779181367; cv=none; b=l+7RbSxlqjQGb3pheT+uss7BOyMkRNFfTPbC8en0b3bYBySvQOjnAYffTfH9cNAq8L+YEkvqowLJbsD/njGsoQCMzQny7XvOhlskPp934k31+HXLRmITP3z69bbfaEsXzHirDGDqpb1DXAKeOX9GS2YQg4v8MjS9kykVH6F+HxE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181367; c=relaxed/simple; bh=+roR9EKY5P3KByKKPZTrAIusl8O7nRXXLQS93qqd3OQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nPHMaSV9vgWncAGYJ735jQ/+PKrlTj3CdgoFUcb+ZiPTBrRJpTZMUfH94q9W1vOYLzml9xedg/rAQ43EhGYnplSOrEsh/ZZxoZjD5Y+O2Ac98W/pSiTz/rTvODNDeoX8pZa14jOLjzux01cFNDG9jK+WCjn19716IP0Zpn/d3Oo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hjoUP0iG; 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="hjoUP0iG" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 06BC5C2BCC6; Tue, 19 May 2026 09:02:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181367; bh=+roR9EKY5P3KByKKPZTrAIusl8O7nRXXLQS93qqd3OQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=hjoUP0iGozWVSHBYS3GJDTGqcTNY1RGvhlMC4LikD5Yf29PwTqjKHdaW3LbE6WDvT QdBtXDdfCabxVWtN0MJbGHLiDcY51J1Ip9voDK8HLLc3XDmhmV9VO9qq1E6+y9Opu5 VMqa1PyQ6D8lmR+m2gbWvgZCEUafHekCV0OciX6twENJmlSpzmrmXTWyW3f4Ld37N3 SHgJnFCmCkuwDklyohXYKlwg94bbZakgFCSVMi2iPEHvrcot9MDt4twLfFbRZPbkgn p7Qw+Tmmq++iYYDubZbXBbEf++w7IZlE/tlbHjptqfcbNHKgfNqlzwCDdheCYn3y1i JTwuma1Vuc2/Q== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:56 +0200 Subject: [PATCH v5 14/19] 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: <20260519-drm-mode-config-init-v5-14-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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 , Laurent Pinchart X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=7569; i=mripard@kernel.org; h=from:subject:message-id; bh=+roR9EKY5P3KByKKPZTrAIusl8O7nRXXLQS93qqd3OQ=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8av/XVUTm6cQXvNZeu0q4bvpxjb1eb4wu9RS/EHdev +LA4Qd+HVNZGIQ5GWTFFFmeyISdXt6+uMrBfuUPmDmsTCBDGLg4BWAi1lyMdeb2qzNL/3nqNJ1K 2L/ll1fSzN0WKy9GJm2c9eF39FUPlaR4w+y5F988mtWtJ2k7wzQ7lrGGQ/b6+ulRfkLtPzVOt23 b0BHW8FrgmHaBXeAEkd/tYQ2G8bph7n77Flgpek9OfMNXyAgA 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 Reviewed-by: Dmitry Baryshkov Reviewed-by: Thomas Zimmermann Reviewed-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 | 15 ++++++++------- 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(+), 14 deletions(-) diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/d= rm/display/drm_bridge_connector.c index 649969fca141..50408af746d8 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 4867edbf2622..a331ebdd65af 100644 --- a/drivers/gpu/drm/display/drm_hdmi_state_helper.c +++ b/drivers/gpu/drm/display/drm_hdmi_state_helper.c @@ -304,29 +304,30 @@ * --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() - Initialize all HDMI @= drm_connector_state resources * @connector: DRM connector - * @new_conn_state: connector state to reset + * @new_conn_state: connector state to initialize * * 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_state_init(), + * drm_atomic_helper_connector_reset(), 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 enum hdmi_colorspace output_color_format_to_hdmi_colorspace(const struct drm_connector *connect= or, enum drm_output_color_format fmt) { diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c b/drivers/gpu/drm/sun4i= /sun4i_hdmi_enc.c index 07e2afcb4f95..3cad8f9bc529 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 c9819c3fc635..e89e1af7a811 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 a161d3b00a25..74dce4be0c00 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 0adc30c55ec9..13375bd0f4ae 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_commit *state); =20 int drm_atomic_helper_connector_hdmi_update_audio_infoframe(struct drm_con= nector *connector, --=20 2.54.0 From nobody Mon May 25 03:33:27 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 4A02B3E3157; Tue, 19 May 2026 09:02: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=1779181370; cv=none; b=Mwd32ZwPZ12WbQwYTXLdKdmKccGuTffrTn7BRqpjnq6NJL1ZLWA53VkSW82UakyWmqBzHiOcZiDNT9y9oF45sWzQdek4/RmobG9wjcmZ5DsSNofZjfIVm2Su8HKLaKoyo02cFXrLsTRM0T7bT8Ytp/FaeERoQdEraAEM9/SxOeU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181370; c=relaxed/simple; bh=uXScKmQXTA4/PBXBORAst/A25hfbJf23qbwIMutfmzc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rX6KOUlkUzt6yoF7e3G2lRQotOINwk4dnBjQmQgm6jbjeb6UFa2j5T/uXFnLKbfOnM65TkvHG2M2jMblaFV7fsT+VNuL+LZZC7vZGHz9XmCAudd+sAulAThxLyoDl/NSsMomCva7NlVYM2puLJZF4kIK9POyu+Pr0laoKefDNKE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=thJnlpHo; 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="thJnlpHo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A721FC2BCF5; Tue, 19 May 2026 09:02:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181370; bh=uXScKmQXTA4/PBXBORAst/A25hfbJf23qbwIMutfmzc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=thJnlpHoGugq6AfMObTL5BaPWQNC6iThMiw9phsUDQQ3id9vjuqGtAmWa4CuIwfxV SflGDXh00uUPXkbmK9wJMmfxjQO0u7bYCP/0pZCUdhZ5RjSh7W1lvcnSiQbuPPFZ0L 1538whxKZqQle4ApdAF9I5nFrlCt3HSxx1Yq16kz0gkvZM16DjvsBPzQgn4GEG62BQ wjjw51O+a9smIAZx8fkf3bqO+TEoP3CDgtpliyY9QztR1+31MpQii+3cdlcYFHk4UY Dx6C0hJwP/xR4hW+Nzl3rgk5fp5qP7UoM7ayJj6q1dvsQQ4ur8foMlwMveYPggO/so lL0LQ6SPAXpdQ== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:57 +0200 Subject: [PATCH v5 15/19] 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: <20260519-drm-mode-config-init-v5-15-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=8295; i=mripard@kernel.org; h=from:subject:message-id; bh=uXScKmQXTA4/PBXBORAst/A25hfbJf23qbwIMutfmzc=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk8av81S/frb2/uVlFRUul78M9CbccDfcaK2W5/C/X2X I5bsdamYyoLgzAng6yYIssTmbDTy9sXVznYr/wBM4eVCWQIAxenAEwkxZCx4XGt1pvd3GavJzdV hU/LbmRZd0jq+QTeV3u3mPitW6ky64lz0Ju3wWEBTl5HEpx9viauY2x4u2S5ppyqshpP9Y6CZxV aE3Kr9Dl0BBj/x102enQmSZuXhZe/Q8J0zi+F7pooBZb30wA= 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. reset() also isn't fallible, which makes it harder to handle initialization errors properly. This is only really relevant for some drivers though, 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. Continue the transition to the new pattern with connectors. Reviewed-by: Dmitry Baryshkov Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic_state_helper.c | 26 ++++++++++++++++++++++++++ drivers/gpu/drm/drm_connector.c | 10 +++++++++- drivers/gpu/drm/drm_mode_config.c | 31 +++++++++++++++++++++++++++= +++- include/drm/drm_atomic_state_helper.h | 2 ++ include/drm/drm_connector.h | 16 ++++++++++++++++ 5 files changed, 83 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/dr= m_atomic_state_helper.c index e2e5a1b8a820..07686e94aae0 100644 --- a/drivers/gpu/drm/drm_atomic_state_helper.c +++ b/drivers/gpu/drm/drm_atomic_state_helper.c @@ -532,10 +532,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 + * + * Allocates and initializes 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_state_init(state, connector); + + 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_connector.c b/drivers/gpu/drm/drm_connecto= r.c index 3fa4d2082cd7..a0b132c658a1 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -616,11 +616,19 @@ int drmm_connector_hdmi_init(struct drm_device *dev, =20 /* * drm_connector_attach_max_bpc_property() requires the * connector to have a state. */ - if (connector->funcs->reset) + if (connector->funcs->atomic_create_state) { + struct drm_connector_state *state; + + state =3D connector->funcs->atomic_create_state(connector); + if (IS_ERR(state)) + return PTR_ERR(state); + + connector->state =3D state; + } else if (connector->funcs->reset) connector->funcs->reset(connector); =20 drm_connector_attach_max_bpc_property(connector, 8, max_bpc); connector->max_bpc =3D max_bpc; =20 diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_c= onfig.c index 2e2cd18a14b4..9d240817f8b6 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -235,10 +235,36 @@ static int drm_mode_config_crtc_reset_with_create_sta= te(struct drm_crtc *crtc) } =20 return drm_mode_config_crtc_create_state(crtc); } =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; +} + +static int drm_mode_config_connector_reset_with_create_state(struct drm_co= nnector *connector) +{ + if (connector->state) { + connector->funcs->atomic_destroy_state(connector, connector->state); + connector->state =3D NULL; + } + + return drm_mode_config_connector_create_state(connector); +} + /** * drm_mode_config_reset - call ->reset callbacks * @dev: drm device * * This functions calls all the crtc's, encoder's and connector's ->reset @@ -278,13 +304,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_reset_with_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 9634a70e0401..f4b6d8833bc2 100644 --- a/include/drm/drm_atomic_state_helper.h +++ b/include/drm/drm_atomic_state_helper.h @@ -73,10 +73,12 @@ void drm_atomic_helper_plane_destroy_state(struct drm_p= lane *plane, 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); +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_commit *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 5ad62c207d00..529755c2e862 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1569,10 +1569,26 @@ 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: + * + * Allocate a pristine, initialized, state for the connector + * object and return it. This callback must have no side + * effects: in particular, the returned state must not be + * assigned to the object's state pointer and it must not affect + * the hardware state. + * + * 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.54.0 From nobody Mon May 25 03:33:27 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 3A3BC3F88A6; Tue, 19 May 2026 09:02:52 +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=1779181373; cv=none; b=UhzSydOshGKvIHngDn20SSlpBYVk8rP3KXTzEtUxEevWriX/OSW6e4khrbkbgDR1Bxw1FiDlpuNBxz3nYBcXzjC9IqfVW7la13D36fwOcCPZeJugoA2FiynciTVnGcmVj0hiuBnM358cqJQJpqAoJHUOToNY3oQGt/SHCIsg2OI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181373; c=relaxed/simple; bh=jxSIny2eDy5UApT+259+z4ah0co5cF9vQfWozPSJv4g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gMjHQSE8ftajnwaaRw2Kb3BoR8vlbjyC5uiya1EVM9g4s9Oj0KwzsGFhIbr8nDXSp7tABJ8dSJTi88spp6EPUR6pxSHQkMYL4DcB3YAD+eQ6fLUXIPzzPtlcTRXAdCCLItYXnwm+Rr01gkP1qwnmnJvhytG72wehvLUFWcF8U3o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IOig0wHt; 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="IOig0wHt" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5073BC2BCB3; Tue, 19 May 2026 09:02:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181372; bh=jxSIny2eDy5UApT+259+z4ah0co5cF9vQfWozPSJv4g=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=IOig0wHtQgljskr8D2A2ABitshcAzchAEQv+PNjkm6RmNhprEohxRSpD9e4jsCFqD zNRqHuTRhOwlHcowMw1UXHKXRCtfOJVMrur0pwJc++e+SVu6UG5sII0vIV87FKgQAj ijXmuCjTwKI25uSHYHOEGaQPrw/LkXqcvmfnKX/R0uRYMMM5jgtTkscw5ywLXL1zCk yTjDe/5A+rgqZl/5yiVaRUnYY+CjGIIsyyjQWFLtR/r6PByAlCoICMzENK4Aewsbug vAlfTm4Jin18KPSB1vdwXRWvXmmNyypa6avwIvjVLznef1GJQI4VsAEPow9Rfh5kYL 8pyO0HgQmhz4Q== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:58 +0200 Subject: [PATCH v5 16/19] drm/mode-config: Create drm_mode_config_create_initial_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: <20260519-drm-mode-config-init-v5-16-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6204; i=mripard@kernel.org; h=from:subject:message-id; bh=jxSIny2eDy5UApT+259+z4ah0co5cF9vQfWozPSJv4g=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk86gwSZy7+v6d6dt8lG+1JS95orwswdrizxOedwMUZu 9aIxZtd7JjKwiDMySArpsjyRCbs9PL2xVUO9it/wMxhZQIZwsDFKQATWf2KsWFR4dn1+1kNIpbX 6DZynlU6JjZ73Xytc4+Fz08PE9d55bVSzUeJO2iHhMTmviu3OJfOncnYcGvaom15KiyxZ0QdGKr 7GLQzBN+xBwoHM8wVfxW7zKeVaTubHQMLp+mxduNzCyZfXpAPAA== 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, 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. Reviewed-by: Dmitry Baryshkov Reviewed-by: Laurent Pinchart Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_atomic.c | 13 +++++- drivers/gpu/drm/drm_mode_config.c | 89 +++++++++++++++++++++++++++++++++++= ++++ include/drm/drm_mode_config.h | 1 + 3 files changed, 101 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index d98586d89bbe..ea021250925c 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -59,12 +59,21 @@ * 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 call + * drm_mode_config_create_initial_state() to allocate an initial, + * pristine, state for each object and will store it in the objects + * state pointer. 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_commit is allocated using * drm_atomic_commit_alloc(). diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_c= onfig.c index 9d240817f8b6..f432f485a914 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 @@ -314,10 +315,98 @@ 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_initial_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_initial_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) { + drm_connector_list_iter_end(&conn_iter); + return ret; + } + } + drm_connector_list_iter_end(&conn_iter); + + return 0; +} +EXPORT_SYMBOL(drm_mode_config_create_initial_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 e584652ddf67..d8f5b7e9673e 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_initial_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.54.0 From nobody Mon May 25 03:33:27 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 D44103F6C5F; Tue, 19 May 2026 09:02:55 +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=1779181375; cv=none; b=L42APVkk4umDkwNSQ5LjKLLO3Gmd/IQof9VSsSYzDTp5J3hmlh49eFDDRzjZ96sSQ+6l9JvlAHq+YQXIwhh1grgdNxEFeDSPr6hGUeno96RMydfL2pqIeMLZHJG6rmjol+1NXI6GofBCaf+2j/un7d/LUbB/+gcXYUdRQr5St6k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181375; c=relaxed/simple; bh=FGCqhfXKq37ObBfvHzfst4BF+DfJNKqHOHC/ClHMucs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uGxxAqPyynqIS25mrjjhkZMycHB0k0+z6Deiu86dWSnYz+lSKOLSbAyIzYSPQweCTBWi4pD5nFRZVKOr//nuDV5EwEOP689cWdHMan1pkpiTjLcsGx56z1GEeSqLJj+b8jGiu01wMOTVM5SR/bPyh/XCckCInyTkryu5GdXdTyA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Pt4hyhFC; 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="Pt4hyhFC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F006DC2BCB3; Tue, 19 May 2026 09:02:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181375; bh=FGCqhfXKq37ObBfvHzfst4BF+DfJNKqHOHC/ClHMucs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Pt4hyhFCmuMPM8t+lDlWEqmLWpnFkLFbCTxBc+OHIRaS4pzcyqx4DP5JYAvnLcwtN 8ua7J7382xLSuk2Ellzw7rdjmPoX8Y0GLbKaROzM30DoDsFugVQlrTuvGv1+ec0XyE d5XjQt7I7tOqiAFH/krk4ADz8A3l0kjIK3CWSdrNw6PEHJCtBp3qWmA1CkSyECxFKM tXWrzJNdaKKmJCiVfsTKSWp+vEgbe6WQkrhaeDQY4Lpx5XEEboVeWPPX+QB9ZUxfZN CwlaGyvcoZQi4vPORqpbRz2C2n7+eqqDE1C7v12bTZBNEvWulvzhhztg1oR2lpPhSQ Dfpv9Xydm+gQA== From: Maxime Ripard Date: Tue, 19 May 2026 11:01:59 +0200 Subject: [PATCH v5 17/19] drm/drv: Switch skeleton to drm_mode_config_create_initial_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: <20260519-drm-mode-config-init-v5-17-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=997; i=mripard@kernel.org; h=from:subject:message-id; bh=FGCqhfXKq37ObBfvHzfst4BF+DfJNKqHOHC/ClHMucs=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk86gwfgo5K5ugkPGTbfU8l2OX37KQfxdWFjzS2q5kzr Q1fGyDVMZWFQZiTQVZMkeWJTNjp5e2LqxzsV/6AmcPKBDKEgYtTACZyYQdjrfzXy8VfmFv9ryyT 8Dv+KD7G3KvFUrPEXN0584LRl9lmaR9eMul9NeH7/MjrulGKU9wlxoaFz/M/VP05Jxx9ZfIHTs3 taz9P8ul3lpA+w6RQmX9W5a2cS0GqrJv85at2J8yXsB/l5AQA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The driver skeleton currently recommends calling drm_mode_config_reset() at probe time to create the initial state. Now that drm_mode_config_create_initial_state() exists to handle initial state allocation without hardware side effects, update the skeleton to recommend it instead. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/drm_drv.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 985c283cf59f..f537556b06a8 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -340,11 +340,13 @@ 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_mode_config_create_initial_state(drm); + * if (ret) + * return ret; * * ret =3D drm_dev_register(drm); * if (ret) * return ret; * --=20 2.54.0 From nobody Mon May 25 03:33:27 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 62EB748A2A9; Tue, 19 May 2026 09:02: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=1779181378; cv=none; b=rHPqqXyO8ZuPTAzccxTBVNTf00owDyM0FjKHxwb+pBktNKJSyZPNplra8y8icP28euNSOCAed6YO+203VEhHLs41YbY5b5p+k9uPY7RpFpCfuEx1MGnwD91DdYZzvMjNeQzEqZ9ZtnWO2r3HeShDoN8CvFj+kaFegiZq8NdCDUI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181378; c=relaxed/simple; bh=ol7ZxJRFzPU3goqwZsKdhnIW4o0nEjdILT7N6tLltxI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YNcReK8jHel4BzKj+dVmy/o9GM91Jhu6KoljGWC4zh1OAnUH5Bg1NnJ8PhWJlD9RWtZYl66FbYG9ImCo6fyq/sEloq5dUQSNqmyUQ7x4MykJ8t9OqTxtkYzoQHtW+jQV112jDNLsoSzhsm0YP4KWAbqX9mXs0AP9cjpM3ApsCFY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GFJC76s7; 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="GFJC76s7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B8771C2BCB3; Tue, 19 May 2026 09:02:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181378; bh=ol7ZxJRFzPU3goqwZsKdhnIW4o0nEjdILT7N6tLltxI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=GFJC76s7ovJZhz5kivMq2rmmUo3Fs6r2iNh+bmugtZGTCaA+QN8L2ldHayHUxT02C fAZyPljJIcsv42/myPffstArThpuxN4LzsCLUkC6K/lFivUxZDAopxUMHG7RF2MhFB wFMn0HzkMmKvxZCNZzrELSxZKkeOBiMGyx6QJw3aG1QF3t8JDgHZBcxqx906xBi3F8 cIRn8Us28lOkHaepx+FKQmOH7HUmMsmrc0VsCvNm9Xwtoiq1HniKt5GOknhpBdEvdH yyhmwnSJIQS+vc9RnzOzyP+buse+ialr87CrfIC3t/j+c7E3VsgzhhLfi/zVk4CwOr oaiY+qO5z0Ssw== From: Maxime Ripard Date: Tue, 19 May 2026 11:02:00 +0200 Subject: [PATCH v5 18/19] 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: <20260519-drm-mode-config-init-v5-18-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3091; i=mripard@kernel.org; h=from:subject:message-id; bh=ol7ZxJRFzPU3goqwZsKdhnIW4o0nEjdILT7N6tLltxI=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk86ozzNTXUl+zNjOTpvta3k3uL6UKpU67su+qq+xQ2L kzwUrzaMZWFQZiTQVZMkeWJTNjp5e2LqxzsV/6AmcPKBDKEgYtTACZy+CljndHUgp1fNFhsMwO8 bl7/9jrFYJXRx3c7j0Xucuo6zq4207JU+F9nxd0f+T1OFXL11pUHGesrWep2PL2c53ro/PnLVja m6S6ycZsWReWyFDAdlS87xV2/e8aCZ95+UcmVVmcn5Njp+QEA 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 acab9307bdf3..400329aa2200 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_state_init(&tstate->base, crtc); + + 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 1a8b44fb45f8..6d82976c2db1 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.54.0 From nobody Mon May 25 03:33:27 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 15C5A48AE03; Tue, 19 May 2026 09:03: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=1779181381; cv=none; b=fbawtWGAyRJH6acVihxBYrrQmTM3q8qvezwlot1+kvyBFx8qIVznXjs5AQ62WaCFo6y4KwjuP83mKCvg/VFA3EZ31QegL0nHW+fFWfC/V5ee68i7AjgvwIdaLmuLX/IiktQt0TE2mP79L/JgpepgddLPB0X/eI3jUAywzkgLhT4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779181381; c=relaxed/simple; bh=n4eohByrrLdrAD3Xh6iy0bQauhz8JMCGndNHIg0F7dc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pONG7gjqHi9Eu/Q+AhrH0CYqhI9Dz3ph9KkmxpuA3jIkCxyBvAz+alVzxsLdkaSk7fBs+1ZaGO8E9YByBJwgH1LwI/QQ6sPk23bwvYO1gqtEJePrsOUmyYLlRGGaP62pKdL8wctwlbDPrbrIkou90rETg2TsKGaRO7HwAJRh09A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=o96zwUNc; 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="o96zwUNc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7034BC2BCC6; Tue, 19 May 2026 09:03:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1779181381; bh=n4eohByrrLdrAD3Xh6iy0bQauhz8JMCGndNHIg0F7dc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=o96zwUNcWww+LTO0iktiLeRO6orq12L6LNfcJmwAqInqvObBa0hRNAT8CMGVTZ9aa qNraVN/IKnFn76/d+OdovSqcW56cUFcmWtFQ9o20nzPUSaLkzKE/DktOK6P9d+SFdt 8otxAXCko+u1wRCznC8rkAcLRIEvWeN0RmPq9fLt/bnuugqSkGzL2FIeGEQiVlWhU3 b+WSw7vqG9N1B8r8M6q2aILGxg/ym90u6INmK53JUrLWAp8ViIrd8AKafrnO9mCf7H lH64ENDDthze7qi6tmrjXLBpsrRjeqy16wd7EnKVzKMAtx2PSgXJYk0c30YPk3C3dF 03bHbgHvA0pVg== From: Maxime Ripard Date: Tue, 19 May 2026 11:02:01 +0200 Subject: [PATCH v5 19/19] 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: <20260519-drm-mode-config-init-v5-19-388b03321e38@kernel.org> References: <20260519-drm-mode-config-init-v5-0-388b03321e38@kernel.org> In-Reply-To: <20260519-drm-mode-config-init-v5-0-388b03321e38@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.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2233; i=mripard@kernel.org; h=from:subject:message-id; bh=n4eohByrrLdrAD3Xh6iy0bQauhz8JMCGndNHIg0F7dc=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDFk86owzv83Pmbz77pyvkxW4/6gY897abGniOf1PvanH0 XO9qh12HVNZGIQ5GWTFFFmeyISdXt6+uMrBfuUPmDmsTCBDGLg4BWAiiz4x1ilXdGgZb61hWuNY +SHuXTW3dHHFdZmVJSJG21N/Sl+aFKD2uasyv0ku7jN79E8JpbdujLXiCbNVcw4e/tyy6Bp/jdS ETFOF/S+3bvg6WzXn+bUKmfgC6ZKKJvf1mhyuOjzT7pjxLQEA 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 what atomic_create_state would expect. Convert to it. Reviewed-by: Laurent Pinchart Reviewed-by: Dmitry Baryshkov 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 50408af746d8..cafa498c3848 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.54.0