The plane reset implementation creates a custom state subclass, but
only initializes a pristine state without resetting any hardware. This
is equivalent to what atomic_create_state expects. Convert to it.

Signed-off-by: Maxime Ripard <[email protected]>
---
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
---
 drivers/gpu/drm/tegra/plane.c | 28 ++++++++++++----------------
 1 file changed, 12 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/tegra/plane.c b/drivers/gpu/drm/tegra/plane.c
index 0cb30910773f..2148b0c59815 100644
--- a/drivers/gpu/drm/tegra/plane.c
+++ b/drivers/gpu/drm/tegra/plane.c
@@ -22,32 +22,28 @@ static void tegra_plane_destroy(struct drm_plane *plane)
 
        drm_plane_cleanup(plane);
        kfree(p);
 }
 
-static void tegra_plane_reset(struct drm_plane *plane)
+static struct drm_plane_state *tegra_plane_atomic_create_state(struct 
drm_plane *plane)
 {
        struct tegra_plane *p = to_tegra_plane(plane);
        struct tegra_plane_state *state;
        unsigned int i;
 
-       if (plane->state)
-               __drm_atomic_helper_plane_destroy_state(plane->state);
-
-       kfree(plane->state);
-       plane->state = NULL;
-
        state = kzalloc_obj(*state);
-       if (state) {
-               plane->state = &state->base;
-               plane->state->plane = plane;
-               plane->state->zpos = p->index;
-               plane->state->normalized_zpos = p->index;
+       if (!state)
+               return ERR_PTR(-ENOMEM);
 
-               for (i = 0; i < 3; i++)
-                       state->iova[i] = DMA_MAPPING_ERROR;
-       }
+       state->base.plane = plane;
+       state->base.zpos = p->index;
+       state->base.normalized_zpos = p->index;
+
+       for (i = 0; i < 3; i++)
+               state->iova[i] = DMA_MAPPING_ERROR;
+
+       return &state->base;
 }
 
 static struct drm_plane_state *
 tegra_plane_atomic_duplicate_state(struct drm_plane *plane)
 {
@@ -129,11 +125,11 @@ static bool tegra_plane_format_mod_supported(struct 
drm_plane *plane,
 
 const struct drm_plane_funcs tegra_plane_funcs = {
        .update_plane = drm_atomic_helper_update_plane,
        .disable_plane = drm_atomic_helper_disable_plane,
        .destroy = tegra_plane_destroy,
-       .reset = tegra_plane_reset,
+       .atomic_create_state = tegra_plane_atomic_create_state,
        .atomic_duplicate_state = tegra_plane_atomic_duplicate_state,
        .atomic_destroy_state = tegra_plane_atomic_destroy_state,
        .format_mod_supported = tegra_plane_format_mod_supported,
 };
 

-- 
2.54.0

Reply via email to