From 07c66ce1e6446f5cc6a4ace99a8d46880f45c527 Mon Sep 17 00:00:00 2001 From: Maxime Ripard Date: Fri, 21 Aug 2026 16:39:44 +0200 Subject: [PATCH] drm/vmwgfx: Convert to atomic_create_state The vmwgfx 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 Link: https://patch.msgid.link/20260821-drm-no-more-crtc-reset-v1-68-fb793475c05a@kernel.org Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 22 +++++++--------------- drivers/gpu/drm/vmwgfx/vmwgfx_kms.h | 2 +- drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 2 +- drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 2 +- drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 2 +- 5 files changed, 11 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index 1b407b61f683..0b470809661c 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -206,32 +206,24 @@ vmw_du_crtc_duplicate_state(struct drm_crtc *crtc) /** - * vmw_du_crtc_reset - creates a blank vmw crtc state + * vmw_du_crtc_create_state - creates a blank vmw crtc state * @crtc: DRM crtc * - * Resets the atomic state for @crtc by freeing the state pointer (which - * might be NULL, e.g. at driver load time) and allocating a new empty state - * object. + * Allocates a new empty state object for @crtc. */ -void vmw_du_crtc_reset(struct drm_crtc *crtc) +struct drm_crtc_state *vmw_du_crtc_create_state(struct drm_crtc *crtc) { struct vmw_crtc_state *vcs; - - if (crtc->state) { - __drm_atomic_helper_crtc_destroy_state(crtc->state); - - kfree(vmw_crtc_state_to_vcs(crtc->state)); - } - vcs = kzalloc_obj(*vcs); - if (!vcs) { DRM_ERROR("Cannot allocate vmw_crtc_state\n"); - return; + return ERR_PTR(-ENOMEM); } - __drm_atomic_helper_crtc_reset(crtc, &vcs->base); + __drm_atomic_helper_crtc_state_init(&vcs->base, crtc); + + return &vcs->base; } diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h index 2224d7d91d1b..e641f33341e6 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h @@ -421,7 +421,7 @@ int vmw_du_crtc_atomic_check(struct drm_crtc *crtc, struct drm_atomic_commit *state); void vmw_du_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_atomic_commit *state); -void vmw_du_crtc_reset(struct drm_crtc *crtc); +struct drm_crtc_state *vmw_du_crtc_create_state(struct drm_crtc *crtc); struct drm_crtc_state *vmw_du_crtc_duplicate_state(struct drm_crtc *crtc); void vmw_du_crtc_destroy_state(struct drm_crtc *crtc, struct drm_crtc_state *state); diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c index af3e32174563..a4b28341f622 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c @@ -249,7 +249,7 @@ static void vmw_ldu_crtc_mode_set_nofb(struct drm_crtc *crtc) static const struct drm_crtc_funcs vmw_legacy_crtc_funcs = { .gamma_set = vmw_du_crtc_gamma_set, .destroy = vmw_ldu_crtc_destroy, - .reset = vmw_du_crtc_reset, + .atomic_create_state = vmw_du_crtc_create_state, .atomic_duplicate_state = vmw_du_crtc_duplicate_state, .atomic_destroy_state = vmw_du_crtc_destroy_state, .set_config = drm_atomic_helper_set_config, diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c index c83061cf7455..a05f935f1841 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c @@ -305,7 +305,7 @@ static void vmw_sou_crtc_atomic_disable(struct drm_crtc *crtc, static const struct drm_crtc_funcs vmw_screen_object_crtc_funcs = { .gamma_set = vmw_du_crtc_gamma_set, .destroy = vmw_sou_crtc_destroy, - .reset = vmw_du_crtc_reset, + .atomic_create_state = vmw_du_crtc_create_state, .atomic_duplicate_state = vmw_du_crtc_duplicate_state, .atomic_destroy_state = vmw_du_crtc_destroy_state, .set_config = drm_atomic_helper_set_config, diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c index 4139837f4caf..939da0e11dbb 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c @@ -778,7 +778,7 @@ out_unref: static const struct drm_crtc_funcs vmw_stdu_crtc_funcs = { .gamma_set = vmw_du_crtc_gamma_set, .destroy = vmw_stdu_crtc_destroy, - .reset = vmw_du_crtc_reset, + .atomic_create_state = vmw_du_crtc_create_state, .atomic_duplicate_state = vmw_du_crtc_duplicate_state, .atomic_destroy_state = vmw_du_crtc_destroy_state, .set_config = drm_atomic_helper_set_config,