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 reset 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 | 31 ++++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 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..04baf072e8510ce8260f1ec609ba8f2b22f7c11e
 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -365,10 +365,30 @@ 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 void dpu_kms_global_reset(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;
+
+       if (obj->state) {
+               dpu_kms_global_destroy_state(obj, obj->state);
+               obj->state = NULL;
+       }
+
+       dpu_state = kzalloc(sizeof(*dpu_state), GFP_KERNEL);
+       if (!dpu_state)
+               return;
+
+       __drm_atomic_helper_private_obj_reset(obj, &dpu_state->base);
+       dpu_state->rm = &dpu_kms->rm;
+}
+
 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);
 
@@ -377,26 +397,19 @@ static void dpu_kms_global_print_state(struct drm_printer 
*p,
 
 static const struct drm_private_state_funcs dpu_kms_global_state_funcs = {
        .atomic_duplicate_state = dpu_kms_global_duplicate_state,
        .atomic_destroy_state = dpu_kms_global_destroy_state,
        .atomic_print_state = dpu_kms_global_print_state,
+       .reset = dpu_kms_global_reset,
 };
 
 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,
+                                   NULL,
                                    &dpu_kms_global_state_funcs);
 
-       state->rm = &dpu_kms->rm;
-
        return 0;
 }
 
 static void dpu_kms_global_obj_fini(struct dpu_kms *dpu_kms)
 {

-- 
2.51.0

Reply via email to