The amdgpu display manager 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: "Christian König" <[email protected]>
Cc: Alex Deucher <[email protected]>
Cc: Harry Wentland <[email protected]>
Cc: Leo Li <[email protected]>
Cc: Rodrigo Siqueira <[email protected]>
Cc: [email protected]
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
index 0ad7704800d9..42a908c9d4a9 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
@@ -438,22 +438,21 @@ static void amdgpu_dm_crtc_destroy(struct drm_crtc *crtc)
 
        drm_crtc_cleanup(crtc);
        kfree(crtc);
 }
 
-static void amdgpu_dm_crtc_reset_state(struct drm_crtc *crtc)
+static struct drm_crtc_state *amdgpu_dm_crtc_create_state(struct drm_crtc 
*crtc)
 {
        struct dm_crtc_state *state;
 
        state = kzalloc_obj(*state);
        if (!state)
-               return;
+               return ERR_PTR(-ENOMEM);
 
-       if (crtc->state)
-               amdgpu_dm_crtc_destroy_state(crtc, crtc->state);
+       __drm_atomic_helper_crtc_state_init(&state->base, crtc);
 
-       __drm_atomic_helper_crtc_reset(crtc, &state->base);
+       return &state->base;
 }
 
 #ifdef CONFIG_DEBUG_FS
 static int amdgpu_dm_crtc_late_register(struct drm_crtc *crtc)
 {
@@ -527,11 +526,11 @@ amdgpu_dm_atomic_crtc_get_property(struct drm_crtc *crtc,
 }
 #endif
 
 /* Implemented only the options currently available for the driver */
 static const struct drm_crtc_funcs amdgpu_dm_crtc_funcs = {
-       .reset = amdgpu_dm_crtc_reset_state,
+       .atomic_create_state = amdgpu_dm_crtc_create_state,
        .destroy = amdgpu_dm_crtc_destroy,
        .set_config = drm_atomic_helper_set_config,
        .page_flip = drm_atomic_helper_page_flip,
        .atomic_duplicate_state = amdgpu_dm_crtc_duplicate_state,
        .atomic_destroy_state = amdgpu_dm_crtc_destroy_state,
@@ -741,13 +740,13 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
 
        amdgpu_dm_ism_init(&acrtc->ism, &default_ism_config);
 
        drm_crtc_helper_add(&acrtc->base, &amdgpu_dm_crtc_helper_funcs);
 
-       /* Create (reset) the plane state */
-       if (acrtc->base.funcs->reset)
-               acrtc->base.funcs->reset(&acrtc->base);
+       /* Create the plane state */
+       if (acrtc->base.funcs->atomic_create_state)
+               acrtc->base.funcs->atomic_create_state(&acrtc->base);
 
        acrtc->max_cursor_width = dm->adev->dm.dc->caps.max_cursor_size;
        acrtc->max_cursor_height = dm->adev->dm.dc->caps.max_cursor_size;
 
        acrtc->crtc_id = crtc_index;

-- 
2.55.0

Reply via email to