* [PATCH v3 02/13] drm/amdgpu: vkms: Switch to drm_atomic_helper_crtc_create_state
2026-09-04 9:07 [PATCH v3 00/13] drm/crtc: Convert all drivers to atomic_create_state and remove reset Maxime Ripard
@ 2026-09-04 9:07 ` Maxime Ripard
2026-09-04 9:07 ` [PATCH v3 07/13] drm/amdgpu: dm: Convert to atomic_create_state Maxime Ripard
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Maxime Ripard @ 2026-09-04 9:07 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Christian König, Alex Deucher,
amd-gfx
The amdgpu vkms crtc implementation uses the deprecated
drm_atomic_helper_crtc_reset() as its reset hook.
Switch to drm_atomic_helper_crtc_create_state() instead.
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: "Christian König" <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: amd-gfx@lists.freedesktop.org
---
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
index c835504fdf2b..592c5c253938 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c
@@ -45,11 +45,11 @@ static const u32 amdgpu_vkms_formats[] = {
static const struct drm_crtc_funcs amdgpu_vkms_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.destroy = drm_crtc_cleanup,
.page_flip = drm_atomic_helper_page_flip,
- .reset = drm_atomic_helper_crtc_reset,
+ .atomic_create_state = drm_atomic_helper_crtc_create_state,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
DRM_CRTC_VBLANK_TIMER_FUNCS,
};
--
2.55.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v3 07/13] drm/amdgpu: dm: Convert to atomic_create_state
2026-09-04 9:07 [PATCH v3 00/13] drm/crtc: Convert all drivers to atomic_create_state and remove reset Maxime Ripard
2026-09-04 9:07 ` [PATCH v3 02/13] drm/amdgpu: vkms: Switch to drm_atomic_helper_crtc_create_state Maxime Ripard
@ 2026-09-04 9:07 ` Maxime Ripard
2026-09-10 16:41 ` Leo Li
2026-09-10 15:20 ` [PATCH v3 00/13] drm/crtc: Convert all drivers to atomic_create_state and remove reset Javier Martinez Canillas
2026-09-11 13:14 ` Maxime Ripard
3 siblings, 1 reply; 6+ messages in thread
From: Maxime Ripard @ 2026-09-04 9:07 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Maxime Ripard, Christian König, Alex Deucher,
Harry Wentland, Leo Li, Rodrigo Siqueira, amd-gfx
The amdgpu display manager crtc implementation provides a custom reset
hook. However, this hook only allocates the state, initializes it with
__drm_atomic_helper_crtc_reset(), and frees the previous state. It
does not perform any hardware reset.
Since this is exactly what the atomic_create_state hook is meant to
do, minus the old state cleanup which the caller handles, convert the
implementation to use atomic_create_state with
__drm_atomic_helper_crtc_state_init() instead.
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: "Christian König" <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Harry Wentland <harry.wentland@amd.com>
Cc: Leo Li <sunpeng.li@amd.com>
Cc: Rodrigo Siqueira <siqueira@igalia.com>
Cc: amd-gfx@lists.freedesktop.org
---
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 31 +++++++++++++++-------
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.h | 2 +-
.../display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c | 23 ++++++++--------
3 files changed, 33 insertions(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
index 62eac6e65334..53910056da20 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
@@ -473,24 +473,23 @@ static void amdgpu_dm_crtc_destroy(struct drm_crtc *crtc)
drm_crtc_cleanup(crtc);
kfree(crtc);
}
-STATIC_IFN_KUNIT void amdgpu_dm_crtc_reset_state(struct drm_crtc *crtc)
+STATIC_IFN_KUNIT struct drm_crtc_state *amdgpu_dm_crtc_create_state(struct drm_crtc *crtc)
{
struct dm_crtc_state *state;
state = kzalloc_obj(*state);
if (!state)
- return;
+ return ERR_PTR(-ENOMEM);
- if (crtc->state)
- amdgpu_dm_crtc_destroy_state(crtc, crtc->state);
+ __drm_atomic_helper_crtc_state_init(&state->base, crtc);
- __drm_atomic_helper_crtc_reset(crtc, &state->base);
+ return &state->base;
}
-EXPORT_IF_KUNIT(amdgpu_dm_crtc_reset_state);
+EXPORT_IF_KUNIT(amdgpu_dm_crtc_create_state);
#ifdef CONFIG_DEBUG_FS
static int amdgpu_dm_crtc_late_register(struct drm_crtc *crtc)
{
crtc_debugfs_init(crtc);
@@ -563,11 +562,11 @@ amdgpu_dm_atomic_crtc_get_property(struct drm_crtc *crtc,
}
#endif
/* Implemented only the options currently available for the driver */
static const struct drm_crtc_funcs amdgpu_dm_crtc_funcs = {
- .reset = amdgpu_dm_crtc_reset_state,
+ .atomic_create_state = amdgpu_dm_crtc_create_state,
.destroy = amdgpu_dm_crtc_destroy,
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
.atomic_duplicate_state = amdgpu_dm_crtc_duplicate_state,
.atomic_destroy_state = amdgpu_dm_crtc_destroy_state,
@@ -779,13 +778,22 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
amdgpu_dm_ism_init(&acrtc->ism, &default_ism_config);
drm_crtc_helper_add(&acrtc->base, &amdgpu_dm_crtc_helper_funcs);
- /* Create (reset) the plane state */
- if (acrtc->base.funcs->reset)
- acrtc->base.funcs->reset(&acrtc->base);
+ /* Create the plane state */
+ if (acrtc->base.funcs->atomic_create_state) {
+ struct drm_crtc_state *crtc_state;
+
+ crtc_state = acrtc->base.funcs->atomic_create_state(&acrtc->base);
+ if (IS_ERR(crtc_state)) {
+ res = PTR_ERR(crtc_state);
+ goto error_ism_fini;
+ }
+
+ acrtc->base.state = crtc_state;
+ }
acrtc->max_cursor_width = dm->adev->dm.dc->caps.max_cursor_size;
acrtc->max_cursor_height = dm->adev->dm.dc->caps.max_cursor_size;
acrtc->crtc_id = crtc_index;
@@ -813,10 +821,13 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
#ifdef AMD_PRIVATE_COLOR
dm_crtc_additional_color_mgmt(&acrtc->base);
#endif
return 0;
+error_ism_fini:
+ amdgpu_dm_ism_fini(&acrtc->ism);
+ drm_crtc_cleanup(&acrtc->base);
fail:
kfree(acrtc);
kfree(cursor_plane);
return res;
}
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.h
index 93c6d0d8d7fd..ad516aeb9798 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.h
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.h
@@ -47,11 +47,11 @@ bool amdgpu_dm_crtc_helper_mode_fixup(struct drm_crtc *crtc,
const struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode);
void amdgpu_dm_crtc_destroy_state(struct drm_crtc *crtc,
struct drm_crtc_state *state);
struct drm_crtc_state *amdgpu_dm_crtc_duplicate_state(struct drm_crtc *crtc);
-void amdgpu_dm_crtc_reset_state(struct drm_crtc *crtc);
+struct drm_crtc_state *amdgpu_dm_crtc_create_state(struct drm_crtc *crtc);
int amdgpu_dm_crtc_count_crtc_active_planes(struct drm_crtc_state *new_crtc_state);
void amdgpu_dm_crtc_update_crtc_active_planes(struct drm_crtc *crtc,
struct drm_crtc_state *new_crtc_state);
void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work);
void amdgpu_dm_idle_worker(struct work_struct *work);
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c
index 4dacddd23878..20ae31d2bf6a 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c
@@ -1402,35 +1402,34 @@ static void dm_test_crtc_duplicate_state_copies_fields(struct kunit *test)
KUNIT_EXPECT_TRUE(test, dm_dup->mpo_requested);
amdgpu_dm_crtc_destroy_state(crtc, dup);
}
-/* Tests for amdgpu_dm_crtc_reset_state() */
+/* Tests for amdgpu_dm_crtc_create_state() */
/**
- * dm_test_crtc_reset_state_allocates_state - Test reset installs a fresh state
+ * dm_test_crtc_create_state_allocates_state - Test create_state allocates a fresh state
* @test: The KUnit test context
*
- * Resetting a CRTC with no existing state must allocate and install a new
- * drm_crtc_state.
+ * Creating state for a CRTC must allocate a new drm_crtc_state.
*/
-static void dm_test_crtc_reset_state_allocates_state(struct kunit *test)
+static void dm_test_crtc_create_state_allocates_state(struct kunit *test)
{
struct amdgpu_device *adev = dm_kunit_alloc_adev(test);
+ struct drm_crtc_state *crtc_state;
struct drm_crtc *crtc;
crtc = kunit_kzalloc(test, sizeof(*crtc), GFP_KERNEL);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc);
crtc->dev = &adev->ddev;
crtc->state = NULL;
- amdgpu_dm_crtc_reset_state(crtc);
+ crtc_state = amdgpu_dm_crtc_create_state(crtc);
+ KUNIT_EXPECT_NOT_ERR_OR_NULL(test, crtc_state);
- KUNIT_EXPECT_NOT_NULL(test, crtc->state);
-
- if (crtc->state)
- amdgpu_dm_crtc_destroy_state(crtc, crtc->state);
+ if (!IS_ERR(crtc_state))
+ amdgpu_dm_crtc_destroy_state(crtc, crtc_state);
}
/* Tests for amdgpu_dm_crtc_destroy_state() */
/**
@@ -1905,12 +1904,12 @@ static struct kunit_case amdgpu_dm_crtc_tests[] = {
/* amdgpu_dm_crtc_count_crtc_active_planes */
KUNIT_CASE(dm_test_count_crtc_active_planes_none),
KUNIT_CASE(dm_test_count_crtc_active_planes_mixed),
/* amdgpu_dm_crtc_duplicate_state */
KUNIT_CASE(dm_test_crtc_duplicate_state_copies_fields),
- /* amdgpu_dm_crtc_reset_state */
- KUNIT_CASE(dm_test_crtc_reset_state_allocates_state),
+ /* amdgpu_dm_crtc_create_state */
+ KUNIT_CASE(dm_test_crtc_create_state_allocates_state),
/* amdgpu_dm_crtc_destroy_state */
KUNIT_CASE(dm_test_crtc_destroy_state_no_stream),
KUNIT_CASE(dm_test_crtc_destroy_state_releases_stream),
/* amdgpu_dm_crtc_handle_vblank */
KUNIT_CASE(dm_test_crtc_handle_vblank_no_event),
--
2.55.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH v3 07/13] drm/amdgpu: dm: Convert to atomic_create_state
2026-09-04 9:07 ` [PATCH v3 07/13] drm/amdgpu: dm: Convert to atomic_create_state Maxime Ripard
@ 2026-09-10 16:41 ` Leo Li
0 siblings, 0 replies; 6+ messages in thread
From: Leo Li @ 2026-09-10 16:41 UTC (permalink / raw)
To: Maxime Ripard, Maarten Lankhorst, Thomas Zimmermann, David Airlie,
Simona Vetter
Cc: dri-devel, Christian König, Alex Deucher, Harry Wentland,
Rodrigo Siqueira, amd-gfx
On 2026-09-04 05:07, Maxime Ripard wrote:
> The amdgpu display manager crtc implementation provides a custom reset
> hook. However, this hook only allocates the state, initializes it with
> __drm_atomic_helper_crtc_reset(), and frees the previous state. It
> does not perform any hardware reset.
>
> Since this is exactly what the atomic_create_state hook is meant to
> do, minus the old state cleanup which the caller handles, convert the
> implementation to use atomic_create_state with
> __drm_atomic_helper_crtc_state_init() instead.
>
> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
> ---
> Cc: "Christian König" <christian.koenig@amd.com>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: Harry Wentland <harry.wentland@amd.com>
> Cc: Leo Li <sunpeng.li@amd.com>
> Cc: Rodrigo Siqueira <siqueira@igalia.com>
> Cc: amd-gfx@lists.freedesktop.org
> ---
> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 31 +++++++++++++++-------
> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.h | 2 +-
> .../display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c | 23 ++++++++--------
> 3 files changed, 33 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> index 62eac6e65334..53910056da20 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
> @@ -473,24 +473,23 @@ static void amdgpu_dm_crtc_destroy(struct drm_crtc *crtc)
>
> drm_crtc_cleanup(crtc);
> kfree(crtc);
> }
>
> -STATIC_IFN_KUNIT void amdgpu_dm_crtc_reset_state(struct drm_crtc *crtc)
> +STATIC_IFN_KUNIT struct drm_crtc_state *amdgpu_dm_crtc_create_state(struct drm_crtc *crtc)
> {
> struct dm_crtc_state *state;
>
> state = kzalloc_obj(*state);
> if (!state)
> - return;
> + return ERR_PTR(-ENOMEM);
>
> - if (crtc->state)
> - amdgpu_dm_crtc_destroy_state(crtc, crtc->state);
> + __drm_atomic_helper_crtc_state_init(&state->base, crtc);
>
> - __drm_atomic_helper_crtc_reset(crtc, &state->base);
> + return &state->base;
> }
> -EXPORT_IF_KUNIT(amdgpu_dm_crtc_reset_state);
> +EXPORT_IF_KUNIT(amdgpu_dm_crtc_create_state);
>
> #ifdef CONFIG_DEBUG_FS
> static int amdgpu_dm_crtc_late_register(struct drm_crtc *crtc)
> {
> crtc_debugfs_init(crtc);
> @@ -563,11 +562,11 @@ amdgpu_dm_atomic_crtc_get_property(struct drm_crtc *crtc,
> }
> #endif
>
> /* Implemented only the options currently available for the driver */
> static const struct drm_crtc_funcs amdgpu_dm_crtc_funcs = {
> - .reset = amdgpu_dm_crtc_reset_state,
> + .atomic_create_state = amdgpu_dm_crtc_create_state,
> .destroy = amdgpu_dm_crtc_destroy,
> .set_config = drm_atomic_helper_set_config,
> .page_flip = drm_atomic_helper_page_flip,
> .atomic_duplicate_state = amdgpu_dm_crtc_duplicate_state,
> .atomic_destroy_state = amdgpu_dm_crtc_destroy_state,
> @@ -779,13 +778,22 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
>
> amdgpu_dm_ism_init(&acrtc->ism, &default_ism_config);
>
> drm_crtc_helper_add(&acrtc->base, &amdgpu_dm_crtc_helper_funcs);
>
> - /* Create (reset) the plane state */
> - if (acrtc->base.funcs->reset)
> - acrtc->base.funcs->reset(&acrtc->base);
> + /* Create the plane state */
Looks like an existing typo, could you s/plane state/crtc state/ along with
this change?
Reviewed-by: Leo Li <sunpeng.li@amd.com>
Thanks!
- Leo
> + if (acrtc->base.funcs->atomic_create_state) {
> + struct drm_crtc_state *crtc_state;
> +
> + crtc_state = acrtc->base.funcs->atomic_create_state(&acrtc->base);
> + if (IS_ERR(crtc_state)) {
> + res = PTR_ERR(crtc_state);
> + goto error_ism_fini;
> + }
> +
> + acrtc->base.state = crtc_state;
> + }
>
> acrtc->max_cursor_width = dm->adev->dm.dc->caps.max_cursor_size;
> acrtc->max_cursor_height = dm->adev->dm.dc->caps.max_cursor_size;
>
> acrtc->crtc_id = crtc_index;
> @@ -813,10 +821,13 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
> #ifdef AMD_PRIVATE_COLOR
> dm_crtc_additional_color_mgmt(&acrtc->base);
> #endif
> return 0;
>
> +error_ism_fini:
> + amdgpu_dm_ism_fini(&acrtc->ism);
> + drm_crtc_cleanup(&acrtc->base);
> fail:
> kfree(acrtc);
> kfree(cursor_plane);
> return res;
> }
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.h
> index 93c6d0d8d7fd..ad516aeb9798 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.h
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.h
> @@ -47,11 +47,11 @@ bool amdgpu_dm_crtc_helper_mode_fixup(struct drm_crtc *crtc,
> const struct drm_display_mode *mode,
> struct drm_display_mode *adjusted_mode);
> void amdgpu_dm_crtc_destroy_state(struct drm_crtc *crtc,
> struct drm_crtc_state *state);
> struct drm_crtc_state *amdgpu_dm_crtc_duplicate_state(struct drm_crtc *crtc);
> -void amdgpu_dm_crtc_reset_state(struct drm_crtc *crtc);
> +struct drm_crtc_state *amdgpu_dm_crtc_create_state(struct drm_crtc *crtc);
> int amdgpu_dm_crtc_count_crtc_active_planes(struct drm_crtc_state *new_crtc_state);
> void amdgpu_dm_crtc_update_crtc_active_planes(struct drm_crtc *crtc,
> struct drm_crtc_state *new_crtc_state);
> void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work);
> void amdgpu_dm_idle_worker(struct work_struct *work);
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c
> index 4dacddd23878..20ae31d2bf6a 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_crtc_test.c
> @@ -1402,35 +1402,34 @@ static void dm_test_crtc_duplicate_state_copies_fields(struct kunit *test)
> KUNIT_EXPECT_TRUE(test, dm_dup->mpo_requested);
>
> amdgpu_dm_crtc_destroy_state(crtc, dup);
> }
>
> -/* Tests for amdgpu_dm_crtc_reset_state() */
> +/* Tests for amdgpu_dm_crtc_create_state() */
>
> /**
> - * dm_test_crtc_reset_state_allocates_state - Test reset installs a fresh state
> + * dm_test_crtc_create_state_allocates_state - Test create_state allocates a fresh state
> * @test: The KUnit test context
> *
> - * Resetting a CRTC with no existing state must allocate and install a new
> - * drm_crtc_state.
> + * Creating state for a CRTC must allocate a new drm_crtc_state.
> */
> -static void dm_test_crtc_reset_state_allocates_state(struct kunit *test)
> +static void dm_test_crtc_create_state_allocates_state(struct kunit *test)
> {
> struct amdgpu_device *adev = dm_kunit_alloc_adev(test);
> + struct drm_crtc_state *crtc_state;
> struct drm_crtc *crtc;
>
> crtc = kunit_kzalloc(test, sizeof(*crtc), GFP_KERNEL);
> KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc);
> crtc->dev = &adev->ddev;
> crtc->state = NULL;
>
> - amdgpu_dm_crtc_reset_state(crtc);
> + crtc_state = amdgpu_dm_crtc_create_state(crtc);
> + KUNIT_EXPECT_NOT_ERR_OR_NULL(test, crtc_state);
>
> - KUNIT_EXPECT_NOT_NULL(test, crtc->state);
> -
> - if (crtc->state)
> - amdgpu_dm_crtc_destroy_state(crtc, crtc->state);
> + if (!IS_ERR(crtc_state))
> + amdgpu_dm_crtc_destroy_state(crtc, crtc_state);
> }
>
> /* Tests for amdgpu_dm_crtc_destroy_state() */
>
> /**
> @@ -1905,12 +1904,12 @@ static struct kunit_case amdgpu_dm_crtc_tests[] = {
> /* amdgpu_dm_crtc_count_crtc_active_planes */
> KUNIT_CASE(dm_test_count_crtc_active_planes_none),
> KUNIT_CASE(dm_test_count_crtc_active_planes_mixed),
> /* amdgpu_dm_crtc_duplicate_state */
> KUNIT_CASE(dm_test_crtc_duplicate_state_copies_fields),
> - /* amdgpu_dm_crtc_reset_state */
> - KUNIT_CASE(dm_test_crtc_reset_state_allocates_state),
> + /* amdgpu_dm_crtc_create_state */
> + KUNIT_CASE(dm_test_crtc_create_state_allocates_state),
> /* amdgpu_dm_crtc_destroy_state */
> KUNIT_CASE(dm_test_crtc_destroy_state_no_stream),
> KUNIT_CASE(dm_test_crtc_destroy_state_releases_stream),
> /* amdgpu_dm_crtc_handle_vblank */
> KUNIT_CASE(dm_test_crtc_handle_vblank_no_event),
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 00/13] drm/crtc: Convert all drivers to atomic_create_state and remove reset
2026-09-04 9:07 [PATCH v3 00/13] drm/crtc: Convert all drivers to atomic_create_state and remove reset Maxime Ripard
2026-09-04 9:07 ` [PATCH v3 02/13] drm/amdgpu: vkms: Switch to drm_atomic_helper_crtc_create_state Maxime Ripard
2026-09-04 9:07 ` [PATCH v3 07/13] drm/amdgpu: dm: Convert to atomic_create_state Maxime Ripard
@ 2026-09-10 15:20 ` Javier Martinez Canillas
2026-09-11 13:14 ` Maxime Ripard
3 siblings, 0 replies; 6+ messages in thread
From: Javier Martinez Canillas @ 2026-09-10 15:20 UTC (permalink / raw)
To: Maxime Ripard, Maarten Lankhorst, Thomas Zimmermann, David Airlie,
Simona Vetter
Cc: dri-devel, Maxime Ripard, Christian König, Alex Deucher,
amd-gfx, Paul Kocialkowski, Jyri Sarha, Tomi Valkeinen,
Harry Wentland, Leo Li, Rodrigo Siqueira, Huacai Chen,
Icenowy Zheng, Jianmin Lv, Mingcong Bai, Qianhai Wu, Xi Ruoyao,
AngeloGioacchino Del Regno, Chun-Kuang Hu, Matthias Brugger,
Philipp Zabel, Iker Pedrosa, Dmitry Baryshkov
Maxime Ripard <mripard@kernel.org> writes:
Hello,
> This is a follow-up to the plane reset removal series, and part of a
> larger effort to remove the reset hook from all KMS objects.
>
> The CRTC reset hook is overloaded: it is called both at probe time to
> create the initial software state and during suspend/resume to reset
> hardware and software state. These two roles have different
> requirements, and the reset hook is not fallible, making error
> handling difficult for the initial state allocation path.
>
> While reset has the semantics to reset both the software and hardware
> state, the vast majority of implementations and all the helpers only
> reset the software state, making them equivalent to
> atomic_create_state in practice. The atomic_create_state hook makes
> this explicit: it only allocates and initializes a pristine state
> without any side effect, and returns the state pointer or an ERR_PTR
> on failure.
>
> This series converts all CRTC drivers tree-wide from the reset hook to
> atomic_create_state, then removes the reset hook from struct
> drm_crtc_funcs entirely. Two drivers (tilcdc and loongson) had actual
> hardware reset logic mixed into their reset hook; those are moved to
> CRTC creation instead. The conversions were done using a combination of
> Coccinelle semantic patches and manual adjustments.
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
> ---
I went through all this series and the patches look good to me.
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
--
Best regards,
Javier Martinez Canillas
Core Platforms
Red Hat
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 00/13] drm/crtc: Convert all drivers to atomic_create_state and remove reset
2026-09-04 9:07 [PATCH v3 00/13] drm/crtc: Convert all drivers to atomic_create_state and remove reset Maxime Ripard
` (2 preceding siblings ...)
2026-09-10 15:20 ` [PATCH v3 00/13] drm/crtc: Convert all drivers to atomic_create_state and remove reset Javier Martinez Canillas
@ 2026-09-11 13:14 ` Maxime Ripard
3 siblings, 0 replies; 6+ messages in thread
From: Maxime Ripard @ 2026-09-11 13:14 UTC (permalink / raw)
To: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter
Cc: dri-devel, Christian König, Alex Deucher, amd-gfx,
Paul Kocialkowski, Jyri Sarha, Tomi Valkeinen, Harry Wentland,
Leo Li, Rodrigo Siqueira, Huacai Chen, Icenowy Zheng, Jianmin Lv,
Mingcong Bai, Qianhai Wu, Xi Ruoyao, AngeloGioacchino Del Regno,
Chun-Kuang Hu, Matthias Brugger, Philipp Zabel, Iker Pedrosa,
Dmitry Baryshkov
[-- Attachment #1: Type: text/plain, Size: 1578 bytes --]
On Fri, Sep 04, 2026 at 11:07:18AM +0200, Maxime Ripard wrote:
> This is a follow-up to the plane reset removal series, and part of a
> larger effort to remove the reset hook from all KMS objects.
>
> The CRTC reset hook is overloaded: it is called both at probe time to
> create the initial software state and during suspend/resume to reset
> hardware and software state. These two roles have different
> requirements, and the reset hook is not fallible, making error
> handling difficult for the initial state allocation path.
>
> While reset has the semantics to reset both the software and hardware
> state, the vast majority of implementations and all the helpers only
> reset the software state, making them equivalent to
> atomic_create_state in practice. The atomic_create_state hook makes
> this explicit: it only allocates and initializes a pristine state
> without any side effect, and returns the state pointer or an ERR_PTR
> on failure.
>
> This series converts all CRTC drivers tree-wide from the reset hook to
> atomic_create_state, then removes the reset hook from struct
> drm_crtc_funcs entirely. Two drivers (tilcdc and loongson) had actual
> hardware reset logic mixed into their reset hook; those are moved to
> CRTC creation instead. The conversions were done using a combination of
> Coccinelle semantic patches and manual adjustments.
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
> ---
Pushed all patches but the ones removing the helpers and hook because
it would break the latest gm12u320 commit.
Maxime
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread