The vc4 driver relies on a drm_private_obj, that is initialized by
allocating and initializing a state, and then passing it to
drm_private_obj_init.

Since we're gradually moving away from that pattern to the more
established one relying on a atomic_create_state implementation, let's
migrate this instance to the new pattern.

Signed-off-by: Maxime Ripard <[email protected]>

---

Cc: Dave Stevenson <[email protected]>
Cc: "MaĆ­ra Canal" <[email protected]>
Cc: [email protected]
---
 drivers/gpu/drm/vc4/vc4_kms.c | 69 ++++++++++++++++++++++++++++++-------------
 1 file changed, 48 insertions(+), 21 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c
index 
e563c12109371619605d8e3f78b0f92694dbe5a5..f82c7ea1d74eeaa075296533a1ffe3561f197748
 100644
--- a/drivers/gpu/drm/vc4/vc4_kms.c
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
@@ -83,11 +83,26 @@ static void vc4_ctm_destroy_state(struct drm_private_obj 
*obj,
        struct vc4_ctm_state *ctm_state = to_vc4_ctm_state(state);
 
        kfree(ctm_state);
 }
 
+static struct drm_private_state *
+vc4_ctm_create_state(struct drm_private_obj *obj)
+{
+       struct vc4_ctm_state *ctm_state;
+
+       ctm_state = kzalloc(sizeof(*ctm_state), GFP_KERNEL);
+       if (!ctm_state)
+               return ERR_PTR(-ENOMEM);
+
+       __drm_atomic_helper_private_obj_create_state(obj, &ctm_state->base);
+
+       return &ctm_state->base;
+}
+
 static const struct drm_private_state_funcs vc4_ctm_state_funcs = {
+       .atomic_create_state = vc4_ctm_create_state,
        .atomic_duplicate_state = vc4_ctm_duplicate_state,
        .atomic_destroy_state = vc4_ctm_destroy_state,
 };
 
 static void vc4_ctm_obj_fini(struct drm_device *dev, void *unused)
@@ -97,19 +112,13 @@ static void vc4_ctm_obj_fini(struct drm_device *dev, void 
*unused)
        drm_atomic_private_obj_fini(&vc4->ctm_manager);
 }
 
 static int vc4_ctm_obj_init(struct vc4_dev *vc4)
 {
-       struct vc4_ctm_state *ctm_state;
-
        drm_modeset_lock_init(&vc4->ctm_state_lock);
 
-       ctm_state = kzalloc(sizeof(*ctm_state), GFP_KERNEL);
-       if (!ctm_state)
-               return -ENOMEM;
-
-       drm_atomic_private_obj_init(&vc4->base, &vc4->ctm_manager, 
&ctm_state->base,
+       drm_atomic_private_obj_init(&vc4->base, &vc4->ctm_manager, NULL,
                                    &vc4_ctm_state_funcs);
 
        return drmm_add_action_or_reset(&vc4->base, vc4_ctm_obj_fini, NULL);
 }
 
@@ -716,13 +725,28 @@ static void vc4_load_tracker_destroy_state(struct 
drm_private_obj *obj,
 
        load_state = to_vc4_load_tracker_state(state);
        kfree(load_state);
 }
 
+static struct drm_private_state *
+vc4_load_tracker_create_state(struct drm_private_obj *obj)
+{
+       struct vc4_load_tracker_state *load_state;
+
+       load_state = kzalloc(sizeof(*load_state), GFP_KERNEL);
+       if (!load_state)
+               return ERR_PTR(-ENOMEM);
+
+       __drm_atomic_helper_private_obj_create_state(obj, &load_state->base);
+
+       return &load_state->base;
+}
+
 static const struct drm_private_state_funcs vc4_load_tracker_state_funcs = {
        .atomic_duplicate_state = vc4_load_tracker_duplicate_state,
        .atomic_destroy_state = vc4_load_tracker_destroy_state,
+       .atomic_create_state = vc4_load_tracker_create_state,
 };
 
 static void vc4_load_tracker_obj_fini(struct drm_device *dev, void *unused)
 {
        struct vc4_dev *vc4 = to_vc4_dev(dev);
@@ -730,18 +754,12 @@ static void vc4_load_tracker_obj_fini(struct drm_device 
*dev, void *unused)
        drm_atomic_private_obj_fini(&vc4->load_tracker);
 }
 
 static int vc4_load_tracker_obj_init(struct vc4_dev *vc4)
 {
-       struct vc4_load_tracker_state *load_state;
-
-       load_state = kzalloc(sizeof(*load_state), GFP_KERNEL);
-       if (!load_state)
-               return -ENOMEM;
-
        drm_atomic_private_obj_init(&vc4->base, &vc4->load_tracker,
-                                   &load_state->base,
+                                   NULL,
                                    &vc4_load_tracker_state_funcs);
 
        return drmm_add_action_or_reset(&vc4->base, vc4_load_tracker_obj_fini, 
NULL);
 }
 
@@ -798,11 +816,26 @@ static void vc4_hvs_channels_print_state(struct 
drm_printer *p,
                drm_printf(p, "\t\tin use=%d\n", 
hvs_state->fifo_state[i].in_use);
                drm_printf(p, "\t\tload=%lu\n", 
hvs_state->fifo_state[i].fifo_load);
        }
 }
 
+static struct drm_private_state *
+vc4_hvs_channels_create_state(struct drm_private_obj *obj)
+{
+       struct vc4_hvs_state *hvs_state;
+
+       hvs_state = kzalloc(sizeof(*hvs_state), GFP_KERNEL);
+       if (!hvs_state)
+               return ERR_PTR(-ENOMEM);
+
+       __drm_atomic_helper_private_obj_create_state(obj, &hvs_state->base);
+
+       return &hvs_state->base;
+}
+
 static const struct drm_private_state_funcs vc4_hvs_state_funcs = {
+       .atomic_create_state = vc4_hvs_channels_create_state,
        .atomic_duplicate_state = vc4_hvs_channels_duplicate_state,
        .atomic_destroy_state = vc4_hvs_channels_destroy_state,
        .atomic_print_state = vc4_hvs_channels_print_state,
 };
 
@@ -813,18 +846,12 @@ static void vc4_hvs_channels_obj_fini(struct drm_device 
*dev, void *unused)
        drm_atomic_private_obj_fini(&vc4->hvs_channels);
 }
 
 static int vc4_hvs_channels_obj_init(struct vc4_dev *vc4)
 {
-       struct vc4_hvs_state *state;
-
-       state = kzalloc(sizeof(*state), GFP_KERNEL);
-       if (!state)
-               return -ENOMEM;
-
        drm_atomic_private_obj_init(&vc4->base, &vc4->hvs_channels,
-                                   &state->base,
+                                   NULL,
                                    &vc4_hvs_state_funcs);
 
        return drmm_add_action_or_reset(&vc4->base, vc4_hvs_channels_obj_fini, 
NULL);
 }
 

-- 
2.52.0

Reply via email to