Reviewed-by: Lyude Paul <[email protected]>

On Fri, 2026-08-21 at 16:39 +0200, Maxime Ripard wrote:
> The nouveau nv50 head 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.
> 
> Signed-off-by: Maxime Ripard <[email protected]>
> ---
> Cc: Danilo Krummrich <[email protected]>
> Cc: Lyude Paul <[email protected]>
> Cc: [email protected]
> ---
>  drivers/gpu/drm/nouveau/dispnv50/head.c | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/nouveau/dispnv50/head.c
> b/drivers/gpu/drm/nouveau/dispnv50/head.c
> index 1affa0378bd0..6a3a93de0cbf 100644
> --- a/drivers/gpu/drm/nouveau/dispnv50/head.c
> +++ b/drivers/gpu/drm/nouveau/dispnv50/head.c
> @@ -489,22 +489,20 @@ nv50_head_atomic_duplicate_state(struct
> drm_crtc *crtc)
>       asyh->clr.mask = 0;
>       asyh->set.mask = 0;
>       return &asyh->state;
>  }
>  
> -static void
> -nv50_head_reset(struct drm_crtc *crtc)
> +static struct drm_crtc_state *nv50_head_create_state(struct drm_crtc
> *crtc)
>  {
>       struct nv50_head_atom *asyh;
>  
>       if (WARN_ON(!(asyh = kzalloc_obj(*asyh))))
> -             return;
> +             return ERR_PTR(-ENOMEM);
>  
> -     if (crtc->state)
> -             nv50_head_atomic_destroy_state(crtc, crtc->state);
> +     __drm_atomic_helper_crtc_state_init(&asyh->state, crtc);
>  
> -     __drm_atomic_helper_crtc_reset(crtc, &asyh->state);
> +     return &asyh->state;
>  }
>  
>  static int
>  nv50_head_late_register(struct drm_crtc *crtc)
>  {
> @@ -523,11 +521,11 @@ nv50_head_destroy(struct drm_crtc *crtc)
>       kfree(head);
>  }
>  
>  static const struct drm_crtc_funcs
>  nv50_head_func = {
> -     .reset = nv50_head_reset,
> +     .atomic_create_state = nv50_head_create_state,
>       .destroy = nv50_head_destroy,
>       .set_config = drm_atomic_helper_set_config,
>       .page_flip = drm_atomic_helper_page_flip,
>       .atomic_duplicate_state = nv50_head_atomic_duplicate_state,
>       .atomic_destroy_state = nv50_head_atomic_destroy_state,
> @@ -537,11 +535,11 @@ nv50_head_func = {
>       .late_register = nv50_head_late_register,
>  };
>  
>  static const struct drm_crtc_funcs
>  nvd9_head_func = {
> -     .reset = nv50_head_reset,
> +     .atomic_create_state = nv50_head_create_state,
>       .destroy = nv50_head_destroy,
>       .set_config = drm_atomic_helper_set_config,
>       .page_flip = drm_atomic_helper_page_flip,
>       .atomic_duplicate_state = nv50_head_atomic_duplicate_state,
>       .atomic_destroy_state = nv50_head_atomic_destroy_state,

Reply via email to