The MSM dpu1 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: Rob Clark <[email protected]>
Cc: Dmitry Baryshkov <[email protected]>
Cc: Abhinav Kumar <[email protected]>
Cc: Jessica Zhang <[email protected]>
Cc: Sean Paul <[email protected]>
Cc: Marijn Suijten <[email protected]>
Cc: [email protected]
Cc: [email protected]
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 42 +++++++++++++++++----------------
 1 file changed, 22 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 
a306077647c317af9345eeff13082230906b5767..28a79e7836c0fb5c3f8a27ea5dda6f677e330bf1
 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -365,41 +365,43 @@ static void dpu_kms_global_destroy_state(struct 
drm_private_obj *obj,
        struct dpu_global_state *dpu_state = to_dpu_global_state(state);
 
        kfree(dpu_state);
 }
 
+static struct drm_private_state *
+dpu_kms_global_create_state(struct drm_private_obj *obj)
+{
+       struct drm_device *dev = obj->dev;
+       struct msm_drm_private *priv = dev->dev_private;
+       struct dpu_kms *dpu_kms = to_dpu_kms(priv->kms);
+       struct dpu_global_state *dpu_state;
+
+       dpu_state = kzalloc(sizeof(*dpu_state), GFP_KERNEL);
+       if (!dpu_state)
+               return ERR_PTR(-ENOMEM);
+
+       __drm_atomic_helper_private_obj_create_state(obj, &dpu_state->base);
+       dpu_state->rm = &dpu_kms->rm;
+
+       return &dpu_state->base;
+}
+
 static void dpu_kms_global_print_state(struct drm_printer *p,
                                       const struct drm_private_state *state)
 {
        const struct dpu_global_state *global_state = 
to_dpu_global_state(state);
 
        dpu_rm_print_state(p, global_state);
 }
 
 static const struct drm_private_state_funcs dpu_kms_global_state_funcs = {
+       .atomic_create_state = dpu_kms_global_create_state,
        .atomic_duplicate_state = dpu_kms_global_duplicate_state,
        .atomic_destroy_state = dpu_kms_global_destroy_state,
        .atomic_print_state = dpu_kms_global_print_state,
 };
 
-static int dpu_kms_global_obj_init(struct dpu_kms *dpu_kms)
-{
-       struct dpu_global_state *state;
-
-       state = kzalloc(sizeof(*state), GFP_KERNEL);
-       if (!state)
-               return -ENOMEM;
-
-       drm_atomic_private_obj_init(dpu_kms->dev, &dpu_kms->global_state,
-                                   &state->base,
-                                   &dpu_kms_global_state_funcs);
-
-       state->rm = &dpu_kms->rm;
-
-       return 0;
-}
-
 static void dpu_kms_global_obj_fini(struct dpu_kms *dpu_kms)
 {
        drm_atomic_private_obj_fini(&dpu_kms->global_state);
 }
 
@@ -1156,13 +1158,13 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
        dev = dpu_kms->dev;
 
        dev->mode_config.cursor_width = 512;
        dev->mode_config.cursor_height = 512;
 
-       rc = dpu_kms_global_obj_init(dpu_kms);
-       if (rc)
-               return rc;
+       drm_atomic_private_obj_init(dpu_kms->dev, &dpu_kms->global_state,
+                                   NULL,
+                                   &dpu_kms_global_state_funcs);
 
        atomic_set(&dpu_kms->bandwidth_ref, 0);
 
        rc = pm_runtime_resume_and_get(&dpu_kms->pdev->dev);
        if (rc < 0)

-- 
2.51.0

Reply via email to