Re: [PATCH 57/70] drm/nouveau: Convert to atomic_create_state

[email protected]
Newsgroups org.freedesktop.lists.dri-devel,org.freedesktop.lists.nouveau
Message-ID <[email protected]>
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,
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.