From 4288a0bb6d75c88eead8fcc5396aee8e3668faa6 Mon Sep 17 00:00:00 2001 From: Maxime Ripard Date: Fri, 4 Sep 2026 11:07:27 +0200 Subject: [PATCH] drm/loongson: Convert to atomic_create_state The loongson 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 the atomic_create_state hook is only meant to deal with state allocation and initialization, convert it accordingly. Reviewed-by: Thomas Zimmermann Reviewed-by: Javier Martinez Canillas Link: https://lore.kernel.org/r/20260904-drm-no-more-crtc-reset-v3-9-27d9891512ce@kernel.org Signed-off-by: Maxime Ripard --- drivers/gpu/drm/loongson/lsdc_crtc.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/loongson/lsdc_crtc.c b/drivers/gpu/drm/loongson/lsdc_crtc.c index 7cca574e3b6a..a47816e3fa81 100644 --- a/drivers/gpu/drm/loongson/lsdc_crtc.c +++ b/drivers/gpu/drm/loongson/lsdc_crtc.c @@ -388,19 +388,18 @@ static const struct lsdc_crtc_hw_ops ls7a2000_crtc_hw_ops[2] = { }, }; -static void lsdc_crtc_reset(struct drm_crtc *crtc) +static struct drm_crtc_state *lsdc_crtc_create_state(struct drm_crtc *crtc) { struct lsdc_crtc_state *priv_crtc_state; - if (crtc->state) - crtc->funcs->atomic_destroy_state(crtc, crtc->state); - priv_crtc_state = kzalloc_obj(*priv_crtc_state); if (!priv_crtc_state) - __drm_atomic_helper_crtc_reset(crtc, NULL); - else - __drm_atomic_helper_crtc_reset(crtc, &priv_crtc_state->base); + return ERR_PTR(-ENOMEM); + + __drm_atomic_helper_crtc_state_init(&priv_crtc_state->base, crtc); + + return &priv_crtc_state->base; } static void lsdc_crtc_atomic_destroy_state(struct drm_crtc *crtc, @@ -707,7 +706,7 @@ static void lsdc_crtc_atomic_print_state(struct drm_printer *p, } static const struct drm_crtc_funcs ls7a1000_crtc_funcs = { - .reset = lsdc_crtc_reset, + .atomic_create_state = lsdc_crtc_create_state, .destroy = drm_crtc_cleanup, .set_config = drm_atomic_helper_set_config, .page_flip = drm_atomic_helper_page_flip, @@ -721,7 +720,7 @@ static const struct drm_crtc_funcs ls7a1000_crtc_funcs = { }; static const struct drm_crtc_funcs ls7a2000_crtc_funcs = { - .reset = lsdc_crtc_reset, + .atomic_create_state = lsdc_crtc_create_state, .destroy = drm_crtc_cleanup, .set_config = drm_atomic_helper_set_config, .page_flip = drm_atomic_helper_page_flip,