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,

-- 
2.55.0

Reply via email to