summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Ripard <mripard@kernel.org>2026-01-28 13:43:55 +0100
committerMaxime Ripard <mripard@kernel.org>2026-02-10 10:07:17 +0100
commit9bf5b4dfe1ea7af0bc7846bec2c46da68a6f03e6 (patch)
treea7414bea9cb6d1193012d1e0a469ba1dfb6d73dc
parent4ada3ac5ffbc5279ab4bb16a7e038c027c0fa19a (diff)
downloadlinux-9bf5b4dfe1ea7af0bc7846bec2c46da68a6f03e6.tar.gz
linux-9bf5b4dfe1ea7af0bc7846bec2c46da68a6f03e6.zip
drm/msm: dpu1: Switch private_obj initialization to atomic_create_state
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>
-rw-r--r--drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c42
1 files 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 0623f1dbed97..3ae0987cfffe 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -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);