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,