]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/msm: dpu1: Switch private_obj initialization to atomic_create_state
authorMaxime Ripard <mripard@kernel.org>
Wed, 28 Jan 2026 12:43:55 +0000 (13:43 +0100)
committerMaxime Ripard <mripard@kernel.org>
Tue, 10 Feb 2026 09:07:17 +0000 (10:07 +0100)
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.

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Link: https://patch.msgid.link/20260128-drm-private-obj-reset-v4-11-90891fa3d3b0@redhat.com
Signed-off-by: Maxime Ripard <mripard@kernel.org>
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c

index 0623f1dbed97bcd1e210e0df323ddf6ac4e7616d..3ae0987cfffee243ab9e181f35e0cb1b9b9dc406 100644 (file)
@@ -367,6 +367,24 @@ static void dpu_kms_global_destroy_state(struct drm_private_obj *obj,
        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)
 {
@@ -376,28 +394,12 @@ static void dpu_kms_global_print_state(struct drm_printer *p,
 }
 
 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);
@@ -1158,9 +1160,9 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
        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);