The mgag200 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.

Signed-off-by: Maxime Ripard <[email protected]>
---
Cc: Dave Airlie <[email protected]>
Cc: Jocelyn Falempe <[email protected]>
---
 drivers/gpu/drm/mgag200/mgag200_drv.h  |  4 ++--
 drivers/gpu/drm/mgag200/mgag200_mode.c | 15 +++++++--------
 2 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.h 
b/drivers/gpu/drm/mgag200/mgag200_drv.h
index 3732c62351bb..bccc70983d28 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.h
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.h
@@ -405,19 +405,19 @@ void mgag200_crtc_helper_atomic_disable(struct drm_crtc 
*crtc, struct drm_atomic
        .atomic_check = mgag200_crtc_helper_atomic_check, \
        .atomic_flush = mgag200_crtc_helper_atomic_flush, \
        .atomic_enable = mgag200_crtc_helper_atomic_enable, \
        .atomic_disable = mgag200_crtc_helper_atomic_disable
 
-void mgag200_crtc_reset(struct drm_crtc *crtc);
+struct drm_crtc_state *mgag200_crtc_atomic_create_state(struct drm_crtc *crtc);
 struct drm_crtc_state *mgag200_crtc_atomic_duplicate_state(struct drm_crtc 
*crtc);
 void mgag200_crtc_atomic_destroy_state(struct drm_crtc *crtc, struct 
drm_crtc_state *crtc_state);
 
 #define MGAG200_CRTC_FUNCS \
-       .reset = mgag200_crtc_reset, \
        .destroy = drm_crtc_cleanup, \
        .set_config = drm_atomic_helper_set_config, \
        .page_flip = drm_atomic_helper_page_flip, \
+       .atomic_create_state = mgag200_crtc_atomic_create_state, \
        .atomic_duplicate_state = mgag200_crtc_atomic_duplicate_state, \
        .atomic_destroy_state = mgag200_crtc_atomic_destroy_state
 
 void mgag200_set_mode_regs(struct mga_device *mdev, const struct 
drm_display_mode *mode,
                           bool set_vidrst);
diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c 
b/drivers/gpu/drm/mgag200/mgag200_mode.c
index 7e07fc3f1a60..4e952655e4f5 100644
--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -677,22 +677,21 @@ void mgag200_crtc_helper_atomic_disable(struct drm_crtc 
*crtc, struct drm_atomic
        struct mga_device *mdev = to_mga_device(crtc->dev);
 
        mgag200_disable_display(mdev);
 }
 
-void mgag200_crtc_reset(struct drm_crtc *crtc)
+struct drm_crtc_state *mgag200_crtc_atomic_create_state(struct drm_crtc *crtc)
 {
        struct mgag200_crtc_state *mgag200_crtc_state;
 
-       if (crtc->state)
-               crtc->funcs->atomic_destroy_state(crtc, crtc->state);
-
        mgag200_crtc_state = kzalloc_obj(*mgag200_crtc_state);
-       if (mgag200_crtc_state)
-               __drm_atomic_helper_crtc_reset(crtc, &mgag200_crtc_state->base);
-       else
-               __drm_atomic_helper_crtc_reset(crtc, NULL);
+       if (!mgag200_crtc_state)
+               return ERR_PTR(-ENOMEM);
+
+       __drm_atomic_helper_crtc_state_init(&mgag200_crtc_state->base, crtc);
+
+       return &mgag200_crtc_state->base;
 }
 
 struct drm_crtc_state *mgag200_crtc_atomic_duplicate_state(struct drm_crtc 
*crtc)
 {
        struct drm_crtc_state *crtc_state = crtc->state;

-- 
2.55.0

Reply via email to